summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorSean Finney <seanius@debian.org>2009-04-10 14:09:48 +0200
committerSean Finney <seanius@debian.org>2009-04-10 14:09:48 +0200
commitcd0b49c72aee33b3e44a9c589fcd93b9e1c7a64f (patch)
tree1315c623bb7d9dfa8d366fa9cd2c6834ceeb5da5 /ext
parent9ea47aab740772adf0c69d8c94b208a464e599ea (diff)
downloadphp-cd0b49c72aee33b3e44a9c589fcd93b9e1c7a64f.tar.gz
Imported Upstream version 5.2.9.dfsg.1upstream/5.2.9.dfsg.1
Diffstat (limited to 'ext')
-rw-r--r--ext/bcmath/bcmath.c4
-rw-r--r--ext/bcmath/php_bcmath.h4
-rw-r--r--ext/bz2/bz2.c5
-rw-r--r--ext/bz2/bz2_filter.c62
-rw-r--r--ext/bz2/php_bz2.h4
-rw-r--r--ext/calendar/cal_unix.c2
-rw-r--r--ext/calendar/calendar.c4
-rw-r--r--ext/calendar/easter.c2
-rw-r--r--ext/com_dotnet/com_com.c4
-rw-r--r--ext/com_dotnet/com_dotnet.c4
-rw-r--r--ext/com_dotnet/com_extension.c4
-rw-r--r--ext/com_dotnet/com_handlers.c4
-rw-r--r--ext/com_dotnet/com_iterator.c4
-rw-r--r--ext/com_dotnet/com_misc.c4
-rw-r--r--ext/com_dotnet/com_olechar.c4
-rwxr-xr-xext/com_dotnet/com_persist.c4
-rw-r--r--ext/com_dotnet/com_saproxy.c4
-rw-r--r--ext/com_dotnet/com_typeinfo.c4
-rw-r--r--ext/com_dotnet/com_variant.c4
-rw-r--r--ext/com_dotnet/com_wrapper.c4
-rw-r--r--ext/com_dotnet/php_com_dotnet.h4
-rw-r--r--ext/com_dotnet/php_com_dotnet_internal.h4
-rw-r--r--ext/ctype/ctype.c2
-rw-r--r--ext/ctype/php_ctype.h2
-rw-r--r--ext/curl/config.m44
-rw-r--r--ext/curl/interface.c81
-rw-r--r--ext/curl/multi.c4
-rw-r--r--ext/curl/php_curl.h6
-rw-r--r--ext/curl/streams.c4
-rw-r--r--ext/curl/tests/bug45161.phpt36
-rw-r--r--ext/curl/tests/bug46739.phpt13
-rw-r--r--ext/date/lib/astro.c4
-rw-r--r--ext/date/lib/dow.c4
-rw-r--r--ext/date/lib/parse_date.c36335
-rw-r--r--ext/date/lib/parse_date.c.orig36479
-rw-r--r--ext/date/lib/parse_date.re21
-rw-r--r--ext/date/lib/parse_tz.c78
-rw-r--r--ext/date/lib/timelib.c4
-rw-r--r--ext/date/lib/timelib.h5
-rw-r--r--ext/date/lib/timelib_structs.h6
-rw-r--r--ext/date/lib/timezonedb.h6017
-rw-r--r--ext/date/lib/tm2unixtime.c57
-rw-r--r--ext/date/lib/unixtime2tm.c20
-rw-r--r--ext/date/php_date.c61
-rw-r--r--ext/date/php_date.h4
-rw-r--r--ext/date/tests/bug43452.phpt71
-rw-r--r--ext/date/tests/bug46268.phpt23
-rw-r--r--ext/date/tests/date_default_timezone_get_error.phpt27
-rw-r--r--ext/date/tests/date_default_timezone_set_error.phpt41
-rw-r--r--ext/date/tests/date_default_timezone_set_variation1.phpt200
-rw-r--r--ext/date/tests/date_parse_001.phpt4
-rw-r--r--ext/date/tests/date_sun_info_error.phpt46
-rw-r--r--ext/date/tests/date_sun_info_variation1.phpt491
-rw-r--r--ext/date/tests/date_sun_info_variation2.phpt492
-rw-r--r--ext/date/tests/date_sun_info_variation3.phpt493
-rw-r--r--ext/date/tests/date_sunrise_and_sunset_basic.phpt28
-rw-r--r--ext/date/tests/date_sunrise_error.phpt41
-rw-r--r--ext/date/tests/date_sunrise_variation1.phpt315
-rw-r--r--ext/date/tests/date_sunrise_variation2.phpt212
-rw-r--r--ext/date/tests/date_sunrise_variation3.phpt294
-rw-r--r--ext/date/tests/date_sunrise_variation4.phpt296
-rw-r--r--ext/date/tests/date_sunrise_variation5.phpt296
-rw-r--r--ext/date/tests/date_sunrise_variation6.phpt295
-rw-r--r--ext/date/tests/date_sunrise_variation7.phpt57
-rw-r--r--ext/date/tests/date_sunrise_variation8.phpt73
-rw-r--r--ext/date/tests/date_sunrise_variation9.phpt47
-rw-r--r--ext/date/tests/date_sunset_error.phpt50
-rw-r--r--ext/date/tests/date_sunset_variation1.phpt316
-rw-r--r--ext/date/tests/date_sunset_variation2.phpt211
-rw-r--r--ext/date/tests/date_sunset_variation3.phpt297
-rw-r--r--ext/date/tests/date_sunset_variation4.phpt296
-rw-r--r--ext/date/tests/date_sunset_variation5.phpt296
-rw-r--r--ext/date/tests/date_sunset_variation6.phpt296
-rw-r--r--ext/date/tests/date_sunset_variation7.phpt75
-rw-r--r--ext/date/tests/date_sunset_variation8.phpt55
-rw-r--r--ext/date/tests/date_sunset_variation9.phpt47
-rw-r--r--ext/date/tests/getdate_basic.phpt76
-rw-r--r--ext/date/tests/getdate_error.phpt31
-rw-r--r--ext/date/tests/getdate_variation1.phpt444
-rw-r--r--ext/date/tests/getdate_variation2.phpt114
-rw-r--r--ext/date/tests/getdate_variation3.phpt114
-rw-r--r--ext/date/tests/getdate_variation4.phpt141
-rw-r--r--ext/date/tests/getdate_variation5.phpt223
-rw-r--r--ext/date/tests/getdate_variation6.phpt109
-rw-r--r--ext/date/tests/getdate_variation7.phpt78
-rw-r--r--ext/date/tests/gettimeofday_basic.phpt55
-rw-r--r--ext/date/tests/gettimeofday_error.phpt29
-rw-r--r--ext/date/tests/gettimeofday_variation1.phpt284
-rw-r--r--ext/date/tests/gmdate_basic.phpt30
-rw-r--r--ext/date/tests/gmdate_error.phpt41
-rw-r--r--ext/date/tests/gmdate_variation1.phpt221
-rw-r--r--ext/date/tests/gmdate_variation10.phpt69
-rw-r--r--ext/date/tests/gmdate_variation11.phpt45
-rw-r--r--ext/date/tests/gmdate_variation12.phpt48
-rw-r--r--ext/date/tests/gmdate_variation13.phpt82
-rw-r--r--ext/date/tests/gmdate_variation14.phpt34
-rw-r--r--ext/date/tests/gmdate_variation2.phpt210
-rw-r--r--ext/date/tests/gmdate_variation3.phpt59
-rw-r--r--ext/date/tests/gmdate_variation4.phpt45
-rw-r--r--ext/date/tests/gmdate_variation5.phpt29
-rw-r--r--ext/date/tests/gmdate_variation6.phpt61
-rw-r--r--ext/date/tests/gmdate_variation7.phpt60
-rw-r--r--ext/date/tests/gmdate_variation8.phpt60
-rw-r--r--ext/date/tests/gmdate_variation9.phpt81
-rw-r--r--ext/date/tests/gmmktime_basic.phpt35
-rw-r--r--ext/date/tests/gmmktime_error.phpt39
-rw-r--r--ext/date/tests/gmmktime_variation1.phpt194
-rw-r--r--ext/date/tests/gmmktime_variation2.phpt194
-rw-r--r--ext/date/tests/gmmktime_variation3.phpt194
-rw-r--r--ext/date/tests/gmmktime_variation4.phpt194
-rw-r--r--ext/date/tests/gmmktime_variation5.phpt194
-rw-r--r--ext/date/tests/gmmktime_variation6.phpt190
-rw-r--r--ext/date/tests/gmmktime_variation7.phpt54
-rw-r--r--ext/date/tests/gmmktime_variation8.phpt44
-rw-r--r--ext/date/tests/gmmktime_variation9.phpt62
-rw-r--r--ext/date/tests/gmstrftime_basic.phpt29
-rw-r--r--ext/date/tests/gmstrftime_error.phpt38
-rw-r--r--ext/date/tests/gmstrftime_variation1.phpt220
-rw-r--r--ext/date/tests/gmstrftime_variation10.phpt50
-rw-r--r--ext/date/tests/gmstrftime_variation11.phpt37
-rw-r--r--ext/date/tests/gmstrftime_variation12.phpt37
-rw-r--r--ext/date/tests/gmstrftime_variation13.phpt60
-rw-r--r--ext/date/tests/gmstrftime_variation14.phpt60
-rw-r--r--ext/date/tests/gmstrftime_variation15.phpt55
-rw-r--r--ext/date/tests/gmstrftime_variation16.phpt55
-rw-r--r--ext/date/tests/gmstrftime_variation17.phpt37
-rw-r--r--ext/date/tests/gmstrftime_variation18.phpt37
-rw-r--r--ext/date/tests/gmstrftime_variation19.phpt50
-rw-r--r--ext/date/tests/gmstrftime_variation2.phpt202
-rw-r--r--ext/date/tests/gmstrftime_variation20.phpt52
-rw-r--r--ext/date/tests/gmstrftime_variation21.phpt55
-rw-r--r--ext/date/tests/gmstrftime_variation22.phpt55
-rw-r--r--ext/date/tests/gmstrftime_variation3.phpt52
-rw-r--r--ext/date/tests/gmstrftime_variation4.phpt47
-rw-r--r--ext/date/tests/gmstrftime_variation5.phpt51
-rw-r--r--ext/date/tests/gmstrftime_variation6.phpt59
-rw-r--r--ext/date/tests/gmstrftime_variation7.phpt49
-rw-r--r--ext/date/tests/gmstrftime_variation8.phpt39
-rw-r--r--ext/date/tests/gmstrftime_variation9.phpt50
-rw-r--r--ext/date/tests/idate_basic.phpt24
-rw-r--r--ext/date/tests/idate_variation1.phpt301
-rw-r--r--ext/date/tests/idate_variation2.phpt191
-rw-r--r--ext/date/tests/idate_variation3.phpt35
-rw-r--r--ext/date/tests/idate_variation4.phpt66
-rw-r--r--ext/date/tests/idate_variation5.phpt62
-rw-r--r--ext/date/tests/idate_variation6.phpt34
-rw-r--r--ext/date/tests/localtime_basic.phpt93
-rw-r--r--ext/date/tests/localtime_variation1.phpt658
-rw-r--r--ext/date/tests/localtime_variation2.phpt643
-rw-r--r--ext/date/tests/localtime_variation3.phpt116
-rw-r--r--ext/date/tests/localtime_variation4.phpt162
-rw-r--r--ext/date/tests/localtime_variation5.phpt162
-rw-r--r--ext/date/tests/microtime_basic.phpt20
-rw-r--r--ext/date/tests/microtime_error.phpt72
-rw-r--r--ext/date/tests/mktime-3-64bit.phpt10
-rw-r--r--ext/date/tests/mktime-3.phpt7
-rw-r--r--ext/date/tests/strftime_basic.phpt30
-rw-r--r--ext/date/tests/strftime_error.phpt30
-rw-r--r--ext/date/tests/strftime_variation1.phpt222
-rw-r--r--ext/date/tests/strftime_variation10.phpt50
-rw-r--r--ext/date/tests/strftime_variation11.phpt37
-rw-r--r--ext/date/tests/strftime_variation12.phpt37
-rw-r--r--ext/date/tests/strftime_variation13.phpt60
-rw-r--r--ext/date/tests/strftime_variation14.phpt60
-rw-r--r--ext/date/tests/strftime_variation15.phpt55
-rw-r--r--ext/date/tests/strftime_variation16.phpt55
-rw-r--r--ext/date/tests/strftime_variation17.phpt36
-rw-r--r--ext/date/tests/strftime_variation18.phpt36
-rw-r--r--ext/date/tests/strftime_variation19.phpt50
-rw-r--r--ext/date/tests/strftime_variation2.phpt191
-rw-r--r--ext/date/tests/strftime_variation20.phpt52
-rw-r--r--ext/date/tests/strftime_variation21.phpt55
-rw-r--r--ext/date/tests/strftime_variation22.phpt55
-rw-r--r--ext/date/tests/strftime_variation23.phpt36
-rw-r--r--ext/date/tests/strftime_variation3.phpt52
-rw-r--r--ext/date/tests/strftime_variation4.phpt48
-rw-r--r--ext/date/tests/strftime_variation5.phpt50
-rw-r--r--ext/date/tests/strftime_variation6.phpt60
-rw-r--r--ext/date/tests/strftime_variation7.phpt50
-rw-r--r--ext/date/tests/strftime_variation8.phpt31
-rw-r--r--ext/date/tests/strftime_variation9.phpt50
-rw-r--r--ext/date/tests/strtotime_basic.phpt47
-rw-r--r--ext/date/tests/time_basic.phpt16
-rw-r--r--ext/date/tests/time_error.phpt20
-rw-r--r--ext/dba/dba.c6
-rw-r--r--ext/dba/dba_cdb.c4
-rwxr-xr-xext/dba/dba_db1.c394
-rw-r--r--ext/dba/dba_db2.c4
-rw-r--r--ext/dba/dba_db3.c4
-rw-r--r--ext/dba/dba_db4.c15
-rw-r--r--ext/dba/dba_dbm.c4
-rw-r--r--ext/dba/dba_flatfile.c4
-rw-r--r--ext/dba/dba_gdbm.c4
-rw-r--r--ext/dba/dba_inifile.c4
-rw-r--r--ext/dba/dba_ndbm.c4
-rwxr-xr-xext/dba/dba_qdbm.c4
-rw-r--r--ext/dba/libcdb/cdb.c6
-rw-r--r--ext/dba/libcdb/cdb.h4
-rw-r--r--ext/dba/libcdb/cdb_make.c6
-rw-r--r--ext/dba/libcdb/cdb_make.h4
-rw-r--r--ext/dba/libcdb/uint32.c4
-rw-r--r--ext/dba/libcdb/uint32.h4
-rw-r--r--ext/dba/libflatfile/flatfile.c6
-rw-r--r--ext/dba/libflatfile/flatfile.h4
-rw-r--r--ext/dba/libinifile/inifile.c10
-rw-r--r--ext/dba/libinifile/inifile.h4
-rw-r--r--ext/dba/php_dba.h4
-rw-r--r--ext/dba/tests/dba_db4.phpt18
-rw-r--r--ext/dom/attr.c4
-rw-r--r--ext/dom/cdatasection.c6
-rw-r--r--ext/dom/characterdata.c4
-rw-r--r--ext/dom/comment.c6
-rw-r--r--ext/dom/document.c8
-rw-r--r--ext/dom/documentfragment.c6
-rw-r--r--ext/dom/documenttype.c4
-rw-r--r--ext/dom/dom_ce.h4
-rw-r--r--ext/dom/dom_fe.h4
-rw-r--r--ext/dom/dom_iterators.c4
-rw-r--r--ext/dom/dom_properties.h4
-rw-r--r--ext/dom/domconfiguration.c8
-rw-r--r--ext/dom/domerror.c4
-rw-r--r--ext/dom/domerrorhandler.c4
-rw-r--r--ext/dom/domexception.c4
-rw-r--r--ext/dom/domimplementation.c4
-rw-r--r--ext/dom/domimplementationlist.c4
-rw-r--r--ext/dom/domimplementationsource.c4
-rw-r--r--ext/dom/domlocator.c4
-rw-r--r--ext/dom/domstringlist.c4
-rw-r--r--ext/dom/element.c12
-rw-r--r--ext/dom/entity.c4
-rw-r--r--ext/dom/entityreference.c4
-rw-r--r--ext/dom/namednodemap.c4
-rw-r--r--ext/dom/namelist.c4
-rw-r--r--ext/dom/node.c6
-rw-r--r--ext/dom/nodelist.c4
-rw-r--r--ext/dom/notation.c4
-rw-r--r--ext/dom/php_dom.c6
-rw-r--r--ext/dom/php_dom.h4
-rw-r--r--ext/dom/processinginstruction.c6
-rw-r--r--ext/dom/string_extend.c4
-rw-r--r--ext/dom/tests/DOMCharacterData_appendData_basic.phpt35
-rw-r--r--ext/dom/tests/DOMComment_appendData_basic.phpt21
-rw-r--r--ext/dom/tests/DOMComment_appendData_basic_Sullivan.phpt37
-rw-r--r--ext/dom/tests/DOMComment_insertData_basic.phpt21
-rw-r--r--ext/dom/tests/DOMComment_insertData_error1.phpt24
-rw-r--r--ext/dom/tests/DOMComment_insertData_error2.phpt24
-rw-r--r--ext/dom/tests/DOMComment_replaceData_basic.phpt29
-rw-r--r--ext/dom/tests/DOMComment_replaceData_error1.phpt24
-rw-r--r--ext/dom/tests/DOMComment_replaceData_error2.phpt24
-rw-r--r--ext/dom/tests/DOMDocumentFragment_appendXML_hasChildNodes_basic.phpt23
-rw-r--r--ext/dom/tests/DOMDocument_createAttribute_basic.phpt26
-rw-r--r--ext/dom/tests/DOMDocument_createAttribute_error.phpt27
-rw-r--r--ext/dom/tests/DOMDocument_createAttribute_error1.phpt29
-rw-r--r--ext/dom/tests/DOMDocument_createAttribute_variation.phpt14
-rw-r--r--ext/dom/tests/DOMDocument_createProcessingInstruction_basic.phpt30
-rw-r--r--ext/dom/tests/DOMDocument_createProcessingInstruction_error.phpt31
-rw-r--r--ext/dom/tests/DOMDocument_loadHTML_basic.phpt18
-rw-r--r--ext/dom/tests/DOMDocument_save_basic.phpt33
-rw-r--r--ext/dom/tests/DOMElement_hasAttributes_basic.phpt51
-rw-r--r--ext/dom/tests/DOMNode_cloneNode_basic.phpt111
-rw-r--r--ext/dom/tests/DOMNode_hasChildNodes_basic.phpt43
-rw-r--r--ext/dom/tests/DOMNode_issamenode_basic.phpt37
-rw-r--r--ext/dom/tests/DOMNode_normalize_basic.phpt64
-rw-r--r--ext/dom/tests/DOMNode_removeChild_basic.phpt113
-rw-r--r--ext/dom/tests/DOMNode_replaceChild_basic.phpt44
-rw-r--r--ext/dom/tests/DOMText_appendData_basic.phpt35
-rw-r--r--ext/dom/tests/bug34276.phpt2
-rw-r--r--ext/dom/tests/bug35342.phpt2
-rw-r--r--ext/dom/tests/bug42082.phpt4
-rw-r--r--ext/dom/tests/bug45251.phpt30
-rw-r--r--ext/dom/tests/bug46335.phpt35
-rw-r--r--ext/dom/tests/dom_comment_basic.phpt46
-rw-r--r--ext/dom/tests/dom_comment_variation.phpt33
-rw-r--r--ext/dom/text.c14
-rw-r--r--ext/dom/typeinfo.c4
-rw-r--r--ext/dom/userdatahandler.c4
-rw-r--r--ext/dom/xml_common.h4
-rw-r--r--ext/dom/xpath.c4
-rw-r--r--ext/exif/exif.c26
-rw-r--r--ext/exif/php_exif.h4
-rw-r--r--ext/exif/tests/exif007.phpt39
-rw-r--r--ext/exif/tests/exif008.phpt65
-rw-r--r--ext/exif/tests/exif009.phpt65
-rw-r--r--ext/exif/tests/exif010.phpt91
-rw-r--r--ext/exif/tests/exif011.phpt91
-rw-r--r--ext/exif/tests/exif012.phptbin0 -> 2003 bytes
-rw-r--r--ext/exif/tests/exif013.phptbin0 -> 2006 bytes
-rw-r--r--ext/exif/tests/exif014.phptbin0 -> 2515 bytes
-rw-r--r--ext/exif/tests/exif015.phptbin0 -> 2518 bytes
-rw-r--r--ext/exif/tests/exif016.phpt1622
-rw-r--r--ext/exif/tests/exif017.phpt1622
-rw-r--r--ext/exif/tests/exif018.phpt1646
-rw-r--r--ext/exif/tests/exif020.phpt1659
-rw-r--r--ext/exif/tests/exif021.phpt1659
-rw-r--r--ext/exif/tests/exif022.phpt1683
-rw-r--r--ext/exif/tests/exif023.phpt1683
-rw-r--r--ext/exif/tests/exif024.phpt55
-rw-r--r--ext/exif/tests/exif025.phpt55
-rw-r--r--ext/exif/tests/exif026.phpt1632
-rw-r--r--ext/exif/tests/exif027.phpt1632
-rw-r--r--ext/exif/tests/exif_imagetype_basic.phpt23
-rw-r--r--ext/exif/tests/exif_imagetype_error.phpt45
-rw-r--r--ext/exif/tests/exif_imagetype_variation1.phpt224
-rw-r--r--ext/exif/tests/exif_read_exif_data_basic.phpt62
-rw-r--r--ext/exif/tests/exif_tagname_basic.phpt29
-rw-r--r--ext/exif/tests/exif_tagname_error.phpt36
-rw-r--r--ext/exif/tests/exif_tagname_variation1.phpt164
-rw-r--r--ext/exif/tests/image007.jpgbin0 -> 283 bytes
-rw-r--r--ext/exif/tests/image008.jpgbin0 -> 527 bytes
-rw-r--r--ext/exif/tests/image009.jpgbin0 -> 527 bytes
-rw-r--r--ext/exif/tests/image010.jpgbin0 -> 741 bytes
-rw-r--r--ext/exif/tests/image011.jpgbin0 -> 741 bytes
-rw-r--r--ext/exif/tests/image012.jpgbin0 -> 721 bytes
-rw-r--r--ext/exif/tests/image013.jpgbin0 -> 721 bytes
-rw-r--r--ext/exif/tests/image014.jpgbin0 -> 935 bytes
-rw-r--r--ext/exif/tests/image015.jpgbin0 -> 935 bytes
-rw-r--r--ext/exif/tests/image016.tiffbin0 -> 1874 bytes
-rw-r--r--ext/exif/tests/image017.tiffbin0 -> 1874 bytes
-rw-r--r--ext/exif/tests/image018.tiffbin0 -> 2088 bytes
-rw-r--r--ext/exif/tests/image020.tiffbin0 -> 2068 bytes
-rw-r--r--ext/exif/tests/image021.tiffbin0 -> 2068 bytes
-rw-r--r--ext/exif/tests/image022.tiffbin0 -> 2282 bytes
-rw-r--r--ext/exif/tests/image023.tiffbin0 -> 2282 bytes
-rw-r--r--ext/exif/tests/image024.jpgbin0 -> 417 bytes
-rw-r--r--ext/exif/tests/image025.jpgbin0 -> 417 bytes
-rw-r--r--ext/exif/tests/image026.tiffbin0 -> 1984 bytes
-rw-r--r--ext/exif/tests/image027.tiffbin0 -> 1984 bytes
-rw-r--r--ext/fbsql/php_fbsql.c4
-rw-r--r--ext/fbsql/php_fbsql.h4
-rw-r--r--ext/fdf/fdf.c4
-rw-r--r--ext/fdf/php_fdf.h4
-rw-r--r--ext/filter/callback_filter.c4
-rw-r--r--ext/filter/filter.c8
-rw-r--r--ext/filter/filter_private.h4
-rw-r--r--ext/filter/logical_filters.c23
-rw-r--r--ext/filter/php_filter.h4
-rw-r--r--ext/filter/sanitizing_filters.c4
-rw-r--r--ext/filter/tests/016.phpt8
-rw-r--r--ext/filter/tests/bug42718-2.phpt20
-rw-r--r--ext/filter/tests/bug42718.phpt23
-rw-r--r--ext/filter/tests/bug46973.phpt14
-rw-r--r--ext/ftp/ftp.c4
-rw-r--r--ext/ftp/ftp.h4
-rw-r--r--ext/ftp/php_ftp.c4
-rw-r--r--ext/ftp/php_ftp.h4
-rw-r--r--ext/ftp/tests/ftp_fget_basic.phpt43
-rw-r--r--ext/ftp/tests/ftp_get_basic.phpt40
-rw-r--r--ext/ftp/tests/ftp_mdtm_basic.phpt48
-rw-r--r--ext/ftp/tests/server.inc44
-rw-r--r--ext/gd/gd.c23
-rw-r--r--ext/gd/gd_ctx.c4
-rw-r--r--ext/gd/libgd/gd.c3
-rw-r--r--ext/gd/libgd/gd_png.c7
-rw-r--r--ext/gd/libgd/xbm.c4
-rw-r--r--ext/gd/php_gd.h4
-rw-r--r--ext/gd/tests/gd_info_error.phpt38
-rw-r--r--ext/gd/tests/gd_info_variation1.phpt50
-rw-r--r--ext/gd/tests/image_type_to_mime_type_error.phpt35
-rw-r--r--ext/gd/tests/image_type_to_mime_type_variation1.phpt138
-rw-r--r--ext/gd/tests/image_type_to_mime_type_variation2.phpt80
-rw-r--r--ext/gd/tests/image_type_to_mime_type_variation3.phpt76
-rw-r--r--ext/gd/tests/image_type_to_mime_type_variation4.phpt23
-rw-r--r--ext/gd/tests/imagecolorallocate_basic.phpt35
-rw-r--r--ext/gd/tests/imagecolorallocate_error.phpt51
-rw-r--r--ext/gd/tests/imagecolorallocate_variation1.phpt267
-rw-r--r--ext/gd/tests/imagecolorallocate_variation2.phpt192
-rw-r--r--ext/gd/tests/imagecolorallocate_variation3.phpt192
-rw-r--r--ext/gd/tests/imagecolorallocate_variation4.phpt191
-rw-r--r--ext/gd/tests/imagecolorallocate_variation5.phpt90
-rw-r--r--ext/gd/tests/imagecolorallocate_variation6.phpt56
-rw-r--r--ext/gd/tests/imagecolorstotal_basic.phpt36
-rw-r--r--ext/gd/tests/imagecolorstotal_error.phpt54
-rw-r--r--ext/gd/tests/imageloadfont_invalid.phpt26
-rw-r--r--ext/gd/tests/imagerotate_overflow.phpt32
-rw-r--r--ext/gd/tests/php.gifbin0 -> 2523 bytes
-rw-r--r--ext/gettext/gettext.c211
-rw-r--r--ext/gettext/php_gettext.h4
-rw-r--r--ext/gettext/tests/44938.phpt85
-rw-r--r--ext/gettext/tests/dcngettext.phpt2
-rw-r--r--ext/gmp/gmp.c2
-rw-r--r--ext/gmp/php_gmp.h2
-rw-r--r--ext/hash/hash.c4
-rw-r--r--ext/hash/hash_adler32.c4
-rw-r--r--ext/hash/hash_crc32.c16
-rw-r--r--ext/hash/hash_gost.c4
-rw-r--r--ext/hash/hash_haval.c4
-rw-r--r--ext/hash/hash_md.c4
-rw-r--r--ext/hash/hash_ripemd.c4
-rw-r--r--ext/hash/hash_salsa.c4
-rw-r--r--ext/hash/hash_sha.c4
-rw-r--r--ext/hash/hash_snefru.c4
-rw-r--r--ext/hash/hash_tiger.c4
-rw-r--r--ext/hash/hash_whirlpool.c4
-rw-r--r--ext/hash/php_hash.h4
-rw-r--r--ext/hash/php_hash_adler32.h4
-rw-r--r--ext/hash/php_hash_crc32.h4
-rw-r--r--ext/hash/php_hash_crc32_tables.h4
-rw-r--r--ext/hash/php_hash_gost.h4
-rw-r--r--ext/hash/php_hash_haval.h4
-rw-r--r--ext/hash/php_hash_md.h4
-rw-r--r--ext/hash/php_hash_ripemd.h4
-rw-r--r--ext/hash/php_hash_salsa.h4
-rw-r--r--ext/hash/php_hash_sha.h4
-rw-r--r--ext/hash/php_hash_snefru.h4
-rw-r--r--ext/hash/php_hash_snefru_tables.h4
-rw-r--r--ext/hash/php_hash_tiger.h4
-rw-r--r--ext/hash/php_hash_tiger_tables.h4
-rw-r--r--ext/hash/php_hash_types.h4
-rw-r--r--ext/hash/php_hash_whirlpool.h4
-rw-r--r--ext/hash/php_hash_whirlpool_tables.h4
-rw-r--r--ext/hash/tests/crc32.phpt12
-rw-r--r--ext/hash/tests/hash_algos.phpt101
-rw-r--r--ext/hash/tests/hash_error.phpt48
-rw-r--r--ext/hash/tests/hash_file_basic1.phpt87
-rw-r--r--ext/hash/tests/hash_file_error1.phpt52
-rw-r--r--ext/hash/tests/hash_hmac_basic.phpt68
-rw-r--r--ext/hash/tests/hash_hmac_error.phpt55
-rw-r--r--ext/hash/tests/hash_hmac_file_basic.phpt103
-rw-r--r--ext/hash/tests/hash_hmac_file_error.phpt56
-rw-r--r--ext/iconv/iconv.c4
-rw-r--r--ext/iconv/php_iconv.h4
-rw-r--r--ext/imap/config.m432
-rw-r--r--ext/imap/config.w323
-rw-r--r--ext/imap/php_imap.c304
-rw-r--r--ext/imap/php_imap.h4
-rw-r--r--ext/imap/tests/README45
-rw-r--r--ext/imap/tests/bug45705_1.phpt20
-rw-r--r--ext/imap/tests/bug45705_2.phpt53
-rw-r--r--ext/imap/tests/bug46918.phpt69
-rw-r--r--ext/imap/tests/clean.inc25
-rw-r--r--ext/imap/tests/imap_8bit_basic.phpt33
-rw-r--r--ext/imap/tests/imap_alerts_error.phpt31
-rw-r--r--ext/imap/tests/imap_append_basic.phpt72
-rw-r--r--ext/imap/tests/imap_base64_basic.phpt47
-rw-r--r--ext/imap/tests/imap_binary_basic.phpt48
-rw-r--r--ext/imap/tests/imap_body_basic.phpt44
-rw-r--r--ext/imap/tests/imap_bodystruct_basic.phpt93
-rw-r--r--ext/imap/tests/imap_clearflag_full_basic.phpt127
-rw-r--r--ext/imap/tests/imap_close_basic.phpt56
-rw-r--r--ext/imap/tests/imap_close_error.phpt45
-rw-r--r--ext/imap/tests/imap_close_variation1.phpt214
-rw-r--r--ext/imap/tests/imap_close_variation2.phpt221
-rw-r--r--ext/imap/tests/imap_close_variation3.phpt47
-rw-r--r--ext/imap/tests/imap_close_variation4.phpt93
-rw-r--r--ext/imap/tests/imap_createmailbox_basic.phpt69
-rw-r--r--ext/imap/tests/imap_errors_basic.phpt55
-rw-r--r--ext/imap/tests/imap_fetch_overview_basic.phpt118
-rw-r--r--ext/imap/tests/imap_fetch_overview_error.phpt54
-rw-r--r--ext/imap/tests/imap_fetch_overview_variation1.phpt221
-rw-r--r--ext/imap/tests/imap_fetch_overview_variation2.phpt243
-rw-r--r--ext/imap/tests/imap_fetch_overview_variation3.phpt79
-rw-r--r--ext/imap/tests/imap_fetch_overview_variation4.phpt46
-rw-r--r--ext/imap/tests/imap_fetch_overview_variation5.phpt149
-rw-r--r--ext/imap/tests/imap_fetch_overview_variation6.phpt125
-rw-r--r--ext/imap/tests/imap_fetchbody_basic.phpt70
-rw-r--r--ext/imap/tests/imap_fetchbody_error.phpt57
-rw-r--r--ext/imap/tests/imap_fetchbody_variation1.phpt219
-rw-r--r--ext/imap/tests/imap_fetchbody_variation2.phpt221
-rw-r--r--ext/imap/tests/imap_fetchbody_variation3.phpt217
-rw-r--r--ext/imap/tests/imap_fetchbody_variation4.phpt79
-rw-r--r--ext/imap/tests/imap_fetchbody_variation5.phpt46
-rw-r--r--ext/imap/tests/imap_fetchbody_variation6.phpt66
-rw-r--r--ext/imap/tests/imap_fetchheader_basic.phpt83
-rw-r--r--ext/imap/tests/imap_fetchheader_error.phpt49
-rw-r--r--ext/imap/tests/imap_fetchheader_variation1.phpt245
-rw-r--r--ext/imap/tests/imap_fetchheader_variation2.phpt292
-rw-r--r--ext/imap/tests/imap_fetchheader_variation3.phpt77
-rw-r--r--ext/imap/tests/imap_fetchheader_variation4.phpt45
-rw-r--r--ext/imap/tests/imap_fetchheader_variation5.phpt79
-rw-r--r--ext/imap/tests/imap_include.inc150
-rw-r--r--ext/imap/tests/skipif.inc16
-rw-r--r--ext/interbase/ibase_blobs.c4
-rw-r--r--ext/interbase/ibase_events.c29
-rw-r--r--ext/interbase/ibase_query.c17
-rw-r--r--ext/interbase/ibase_service.c13
-rw-r--r--ext/interbase/interbase.c19
-rwxr-xr-xext/interbase/php_ibase_includes.h4
-rw-r--r--ext/interbase/php_ibase_udf.c4
-rw-r--r--ext/interbase/php_interbase.h4
-rw-r--r--ext/interbase/tests/bug45373.phpt49
-rw-r--r--ext/interbase/tests/bug45575.phpt22
-rw-r--r--ext/interbase/tests/bug46247.phpt36
-rw-r--r--ext/interbase/tests/bug46543.phpt28
-rw-r--r--ext/interbase/tests/ibase_affected_rows_001.phpt32
-rw-r--r--ext/interbase/tests/ibase_close_001.phpt25
-rw-r--r--ext/interbase/tests/ibase_drop_db_001.phpt31
-rw-r--r--ext/interbase/tests/ibase_errmsg_001.phpt22
-rw-r--r--ext/interbase/tests/ibase_free_query_001.phpt28
-rw-r--r--ext/interbase/tests/ibase_num_fields_001.phpt25
-rw-r--r--ext/interbase/tests/ibase_num_params_001.phpt32
-rw-r--r--ext/interbase/tests/ibase_param_info_001.phpt55
-rw-r--r--ext/interbase/tests/ibase_rollback_001.phpt41
-rw-r--r--ext/interbase/tests/ibase_trans_001.phpt21
-rw-r--r--ext/interbase/tests/ibase_trans_002.phpt34
-rwxr-xr-xext/interbase/tests/interbase.inc5
-rw-r--r--ext/json/JSON_parser.c12
-rw-r--r--ext/json/json.c31
-rw-r--r--ext/json/php_json.h4
-rw-r--r--ext/json/tests/001.phpt32
-rw-r--r--ext/json/tests/bug41567.phpt4
-rw-r--r--ext/json/tests/bug42090.phpt9
-rw-r--r--ext/json/tests/bug43941.phpt21
-rw-r--r--ext/json/tests/bug46215.phpt29
-rw-r--r--ext/json/tests/bug46944.phpt35
-rw-r--r--ext/json/tests/fail001.phpt4
-rw-r--r--ext/json/utf8_decode.c2
-rw-r--r--ext/json/utf8_to_utf16.c4
-rw-r--r--ext/ldap/ldap.c10
-rw-r--r--ext/ldap/php_ldap.h4
-rw-r--r--ext/libxml/libxml.c4
-rw-r--r--ext/libxml/php_libxml.h4
-rw-r--r--ext/mbstring/config.m427
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp932.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp936.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_htmlent.c17
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_sjis.c2
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter.c253
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_convert.c60
-rw-r--r--ext/mbstring/mb_gpc.c4
-rw-r--r--ext/mbstring/mbstring.c540
-rw-r--r--ext/mbstring/mbstring.h7
-rwxr-xr-xext/mbstring/oniguruma/enc/utf16_be.c2
-rwxr-xr-xext/mbstring/oniguruma/enc/utf16_le.c2
-rwxr-xr-xext/mbstring/oniguruma/enc/utf32_be.c2
-rwxr-xr-xext/mbstring/oniguruma/enc/utf32_le.c2
-rw-r--r--ext/mbstring/oniguruma/enc/utf8.c2
-rw-r--r--ext/mbstring/oniguruma/oniguruma.h2
-rw-r--r--ext/mbstring/oniguruma/regcomp.c2
-rw-r--r--ext/mbstring/oniguruma/regenc.h2
-rw-r--r--ext/mbstring/oniguruma/regerror.c2
-rw-r--r--ext/mbstring/oniguruma/regexec.c2
-rwxr-xr-xext/mbstring/oniguruma/regext.c2
-rw-r--r--ext/mbstring/oniguruma/reggnu.c2
-rw-r--r--ext/mbstring/oniguruma/regint.h2
-rw-r--r--ext/mbstring/oniguruma/regparse.c2
-rw-r--r--ext/mbstring/oniguruma/regparse.h2
-rw-r--r--ext/mbstring/oniguruma/regposix.c2
-rw-r--r--ext/mbstring/oniguruma/regsyntax.c2
-rw-r--r--ext/mbstring/oniguruma/regversion.c4
-rw-r--r--ext/mbstring/php_mbregex.c6
-rw-r--r--ext/mbstring/php_mbregex.h4
-rw-r--r--ext/mbstring/php_unicode.c4
-rw-r--r--ext/mbstring/php_unicode.h2
-rw-r--r--ext/mbstring/tests/bug43840.phpt75
-rw-r--r--ext/mbstring/tests/bug43841.phpt85
-rw-r--r--ext/mbstring/tests/bug43993.phpt26
-rw-r--r--ext/mbstring/tests/bug43994.phpt129
-rw-r--r--ext/mbstring/tests/bug43998.phpt71
-rw-r--r--ext/mbstring/tests/bug45239.phpt18
-rw-r--r--ext/mbstring/tests/bug45722.phpt8
-rw-r--r--ext/mbstring/tests/bug45923.phpt202
-rw-r--r--ext/mbstring/tests/bug46843.phpt12
-rw-r--r--ext/mbstring/tests/bug47399.phpt523
-rw-r--r--ext/mbstring/tests/mb_convert_encoding_variation1.phpt206
-rw-r--r--ext/mbstring/tests/mb_decode_mimeheader_basic.phpt35
-rw-r--r--ext/mbstring/tests/mb_decode_mimeheader_error.phpt42
-rw-r--r--ext/mbstring/tests/mb_decode_mimeheader_variation1.phpt209
-rw-r--r--ext/mbstring/tests/mb_decode_mimeheader_variation2.phpt51
-rw-r--r--ext/mbstring/tests/mb_decode_mimeheader_variation3.phpt29
-rw-r--r--ext/mbstring/tests/mb_encode_mimeheader_basic.phpt17
-rw-r--r--ext/mbstring/tests/mb_encode_mimeheader_basic2.phpt73
-rw-r--r--ext/mbstring/tests/mb_encode_mimeheader_basic3.phpt69
-rw-r--r--ext/mbstring/tests/mb_encode_mimeheader_indent.phpt901
-rw-r--r--ext/mbstring/tests/mb_encode_mimeheader_variation1.phpt2
-rw-r--r--ext/mbstring/tests/mb_ereg.phpt35
-rw-r--r--ext/mbstring/tests/mb_ereg_basic.phpt18
-rw-r--r--ext/mbstring/tests/mb_ereg_error.phpt6
-rw-r--r--ext/mbstring/tests/mb_ereg_match_basic.phpt59
-rw-r--r--ext/mbstring/tests/mb_ereg_match_error1.phpt58
-rw-r--r--ext/mbstring/tests/mb_ereg_replace_basic.phpt62
-rw-r--r--ext/mbstring/tests/mb_ereg_replace_error.phpt48
-rw-r--r--ext/mbstring/tests/mb_ereg_replace_variation1.phpt170
-rw-r--r--ext/mbstring/tests/mb_ereg_replace_variation2.phpt178
-rw-r--r--ext/mbstring/tests/mb_ereg_replace_variation3.phpt179
-rw-r--r--ext/mbstring/tests/mb_ereg_replace_variation4.phpt179
-rw-r--r--ext/mbstring/tests/mb_ereg_variation3.phpt52
-rw-r--r--ext/mbstring/tests/mb_ereg_variation4.phpt26
-rw-r--r--ext/mbstring/tests/mb_ereg_variation5.phpt8
-rw-r--r--ext/mbstring/tests/mb_ereg_variation6.phpt33
-rw-r--r--ext/mbstring/tests/mb_ereg_variation7.phpt18
-rw-r--r--ext/mbstring/tests/mb_internal_encoding_ini_basic2.phpt29
-rw-r--r--ext/mbstring/tests/mb_regex_encoding_variation2.phpt420
-rw-r--r--ext/mbstring/tests/mb_split.phpt8
-rw-r--r--ext/mbstring/tests/mb_split_error.phpt50
-rw-r--r--ext/mbstring/tests/mb_split_variation1.phpt262
-rw-r--r--ext/mbstring/tests/mb_split_variation2.phpt248
-rw-r--r--ext/mbstring/tests/mb_split_variation3.phpt331
-rw-r--r--ext/mbstring/tests/mb_stripos.phpt178
-rw-r--r--ext/mbstring/tests/mb_stripos_basic.phpt158
-rw-r--r--ext/mbstring/tests/mb_stripos_basic2.phpt129
-rw-r--r--ext/mbstring/tests/mb_stripos_error1.phpt51
-rw-r--r--ext/mbstring/tests/mb_stripos_error2.phpt35
-rw-r--r--ext/mbstring/tests/mb_stripos_variation1.phpt183
-rw-r--r--ext/mbstring/tests/mb_stripos_variation2.phpt183
-rw-r--r--ext/mbstring/tests/mb_stripos_variation3.phpt203
-rw-r--r--ext/mbstring/tests/mb_stripos_variation4.phpt223
-rw-r--r--ext/mbstring/tests/mb_stripos_variation5_Bug45923.phpt119
-rw-r--r--ext/mbstring/tests/mb_stristr_basic.phpt70
-rw-r--r--ext/mbstring/tests/mb_stristr_error1.phpt47
-rw-r--r--ext/mbstring/tests/mb_stristr_error2.phpt35
-rw-r--r--ext/mbstring/tests/mb_stristr_variation1.phpt207
-rw-r--r--ext/mbstring/tests/mb_stristr_variation2.phpt215
-rw-r--r--ext/mbstring/tests/mb_stristr_variation3.phpt232
-rw-r--r--ext/mbstring/tests/mb_stristr_variation4.phpt227
-rw-r--r--ext/mbstring/tests/mb_stristr_variation5.phpt69
-rw-r--r--ext/mbstring/tests/mb_strlen_basic.phpt2
-rw-r--r--ext/mbstring/tests/mb_strlen_variation1.phpt8
-rw-r--r--ext/mbstring/tests/mb_strpos.phpt42
-rw-r--r--ext/mbstring/tests/mb_strpos_basic.phpt6
-rw-r--r--ext/mbstring/tests/mb_strpos_variation2.phpt28
-rw-r--r--ext/mbstring/tests/mb_strpos_variation3.phpt14
-rw-r--r--ext/mbstring/tests/mb_strpos_variation4.phpt4
-rw-r--r--ext/mbstring/tests/mb_strpos_variation5.phpt117
-rw-r--r--ext/mbstring/tests/mb_strrchr_basic.phpt64
-rw-r--r--ext/mbstring/tests/mb_strrchr_error1.phpt47
-rw-r--r--ext/mbstring/tests/mb_strrchr_error2.phpt35
-rw-r--r--ext/mbstring/tests/mb_strrchr_variation1.phpt207
-rw-r--r--ext/mbstring/tests/mb_strrchr_variation2.phpt207
-rw-r--r--ext/mbstring/tests/mb_strrchr_variation3.phpt232
-rw-r--r--ext/mbstring/tests/mb_strrchr_variation4.phpt227
-rw-r--r--ext/mbstring/tests/mb_strrchr_variation5.phpt59
-rw-r--r--ext/mbstring/tests/mb_strrchr_variation6.phpt65
-rw-r--r--ext/mbstring/tests/mb_strrichr_basic.phpt70
-rw-r--r--ext/mbstring/tests/mb_strrichr_error1.phpt47
-rw-r--r--ext/mbstring/tests/mb_strrichr_error2.phpt35
-rw-r--r--ext/mbstring/tests/mb_strrichr_variation1.phpt207
-rw-r--r--ext/mbstring/tests/mb_strrichr_variation2.phpt207
-rw-r--r--ext/mbstring/tests/mb_strrichr_variation3.phpt232
-rw-r--r--ext/mbstring/tests/mb_strrichr_variation4.phpt227
-rw-r--r--ext/mbstring/tests/mb_strrichr_variation5.phpt69
-rw-r--r--ext/mbstring/tests/mb_strripos_basic.phpt158
-rw-r--r--ext/mbstring/tests/mb_strripos_basic2.phpt128
-rw-r--r--ext/mbstring/tests/mb_strripos_error1.phpt51
-rw-r--r--ext/mbstring/tests/mb_strripos_error2.phpt35
-rw-r--r--ext/mbstring/tests/mb_strripos_variation1.phpt183
-rw-r--r--ext/mbstring/tests/mb_strripos_variation2.phpt183
-rw-r--r--ext/mbstring/tests/mb_strripos_variation3_Bug45923.phpt206
-rw-r--r--ext/mbstring/tests/mb_strripos_variation4.phpt223
-rw-r--r--ext/mbstring/tests/mb_strripos_variation5_Bug45923.phpt115
-rw-r--r--ext/mbstring/tests/mb_strrpos_basic.phpt6
-rw-r--r--ext/mbstring/tests/mb_strrpos_variation1.phpt10
-rw-r--r--ext/mbstring/tests/mb_strrpos_variation3.phpt16
-rw-r--r--ext/mbstring/tests/mb_strrpos_variation4.phpt4
-rw-r--r--ext/mbstring/tests/mb_strstr_basic.phpt64
-rw-r--r--ext/mbstring/tests/mb_strstr_error1.phpt47
-rw-r--r--ext/mbstring/tests/mb_strstr_error2.phpt35
-rw-r--r--ext/mbstring/tests/mb_strstr_variation1.phpt207
-rw-r--r--ext/mbstring/tests/mb_strstr_variation2.phpt215
-rw-r--r--ext/mbstring/tests/mb_strstr_variation3.phpt232
-rw-r--r--ext/mbstring/tests/mb_strstr_variation4.phpt227
-rw-r--r--ext/mbstring/tests/mb_strstr_variation5.phpt59
-rw-r--r--ext/mbstring/tests/mb_strstr_variation6.phpt65
-rw-r--r--ext/mbstring/tests/mb_strtolower_variation1.phpt4
-rw-r--r--ext/mbstring/tests/mb_strtolower_variation2.phpt18
-rw-r--r--ext/mbstring/tests/mb_strtolower_variation4.phpt4
-rw-r--r--ext/mbstring/tests/mb_strtoupper_basic.phpt10
-rw-r--r--ext/mbstring/tests/mb_strtoupper_variation1.phpt3
-rw-r--r--ext/mbstring/tests/mb_strtoupper_variation2.phpt18
-rw-r--r--ext/mbstring/tests/mb_strtoupper_variation4.phpt4
-rw-r--r--ext/mbstring/tests/mb_substitute_character.phpt56
-rw-r--r--ext/mbstring/tests/mb_substitute_character_basic.phpt43
-rw-r--r--ext/mbstring/tests/mb_substitute_character_error.phpt34
-rw-r--r--ext/mbstring/tests/mb_substitute_character_variation1.phpt238
-rw-r--r--ext/mbstring/tests/mb_substitute_character_variation2.phpt39
-rw-r--r--ext/mbstring/tests/mb_substr.phpt16
-rw-r--r--ext/mbstring/tests/mb_substr_basic.phpt4
-rw-r--r--ext/mbstring/tests/mb_substr_count_variation1.phpt3
-rw-r--r--ext/mbstring/tests/mb_substr_count_variation2.phpt21
-rw-r--r--ext/mbstring/tests/mb_substr_count_variation3.phpt4
-rw-r--r--ext/mbstring/tests/mb_substr_count_variation4.phpt44
-rw-r--r--ext/mbstring/tests/mb_substr_variation1.phpt3
-rw-r--r--ext/mbstring/tests/mb_substr_variation2.phpt18
-rw-r--r--ext/mbstring/tests/mb_substr_variation4.phpt25
-rw-r--r--ext/mbstring/tests/mb_substr_variation5.phpt23
-rw-r--r--ext/mbstring/tests/mb_substr_variation6.phpt137
-rw-r--r--ext/mbstring/tests/mb_substr_variation7.phpt138
-rw-r--r--ext/mcrypt/mcrypt.c24
-rw-r--r--ext/mcrypt/php_mcrypt.h4
-rw-r--r--ext/mcrypt/tests/bug46010.phpt14
-rw-r--r--ext/mcrypt/tests/mcrypt_cbc.phpt23
-rw-r--r--ext/mcrypt/tests/mcrypt_cbc_3des_decrypt.phpt102
-rw-r--r--ext/mcrypt/tests/mcrypt_cbc_3des_encrypt.phpt85
-rw-r--r--ext/mcrypt/tests/mcrypt_cbc_error.phpt51
-rw-r--r--ext/mcrypt/tests/mcrypt_cbc_variation1.phpt235
-rw-r--r--ext/mcrypt/tests/mcrypt_cbc_variation2.phpt209
-rw-r--r--ext/mcrypt/tests/mcrypt_cbc_variation3.phpt209
-rw-r--r--ext/mcrypt/tests/mcrypt_cbc_variation4.phpt205
-rw-r--r--ext/mcrypt/tests/mcrypt_cbc_variation5.phpt235
-rw-r--r--ext/mcrypt/tests/mcrypt_cbf.phpt23
-rw-r--r--ext/mcrypt/tests/mcrypt_create_iv.phpt17
-rw-r--r--ext/mcrypt/tests/mcrypt_decrypt.phpt28
-rw-r--r--ext/mcrypt/tests/mcrypt_decrypt_3des_cbc.phpt101
-rw-r--r--ext/mcrypt/tests/mcrypt_decrypt_3des_ecb.phpt96
-rw-r--r--ext/mcrypt/tests/mcrypt_decrypt_error.phpt51
-rw-r--r--ext/mcrypt/tests/mcrypt_decrypt_variation1.phpt235
-rw-r--r--ext/mcrypt/tests/mcrypt_decrypt_variation2.phpt209
-rw-r--r--ext/mcrypt/tests/mcrypt_decrypt_variation3.phpt209
-rw-r--r--ext/mcrypt/tests/mcrypt_decrypt_variation4.phpt235
-rw-r--r--ext/mcrypt/tests/mcrypt_decrypt_variation5.phpt235
-rw-r--r--ext/mcrypt/tests/mcrypt_ecb.phpt23
-rw-r--r--ext/mcrypt/tests/mcrypt_ecb_3des_decrypt.phpt97
-rw-r--r--ext/mcrypt/tests/mcrypt_ecb_3des_encrypt.phpt82
-rw-r--r--ext/mcrypt/tests/mcrypt_ecb_error.phpt51
-rw-r--r--ext/mcrypt/tests/mcrypt_ecb_variation1.phpt235
-rw-r--r--ext/mcrypt/tests/mcrypt_ecb_variation2.phpt209
-rw-r--r--ext/mcrypt/tests/mcrypt_ecb_variation3.phpt209
-rw-r--r--ext/mcrypt/tests/mcrypt_ecb_variation4.phpt205
-rw-r--r--ext/mcrypt/tests/mcrypt_ecb_variation5.phpt209
-rw-r--r--ext/mcrypt/tests/mcrypt_enc_get_algorithms_name.phpt22
-rw-r--r--ext/mcrypt/tests/mcrypt_enc_get_block_size.phpt16
-rw-r--r--ext/mcrypt/tests/mcrypt_enc_get_iv_size.phpt16
-rw-r--r--ext/mcrypt/tests/mcrypt_enc_get_key_size.phpt16
-rw-r--r--ext/mcrypt/tests/mcrypt_enc_get_mode_name.phpt25
-rw-r--r--ext/mcrypt/tests/mcrypt_enc_get_supported_key_sizes.phpt18
-rw-r--r--ext/mcrypt/tests/mcrypt_enc_is_block_algorithm.phpt16
-rw-r--r--ext/mcrypt/tests/mcrypt_enc_is_block_algorithm_mode.phpt16
-rw-r--r--ext/mcrypt/tests/mcrypt_enc_is_block_mode.phpt19
-rw-r--r--ext/mcrypt/tests/mcrypt_enc_self_test.phpt10
-rw-r--r--ext/mcrypt/tests/mcrypt_encrypt_3des_cbc.phpt94
-rw-r--r--ext/mcrypt/tests/mcrypt_encrypt_3des_ecb.phpt82
-rw-r--r--ext/mcrypt/tests/mcrypt_encrypt_error.phpt51
-rw-r--r--ext/mcrypt/tests/mcrypt_encrypt_variation1.phpt235
-rw-r--r--ext/mcrypt/tests/mcrypt_encrypt_variation2.phpt209
-rw-r--r--ext/mcrypt/tests/mcrypt_encrypt_variation3.phpt209
-rw-r--r--ext/mcrypt/tests/mcrypt_encrypt_variation4.phpt235
-rw-r--r--ext/mcrypt/tests/mcrypt_encrypt_variation5.phpt236
-rw-r--r--ext/mcrypt/tests/mcrypt_get_block_size.phpt13
-rw-r--r--ext/mcrypt/tests/mcrypt_get_cipher_name.phpt15
-rw-r--r--ext/mcrypt/tests/mcrypt_get_iv_size.phpt17
-rw-r--r--ext/mcrypt/tests/mcrypt_get_key_size.phpt13
-rw-r--r--ext/mcrypt/tests/mcrypt_list_algorithms.phpt16
-rw-r--r--ext/mcrypt/tests/mcrypt_list_modes.phpt26
-rw-r--r--ext/mcrypt/tests/mcrypt_module_get_algo_block_size.phpt19
-rw-r--r--ext/mcrypt/tests/mcrypt_module_get_algo_key_size.phpt19
-rw-r--r--ext/mcrypt/tests/mcrypt_module_get_supported_key_sizes.phpt19
-rw-r--r--ext/mcrypt/tests/mcrypt_module_is_block_algorithm.phpt15
-rw-r--r--ext/mcrypt/tests/mcrypt_module_is_block_algorithm_mode.phpt15
-rw-r--r--ext/mcrypt/tests/mcrypt_module_is_block_mode.phpt17
-rw-r--r--ext/mcrypt/tests/mcrypt_module_open.phpt14
-rw-r--r--ext/mcrypt/tests/mcrypt_module_self_test.phpt13
-rw-r--r--ext/mcrypt/tests/mcrypt_ofb.phpt21
-rw-r--r--ext/mcrypt/tests/mcrypt_rijndael128_128BitKey.phpt130
-rw-r--r--ext/mcrypt/tests/mcrypt_rijndael128_256BitKey.phpt87
-rw-r--r--ext/mhash/mhash.c4
-rw-r--r--ext/mhash/php_mhash.h4
-rw-r--r--ext/mime_magic/mime_magic.c4
-rw-r--r--ext/mime_magic/php_mime_magic.h4
-rw-r--r--ext/mime_magic/phpmimemagic.h4
-rw-r--r--ext/mime_magic/tests/magic.mime590
-rw-r--r--ext/mime_magic/tests/mime_content_type_basic.phpt69
-rw-r--r--ext/mime_magic/tests/mime_content_type_error.phpt40
-rw-r--r--ext/mime_magic/tests/mime_content_type_variation.phpt35
-rw-r--r--ext/mime_magic/tests/mime_content_type_variation1.phpt238
-rw-r--r--ext/mime_magic/tests/mime_test.bmpbin0 -> 196662 bytes
-rw-r--r--ext/mime_magic/tests/mime_test.classbin0 -> 99 bytes
-rw-r--r--ext/mime_magic/tests/mime_test.gifbin0 -> 4998 bytes
-rw-r--r--ext/mime_magic/tests/mime_test.html10
-rw-r--r--ext/mime_magic/tests/mime_test.jpegbin0 -> 2317 bytes
-rw-r--r--ext/mime_magic/tests/mime_test.pngbin0 -> 4053 bytes
-rw-r--r--ext/mime_magic/tests/mime_test.wavbin0 -> 2060 bytes
-rw-r--r--ext/mime_magic/tests/mime_test.zipbin0 -> 64609 bytes
-rw-r--r--ext/ming/ming.c4
-rw-r--r--ext/ming/php_ming.h4
-rw-r--r--ext/msql/php_msql.c4
-rw-r--r--ext/msql/php_msql.h4
-rw-r--r--ext/mssql/config.m414
-rw-r--r--ext/mssql/php_mssql.c34
-rw-r--r--ext/mssql/php_mssql.h4
-rw-r--r--ext/mysql/php_mysql.c4
-rw-r--r--ext/mysql/php_mysql.h4
-rw-r--r--ext/mysql/php_mysql_structs.h4
-rw-r--r--ext/mysqli/mysqli.c15
-rw-r--r--ext/mysqli/mysqli_api.c22
-rw-r--r--ext/mysqli/mysqli_driver.c2
-rw-r--r--ext/mysqli/mysqli_embedded.c2
-rw-r--r--ext/mysqli/mysqli_exception.c2
-rw-r--r--ext/mysqli/mysqli_fe.c25
-rw-r--r--ext/mysqli/mysqli_nonapi.c22
-rw-r--r--ext/mysqli/mysqli_prop.c14
-rw-r--r--ext/mysqli/mysqli_repl.c7
-rw-r--r--ext/mysqli/mysqli_report.c4
-rw-r--r--ext/mysqli/mysqli_report.h4
-rw-r--r--ext/mysqli/mysqli_warning.c2
-rw-r--r--ext/mysqli/php_mysqli.h9
-rw-r--r--ext/mysqli/tests/010.phpt2
-rw-r--r--ext/mysqli/tests/bug42548.phpt9
-rw-r--r--ext/mysqli/tests/bug45940.phpt18
-rw-r--r--ext/ncurses/ncurses.c2
-rw-r--r--ext/ncurses/ncurses_fe.c2
-rw-r--r--ext/ncurses/ncurses_functions.c2
-rw-r--r--ext/ncurses/php_ncurses.h2
-rw-r--r--ext/ncurses/php_ncurses_fe.h2
-rw-r--r--ext/oci8/config.m44
-rw-r--r--ext/oci8/oci8.c6
-rw-r--r--ext/oci8/oci8_collection.c4
-rw-r--r--ext/oci8/oci8_interface.c4
-rw-r--r--ext/oci8/oci8_lob.c9
-rw-r--r--ext/oci8/oci8_statement.c4
-rw-r--r--ext/oci8/package2.xml104
-rw-r--r--ext/oci8/php_oci8.h4
-rw-r--r--ext/oci8/php_oci8_int.h4
-rw-r--r--ext/oci8/tests/bug37220.phpt68
-rw-r--r--ext/oci8/tests/bug43497.phpt11
-rw-r--r--ext/oci8/tests/bug43497_92.phpt303
-rw-r--r--ext/oci8/tests/bug44113.phpt5
-rw-r--r--ext/oci8/tests/bug44206.phpt24
-rw-r--r--ext/oci8/tests/connect_scope1.phpt93
-rw-r--r--ext/oci8/tests/connect_scope2.phpt93
-rw-r--r--ext/oci8/tests/connect_scope_try1.phpt100
-rw-r--r--ext/oci8/tests/connect_scope_try2.phpt100
-rw-r--r--ext/oci8/tests/connect_scope_try3.phpt100
-rw-r--r--ext/oci8/tests/connect_scope_try4.phpt100
-rw-r--r--ext/oci8/tests/connect_scope_try5.phpt100
-rw-r--r--ext/oci8/tests/connect_scope_try6.phpt100
-rw-r--r--ext/oci8/tests/drcp_characterset.phpt61
-rw-r--r--ext/oci8/tests/drcp_conn_close1.phpt45
-rw-r--r--ext/oci8/tests/drcp_conn_close2.phpt46
-rw-r--r--ext/oci8/tests/drcp_connect1.phpt86
-rw-r--r--ext/oci8/tests/drcp_functions.inc93
-rw-r--r--ext/oci8/tests/drcp_newconnect.phpt43
-rw-r--r--ext/oci8/tests/drcp_pconn_close1.phpt44
-rw-r--r--ext/oci8/tests/drcp_pconn_close2.phpt46
-rw-r--r--ext/oci8/tests/drcp_privileged.phpt47
-rw-r--r--ext/oci8/tests/drcp_scope1.phpt92
-rw-r--r--ext/oci8/tests/drcp_scope2.phpt91
-rw-r--r--ext/oci8/tests/drcp_scope3.phpt61
-rw-r--r--ext/oci8/tests/drcp_scope4.phpt62
-rw-r--r--ext/oci8/tests/drcp_scope5.phpt63
-rw-r--r--ext/oci8/tests/lob_042.phpt2
-rw-r--r--ext/oci8/tests/minfo.phpt19
-rw-r--r--ext/oci8/tests/password.phpt70
-rw-r--r--ext/oci8/tests/password_2.phpt32
-rw-r--r--ext/oci8/tests/password_new.phpt20
-rw-r--r--ext/oci8/tests/password_old.phpt28
-rw-r--r--ext/oci8/tests/pecl_bug10194_blob.phpt21
-rw-r--r--ext/oci8/tests/pecl_bug10194_blob_64.phpt54
-rw-r--r--ext/oci8/tests/testping.phpt25
-rw-r--r--ext/odbc/birdstep.c4
-rw-r--r--ext/odbc/php_birdstep.h4
-rw-r--r--ext/odbc/php_odbc.c201
-rw-r--r--ext/odbc/php_odbc.h6
-rw-r--r--ext/odbc/php_odbc_includes.h41
-rw-r--r--ext/openssl/openssl.c72
-rw-r--r--ext/openssl/php_openssl.h4
-rw-r--r--ext/openssl/tests/bug41033.pem12
-rw-r--r--ext/openssl/tests/bug41033.phpt27
-rw-r--r--ext/openssl/tests/bug41033pub.pem12
-rw-r--r--ext/openssl/tests/bug46127.pem33
-rw-r--r--ext/openssl/tests/bug46127.phpt58
-rw-r--r--ext/openssl/xp_ssl.c29
-rw-r--r--ext/pcntl/EXPERIMENTAL5
-rw-r--r--ext/pcntl/config.m47
-rwxr-xr-xext/pcntl/pcntl.c4
-rw-r--r--ext/pcntl/php_pcntl.h4
-rw-r--r--ext/pcntl/php_signal.c4
-rw-r--r--ext/pcntl/php_signal.h4
-rw-r--r--ext/pcre/config.w3219
-rw-r--r--ext/pcre/config0.m44
-rw-r--r--ext/pcre/pcrelib/ChangeLog186
-rw-r--r--ext/pcre/pcrelib/HACKING14
-rw-r--r--ext/pcre/pcrelib/NEWS15
-rw-r--r--ext/pcre/pcrelib/NON-UNIX-USE17
-rw-r--r--ext/pcre/pcrelib/README25
-rw-r--r--ext/pcre/pcrelib/config.h10
-rw-r--r--ext/pcre/pcrelib/dftables.c2
-rw-r--r--ext/pcre/pcrelib/doc/pcre.txt1764
-rw-r--r--ext/pcre/pcrelib/pcre.h7
-rw-r--r--ext/pcre/pcrelib/pcre_compile.c319
-rw-r--r--ext/pcre/pcrelib/pcre_config.c4
-rw-r--r--ext/pcre/pcrelib/pcre_exec.c303
-rw-r--r--ext/pcre/pcrelib/pcre_fullinfo.c4
-rw-r--r--ext/pcre/pcrelib/pcre_get.c20
-rw-r--r--ext/pcre/pcrelib/pcre_globals.c2
-rw-r--r--ext/pcre/pcrelib/pcre_info.c4
-rw-r--r--ext/pcre/pcrelib/pcre_internal.h322
-rw-r--r--ext/pcre/pcrelib/pcre_maketables.c2
-rw-r--r--ext/pcre/pcrelib/pcre_newline.c2
-rw-r--r--ext/pcre/pcrelib/pcre_ord2utf8.c8
-rw-r--r--ext/pcre/pcrelib/pcre_refcount.c4
-rw-r--r--ext/pcre/pcrelib/pcre_study.c13
-rw-r--r--ext/pcre/pcrelib/pcre_tables.c252
-rw-r--r--ext/pcre/pcrelib/pcre_try_flipped.c2
-rw-r--r--ext/pcre/pcrelib/pcre_ucd.c2608
-rw-r--r--ext/pcre/pcrelib/pcre_ucp_searchfuncs.c177
-rw-r--r--ext/pcre/pcrelib/pcre_valid_utf8.c5
-rw-r--r--ext/pcre/pcrelib/pcre_version.c4
-rw-r--r--ext/pcre/pcrelib/pcre_xclass.c13
-rw-r--r--ext/pcre/pcrelib/pcregrep.c90
-rw-r--r--ext/pcre/pcrelib/pcreposix.c33
-rw-r--r--ext/pcre/pcrelib/pcreposix.h3
-rw-r--r--ext/pcre/pcrelib/testdata/testinput13
-rw-r--r--ext/pcre/pcrelib/testdata/testinput2143
-rw-r--r--ext/pcre/pcrelib/testdata/testinput414
-rw-r--r--ext/pcre/pcrelib/testdata/testinput519
-rw-r--r--ext/pcre/pcrelib/testdata/testinput638
-rw-r--r--ext/pcre/pcrelib/testdata/testinput731
-rw-r--r--ext/pcre/pcrelib/testdata/testinput83
-rw-r--r--ext/pcre/pcrelib/testdata/testinput918
-rw-r--r--ext/pcre/pcrelib/testdata/testoutput14
-rw-r--r--ext/pcre/pcrelib/testdata/testoutput104
-rw-r--r--ext/pcre/pcrelib/testdata/testoutput2281
-rw-r--r--ext/pcre/pcrelib/testdata/testoutput418
-rw-r--r--ext/pcre/pcrelib/testdata/testoutput533
-rw-r--r--ext/pcre/pcrelib/testdata/testoutput670
-rw-r--r--ext/pcre/pcrelib/testdata/testoutput746
-rw-r--r--ext/pcre/pcrelib/testdata/testoutput84
-rw-r--r--ext/pcre/pcrelib/testdata/testoutput930
-rw-r--r--ext/pcre/pcrelib/ucp.h23
-rw-r--r--ext/pcre/pcrelib/ucpinternal.h92
-rw-r--r--ext/pcre/pcrelib/ucptable.h3088
-rw-r--r--ext/pcre/php_pcre.c169
-rw-r--r--ext/pcre/php_pcre.h4
-rw-r--r--ext/pcre/tests/bug37911.phpt41
-rw-r--r--ext/pcre/tests/bug42737.phpt19
-rw-r--r--ext/pcre/tests/bug44925.phpt107
-rw-r--r--ext/pcre/tests/pcre.constants.phpt35
-rw-r--r--ext/pcre/tests/preg_last_error_error.phpt30
-rw-r--r--ext/pcre/tests/preg_match_basic_002.phpt23
-rw-r--r--ext/pcre/tests/preg_match_variation1.phpt22
-rw-r--r--ext/pcre/tests/preg_replace_callback_error1.phpt59
-rw-r--r--ext/pcre/upgrade-pcre.php1
-rwxr-xr-xext/pdo/pdo.c4
-rwxr-xr-xext/pdo/pdo_dbh.c17
-rw-r--r--ext/pdo/pdo_sql_parser.c84
-rw-r--r--ext/pdo/pdo_sql_parser.c.orig98
-rw-r--r--ext/pdo/pdo_sql_parser.re24
-rw-r--r--ext/pdo/pdo_sqlstate.c4
-rwxr-xr-xext/pdo/pdo_stmt.c115
-rwxr-xr-xext/pdo/php_pdo.h4
-rwxr-xr-xext/pdo/php_pdo_driver.h4
-rwxr-xr-xext/pdo/php_pdo_int.h4
-rw-r--r--ext/pdo/tests/bug_44159.phpt5
-rw-r--r--ext/pdo/tests/pdo_033.phpt7
-rw-r--r--ext/pdo/tests/pdorow.phpt10
-rw-r--r--ext/pdo_dblib/config.m414
-rw-r--r--ext/pdo_dblib/dblib_driver.c4
-rw-r--r--ext/pdo_dblib/dblib_stmt.c4
-rw-r--r--ext/pdo_dblib/pdo_dblib.c4
-rw-r--r--ext/pdo_dblib/php_pdo_dblib.h4
-rw-r--r--ext/pdo_dblib/php_pdo_dblib_int.h4
-rw-r--r--ext/pdo_firebird/firebird_driver.c4
-rw-r--r--ext/pdo_firebird/firebird_statement.c7
-rw-r--r--ext/pdo_firebird/pdo_firebird.c4
-rw-r--r--ext/pdo_firebird/php_pdo_firebird.h4
-rw-r--r--ext/pdo_firebird/php_pdo_firebird_int.h4
-rw-r--r--ext/pdo_firebird/tests/ddl.phpt6
-rw-r--r--ext/pdo_firebird/tests/execute.phpt14
-rwxr-xr-xext/pdo_mysql/mysql_driver.c8
-rwxr-xr-xext/pdo_mysql/mysql_statement.c4
-rwxr-xr-xext/pdo_mysql/pdo_mysql.c4
-rwxr-xr-xext/pdo_mysql/php_pdo_mysql.h4
-rwxr-xr-xext/pdo_mysql/php_pdo_mysql_int.h4
-rw-r--r--ext/pdo_mysql/tests/bug41125.phpt162
-rw-r--r--ext/pdo_mysql/tests/bug44327.phpt64
-rw-r--r--ext/pdo_mysql/tests/bug46292.phpt80
-rwxr-xr-xext/pdo_oci/oci_driver.c4
-rwxr-xr-xext/pdo_oci/oci_statement.c4
-rwxr-xr-xext/pdo_oci/pdo_oci.c4
-rwxr-xr-xext/pdo_oci/php_pdo_oci.h4
-rwxr-xr-xext/pdo_oci/php_pdo_oci_int.h4
-rwxr-xr-xext/pdo_odbc/odbc_driver.c946
-rwxr-xr-xext/pdo_odbc/odbc_stmt.c1298
-rwxr-xr-xext/pdo_odbc/pdo_odbc.c4
-rw-r--r--ext/pdo_odbc/php_pdo_odbc.h4
-rwxr-xr-xext/pdo_odbc/php_pdo_odbc_int.h370
-rw-r--r--ext/pdo_pgsql/pdo_pgsql.c6
-rw-r--r--ext/pdo_pgsql/pgsql_driver.c4
-rw-r--r--ext/pdo_pgsql/pgsql_statement.c18
-rw-r--r--ext/pdo_pgsql/php_pdo_pgsql.h4
-rw-r--r--ext/pdo_pgsql/php_pdo_pgsql_int.h4
-rw-r--r--ext/pdo_pgsql/tests/bug43925.phpt59
-rw-r--r--ext/pdo_pgsql/tests/bug46274.phpt85
-rw-r--r--ext/pdo_pgsql/tests/bug46274_2.phpt87
-rw-r--r--ext/pdo_pgsql/tests/large_objects.phpt36
-rw-r--r--ext/pdo_sqlite/pdo_sqlite.c6
-rw-r--r--ext/pdo_sqlite/php_pdo_sqlite.h4
-rw-r--r--ext/pdo_sqlite/php_pdo_sqlite_int.h4
-rw-r--r--ext/pdo_sqlite/sqlite/src/keywordhash.h2
-rw-r--r--ext/pdo_sqlite/sqlite_driver.c11
-rw-r--r--ext/pdo_sqlite/sqlite_statement.c4
-rw-r--r--ext/pdo_sqlite/tests/bug44327_2.phpt50
-rw-r--r--ext/pdo_sqlite/tests/bug44327_3.phpt33
-rw-r--r--ext/pdo_sqlite/tests/bug46139.phpt42
-rw-r--r--ext/pdo_sqlite/tests/debugdumpparams_001.phpt37
-rw-r--r--ext/pdo_sqlite/tests/pdo_sqlite_createaggregate.phpt31
-rw-r--r--ext/pdo_sqlite/tests/pdo_sqlite_createfunction.phpt37
-rw-r--r--ext/pdo_sqlite/tests/pdo_sqlite_lastinsertid.phpt26
-rw-r--r--ext/pdo_sqlite/tests/pdo_sqlite_transaction.phpt26
-rw-r--r--ext/pgsql/pgsql.c160
-rw-r--r--ext/pgsql/php_pgsql.h4
-rw-r--r--ext/pgsql/tests/bug37100.phpt43
-rw-r--r--ext/pgsql/tests/pg_delete_001.phpt86
-rw-r--r--ext/pgsql/tests/pg_insert_001.phpt40
-rw-r--r--ext/pgsql/tests/pg_meta_data_001.phpt92
-rw-r--r--ext/pgsql/tests/pg_select_001.phpt63
-rw-r--r--ext/pgsql/tests/pg_update_001.phpt51
-rw-r--r--ext/posix/config.m418
-rw-r--r--ext/posix/php_posix.h4
-rw-r--r--ext/posix/posix.c13
-rw-r--r--ext/posix/tests/posix_getcwd.phpt19
-rw-r--r--ext/posix/tests/posix_getgrgid_error.phpt4
-rw-r--r--ext/posix/tests/posix_getgrnam.phpt19
-rw-r--r--ext/posix/tests/posix_getpwnam.phpt19
-rw-r--r--ext/posix/tests/posix_getrlimit.phpt17
-rw-r--r--ext/posix/tests/posix_initgroups.phpt18
-rw-r--r--ext/posix/tests/posix_isatty.phpt15
-rw-r--r--ext/posix/tests/posix_kill_variation1.phpt4
-rw-r--r--ext/posix/tests/posix_kill_variation2.phpt4
-rw-r--r--ext/posix/tests/posix_mknod.phpt15
-rw-r--r--ext/posix/tests/posix_strerror_error.phpt4
-rw-r--r--ext/posix/tests/posix_strerror_variation1.phpt50
-rw-r--r--ext/pspell/php_pspell.h4
-rw-r--r--ext/pspell/pspell.c10
-rw-r--r--ext/readline/php_readline.h4
-rw-r--r--ext/readline/readline.c19
-rw-r--r--ext/readline/tests/readline_add_history_001.phpt32
-rw-r--r--ext/readline/tests/readline_callback_handler_install_001.phpt24
-rw-r--r--ext/readline/tests/readline_callback_handler_remove_001.phpt20
-rw-r--r--ext/readline/tests/readline_clear_history_001.phpt16
-rw-r--r--ext/readline/tests/readline_completion_function_001.phpt25
-rw-r--r--ext/readline/tests/readline_info_001.phpt45
-rw-r--r--ext/readline/tests/readline_list_history_001.phpt17
-rw-r--r--ext/readline/tests/readline_read_history_001.phpt30
-rw-r--r--ext/readline/tests/readline_write_history_001.phpt26
-rw-r--r--ext/recode/php_recode.h4
-rw-r--r--ext/recode/recode.c6
-rw-r--r--ext/reflection/php_reflection.c79
-rw-r--r--ext/reflection/php_reflection.h4
-rwxr-xr-xext/reflection/tests/001.phpt182
-rwxr-xr-xext/reflection/tests/002.phpt130
-rwxr-xr-xext/reflection/tests/004.phpt88
-rw-r--r--ext/reflection/tests/ReflectionClass_getDefaultProperties_001.phpt198
-rw-r--r--ext/reflection/tests/ReflectionClass_getDefaultProperties_002.phpt45
-rw-r--r--ext/reflection/tests/ReflectionClass_getDocComment_001.phpt98
-rw-r--r--ext/reflection/tests/ReflectionClass_getDocComment_002.phpt27
-rw-r--r--ext/reflection/tests/ReflectionClass_getInterfaces_001.phpt311
-rw-r--r--ext/reflection/tests/ReflectionClass_getInterfaces_002.phpt53
-rw-r--r--ext/reflection/tests/ReflectionClass_getInterfaces_003.phpt69
-rw-r--r--ext/reflection/tests/ReflectionClass_getInterfaces_004.phpt28
-rw-r--r--ext/reflection/tests/ReflectionClass_getMethod_001.phpt168
-rw-r--r--ext/reflection/tests/ReflectionClass_getMethod_002.phpt74
-rw-r--r--ext/reflection/tests/ReflectionClass_getMethods_001.phpt140
-rw-r--r--ext/reflection/tests/ReflectionClass_getMethods_002.phpt18
-rw-r--r--ext/reflection/tests/ReflectionClass_getMethods_003.phpt191
-rw-r--r--ext/reflection/tests/ReflectionClass_getParentClass_001.phpt38
-rw-r--r--ext/reflection/tests/ReflectionClass_getProperties_001.phpt126
-rw-r--r--ext/reflection/tests/ReflectionClass_getProperties_002.phpt17
-rw-r--r--ext/reflection/tests/ReflectionClass_getProperties_003.phpt189
-rw-r--r--ext/reflection/tests/ReflectionClass_getProperty_001.phpt146
-rw-r--r--ext/reflection/tests/ReflectionClass_getProperty_002.phpt72
-rw-r--r--ext/reflection/tests/ReflectionClass_getProperty_003.phpt251
-rw-r--r--ext/reflection/tests/ReflectionClass_getProperty_004.phpt251
-rw-r--r--ext/reflection/tests/ReflectionClass_getStaticPropertyValue_001.phpt67
-rw-r--r--ext/reflection/tests/ReflectionClass_getStaticPropertyValue_002.phpt52
-rw-r--r--ext/reflection/tests/ReflectionClass_hasConstant_001.phpt36
-rw-r--r--ext/reflection/tests/ReflectionClass_hasConstant_002.phpt40
-rw-r--r--ext/reflection/tests/ReflectionClass_hasMethod_001.phpt75
-rw-r--r--ext/reflection/tests/ReflectionClass_hasMethod_002.phpt40
-rw-r--r--ext/reflection/tests/ReflectionClass_hasProperty_001.phpt75
-rw-r--r--ext/reflection/tests/ReflectionClass_hasProperty_002.phpt40
-rw-r--r--ext/reflection/tests/ReflectionClass_implementsInterface_001.phpt155
-rw-r--r--ext/reflection/tests/ReflectionClass_isIterateable_001.phpt75
-rw-r--r--ext/reflection/tests/ReflectionClass_isSubclassOf_002.phpt49
-rw-r--r--ext/reflection/tests/ReflectionClass_modifiers_001.phpt44
-rw-r--r--ext/reflection/tests/ReflectionClass_modifiers_002.phpt28
-rw-r--r--ext/reflection/tests/ReflectionClass_newInstanceArgs_001.phpt98
-rw-r--r--ext/reflection/tests/ReflectionClass_newInstanceArgs_002.phpt20
-rw-r--r--ext/reflection/tests/ReflectionClass_newInstance_001.phpt98
-rw-r--r--ext/reflection/tests/ReflectionClass_setStaticPropertyValue_001.phpt77
-rw-r--r--ext/reflection/tests/ReflectionClass_setStaticPropertyValue_002.phpt60
-rw-r--r--ext/reflection/tests/ReflectionClass_toString_001.phpt224
-rw-r--r--ext/reflection/tests/ReflectionClass_toString_002.phpt123
-rw-r--r--ext/reflection/tests/ReflectionClass_toString_003.phpt123
-rw-r--r--ext/reflection/tests/ReflectionFunction_001.phpt67
-rw-r--r--ext/reflection/tests/ReflectionFunction_construct.001.phpt23
-rw-r--r--ext/reflection/tests/ReflectionFunction_getDocComment.001.phpt41
-rw-r--r--ext/reflection/tests/ReflectionFunction_getExtension.phpt19
-rw-r--r--ext/reflection/tests/ReflectionFunction_getExtensionName.phpt16
-rw-r--r--ext/reflection/tests/ReflectionFunction_getFileName.001.phpt18
-rw-r--r--ext/reflection/tests/ReflectionFunction_getFileName.002.phpt39
-rw-r--r--ext/reflection/tests/ReflectionMethod_006.phpt100
-rw-r--r--ext/reflection/tests/ReflectionMethod_constructor_error1.phpt103
-rw-r--r--ext/reflection/tests/ReflectionMethod_constructor_error2.phpt37
-rw-r--r--ext/reflection/tests/ReflectionObject_isSubclassOf.002.phpt48
-rw-r--r--ext/reflection/tests/ReflectionParameter_001.phpt80
-rw-r--r--ext/reflection/tests/ReflectionParameter_002.phpt80
-rw-r--r--ext/reflection/tests/ReflectionParameter_003.phpt88
-rw-r--r--ext/reflection/tests/ReflectionProperty_getModifiers.001.phpt66
-rwxr-xr-xext/reflection/tests/bug26695.phpt52
-rwxr-xr-xext/reflection/tests/bug29268.phpt58
-rwxr-xr-xext/reflection/tests/bug29523.phpt80
-rwxr-xr-xext/reflection/tests/bug29828.phpt74
-rwxr-xr-xext/reflection/tests/bug30146.phpt48
-rwxr-xr-xext/reflection/tests/bug30148.phpt72
-rwxr-xr-xext/reflection/tests/bug30856.phpt44
-rwxr-xr-xext/reflection/tests/bug30961.phpt44
-rwxr-xr-xext/reflection/tests/bug33312.phpt44
-rwxr-xr-xext/reflection/tests/bug38942.phpt72
-rw-r--r--ext/reflection/tests/bug45139.phpt58
-rw-r--r--ext/reflection/tests/bug45765.phpt82
-rw-r--r--ext/reflection/tests/bug46064.phpt74
-rw-r--r--ext/reflection/tests/bug46064_2.phpt72
-rw-r--r--ext/reflection/tests/included4.inc9
-rwxr-xr-xext/reflection/tests/parameters_001.phpt80
-rw-r--r--ext/reflection/tests/reflectionClass_FileInfo_error.phpt72
-rw-r--r--ext/reflection/tests/reflectionClass_constructor_001.phpt66
-rw-r--r--ext/reflection/tests/reflectionClass_constructor_002.phpt132
-rw-r--r--ext/reflection/tests/reflectionClass_export_basic1.phpt62
-rw-r--r--ext/reflection/tests/reflectionClass_export_basic2.phpt54
-rw-r--r--ext/reflection/tests/reflectionClass_getConstant_basic.phpt82
-rw-r--r--ext/reflection/tests/reflectionClass_getConstant_error.phpt72
-rw-r--r--ext/reflection/tests/reflectionClass_getConstructor_basic.phpt162
-rw-r--r--ext/reflection/tests/reflectionClass_getConstructor_error.phpt48
-rw-r--r--ext/reflection/tests/reflectionClass_getExtensionName_basic.phpt14
-rw-r--r--ext/reflection/tests/reflectionClass_getExtensionName_variation.phpt20
-rw-r--r--ext/reflection/tests/reflectionClass_getExtension_basic.phpt17
-rw-r--r--ext/reflection/tests/reflectionClass_getExtension_variation.phpt20
-rw-r--r--ext/reflection/tests/reflectionClass_getInterfaceNames_basic.phpt25
-rw-r--r--ext/reflection/tests/reflectionClass_getModifiers_basic.phpt39
-rw-r--r--ext/reflection/tests/reflectionClass_getParentClass.phpt21
-rw-r--r--ext/reflection/tests/reflectionClass_hasConstant_basic.phpt23
-rw-r--r--ext/reflection/tests/reflectionClass_hasMethod_basic.phpt57
-rw-r--r--ext/reflection/tests/reflectionClass_hasProperty_basic.phpt38
-rw-r--r--ext/reflection/tests/reflectionClass_isAbstract_basic.phpt23
-rw-r--r--ext/reflection/tests/reflectionClass_isFinal_basic.phpt23
-rw-r--r--ext/reflection/tests/reflectionClass_isInterface_basic.phpt27
-rw-r--r--ext/reflection/tests/reflectionClass_isIterateable_basic.phpt36
-rw-r--r--ext/reflection/tests/reflectionClass_isIterateable_variation1.phpt27
-rw-r--r--ext/reflection/tests/reflectionObject___toString_basic1.phpt36
-rw-r--r--ext/reflection/tests/reflectionObject___toString_basic2.phpt39
-rw-r--r--ext/reflection/tests/reflectionObject_export_basic1.phpt36
-rw-r--r--ext/reflection/tests/reflectionObject_export_basic2.phpt39
-rw-r--r--ext/reflection/tests/reflectionObject_export_basic3.phpt38
-rw-r--r--ext/reflection/tests/reflectionParameter_invalidMethodInConstructor.phpt31
-rw-r--r--ext/reflection/tests/reflectionProperty_constructor_variation1.phpt58
-rw-r--r--ext/session/mod_files.c4
-rw-r--r--ext/session/mod_files.h4
-rw-r--r--ext/session/mod_mm.c4
-rw-r--r--ext/session/mod_mm.h4
-rw-r--r--ext/session/mod_user.c4
-rw-r--r--ext/session/mod_user.h4
-rw-r--r--ext/session/php_session.h4
-rw-r--r--ext/session/session.c32
-rw-r--r--ext/session/tests/session_encode_variation5.phpt3
-rw-r--r--ext/session/tests/session_get_cookie_params_basic.phpt7
-rw-r--r--ext/session/tests/session_get_cookie_params_variation1.phpt6
-rw-r--r--ext/session/tests/session_id_error4.phpt2
-rw-r--r--ext/session/tests/session_id_variation1.phpt2
-rw-r--r--ext/session/tests/session_id_variation2.phpt2
-rw-r--r--ext/session/tests/session_save_path_variation4.phpt12
-rw-r--r--ext/shmop/php_shmop.h2
-rw-r--r--ext/shmop/shmop.c4
-rw-r--r--ext/simplexml/php_simplexml.h4
-rwxr-xr-xext/simplexml/php_simplexml_exports.h4
-rw-r--r--ext/simplexml/simplexml.c31
-rw-r--r--ext/simplexml/tests/bug45553.phpt31
-rw-r--r--ext/simplexml/tests/bug46003.phpt30
-rw-r--r--ext/simplexml/tests/bug46047.phpt48
-rw-r--r--ext/snmp/php_snmp.h4
-rw-r--r--ext/snmp/snmp.c14
-rw-r--r--ext/soap/php_encoding.c121
-rw-r--r--ext/soap/php_encoding.h4
-rw-r--r--ext/soap/php_http.c10
-rw-r--r--ext/soap/php_http.h4
-rw-r--r--ext/soap/php_packet_soap.c4
-rw-r--r--ext/soap/php_packet_soap.h4
-rw-r--r--ext/soap/php_schema.c4
-rw-r--r--ext/soap/php_schema.h4
-rw-r--r--ext/soap/php_sdl.c15
-rw-r--r--ext/soap/php_sdl.h4
-rw-r--r--ext/soap/php_soap.h4
-rw-r--r--ext/soap/php_xml.c4
-rw-r--r--ext/soap/php_xml.h4
-rw-r--r--ext/soap/soap.c25
-rw-r--r--ext/soap/tests/bug46760.phpt16
-rw-r--r--ext/soap/tests/bugs/bug29109.phpt6
-rwxr-xr-xext/soap/tests/bugs/bug42151.phpt5
-rwxr-xr-xext/soap/tests/bugs/bug42214.phpt2
-rw-r--r--ext/soap/tests/bugs/bug43045.phpt52
-rw-r--r--ext/soap/tests/bugs/bug44811.phpt19
-rw-r--r--ext/soap/tests/bugs/bug44882.phpt64
-rw-r--r--ext/soap/tests/bugs/bug44882.wsdl75
-rw-r--r--ext/soap/tests/bugs/bug46419.phpt43
-rw-r--r--ext/soap/tests/bugs/bug46427.phpt20
-rw-r--r--ext/soap/tests/bugs/bug47049.phpt19
-rw-r--r--ext/soap/tests/bugs/bug47049.wsdl80
-rw-r--r--ext/soap/tests/bugs/multiport.phpt16
-rw-r--r--ext/soap/tests/bugs/multiport.wsdl88
-rw-r--r--ext/sockets/php_sockets.h4
-rw-r--r--ext/sockets/php_sockets_win.c4
-rw-r--r--ext/sockets/php_sockets_win.h4
-rw-r--r--ext/sockets/sockets.c27
-rw-r--r--ext/sockets/tests/ipv4loop.phpt2
-rw-r--r--ext/sockets/tests/ipv6loop.phpt2
-rw-r--r--ext/sockets/tests/unixloop.phpt55
-rw-r--r--ext/sockets/unix_socket_constants.h4
-rw-r--r--ext/sockets/win32_socket_constants.h4
-rwxr-xr-xext/spl/examples/tests/dualiterator_001.phpt2
-rwxr-xr-xext/spl/php_spl.c6
-rwxr-xr-xext/spl/php_spl.h2
-rwxr-xr-xext/spl/spl_array.c67
-rwxr-xr-xext/spl/spl_array.h4
-rwxr-xr-xext/spl/spl_directory.c11
-rwxr-xr-xext/spl/spl_directory.h4
-rwxr-xr-xext/spl/spl_engine.c2
-rwxr-xr-xext/spl/spl_engine.h4
-rwxr-xr-xext/spl/spl_exceptions.c4
-rwxr-xr-xext/spl/spl_exceptions.h4
-rwxr-xr-xext/spl/spl_functions.c4
-rwxr-xr-xext/spl/spl_functions.h4
-rwxr-xr-xext/spl/spl_iterators.c16
-rwxr-xr-xext/spl/spl_iterators.h4
-rwxr-xr-xext/spl/spl_observer.c4
-rwxr-xr-xext/spl/spl_observer.h4
-rwxr-xr-xext/spl/spl_sxe.c4
-rwxr-xr-xext/spl/spl_sxe.h4
-rw-r--r--ext/spl/tests/arrayObject___construct_basic1.phpt37
-rw-r--r--ext/spl/tests/arrayObject___construct_basic2.phpt98
-rw-r--r--ext/spl/tests/arrayObject___construct_basic3.phpt99
-rw-r--r--ext/spl/tests/arrayObject___construct_basic4.phpt103
-rw-r--r--ext/spl/tests/arrayObject___construct_basic5.phpt103
-rw-r--r--ext/spl/tests/arrayObject___construct_basic6.phpt50
-rw-r--r--ext/spl/tests/arrayObject___construct_error1.phpt25
-rw-r--r--ext/spl/tests/arrayObject___construct_error2.phpt22
-rw-r--r--ext/spl/tests/arrayObject_asort_basic1.phpt42
-rw-r--r--ext/spl/tests/arrayObject_asort_basic2.phpt49
-rw-r--r--ext/spl/tests/arrayObject_clone_basic1.phpt42
-rw-r--r--ext/spl/tests/arrayObject_clone_basic2.phpt40
-rw-r--r--ext/spl/tests/arrayObject_clone_basic3.phpt68
-rw-r--r--ext/spl/tests/arrayObject_count_basic1.phpt80
-rw-r--r--ext/spl/tests/arrayObject_exchangeArray_basic3.phpt121
-rw-r--r--ext/spl/tests/arrayObject_getFlags_basic1.phpt25
-rw-r--r--ext/spl/tests/arrayObject_getFlags_basic2.phpt24
-rw-r--r--ext/spl/tests/arrayObject_getIteratorClass_basic1.phpt104
-rw-r--r--ext/spl/tests/arrayObject_ksort_basic1.phpt43
-rw-r--r--ext/spl/tests/arrayObject_ksort_basic2.phpt49
-rw-r--r--ext/spl/tests/arrayObject_magicMethods1.phpt183
-rw-r--r--ext/spl/tests/arrayObject_magicMethods2.phpt174
-rw-r--r--ext/spl/tests/arrayObject_magicMethods3.phpt183
-rw-r--r--ext/spl/tests/arrayObject_magicMethods4.phpt186
-rw-r--r--ext/spl/tests/arrayObject_magicMethods5.phpt187
-rw-r--r--ext/spl/tests/arrayObject_magicMethods6.phpt186
-rw-r--r--ext/spl/tests/arrayObject_natcasesort_basic1.phpt50
-rw-r--r--ext/spl/tests/arrayObject_natsort_basic1.phpt50
-rw-r--r--ext/spl/tests/arrayObject_setFlags_basic1.phpt53
-rw-r--r--ext/spl/tests/arrayObject_setFlags_basic2.phpt29
-rw-r--r--ext/spl/tests/arrayObject_setIteratorClass_error1.phpt57
-rw-r--r--ext/spl/tests/arrayObject_uasort_basic1.phpt41
-rw-r--r--ext/spl/tests/arrayObject_uasort_error1.phpt30
-rw-r--r--ext/spl/tests/arrayObject_uksort_basic1.phpt44
-rw-r--r--ext/spl/tests/arrayObject_uksort_error1.phpt30
-rwxr-xr-xext/spl/tests/array_001.phpt8
-rw-r--r--ext/spl/tests/array_026.phpt21
-rw-r--r--ext/spl/tests/bug46031.phpt9
-rw-r--r--ext/spl/tests/bug46051.phpt14
-rw-r--r--ext/spl/tests/bug46053.phpt12
-rw-r--r--ext/spl/tests/bug46088.phpt11
-rw-r--r--ext/spl/tests/bug46115.phpt13
-rw-r--r--ext/spl/tests/class_implements_basic.phpt33
-rw-r--r--ext/spl/tests/class_implements_basic2.phpt74
-rw-r--r--ext/spl/tests/class_implements_error.phpt28
-rw-r--r--ext/spl/tests/class_implements_variation.phpt45
-rw-r--r--ext/spl/tests/class_implements_variation1.phpt221
-rw-r--r--ext/spl/tests/class_implements_variation2.phpt259
-rw-r--r--ext/spl/tests/countable_class_basic1.phpt28
-rw-r--r--ext/spl/tests/countable_count_variation1.phpt68
-rwxr-xr-xext/spl/tests/dit_002.phpt2
-rwxr-xr-xext/spl/tests/iterator_044.phpt2
-rw-r--r--ext/sqlite/config.m44
-rw-r--r--ext/sqlite/pdo_sqlite2.c4
-rw-r--r--ext/sqlite/php_sqlite.h4
-rw-r--r--ext/sqlite/sess_sqlite.c4
-rw-r--r--ext/sqlite/sqlite.c8
-rw-r--r--ext/standard/array.c120
-rw-r--r--ext/standard/assert.c4
-rw-r--r--ext/standard/base64.c12
-rw-r--r--ext/standard/base64.h4
-rw-r--r--ext/standard/basic_functions.c28
-rw-r--r--ext/standard/basic_functions.h4
-rw-r--r--ext/standard/browscap.c4
-rw-r--r--ext/standard/crc32.c4
-rw-r--r--ext/standard/crc32.h4
-rw-r--r--ext/standard/credits.c8
-rw-r--r--ext/standard/credits.h4
-rw-r--r--ext/standard/crypt.c4
-rw-r--r--ext/standard/css.c4
-rw-r--r--ext/standard/css.h4
-rw-r--r--ext/standard/cyr_convert.c4
-rw-r--r--ext/standard/cyr_convert.h4
-rw-r--r--ext/standard/datetime.c4
-rw-r--r--ext/standard/datetime.h4
-rw-r--r--ext/standard/dir.c33
-rw-r--r--ext/standard/dl.c4
-rw-r--r--ext/standard/dl.h4
-rw-r--r--ext/standard/dns.c29
-rw-r--r--ext/standard/dns.h4
-rw-r--r--ext/standard/exec.c4
-rw-r--r--ext/standard/exec.h4
-rw-r--r--ext/standard/file.c55
-rw-r--r--ext/standard/file.h4
-rw-r--r--ext/standard/filestat.c4
-rw-r--r--ext/standard/filters.c4
-rw-r--r--ext/standard/flock_compat.c4
-rw-r--r--ext/standard/flock_compat.h10
-rw-r--r--ext/standard/formatted_print.c5
-rw-r--r--ext/standard/fsock.c4
-rw-r--r--ext/standard/fsock.h4
-rw-r--r--ext/standard/ftok.c4
-rw-r--r--ext/standard/ftp_fopen_wrapper.c11
-rw-r--r--ext/standard/head.c8
-rw-r--r--ext/standard/head.h4
-rw-r--r--ext/standard/html.c23
-rw-r--r--ext/standard/html.h4
-rw-r--r--ext/standard/http.c4
-rw-r--r--ext/standard/http_fopen_wrapper.c4
-rw-r--r--ext/standard/image.c4
-rw-r--r--ext/standard/incomplete_class.c4
-rw-r--r--ext/standard/info.c14
-rw-r--r--ext/standard/info.h4
-rw-r--r--ext/standard/iptc.c4
-rw-r--r--ext/standard/lcg.c4
-rw-r--r--ext/standard/levenshtein.c150
-rw-r--r--ext/standard/link.c27
-rw-r--r--ext/standard/mail.c41
-rw-r--r--ext/standard/math.c78
-rw-r--r--ext/standard/md5.c4
-rw-r--r--ext/standard/md5.h4
-rw-r--r--ext/standard/metaphone.c4
-rw-r--r--ext/standard/microtime.c4
-rw-r--r--ext/standard/microtime.h4
-rw-r--r--ext/standard/pack.c4
-rw-r--r--ext/standard/pack.h4
-rw-r--r--ext/standard/pageinfo.c4
-rw-r--r--ext/standard/pageinfo.h4
-rw-r--r--ext/standard/php_array.h4
-rw-r--r--ext/standard/php_assert.h4
-rw-r--r--ext/standard/php_browscap.h4
-rw-r--r--ext/standard/php_crypt.h4
-rw-r--r--ext/standard/php_dir.h4
-rw-r--r--ext/standard/php_ext_syslog.h4
-rw-r--r--ext/standard/php_filestat.h4
-rw-r--r--ext/standard/php_fopen_wrapper.c42
-rw-r--r--ext/standard/php_fopen_wrappers.h4
-rw-r--r--ext/standard/php_ftok.h4
-rw-r--r--ext/standard/php_http.h4
-rw-r--r--ext/standard/php_image.h4
-rw-r--r--ext/standard/php_incomplete_class.h8
-rw-r--r--ext/standard/php_iptc.h4
-rw-r--r--ext/standard/php_lcg.h4
-rw-r--r--ext/standard/php_link.h4
-rw-r--r--ext/standard/php_mail.h4
-rw-r--r--ext/standard/php_math.h4
-rw-r--r--ext/standard/php_metaphone.h4
-rw-r--r--ext/standard/php_rand.h4
-rw-r--r--ext/standard/php_smart_str.h4
-rw-r--r--ext/standard/php_smart_str_public.h4
-rw-r--r--ext/standard/php_standard.h4
-rw-r--r--ext/standard/php_string.h4
-rw-r--r--ext/standard/php_type.h4
-rw-r--r--ext/standard/php_uuencode.h4
-rw-r--r--ext/standard/php_var.h4
-rw-r--r--ext/standard/php_versioning.h4
-rw-r--r--ext/standard/proc_open.c8
-rw-r--r--ext/standard/proc_open.h4
-rw-r--r--ext/standard/quot_print.c4
-rw-r--r--ext/standard/quot_print.h4
-rw-r--r--ext/standard/rand.c12
-rw-r--r--ext/standard/reg.c4
-rw-r--r--ext/standard/reg.h4
-rw-r--r--ext/standard/scanf.c18
-rw-r--r--ext/standard/scanf.h4
-rw-r--r--ext/standard/sha1.c4
-rw-r--r--ext/standard/sha1.h4
-rw-r--r--ext/standard/soundex.c4
-rw-r--r--ext/standard/streamsfuncs.c75
-rw-r--r--ext/standard/streamsfuncs.h4
-rw-r--r--ext/standard/string.c38
-rw-r--r--ext/standard/syslog.c4
-rw-r--r--ext/standard/tests/array/array_chunk.phpt5319
-rw-r--r--ext/standard/tests/array/array_chunk_variation10.phpt159
-rw-r--r--ext/standard/tests/array/array_chunk_variation11.phpt93
-rw-r--r--ext/standard/tests/array/array_chunk_variation12.phpt159
-rw-r--r--ext/standard/tests/array/array_chunk_variation13.phpt92
-rw-r--r--ext/standard/tests/array/array_chunk_variation14.phpt159
-rw-r--r--ext/standard/tests/array/array_chunk_variation15.phpt159
-rw-r--r--ext/standard/tests/array/array_chunk_variation16.phpt238
-rw-r--r--ext/standard/tests/array/array_chunk_variation17.phpt238
-rw-r--r--ext/standard/tests/array/array_chunk_variation18.phpt338
-rw-r--r--ext/standard/tests/array/array_chunk_variation19.phpt1018
-rw-r--r--ext/standard/tests/array/array_chunk_variation20.phpt1199
-rw-r--r--ext/standard/tests/array/array_chunk_variation21.phpt46
-rw-r--r--ext/standard/tests/array/array_chunk_variation22.phpt92
-rw-r--r--ext/standard/tests/array/array_chunk_variation23.phpt441
-rw-r--r--ext/standard/tests/array/array_chunk_variation24.phpt46
-rw-r--r--ext/standard/tests/array/array_chunk_variation25.phpt441
-rw-r--r--ext/standard/tests/array/array_chunk_variation26.phpt46
-rw-r--r--ext/standard/tests/array/array_chunk_variation27.phpt46
-rw-r--r--ext/standard/tests/array/array_chunk_variation28.phpt46
-rw-r--r--ext/standard/tests/array/array_chunk_variation29.phpt92
-rw-r--r--ext/standard/tests/array/array_chunk_variation30.phpt159
-rw-r--r--ext/standard/tests/array/array_chunk_variation31.phpt46
-rw-r--r--ext/standard/tests/array/array_chunk_variation32.phpt46
-rw-r--r--ext/standard/tests/array/array_chunk_variation8.phpt46
-rw-r--r--ext/standard/tests/array/array_chunk_variation9.phpt92
-rw-r--r--ext/standard/tests/array/array_count_values_error.phpt50
-rw-r--r--ext/standard/tests/array/array_count_values_variation.phpt47
-rw-r--r--ext/standard/tests/array/array_diff_assoc_error.phpt7
-rw-r--r--ext/standard/tests/array/array_diff_key_error.phpt36
-rw-r--r--ext/standard/tests/array/array_diff_key_variation1.phpt389
-rw-r--r--ext/standard/tests/array/array_diff_key_variation2.phpt310
-rw-r--r--ext/standard/tests/array/array_diff_key_variation3.phpt231
-rw-r--r--ext/standard/tests/array/array_diff_key_variation4.phpt61
-rw-r--r--ext/standard/tests/array/array_diff_key_variation5.phpt34
-rw-r--r--ext/standard/tests/array/array_diff_key_variation6.phpt36
-rw-r--r--ext/standard/tests/array/array_diff_key_variation7.phpt59
-rw-r--r--ext/standard/tests/array/array_diff_key_variation8.phpt54
-rw-r--r--ext/standard/tests/array/array_diff_uassoc_error.phpt63
-rw-r--r--ext/standard/tests/array/array_diff_uassoc_variation1.phpt244
-rw-r--r--ext/standard/tests/array/array_diff_uassoc_variation10.phpt47
-rw-r--r--ext/standard/tests/array/array_diff_uassoc_variation11.phpt45
-rw-r--r--ext/standard/tests/array/array_diff_uassoc_variation12.phpt60
-rw-r--r--ext/standard/tests/array/array_diff_uassoc_variation13.phpt68
-rw-r--r--ext/standard/tests/array/array_diff_uassoc_variation14.phpt40
-rw-r--r--ext/standard/tests/array/array_diff_uassoc_variation2.phpt244
-rw-r--r--ext/standard/tests/array/array_diff_uassoc_variation3.phpt256
-rw-r--r--ext/standard/tests/array/array_diff_uassoc_variation4.phpt246
-rw-r--r--ext/standard/tests/array/array_diff_uassoc_variation5.phpt40
-rw-r--r--ext/standard/tests/array/array_diff_uassoc_variation6.phpt58
-rw-r--r--ext/standard/tests/array/array_diff_uassoc_variation7.phpt47
-rw-r--r--ext/standard/tests/array/array_diff_uassoc_variation8.phpt62
-rw-r--r--ext/standard/tests/array/array_diff_uassoc_variation9.phpt62
-rw-r--r--ext/standard/tests/array/array_diff_ukey_error.phpt55
-rw-r--r--ext/standard/tests/array/array_diff_ukey_variation1.phpt318
-rw-r--r--ext/standard/tests/array/array_diff_ukey_variation10.phpt40
-rw-r--r--ext/standard/tests/array/array_diff_ukey_variation11.phpt53
-rw-r--r--ext/standard/tests/array/array_diff_ukey_variation2.phpt322
-rw-r--r--ext/standard/tests/array/array_diff_ukey_variation3.phpt240
-rw-r--r--ext/standard/tests/array/array_diff_ukey_variation4.phpt236
-rw-r--r--ext/standard/tests/array/array_diff_ukey_variation5.phpt54
-rw-r--r--ext/standard/tests/array/array_diff_ukey_variation6.phpt65
-rw-r--r--ext/standard/tests/array/array_diff_ukey_variation7.phpt42
-rw-r--r--ext/standard/tests/array/array_diff_ukey_variation8.phpt42
-rw-r--r--ext/standard/tests/array/array_diff_ukey_variation9.phpt59
-rw-r--r--ext/standard/tests/array/array_fill_keys_error.phpt45
-rw-r--r--ext/standard/tests/array/array_fill_keys_variation1.phpt79
-rw-r--r--ext/standard/tests/array/array_fill_keys_variation2.phpt81
-rw-r--r--ext/standard/tests/array/array_fill_keys_variation3.phpt54
-rw-r--r--ext/standard/tests/array/array_fill_keys_variation4.phpt91
-rw-r--r--ext/standard/tests/array/array_intersect_assoc_variation5.phpt32
-rw-r--r--ext/standard/tests/array/array_intersect_assoc_variation6.phpt34
-rw-r--r--ext/standard/tests/array/array_intersect_key_error.phpt36
-rw-r--r--ext/standard/tests/array/array_intersect_key_variation1.phpt315
-rw-r--r--ext/standard/tests/array/array_intersect_key_variation2.phpt314
-rw-r--r--ext/standard/tests/array/array_intersect_key_variation3.phpt235
-rw-r--r--ext/standard/tests/array/array_intersect_key_variation4.phpt60
-rw-r--r--ext/standard/tests/array/array_intersect_key_variation5.phpt41
-rw-r--r--ext/standard/tests/array/array_intersect_key_variation6.phpt37
-rw-r--r--ext/standard/tests/array/array_intersect_key_variation7.phpt63
-rw-r--r--ext/standard/tests/array/array_intersect_key_variation8.phpt64
-rw-r--r--ext/standard/tests/array/array_intersect_uassoc_error.phpt60
-rw-r--r--ext/standard/tests/array/array_intersect_uassoc_variation1.phpt323
-rw-r--r--ext/standard/tests/array/array_intersect_uassoc_variation10.phpt55
-rw-r--r--ext/standard/tests/array/array_intersect_uassoc_variation11.phpt51
-rw-r--r--ext/standard/tests/array/array_intersect_uassoc_variation2.phpt323
-rw-r--r--ext/standard/tests/array/array_intersect_uassoc_variation3.phpt244
-rw-r--r--ext/standard/tests/array/array_intersect_uassoc_variation4.phpt244
-rw-r--r--ext/standard/tests/array/array_intersect_uassoc_variation5.phpt58
-rw-r--r--ext/standard/tests/array/array_intersect_uassoc_variation6.phpt46
-rw-r--r--ext/standard/tests/array/array_intersect_uassoc_variation7.phpt54
-rw-r--r--ext/standard/tests/array/array_intersect_uassoc_variation8.phpt51
-rw-r--r--ext/standard/tests/array/array_intersect_uassoc_variation9.phpt39
-rw-r--r--ext/standard/tests/array/array_intersect_ukey_error.phpt56
-rw-r--r--ext/standard/tests/array/array_intersect_ukey_variation1.phpt320
-rw-r--r--ext/standard/tests/array/array_intersect_ukey_variation10.phpt52
-rw-r--r--ext/standard/tests/array/array_intersect_ukey_variation2.phpt320
-rw-r--r--ext/standard/tests/array/array_intersect_ukey_variation3.phpt277
-rw-r--r--ext/standard/tests/array/array_intersect_ukey_variation4.phpt321
-rw-r--r--ext/standard/tests/array/array_intersect_ukey_variation5.phpt63
-rw-r--r--ext/standard/tests/array/array_intersect_ukey_variation6.phpt51
-rw-r--r--ext/standard/tests/array/array_intersect_ukey_variation7.phpt63
-rw-r--r--ext/standard/tests/array/array_intersect_ukey_variation8.phpt39
-rw-r--r--ext/standard/tests/array/array_intersect_ukey_variation9.phpt61
-rw-r--r--ext/standard/tests/array/array_intersect_variation5.phpt30
-rw-r--r--ext/standard/tests/array/array_intersect_variation6.phpt30
-rw-r--r--ext/standard/tests/array/array_map_variation19.phpt40
-rw-r--r--ext/standard/tests/array/array_multisort_basic1.phpt60
-rw-r--r--ext/standard/tests/array/array_multisort_basic2.phpt44
-rw-r--r--ext/standard/tests/array/array_multisort_error.phpt44
-rw-r--r--ext/standard/tests/array/array_multisort_variation1.phpt207
-rw-r--r--ext/standard/tests/array/array_multisort_variation10.phpt20
-rw-r--r--ext/standard/tests/array/array_multisort_variation2.phpt228
-rw-r--r--ext/standard/tests/array/array_multisort_variation3.phpt208
-rw-r--r--ext/standard/tests/array/array_multisort_variation4.phpt58
-rw-r--r--ext/standard/tests/array/array_multisort_variation5.phpt53
-rw-r--r--ext/standard/tests/array/array_multisort_variation6.phpt53
-rw-r--r--ext/standard/tests/array/array_multisort_variation7.phpt68
-rw-r--r--ext/standard/tests/array/array_multisort_variation8.phpt74
-rw-r--r--ext/standard/tests/array/array_multisort_variation9.phpt78
-rw-r--r--ext/standard/tests/array/array_next_error1.phpt13
-rw-r--r--ext/standard/tests/array/array_next_error2.phpt12
-rw-r--r--ext/standard/tests/array/array_product_error.phpt45
-rw-r--r--ext/standard/tests/array/array_product_variation1.phpt58
-rw-r--r--ext/standard/tests/array/array_product_variation2.phpt22
-rw-r--r--ext/standard/tests/array/array_product_variation3.phpt48
-rw-r--r--ext/standard/tests/array/array_product_variation4.phpt29
-rw-r--r--ext/standard/tests/array/array_product_variation5.phpt223
-rw-r--r--ext/standard/tests/array/array_reduce_error.phpt42
-rw-r--r--ext/standard/tests/array/array_reduce_variation1.phpt44
-rw-r--r--ext/standard/tests/array/array_reduce_variation2.phpt36
-rw-r--r--ext/standard/tests/array/array_reduce_variation3.phpt36
-rw-r--r--ext/standard/tests/array/array_slice_variation1.phpt262
-rw-r--r--ext/standard/tests/array/array_slice_variation2.phpt6
-rw-r--r--ext/standard/tests/array/array_slice_variation3.phpt10
-rw-r--r--ext/standard/tests/array/array_splice_errors.phpt4
-rw-r--r--ext/standard/tests/array/array_udiff_assoc_error.phpt43
-rw-r--r--ext/standard/tests/array/array_udiff_assoc_variation.phpt36
-rw-r--r--ext/standard/tests/array/array_udiff_assoc_variation1.phpt227
-rw-r--r--ext/standard/tests/array/array_udiff_assoc_variation2.phpt227
-rw-r--r--ext/standard/tests/array/array_udiff_assoc_variation3.phpt242
-rw-r--r--ext/standard/tests/array/array_udiff_assoc_variation4.phpt228
-rw-r--r--ext/standard/tests/array/array_udiff_assoc_variation5.phpt60
-rw-r--r--ext/standard/tests/array/array_udiff_error.phpt43
-rw-r--r--ext/standard/tests/array/array_udiff_uassoc_error.phpt45
-rw-r--r--ext/standard/tests/array/array_udiff_uassoc_variation1.phpt219
-rw-r--r--ext/standard/tests/array/array_udiff_uassoc_variation2.phpt228
-rw-r--r--ext/standard/tests/array/array_udiff_uassoc_variation3.phpt245
-rw-r--r--ext/standard/tests/array/array_udiff_uassoc_variation4.phpt245
-rw-r--r--ext/standard/tests/array/array_udiff_uassoc_variation5.phpt229
-rw-r--r--ext/standard/tests/array/array_udiff_uassoc_variation6.phpt58
-rw-r--r--ext/standard/tests/array/array_udiff_variation1.phpt227
-rw-r--r--ext/standard/tests/array/array_udiff_variation2.phpt227
-rw-r--r--ext/standard/tests/array/array_udiff_variation3.phpt242
-rw-r--r--ext/standard/tests/array/array_udiff_variation4.phpt228
-rw-r--r--ext/standard/tests/array/array_udiff_variation5.phpt55
-rw-r--r--ext/standard/tests/array/array_uintersect_assoc_basic2.phpt36
-rw-r--r--ext/standard/tests/array/array_uintersect_assoc_error.phpt44
-rw-r--r--ext/standard/tests/array/array_uintersect_assoc_variation1.phpt227
-rw-r--r--ext/standard/tests/array/array_uintersect_assoc_variation2.phpt227
-rw-r--r--ext/standard/tests/array/array_uintersect_assoc_variation3.phpt242
-rw-r--r--ext/standard/tests/array/array_uintersect_assoc_variation4.phpt228
-rw-r--r--ext/standard/tests/array/array_uintersect_assoc_variation5.phpt54
-rw-r--r--ext/standard/tests/array/array_uintersect_error.phpt46
-rw-r--r--ext/standard/tests/array/array_uintersect_uassoc_error.phpt46
-rw-r--r--ext/standard/tests/array/array_uintersect_uassoc_variation1.phpt228
-rw-r--r--ext/standard/tests/array/array_uintersect_uassoc_variation2.phpt228
-rw-r--r--ext/standard/tests/array/array_uintersect_uassoc_variation3.phpt245
-rw-r--r--ext/standard/tests/array/array_uintersect_uassoc_variation4.phpt245
-rw-r--r--ext/standard/tests/array/array_uintersect_uassoc_variation5.phpt229
-rw-r--r--ext/standard/tests/array/array_uintersect_uassoc_variation6.phpt56
-rw-r--r--ext/standard/tests/array/array_uintersect_variation1.phpt227
-rw-r--r--ext/standard/tests/array/array_uintersect_variation2.phpt227
-rw-r--r--ext/standard/tests/array/array_uintersect_variation3.phpt242
-rw-r--r--ext/standard/tests/array/array_uintersect_variation4.phpt228
-rw-r--r--ext/standard/tests/array/array_uintersect_variation5.phpt58
-rw-r--r--ext/standard/tests/array/array_unique_error.phpt6
-rw-r--r--ext/standard/tests/array/array_unique_variation1.phpt2
-rw-r--r--ext/standard/tests/array/array_unique_variation2.phpt2
-rw-r--r--ext/standard/tests/array/array_unique_variation6.phpt2
-rw-r--r--ext/standard/tests/array/array_unique_variation8.phpt2
-rw-r--r--ext/standard/tests/array/array_unshift_variation1.phpt9
-rw-r--r--ext/standard/tests/array/array_values_error.phpt41
-rw-r--r--ext/standard/tests/array/arsort_basic.phpt133
-rw-r--r--ext/standard/tests/array/arsort_object1.phpt90
-rw-r--r--ext/standard/tests/array/arsort_object2.phpt94
-rw-r--r--ext/standard/tests/array/bug42850.phpt2
-rw-r--r--ext/standard/tests/array/bug43495.phpt2
-rw-r--r--ext/standard/tests/array/bug44181.phpt18
-rw-r--r--ext/standard/tests/array/bug44182.phpt18
-rw-r--r--ext/standard/tests/array/bug45312.phpt40
-rw-r--r--ext/standard/tests/array/bug46873.phpt12
-rw-r--r--ext/standard/tests/array/compact_variation2.phpt40
-rw-r--r--ext/standard/tests/array/compare_function.inc13
-rw-r--r--ext/standard/tests/array/extract_variation10.phpt13
-rw-r--r--ext/standard/tests/array/extract_variation11.phpt13
-rw-r--r--ext/standard/tests/array/natsort_basic.phpt34
-rwxr-xr-xext/standard/tests/array/prev_basic.phpt53
-rwxr-xr-xext/standard/tests/array/prev_error1.phpt39
-rwxr-xr-xext/standard/tests/array/prev_error2.phpt28
-rwxr-xr-xext/standard/tests/array/prev_error3.phpt19
-rwxr-xr-xext/standard/tests/array/prev_variation1.phpt219
-rwxr-xr-xext/standard/tests/array/prev_variation2.phpt49
-rw-r--r--ext/standard/tests/array/rsort_variation3.phpt2
-rw-r--r--ext/standard/tests/array/uksort_basic.phpt26
-rw-r--r--ext/standard/tests/array/uksort_error.phpt46
-rw-r--r--ext/standard/tests/array/uksort_variation1.phpt225
-rw-r--r--ext/standard/tests/array/uksort_variation2.phpt225
-rw-r--r--ext/standard/tests/array/usort_basic.phpt119
-rw-r--r--ext/standard/tests/array/usort_error1.phpt41
-rw-r--r--ext/standard/tests/array/usort_error2.phpt56
-rw-r--r--ext/standard/tests/array/usort_object1.phpt141
-rw-r--r--ext/standard/tests/array/usort_object2.phpt165
-rw-r--r--ext/standard/tests/array/usort_variation1.phpt234
-rw-r--r--ext/standard/tests/array/usort_variation10.phpt79
-rw-r--r--ext/standard/tests/array/usort_variation2.phpt242
-rw-r--r--ext/standard/tests/array/usort_variation3.phpt115
-rw-r--r--ext/standard/tests/array/usort_variation4.phpt155
-rw-r--r--ext/standard/tests/array/usort_variation5.phpt143
-rw-r--r--ext/standard/tests/array/usort_variation6.phpt139
-rw-r--r--ext/standard/tests/array/usort_variation7.phpt61
-rw-r--r--ext/standard/tests/array/usort_variation8.phpt85
-rw-r--r--ext/standard/tests/array/usort_variation9.phpt66
-rw-r--r--ext/standard/tests/array/var_export.phpt2
-rw-r--r--ext/standard/tests/assert/assert.phpt5
-rw-r--r--ext/standard/tests/assert/assert02.phpt6
-rw-r--r--ext/standard/tests/assert/assert03.phpt6
-rw-r--r--ext/standard/tests/assert/assert04.phpt6
-rw-r--r--ext/standard/tests/dir/readdir_variation2.phpt11
-rw-r--r--ext/standard/tests/dir/rewinddir_basic.phpt10
-rw-r--r--ext/standard/tests/dir/rewinddir_variation2.phpt2
-rw-r--r--ext/standard/tests/directory/DirectoryClass_basic_001.phpt53
-rw-r--r--ext/standard/tests/directory/DirectoryClass_error_001.phpt60
-rw-r--r--ext/standard/tests/directory/directory_constants-win32.phpt26
-rw-r--r--ext/standard/tests/directory/directory_constants.phpt26
-rw-r--r--ext/standard/tests/file/001-win32.phpt29
-rw-r--r--ext/standard/tests/file/005_variation2-win32.phpt125
-rw-r--r--ext/standard/tests/file/005_variation2.phpt113
-rw-r--r--ext/standard/tests/file/007_error.phpt10
-rw-r--r--ext/standard/tests/file/basename-win32.phpt341
-rw-r--r--ext/standard/tests/file/basename.phptbin0 -> 8229 bytes
-rw-r--r--ext/standard/tests/file/basename_basic-win32.phpt101
-rw-r--r--ext/standard/tests/file/basename_basic.phpt101
-rw-r--r--ext/standard/tests/file/basename_error.phpt40
-rw-r--r--ext/standard/tests/file/basename_variation1-win32.phpt238
-rw-r--r--ext/standard/tests/file/basename_variation1.phpt238
-rw-r--r--ext/standard/tests/file/basename_variation2-win32.phpt253
-rw-r--r--ext/standard/tests/file/basename_variation2.phpt253
-rw-r--r--ext/standard/tests/file/basename_variation3.phpt185
-rw-r--r--ext/standard/tests/file/basename_variation4.phpt188
-rw-r--r--ext/standard/tests/file/bug26615.phpt4
-rw-r--r--ext/standard/tests/file/bug26938.phpt4
-rw-r--r--ext/standard/tests/file/bug41655_1.phpt5
-rwxr-xr-xext/standard/tests/file/bug43248.phpt2
-rw-r--r--ext/standard/tests/file/bug43353.phpt18
-rw-r--r--ext/standard/tests/file/bug44607.phpt23
-rw-r--r--ext/standard/tests/file/bug45181.phpt16
-rw-r--r--ext/standard/tests/file/bug45303.phpt13
-rw-r--r--ext/standard/tests/file/chmod_basic-win32.phpt545
-rw-r--r--ext/standard/tests/file/chmod_basic.phpt35
-rw-r--r--ext/standard/tests/file/chmod_error.phpt47
-rw-r--r--ext/standard/tests/file/chmod_variation1.phpt34
-rw-r--r--ext/standard/tests/file/chmod_variation2-win32.phpt74
-rw-r--r--ext/standard/tests/file/chmod_variation2.phpt92
-rw-r--r--ext/standard/tests/file/chmod_variation3.phpt216
-rw-r--r--ext/standard/tests/file/chmod_variation4.phpt192
-rw-r--r--ext/standard/tests/file/chroot_001.phpt30
-rw-r--r--ext/standard/tests/file/copy_variation12-win32.phpt2
-rw-r--r--ext/standard/tests/file/copy_variation13.phpt2
-rw-r--r--ext/standard/tests/file/copy_variation18.phpt7
-rw-r--r--ext/standard/tests/file/copy_variation4.phptbin4480 -> 4548 bytes
-rw-r--r--ext/standard/tests/file/directory_wrapper_fstat_basic.phpt13
-rw-r--r--ext/standard/tests/file/dirname_basic-win32.phpt93
-rw-r--r--ext/standard/tests/file/dirname_basic.phpt94
-rw-r--r--ext/standard/tests/file/dirname_error.phpt39
-rw-r--r--ext/standard/tests/file/dirname_variation1.phpt190
-rw-r--r--ext/standard/tests/file/feof_basic.phpt101
-rw-r--r--ext/standard/tests/file/fgets_error.phpt2
-rw-r--r--ext/standard/tests/file/fgets_socket_variation1.phpt56
-rw-r--r--ext/standard/tests/file/fgets_socket_variation2.phpt63
-rw-r--r--ext/standard/tests/file/fgets_variation2.phpt4
-rw-r--r--ext/standard/tests/file/file_exists_error.phpt39
-rw-r--r--ext/standard/tests/file/file_exists_variation1.phpt30
-rw-r--r--ext/standard/tests/file/file_get_contents_basic.phpt47
-rw-r--r--ext/standard/tests/file/file_get_contents_error.phpt64
-rw-r--r--ext/standard/tests/file/file_get_contents_variation1.phpt51
-rw-r--r--ext/standard/tests/file/file_get_contents_variation2.phpt52
-rw-r--r--ext/standard/tests/file/file_get_contents_variation3.phpt218
-rw-r--r--ext/standard/tests/file/file_get_contents_variation4.phpt251
-rw-r--r--ext/standard/tests/file/file_get_contents_variation5.phpt222
-rw-r--r--ext/standard/tests/file/file_get_contents_variation6.phpt215
-rw-r--r--ext/standard/tests/file/file_get_contents_variation7-win32.phpt115
-rw-r--r--ext/standard/tests/file/file_get_contents_variation7.phpt104
-rw-r--r--ext/standard/tests/file/file_get_contents_variation8-win32.phpt97
-rw-r--r--ext/standard/tests/file/file_get_contents_variation8.phpt87
-rw-r--r--ext/standard/tests/file/file_get_contents_variation9.phpt56
-rw-r--r--ext/standard/tests/file/file_put_contents_variation1.phpt43
-rw-r--r--ext/standard/tests/file/file_put_contents_variation2.phpt167
-rw-r--r--ext/standard/tests/file/file_put_contents_variation3.phpt250
-rw-r--r--ext/standard/tests/file/file_put_contents_variation4.phpt53
-rw-r--r--ext/standard/tests/file/file_put_contents_variation5.phpt58
-rw-r--r--ext/standard/tests/file/file_put_contents_variation6.phpt54
-rw-r--r--ext/standard/tests/file/file_put_contents_variation7-win32.phpt130
-rw-r--r--ext/standard/tests/file/file_put_contents_variation7.phpt119
-rw-r--r--ext/standard/tests/file/file_put_contents_variation8-win32.phpt98
-rw-r--r--ext/standard/tests/file/file_put_contents_variation8.phptbin0 -> 2314 bytes
-rw-r--r--ext/standard/tests/file/file_put_contents_variation9.phpt70
-rw-r--r--ext/standard/tests/file/file_variation2.phpt210
-rw-r--r--ext/standard/tests/file/file_variation3.phpt294
-rw-r--r--ext/standard/tests/file/file_variation4.phpt291
-rw-r--r--ext/standard/tests/file/file_variation5-win32.phpt74
-rw-r--r--ext/standard/tests/file/file_variation5.phpt94
-rw-r--r--ext/standard/tests/file/file_variation6.phpt261
-rw-r--r--ext/standard/tests/file/file_variation7.phpt87
-rw-r--r--ext/standard/tests/file/file_variation8-win32.phpt142
-rw-r--r--ext/standard/tests/file/file_variation8.phpt128
-rw-r--r--ext/standard/tests/file/file_variation9.phpt89
-rw-r--r--ext/standard/tests/file/filegroup_variation1.phpt47
-rw-r--r--ext/standard/tests/file/filegroup_variation2.phpt70
-rw-r--r--ext/standard/tests/file/filegroup_variation3.phpt81
-rw-r--r--ext/standard/tests/file/fileinode_variation1.phpt48
-rw-r--r--ext/standard/tests/file/fileinode_variation2.phpt71
-rw-r--r--ext/standard/tests/file/fileinode_variation3.phpt82
-rw-r--r--ext/standard/tests/file/fileowner_variation1.phpt48
-rw-r--r--ext/standard/tests/file/fileowner_variation2.phpt71
-rw-r--r--ext/standard/tests/file/fileowner_variation3.phpt82
-rw-r--r--ext/standard/tests/file/fileperms_variation1.phpt47
-rw-r--r--ext/standard/tests/file/fileperms_variation2.phpt70
-rw-r--r--ext/standard/tests/file/fileperms_variation3.phpt81
-rw-r--r--ext/standard/tests/file/filesize_variation1.phpt20
-rw-r--r--ext/standard/tests/file/filesize_variation5.phpt34
-rw-r--r--ext/standard/tests/file/filetype_variation2.phpt36
-rw-r--r--ext/standard/tests/file/flock_error.phpt2
-rw-r--r--ext/standard/tests/file/fopen_include_path.inc92
-rw-r--r--ext/standard/tests/file/fopen_variation10-win32.phpt143
-rw-r--r--ext/standard/tests/file/fopen_variation11-win32.phpt142
-rw-r--r--ext/standard/tests/file/fopen_variation12.phpt53
-rw-r--r--ext/standard/tests/file/fopen_variation13.phpt56
-rw-r--r--ext/standard/tests/file/fopen_variation14-win32.phpt189
-rw-r--r--ext/standard/tests/file/fopen_variation14.phpt134
-rw-r--r--ext/standard/tests/file/fopen_variation15-win32.phpt193
-rw-r--r--ext/standard/tests/file/fopen_variation15.phpt138
-rw-r--r--ext/standard/tests/file/fopen_variation16.phpt73
-rw-r--r--ext/standard/tests/file/fopen_variation17.phpt73
-rw-r--r--ext/standard/tests/file/fopen_variation19.phpt110
-rw-r--r--ext/standard/tests/file/fopen_variation3.phpt218
-rw-r--r--ext/standard/tests/file/fopen_variation4.phpt251
-rw-r--r--ext/standard/tests/file/fopen_variation5.phpt171
-rw-r--r--ext/standard/tests/file/fopen_variation6.phpt44
-rw-r--r--ext/standard/tests/file/fopen_variation7.phpt68
-rw-r--r--ext/standard/tests/file/fopen_variation8.phpt170
-rw-r--r--ext/standard/tests/file/fopen_variation9.phpt67
-rw-r--r--ext/standard/tests/file/fpassthru_error.phpt7
-rw-r--r--ext/standard/tests/file/fpassthru_variation1.phpt223
-rw-r--r--ext/standard/tests/file/fputcsv_002.phpt43
-rw-r--r--ext/standard/tests/file/fread_error.phpt2
-rw-r--r--ext/standard/tests/file/fread_fwrite_basic.phpt72
-rw-r--r--ext/standard/tests/file/fscanf_variation10.phpt2
-rw-r--r--ext/standard/tests/file/fscanf_variation16.phpt2
-rw-r--r--ext/standard/tests/file/fscanf_variation22.phpt2
-rw-r--r--ext/standard/tests/file/fscanf_variation29.phpt2
-rw-r--r--ext/standard/tests/file/fscanf_variation35.phpt2
-rw-r--r--ext/standard/tests/file/fscanf_variation4.phpt2
-rw-r--r--ext/standard/tests/file/fscanf_variation41.phpt2
-rw-r--r--ext/standard/tests/file/fscanf_variation47.phpt2
-rw-r--r--ext/standard/tests/file/fseek_dir_basic.phpt2
-rw-r--r--ext/standard/tests/file/fseek_ftell_rewind_error1.phpt2
-rw-r--r--ext/standard/tests/file/fseek_ftell_rewind_error2.phpt2
-rw-r--r--ext/standard/tests/file/fseek_ftell_rewind_error3.phpt2
-rw-r--r--ext/standard/tests/file/fseek_variation1.phpt177
-rw-r--r--ext/standard/tests/file/fseek_variation2.phpt150
-rw-r--r--ext/standard/tests/file/fseek_variation3.phpt54
-rw-r--r--ext/standard/tests/file/fstat_basic.phpt65
-rw-r--r--ext/standard/tests/file/fstat_error.phpt22
-rw-r--r--ext/standard/tests/file/fstat_variation1.phpt34
-rw-r--r--ext/standard/tests/file/fstat_variation2.phpt31
-rw-r--r--ext/standard/tests/file/fstat_variation3.phpt42
-rw-r--r--ext/standard/tests/file/fstat_variation4.phpt35
-rw-r--r--ext/standard/tests/file/fstat_variation5.phpt31
-rw-r--r--ext/standard/tests/file/fstat_variation6.phpt46
-rw-r--r--ext/standard/tests/file/fstat_variation7.phpt35
-rw-r--r--ext/standard/tests/file/fstat_variation8.phpt33
-rw-r--r--ext/standard/tests/file/ftruncate_error.phpt2
-rw-r--r--ext/standard/tests/file/fwrite_error.phpt2
-rw-r--r--ext/standard/tests/file/fwrite_variation5.phpt173
-rwxr-xr-xext/standard/tests/file/glob_basic.phpt17
-rw-r--r--ext/standard/tests/file/glob_error_002-win32.phpt27
-rw-r--r--ext/standard/tests/file/is_dir_variation3.phpt2
-rw-r--r--ext/standard/tests/file/is_executable_variation3.phpt2
-rw-r--r--ext/standard/tests/file/is_file_variation3.phpt2
-rw-r--r--ext/standard/tests/file/is_file_variation4.phpt2
-rw-r--r--ext/standard/tests/file/is_readable_variation1.phpt18
-rw-r--r--ext/standard/tests/file/is_readable_variation3.phpt21
-rw-r--r--ext/standard/tests/file/is_uploaded_file_basic.phpt50
-rw-r--r--ext/standard/tests/file/is_writable_variation1.phpt20
-rw-r--r--ext/standard/tests/file/is_writable_variation3.phpt21
-rwxr-xr-xext/standard/tests/file/lstat_stat_variation2.phpt7
-rw-r--r--ext/standard/tests/file/lstat_stat_variation22.phpt49
-rwxr-xr-xext/standard/tests/file/lstat_stat_variation3.phpt15
-rw-r--r--ext/standard/tests/file/mkdir_variation1-win32.phpt123
-rw-r--r--ext/standard/tests/file/mkdir_variation1.phpt121
-rw-r--r--ext/standard/tests/file/mkdir_variation2.phpt189
-rw-r--r--ext/standard/tests/file/mkdir_variation3.phpt208
-rw-r--r--ext/standard/tests/file/mkdir_variation4.phpt220
-rw-r--r--ext/standard/tests/file/mkdir_variation5-win32.phpt105
-rw-r--r--ext/standard/tests/file/mkdir_variation5.phpt93
-rw-r--r--ext/standard/tests/file/move_uploaded_file_basic.phpt79
-rw-r--r--ext/standard/tests/file/open_basedir.inc133
-rw-r--r--ext/standard/tests/file/open_basedir_chdir.phpt51
-rw-r--r--ext/standard/tests/file/open_basedir_chmod.phpt71
-rw-r--r--ext/standard/tests/file/open_basedir_copy.phpt79
-rw-r--r--ext/standard/tests/file/open_basedir_copy_variation1.phpt35
-rw-r--r--ext/standard/tests/file/open_basedir_disk_free_space.phpt52
-rw-r--r--ext/standard/tests/file/open_basedir_file.phpt88
-rw-r--r--ext/standard/tests/file/open_basedir_file_exists.phpt55
-rw-r--r--ext/standard/tests/file/open_basedir_file_get_contents.phpt75
-rw-r--r--ext/standard/tests/file/open_basedir_file_put_contents.phpt57
-rw-r--r--ext/standard/tests/file/open_basedir_fileatime.phpt55
-rw-r--r--ext/standard/tests/file/open_basedir_filectime.phpt55
-rw-r--r--ext/standard/tests/file/open_basedir_filegroup.phpt55
-rw-r--r--ext/standard/tests/file/open_basedir_fileinode.phpt55
-rw-r--r--ext/standard/tests/file/open_basedir_filemtime.phpt55
-rw-r--r--ext/standard/tests/file/open_basedir_fileowner.phpt55
-rw-r--r--ext/standard/tests/file/open_basedir_fileperms.phpt55
-rw-r--r--ext/standard/tests/file/open_basedir_filesize.phpt55
-rw-r--r--ext/standard/tests/file/open_basedir_filetype.phpt55
-rw-r--r--ext/standard/tests/file/open_basedir_fopen.phpt86
-rw-r--r--ext/standard/tests/file/open_basedir_glob-win32.phpt59
-rw-r--r--ext/standard/tests/file/open_basedir_glob.phpt58
-rw-r--r--ext/standard/tests/file/open_basedir_is_dir.phpt55
-rw-r--r--ext/standard/tests/file/open_basedir_is_executable.phpt59
-rw-r--r--ext/standard/tests/file/open_basedir_is_file.phpt55
-rw-r--r--ext/standard/tests/file/open_basedir_is_link.phpt55
-rw-r--r--ext/standard/tests/file/open_basedir_is_readable.phpt55
-rw-r--r--ext/standard/tests/file/open_basedir_is_writable.phpt55
-rw-r--r--ext/standard/tests/file/open_basedir_link.phpt78
-rw-r--r--ext/standard/tests/file/open_basedir_linkinfo.phpt64
-rw-r--r--ext/standard/tests/file/open_basedir_lstat.phpt55
-rw-r--r--ext/standard/tests/file/open_basedir_mkdir.phpt52
-rw-r--r--ext/standard/tests/file/open_basedir_parse_ini_file.phpt74
-rw-r--r--ext/standard/tests/file/open_basedir_readlink.phpt76
-rw-r--r--ext/standard/tests/file/open_basedir_realpath.phpt61
-rw-r--r--ext/standard/tests/file/open_basedir_rename.phpt47
-rw-r--r--ext/standard/tests/file/open_basedir_rmdir.phpt47
-rw-r--r--ext/standard/tests/file/open_basedir_stat.phpt55
-rw-r--r--ext/standard/tests/file/open_basedir_symlink.phpt78
-rw-r--r--ext/standard/tests/file/open_basedir_tempnam.phpt57
-rw-r--r--ext/standard/tests/file/open_basedir_touch.phpt70
-rw-r--r--ext/standard/tests/file/open_basedir_unlink.phpt47
-rw-r--r--ext/standard/tests/file/parse_ini_file_error.phpt7
-rw-r--r--ext/standard/tests/file/parse_ini_file_variation1.phpt68
-rw-r--r--ext/standard/tests/file/parse_ini_file_variation2.phpt111
-rw-r--r--ext/standard/tests/file/parse_ini_file_variation3.phpt104
-rw-r--r--ext/standard/tests/file/parse_ini_file_variation4.phpt216
-rw-r--r--ext/standard/tests/file/parse_ini_file_variation5.phpt265
-rw-r--r--ext/standard/tests/file/parse_ini_file_variation6-win32.phpt143
-rw-r--r--ext/standard/tests/file/parse_ini_file_variation6.phpt129
-rw-r--r--ext/standard/tests/file/pathinfo_basic1-win32.phpt609
-rw-r--r--ext/standard/tests/file/pathinfo_basic1.phpt609
-rw-r--r--ext/standard/tests/file/pathinfo_basic2-win32.phpt270
-rw-r--r--ext/standard/tests/file/pathinfo_basic2.phpt272
-rw-r--r--ext/standard/tests/file/pathinfo_variation1.phpt190
-rw-r--r--ext/standard/tests/file/pathinfo_variation2.phpt197
-rw-r--r--ext/standard/tests/file/pathinfo_variation3.phpt80
-rw-r--r--ext/standard/tests/file/pclose_variation1.phpt231
-rw-r--r--ext/standard/tests/file/popen_pclose_error-sunos.phpt2
-rw-r--r--ext/standard/tests/file/proc_open01.phpt2
-rw-r--r--ext/standard/tests/file/readfile_error.phpt8
-rw-r--r--ext/standard/tests/file/readfile_variation10-win32.phpt87
-rw-r--r--ext/standard/tests/file/readfile_variation10.phptbin0 -> 1789 bytes
-rw-r--r--ext/standard/tests/file/readfile_variation4.phpt251
-rw-r--r--ext/standard/tests/file/readfile_variation5.phpt221
-rw-r--r--ext/standard/tests/file/readfile_variation6.phpt50
-rw-r--r--ext/standard/tests/file/readfile_variation7.phpt50
-rw-r--r--ext/standard/tests/file/readfile_variation8-win32.phpt109
-rw-r--r--ext/standard/tests/file/readfile_variation9.phpt99
-rw-r--r--ext/standard/tests/file/readlink_realpath_basic1.phpt13
-rw-r--r--ext/standard/tests/file/readlink_realpath_basic2.phpt8
-rw-r--r--ext/standard/tests/file/readlink_variation1.phpt77
-rw-r--r--ext/standard/tests/file/realpath_variation2.phpt74
-rwxr-xr-xext/standard/tests/file/rename_basic.phpt24
-rw-r--r--ext/standard/tests/file/rename_variation-win32.phpt2
-rw-r--r--ext/standard/tests/file/rename_variation10.phpt253
-rw-r--r--ext/standard/tests/file/rename_variation11-win32.phpt128
-rw-r--r--ext/standard/tests/file/rename_variation12.phpt117
-rw-r--r--ext/standard/tests/file/rename_variation13-win32.phpt139
-rw-r--r--ext/standard/tests/file/rename_variation13.phpt132
-rw-r--r--ext/standard/tests/file/rmdir_variation1-win32.phpt127
-rw-r--r--ext/standard/tests/file/rmdir_variation1.phpt127
-rw-r--r--ext/standard/tests/file/rmdir_variation2.phpt244
-rw-r--r--ext/standard/tests/file/rmdir_variation3-win32.phpt108
-rw-r--r--ext/standard/tests/file/rmdir_variation3.phpt96
-rw-r--r--ext/standard/tests/file/symlink_link_linkinfo_is_link_error2.phpt6
-rw-r--r--ext/standard/tests/file/symlink_to_symlink.phpt50
-rw-r--r--ext/standard/tests/file/tempnam_variation1-win32.phpt50
-rw-r--r--ext/standard/tests/file/tempnam_variation1.phpt47
-rw-r--r--ext/standard/tests/file/tempnam_variation2-win32.phpt98
-rw-r--r--ext/standard/tests/file/tempnam_variation2.phpt96
-rw-r--r--ext/standard/tests/file/tempnam_variation3-win32.phpt68
-rw-r--r--ext/standard/tests/file/tempnam_variation3.phpt68
-rw-r--r--ext/standard/tests/file/tempnam_variation4.phpt1050
-rw-r--r--ext/standard/tests/file/tempnam_variation5-win32.phpt54
-rw-r--r--ext/standard/tests/file/tempnam_variation5.phpt14
-rw-r--r--ext/standard/tests/file/tempnam_variation6-win32.phpt62
-rw-r--r--ext/standard/tests/file/tempnam_variation6.phpt31
-rw-r--r--ext/standard/tests/file/tempnam_variation7-win32.phpt51
-rw-r--r--ext/standard/tests/file/tempnam_variation7.phpt51
-rw-r--r--ext/standard/tests/file/tempnam_variation8-win32.phpt147
-rw-r--r--ext/standard/tests/file/touch.phpt10
-rw-r--r--ext/standard/tests/file/touch_basic-win32.phpt95
-rw-r--r--ext/standard/tests/file/touch_basic.phpt96
-rw-r--r--ext/standard/tests/file/touch_error.phpt21
-rw-r--r--ext/standard/tests/file/touch_variation1.phpt39
-rw-r--r--ext/standard/tests/file/touch_variation2.phpt24
-rw-r--r--ext/standard/tests/file/touch_variation3-win32.phpt198
-rw-r--r--ext/standard/tests/file/touch_variation3.phpt196
-rw-r--r--ext/standard/tests/file/touch_variation4-win32.phpt198
-rw-r--r--ext/standard/tests/file/touch_variation4.phpt196
-rw-r--r--ext/standard/tests/file/touch_variation5-win32.phpt249
-rw-r--r--ext/standard/tests/file/touch_variation5.phpt230
-rw-r--r--ext/standard/tests/file/touch_variation6-win32.phpt263
-rw-r--r--ext/standard/tests/file/umask_variation3.phpt226
-rw-r--r--ext/standard/tests/file/unlink_variation10.phpt106
-rw-r--r--ext/standard/tests/file/unlink_variation6.phpt41
-rw-r--r--ext/standard/tests/file/unlink_variation7.phpt246
-rw-r--r--ext/standard/tests/file/unlink_variation8-win32.phpt112
-rw-r--r--ext/standard/tests/file/unlink_variation8.phpt206
-rw-r--r--ext/standard/tests/file/unlink_variation9-win32.phpt120
-rw-r--r--ext/standard/tests/file/userstreams_004.phpt58
-rw-r--r--ext/standard/tests/filters/bug46164-1.phpt22
-rw-r--r--ext/standard/tests/filters/bug46164-2.phpt24
-rw-r--r--ext/standard/tests/filters/filter_errors.inc34
-rw-r--r--ext/standard/tests/filters/filter_errors_convert_base64_decode.phpt18
-rw-r--r--ext/standard/tests/filters/filter_errors_user.phpt179
-rw-r--r--ext/standard/tests/filters/filter_errors_zlib_inflate.phpt14
-rw-r--r--ext/standard/tests/general_functions/008.phpt2
-rw-r--r--ext/standard/tests/general_functions/bug42272.phpt2
-rw-r--r--ext/standard/tests/general_functions/bug44394.phpt2
-rw-r--r--ext/standard/tests/general_functions/bug44394_2.phpt6
-rw-r--r--ext/standard/tests/general_functions/bug47027.phpt12
-rw-r--r--ext/standard/tests/general_functions/call_user_func_array_variation_001.phpt57
-rw-r--r--ext/standard/tests/general_functions/call_user_func_array_variation_002.phpt210
-rw-r--r--ext/standard/tests/general_functions/call_user_func_array_variation_003.phpt185
-rw-r--r--ext/standard/tests/general_functions/escapeshellarg_basic-win32.phpt31
-rw-r--r--ext/standard/tests/general_functions/escapeshellarg_basic.phpt31
-rw-r--r--ext/standard/tests/general_functions/escapeshellarg_error.phpt73
-rw-r--r--ext/standard/tests/general_functions/escapeshellarg_variation1-win32.phpt140
-rw-r--r--ext/standard/tests/general_functions/escapeshellarg_variation1.phpt140
-rw-r--r--ext/standard/tests/general_functions/floatval_basic.phpt172
-rw-r--r--ext/standard/tests/general_functions/floatval_error.phpt40
-rw-r--r--ext/standard/tests/general_functions/floatval_variation1.phpt154
-rw-r--r--ext/standard/tests/general_functions/get_defined_vars_basic.phpt152
-rw-r--r--ext/standard/tests/general_functions/get_extension_funcs_basic.phpt23
-rw-r--r--ext/standard/tests/general_functions/get_extension_funcs_error.phpt40
-rw-r--r--ext/standard/tests/general_functions/get_extension_funcs_variation.phpt135
-rw-r--r--ext/standard/tests/general_functions/get_include_path_basic.phpt37
-rw-r--r--ext/standard/tests/general_functions/get_included_files.phpt63
-rw-r--r--ext/standard/tests/general_functions/get_included_files_inc1.inc3
-rw-r--r--ext/standard/tests/general_functions/get_included_files_inc2.inc4
-rw-r--r--ext/standard/tests/general_functions/get_included_files_inc3.inc4
-rw-r--r--ext/standard/tests/general_functions/get_magic_quotes_gpc.phpt49
-rw-r--r--ext/standard/tests/general_functions/get_magic_quotes_runtime.phpt59
-rw-r--r--ext/standard/tests/general_functions/getmypid_basic.phpt24
-rw-r--r--ext/standard/tests/general_functions/getrusage_basic.phpt33
-rw-r--r--ext/standard/tests/general_functions/getrusage_error.phpt73
-rw-r--r--ext/standard/tests/general_functions/getrusage_variation1.phpt142
-rw-r--r--ext/standard/tests/general_functions/is_callable_basic1.phpt109
-rw-r--r--ext/standard/tests/general_functions/is_callable_basic2.phpt (renamed from ext/standard/tests/general_functions/is_callable.phpt)452
-rw-r--r--ext/standard/tests/general_functions/is_callable_error.phpt35
-rw-r--r--ext/standard/tests/general_functions/is_callable_variation1.phpt208
-rw-r--r--ext/standard/tests/general_functions/is_callable_variation2.phpt154
-rw-r--r--ext/standard/tests/general_functions/parse_ini_file.phpt16
-rw-r--r--ext/standard/tests/general_functions/php_uname_basic.phpt35
-rw-r--r--ext/standard/tests/general_functions/php_uname_error.phpt56
-rw-r--r--ext/standard/tests/general_functions/php_uname_variation1.phpt112
-rw-r--r--ext/standard/tests/general_functions/set_magic_quotes_runtime_basic.phpt52
-rw-r--r--ext/standard/tests/general_functions/set_magic_quotes_runtime_error.phpt29
-rw-r--r--ext/standard/tests/general_functions/set_magic_quotes_runtime_variation1.phpt156
-rw-r--r--ext/standard/tests/general_functions/var_export.phpt1054
-rw-r--r--ext/standard/tests/general_functions/var_export_basic1.phpt141
-rw-r--r--ext/standard/tests/general_functions/var_export_basic2.phpt76
-rw-r--r--ext/standard/tests/general_functions/var_export_basic3.phpt175
-rw-r--r--ext/standard/tests/general_functions/var_export_basic4.phpt147
-rw-r--r--ext/standard/tests/general_functions/var_export_basic5.phpt277
-rw-r--r--ext/standard/tests/general_functions/var_export_basic6.phpt310
-rw-r--r--ext/standard/tests/general_functions/var_export_basic7.phpt59
-rw-r--r--ext/standard/tests/general_functions/var_export_basic8.phpt71
-rw-r--r--ext/standard/tests/general_functions/var_export_error1.phpt38
-rw-r--r--ext/standard/tests/general_functions/var_export_error2.phpt25
-rw-r--r--ext/standard/tests/general_functions/var_export_error3.phpt27
-rw-r--r--ext/standard/tests/image/200x100.bmpbin0 -> 60054 bytes
-rw-r--r--ext/standard/tests/image/200x100.gifbin0 -> 1031 bytes
-rw-r--r--ext/standard/tests/image/200x100.jpgbin0 -> 991 bytes
-rw-r--r--ext/standard/tests/image/200x100.pngbin0 -> 683 bytes
-rw-r--r--ext/standard/tests/image/200x100.swfbin0 -> 71 bytes
-rw-r--r--ext/standard/tests/image/200x100.tifbin0 -> 1142 bytes
-rw-r--r--ext/standard/tests/image/200x100_unknown.unknown1
-rw-r--r--ext/standard/tests/image/2x2mm.tifbin0 -> 118 bytes
-rw-r--r--ext/standard/tests/image/75x50.wbmpbin0 -> 504 bytes
-rw-r--r--ext/standard/tests/image/75x50.xbm59
-rw-r--r--ext/standard/tests/image/blank_file0
-rw-r--r--ext/standard/tests/image/blank_file.bmp0
-rw-r--r--ext/standard/tests/image/getimagesize_basic.phpt219
-rw-r--r--ext/standard/tests/image/getimagesize_error1.phpt38
-rw-r--r--ext/standard/tests/image/getimagesize_jpgapp.phpt37
-rw-r--r--ext/standard/tests/image/getimagesize_tif_mm.phpt39
-rw-r--r--ext/standard/tests/image/getimagesize_variation1.phpt192
-rw-r--r--ext/standard/tests/image/getimagesize_variation2.phpt167
-rw-r--r--ext/standard/tests/image/getimagesize_variation3.phpt70
-rw-r--r--ext/standard/tests/image/getimagesize_variation4.phpt38
-rw-r--r--ext/standard/tests/image/getimagesize_wbmp.phpt39
-rw-r--r--ext/standard/tests/image/getimagesize_xbm.phpt39
-rw-r--r--ext/standard/tests/image/test.txt1
-rw-r--r--ext/standard/tests/image/testAPP.jpgbin0 -> 12174 bytes
-rw-r--r--ext/standard/tests/mail/ezmlm_hash_basic.phpt25
-rw-r--r--ext/standard/tests/mail/ezmlm_hash_basic_64bit.phpt25
-rw-r--r--ext/standard/tests/mail/ezmlm_hash_error.phpt66
-rw-r--r--ext/standard/tests/mail/ezmlm_hash_variation1.phpt203
-rw-r--r--ext/standard/tests/mail/mail_basic.phpt59
-rw-r--r--ext/standard/tests/mail/mail_basic2.phpt48
-rw-r--r--ext/standard/tests/mail/mail_basic3.phpt35
-rw-r--r--ext/standard/tests/mail/mail_basic4.phpt36
-rw-r--r--ext/standard/tests/mail/mail_basic5.phpt34
-rw-r--r--ext/standard/tests/mail/mail_basic_alt1-win32.phpt95
-rw-r--r--ext/standard/tests/mail/mail_basic_alt2-win32.phpt93
-rw-r--r--ext/standard/tests/mail/mail_basic_alt3-win32.phpt93
-rw-r--r--ext/standard/tests/mail/mail_basic_alt4-win32.phpt94
-rw-r--r--ext/standard/tests/mail/mail_error.phpt44
-rw-r--r--ext/standard/tests/mail/mail_include.inc150
-rw-r--r--ext/standard/tests/mail/mail_skipif.inc16
-rw-r--r--ext/standard/tests/mail/mail_variation1.phpt30
-rw-r--r--ext/standard/tests/mail/mail_variation2.phpt39
-rw-r--r--ext/standard/tests/mail/mail_variation_alt1-win32.phpt92
-rw-r--r--ext/standard/tests/mail/mail_variation_alt2-win32.phpt92
-rw-r--r--ext/standard/tests/mail/mail_variation_alt3-win32.phpt91
-rw-r--r--ext/standard/tests/math/abs_basic.phpt51
-rw-r--r--ext/standard/tests/math/abs_error.phpt39
-rw-r--r--ext/standard/tests/math/abs_variation.phpt135
-rw-r--r--ext/standard/tests/math/atan2_variation1.phpt173
-rw-r--r--ext/standard/tests/math/atan2_variation2.phpt172
-rw-r--r--ext/standard/tests/math/base_convert_error.phpt34
-rw-r--r--ext/standard/tests/math/base_convert_variation1.phpt159
-rw-r--r--ext/standard/tests/math/base_convert_variation2.phpt193
-rw-r--r--ext/standard/tests/math/base_convert_variation3.phpt193
-rw-r--r--ext/standard/tests/math/bindec_basic.phpt2
-rw-r--r--ext/standard/tests/math/bindec_basic_64bit.phpt2
-rw-r--r--ext/standard/tests/math/bindec_error.phpt31
-rw-r--r--ext/standard/tests/math/bindec_variation1.phpt158
-rw-r--r--ext/standard/tests/math/bindec_variation1_64bit.phpt158
-rw-r--r--ext/standard/tests/math/bug45712.phpt73
-rw-r--r--ext/standard/tests/math/ceil_basic.phpt66
-rw-r--r--ext/standard/tests/math/ceil_error.phpt33
-rw-r--r--ext/standard/tests/math/ceil_variation1.phpt128
-rw-r--r--ext/standard/tests/math/decbin_error.phpt20
-rw-r--r--ext/standard/tests/math/decbin_variation1.phpt178
-rw-r--r--ext/standard/tests/math/decbin_variation1_64bit.phpt179
-rw-r--r--ext/standard/tests/math/dechex_error.phpt19
-rw-r--r--ext/standard/tests/math/dechex_variation1.phpt179
-rw-r--r--ext/standard/tests/math/dechex_variation1_64bit.phpt179
-rw-r--r--ext/standard/tests/math/decoct_error.phpt20
-rw-r--r--ext/standard/tests/math/decoct_variation1.phpt180
-rw-r--r--ext/standard/tests/math/decoct_variation1_64bit.phpt180
-rw-r--r--ext/standard/tests/math/exp_basic.phpt78
-rw-r--r--ext/standard/tests/math/exp_variation1.phpt187
-rw-r--r--ext/standard/tests/math/expm1_basic.phpt83
-rw-r--r--ext/standard/tests/math/expm1_error.phpt37
-rw-r--r--ext/standard/tests/math/expm1_variation1.phpt185
-rw-r--r--ext/standard/tests/math/floor_basic.phpt108
-rw-r--r--ext/standard/tests/math/floor_error.phpt33
-rw-r--r--ext/standard/tests/math/floor_variation1.phpt128
-rw-r--r--ext/standard/tests/math/fmod_variation1.phpt184
-rw-r--r--ext/standard/tests/math/fmod_variation2.phpt184
-rw-r--r--ext/standard/tests/math/hexdec_basic_64bit.phpt93
-rw-r--r--ext/standard/tests/math/hexdec_error.phpt28
-rw-r--r--ext/standard/tests/math/hexdec_variation1.phpt168
-rw-r--r--ext/standard/tests/math/hexdec_variation1_64bit.phpt168
-rw-r--r--ext/standard/tests/math/hypot_basic.phpt392
-rw-r--r--ext/standard/tests/math/hypot_error.phpt25
-rw-r--r--ext/standard/tests/math/hypot_variation1.phpt171
-rw-r--r--ext/standard/tests/math/hypot_variation2.phpt171
-rw-r--r--ext/standard/tests/math/is_finite_variation1.phpt184
-rw-r--r--ext/standard/tests/math/is_infinite_variation1.phpt184
-rw-r--r--ext/standard/tests/math/is_nan_variation1.phpt184
-rw-r--r--ext/standard/tests/math/log1p_basic.phpt82
-rw-r--r--ext/standard/tests/math/log1p_error.phpt33
-rw-r--r--ext/standard/tests/math/log1p_variation1.phpt181
-rw-r--r--ext/standard/tests/math/log_variation1.phpt170
-rw-r--r--ext/standard/tests/math/log_variation2.phpt200
-rw-r--r--ext/standard/tests/math/mt_rand_variation1.phpt184
-rw-r--r--ext/standard/tests/math/mt_rand_variation2.phpt184
-rw-r--r--ext/standard/tests/math/mt_srand_variation1.phpt184
-rw-r--r--ext/standard/tests/math/octdec_basic_64bit.phpt54
-rw-r--r--ext/standard/tests/math/octdec_error.phpt29
-rw-r--r--ext/standard/tests/math/octdec_variation1.phpt164
-rw-r--r--ext/standard/tests/math/pow_basic.phpt294
-rw-r--r--ext/standard/tests/math/pow_basic2.phpt52
-rw-r--r--ext/standard/tests/math/pow_basic_64bit.phpt287
-rw-r--r--ext/standard/tests/math/pow_variation1.phpt176
-rw-r--r--ext/standard/tests/math/pow_variation1_64bit.phpt176
-rw-r--r--ext/standard/tests/math/pow_variation2.phpt172
-rw-r--r--ext/standard/tests/math/rand_variation1.phpt184
-rw-r--r--ext/standard/tests/math/rand_variation2.phpt184
-rw-r--r--ext/standard/tests/math/round_basic.phpt192
-rw-r--r--ext/standard/tests/math/round_error.phpt33
-rw-r--r--ext/standard/tests/math/round_variation1.phpt173
-rw-r--r--ext/standard/tests/math/round_variation2.phpt173
-rw-r--r--ext/standard/tests/math/sqrt_variation.phpt174
-rw-r--r--ext/standard/tests/math/srand_basic.phpt14
-rw-r--r--ext/standard/tests/math/srand_error.phpt29
-rw-r--r--ext/standard/tests/math/srand_variation1.phpt184
-rw-r--r--ext/standard/tests/misc/syslog_basic.phpt13
-rw-r--r--ext/standard/tests/misc/syslog_parameters.phpt22
-rw-r--r--ext/standard/tests/misc/syslog_vars_variation1.phpt10
-rw-r--r--ext/standard/tests/misc/syslog_vars_variation2.phpt51
-rw-r--r--ext/standard/tests/network/closelog_basic.phpt23
-rw-r--r--ext/standard/tests/network/closelog_error.phpt27
-rw-r--r--ext/standard/tests/network/define_syslog_variables_basic-win32.phpt105
-rw-r--r--ext/standard/tests/network/define_syslog_variables_basic.phpt124
-rw-r--r--ext/standard/tests/network/define_syslog_variables_error.phpt27
-rw-r--r--ext/standard/tests/network/define_syslog_variables_variation-win32.phpt96
-rw-r--r--ext/standard/tests/network/define_syslog_variables_variation.phpt96
-rw-r--r--ext/standard/tests/network/define_syslog_variables_variation2-win32.phpt96
-rw-r--r--ext/standard/tests/network/define_syslog_variables_variation2.phpt96
-rw-r--r--ext/standard/tests/network/fsockopen_basic.phpt54
-rw-r--r--ext/standard/tests/network/fsockopen_error.phpt75
-rw-r--r--ext/standard/tests/network/fsockopen_variation1.phpt32
-rw-r--r--ext/standard/tests/network/fsockopen_variation2.phpt48
-rw-r--r--ext/standard/tests/network/inet.phpt8
-rw-r--r--ext/standard/tests/network/ip2long_error.phpt37
-rw-r--r--ext/standard/tests/network/ip2long_variation1.phpt199
-rw-r--r--ext/standard/tests/network/long2ip_error.phpt37
-rw-r--r--ext/standard/tests/network/long2ip_variation1.phpt196
-rw-r--r--ext/standard/tests/network/socket_get_status_basic.phpt27
-rw-r--r--ext/standard/tests/network/syslog_basic-win32.phpt31
-rw-r--r--ext/standard/tests/network/syslog_error.phpt40
-rw-r--r--ext/standard/tests/serialize/incomplete_class.phpt27
-rw-r--r--ext/standard/tests/streams/bug44818.phpt37
-rw-r--r--ext/standard/tests/streams/bug46024.phpt46
-rw-r--r--ext/standard/tests/streams/bug46426.phpt34
-rw-r--r--ext/standard/tests/streams/stream_get_contents_001.phpt22
-rw-r--r--ext/standard/tests/streams/stream_get_contents_002.phpt18
-rw-r--r--ext/standard/tests/streams/stream_get_line_nb.phpt66
-rw-r--r--ext/standard/tests/streams/stream_get_meta_data_socket_variation1.phpt3
-rw-r--r--ext/standard/tests/streams/stream_get_meta_data_socket_variation2.phpt3
-rw-r--r--ext/standard/tests/streams/stream_get_meta_data_socket_variation3.phpt3
-rw-r--r--ext/standard/tests/streams/stream_get_meta_data_socket_variation4.phpt3
-rw-r--r--ext/standard/tests/streams/stream_set_timeout_error.phpt5
-rw-r--r--ext/standard/tests/streams/stream_socket_pair.phpt22
-rw-r--r--ext/standard/tests/strings/006.phpt6
-rw-r--r--ext/standard/tests/strings/007.phpt4
-rw-r--r--ext/standard/tests/strings/addslashes_variation1.phpt96
-rw-r--r--ext/standard/tests/strings/bin2hex_basic.phpt50
-rw-r--r--ext/standard/tests/strings/bin2hex_error.phpt35
-rw-r--r--ext/standard/tests/strings/bin2hex_variation1.phpt126
-rw-r--r--ext/standard/tests/strings/bug37262.phpt4
-rw-r--r--ext/standard/tests/strings/bug40754.phpt4
-rw-r--r--ext/standard/tests/strings/bug45166.phpt10
-rw-r--r--ext/standard/tests/strings/bug45485.phpt23
-rw-r--r--ext/standard/tests/strings/bug47322.phpt19
-rw-r--r--ext/standard/tests/strings/chr_basic.phpt23
-rw-r--r--ext/standard/tests/strings/chr_error.phpt34
-rw-r--r--ext/standard/tests/strings/chr_variation1.phpt125
-rw-r--r--ext/standard/tests/strings/convert_cyr_string_basic.phpt165
-rw-r--r--ext/standard/tests/strings/convert_cyr_string_error.phpt73
-rw-r--r--ext/standard/tests/strings/convert_cyr_string_variation1.phpt137
-rw-r--r--ext/standard/tests/strings/convert_uudecode_basic.phpt54
-rw-r--r--ext/standard/tests/strings/convert_uudecode_error.phpt35
-rw-r--r--ext/standard/tests/strings/convert_uudecode_variation1.phpt161
-rw-r--r--ext/standard/tests/strings/convert_uuencode_basic.phpt88
-rw-r--r--ext/standard/tests/strings/convert_uuencode_error.phpt35
-rw-r--r--ext/standard/tests/strings/convert_uuencode_variation1.phpt137
-rw-r--r--ext/standard/tests/strings/count_chars_basic.phpt1574
-rw-r--r--ext/standard/tests/strings/count_chars_error.phpt36
-rw-r--r--ext/standard/tests/strings/count_chars_variation1.phpt289
-rw-r--r--ext/standard/tests/strings/count_chars_variation2.phpt150
-rw-r--r--ext/standard/tests/strings/explode.phpt3
-rw-r--r--ext/standard/tests/strings/explode_bug.phpt15
-rw-r--r--ext/standard/tests/strings/explode_error.phpt37
-rw-r--r--ext/standard/tests/strings/explode_variation1.phpt203
-rw-r--r--ext/standard/tests/strings/explode_variation2.phpt209
-rw-r--r--ext/standard/tests/strings/explode_variation3.phpt244
-rw-r--r--ext/standard/tests/strings/explode_variation4.phpt36
-rw-r--r--ext/standard/tests/strings/explode_variation5.phpt48
-rw-r--r--ext/standard/tests/strings/explode_variation6.phpt70
-rw-r--r--ext/standard/tests/strings/hebrev_basic.phpt35
-rw-r--r--ext/standard/tests/strings/hebrev_error.phpt35
-rw-r--r--ext/standard/tests/strings/hebrev_variation1.phpt136
-rw-r--r--ext/standard/tests/strings/hebrev_variation2.phpt298
-rw-r--r--ext/standard/tests/strings/hebrevc_basic.phpt47
-rw-r--r--ext/standard/tests/strings/hebrevc_error.phpt35
-rw-r--r--ext/standard/tests/strings/hebrevc_variation1.phpt136
-rw-r--r--ext/standard/tests/strings/hebrevc_variation2.phpt471
-rw-r--r--ext/standard/tests/strings/htmlentities18.phpt9
-rw-r--r--ext/standard/tests/strings/levenshtein.phpt6
-rw-r--r--ext/standard/tests/strings/ltrim_basic.phpt53
-rw-r--r--ext/standard/tests/strings/ltrim_error.phpt61
-rw-r--r--ext/standard/tests/strings/ltrim_variation1.phpt136
-rw-r--r--ext/standard/tests/strings/ltrim_variation2.phpt136
-rw-r--r--ext/standard/tests/strings/md5_file.phptbin3030 -> 3159 bytes
-rw-r--r--ext/standard/tests/strings/money_format_basic1.phpt84
-rw-r--r--ext/standard/tests/strings/money_format_basic2.phpt84
-rw-r--r--ext/standard/tests/strings/money_format_basic3.phpt83
-rw-r--r--ext/standard/tests/strings/money_format_error.phpt51
-rw-r--r--ext/standard/tests/strings/money_format_variation1.phpt178
-rw-r--r--ext/standard/tests/strings/money_format_variation2.phpt186
-rw-r--r--ext/standard/tests/strings/nl2br_variation5.phpt12
-rw-r--r--ext/standard/tests/strings/nl_langinfo_basic.phpt37
-rw-r--r--ext/standard/tests/strings/nl_langinfo_error1.phpt40
-rw-r--r--ext/standard/tests/strings/nl_langinfo_variation1.phpt181
-rw-r--r--ext/standard/tests/strings/number_format_basic.phpt99
-rw-r--r--ext/standard/tests/strings/number_format_error.phpt38
-rw-r--r--ext/standard/tests/strings/ord_basic.phpt47
-rw-r--r--ext/standard/tests/strings/ord_error.phpt34
-rw-r--r--ext/standard/tests/strings/ord_variation1.phpt135
-rw-r--r--ext/standard/tests/strings/print_basic.phpt92
-rw-r--r--ext/standard/tests/strings/print_variation1.phpt150
-rwxr-xr-xext/standard/tests/strings/printf.phpt18
-rwxr-xr-xext/standard/tests/strings/printf_64bit.phpt18
-rw-r--r--ext/standard/tests/strings/printf_basic1.phpt62
-rw-r--r--ext/standard/tests/strings/printf_basic2.phpt62
-rw-r--r--ext/standard/tests/strings/printf_basic3.phpt82
-rw-r--r--ext/standard/tests/strings/printf_basic4.phpt61
-rw-r--r--ext/standard/tests/strings/printf_basic5.phpt61
-rw-r--r--ext/standard/tests/strings/printf_basic6.phpt60
-rw-r--r--ext/standard/tests/strings/printf_basic7.phpt68
-rw-r--r--ext/standard/tests/strings/printf_basic8.phpt67
-rw-r--r--ext/standard/tests/strings/printf_basic9.phpt83
-rw-r--r--ext/standard/tests/strings/printf_error.phpt70
-rw-r--r--ext/standard/tests/strings/printf_variation1.phpt354
-rw-r--r--ext/standard/tests/strings/printf_variation2.phpt281
-rw-r--r--ext/standard/tests/strings/quoted_printable_decode_basic.phpt25
-rw-r--r--ext/standard/tests/strings/quoted_printable_decode_error.phpt38
-rw-r--r--ext/standard/tests/strings/quoted_printable_decode_variation1.phpt189
-rw-r--r--ext/standard/tests/strings/quotemeta_basic.phpt23
-rw-r--r--ext/standard/tests/strings/quotemeta_error.phpt34
-rw-r--r--ext/standard/tests/strings/rtrim_basic.phpt54
-rw-r--r--ext/standard/tests/strings/rtrim_error.phpt61
-rw-r--r--ext/standard/tests/strings/rtrim_variation1.phpt136
-rw-r--r--ext/standard/tests/strings/rtrim_variation2.phpt136
-rw-r--r--ext/standard/tests/strings/sha1_basic.phpt70
-rw-r--r--ext/standard/tests/strings/sha1_error.phpt35
-rw-r--r--ext/standard/tests/strings/sha1_file.phpt131
-rw-r--r--ext/standard/tests/strings/sha1_variation1.phpt157
-rw-r--r--ext/standard/tests/strings/sha1_variation2.phpt160
-rw-r--r--ext/standard/tests/strings/similar_text_basic.phpt44
-rw-r--r--ext/standard/tests/strings/similar_text_error.phpt29
-rw-r--r--ext/standard/tests/strings/sprintf_variation23.phpt40
-rw-r--r--ext/standard/tests/strings/sprintf_variation36.phpt44
-rw-r--r--ext/standard/tests/strings/sprintf_variation48.phpt9
-rw-r--r--ext/standard/tests/strings/sprintf_variation52.phpt2
-rw-r--r--ext/standard/tests/strings/sscanf_basic1.phpt44
-rw-r--r--ext/standard/tests/strings/sscanf_basic2.phpt44
-rw-r--r--ext/standard/tests/strings/sscanf_basic3.phpt43
-rw-r--r--ext/standard/tests/strings/sscanf_basic4.phpt43
-rw-r--r--ext/standard/tests/strings/sscanf_basic5.phpt58
-rw-r--r--ext/standard/tests/strings/sscanf_basic6.phpt47
-rw-r--r--ext/standard/tests/strings/sscanf_basic7.phpt47
-rw-r--r--ext/standard/tests/strings/sscanf_basic8.phpt65
-rw-r--r--ext/standard/tests/strings/sscanf_error.phpt44
-rw-r--r--ext/standard/tests/strings/sscanf_variation1.phpt179
-rw-r--r--ext/standard/tests/strings/sscanf_variation2.phpt155
-rw-r--r--ext/standard/tests/strings/str_pad_variation1.phpt138
-rw-r--r--ext/standard/tests/strings/str_pad_variation2.phpt131
-rw-r--r--ext/standard/tests/strings/str_pad_variation3.phpt151
-rw-r--r--ext/standard/tests/strings/str_pad_variation4.phpt158
-rw-r--r--ext/standard/tests/strings/str_pad_variation5.phpt31
-rw-r--r--ext/standard/tests/strings/str_shuffle_basic.phpt59
-rw-r--r--ext/standard/tests/strings/str_shuffle_error.phpt33
-rw-r--r--ext/standard/tests/strings/str_shuffle_variation1.phpt133
-rw-r--r--ext/standard/tests/strings/strip_tags_variation1.phpt98
-rw-r--r--ext/standard/tests/strings/strip_tags_variation11.phpt41
-rw-r--r--ext/standard/tests/strings/strip_tags_variation3.phpt98
-rw-r--r--ext/standard/tests/strings/stripcslashes_basic.phpt27
-rw-r--r--ext/standard/tests/strings/stripcslashes_error.phpt35
-rw-r--r--ext/standard/tests/strings/stripcslashes_variation1.phpt172
-rw-r--r--ext/standard/tests/strings/stripslashes_variation1.phpt98
-rw-r--r--ext/standard/tests/strings/stripslashes_variation2.phptbin9548 -> 9548 bytes
-rw-r--r--ext/standard/tests/strings/stristr_basic.phpt31
-rw-r--r--ext/standard/tests/strings/stristr_error.phpt60
-rw-r--r--ext/standard/tests/strings/stristr_variation1.phpt131
-rw-r--r--ext/standard/tests/strings/stristr_variation2.phpt127
-rw-r--r--ext/standard/tests/strings/strlen_basic.phpt24
-rw-r--r--ext/standard/tests/strings/strlen_error.phpt33
-rw-r--r--ext/standard/tests/strings/strlen_variation1.phpt135
-rw-r--r--ext/standard/tests/strings/strripos_basic1.phpt51
-rw-r--r--ext/standard/tests/strings/strripos_basic2.phpt64
-rw-r--r--ext/standard/tests/strings/strripos_error.phpt34
-rw-r--r--ext/standard/tests/strings/strripos_offset.phpt16
-rw-r--r--ext/standard/tests/strings/strripos_variation1.phpt254
-rw-r--r--ext/standard/tests/strings/strripos_variation2.phpt260
-rw-r--r--ext/standard/tests/strings/strripos_variation3.phpt59
-rw-r--r--ext/standard/tests/strings/strripos_variation4.phpt41
-rw-r--r--ext/standard/tests/strings/strripos_variation5.phpt34
-rw-r--r--ext/standard/tests/strings/strrpos_variation14.phpt2
-rw-r--r--ext/standard/tests/strings/strrpos_variation15.phpt10
-rw-r--r--ext/standard/tests/strings/strtolower-win32.phptbin4835 -> 4835 bytes
-rw-r--r--ext/standard/tests/strings/strtoupper1-win32.phptbin4846 -> 4846 bytes
-rw-r--r--ext/standard/tests/strings/strtr_variation5.phpt80
-rw-r--r--ext/standard/tests/strings/strtr_variation6.phpt79
-rw-r--r--ext/standard/tests/strings/strtr_variation7.phpt78
-rw-r--r--ext/standard/tests/strings/strtr_variation9.phpt82
-rw-r--r--ext/standard/tests/strings/strval_basic.phpt77
-rw-r--r--ext/standard/tests/strings/strval_error.phpt50
-rw-r--r--ext/standard/tests/strings/strval_variation1.phpt190
-rw-r--r--ext/standard/tests/strings/strval_variation2.phpt82
-rw-r--r--ext/standard/tests/strings/substr_replace_error.phpt70
-rw-r--r--ext/standard/tests/strings/trim_basic.phpt45
-rw-r--r--ext/standard/tests/strings/trim_error.phpt61
-rw-r--r--ext/standard/tests/strings/trim_variation1.phpt136
-rw-r--r--ext/standard/tests/strings/trim_variation2.phpt136
-rw-r--r--ext/standard/tests/strings/unpack_error.phpt42
-rw-r--r--ext/standard/tests/strings/vfprintf_basic.phpt71
-rw-r--r--ext/standard/tests/strings/vfprintf_basic1.phpt49
-rw-r--r--ext/standard/tests/strings/vfprintf_basic2.phpt51
-rw-r--r--ext/standard/tests/strings/vfprintf_basic3.phpt63
-rw-r--r--ext/standard/tests/strings/vfprintf_basic4.phpt46
-rw-r--r--ext/standard/tests/strings/vfprintf_basic5.phpt48
-rw-r--r--ext/standard/tests/strings/vfprintf_basic6.phpt49
-rw-r--r--ext/standard/tests/strings/vfprintf_basic7.phpt53
-rw-r--r--ext/standard/tests/strings/vfprintf_basic7_64bit.phpt51
-rw-r--r--ext/standard/tests/strings/vfprintf_basic8.phpt46
-rw-r--r--ext/standard/tests/strings/vfprintf_basic9.phpt60
-rw-r--r--ext/standard/tests/strings/vfprintf_error1.phpt46
-rw-r--r--ext/standard/tests/strings/vfprintf_error2.phpt48
-rw-r--r--ext/standard/tests/strings/vfprintf_error3.phpt54
-rw-r--r--ext/standard/tests/strings/vfprintf_error4.phpt43
-rw-r--r--ext/standard/tests/strings/vfprintf_variation1.phpt86
-rw-r--r--ext/standard/tests/strings/vfprintf_variation10.phptbin0 -> 2963 bytes
-rw-r--r--ext/standard/tests/strings/vfprintf_variation11.phpt88
-rw-r--r--ext/standard/tests/strings/vfprintf_variation11_64bit.phpt88
-rw-r--r--ext/standard/tests/strings/vfprintf_variation12.phpt125
-rw-r--r--ext/standard/tests/strings/vfprintf_variation12_64bit.phpt125
-rw-r--r--ext/standard/tests/strings/vfprintf_variation13.phpt88
-rw-r--r--ext/standard/tests/strings/vfprintf_variation13_64bit.phpt88
-rw-r--r--ext/standard/tests/strings/vfprintf_variation14.phpt125
-rw-r--r--ext/standard/tests/strings/vfprintf_variation14_64bit.phpt125
-rw-r--r--ext/standard/tests/strings/vfprintf_variation15.phpt75
-rw-r--r--ext/standard/tests/strings/vfprintf_variation15_64bit.phpt75
-rw-r--r--ext/standard/tests/strings/vfprintf_variation16.phpt112
-rw-r--r--ext/standard/tests/strings/vfprintf_variation16_64bit.phpt112
-rw-r--r--ext/standard/tests/strings/vfprintf_variation17.phpt70
-rw-r--r--ext/standard/tests/strings/vfprintf_variation18.phpt107
-rw-r--r--ext/standard/tests/strings/vfprintf_variation19.phpt94
-rw-r--r--ext/standard/tests/strings/vfprintf_variation19_64bit.phpt94
-rw-r--r--ext/standard/tests/strings/vfprintf_variation20.phpt175
-rw-r--r--ext/standard/tests/strings/vfprintf_variation21.phpt167
-rw-r--r--ext/standard/tests/strings/vfprintf_variation3.phpt87
-rw-r--r--ext/standard/tests/strings/vfprintf_variation4.phpt113
-rw-r--r--ext/standard/tests/strings/vfprintf_variation4_64bit.phpt113
-rw-r--r--ext/standard/tests/strings/vfprintf_variation5.phpt85
-rw-r--r--ext/standard/tests/strings/vfprintf_variation6.phpt108
-rw-r--r--ext/standard/tests/strings/vfprintf_variation7.phptbin0 -> 2391 bytes
-rw-r--r--ext/standard/tests/strings/vfprintf_variation8.phpt111
-rw-r--r--ext/standard/tests/strings/vfprintf_variation9.phptbin0 -> 1857 bytes
-rw-r--r--ext/standard/tests/strings/vprintf_basic1.phpt42
-rw-r--r--ext/standard/tests/strings/vprintf_basic2.phpt47
-rw-r--r--ext/standard/tests/strings/vprintf_basic3.phpt66
-rw-r--r--ext/standard/tests/strings/vprintf_basic4.phpt43
-rw-r--r--ext/standard/tests/strings/vprintf_basic5.phpt43
-rw-r--r--ext/standard/tests/strings/vprintf_basic6.phpt43
-rw-r--r--ext/standard/tests/strings/vprintf_basic7.phpt47
-rw-r--r--ext/standard/tests/strings/vprintf_basic7_64bit.phpt46
-rw-r--r--ext/standard/tests/strings/vprintf_basic8.phpt43
-rw-r--r--ext/standard/tests/strings/vprintf_basic9.phpt62
-rw-r--r--ext/standard/tests/strings/vprintf_error.phpt46
-rw-r--r--ext/standard/tests/strings/vprintf_variation1.phpt219
-rw-r--r--ext/standard/tests/strings/vprintf_variation10.phptbin0 -> 2783 bytes
-rw-r--r--ext/standard/tests/strings/vprintf_variation11.phpt94
-rw-r--r--ext/standard/tests/strings/vprintf_variation11_64bit.phpt94
-rw-r--r--ext/standard/tests/strings/vprintf_variation12.phpt125
-rw-r--r--ext/standard/tests/strings/vprintf_variation12_64bit.phpt125
-rw-r--r--ext/standard/tests/strings/vprintf_variation13.phpt94
-rw-r--r--ext/standard/tests/strings/vprintf_variation13_64bit.phpt94
-rw-r--r--ext/standard/tests/strings/vprintf_variation14.phpt126
-rw-r--r--ext/standard/tests/strings/vprintf_variation14_64bit.phpt126
-rw-r--r--ext/standard/tests/strings/vprintf_variation15.phpt75
-rw-r--r--ext/standard/tests/strings/vprintf_variation15_64bit.phpt75
-rw-r--r--ext/standard/tests/strings/vprintf_variation16.phpt109
-rw-r--r--ext/standard/tests/strings/vprintf_variation16_64bit.phpt110
-rw-r--r--ext/standard/tests/strings/vprintf_variation17.phpt71
-rw-r--r--ext/standard/tests/strings/vprintf_variation18.phpt106
-rw-r--r--ext/standard/tests/strings/vprintf_variation19.phpt104
-rw-r--r--ext/standard/tests/strings/vprintf_variation19_64bit.phpt104
-rw-r--r--ext/standard/tests/strings/vprintf_variation2.phpt202
-rw-r--r--ext/standard/tests/strings/vprintf_variation3.phpt91
-rw-r--r--ext/standard/tests/strings/vprintf_variation4.phpt110
-rw-r--r--ext/standard/tests/strings/vprintf_variation4_64bit.phpt110
-rw-r--r--ext/standard/tests/strings/vprintf_variation5.phpt91
-rw-r--r--ext/standard/tests/strings/vprintf_variation6.phpt106
-rw-r--r--ext/standard/tests/strings/vprintf_variation7.phptbin0 -> 2230 bytes
-rw-r--r--ext/standard/tests/strings/vprintf_variation8.phpt109
-rw-r--r--ext/standard/tests/strings/vprintf_variation9.phptbin0 -> 1698 bytes
-rw-r--r--ext/standard/tests/strings/vsprintf_variation15.phpt10
-rw-r--r--ext/standard/tests/strings/vsprintf_variation8.phpt40
-rw-r--r--ext/standard/tests/url/base64_decode_variation_001.phpt188
-rw-r--r--ext/standard/tests/url/base64_decode_variation_002.phpt186
-rw-r--r--ext/standard/tests/url/base64_encode_basic_002.phpt59
-rw-r--r--ext/standard/tests/url/bug47174.phpt18
-rw-r--r--ext/standard/type.c4
-rw-r--r--ext/standard/uniqid.c6
-rw-r--r--ext/standard/uniqid.h4
-rw-r--r--ext/standard/url.c4
-rw-r--r--ext/standard/url.h4
-rw-r--r--ext/standard/url_scanner.c4
-rw-r--r--ext/standard/url_scanner.h4
-rw-r--r--ext/standard/url_scanner_ex.c480
-rw-r--r--ext/standard/url_scanner_ex.c.orig538
-rw-r--r--ext/standard/url_scanner_ex.h4
-rw-r--r--ext/standard/user_filters.c21
-rw-r--r--ext/standard/uuencode.c4
-rw-r--r--ext/standard/var.c16
-rw-r--r--ext/standard/var_unserializer.c710
-rw-r--r--ext/standard/var_unserializer.c.orig740
-rw-r--r--ext/standard/var_unserializer.re4
-rw-r--r--ext/standard/versioning.c4
-rw-r--r--ext/sybase/php_sybase_db.c4
-rw-r--r--ext/sybase/php_sybase_db.h4
-rw-r--r--ext/sybase_ct/php_sybase_ct.c47
-rw-r--r--ext/sybase_ct/php_sybase_ct.h4
-rw-r--r--ext/sybase_ct/tests/bug29064.phpt10
-rw-r--r--ext/sybase_ct/tests/bug30312.phpt10
-rw-r--r--ext/sybase_ct/tests/skipif.inc7
-rw-r--r--ext/sybase_ct/tests/test.inc8
-rw-r--r--ext/sybase_ct/tests/test_appname.phpt12
-rw-r--r--ext/sybase_ct/tests/test_unbuffered_no_full_fetch.phpt37
-rw-r--r--ext/sysvmsg/php_sysvmsg.h4
-rw-r--r--ext/sysvmsg/sysvmsg.c6
-rw-r--r--ext/sysvsem/php_sysvsem.h4
-rw-r--r--ext/sysvsem/sysvsem.c4
-rw-r--r--ext/sysvshm/php_sysvshm.h4
-rw-r--r--ext/sysvshm/sysvshm.c4
-rw-r--r--ext/tidy/php_tidy.h4
-rw-r--r--ext/tidy/tests/019.phpt4
-rw-r--r--ext/tidy/tests/022.phpt4
-rw-r--r--ext/tidy/tidy.c6
-rw-r--r--ext/tokenizer/php_tokenizer.h4
-rw-r--r--ext/tokenizer/tokenizer.c4
-rw-r--r--ext/tokenizer/tokenizer_data.c4
-rw-r--r--ext/wddx/php_wddx.h4
-rw-r--r--ext/wddx/php_wddx_api.h4
-rw-r--r--ext/wddx/tests/002.phpt21
-rw-r--r--ext/wddx/tests/003.phpt26
-rw-r--r--ext/wddx/tests/004.phpt63
-rw-r--r--ext/wddx/tests/005.phpt74
-rwxr-xr-xext/wddx/tests/bug37569.phpt776
-rwxr-xr-xext/wddx/tests/bug37587.phpt6
-rw-r--r--ext/wddx/tests/bug45901.phpt18
-rw-r--r--ext/wddx/wddx.c74
-rw-r--r--ext/xml/compat.c85
-rw-r--r--ext/xml/expat_compat.h4
-rw-r--r--ext/xml/php_xml.h4
-rw-r--r--ext/xml/tests/bug43957.phpt2
-rw-r--r--ext/xml/tests/bug46699.phpt33
-rw-r--r--ext/xml/tests/utf8_decode_error.phpt43
-rw-r--r--ext/xml/tests/utf8_decode_variation1.phpt165
-rw-r--r--ext/xml/tests/utf8_encode_error.phpt43
-rw-r--r--ext/xml/tests/utf8_encode_variation1.phpt165
-rw-r--r--ext/xml/tests/xml_error_string_error.phpt43
-rw-r--r--ext/xml/tests/xml_error_string_variation1.phpt157
-rw-r--r--ext/xml/tests/xml_get_current_byte_index_error.phpt43
-rw-r--r--ext/xml/tests/xml_get_current_byte_index_variation1.phpt239
-rw-r--r--ext/xml/tests/xml_get_current_column_number_error.phpt43
-rw-r--r--ext/xml/tests/xml_get_current_column_number_variation1.phpt240
-rw-r--r--ext/xml/tests/xml_get_current_line_number_error.phpt43
-rw-r--r--ext/xml/tests/xml_get_current_line_number_variation1.phpt239
-rw-r--r--ext/xml/tests/xml_get_error_code_error.phpt43
-rw-r--r--ext/xml/tests/xml_get_error_code_variation1.phpt239
-rw-r--r--ext/xml/tests/xml_parse_error.phpt47
-rw-r--r--ext/xml/tests/xml_parse_into_struct_error.phpt48
-rw-r--r--ext/xml/tests/xml_parse_into_struct_variation.phpt120
-rw-r--r--ext/xml/tests/xml_parse_into_struct_variation1.phpt240
-rw-r--r--ext/xml/tests/xml_parse_variation1.phpt241
-rw-r--r--ext/xml/tests/xml_parser_create_error.phpt35
-rw-r--r--ext/xml/tests/xml_parser_create_ns_error.phpt36
-rw-r--r--ext/xml/tests/xml_parser_create_ns_variation1.phpt245
-rw-r--r--ext/xml/tests/xml_parser_create_variation1.phpt245
-rw-r--r--ext/xml/tests/xml_parser_free_error.phpt43
-rw-r--r--ext/xml/tests/xml_parser_free_variation1.phpt239
-rw-r--r--ext/xml/tests/xml_parser_get_option_error.phpt45
-rw-r--r--ext/xml/tests/xml_parser_get_option_variation1.phpt240
-rw-r--r--ext/xml/tests/xml_parser_get_option_variation2.phpt215
-rw-r--r--ext/xml/tests/xml_parser_set_option_basic.phpt57
-rw-r--r--ext/xml/tests/xml_parser_set_option_error.phpt48
-rw-r--r--ext/xml/tests/xml_parser_set_option_variation1.phpt240
-rw-r--r--ext/xml/tests/xml_parser_set_option_variation2.phpt204
-rw-r--r--ext/xml/tests/xml_parser_set_option_variation3.phpt187
-rw-r--r--ext/xml/tests/xml_set_character_data_handler_error.phpt46
-rw-r--r--ext/xml/tests/xml_set_character_data_handler_variation1.phpt244
-rw-r--r--ext/xml/tests/xml_set_default_handler_error.phpt46
-rw-r--r--ext/xml/tests/xml_set_default_handler_variation1.phpt244
-rw-r--r--ext/xml/tests/xml_set_element_handler_error.phpt46
-rw-r--r--ext/xml/tests/xml_set_element_handler_variation1.phpt244
-rw-r--r--ext/xml/tests/xml_set_end_namespace_decl_handler_error.phpt46
-rw-r--r--ext/xml/tests/xml_set_end_namespace_decl_handler_variation1.phpt244
-rw-r--r--ext/xml/tests/xml_set_external_entity_ref_handler_error.phpt46
-rw-r--r--ext/xml/tests/xml_set_external_entity_ref_handler_variation1.phpt244
-rw-r--r--ext/xml/tests/xml_set_notation_decl_handler_basic.phpt102
-rw-r--r--ext/xml/tests/xml_set_notation_decl_handler_error.phpt46
-rw-r--r--ext/xml/tests/xml_set_notation_decl_handler_variation1.phpt244
-rw-r--r--ext/xml/tests/xml_set_object_error.phpt50
-rw-r--r--ext/xml/tests/xml_set_object_variation1.phpt240
-rw-r--r--ext/xml/tests/xml_set_object_variation2.phpt229
-rw-r--r--ext/xml/tests/xml_set_processing_instruction_handler_basic.phpt52
-rw-r--r--ext/xml/tests/xml_set_processing_instruction_handler_error.phpt46
-rw-r--r--ext/xml/tests/xml_set_processing_instruction_handler_variation1.phpt244
-rw-r--r--ext/xml/tests/xml_set_start_namespace_decl_handler_basic.phpt61
-rw-r--r--ext/xml/tests/xml_set_start_namespace_decl_handler_error.phpt46
-rw-r--r--ext/xml/tests/xml_set_start_namespace_decl_handler_variation1.phpt244
-rw-r--r--ext/xml/tests/xml_set_unparsed_entity_decl_handler_error.phpt46
-rw-r--r--ext/xml/tests/xml_set_unparsed_entity_decl_handler_variation1.phpt244
-rw-r--r--ext/xml/xml.c4
-rw-r--r--ext/xmlreader/php_xmlreader.c4
-rw-r--r--ext/xmlreader/php_xmlreader.h4
-rw-r--r--ext/xmlrpc/libxmlrpc/xml_element.c17
-rw-r--r--ext/xmlrpc/libxmlrpc/xmlrpc.c57
-rw-r--r--ext/xmlrpc/php_xmlrpc.h4
-rw-r--r--ext/xmlrpc/tests/bug18916.phpt21
-rw-r--r--ext/xmlrpc/tests/bug40576.phpt4
-rw-r--r--ext/xmlrpc/tests/bug45226.phpt53
-rw-r--r--ext/xmlrpc/tests/bug45555.phpt20
-rw-r--r--ext/xmlrpc/tests/bug45556.phpt32
-rw-r--r--ext/xmlrpc/xmlrpc-epi-php.c941
-rw-r--r--ext/xmlwriter/php_xmlwriter.c12
-rw-r--r--ext/xmlwriter/php_xmlwriter.h4
-rw-r--r--ext/xsl/php_xsl.c4
-rw-r--r--ext/xsl/php_xsl.h4
-rw-r--r--ext/xsl/xsl_fe.h4
-rw-r--r--ext/xsl/xsltprocessor.c16
-rw-r--r--ext/zip/Makefile.frag28
-rw-r--r--ext/zip/config.m418
-rw-r--r--ext/zip/config.w326
-rw-r--r--ext/zip/lib/mkstemp.c136
-rw-r--r--ext/zip/lib/unistd.h3
-rw-r--r--ext/zip/lib/zip.h117
-rw-r--r--ext/zip/lib/zip_add.c10
-rw-r--r--ext/zip/lib/zip_add_dir.c9
-rw-r--r--ext/zip/lib/zip_alias.h45
-rw-r--r--ext/zip/lib/zip_close.c260
-rw-r--r--ext/zip/lib/zip_delete.c9
-rw-r--r--ext/zip/lib/zip_dirent.c102
-rw-r--r--ext/zip/lib/zip_entry_free.c9
-rw-r--r--ext/zip/lib/zip_entry_new.c9
-rw-r--r--ext/zip/lib/zip_err_str.c4
-rw-r--r--ext/zip/lib/zip_error.c19
-rw-r--r--ext/zip/lib/zip_error_clear.c9
-rw-r--r--ext/zip/lib/zip_error_get.c9
-rw-r--r--ext/zip/lib/zip_error_get_sys_type.c9
-rw-r--r--ext/zip/lib/zip_error_strerror.c19
-rw-r--r--ext/zip/lib/zip_error_to_str.c9
-rw-r--r--ext/zip/lib/zip_fclose.c10
-rw-r--r--ext/zip/lib/zip_file_error_clear.c9
-rw-r--r--ext/zip/lib/zip_file_error_get.c9
-rw-r--r--ext/zip/lib/zip_file_get_offset.c14
-rw-r--r--ext/zip/lib/zip_file_strerror.c9
-rw-r--r--ext/zip/lib/zip_filerange_crc.c71
-rw-r--r--ext/zip/lib/zip_fopen.c9
-rw-r--r--ext/zip/lib/zip_fopen_index.c13
-rw-r--r--ext/zip/lib/zip_fread.c9
-rw-r--r--ext/zip/lib/zip_free.c13
-rw-r--r--ext/zip/lib/zip_get_archive_comment.c14
-rw-r--r--ext/zip/lib/zip_get_archive_flag.c48
-rw-r--r--ext/zip/lib/zip_get_file_comment.c9
-rw-r--r--ext/zip/lib/zip_get_name.c11
-rw-r--r--ext/zip/lib/zip_get_num_files.c9
-rw-r--r--ext/zip/lib/zip_memdup.c9
-rw-r--r--ext/zip/lib/zip_name_locate.c25
-rw-r--r--ext/zip/lib/zip_new.c11
-rw-r--r--ext/zip/lib/zip_open.c377
-rw-r--r--ext/zip/lib/zip_rename.c27
-rw-r--r--ext/zip/lib/zip_replace.c28
-rw-r--r--ext/zip/lib/zip_set_archive_comment.c11
-rw-r--r--ext/zip/lib/zip_set_archive_flag.c49
-rw-r--r--ext/zip/lib/zip_set_file_comment.c9
-rw-r--r--ext/zip/lib/zip_set_name.c10
-rw-r--r--ext/zip/lib/zip_source_buffer.c13
-rw-r--r--ext/zip/lib/zip_source_file.c28
-rw-r--r--ext/zip/lib/zip_source_filep.c60
-rw-r--r--ext/zip/lib/zip_source_free.c9
-rw-r--r--ext/zip/lib/zip_source_function.c9
-rw-r--r--ext/zip/lib/zip_source_zip.c13
-rw-r--r--ext/zip/lib/zip_stat.c9
-rw-r--r--ext/zip/lib/zip_stat_index.c11
-rw-r--r--ext/zip/lib/zip_stat_init.c8
-rw-r--r--ext/zip/lib/zip_strerror.c10
-rw-r--r--ext/zip/lib/zip_unchange.c12
-rw-r--r--ext/zip/lib/zip_unchange_all.c12
-rw-r--r--ext/zip/lib/zip_unchange_archive.c12
-rw-r--r--ext/zip/lib/zip_unchange_data.c6
-rw-r--r--ext/zip/lib/zip_win32.h9
-rw-r--r--ext/zip/lib/zipint.h126
-rw-r--r--ext/zip/lib/zipint_alias.h49
-rw-r--r--ext/zip/php_zip.c650
-rw-r--r--ext/zip/php_zip.h19
-rw-r--r--ext/zip/tests/bug11216.phpt6
-rw-r--r--ext/zip/tests/bug14962.phpt34
-rw-r--r--ext/zip/tests/bug38943.inc16
-rw-r--r--ext/zip/tests/bug38943.phpt20
-rw-r--r--ext/zip/tests/bug38943_2.phpt38
-rw-r--r--ext/zip/tests/bug38944.phpt4
-rw-r--r--ext/zip/tests/bug7658.phpt67
-rw-r--r--ext/zip/tests/oo_delete.phpt9
-rw-r--r--ext/zip/tests/oo_properties.phpt6
-rw-r--r--ext/zip/zip_stream.c2
-rw-r--r--ext/zlib/php_zlib.h4
-rw-r--r--ext/zlib/tests/data.inc88
-rw-r--r--ext/zlib/tests/gzclose_basic.phpt39
-rw-r--r--ext/zlib/tests/gzclose_error.phpt33
-rw-r--r--ext/zlib/tests/gzcompress_basic1.phpt125
-rw-r--r--ext/zlib/tests/gzcompress_error1.phpt78
-rw-r--r--ext/zlib/tests/gzcompress_variation1.phpt36
-rw-r--r--ext/zlib/tests/gzdeflate_basic1.phpt125
-rw-r--r--ext/zlib/tests/gzdeflate_error1.phpt76
-rw-r--r--ext/zlib/tests/gzdeflate_variation1.phpt36
-rw-r--r--ext/zlib/tests/gzencode_basic1.phpt102
-rw-r--r--ext/zlib/tests/gzencode_error1.phpt98
-rw-r--r--ext/zlib/tests/gzencode_variation1.phpt33
-rw-r--r--ext/zlib/tests/gzencode_variation2.phpt36
-rw-r--r--ext/zlib/tests/gzeof_basic.phpt58
-rw-r--r--ext/zlib/tests/gzeof_error.phpt28
-rw-r--r--ext/zlib/tests/gzeof_variation1.phpt31
-rw-r--r--ext/zlib/tests/gzfile_basic.phpt39
-rw-r--r--ext/zlib/tests/gzfile_basic2.phpt39
-rw-r--r--ext/zlib/tests/gzfile_error.phpt29
-rw-r--r--ext/zlib/tests/gzfile_variation1.phpt43
-rw-r--r--ext/zlib/tests/gzfile_variation10.phpt119
-rw-r--r--ext/zlib/tests/gzfile_variation11.phpt129
-rw-r--r--ext/zlib/tests/gzfile_variation12.phpt108
-rw-r--r--ext/zlib/tests/gzfile_variation13.phpt51
-rw-r--r--ext/zlib/tests/gzfile_variation14.phpt44
-rw-r--r--ext/zlib/tests/gzfile_variation15.phpt108
-rw-r--r--ext/zlib/tests/gzfile_variation2.phpt40
-rw-r--r--ext/zlib/tests/gzfile_variation3.phpt50
-rw-r--r--ext/zlib/tests/gzfile_variation4.phpt43
-rw-r--r--ext/zlib/tests/gzfile_variation5.phpt39
-rw-r--r--ext/zlib/tests/gzfile_variation6.phpt49
-rw-r--r--ext/zlib/tests/gzfile_variation7.phpt44
-rw-r--r--ext/zlib/tests/gzfile_variation8.phpt43
-rw-r--r--ext/zlib/tests/gzfile_variation9.phpt107
-rw-r--r--ext/zlib/tests/gzgetc_basic.phpt38
-rw-r--r--ext/zlib/tests/gzgetc_error.phpt29
-rw-r--r--ext/zlib/tests/gzgets_basic.phpt46
-rw-r--r--ext/zlib/tests/gzgets_error.phpt30
-rw-r--r--ext/zlib/tests/gzinflate_error1.phpt75
-rw-r--r--ext/zlib/tests/gzopen_basic.phpt51
-rw-r--r--ext/zlib/tests/gzopen_basic2.phpt52
-rw-r--r--ext/zlib/tests/gzopen_error.phpt47
-rw-r--r--ext/zlib/tests/gzopen_include_path.inc92
-rw-r--r--ext/zlib/tests/gzopen_variation1.phpt227
-rw-r--r--ext/zlib/tests/gzopen_variation2.phpt227
-rw-r--r--ext/zlib/tests/gzopen_variation3.phpt218
-rw-r--r--ext/zlib/tests/gzopen_variation4.phpt173
-rw-r--r--ext/zlib/tests/gzopen_variation5.phpt71
-rw-r--r--ext/zlib/tests/gzopen_variation6.phpt47
-rw-r--r--ext/zlib/tests/gzopen_variation7.phpt31
-rw-r--r--ext/zlib/tests/gzopen_variation8.phpt42
-rw-r--r--ext/zlib/tests/gzopen_variation9.phpt55
-rw-r--r--ext/zlib/tests/gzpassthru_basic.phpt32
-rw-r--r--ext/zlib/tests/gzpassthru_error.phpt29
-rw-r--r--ext/zlib/tests/gzputs_basic.phpt31
-rw-r--r--ext/zlib/tests/gzread_basic.phpt37
-rw-r--r--ext/zlib/tests/gzread_error.phpt32
-rw-r--r--ext/zlib/tests/gzread_error2.phpt32
-rw-r--r--ext/zlib/tests/gzread_variation1.phpt34
-rw-r--r--ext/zlib/tests/gzrewind_basic.phpt36
-rw-r--r--ext/zlib/tests/gzrewind_basic2.phpt34
-rw-r--r--ext/zlib/tests/gzrewind_error.phpt27
-rw-r--r--ext/zlib/tests/gzrewind_variation1.phpt28
-rw-r--r--ext/zlib/tests/gzseek_basic.phpt49
-rw-r--r--ext/zlib/tests/gzseek_basic2.phpt42
-rw-r--r--ext/zlib/tests/gzseek_error.phpt33
-rw-r--r--ext/zlib/tests/gzseek_variation1.phpt33
-rw-r--r--ext/zlib/tests/gzseek_variation2.phpt49
-rw-r--r--ext/zlib/tests/gzseek_variation3.phpt50
-rw-r--r--ext/zlib/tests/gzseek_variation4.phpt42
-rw-r--r--ext/zlib/tests/gzseek_variation5.phpt42
-rw-r--r--ext/zlib/tests/gzseek_variation6.phpt39
-rw-r--r--ext/zlib/tests/gzseek_variation7.phpt47
-rw-r--r--ext/zlib/tests/gztell_basic.phpt34
-rw-r--r--ext/zlib/tests/gztell_basic2.phpt42
-rw-r--r--ext/zlib/tests/gztell_error.phpt26
-rw-r--r--ext/zlib/tests/gzuncompress_basic1.phpt43
-rw-r--r--ext/zlib/tests/gzuncompress_error1.phpt84
-rw-r--r--ext/zlib/tests/gzwrite_basic.phpt31
-rw-r--r--ext/zlib/tests/gzwrite_error.phpt35
-rw-r--r--ext/zlib/tests/gzwrite_error2.phpt30
-rw-r--r--ext/zlib/tests/gzwrite_variation1.phpt27
-rw-r--r--ext/zlib/tests/readgzfile_basic.phpt34
-rw-r--r--ext/zlib/tests/readgzfile_basic2.phpt34
-rw-r--r--ext/zlib/tests/readgzfile_error.phpt29
-rw-r--r--ext/zlib/tests/readgzfile_variation1.phpt43
-rw-r--r--ext/zlib/tests/readgzfile_variation10.phpt67
-rw-r--r--ext/zlib/tests/readgzfile_variation11.phpt64
-rw-r--r--ext/zlib/tests/readgzfile_variation12.phpt56
-rw-r--r--ext/zlib/tests/readgzfile_variation13.phpt51
-rw-r--r--ext/zlib/tests/readgzfile_variation14.phpt44
-rw-r--r--ext/zlib/tests/readgzfile_variation15.phpt93
-rw-r--r--ext/zlib/tests/readgzfile_variation2.phpt40
-rw-r--r--ext/zlib/tests/readgzfile_variation3.phpt50
-rw-r--r--ext/zlib/tests/readgzfile_variation4.phpt34
-rw-r--r--ext/zlib/tests/readgzfile_variation5.phpt32
-rw-r--r--ext/zlib/tests/readgzfile_variation6.phpt48
-rw-r--r--ext/zlib/tests/readgzfile_variation7.phpt36
-rw-r--r--ext/zlib/tests/readgzfile_variation8.phpt43
-rw-r--r--ext/zlib/tests/readgzfile_variation9.phpt55
-rw-r--r--ext/zlib/tests/reading_include_path.inc27
-rw-r--r--ext/zlib/tests/zlib_scheme_copy_basic.phpt37
-rw-r--r--ext/zlib/tests/zlib_scheme_copy_variation1.phpt38
-rw-r--r--ext/zlib/tests/zlib_scheme_copy_variation2.phpt53
-rw-r--r--ext/zlib/tests/zlib_scheme_dir_basic.phpt26
-rw-r--r--ext/zlib/tests/zlib_scheme_file_basic.phpt38
-rw-r--r--ext/zlib/tests/zlib_scheme_file_get_contents_basic.phpt24
-rw-r--r--ext/zlib/tests/zlib_scheme_file_put_contents_basic.phpt31
-rw-r--r--ext/zlib/tests/zlib_scheme_file_read_file_basic.phpt23
-rw-r--r--ext/zlib/tests/zlib_scheme_fopen_basic.phpt25
-rw-r--r--ext/zlib/tests/zlib_scheme_fopen_variation1.phpt30
-rw-r--r--ext/zlib/tests/zlib_scheme_rename_basic.phpt21
-rw-r--r--ext/zlib/tests/zlib_scheme_stat_basic.phpt22
-rw-r--r--ext/zlib/tests/zlib_scheme_stat_basic2.phpt46
-rw-r--r--ext/zlib/tests/zlib_scheme_unlink_basic.phpt21
-rw-r--r--ext/zlib/tests/zlib_wrapper_fflush_basic.phpt33
-rw-r--r--ext/zlib/tests/zlib_wrapper_flock_basic.phpt19
-rw-r--r--ext/zlib/tests/zlib_wrapper_fstat_basic.phpt19
-rw-r--r--ext/zlib/tests/zlib_wrapper_ftruncate_basic.phpt32
-rw-r--r--ext/zlib/tests/zlib_wrapper_meta_data_basic.phpt65
-rw-r--r--ext/zlib/zlib.c33
-rw-r--r--ext/zlib/zlib_filter.c23
-rw-r--r--ext/zlib/zlib_fopen_wrapper.c8
2705 files changed, 237517 insertions, 64105 deletions
diff --git a/ext/bcmath/bcmath.c b/ext/bcmath/bcmath.c
index d99a16a33..4aac12c28 100644
--- a/ext/bcmath/bcmath.c
+++ b/ext/bcmath/bcmath.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: bcmath.c,v 1.62.2.2.2.9 2007/12/31 07:20:04 sebastian Exp $ */
+/* $Id: bcmath.c,v 1.62.2.2.2.10 2008/12/31 11:17:35 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/bcmath/php_bcmath.h b/ext/bcmath/php_bcmath.h
index 097dc2812..78a9dc53c 100644
--- a/ext/bcmath/php_bcmath.h
+++ b/ext/bcmath/php_bcmath.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_bcmath.h,v 1.20.2.1.2.3 2007/12/31 07:20:04 sebastian Exp $ */
+/* $Id: php_bcmath.h,v 1.20.2.1.2.4 2008/12/31 11:17:35 sebastian Exp $ */
#ifndef PHP_BCMATH_H
#define PHP_BCMATH_H
diff --git a/ext/bz2/bz2.c b/ext/bz2/bz2.c
index 74edd2d7a..ae71a9cf0 100644
--- a/ext/bz2/bz2.c
+++ b/ext/bz2/bz2.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: bz2.c,v 1.14.2.3.2.13 2007/12/31 07:20:04 sebastian Exp $ */
+/* $Id: bz2.c,v 1.14.2.3.2.16 2008/12/31 11:17:35 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -248,6 +248,7 @@ PHP_BZ2_API php_stream *_php_stream_bz2open(php_stream_wrapper *wrapper,
bz_file = BZ2_bzdopen(fd, mode);
}
}
+
/* remove the file created by php_stream_open_wrapper(), it is not needed since BZ2 functions
* failed.
*/
diff --git a/ext/bz2/bz2_filter.c b/ext/bz2/bz2_filter.c
index 63ca109f2..ba4278ac7 100644
--- a/ext/bz2/bz2_filter.c
+++ b/ext/bz2/bz2_filter.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: bz2_filter.c,v 1.3.2.2.2.9 2008/01/12 22:04:03 cellog Exp $ */
+/* $Id: bz2_filter.c,v 1.3.2.2.2.12 2009/02/09 03:44:59 cellog Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -34,6 +34,7 @@ typedef struct _php_bz2_filter_data {
size_t inbuf_len;
char *outbuf;
size_t outbuf_len;
+ zend_bool finished;
} php_bz2_filter_data;
/* }}} */
@@ -82,6 +83,11 @@ static php_stream_filter_status_t php_bz2_decompress_filter(
bucket = php_stream_bucket_make_writeable(buckets_in->head TSRMLS_CC);
while (bin < bucket->buflen) {
+ if (data->finished) {
+ consumed += bucket->buflen;
+ break;
+ }
+
desired = bucket->buflen - bin;
if (desired > data->inbuf_len) {
desired = data->inbuf_len;
@@ -90,7 +96,11 @@ static php_stream_filter_status_t php_bz2_decompress_filter(
data->strm.avail_in = desired;
status = BZ2_bzDecompress(&(data->strm));
- if (status != BZ_OK && status != BZ_STREAM_END) {
+
+ if (status == BZ_STREAM_END) {
+ BZ2_bzDecompressEnd(&(data->strm));
+ data->finished = '\1';
+ } else if (status != BZ_OK) {
/* Something bad happened */
php_stream_bucket_delref(bucket TSRMLS_CC);
return PSFS_ERR_FATAL;
@@ -115,10 +125,11 @@ static php_stream_filter_status_t php_bz2_decompress_filter(
return PSFS_PASS_ON;
}
}
+
php_stream_bucket_delref(bucket TSRMLS_CC);
}
- if (flags & PSFS_FLAG_FLUSH_CLOSE) {
+ if (!data->finished && (flags & PSFS_FLAG_FLUSH_CLOSE)) {
/* Spit it out! */
status = BZ_OK;
while (status == BZ_OK) {
@@ -148,7 +159,9 @@ static void php_bz2_decompress_dtor(php_stream_filter *thisfilter TSRMLS_DC)
{
if (thisfilter && thisfilter->abstract) {
php_bz2_filter_data *data = thisfilter->abstract;
- BZ2_bzDecompressEnd(&(data->strm));
+ if (!data->finished) {
+ BZ2_bzDecompressEnd(&(data->strm));
+ }
pefree(data->inbuf, data->persistent);
pefree(data->outbuf, data->persistent);
pefree(data, data->persistent);
@@ -319,14 +332,18 @@ static php_stream_filter *php_bz2_filter_create(const char *filtername, zval *fi
}
if (tmpzval) {
- SEPARATE_ZVAL(tmpzval);
- convert_to_boolean_ex(tmpzval);
- smallFootprint = Z_LVAL_PP(tmpzval);
- zval_ptr_dtor(tmpzval);
+ zval tmp, *tmp2;
+
+ tmp = **tmpzval;
+ zval_copy_ctor(&tmp);
+ tmp2 = &tmp;
+ convert_to_boolean_ex(&tmp2);
+ smallFootprint = Z_LVAL(tmp);
}
}
status = BZ2_bzDecompressInit(&(data->strm), 0, smallFootprint);
+ data->finished = '\0';
fops = &php_bz2_decompress_ops;
} else if (strcasecmp(filtername, "bzip2.compress") == 0) {
int blockSize100k = PHP_BZ2_FILTER_DEFAULT_BLOCKSIZE;
@@ -338,26 +355,31 @@ static php_stream_filter *php_bz2_filter_create(const char *filtername, zval *fi
if (Z_TYPE_P(filterparams) == IS_ARRAY || Z_TYPE_P(filterparams) == IS_OBJECT) {
if (zend_hash_find(HASH_OF(filterparams), "blocks", sizeof("blocks"), (void**) &tmpzval) == SUCCESS) {
/* How much memory to allocate (1 - 9) x 100kb */
- SEPARATE_ZVAL(tmpzval);
- convert_to_long_ex(tmpzval);
- if (Z_LVAL_PP(tmpzval) < 1 || Z_LVAL_PP(tmpzval) > 9) {
+ zval tmp;
+
+ tmp = **tmpzval;
+ zval_copy_ctor(&tmp);
+ convert_to_long(&tmp);
+ if (Z_LVAL(tmp) < 1 || Z_LVAL(tmp) > 9) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter given for number of blocks to allocate. (%ld)", Z_LVAL_PP(tmpzval));
} else {
- blockSize100k = Z_LVAL_PP(tmpzval);
+ blockSize100k = Z_LVAL(tmp);
}
- zval_ptr_dtor(tmpzval);
}
if (zend_hash_find(HASH_OF(filterparams), "work", sizeof("work"), (void**) &tmpzval) == SUCCESS) {
/* Work Factor (0 - 250) */
- SEPARATE_ZVAL(tmpzval);
- convert_to_long_ex(tmpzval);
- if (Z_LVAL_PP(tmpzval) < 0 || Z_LVAL_PP(tmpzval) > 250) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter given for work factor. (%ld)", Z_LVAL_PP(tmpzval));
+ zval tmp;
+
+ tmp = **tmpzval;
+ zval_copy_ctor(&tmp);
+ convert_to_long(&tmp);
+
+ if (Z_LVAL(tmp) < 0 || Z_LVAL(tmp) > 250) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter given for work factor. (%ld)", Z_LVAL(tmp));
} else {
- workFactor = Z_LVAL_PP(tmpzval);
+ workFactor = Z_LVAL(tmp);
}
- zval_ptr_dtor(tmpzval);
}
}
}
diff --git a/ext/bz2/php_bz2.h b/ext/bz2/php_bz2.h
index fe3132ef4..93e978af6 100644
--- a/ext/bz2/php_bz2.h
+++ b/ext/bz2/php_bz2.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_bz2.h,v 1.7.2.1.2.5 2007/12/31 07:20:04 sebastian Exp $ */
+/* $Id: php_bz2.h,v 1.7.2.1.2.6 2008/12/31 11:17:35 sebastian Exp $ */
#ifndef PHP_BZ2_H
#define PHP_BZ2_H
diff --git a/ext/calendar/cal_unix.c b/ext/calendar/cal_unix.c
index be0e0c5a2..d1d61f4bb 100644
--- a/ext/calendar/cal_unix.c
+++ b/ext/calendar/cal_unix.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/calendar/calendar.c b/ext/calendar/calendar.c
index b20edb5e0..7cd0ca67d 100644
--- a/ext/calendar/calendar.c
+++ b/ext/calendar/calendar.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
| Wez Furlong <wez@thebrainroom.com> |
+----------------------------------------------------------------------+
*/
-/* $Id: calendar.c,v 1.46.2.2.2.5 2007/12/31 07:20:04 sebastian Exp $ */
+/* $Id: calendar.c,v 1.46.2.2.2.6 2008/12/31 11:17:36 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/calendar/easter.c b/ext/calendar/easter.c
index bd787de42..96509789d 100644
--- a/ext/calendar/easter.c
+++ b/ext/calendar/easter.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/com_dotnet/com_com.c b/ext/com_dotnet/com_com.c
index 473c34a37..505028686 100644
--- a/ext/com_dotnet/com_com.c
+++ b/ext/com_dotnet/com_com.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: com_com.c,v 1.16.2.2.2.6 2007/12/31 07:20:04 sebastian Exp $ */
+/* $Id: com_com.c,v 1.16.2.2.2.7 2008/12/31 11:17:36 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/com_dotnet/com_dotnet.c b/ext/com_dotnet/com_dotnet.c
index 68f0b419e..2ebbc1b71 100644
--- a/ext/com_dotnet/com_dotnet.c
+++ b/ext/com_dotnet/com_dotnet.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: com_dotnet.c,v 1.14.2.1.2.5 2007/12/31 07:20:04 sebastian Exp $ */
+/* $Id: com_dotnet.c,v 1.14.2.1.2.6 2008/12/31 11:17:36 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/com_dotnet/com_extension.c b/ext/com_dotnet/com_extension.c
index 739943fca..5155d35db 100644
--- a/ext/com_dotnet/com_extension.c
+++ b/ext/com_dotnet/com_extension.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: com_extension.c,v 1.17.2.2.2.7 2007/12/31 07:20:04 sebastian Exp $ */
+/* $Id: com_extension.c,v 1.17.2.2.2.8 2008/12/31 11:17:36 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/com_dotnet/com_handlers.c b/ext/com_dotnet/com_handlers.c
index 388ec7847..af5b6b783 100644
--- a/ext/com_dotnet/com_handlers.c
+++ b/ext/com_dotnet/com_handlers.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: com_handlers.c,v 1.30.2.5.2.7 2007/12/31 07:20:04 sebastian Exp $ */
+/* $Id: com_handlers.c,v 1.30.2.5.2.8 2008/12/31 11:17:36 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/com_dotnet/com_iterator.c b/ext/com_dotnet/com_iterator.c
index 9f540cd6a..32c92ad75 100644
--- a/ext/com_dotnet/com_iterator.c
+++ b/ext/com_dotnet/com_iterator.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: com_iterator.c,v 1.9.2.2.2.3 2007/12/31 07:20:04 sebastian Exp $ */
+/* $Id: com_iterator.c,v 1.9.2.2.2.4 2008/12/31 11:17:36 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/com_dotnet/com_misc.c b/ext/com_dotnet/com_misc.c
index 10ac789e7..e24f43782 100644
--- a/ext/com_dotnet/com_misc.c
+++ b/ext/com_dotnet/com_misc.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: com_misc.c,v 1.8.2.2.2.4 2007/12/31 07:20:04 sebastian Exp $ */
+/* $Id: com_misc.c,v 1.8.2.2.2.5 2008/12/31 11:17:36 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/com_dotnet/com_olechar.c b/ext/com_dotnet/com_olechar.c
index e746fb1a6..bb48db805 100644
--- a/ext/com_dotnet/com_olechar.c
+++ b/ext/com_dotnet/com_olechar.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: com_olechar.c,v 1.5.2.1.2.4 2007/12/31 07:20:04 sebastian Exp $ */
+/* $Id: com_olechar.c,v 1.5.2.1.2.5 2008/12/31 11:17:36 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/com_dotnet/com_persist.c b/ext/com_dotnet/com_persist.c
index 127d86b13..dcc9e2fd8 100755
--- a/ext/com_dotnet/com_persist.c
+++ b/ext/com_dotnet/com_persist.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: com_persist.c,v 1.5.2.3.2.3 2007/12/31 07:20:04 sebastian Exp $ */
+/* $Id: com_persist.c,v 1.5.2.3.2.4 2008/12/31 11:17:36 sebastian Exp $ */
/* Infrastructure for working with persistent COM objects.
* Implements: IStream* wrapper for PHP streams.
diff --git a/ext/com_dotnet/com_saproxy.c b/ext/com_dotnet/com_saproxy.c
index ec6945418..d0060ee08 100644
--- a/ext/com_dotnet/com_saproxy.c
+++ b/ext/com_dotnet/com_saproxy.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: com_saproxy.c,v 1.15.2.2.2.4 2007/12/31 07:20:04 sebastian Exp $ */
+/* $Id: com_saproxy.c,v 1.15.2.2.2.5 2008/12/31 11:17:36 sebastian Exp $ */
/* This module implements a SafeArray proxy which is used internally
* by the engine when resolving multi-dimensional array accesses on
diff --git a/ext/com_dotnet/com_typeinfo.c b/ext/com_dotnet/com_typeinfo.c
index be3e8d159..febc77111 100644
--- a/ext/com_dotnet/com_typeinfo.c
+++ b/ext/com_dotnet/com_typeinfo.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: com_typeinfo.c,v 1.7.2.1.2.4 2007/12/31 07:20:04 sebastian Exp $ */
+/* $Id: com_typeinfo.c,v 1.7.2.1.2.5 2008/12/31 11:17:36 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/com_dotnet/com_variant.c b/ext/com_dotnet/com_variant.c
index 4b2b83cf4..47275c8dc 100644
--- a/ext/com_dotnet/com_variant.c
+++ b/ext/com_dotnet/com_variant.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: com_variant.c,v 1.11.2.2.2.7 2007/12/31 07:20:04 sebastian Exp $ */
+/* $Id: com_variant.c,v 1.11.2.2.2.8 2008/12/31 11:17:36 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/com_dotnet/com_wrapper.c b/ext/com_dotnet/com_wrapper.c
index 193c5a14f..3093275e5 100644
--- a/ext/com_dotnet/com_wrapper.c
+++ b/ext/com_dotnet/com_wrapper.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: com_wrapper.c,v 1.9.2.1.2.6 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: com_wrapper.c,v 1.9.2.1.2.7 2008/12/31 11:17:36 sebastian Exp $ */
/* This module exports a PHP object as a COM object by wrapping it
* using IDispatchEx */
diff --git a/ext/com_dotnet/php_com_dotnet.h b/ext/com_dotnet/php_com_dotnet.h
index 3ae43efc1..92fb48f80 100644
--- a/ext/com_dotnet/php_com_dotnet.h
+++ b/ext/com_dotnet/php_com_dotnet.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_com_dotnet.h,v 1.5.2.1.2.3 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: php_com_dotnet.h,v 1.5.2.1.2.4 2008/12/31 11:17:36 sebastian Exp $ */
#ifndef PHP_COM_DOTNET_H
#define PHP_COM_DOTNET_H
diff --git a/ext/com_dotnet/php_com_dotnet_internal.h b/ext/com_dotnet/php_com_dotnet_internal.h
index 00408f4d1..130ef9c27 100644
--- a/ext/com_dotnet/php_com_dotnet_internal.h
+++ b/ext/com_dotnet/php_com_dotnet_internal.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_com_dotnet_internal.h,v 1.14.2.3.2.5 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: php_com_dotnet_internal.h,v 1.14.2.3.2.6 2008/12/31 11:17:36 sebastian Exp $ */
#ifndef PHP_COM_DOTNET_INTERNAL_H
#define PHP_COM_DOTNET_INTERNAL_H
diff --git a/ext/ctype/ctype.c b/ext/ctype/ctype.c
index 823136397..e947b4cfa 100644
--- a/ext/ctype/ctype.c
+++ b/ext/ctype/ctype.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/ctype/php_ctype.h b/ext/ctype/php_ctype.h
index c13c11935..25cc2a559 100644
--- a/ext/ctype/php_ctype.h
+++ b/ext/ctype/php_ctype.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/curl/config.m4 b/ext/curl/config.m4
index c7a0f77b7..d53422a5d 100644
--- a/ext/curl/config.m4
+++ b/ext/curl/config.m4
@@ -1,5 +1,5 @@
dnl
-dnl $Id: config.m4,v 1.28.2.3.2.7 2007/05/25 12:47:55 mike Exp $
+dnl $Id: config.m4,v 1.28.2.3.2.8 2008/11/07 21:18:45 felipe Exp $
dnl
PHP_ARG_WITH(curl, for cURL support,
@@ -75,7 +75,7 @@ if test "$PHP_CURL" != "no"; then
}
],[
AC_MSG_RESULT([yes])
- AC_CHECK_HEADER([openssl/crypto.h], [
+ AC_CHECK_HEADERS([openssl/crypto.h], [
AC_DEFINE([HAVE_CURL_OPENSSL], [1], [Have cURL with OpenSSL support])
])
], [
diff --git a/ext/curl/interface.c b/ext/curl/interface.c
index ff702f20b..9c72e3927 100644
--- a/ext/curl/interface.c
+++ b/ext/curl/interface.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: interface.c,v 1.62.2.14.2.34 2008/01/06 17:12:29 iliaa Exp $ */
+/* $Id: interface.c,v 1.62.2.14.2.41 2009/01/26 15:25:23 iliaa Exp $ */
#define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
@@ -786,7 +786,7 @@ static size_t curl_read(char *data, size_t size, size_t nmemb, void *ctx)
{
php_curl *ch = (php_curl *) ctx;
php_curl_read *t = ch->handlers->read;
- int length = -1;
+ int length = 0;
switch (t->method) {
case PHP_CURL_DIRECT:
@@ -833,7 +833,9 @@ static size_t curl_read(char *data, size_t size, size_t nmemb, void *ctx)
ch->in_callback = 0;
if (error == FAILURE) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot call the CURLOPT_READFUNCTION");
- length = -1;
+#if LIBCURL_VERSION_NUM >= 0x070c01 /* 7.12.1 */
+ length = CURL_READFUNC_ABORT;
+#endif
} else if (retval_ptr) {
if (Z_TYPE_P(retval_ptr) == IS_STRING) {
length = MIN(size * nmemb, Z_STRLEN_P(retval_ptr));
@@ -994,6 +996,7 @@ static size_t curl_passwd(void *ctx, char *prompt, char *buf, int buflen)
/* }}} */
#endif
+#if LIBCURL_VERSION_NUM < 0x071101
/* {{{ curl_free_string
*/
static void curl_free_string(void **string)
@@ -1001,6 +1004,7 @@ static void curl_free_string(void **string)
efree(*string);
}
/* }}} */
+#endif
/* {{{ curl_free_post
*/
@@ -1075,7 +1079,9 @@ static void alloc_curl_handle(php_curl **ch)
memset(&(*ch)->err, 0, sizeof((*ch)->err));
+#if LIBCURL_VERSION_NUM < 0x071101
zend_llist_init(&(*ch)->to_free.str, sizeof(char *), (llist_dtor_func_t) curl_free_string, 0);
+#endif
zend_llist_init(&(*ch)->to_free.slist, sizeof(struct curl_slist), (llist_dtor_func_t) curl_free_slist, 0);
zend_llist_init(&(*ch)->to_free.post, sizeof(struct HttpPost), (llist_dtor_func_t) curl_free_post, 0);
}
@@ -1134,11 +1140,15 @@ PHP_FUNCTION(curl_init)
#endif
if (argc > 0) {
+#if LIBCURL_VERSION_NUM >= 0x071100
+ curl_easy_setopt(ch->cp, CURLOPT_URL, Z_STRVAL_PP(url));
+#else
char *urlcopy;
urlcopy = estrndup(Z_STRVAL_PP(url), Z_STRLEN_PP(url));
curl_easy_setopt(ch->cp, CURLOPT_URL, urlcopy);
zend_llist_add_element(&ch->to_free.str, &urlcopy);
+#endif
}
ZEND_REGISTER_RESOURCE(return_value, ch, le_curl);
@@ -1204,9 +1214,11 @@ PHP_FUNCTION(curl_copy_handle)
curl_easy_setopt(dupch->cp, CURLOPT_INFILE, (void *) dupch);
curl_easy_setopt(dupch->cp, CURLOPT_WRITEHEADER, (void *) dupch);
+#if LIBCURL_VERSION_NUM < 0x071101
zend_llist_copy(&dupch->to_free.str, &ch->to_free.str);
/* Don't try to free copied strings, they're free'd when the original handle is destroyed */
dupch->to_free.str.dtor = NULL;
+#endif
zend_llist_copy(&dupch->to_free.slist, &ch->to_free.slist);
zend_llist_copy(&dupch->to_free.post, &ch->to_free.post);
@@ -1329,7 +1341,9 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
case CURLOPT_SSLENGINE_DEFAULT:
case CURLOPT_SSLCERTTYPE:
case CURLOPT_ENCODING: {
+#if LIBCURL_VERSION_NUM < 0x071100
char *copystr = NULL;
+#endif
convert_to_string_ex(zvalue);
@@ -1337,9 +1351,14 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
PHP_CURL_CHECK_OPEN_BASEDIR(Z_STRVAL_PP(zvalue), Z_STRLEN_PP(zvalue), 1);
}
+#if LIBCURL_VERSION_NUM >= 0x071100
+ /* Strings passed to libcurl as ’char *’ arguments, are copied by the library... NOTE: before 7.17.0 strings were not copied. */
+ error = curl_easy_setopt(ch->cp, option, Z_STRVAL_PP(zvalue));
+#else
copystr = estrndup(Z_STRVAL_PP(zvalue), Z_STRLEN_PP(zvalue));
error = curl_easy_setopt(ch->cp, option, copystr);
zend_llist_add_element(&ch->to_free.str, &copystr);
+#endif
break;
}
@@ -1419,7 +1438,7 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
case CURLOPT_READFUNCTION:
if (ch->handlers->read->func_name) {
zval_ptr_dtor(&ch->handlers->read->func_name);
- ch->handlers->write->fci_cache = empty_fcall_info_cache;
+ ch->handlers->read->fci_cache = empty_fcall_info_cache;
}
zval_add_ref(zvalue);
ch->handlers->read->func_name = *zvalue;
@@ -1428,7 +1447,7 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
case CURLOPT_HEADERFUNCTION:
if (ch->handlers->write_header->func_name) {
zval_ptr_dtor(&ch->handlers->write_header->func_name);
- ch->handlers->write->fci_cache = empty_fcall_info_cache;
+ ch->handlers->write_header->fci_cache = empty_fcall_info_cache;
}
zval_add_ref(zvalue);
ch->handlers->write_header->func_name = *zvalue;
@@ -1479,17 +1498,36 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
* must be explicitly cast to long in curl_formadd
* use since curl needs a long not an int. */
if (*postval == '@') {
+ char *type;
++postval;
+
+ if ((type = php_memnstr(postval, ";type=", sizeof(";type=") - 1, postval + strlen(postval)))) {
+ *type = '\0';
+ }
/* safe_mode / open_basedir check */
if (php_check_open_basedir(postval TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(postval, "rb+", CHECKUID_CHECK_MODE_PARAM))) {
+ if (type) {
+ *type = ';';
+ }
RETVAL_FALSE;
return 1;
}
- error = curl_formadd(&first, &last,
+ if (type) {
+ error = curl_formadd(&first, &last,
CURLFORM_COPYNAME, string_key,
CURLFORM_NAMELENGTH, (long)string_key_len - 1,
- CURLFORM_FILE, postval,
+ CURLFORM_FILE, postval,
+ CURLFORM_CONTENTTYPE, type + sizeof(";type=") - 1,
CURLFORM_END);
+ *type = ';';
+ } else {
+ error = curl_formadd(&first, &last,
+ CURLFORM_COPYNAME, string_key,
+ CURLFORM_NAMELENGTH, (long)string_key_len - 1,
+ CURLFORM_FILE, postval,
+ CURLFORM_END);
+
+ }
} else {
error = curl_formadd(&first, &last,
CURLFORM_COPYNAME, string_key,
@@ -1510,6 +1548,11 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
error = curl_easy_setopt(ch->cp, CURLOPT_HTTPPOST, first);
} else {
+#if LIBCURL_VERSION_NUM >= 0x071101
+ /* with curl 7.17.0 and later, we can use COPYPOSTFIELDS, but we have to provide size before */
+ error = curl_easy_setopt(ch->cp, CURLOPT_POSTFIELDSIZE, Z_STRLEN_PP(zvalue));
+ error = curl_easy_setopt(ch->cp, CURLOPT_COPYPOSTFIELDS, Z_STRVAL_PP(zvalue));
+#else
char *post = NULL;
convert_to_string_ex(zvalue);
@@ -1518,6 +1561,7 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
error = curl_easy_setopt(ch->cp, CURLOPT_POSTFIELDS, post);
error = curl_easy_setopt(ch->cp, CURLOPT_POSTFIELDSIZE, Z_STRLEN_PP(zvalue));
+#endif
}
break;
case CURLOPT_HTTPHEADER:
@@ -1539,20 +1583,15 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
zend_hash_get_current_data(ph, (void **) &current) == SUCCESS;
zend_hash_move_forward(ph)
) {
- char *indiv = NULL;
-
SEPARATE_ZVAL(current);
convert_to_string_ex(current);
- indiv = estrndup(Z_STRVAL_PP(current), Z_STRLEN_PP(current) + 1);
- slist = curl_slist_append(slist, indiv);
+ slist = curl_slist_append(slist, Z_STRVAL_PP(current));
if (!slist) {
- efree(indiv);
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not build curl_slist");
RETVAL_FALSE;
return 1;
}
- zend_llist_add_element(&ch->to_free.str, &indiv);
}
zend_llist_add_element(&ch->to_free.slist, &slist);
@@ -1567,7 +1606,9 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
case CURLOPT_SSLCERT:
case CURLOPT_RANDOM_FILE:
case CURLOPT_COOKIEFILE: {
+#if LIBCURL_VERSION_NUM < 0x071100
char *copystr = NULL;
+#endif
convert_to_string_ex(zvalue);
@@ -1576,11 +1617,14 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
return 1;
}
+#if LIBCURL_VERSION_NUM >= 0x071100
+ error = curl_easy_setopt(ch->cp, option, Z_STRVAL_PP(zvalue));
+#else
copystr = estrndup(Z_STRVAL_PP(zvalue), Z_STRLEN_PP(zvalue));
error = curl_easy_setopt(ch->cp, option, copystr);
zend_llist_add_element(&ch->to_free.str, &copystr);
-
+#endif
break;
}
case CURLINFO_HEADER_OUT:
@@ -1748,6 +1792,11 @@ PHP_FUNCTION(curl_getinfo)
if (curl_easy_getinfo(ch->cp, CURLINFO_CONTENT_TYPE, &s_code) == CURLE_OK) {
if (s_code != NULL) {
CAAS("content_type", s_code);
+ } else {
+ zval *retnull;
+ MAKE_STD_ZVAL(retnull);
+ ZVAL_NULL(retnull);
+ CAAZ("content_type", retnull);
}
}
if (curl_easy_getinfo(ch->cp, CURLINFO_HTTP_CODE, &l_code) == CURLE_OK) {
@@ -1941,7 +1990,9 @@ static void _php_curl_close(zend_rsrc_list_entry *rsrc TSRMLS_DC)
#endif
curl_easy_cleanup(ch->cp);
+#if LIBCURL_VERSION_NUM < 0x071101
zend_llist_clean(&ch->to_free.str);
+#endif
zend_llist_clean(&ch->to_free.slist);
zend_llist_clean(&ch->to_free.post);
diff --git a/ext/curl/multi.c b/ext/curl/multi.c
index cefc5f441..2e6580ace 100644
--- a/ext/curl/multi.c
+++ b/ext/curl/multi.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: multi.c,v 1.19.2.3.2.9 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: multi.c,v 1.19.2.3.2.10 2008/12/31 11:17:36 sebastian Exp $ */
#define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
diff --git a/ext/curl/php_curl.h b/ext/curl/php_curl.h
index b17df0a77..f38e20026 100644
--- a/ext/curl/php_curl.h
+++ b/ext/curl/php_curl.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_curl.h,v 1.44.2.2.2.3 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: php_curl.h,v 1.44.2.2.2.5 2008/12/31 11:17:36 sebastian Exp $ */
#ifndef _PHP_CURL_H
#define _PHP_CURL_H
@@ -114,7 +114,9 @@ struct _php_curl_send_headers {
};
struct _php_curl_free {
+#if LIBCURL_VERSION_NUM < 0x071100
zend_llist str;
+#endif
zend_llist post;
zend_llist slist;
};
diff --git a/ext/curl/streams.c b/ext/curl/streams.c
index 2d73f25c8..c2a9a5d57 100644
--- a/ext/curl/streams.c
+++ b/ext/curl/streams.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: streams.c,v 1.14.2.2.2.12 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: streams.c,v 1.14.2.2.2.13 2008/12/31 11:17:36 sebastian Exp $ */
/* This file implements cURL based wrappers.
* NOTE: If you are implementing your own streams that are intended to
diff --git a/ext/curl/tests/bug45161.phpt b/ext/curl/tests/bug45161.phpt
new file mode 100644
index 000000000..eab1fd46e
--- /dev/null
+++ b/ext/curl/tests/bug45161.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Bug #45161 (Reusing a curl handle leaks memory)
+--FILE--
+<?php
+
+// Fill memory for test
+$ch = curl_init();
+$fp = fopen('/dev/null', 'w');
+
+/*
+$i = $start = $end = 100000.00;
+for ($i = 0; $i < 100; $i++) {
+ curl_setopt($ch, CURLOPT_URL, 'http://127.0.0.1:9/');
+ curl_setopt($ch, CURLOPT_FILE, $fp);
+ curl_exec($ch);
+}
+*/
+
+// Start actual test
+$start = memory_get_usage() + 1024;
+for($i = 0; $i < 1024; $i++) {
+ curl_setopt($ch, CURLOPT_URL, 'http://127.0.0.1:9/');
+ curl_setopt($ch, CURLOPT_FILE, $fp);
+ curl_exec($ch);
+}
+if ($start < memory_get_usage()) {
+ echo 'FAIL';
+} else {
+ echo 'PASS';
+}
+echo "\n";
+fclose($fp);
+unset($fp);
+?>
+--EXPECT--
+PASS
diff --git a/ext/curl/tests/bug46739.phpt b/ext/curl/tests/bug46739.phpt
new file mode 100644
index 000000000..06a84ea8e
--- /dev/null
+++ b/ext/curl/tests/bug46739.phpt
@@ -0,0 +1,13 @@
+--TEST--
+Bug #46739 (array returned by curl_getinfo should contain content_type key)
+--FILE--
+<?php
+$ch = curl_init('http://127.0.0.1:9/');
+
+curl_exec($ch);
+$info = curl_getinfo($ch);
+
+echo (array_key_exists('content_type', $info)) ? "set" : "not set";
+?>
+--EXPECT--
+set
diff --git a/ext/date/lib/astro.c b/ext/date/lib/astro.c
index 87e91c448..9d092bfd9 100644
--- a/ext/date/lib/astro.c
+++ b/ext/date/lib/astro.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -19,7 +19,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: astro.c,v 1.1.2.4.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: astro.c,v 1.1.2.4.2.3 2008/12/31 11:17:36 sebastian Exp $ */
#include <stdio.h>
#include <math.h>
diff --git a/ext/date/lib/dow.c b/ext/date/lib/dow.c
index 4a5fa32d5..fa7eb70bb 100644
--- a/ext/date/lib/dow.c
+++ b/ext/date/lib/dow.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dow.c,v 1.8.2.3.2.5 2008/02/22 17:49:30 derick Exp $ */
+/* $Id: dow.c,v 1.8.2.3.2.6 2008/12/31 11:17:36 sebastian Exp $ */
#include "timelib.h"
diff --git a/ext/date/lib/parse_date.c b/ext/date/lib/parse_date.c
index 3c25760d6..98d7de49f 100644
--- a/ext/date/lib/parse_date.c
+++ b/ext/date/lib/parse_date.c
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.12.1 on Mon Feb 25 19:27:05 2008 */
+/* Generated by re2c 0.13.5 on Thu Dec 18 15:52:22 2008 */
/*
+----------------------------------------------------------------------+
| PHP Version 5 |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: parse_date.c,v 1.29.2.30.2.16 2008/02/25 18:28:03 derick Exp $ */
+/* $Id: parse_date.c,v 1.29.2.30.2.18 2008/12/18 14:56:46 derick Exp $ */
#include "timelib.h"
@@ -733,7 +733,7 @@ static long timelib_get_zone(char **ptr, int *dst, timelib_time *t, int *tz_not_
}
#endif
/* If we have a TimeZone identifier to start with, use it */
- if (strstr(tz_abbr, "/")) {
+ if (strstr(tz_abbr, "/") || strcmp(tz_abbr, "UTC") == 0) {
if ((res = timelib_parse_tzfile(tz_abbr, tzdb)) != NULL) {
t->tz_info = res;
t->zone_type = TIMELIB_ZONETYPE_ID;
@@ -773,7 +773,10 @@ std:
s->len = 0;
+
{
+ YYCTYPE yych;
+ unsigned int yyaccept = 0;
static const unsigned char yybm[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 104, 0, 0, 0, 0, 0, 0,
@@ -809,112 +812,108 @@ std:
0, 0, 0, 0, 0, 0, 0, 0,
};
- {
- YYCTYPE yych;
- unsigned int yyaccept = 0;
-
- YYDEBUG(0, *YYCURSOR);
- if((YYLIMIT - YYCURSOR) < 29) YYFILL(29);
- yych = *YYCURSOR;
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x00:
- case 0x0A: goto yy48;
- case 0x09:
- case ' ': goto yy45;
- case '(': goto yy42;
- case '+':
- case '-': goto yy18;
- case ',':
- case '.': goto yy47;
- case '0': goto yy13;
- case '1': goto yy14;
- case '2': goto yy15;
- case '3': goto yy16;
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy17;
- case '@': goto yy11;
- case 'A': goto yy26;
- case 'B':
- case 'C':
- case 'G':
- case 'H':
- case 'K':
- case 'Q':
- case 'R':
- case 'U':
- case 'Z': goto yy43;
- case 'D': goto yy32;
- case 'E': goto yy36;
- case 'F': goto yy24;
- case 'I': goto yy19;
- case 'J': goto yy22;
- case 'L': goto yy38;
- case 'M': goto yy7;
- case 'N': goto yy5;
- case 'O': goto yy30;
- case 'P': goto yy40;
- case 'S': goto yy28;
- case 'T': goto yy9;
- case 'V': goto yy20;
- case 'W': goto yy34;
- case 'X': goto yy21;
- case 'Y': goto yy2;
- case 'a': goto yy27;
- case 'b':
- case 'c':
- case 'g':
- case 'h':
- case 'i':
- case 'k':
- case 'q':
- case 'r':
- case 'u':
- case 'v':
- case 'x':
- case 'z': goto yy44;
- case 'd': goto yy33;
- case 'e': goto yy37;
- case 'f': goto yy25;
- case 'j': goto yy23;
- case 'l': goto yy39;
- case 'm': goto yy8;
- case 'n': goto yy6;
- case 'o': goto yy31;
- case 'p': goto yy41;
- case 's': goto yy29;
- case 't': goto yy10;
- case 'w': goto yy35;
- case 'y': goto yy4;
- default: goto yy50;
- }
+ YYDEBUG(0, *YYCURSOR);
+ if ((YYLIMIT - YYCURSOR) < 29) YYFILL(29);
+ yych = *YYCURSOR;
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case 0x00:
+ case '\n': goto yy48;
+ case '\t':
+ case ' ': goto yy45;
+ case '(': goto yy42;
+ case '+':
+ case '-': goto yy18;
+ case ',':
+ case '.': goto yy47;
+ case '0': goto yy13;
+ case '1': goto yy14;
+ case '2': goto yy15;
+ case '3': goto yy16;
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy17;
+ case '@': goto yy11;
+ case 'A': goto yy26;
+ case 'B':
+ case 'C':
+ case 'G':
+ case 'H':
+ case 'K':
+ case 'Q':
+ case 'R':
+ case 'U':
+ case 'Z': goto yy43;
+ case 'D': goto yy32;
+ case 'E': goto yy36;
+ case 'F': goto yy24;
+ case 'I': goto yy19;
+ case 'J': goto yy22;
+ case 'L': goto yy38;
+ case 'M': goto yy7;
+ case 'N': goto yy5;
+ case 'O': goto yy30;
+ case 'P': goto yy40;
+ case 'S': goto yy28;
+ case 'T': goto yy9;
+ case 'V': goto yy20;
+ case 'W': goto yy34;
+ case 'X': goto yy21;
+ case 'Y': goto yy2;
+ case 'a': goto yy27;
+ case 'b':
+ case 'c':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'k':
+ case 'q':
+ case 'r':
+ case 'u':
+ case 'v':
+ case 'x':
+ case 'z': goto yy44;
+ case 'd': goto yy33;
+ case 'e': goto yy37;
+ case 'f': goto yy25;
+ case 'j': goto yy23;
+ case 'l': goto yy39;
+ case 'm': goto yy8;
+ case 'n': goto yy6;
+ case 'o': goto yy31;
+ case 'p': goto yy41;
+ case 's': goto yy29;
+ case 't': goto yy10;
+ case 'w': goto yy35;
+ case 'y': goto yy4;
+ default: goto yy50;
+ }
yy2:
- YYDEBUG(2, *YYCURSOR);
- ++YYCURSOR;
- if((yych = *YYCURSOR) <= 'E') {
- if(yych <= ')') {
- if(yych >= ')') goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy137;
- goto yy1410;
- }
+ YYDEBUG(2, *YYCURSOR);
+ ++YYCURSOR;
+ if ((yych = *YYCURSOR) <= 'E') {
+ if (yych <= ')') {
+ if (yych >= ')') goto yy136;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy137;
- if(yych >= 'a') goto yy142;
- } else {
- if(yych <= 'e') goto yy1419;
- if(yych <= 'z') goto yy142;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy137;
+ goto yy1415;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy137;
+ if (yych >= 'a') goto yy142;
+ } else {
+ if (yych <= 'e') goto yy1424;
+ if (yych <= 'z') goto yy142;
}
+ }
yy3:
- YYDEBUG(3, *YYCURSOR);
- {
+ YYDEBUG(3, *YYCURSOR);
+ {
int tz_not_found;
DEBUG_OUTPUT("tzcorrection | tz");
TIMELIB_INIT;
@@ -927,1718 +926,1718 @@ yy3:
return TIMELIB_TIMEZONE;
}
yy4:
- YYDEBUG(4, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy137;
- goto yy1410;
- }
+ YYDEBUG(4, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy137;
+ goto yy1415;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy137;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
+ if (yych <= 'e') goto yy1415;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
+ }
+ }
+yy5:
+ YYDEBUG(5, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych <= 'D') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy137;
+ } else {
+ if (yych <= 'H') {
+ if (yych <= 'E') goto yy1386;
goto yy137;
} else {
- if(yych <= 'e') goto yy1410;
- if(yych <= 'z') goto yy137;
- goto yy3;
+ if (yych <= 'I') goto yy1387;
+ if (yych <= 'N') goto yy137;
+ goto yy1385;
}
}
-yy5:
- YYDEBUG(5, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych <= 'D') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- goto yy137;
+ } else {
+ if (yych <= 'h') {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy137;
+ goto yy3;
} else {
- if(yych <= 'H') {
- if(yych <= 'E') goto yy1381;
- goto yy137;
- } else {
- if(yych <= 'I') goto yy1382;
- if(yych <= 'N') goto yy137;
- goto yy1380;
- }
+ if (yych == 'e') goto yy1402;
+ goto yy142;
}
} else {
- if(yych <= 'h') {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy137;
- goto yy3;
- } else {
- if(yych == 'e') goto yy1397;
- goto yy142;
- }
+ if (yych <= 'n') {
+ if (yych <= 'i') goto yy1403;
+ goto yy142;
} else {
- if(yych <= 'n') {
- if(yych <= 'i') goto yy1398;
- goto yy142;
- } else {
- if(yych <= 'o') goto yy1396;
- if(yych <= 'z') goto yy142;
- goto yy3;
- }
+ if (yych <= 'o') goto yy1401;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
}
}
+ }
yy6:
- YYDEBUG(6, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych <= 'D') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
+ YYDEBUG(6, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych <= 'D') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy137;
+ } else {
+ if (yych <= 'H') {
+ if (yych <= 'E') goto yy1386;
goto yy137;
} else {
- if(yych <= 'H') {
- if(yych <= 'E') goto yy1381;
- goto yy137;
- } else {
- if(yych <= 'I') goto yy1382;
- if(yych <= 'N') goto yy137;
- goto yy1380;
- }
+ if (yych <= 'I') goto yy1387;
+ if (yych <= 'N') goto yy137;
+ goto yy1385;
+ }
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy137;
+ goto yy3;
+ } else {
+ if (yych == 'e') goto yy1386;
+ goto yy137;
}
} else {
- if(yych <= 'h') {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy137;
- goto yy3;
- } else {
- if(yych == 'e') goto yy1381;
- goto yy137;
- }
+ if (yych <= 'n') {
+ if (yych <= 'i') goto yy1387;
+ goto yy137;
} else {
- if(yych <= 'n') {
- if(yych <= 'i') goto yy1382;
- goto yy137;
- } else {
- if(yych <= 'o') goto yy1380;
- if(yych <= 'z') goto yy137;
- goto yy3;
- }
+ if (yych <= 'o') goto yy1385;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
}
}
+ }
yy7:
- YYDEBUG(7, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- goto yy1350;
- } else {
- if(yych == 'I') goto yy1351;
- if(yych <= 'N') goto yy137;
- goto yy1352;
- }
- } else {
- if(yych <= 'h') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- if(yych <= 'a') goto yy1365;
+ YYDEBUG(7, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy1355;
+ } else {
+ if (yych == 'I') goto yy1356;
+ if (yych <= 'N') goto yy137;
+ goto yy1357;
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'a') goto yy1370;
+ goto yy142;
+ } else {
+ if (yych <= 'n') {
+ if (yych <= 'i') goto yy1371;
goto yy142;
} else {
- if(yych <= 'n') {
- if(yych <= 'i') goto yy1366;
- goto yy142;
- } else {
- if(yych <= 'o') goto yy1367;
- if(yych <= 'z') goto yy142;
- goto yy3;
- }
+ if (yych <= 'o') goto yy1372;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
}
}
+ }
yy8:
- YYDEBUG(8, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- goto yy1350;
- } else {
- if(yych == 'I') goto yy1351;
- if(yych <= 'N') goto yy137;
- goto yy1352;
- }
- } else {
- if(yych <= 'h') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- if(yych <= 'a') goto yy1350;
+ YYDEBUG(8, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy1355;
+ } else {
+ if (yych == 'I') goto yy1356;
+ if (yych <= 'N') goto yy137;
+ goto yy1357;
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'a') goto yy1355;
+ goto yy137;
+ } else {
+ if (yych <= 'n') {
+ if (yych <= 'i') goto yy1356;
goto yy137;
} else {
- if(yych <= 'n') {
- if(yych <= 'i') goto yy1351;
- goto yy137;
- } else {
- if(yych <= 'o') goto yy1352;
- if(yych <= 'z') goto yy137;
- goto yy3;
- }
+ if (yych <= 'o') goto yy1357;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
}
}
+ }
yy9:
- YYDEBUG(9, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case ')': goto yy136;
- case '0':
- case '1': goto yy1282;
- case '2': goto yy1283;
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy1284;
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'F':
- case 'G':
- case 'I':
- case 'J':
- case 'K':
- case 'L':
- case 'M':
- case 'N':
- case 'P':
- case 'Q':
- case 'R':
- case 'S':
- case 'T':
- case 'V':
- case 'X':
- case 'Y':
- case 'Z': goto yy137;
- case 'E': goto yy1277;
- case 'H': goto yy1278;
- case 'O': goto yy1279;
- case 'U': goto yy1280;
- case 'W': goto yy1281;
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'f':
- case 'g':
- case 'i':
- case 'j':
- case 'k':
- case 'l':
- case 'm':
- case 'n':
- case 'p':
- case 'q':
- case 'r':
- case 's':
- case 't':
- case 'v':
- case 'x':
- case 'y':
- case 'z': goto yy142;
- case 'e': goto yy1319;
- case 'h': goto yy1320;
- case 'o': goto yy1321;
- case 'u': goto yy1322;
- case 'w': goto yy1323;
- default: goto yy3;
- }
+ YYDEBUG(9, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case ')': goto yy136;
+ case '0':
+ case '1': goto yy1287;
+ case '2': goto yy1288;
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy1289;
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'F':
+ case 'G':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'V':
+ case 'X':
+ case 'Y':
+ case 'Z': goto yy137;
+ case 'E': goto yy1282;
+ case 'H': goto yy1283;
+ case 'O': goto yy1284;
+ case 'U': goto yy1285;
+ case 'W': goto yy1286;
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'f':
+ case 'g':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'v':
+ case 'x':
+ case 'y':
+ case 'z': goto yy142;
+ case 'e': goto yy1324;
+ case 'h': goto yy1325;
+ case 'o': goto yy1326;
+ case 'u': goto yy1327;
+ case 'w': goto yy1328;
+ default: goto yy3;
+ }
yy10:
- YYDEBUG(10, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case ')': goto yy136;
- case '0':
- case '1': goto yy1282;
- case '2': goto yy1283;
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy1284;
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'F':
- case 'G':
- case 'I':
- case 'J':
- case 'K':
- case 'L':
- case 'M':
- case 'N':
- case 'P':
- case 'Q':
- case 'R':
- case 'S':
- case 'T':
- case 'V':
- case 'X':
- case 'Y':
- case 'Z':
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'f':
- case 'g':
- case 'i':
- case 'j':
- case 'k':
- case 'l':
- case 'm':
- case 'n':
- case 'p':
- case 'q':
- case 'r':
- case 's':
- case 't':
- case 'v':
- case 'x':
- case 'y':
- case 'z': goto yy137;
- case 'E':
- case 'e': goto yy1277;
- case 'H':
- case 'h': goto yy1278;
- case 'O':
- case 'o': goto yy1279;
- case 'U':
- case 'u': goto yy1280;
- case 'W':
- case 'w': goto yy1281;
- default: goto yy3;
- }
+ YYDEBUG(10, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case ')': goto yy136;
+ case '0':
+ case '1': goto yy1287;
+ case '2': goto yy1288;
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy1289;
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'F':
+ case 'G':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'V':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'f':
+ case 'g':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'v':
+ case 'x':
+ case 'y':
+ case 'z': goto yy137;
+ case 'E':
+ case 'e': goto yy1282;
+ case 'H':
+ case 'h': goto yy1283;
+ case 'O':
+ case 'o': goto yy1284;
+ case 'U':
+ case 'u': goto yy1285;
+ case 'W':
+ case 'w': goto yy1286;
+ default: goto yy3;
+ }
yy11:
- YYDEBUG(11, *YYCURSOR);
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '-') goto yy1273;
- if(yych <= '/') goto yy12;
- if(yych <= '9') goto yy1274;
+ YYDEBUG(11, *YYCURSOR);
+ yyaccept = 1;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '-') goto yy1278;
+ if (yych <= '/') goto yy12;
+ if (yych <= '9') goto yy1279;
yy12:
- YYDEBUG(12, *YYCURSOR);
- {
+ YYDEBUG(12, *YYCURSOR);
+ {
add_error(s, "Unexpected character");
goto std;
}
yy13:
- YYDEBUG(13, *YYCURSOR);
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09: goto yy1227;
- case ' ':
- case 'A':
- case 'D':
- case 'F':
- case 'H':
- case 'I':
- case 'J':
- case 'M':
- case 'N':
- case 'O':
- case 'S':
- case 'T':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'a':
- case 'd':
- case 'f':
- case 'h':
- case 'j':
- case 'm':
- case 'o':
- case 'w':
- case 'y': goto yy1229;
- case '-': goto yy678;
- case '.': goto yy1239;
- case '/': goto yy677;
- case '0': goto yy1272;
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy1271;
- case ':': goto yy1240;
- case 'n': goto yy675;
- case 'r': goto yy676;
- case 's': goto yy669;
- case 't': goto yy673;
- default: goto yy12;
- }
+ YYDEBUG(13, *YYCURSOR);
+ yyaccept = 1;
+ yych = *(YYMARKER = ++YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t': goto yy1232;
+ case ' ':
+ case 'A':
+ case 'D':
+ case 'F':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'S':
+ case 'T':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'a':
+ case 'd':
+ case 'f':
+ case 'h':
+ case 'j':
+ case 'm':
+ case 'o':
+ case 'w':
+ case 'y': goto yy1234;
+ case '-': goto yy676;
+ case '.': goto yy1244;
+ case '/': goto yy675;
+ case '0': goto yy1277;
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy1276;
+ case ':': goto yy1245;
+ case 'n': goto yy673;
+ case 'r': goto yy674;
+ case 's': goto yy667;
+ case 't': goto yy671;
+ default: goto yy12;
+ }
yy14:
- YYDEBUG(14, *YYCURSOR);
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09: goto yy665;
- case ' ':
- case 'A':
- case 'D':
- case 'F':
- case 'H':
- case 'I':
- case 'J':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'S':
- case 'T':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'a':
- case 'd':
- case 'f':
- case 'h':
- case 'j':
- case 'm':
- case 'o':
- case 'p':
- case 'w':
- case 'y': goto yy667;
- case '-': goto yy678;
- case '.': goto yy679;
- case '/': goto yy677;
- case '0':
- case '1':
- case '2': goto yy1271;
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy1238;
- case ':': goto yy688;
- case 'n': goto yy675;
- case 'r': goto yy676;
- case 's': goto yy669;
- case 't': goto yy673;
- default: goto yy12;
- }
+ YYDEBUG(14, *YYCURSOR);
+ yyaccept = 1;
+ yych = *(YYMARKER = ++YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t': goto yy663;
+ case ' ':
+ case 'A':
+ case 'D':
+ case 'F':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'S':
+ case 'T':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'a':
+ case 'd':
+ case 'f':
+ case 'h':
+ case 'j':
+ case 'm':
+ case 'o':
+ case 'p':
+ case 'w':
+ case 'y': goto yy665;
+ case '-': goto yy676;
+ case '.': goto yy677;
+ case '/': goto yy675;
+ case '0':
+ case '1':
+ case '2': goto yy1276;
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy1243;
+ case ':': goto yy686;
+ case 'n': goto yy673;
+ case 'r': goto yy674;
+ case 's': goto yy667;
+ case 't': goto yy671;
+ default: goto yy12;
+ }
yy15:
- YYDEBUG(15, *YYCURSOR);
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09: goto yy665;
- case ' ':
- case 'A':
- case 'D':
- case 'F':
- case 'H':
- case 'I':
- case 'J':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'S':
- case 'T':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'a':
- case 'd':
- case 'f':
- case 'h':
- case 'j':
- case 'm':
- case 'o':
- case 'p':
- case 'w':
- case 'y': goto yy667;
- case '-': goto yy678;
- case '.': goto yy679;
- case '/': goto yy677;
- case '0':
- case '1':
- case '2':
- case '3': goto yy1238;
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy1225;
- case ':': goto yy688;
- case 'n': goto yy675;
- case 'r': goto yy676;
- case 's': goto yy669;
- case 't': goto yy673;
- default: goto yy12;
- }
+ YYDEBUG(15, *YYCURSOR);
+ yyaccept = 1;
+ yych = *(YYMARKER = ++YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t': goto yy663;
+ case ' ':
+ case 'A':
+ case 'D':
+ case 'F':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'S':
+ case 'T':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'a':
+ case 'd':
+ case 'f':
+ case 'h':
+ case 'j':
+ case 'm':
+ case 'o':
+ case 'p':
+ case 'w':
+ case 'y': goto yy665;
+ case '-': goto yy676;
+ case '.': goto yy677;
+ case '/': goto yy675;
+ case '0':
+ case '1':
+ case '2':
+ case '3': goto yy1243;
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy1230;
+ case ':': goto yy686;
+ case 'n': goto yy673;
+ case 'r': goto yy674;
+ case 's': goto yy667;
+ case 't': goto yy671;
+ default: goto yy12;
+ }
yy16:
- YYDEBUG(16, *YYCURSOR);
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09: goto yy665;
- case ' ':
- case 'A':
- case 'D':
- case 'F':
- case 'H':
- case 'I':
- case 'J':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'S':
- case 'T':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'a':
- case 'd':
- case 'f':
- case 'h':
- case 'j':
- case 'm':
- case 'o':
- case 'p':
- case 'w':
- case 'y': goto yy667;
- case '-': goto yy678;
- case '.': goto yy679;
- case '/': goto yy677;
- case '0':
- case '1': goto yy1225;
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy674;
- case ':': goto yy688;
- case 'n': goto yy675;
- case 'r': goto yy676;
- case 's': goto yy669;
- case 't': goto yy673;
- default: goto yy12;
- }
+ YYDEBUG(16, *YYCURSOR);
+ yyaccept = 1;
+ yych = *(YYMARKER = ++YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t': goto yy663;
+ case ' ':
+ case 'A':
+ case 'D':
+ case 'F':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'S':
+ case 'T':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'a':
+ case 'd':
+ case 'f':
+ case 'h':
+ case 'j':
+ case 'm':
+ case 'o':
+ case 'p':
+ case 'w':
+ case 'y': goto yy665;
+ case '-': goto yy676;
+ case '.': goto yy677;
+ case '/': goto yy675;
+ case '0':
+ case '1': goto yy1230;
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy672;
+ case ':': goto yy686;
+ case 'n': goto yy673;
+ case 'r': goto yy674;
+ case 's': goto yy667;
+ case 't': goto yy671;
+ default: goto yy12;
+ }
yy17:
- YYDEBUG(17, *YYCURSOR);
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09: goto yy665;
- case ' ':
- case 'A':
- case 'D':
- case 'F':
- case 'H':
- case 'I':
- case 'J':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'S':
- case 'T':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'a':
- case 'd':
- case 'f':
- case 'h':
- case 'j':
- case 'm':
- case 'o':
- case 'p':
- case 'w':
- case 'y': goto yy667;
- case '-': goto yy678;
- case '.': goto yy679;
- case '/': goto yy677;
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy674;
- case ':': goto yy688;
- case 'n': goto yy675;
- case 'r': goto yy676;
- case 's': goto yy669;
- case 't': goto yy673;
- default: goto yy12;
- }
+ YYDEBUG(17, *YYCURSOR);
+ yyaccept = 1;
+ yych = *(YYMARKER = ++YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t': goto yy663;
+ case ' ':
+ case 'A':
+ case 'D':
+ case 'F':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'S':
+ case 'T':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'a':
+ case 'd':
+ case 'f':
+ case 'h':
+ case 'j':
+ case 'm':
+ case 'o':
+ case 'p':
+ case 'w':
+ case 'y': goto yy665;
+ case '-': goto yy676;
+ case '.': goto yy677;
+ case '/': goto yy675;
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy672;
+ case ':': goto yy686;
+ case 'n': goto yy673;
+ case 'r': goto yy674;
+ case 's': goto yy667;
+ case 't': goto yy671;
+ default: goto yy12;
+ }
yy18:
- YYDEBUG(18, *YYCURSOR);
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yybm[0+yych] & 8) {
- goto yy54;
- }
- YYDEBUG(-1, yych);
- switch(yych) {
- case '+':
- case '-': goto yy643;
- case '0':
- case '1': goto yy640;
- case '2': goto yy641;
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy642;
- default: goto yy12;
- }
+ YYDEBUG(18, *YYCURSOR);
+ yyaccept = 1;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yybm[0+yych] & 8) {
+ goto yy54;
+ }
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '+':
+ case '-': goto yy641;
+ case '0':
+ case '1': goto yy638;
+ case '2': goto yy639;
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy640;
+ default: goto yy12;
+ }
yy19:
- YYDEBUG(19, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy3;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy3;
- }
+ YYDEBUG(19, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy3;
+ goto yy305;
} else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy3;
- } else {
- if(yych == '/') goto yy3;
- goto yy305;
- }
+ if (yych == ' ') goto yy305;
+ goto yy3;
}
} else {
- if(yych <= 'V') {
- if(yych <= 'H') {
- if(yych <= '@') goto yy3;
- goto yy137;
- } else {
- if(yych <= 'I') goto yy639;
- if(yych <= 'U') goto yy137;
- goto yy638;
- }
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'Z') {
- if(yych == 'X') goto yy638;
- goto yy137;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy142;
- goto yy3;
- }
+ if (yych == '/') goto yy3;
+ goto yy305;
}
}
-yy20:
- YYDEBUG(20, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy305;
- if(yych <= 0x1F) goto yy3;
- goto yy305;
+ } else {
+ if (yych <= 'V') {
+ if (yych <= 'H') {
+ if (yych <= '@') goto yy3;
+ goto yy137;
} else {
- if(yych == ')') goto yy136;
- if(yych <= ',') goto yy3;
- goto yy305;
+ if (yych <= 'I') goto yy637;
+ if (yych <= 'U') goto yy137;
+ goto yy636;
}
} else {
- if(yych <= 'H') {
- if(yych <= '/') goto yy3;
- if(yych <= '9') goto yy305;
- if(yych <= '@') goto yy3;
+ if (yych <= 'Z') {
+ if (yych == 'X') goto yy636;
goto yy137;
} else {
- if(yych <= 'Z') {
- if(yych <= 'I') goto yy635;
- goto yy137;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy142;
- goto yy3;
- }
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
}
}
-yy21:
- YYDEBUG(21, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy305;
- if(yych <= 0x1F) goto yy3;
- goto yy305;
- } else {
- if(yych == ')') goto yy136;
- if(yych <= ',') goto yy3;
- goto yy305;
- }
+ }
+yy20:
+ YYDEBUG(20, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy305;
+ if (yych <= 0x1F) goto yy3;
+ goto yy305;
} else {
- if(yych <= 'H') {
- if(yych <= '/') goto yy3;
- if(yych <= '9') goto yy305;
- if(yych <= '@') goto yy3;
+ if (yych == ')') goto yy136;
+ if (yych <= ',') goto yy3;
+ goto yy305;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych <= '/') goto yy3;
+ if (yych <= '9') goto yy305;
+ if (yych <= '@') goto yy3;
+ goto yy137;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= 'I') goto yy633;
goto yy137;
} else {
- if(yych <= 'Z') {
- if(yych <= 'I') goto yy633;
- goto yy137;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy142;
- goto yy3;
- }
- }
- }
-yy22:
- YYDEBUG(22, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= '@') {
- if(yych == ')') goto yy136;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy142;
goto yy3;
- } else {
- if(yych <= 'A') goto yy616;
- if(yych <= 'T') goto yy137;
- goto yy615;
}
+ }
+ }
+yy21:
+ YYDEBUG(21, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy305;
+ if (yych <= 0x1F) goto yy3;
+ goto yy305;
} else {
- if(yych <= 'a') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- goto yy625;
+ if (yych == ')') goto yy136;
+ if (yych <= ',') goto yy3;
+ goto yy305;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych <= '/') goto yy3;
+ if (yych <= '9') goto yy305;
+ if (yych <= '@') goto yy3;
+ goto yy137;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= 'I') goto yy631;
+ goto yy137;
} else {
- if(yych == 'u') goto yy624;
- if(yych <= 'z') goto yy142;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy142;
goto yy3;
}
}
+ }
+yy22:
+ YYDEBUG(22, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'A') goto yy614;
+ if (yych <= 'T') goto yy137;
+ goto yy613;
+ }
+ } else {
+ if (yych <= 'a') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy623;
+ } else {
+ if (yych == 'u') goto yy622;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
+ }
+ }
yy23:
- YYDEBUG(23, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
+ YYDEBUG(23, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'A') goto yy614;
+ if (yych <= 'T') goto yy137;
+ goto yy613;
+ }
+ } else {
+ if (yych <= 'a') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy614;
+ } else {
+ if (yych == 'u') goto yy613;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
+ }
+ }
+yy24:
+ YYDEBUG(24, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'A') goto yy616;
- if(yych <= 'T') goto yy137;
- goto yy615;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy137;
+ goto yy575;
}
} else {
- if(yych <= 'a') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- goto yy616;
+ if (yych <= 'N') {
+ if (yych == 'I') goto yy576;
+ goto yy137;
} else {
- if(yych == 'u') goto yy615;
- if(yych <= 'z') goto yy137;
- goto yy3;
+ if (yych <= 'O') goto yy577;
+ if (yych <= 'Q') goto yy137;
+ goto yy578;
}
}
-yy24:
- YYDEBUG(24, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy137;
- goto yy577;
- }
+ } else {
+ if (yych <= 'i') {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy142;
} else {
- if(yych <= 'N') {
- if(yych == 'I') goto yy578;
- goto yy137;
- } else {
- if(yych <= 'O') goto yy579;
- if(yych <= 'Q') goto yy137;
- goto yy580;
- }
+ if (yych <= 'e') goto yy594;
+ if (yych <= 'h') goto yy142;
+ goto yy595;
}
} else {
- if(yych <= 'i') {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- goto yy142;
- } else {
- if(yych <= 'e') goto yy596;
- if(yych <= 'h') goto yy142;
- goto yy597;
- }
+ if (yych <= 'q') {
+ if (yych == 'o') goto yy596;
+ goto yy142;
} else {
- if(yych <= 'q') {
- if(yych == 'o') goto yy598;
- goto yy142;
- } else {
- if(yych <= 'r') goto yy599;
- if(yych <= 'z') goto yy142;
- goto yy3;
- }
+ if (yych <= 'r') goto yy597;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
}
}
+ }
yy25:
- YYDEBUG(25, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy137;
- goto yy577;
- }
+ YYDEBUG(25, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'N') {
- if(yych == 'I') goto yy578;
- goto yy137;
- } else {
- if(yych <= 'O') goto yy579;
- if(yych <= 'Q') goto yy137;
- goto yy580;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy137;
+ goto yy575;
}
} else {
- if(yych <= 'i') {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- goto yy137;
- } else {
- if(yych <= 'e') goto yy577;
- if(yych <= 'h') goto yy137;
- goto yy578;
- }
+ if (yych <= 'N') {
+ if (yych == 'I') goto yy576;
+ goto yy137;
} else {
- if(yych <= 'q') {
- if(yych == 'o') goto yy579;
- goto yy137;
- } else {
- if(yych <= 'r') goto yy580;
- if(yych <= 'z') goto yy137;
- goto yy3;
- }
+ if (yych <= 'O') goto yy577;
+ if (yych <= 'Q') goto yy137;
+ goto yy578;
}
}
-yy26:
- YYDEBUG(26, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= 'F') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
+ } else {
+ if (yych <= 'i') {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
goto yy137;
} else {
- if(yych <= 'O') {
- if(yych <= 'G') goto yy556;
- goto yy137;
- } else {
- if(yych <= 'P') goto yy555;
- if(yych <= 'T') goto yy137;
- goto yy554;
- }
+ if (yych <= 'e') goto yy575;
+ if (yych <= 'h') goto yy137;
+ goto yy576;
}
} else {
- if(yych <= 'o') {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy137;
- goto yy3;
- } else {
- if(yych == 'g') goto yy568;
- goto yy142;
- }
+ if (yych <= 'q') {
+ if (yych == 'o') goto yy577;
+ goto yy137;
} else {
- if(yych <= 't') {
- if(yych <= 'p') goto yy567;
- goto yy142;
- } else {
- if(yych <= 'u') goto yy566;
- if(yych <= 'z') goto yy142;
- goto yy3;
- }
+ if (yych <= 'r') goto yy578;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
}
}
-yy27:
- YYDEBUG(27, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= 'F') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
+ }
+yy26:
+ YYDEBUG(26, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= 'F') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy137;
+ } else {
+ if (yych <= 'O') {
+ if (yych <= 'G') goto yy554;
goto yy137;
} else {
- if(yych <= 'O') {
- if(yych <= 'G') goto yy556;
- goto yy137;
- } else {
- if(yych <= 'P') goto yy555;
- if(yych <= 'T') goto yy137;
- goto yy554;
- }
- }
- } else {
- if(yych <= 'o') {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy137;
- goto yy3;
- } else {
- if(yych == 'g') goto yy556;
- goto yy137;
- }
- } else {
- if(yych <= 't') {
- if(yych <= 'p') goto yy555;
- goto yy137;
- } else {
- if(yych <= 'u') goto yy554;
- if(yych <= 'z') goto yy137;
- goto yy3;
- }
+ if (yych <= 'P') goto yy553;
+ if (yych <= 'T') goto yy137;
+ goto yy552;
}
}
-yy28:
- YYDEBUG(28, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'A') goto yy497;
- goto yy137;
- }
+ } else {
+ if (yych <= 'o') {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy137;
+ goto yy3;
} else {
- if(yych <= 'H') {
- if(yych <= 'E') goto yy496;
- goto yy137;
- } else {
- if(yych <= 'I') goto yy498;
- if(yych <= 'T') goto yy137;
- goto yy499;
- }
+ if (yych == 'g') goto yy566;
+ goto yy142;
}
} else {
- if(yych <= 'e') {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy137;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy526;
- if(yych <= 'd') goto yy142;
- goto yy525;
- }
+ if (yych <= 't') {
+ if (yych <= 'p') goto yy565;
+ goto yy142;
} else {
- if(yych <= 't') {
- if(yych == 'i') goto yy527;
- goto yy142;
- } else {
- if(yych <= 'u') goto yy528;
- if(yych <= 'z') goto yy142;
- goto yy3;
- }
+ if (yych <= 'u') goto yy564;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
}
}
-yy29:
- YYDEBUG(29, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'A') goto yy497;
- goto yy137;
- }
- } else {
- if(yych <= 'H') {
- if(yych <= 'E') goto yy496;
- goto yy137;
- } else {
- if(yych <= 'I') goto yy498;
- if(yych <= 'T') goto yy137;
- goto yy499;
- }
- }
- } else {
- if(yych <= 'e') {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy137;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy497;
- if(yych <= 'd') goto yy137;
- goto yy496;
- }
+ }
+yy27:
+ YYDEBUG(27, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= 'F') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy137;
+ } else {
+ if (yych <= 'O') {
+ if (yych <= 'G') goto yy554;
+ goto yy137;
} else {
- if(yych <= 't') {
- if(yych == 'i') goto yy498;
- goto yy137;
- } else {
- if(yych <= 'u') goto yy499;
- if(yych <= 'z') goto yy137;
- goto yy3;
- }
+ if (yych <= 'P') goto yy553;
+ if (yych <= 'T') goto yy137;
+ goto yy552;
}
}
-yy30:
- YYDEBUG(30, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'C') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'o') {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy137;
+ goto yy3;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'B') goto yy137;
- goto yy486;
+ if (yych == 'g') goto yy554;
+ goto yy137;
}
} else {
- if(yych <= 'b') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- goto yy142;
+ if (yych <= 't') {
+ if (yych <= 'p') goto yy553;
+ goto yy137;
} else {
- if(yych <= 'c') goto yy491;
- if(yych <= 'z') goto yy142;
+ if (yych <= 'u') goto yy552;
+ if (yych <= 'z') goto yy137;
goto yy3;
}
}
-yy31:
- YYDEBUG(31, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'C') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
+ }
+yy28:
+ YYDEBUG(28, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
goto yy136;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'B') goto yy137;
- goto yy486;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'A') goto yy495;
+ goto yy137;
}
} else {
- if(yych <= 'b') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
+ if (yych <= 'H') {
+ if (yych <= 'E') goto yy494;
goto yy137;
} else {
- if(yych <= 'c') goto yy486;
- if(yych <= 'z') goto yy137;
- goto yy3;
+ if (yych <= 'I') goto yy496;
+ if (yych <= 'T') goto yy137;
+ goto yy497;
}
}
-yy32:
- YYDEBUG(32, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'e') {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy137;
+ goto yy3;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy137;
- goto yy301;
+ if (yych <= 'a') goto yy524;
+ if (yych <= 'd') goto yy142;
+ goto yy523;
}
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
+ if (yych <= 't') {
+ if (yych == 'i') goto yy525;
goto yy142;
} else {
- if(yych <= 'e') goto yy479;
- if(yych <= 'z') goto yy142;
+ if (yych <= 'u') goto yy526;
+ if (yych <= 'z') goto yy142;
goto yy3;
}
}
-yy33:
- YYDEBUG(33, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
+ }
+yy29:
+ YYDEBUG(29, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
goto yy136;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy137;
- goto yy301;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'A') goto yy495;
+ goto yy137;
}
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
+ if (yych <= 'H') {
+ if (yych <= 'E') goto yy494;
goto yy137;
} else {
- if(yych <= 'e') goto yy301;
- if(yych <= 'z') goto yy137;
- goto yy3;
+ if (yych <= 'I') goto yy496;
+ if (yych <= 'T') goto yy137;
+ goto yy497;
}
}
-yy34:
- YYDEBUG(34, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'e') {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy137;
+ goto yy3;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy137;
- goto yy274;
+ if (yych <= 'a') goto yy495;
+ if (yych <= 'd') goto yy137;
+ goto yy494;
}
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- goto yy142;
+ if (yych <= 't') {
+ if (yych == 'i') goto yy496;
+ goto yy137;
} else {
- if(yych <= 'e') goto yy288;
- if(yych <= 'z') goto yy142;
+ if (yych <= 'u') goto yy497;
+ if (yych <= 'z') goto yy137;
goto yy3;
}
}
+ }
+yy30:
+ YYDEBUG(30, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'C') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'B') goto yy137;
+ goto yy484;
+ }
+ } else {
+ if (yych <= 'b') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy142;
+ } else {
+ if (yych <= 'c') goto yy489;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
+ }
+ }
+yy31:
+ YYDEBUG(31, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'C') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'B') goto yy137;
+ goto yy484;
+ }
+ } else {
+ if (yych <= 'b') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy137;
+ } else {
+ if (yych <= 'c') goto yy484;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
+ }
+ }
+yy32:
+ YYDEBUG(32, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy137;
+ goto yy301;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy142;
+ } else {
+ if (yych <= 'e') goto yy477;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
+ }
+ }
+yy33:
+ YYDEBUG(33, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy137;
+ goto yy301;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy137;
+ } else {
+ if (yych <= 'e') goto yy301;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
+ }
+ }
+yy34:
+ YYDEBUG(34, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy137;
+ goto yy274;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy142;
+ } else {
+ if (yych <= 'e') goto yy288;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
+ }
+ }
yy35:
- YYDEBUG(35, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy137;
- goto yy274;
- }
+ YYDEBUG(35, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- goto yy137;
- } else {
- if(yych <= 'e') goto yy274;
- if(yych <= 'z') goto yy137;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy137;
+ goto yy274;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy137;
+ } else {
+ if (yych <= 'e') goto yy274;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
}
+ }
yy36:
- YYDEBUG(36, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'L') {
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych == 'I') goto yy254;
- if(yych <= 'K') goto yy137;
- goto yy255;
- }
+ YYDEBUG(36, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'L') {
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'i') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- if(yych <= 'h') goto yy142;
- goto yy264;
- } else {
- if(yych == 'l') goto yy265;
- if(yych <= 'z') goto yy142;
- goto yy3;
- }
+ if (yych == 'I') goto yy254;
+ if (yych <= 'K') goto yy137;
+ goto yy255;
+ }
+ } else {
+ if (yych <= 'i') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'h') goto yy142;
+ goto yy264;
+ } else {
+ if (yych == 'l') goto yy265;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
}
+ }
yy37:
- YYDEBUG(37, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'L') {
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych == 'I') goto yy254;
- if(yych <= 'K') goto yy137;
- goto yy255;
- }
+ YYDEBUG(37, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'L') {
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'i') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- if(yych <= 'h') goto yy137;
- goto yy254;
- } else {
- if(yych == 'l') goto yy255;
- if(yych <= 'z') goto yy137;
- goto yy3;
- }
+ if (yych == 'I') goto yy254;
+ if (yych <= 'K') goto yy137;
+ goto yy255;
+ }
+ } else {
+ if (yych <= 'i') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'h') goto yy137;
+ goto yy254;
+ } else {
+ if (yych == 'l') goto yy255;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
}
+ }
yy38:
- YYDEBUG(38, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- goto yy248;
- } else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy137;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy251;
- if(yych <= 'z') goto yy142;
- goto yy3;
- }
+ YYDEBUG(38, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy248;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy137;
+ goto yy3;
+ } else {
+ if (yych <= 'a') goto yy251;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
}
+ }
yy39:
- YYDEBUG(39, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- goto yy248;
- } else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy137;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy248;
- if(yych <= 'z') goto yy137;
- goto yy3;
- }
+ YYDEBUG(39, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy248;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy137;
+ goto yy3;
+ } else {
+ if (yych <= 'a') goto yy248;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
}
+ }
yy40:
- YYDEBUG(40, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy137;
- goto yy154;
- }
+ YYDEBUG(40, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'q') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- goto yy142;
- } else {
- if(yych <= 'r') goto yy241;
- if(yych <= 'z') goto yy142;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy137;
+ goto yy154;
}
-yy41:
- YYDEBUG(41, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy137;
- goto yy154;
- }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy142;
} else {
- if(yych <= 'q') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- goto yy137;
- } else {
- if(yych <= 'r') goto yy154;
- if(yych <= 'z') goto yy137;
- goto yy3;
- }
- }
-yy42:
- YYDEBUG(42, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') goto yy12;
- if(yych <= 'Z') goto yy153;
- if(yych <= '`') goto yy12;
- if(yych <= 'z') goto yy153;
- goto yy12;
-yy43:
- YYDEBUG(43, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy136;
+ if (yych <= 'r') goto yy241;
+ if (yych <= 'z') goto yy142;
goto yy3;
+ }
+ }
+yy41:
+ YYDEBUG(41, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy142;
- goto yy3;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy137;
+ goto yy154;
}
-yy44:
- YYDEBUG(44, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy137;
} else {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy137;
+ if (yych <= 'r') goto yy154;
+ if (yych <= 'z') goto yy137;
goto yy3;
}
+ }
+yy42:
+ YYDEBUG(42, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') goto yy12;
+ if (yych <= 'Z') goto yy153;
+ if (yych <= '`') goto yy12;
+ if (yych <= 'z') goto yy153;
+ goto yy12;
+yy43:
+ YYDEBUG(43, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
+ }
+yy44:
+ YYDEBUG(44, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
+ }
yy45:
- YYDEBUG(45, *YYCURSOR);
- yyaccept = 2;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yybm[0+yych] & 8) {
- goto yy54;
- }
- if(yych <= '/') goto yy46;
- if(yych <= '9') goto yy51;
+ YYDEBUG(45, *YYCURSOR);
+ yyaccept = 2;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yybm[0+yych] & 8) {
+ goto yy54;
+ }
+ if (yych <= '/') goto yy46;
+ if (yych <= '9') goto yy51;
yy46:
- YYDEBUG(46, *YYCURSOR);
- {
+ YYDEBUG(46, *YYCURSOR);
+ {
goto std;
}
yy47:
- YYDEBUG(47, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy46;
+ YYDEBUG(47, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy46;
yy48:
- YYDEBUG(48, *YYCURSOR);
- ++YYCURSOR;
- YYDEBUG(49, *YYCURSOR);
- {
+ YYDEBUG(48, *YYCURSOR);
+ ++YYCURSOR;
+ YYDEBUG(49, *YYCURSOR);
+ {
s->pos = cursor; s->line++;
goto std;
}
yy50:
- YYDEBUG(50, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy12;
+ YYDEBUG(50, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy12;
yy51:
- YYDEBUG(51, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 11) YYFILL(11);
- yych = *YYCURSOR;
- YYDEBUG(52, *YYCURSOR);
- if(yybm[0+yych] & 4) {
- goto yy51;
- }
- if(yych <= 'W') {
- if(yych <= 'F') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy56;
- if(yych >= ' ') goto yy56;
+ YYDEBUG(51, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 11) YYFILL(11);
+ yych = *YYCURSOR;
+ YYDEBUG(52, *YYCURSOR);
+ if (yybm[0+yych] & 4) {
+ goto yy51;
+ }
+ if (yych <= 'W') {
+ if (yych <= 'F') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy56;
+ if (yych >= ' ') goto yy56;
+ } else {
+ if (yych == 'D') goto yy61;
+ if (yych >= 'F') goto yy63;
+ }
+ } else {
+ if (yych <= 'M') {
+ if (yych == 'H') goto yy60;
+ if (yych >= 'M') goto yy59;
+ } else {
+ if (yych <= 'S') {
+ if (yych >= 'S') goto yy58;
} else {
- if(yych == 'D') goto yy61;
- if(yych >= 'F') goto yy63;
+ if (yych <= 'T') goto yy65;
+ if (yych >= 'W') goto yy62;
}
+ }
+ }
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'd') {
+ if (yych == 'Y') goto yy64;
+ if (yych >= 'd') goto yy61;
} else {
- if(yych <= 'M') {
- if(yych == 'H') goto yy60;
- if(yych >= 'M') goto yy59;
+ if (yych <= 'f') {
+ if (yych >= 'f') goto yy63;
} else {
- if(yych <= 'S') {
- if(yych >= 'S') goto yy58;
- } else {
- if(yych <= 'T') goto yy65;
- if(yych >= 'W') goto yy62;
- }
+ if (yych == 'h') goto yy60;
}
}
} else {
- if(yych <= 'l') {
- if(yych <= 'd') {
- if(yych == 'Y') goto yy64;
- if(yych >= 'd') goto yy61;
- } else {
- if(yych <= 'f') {
- if(yych >= 'f') goto yy63;
- } else {
- if(yych == 'h') goto yy60;
- }
- }
+ if (yych <= 't') {
+ if (yych <= 'm') goto yy59;
+ if (yych <= 'r') goto yy53;
+ if (yych <= 's') goto yy58;
+ goto yy65;
} else {
- if(yych <= 't') {
- if(yych <= 'm') goto yy59;
- if(yych <= 'r') goto yy53;
- if(yych <= 's') goto yy58;
- goto yy65;
+ if (yych <= 'w') {
+ if (yych >= 'w') goto yy62;
} else {
- if(yych <= 'w') {
- if(yych >= 'w') goto yy62;
- } else {
- if(yych == 'y') goto yy64;
- }
+ if (yych == 'y') goto yy64;
}
}
}
+ }
yy53:
- YYDEBUG(53, *YYCURSOR);
- YYCURSOR = YYMARKER;
- if(yyaccept <= 15) {
- if(yyaccept <= 7) {
- if(yyaccept <= 3) {
- if(yyaccept <= 1) {
- if(yyaccept <= 0) {
- goto yy3;
- } else {
- goto yy12;
- }
+ YYDEBUG(53, *YYCURSOR);
+ YYCURSOR = YYMARKER;
+ if (yyaccept <= 15) {
+ if (yyaccept <= 7) {
+ if (yyaccept <= 3) {
+ if (yyaccept <= 1) {
+ if (yyaccept <= 0) {
+ goto yy3;
} else {
- if(yyaccept <= 2) {
- goto yy46;
- } else {
- goto yy69;
- }
+ goto yy12;
}
} else {
- if(yyaccept <= 5) {
- if(yyaccept <= 4) {
- goto yy174;
- } else {
- goto yy276;
- }
+ if (yyaccept <= 2) {
+ goto yy46;
} else {
- if(yyaccept <= 6) {
- goto yy303;
- } else {
- goto yy308;
- }
+ goto yy69;
}
}
} else {
- if(yyaccept <= 11) {
- if(yyaccept <= 9) {
- if(yyaccept <= 8) {
- goto yy332;
- } else {
- goto yy402;
- }
+ if (yyaccept <= 5) {
+ if (yyaccept <= 4) {
+ goto yy174;
} else {
- if(yyaccept <= 10) {
- goto yy558;
- } else {
- goto yy681;
- }
+ goto yy276;
}
} else {
- if(yyaccept <= 13) {
- if(yyaccept <= 12) {
- goto yy696;
- } else {
- goto yy796;
- }
+ if (yyaccept <= 6) {
+ goto yy303;
} else {
- if(yyaccept <= 14) {
- goto yy844;
- } else {
- goto yy854;
- }
+ goto yy308;
}
}
}
} else {
- if(yyaccept <= 23) {
- if(yyaccept <= 19) {
- if(yyaccept <= 17) {
- if(yyaccept <= 16) {
- goto yy942;
- } else {
- goto yy962;
- }
+ if (yyaccept <= 11) {
+ if (yyaccept <= 9) {
+ if (yyaccept <= 8) {
+ goto yy332;
} else {
- if(yyaccept <= 18) {
- goto yy993;
- } else {
- goto yy1000;
- }
+ goto yy402;
}
} else {
- if(yyaccept <= 21) {
- if(yyaccept <= 20) {
- goto yy1027;
- } else {
- goto yy972;
- }
+ if (yyaccept <= 10) {
+ goto yy556;
} else {
- if(yyaccept <= 22) {
- goto yy660;
- } else {
- goto yy1152;
- }
+ goto yy679;
}
}
} else {
- if(yyaccept <= 27) {
- if(yyaccept <= 25) {
- if(yyaccept <= 24) {
- goto yy1021;
- } else {
- goto yy1243;
- }
+ if (yyaccept <= 13) {
+ if (yyaccept <= 12) {
+ goto yy694;
} else {
- if(yyaccept <= 26) {
- goto yy1251;
- } else {
- goto yy1306;
- }
+ goto yy799;
}
} else {
- if(yyaccept <= 29) {
- if(yyaccept <= 28) {
- goto yy1309;
- } else {
- goto yy1387;
- }
+ if (yyaccept <= 14) {
+ goto yy843;
} else {
- if(yyaccept <= 30) {
- goto yy1395;
- } else {
- goto yy1418;
- }
+ goto yy853;
}
}
}
}
-yy54:
- YYDEBUG(54, *YYCURSOR);
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- YYDEBUG(55, *YYCURSOR);
- if(yybm[0+yych] & 8) {
- goto yy54;
- }
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy51;
- goto yy53;
-yy56:
- YYDEBUG(56, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 11) YYFILL(11);
- yych = *YYCURSOR;
-yy57:
- YYDEBUG(57, *YYCURSOR);
- if(yych <= 'W') {
- if(yych <= 'F') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy56;
- if(yych <= 0x1F) goto yy53;
- goto yy56;
+ } else {
+ if (yyaccept <= 23) {
+ if (yyaccept <= 19) {
+ if (yyaccept <= 17) {
+ if (yyaccept <= 16) {
+ goto yy947;
+ } else {
+ goto yy967;
+ }
} else {
- if(yych == 'D') goto yy61;
- if(yych <= 'E') goto yy53;
- goto yy63;
+ if (yyaccept <= 18) {
+ goto yy998;
+ } else {
+ goto yy1005;
+ }
}
} else {
- if(yych <= 'M') {
- if(yych == 'H') goto yy60;
- if(yych <= 'L') goto yy53;
- goto yy59;
+ if (yyaccept <= 21) {
+ if (yyaccept <= 20) {
+ goto yy1032;
+ } else {
+ goto yy977;
+ }
} else {
- if(yych <= 'S') {
- if(yych <= 'R') goto yy53;
+ if (yyaccept <= 22) {
+ goto yy658;
} else {
- if(yych <= 'T') goto yy65;
- if(yych <= 'V') goto yy53;
- goto yy62;
+ goto yy1157;
}
}
}
} else {
- if(yych <= 'l') {
- if(yych <= 'd') {
- if(yych == 'Y') goto yy64;
- if(yych <= 'c') goto yy53;
- goto yy61;
+ if (yyaccept <= 27) {
+ if (yyaccept <= 25) {
+ if (yyaccept <= 24) {
+ goto yy1026;
+ } else {
+ goto yy1248;
+ }
} else {
- if(yych <= 'f') {
- if(yych <= 'e') goto yy53;
- goto yy63;
+ if (yyaccept <= 26) {
+ goto yy1256;
} else {
- if(yych == 'h') goto yy60;
- goto yy53;
+ goto yy1311;
}
}
} else {
- if(yych <= 't') {
- if(yych <= 'm') goto yy59;
- if(yych <= 'r') goto yy53;
- if(yych >= 't') goto yy65;
+ if (yyaccept <= 29) {
+ if (yyaccept <= 28) {
+ goto yy1314;
+ } else {
+ goto yy1392;
+ }
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy53;
- goto yy62;
+ if (yyaccept <= 30) {
+ goto yy1400;
} else {
- if(yych == 'y') goto yy64;
- goto yy53;
+ goto yy1423;
}
}
}
}
-yy58:
- YYDEBUG(58, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= 'D') {
- if(yych == 'A') goto yy123;
- goto yy53;
+ }
+yy54:
+ YYDEBUG(54, *YYCURSOR);
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ YYDEBUG(55, *YYCURSOR);
+ if (yybm[0+yych] & 8) {
+ goto yy54;
+ }
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy51;
+ goto yy53;
+yy56:
+ YYDEBUG(56, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 11) YYFILL(11);
+ yych = *YYCURSOR;
+yy57:
+ YYDEBUG(57, *YYCURSOR);
+ if (yych <= 'W') {
+ if (yych <= 'F') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy56;
+ if (yych <= 0x1F) goto yy53;
+ goto yy56;
} else {
- if(yych <= 'E') goto yy124;
- if(yych <= 'T') goto yy53;
- goto yy122;
+ if (yych == 'D') goto yy61;
+ if (yych <= 'E') goto yy53;
+ goto yy63;
}
} else {
- if(yych <= 'd') {
- if(yych == 'a') goto yy123;
- goto yy53;
+ if (yych <= 'M') {
+ if (yych == 'H') goto yy60;
+ if (yych <= 'L') goto yy53;
+ goto yy59;
} else {
- if(yych <= 'e') goto yy124;
- if(yych == 'u') goto yy122;
- goto yy53;
+ if (yych <= 'S') {
+ if (yych <= 'R') goto yy53;
+ } else {
+ if (yych <= 'T') goto yy65;
+ if (yych <= 'V') goto yy53;
+ goto yy62;
+ }
}
}
-yy59:
- YYDEBUG(59, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych == 'I') goto yy114;
- if(yych <= 'N') goto yy53;
- goto yy113;
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'd') {
+ if (yych == 'Y') goto yy64;
+ if (yych <= 'c') goto yy53;
+ goto yy61;
+ } else {
+ if (yych <= 'f') {
+ if (yych <= 'e') goto yy53;
+ goto yy63;
+ } else {
+ if (yych == 'h') goto yy60;
+ goto yy53;
+ }
+ }
} else {
- if(yych <= 'i') {
- if(yych <= 'h') goto yy53;
- goto yy114;
+ if (yych <= 't') {
+ if (yych <= 'm') goto yy59;
+ if (yych <= 'r') goto yy53;
+ if (yych >= 't') goto yy65;
} else {
- if(yych == 'o') goto yy113;
- goto yy53;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy53;
+ goto yy62;
+ } else {
+ if (yych == 'y') goto yy64;
+ goto yy53;
+ }
}
}
+ }
+yy58:
+ YYDEBUG(58, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= 'D') {
+ if (yych == 'A') goto yy123;
+ goto yy53;
+ } else {
+ if (yych <= 'E') goto yy124;
+ if (yych <= 'T') goto yy53;
+ goto yy122;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych == 'a') goto yy123;
+ goto yy53;
+ } else {
+ if (yych <= 'e') goto yy124;
+ if (yych == 'u') goto yy122;
+ goto yy53;
+ }
+ }
+yy59:
+ YYDEBUG(59, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych == 'I') goto yy114;
+ if (yych <= 'N') goto yy53;
+ goto yy113;
+ } else {
+ if (yych <= 'i') {
+ if (yych <= 'h') goto yy53;
+ goto yy114;
+ } else {
+ if (yych == 'o') goto yy113;
+ goto yy53;
+ }
+ }
yy60:
- YYDEBUG(60, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'O') goto yy111;
- if(yych == 'o') goto yy111;
- goto yy53;
+ YYDEBUG(60, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'O') goto yy111;
+ if (yych == 'o') goto yy111;
+ goto yy53;
yy61:
- YYDEBUG(61, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy110;
- if(yych == 'a') goto yy110;
- goto yy53;
+ YYDEBUG(61, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy110;
+ if (yych == 'a') goto yy110;
+ goto yy53;
yy62:
- YYDEBUG(62, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy98;
- if(yych == 'e') goto yy98;
- goto yy53;
+ YYDEBUG(62, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy98;
+ if (yych == 'e') goto yy98;
+ goto yy53;
yy63:
- YYDEBUG(63, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych == 'O') goto yy83;
- if(yych <= 'Q') goto yy53;
- goto yy82;
+ YYDEBUG(63, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych == 'O') goto yy83;
+ if (yych <= 'Q') goto yy53;
+ goto yy82;
+ } else {
+ if (yych <= 'o') {
+ if (yych <= 'n') goto yy53;
+ goto yy83;
} else {
- if(yych <= 'o') {
- if(yych <= 'n') goto yy53;
- goto yy83;
- } else {
- if(yych == 'r') goto yy82;
- goto yy53;
- }
+ if (yych == 'r') goto yy82;
+ goto yy53;
}
+ }
yy64:
- YYDEBUG(64, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy79;
- if(yych == 'e') goto yy79;
- goto yy53;
+ YYDEBUG(64, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy79;
+ if (yych == 'e') goto yy79;
+ goto yy53;
yy65:
- YYDEBUG(65, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'H') goto yy66;
- if(yych <= 'T') goto yy53;
- goto yy67;
+ YYDEBUG(65, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'H') goto yy66;
+ if (yych <= 'T') goto yy53;
+ goto yy67;
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'g') goto yy53;
} else {
- if(yych <= 'h') {
- if(yych <= 'g') goto yy53;
- } else {
- if(yych == 'u') goto yy67;
- goto yy53;
- }
+ if (yych == 'u') goto yy67;
+ goto yy53;
}
+ }
yy66:
- YYDEBUG(66, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'U') goto yy74;
- if(yych == 'u') goto yy74;
- goto yy53;
+ YYDEBUG(66, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'U') goto yy74;
+ if (yych == 'u') goto yy74;
+ goto yy53;
yy67:
- YYDEBUG(67, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy68;
- if(yych != 'e') goto yy53;
+ YYDEBUG(67, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy68;
+ if (yych != 'e') goto yy53;
yy68:
- YYDEBUG(68, *YYCURSOR);
- yyaccept = 3;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'S') goto yy70;
- if(yych == 's') goto yy70;
+ YYDEBUG(68, *YYCURSOR);
+ yyaccept = 3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'S') goto yy70;
+ if (yych == 's') goto yy70;
yy69:
- YYDEBUG(69, *YYCURSOR);
- {
+ YYDEBUG(69, *YYCURSOR);
+ {
timelib_ull i;
DEBUG_OUTPUT("relative");
TIMELIB_INIT;
@@ -2647,919 +2646,919 @@ yy69:
while(*ptr) {
i = timelib_get_unsigned_nr((char **) &ptr, 24);
timelib_eat_spaces((char **) &ptr);
- timelib_set_relative((char **) &ptr, i, 0, s);
+ timelib_set_relative((char **) &ptr, i, 1, s);
}
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
yy70:
- YYDEBUG(70, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'D') goto yy71;
- if(yych != 'd') goto yy53;
+ YYDEBUG(70, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'D') goto yy71;
+ if (yych != 'd') goto yy53;
yy71:
- YYDEBUG(71, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy72;
- if(yych != 'a') goto yy53;
+ YYDEBUG(71, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy72;
+ if (yych != 'a') goto yy53;
yy72:
- YYDEBUG(72, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy73;
- if(yych != 'y') goto yy53;
+ YYDEBUG(72, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy73;
+ if (yych != 'y') goto yy53;
yy73:
- YYDEBUG(73, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy69;
+ YYDEBUG(73, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy69;
yy74:
- YYDEBUG(74, *YYCURSOR);
- yyaccept = 3;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'R') goto yy75;
- if(yych != 'r') goto yy69;
+ YYDEBUG(74, *YYCURSOR);
+ yyaccept = 3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'R') goto yy75;
+ if (yych != 'r') goto yy69;
yy75:
- YYDEBUG(75, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy76;
- if(yych != 's') goto yy53;
+ YYDEBUG(75, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy76;
+ if (yych != 's') goto yy53;
yy76:
- YYDEBUG(76, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'D') goto yy77;
- if(yych != 'd') goto yy53;
+ YYDEBUG(76, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'D') goto yy77;
+ if (yych != 'd') goto yy53;
yy77:
- YYDEBUG(77, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy78;
- if(yych != 'a') goto yy53;
+ YYDEBUG(77, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy78;
+ if (yych != 'a') goto yy53;
yy78:
- YYDEBUG(78, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy73;
- if(yych == 'y') goto yy73;
- goto yy53;
+ YYDEBUG(78, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy73;
+ if (yych == 'y') goto yy73;
+ goto yy53;
yy79:
- YYDEBUG(79, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy80;
- if(yych != 'a') goto yy53;
+ YYDEBUG(79, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy80;
+ if (yych != 'a') goto yy53;
yy80:
- YYDEBUG(80, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy81;
- if(yych != 'r') goto yy53;
+ YYDEBUG(80, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy81;
+ if (yych != 'r') goto yy53;
yy81:
- YYDEBUG(81, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy73;
- if(yych == 's') goto yy73;
- goto yy69;
+ YYDEBUG(81, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy73;
+ if (yych == 's') goto yy73;
+ goto yy69;
yy82:
- YYDEBUG(82, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'I') goto yy95;
- if(yych == 'i') goto yy95;
- goto yy53;
+ YYDEBUG(82, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'I') goto yy95;
+ if (yych == 'i') goto yy95;
+ goto yy53;
yy83:
- YYDEBUG(83, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy84;
- if(yych != 'r') goto yy53;
+ YYDEBUG(83, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy84;
+ if (yych != 'r') goto yy53;
yy84:
- YYDEBUG(84, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy85;
- if(yych != 't') goto yy53;
+ YYDEBUG(84, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy85;
+ if (yych != 't') goto yy53;
yy85:
- YYDEBUG(85, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych == 'H') goto yy87;
- if(yych <= 'M') goto yy53;
+ YYDEBUG(85, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych == 'H') goto yy87;
+ if (yych <= 'M') goto yy53;
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'g') goto yy53;
+ goto yy87;
} else {
- if(yych <= 'h') {
- if(yych <= 'g') goto yy53;
- goto yy87;
- } else {
- if(yych != 'n') goto yy53;
- }
+ if (yych != 'n') goto yy53;
}
- YYDEBUG(86, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'I') goto yy92;
- if(yych == 'i') goto yy92;
- goto yy53;
+ }
+ YYDEBUG(86, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'I') goto yy92;
+ if (yych == 'i') goto yy92;
+ goto yy53;
yy87:
- YYDEBUG(87, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy88;
- if(yych != 'n') goto yy53;
+ YYDEBUG(87, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy88;
+ if (yych != 'n') goto yy53;
yy88:
- YYDEBUG(88, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'I') goto yy89;
- if(yych != 'i') goto yy53;
+ YYDEBUG(88, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'I') goto yy89;
+ if (yych != 'i') goto yy53;
yy89:
- YYDEBUG(89, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'G') goto yy90;
- if(yych != 'g') goto yy53;
+ YYDEBUG(89, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'G') goto yy90;
+ if (yych != 'g') goto yy53;
yy90:
- YYDEBUG(90, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'H') goto yy91;
- if(yych != 'h') goto yy53;
+ YYDEBUG(90, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'H') goto yy91;
+ if (yych != 'h') goto yy53;
yy91:
- YYDEBUG(91, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy81;
- if(yych == 't') goto yy81;
- goto yy53;
+ YYDEBUG(91, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy81;
+ if (yych == 't') goto yy81;
+ goto yy53;
yy92:
- YYDEBUG(92, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'G') goto yy93;
- if(yych != 'g') goto yy53;
+ YYDEBUG(92, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'G') goto yy93;
+ if (yych != 'g') goto yy53;
yy93:
- YYDEBUG(93, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'H') goto yy94;
- if(yych != 'h') goto yy53;
+ YYDEBUG(93, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'H') goto yy94;
+ if (yych != 'h') goto yy53;
yy94:
- YYDEBUG(94, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy81;
- if(yych == 't') goto yy81;
- goto yy53;
+ YYDEBUG(94, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy81;
+ if (yych == 't') goto yy81;
+ goto yy53;
yy95:
- YYDEBUG(95, *YYCURSOR);
- yyaccept = 3;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'D') goto yy96;
- if(yych != 'd') goto yy69;
+ YYDEBUG(95, *YYCURSOR);
+ yyaccept = 3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'D') goto yy96;
+ if (yych != 'd') goto yy69;
yy96:
- YYDEBUG(96, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy97;
- if(yych != 'a') goto yy53;
+ YYDEBUG(96, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy97;
+ if (yych != 'a') goto yy53;
yy97:
- YYDEBUG(97, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy73;
- if(yych == 'y') goto yy73;
- goto yy53;
+ YYDEBUG(97, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy73;
+ if (yych == 'y') goto yy73;
+ goto yy53;
yy98:
- YYDEBUG(98, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= 'C') goto yy53;
- if(yych <= 'D') goto yy100;
- } else {
- if(yych <= 'c') goto yy53;
- if(yych <= 'd') goto yy100;
- if(yych >= 'f') goto yy53;
- }
- YYDEBUG(99, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'K') goto yy106;
- if(yych == 'k') goto yy106;
- goto yy53;
+ YYDEBUG(98, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= 'C') goto yy53;
+ if (yych <= 'D') goto yy100;
+ } else {
+ if (yych <= 'c') goto yy53;
+ if (yych <= 'd') goto yy100;
+ if (yych >= 'f') goto yy53;
+ }
+ YYDEBUG(99, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'K') goto yy106;
+ if (yych == 'k') goto yy106;
+ goto yy53;
yy100:
- YYDEBUG(100, *YYCURSOR);
- yyaccept = 3;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'N') goto yy101;
- if(yych != 'n') goto yy69;
+ YYDEBUG(100, *YYCURSOR);
+ yyaccept = 3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'N') goto yy101;
+ if (yych != 'n') goto yy69;
yy101:
- YYDEBUG(101, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy102;
- if(yych != 'e') goto yy53;
+ YYDEBUG(101, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy102;
+ if (yych != 'e') goto yy53;
yy102:
- YYDEBUG(102, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy103;
- if(yych != 's') goto yy53;
+ YYDEBUG(102, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy103;
+ if (yych != 's') goto yy53;
yy103:
- YYDEBUG(103, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'D') goto yy104;
- if(yych != 'd') goto yy53;
+ YYDEBUG(103, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'D') goto yy104;
+ if (yych != 'd') goto yy53;
yy104:
- YYDEBUG(104, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy105;
- if(yych != 'a') goto yy53;
+ YYDEBUG(104, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy105;
+ if (yych != 'a') goto yy53;
yy105:
- YYDEBUG(105, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy73;
- if(yych == 'y') goto yy73;
- goto yy53;
+ YYDEBUG(105, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy73;
+ if (yych == 'y') goto yy73;
+ goto yy53;
yy106:
- YYDEBUG(106, *YYCURSOR);
- yyaccept = 3;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych == 'D') goto yy107;
- if(yych <= 'R') goto yy69;
- goto yy73;
+ YYDEBUG(106, *YYCURSOR);
+ yyaccept = 3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych == 'D') goto yy107;
+ if (yych <= 'R') goto yy69;
+ goto yy73;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'c') goto yy69;
} else {
- if(yych <= 'd') {
- if(yych <= 'c') goto yy69;
- } else {
- if(yych == 's') goto yy73;
- goto yy69;
- }
+ if (yych == 's') goto yy73;
+ goto yy69;
}
+ }
yy107:
- YYDEBUG(107, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy108;
- if(yych != 'a') goto yy53;
+ YYDEBUG(107, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy108;
+ if (yych != 'a') goto yy53;
yy108:
- YYDEBUG(108, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy109;
- if(yych != 'y') goto yy53;
+ YYDEBUG(108, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy109;
+ if (yych != 'y') goto yy53;
yy109:
- YYDEBUG(109, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy73;
- if(yych == 's') goto yy73;
- goto yy69;
+ YYDEBUG(109, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy73;
+ if (yych == 's') goto yy73;
+ goto yy69;
yy110:
- YYDEBUG(110, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy81;
- if(yych == 'y') goto yy81;
- goto yy53;
+ YYDEBUG(110, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy81;
+ if (yych == 'y') goto yy81;
+ goto yy53;
yy111:
- YYDEBUG(111, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'U') goto yy112;
- if(yych != 'u') goto yy53;
+ YYDEBUG(111, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'U') goto yy112;
+ if (yych != 'u') goto yy53;
yy112:
- YYDEBUG(112, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy81;
- if(yych == 'r') goto yy81;
- goto yy53;
+ YYDEBUG(112, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy81;
+ if (yych == 'r') goto yy81;
+ goto yy53;
yy113:
- YYDEBUG(113, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy118;
- if(yych == 'n') goto yy118;
- goto yy53;
+ YYDEBUG(113, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy118;
+ if (yych == 'n') goto yy118;
+ goto yy53;
yy114:
- YYDEBUG(114, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy115;
- if(yych != 'n') goto yy53;
+ YYDEBUG(114, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy115;
+ if (yych != 'n') goto yy53;
yy115:
- YYDEBUG(115, *YYCURSOR);
- yyaccept = 3;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'U') {
- if(yych == 'S') goto yy73;
- if(yych <= 'T') goto yy69;
+ YYDEBUG(115, *YYCURSOR);
+ yyaccept = 3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'U') {
+ if (yych == 'S') goto yy73;
+ if (yych <= 'T') goto yy69;
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'r') goto yy69;
+ goto yy73;
} else {
- if(yych <= 's') {
- if(yych <= 'r') goto yy69;
- goto yy73;
- } else {
- if(yych != 'u') goto yy69;
- }
+ if (yych != 'u') goto yy69;
}
- YYDEBUG(116, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy117;
- if(yych != 't') goto yy53;
+ }
+ YYDEBUG(116, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy117;
+ if (yych != 't') goto yy53;
yy117:
- YYDEBUG(117, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy81;
- if(yych == 'e') goto yy81;
- goto yy53;
+ YYDEBUG(117, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy81;
+ if (yych == 'e') goto yy81;
+ goto yy53;
yy118:
- YYDEBUG(118, *YYCURSOR);
- yyaccept = 3;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych == 'D') goto yy119;
- if(yych <= 'S') goto yy69;
- goto yy120;
+ YYDEBUG(118, *YYCURSOR);
+ yyaccept = 3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych == 'D') goto yy119;
+ if (yych <= 'S') goto yy69;
+ goto yy120;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'c') goto yy69;
} else {
- if(yych <= 'd') {
- if(yych <= 'c') goto yy69;
- } else {
- if(yych == 't') goto yy120;
- goto yy69;
- }
+ if (yych == 't') goto yy120;
+ goto yy69;
}
+ }
yy119:
- YYDEBUG(119, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy121;
- if(yych == 'a') goto yy121;
- goto yy53;
+ YYDEBUG(119, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy121;
+ if (yych == 'a') goto yy121;
+ goto yy53;
yy120:
- YYDEBUG(120, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'H') goto yy81;
- if(yych == 'h') goto yy81;
- goto yy53;
+ YYDEBUG(120, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'H') goto yy81;
+ if (yych == 'h') goto yy81;
+ goto yy53;
yy121:
- YYDEBUG(121, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy73;
- if(yych == 'y') goto yy73;
- goto yy53;
+ YYDEBUG(121, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy73;
+ if (yych == 'y') goto yy73;
+ goto yy53;
yy122:
- YYDEBUG(122, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy133;
- if(yych == 'n') goto yy133;
- goto yy53;
+ YYDEBUG(122, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy133;
+ if (yych == 'n') goto yy133;
+ goto yy53;
yy123:
- YYDEBUG(123, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy128;
- if(yych == 't') goto yy128;
- goto yy53;
+ YYDEBUG(123, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy128;
+ if (yych == 't') goto yy128;
+ goto yy53;
yy124:
- YYDEBUG(124, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy125;
- if(yych != 'c') goto yy53;
+ YYDEBUG(124, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy125;
+ if (yych != 'c') goto yy53;
yy125:
- YYDEBUG(125, *YYCURSOR);
- yyaccept = 3;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych == 'O') goto yy126;
- if(yych <= 'R') goto yy69;
- goto yy73;
+ YYDEBUG(125, *YYCURSOR);
+ yyaccept = 3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych == 'O') goto yy126;
+ if (yych <= 'R') goto yy69;
+ goto yy73;
+ } else {
+ if (yych <= 'o') {
+ if (yych <= 'n') goto yy69;
} else {
- if(yych <= 'o') {
- if(yych <= 'n') goto yy69;
- } else {
- if(yych == 's') goto yy73;
- goto yy69;
- }
+ if (yych == 's') goto yy73;
+ goto yy69;
}
+ }
yy126:
- YYDEBUG(126, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy127;
- if(yych != 'n') goto yy53;
+ YYDEBUG(126, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy127;
+ if (yych != 'n') goto yy53;
yy127:
- YYDEBUG(127, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'D') goto yy81;
- if(yych == 'd') goto yy81;
- goto yy53;
+ YYDEBUG(127, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'D') goto yy81;
+ if (yych == 'd') goto yy81;
+ goto yy53;
yy128:
- YYDEBUG(128, *YYCURSOR);
- yyaccept = 3;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'U') goto yy129;
- if(yych != 'u') goto yy69;
+ YYDEBUG(128, *YYCURSOR);
+ yyaccept = 3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'U') goto yy129;
+ if (yych != 'u') goto yy69;
yy129:
- YYDEBUG(129, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy130;
- if(yych != 'r') goto yy53;
+ YYDEBUG(129, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy130;
+ if (yych != 'r') goto yy53;
yy130:
- YYDEBUG(130, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'D') goto yy131;
- if(yych != 'd') goto yy53;
+ YYDEBUG(130, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'D') goto yy131;
+ if (yych != 'd') goto yy53;
yy131:
- YYDEBUG(131, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy132;
- if(yych != 'a') goto yy53;
+ YYDEBUG(131, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy132;
+ if (yych != 'a') goto yy53;
yy132:
- YYDEBUG(132, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy73;
- if(yych == 'y') goto yy73;
- goto yy53;
+ YYDEBUG(132, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy73;
+ if (yych == 'y') goto yy73;
+ goto yy53;
yy133:
- YYDEBUG(133, *YYCURSOR);
- yyaccept = 3;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'D') goto yy134;
- if(yych != 'd') goto yy69;
+ YYDEBUG(133, *YYCURSOR);
+ yyaccept = 3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'D') goto yy134;
+ if (yych != 'd') goto yy69;
yy134:
- YYDEBUG(134, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy135;
- if(yych != 'a') goto yy53;
+ YYDEBUG(134, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy135;
+ if (yych != 'a') goto yy53;
yy135:
- YYDEBUG(135, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy73;
- if(yych == 'y') goto yy73;
- goto yy53;
+ YYDEBUG(135, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy73;
+ if (yych == 'y') goto yy73;
+ goto yy53;
yy136:
- YYDEBUG(136, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy3;
+ YYDEBUG(136, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy3;
yy137:
- YYDEBUG(137, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- if(yych >= '{') goto yy3;
- }
+ YYDEBUG(137, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ if (yych >= '{') goto yy3;
+ }
yy138:
- YYDEBUG(138, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- if(yych >= '{') goto yy3;
- }
+ YYDEBUG(138, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ if (yych >= '{') goto yy3;
+ }
yy139:
- YYDEBUG(139, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- if(yych >= '{') goto yy3;
- }
+ YYDEBUG(139, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ if (yych >= '{') goto yy3;
+ }
yy140:
- YYDEBUG(140, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- if(yych >= '{') goto yy3;
- }
-yy141:
- YYDEBUG(141, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == ')') goto yy136;
+ YYDEBUG(140, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
goto yy3;
+ } else {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ if (yych >= '{') goto yy3;
+ }
+yy141:
+ YYDEBUG(141, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == ')') goto yy136;
+ goto yy3;
yy142:
- YYDEBUG(142, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych == '/') goto yy144;
- goto yy3;
- }
+ YYDEBUG(142, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych == '/') goto yy144;
+ goto yy3;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '^') goto yy3;
+ goto yy144;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych >= '{') goto yy3;
- }
+ if (yych <= '`') goto yy3;
+ if (yych >= '{') goto yy3;
}
+ }
yy143:
- YYDEBUG(143, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych != '/') goto yy3;
- }
+ YYDEBUG(143, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '^') goto yy3;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych != '/') goto yy3;
}
-yy144:
- YYDEBUG(144, *YYCURSOR);
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yych <= '@') goto yy53;
- if(yych >= '[') goto yy53;
- YYDEBUG(145, *YYCURSOR);
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 16) {
- goto yy146;
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '^') goto yy3;
+ } else {
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
- goto yy53;
+ }
+yy144:
+ YYDEBUG(144, *YYCURSOR);
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yych <= '@') goto yy53;
+ if (yych >= '[') goto yy53;
+ YYDEBUG(145, *YYCURSOR);
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yybm[0+yych] & 16) {
+ goto yy146;
+ }
+ goto yy53;
yy146:
- YYDEBUG(146, *YYCURSOR);
- yyaccept = 0;
- YYMARKER = ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- YYDEBUG(147, *YYCURSOR);
- if(yybm[0+yych] & 16) {
- goto yy146;
- }
- if(yych == '/') goto yy144;
- if(yych == '_') goto yy144;
- goto yy3;
+ YYDEBUG(146, *YYCURSOR);
+ yyaccept = 0;
+ YYMARKER = ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ YYDEBUG(147, *YYCURSOR);
+ if (yybm[0+yych] & 16) {
+ goto yy146;
+ }
+ if (yych == '/') goto yy144;
+ if (yych == '_') goto yy144;
+ goto yy3;
yy148:
- YYDEBUG(148, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych == '/') goto yy144;
- goto yy3;
- }
+ YYDEBUG(148, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych == '/') goto yy144;
+ goto yy3;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '^') goto yy3;
+ goto yy144;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych >= '{') goto yy3;
- }
+ if (yych <= '`') goto yy3;
+ if (yych >= '{') goto yy3;
}
+ }
yy149:
- YYDEBUG(149, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych == '/') goto yy144;
- goto yy3;
- }
+ YYDEBUG(149, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych == '/') goto yy144;
+ goto yy3;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '^') goto yy3;
+ goto yy144;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych >= '{') goto yy3;
- }
+ if (yych <= '`') goto yy3;
+ if (yych >= '{') goto yy3;
}
+ }
yy150:
- YYDEBUG(150, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == ')') goto yy136;
- if(yych <= '.') goto yy3;
+ YYDEBUG(150, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == ')') goto yy136;
+ if (yych <= '.') goto yy3;
+ goto yy144;
+ } else {
+ if (yych <= '_') {
+ if (yych <= '^') goto yy3;
goto yy144;
} else {
- if(yych <= '_') {
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych >= '{') goto yy3;
- }
+ if (yych <= '`') goto yy3;
+ if (yych >= '{') goto yy3;
}
+ }
yy151:
- YYDEBUG(151, *YYCURSOR);
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
+ YYDEBUG(151, *YYCURSOR);
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
yy152:
- YYDEBUG(152, *YYCURSOR);
- if(yych <= '^') {
- if(yych == '/') goto yy144;
- goto yy53;
+ YYDEBUG(152, *YYCURSOR);
+ if (yych <= '^') {
+ if (yych == '/') goto yy144;
+ goto yy53;
+ } else {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy53;
+ if (yych <= 'z') goto yy151;
+ goto yy53;
+ }
+yy153:
+ YYDEBUG(153, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
+ }
+yy154:
+ YYDEBUG(154, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy53;
- if(yych <= 'z') goto yy151;
- goto yy53;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy138;
}
-yy153:
- YYDEBUG(153, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
} else {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy137;
+ if (yych <= 'e') goto yy155;
+ if (yych <= 'z') goto yy138;
goto yy3;
}
-yy154:
- YYDEBUG(154, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy138;
- }
+ }
+yy155:
+ YYDEBUG(155, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'V') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'e') goto yy155;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'U') goto yy139;
}
-yy155:
- YYDEBUG(155, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'V') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'U') goto yy139;
- }
+ } else {
+ if (yych <= 'u') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
} else {
- if(yych <= 'u') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'v') goto yy156;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= 'v') goto yy156;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
+ }
yy156:
- YYDEBUG(156, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'I') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'H') goto yy140;
- }
+ YYDEBUG(156, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'I') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'h') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'i') goto yy157;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'H') goto yy140;
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'i') goto yy157;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy157:
- YYDEBUG(157, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'N') goto yy141;
- }
+ YYDEBUG(157, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'n') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'o') goto yy158;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'N') goto yy141;
}
-yy158:
- YYDEBUG(158, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych == ')') goto yy136;
- goto yy3;
+ } else {
+ if (yych <= 'n') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
} else {
- if(yych <= 'U') goto yy159;
- if(yych != 'u') goto yy3;
+ if (yych <= 'o') goto yy158;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
+yy158:
+ YYDEBUG(158, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'U') goto yy159;
+ if (yych != 'u') goto yy3;
+ }
yy159:
- YYDEBUG(159, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy160;
- if(yych != 's') goto yy53;
+ YYDEBUG(159, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy160;
+ if (yych != 's') goto yy53;
yy160:
- YYDEBUG(160, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 0x09) goto yy161;
- if(yych != ' ') goto yy53;
+ YYDEBUG(160, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '\t') goto yy161;
+ if (yych != ' ') goto yy53;
yy161:
- YYDEBUG(161, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 11) YYFILL(11);
- yych = *YYCURSOR;
- YYDEBUG(162, *YYCURSOR);
- if(yych <= 'W') {
- if(yych <= 'F') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy161;
- if(yych <= 0x1F) goto yy53;
- goto yy161;
- } else {
- if(yych == 'D') goto yy166;
- if(yych <= 'E') goto yy53;
- goto yy168;
- }
+ YYDEBUG(161, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 11) YYFILL(11);
+ yych = *YYCURSOR;
+ YYDEBUG(162, *YYCURSOR);
+ if (yych <= 'W') {
+ if (yych <= 'F') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy161;
+ if (yych <= 0x1F) goto yy53;
+ goto yy161;
} else {
- if(yych <= 'M') {
- if(yych == 'H') goto yy165;
- if(yych <= 'L') goto yy53;
- goto yy164;
- } else {
- if(yych <= 'S') {
- if(yych <= 'R') goto yy53;
- } else {
- if(yych <= 'T') goto yy170;
- if(yych <= 'V') goto yy53;
- goto yy167;
- }
- }
+ if (yych == 'D') goto yy166;
+ if (yych <= 'E') goto yy53;
+ goto yy168;
}
} else {
- if(yych <= 'l') {
- if(yych <= 'd') {
- if(yych == 'Y') goto yy169;
- if(yych <= 'c') goto yy53;
- goto yy166;
- } else {
- if(yych <= 'f') {
- if(yych <= 'e') goto yy53;
- goto yy168;
- } else {
- if(yych == 'h') goto yy165;
- goto yy53;
- }
- }
+ if (yych <= 'M') {
+ if (yych == 'H') goto yy165;
+ if (yych <= 'L') goto yy53;
+ goto yy164;
} else {
- if(yych <= 't') {
- if(yych <= 'm') goto yy164;
- if(yych <= 'r') goto yy53;
- if(yych >= 't') goto yy170;
+ if (yych <= 'S') {
+ if (yych <= 'R') goto yy53;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy53;
- goto yy167;
- } else {
- if(yych == 'y') goto yy169;
- goto yy53;
- }
+ if (yych <= 'T') goto yy170;
+ if (yych <= 'V') goto yy53;
+ goto yy167;
}
}
}
- YYDEBUG(163, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= 'D') {
- if(yych == 'A') goto yy228;
- goto yy53;
- } else {
- if(yych <= 'E') goto yy229;
- if(yych <= 'T') goto yy53;
- goto yy227;
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'd') {
+ if (yych == 'Y') goto yy169;
+ if (yych <= 'c') goto yy53;
+ goto yy166;
+ } else {
+ if (yych <= 'f') {
+ if (yych <= 'e') goto yy53;
+ goto yy168;
+ } else {
+ if (yych == 'h') goto yy165;
+ goto yy53;
+ }
}
} else {
- if(yych <= 'd') {
- if(yych == 'a') goto yy228;
- goto yy53;
+ if (yych <= 't') {
+ if (yych <= 'm') goto yy164;
+ if (yych <= 'r') goto yy53;
+ if (yych >= 't') goto yy170;
} else {
- if(yych <= 'e') goto yy229;
- if(yych == 'u') goto yy227;
- goto yy53;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy53;
+ goto yy167;
+ } else {
+ if (yych == 'y') goto yy169;
+ goto yy53;
+ }
}
}
+ }
+ YYDEBUG(163, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= 'D') {
+ if (yych == 'A') goto yy228;
+ goto yy53;
+ } else {
+ if (yych <= 'E') goto yy229;
+ if (yych <= 'T') goto yy53;
+ goto yy227;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych == 'a') goto yy228;
+ goto yy53;
+ } else {
+ if (yych <= 'e') goto yy229;
+ if (yych == 'u') goto yy227;
+ goto yy53;
+ }
+ }
yy164:
- YYDEBUG(164, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych == 'I') goto yy219;
- if(yych <= 'N') goto yy53;
- goto yy218;
- } else {
- if(yych <= 'i') {
- if(yych <= 'h') goto yy53;
- goto yy219;
- } else {
- if(yych == 'o') goto yy218;
- goto yy53;
- }
+ YYDEBUG(164, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych == 'I') goto yy219;
+ if (yych <= 'N') goto yy53;
+ goto yy218;
+ } else {
+ if (yych <= 'i') {
+ if (yych <= 'h') goto yy53;
+ goto yy219;
+ } else {
+ if (yych == 'o') goto yy218;
+ goto yy53;
}
+ }
yy165:
- YYDEBUG(165, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'O') goto yy216;
- if(yych == 'o') goto yy216;
- goto yy53;
+ YYDEBUG(165, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'O') goto yy216;
+ if (yych == 'o') goto yy216;
+ goto yy53;
yy166:
- YYDEBUG(166, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy215;
- if(yych == 'a') goto yy215;
- goto yy53;
+ YYDEBUG(166, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy215;
+ if (yych == 'a') goto yy215;
+ goto yy53;
yy167:
- YYDEBUG(167, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy203;
- if(yych == 'e') goto yy203;
- goto yy53;
+ YYDEBUG(167, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy203;
+ if (yych == 'e') goto yy203;
+ goto yy53;
yy168:
- YYDEBUG(168, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych == 'O') goto yy188;
- if(yych <= 'Q') goto yy53;
- goto yy187;
- } else {
- if(yych <= 'o') {
- if(yych <= 'n') goto yy53;
- goto yy188;
- } else {
- if(yych == 'r') goto yy187;
- goto yy53;
- }
+ YYDEBUG(168, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych == 'O') goto yy188;
+ if (yych <= 'Q') goto yy53;
+ goto yy187;
+ } else {
+ if (yych <= 'o') {
+ if (yych <= 'n') goto yy53;
+ goto yy188;
+ } else {
+ if (yych == 'r') goto yy187;
+ goto yy53;
}
+ }
yy169:
- YYDEBUG(169, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy184;
- if(yych == 'e') goto yy184;
- goto yy53;
+ YYDEBUG(169, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy184;
+ if (yych == 'e') goto yy184;
+ goto yy53;
yy170:
- YYDEBUG(170, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'H') goto yy171;
- if(yych <= 'T') goto yy53;
- goto yy172;
+ YYDEBUG(170, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'H') goto yy171;
+ if (yych <= 'T') goto yy53;
+ goto yy172;
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'g') goto yy53;
} else {
- if(yych <= 'h') {
- if(yych <= 'g') goto yy53;
- } else {
- if(yych == 'u') goto yy172;
- goto yy53;
- }
+ if (yych == 'u') goto yy172;
+ goto yy53;
}
+ }
yy171:
- YYDEBUG(171, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'U') goto yy179;
- if(yych == 'u') goto yy179;
- goto yy53;
+ YYDEBUG(171, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'U') goto yy179;
+ if (yych == 'u') goto yy179;
+ goto yy53;
yy172:
- YYDEBUG(172, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy173;
- if(yych != 'e') goto yy53;
+ YYDEBUG(172, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy173;
+ if (yych != 'e') goto yy53;
yy173:
- YYDEBUG(173, *YYCURSOR);
- yyaccept = 4;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'S') goto yy175;
- if(yych == 's') goto yy175;
+ YYDEBUG(173, *YYCURSOR);
+ yyaccept = 4;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'S') goto yy175;
+ if (yych == 's') goto yy175;
yy174:
- YYDEBUG(174, *YYCURSOR);
- {
+ YYDEBUG(174, *YYCURSOR);
+ {
timelib_sll i;
int behavior = 0;
DEBUG_OUTPUT("relativetext");
@@ -3575,1180 +3574,1180 @@ yy174:
return TIMELIB_RELATIVE;
}
yy175:
- YYDEBUG(175, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'D') goto yy176;
- if(yych != 'd') goto yy53;
+ YYDEBUG(175, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'D') goto yy176;
+ if (yych != 'd') goto yy53;
yy176:
- YYDEBUG(176, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy177;
- if(yych != 'a') goto yy53;
+ YYDEBUG(176, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy177;
+ if (yych != 'a') goto yy53;
yy177:
- YYDEBUG(177, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy178;
- if(yych != 'y') goto yy53;
+ YYDEBUG(177, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy178;
+ if (yych != 'y') goto yy53;
yy178:
- YYDEBUG(178, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy174;
+ YYDEBUG(178, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy174;
yy179:
- YYDEBUG(179, *YYCURSOR);
- yyaccept = 4;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'R') goto yy180;
- if(yych != 'r') goto yy174;
+ YYDEBUG(179, *YYCURSOR);
+ yyaccept = 4;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'R') goto yy180;
+ if (yych != 'r') goto yy174;
yy180:
- YYDEBUG(180, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy181;
- if(yych != 's') goto yy53;
+ YYDEBUG(180, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy181;
+ if (yych != 's') goto yy53;
yy181:
- YYDEBUG(181, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'D') goto yy182;
- if(yych != 'd') goto yy53;
+ YYDEBUG(181, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'D') goto yy182;
+ if (yych != 'd') goto yy53;
yy182:
- YYDEBUG(182, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy183;
- if(yych != 'a') goto yy53;
+ YYDEBUG(182, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy183;
+ if (yych != 'a') goto yy53;
yy183:
- YYDEBUG(183, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy178;
- if(yych == 'y') goto yy178;
- goto yy53;
+ YYDEBUG(183, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy178;
+ if (yych == 'y') goto yy178;
+ goto yy53;
yy184:
- YYDEBUG(184, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy185;
- if(yych != 'a') goto yy53;
+ YYDEBUG(184, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy185;
+ if (yych != 'a') goto yy53;
yy185:
- YYDEBUG(185, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy186;
- if(yych != 'r') goto yy53;
+ YYDEBUG(185, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy186;
+ if (yych != 'r') goto yy53;
yy186:
- YYDEBUG(186, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy178;
- if(yych == 's') goto yy178;
- goto yy174;
+ YYDEBUG(186, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy178;
+ if (yych == 's') goto yy178;
+ goto yy174;
yy187:
- YYDEBUG(187, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'I') goto yy200;
- if(yych == 'i') goto yy200;
- goto yy53;
+ YYDEBUG(187, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'I') goto yy200;
+ if (yych == 'i') goto yy200;
+ goto yy53;
yy188:
- YYDEBUG(188, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy189;
- if(yych != 'r') goto yy53;
+ YYDEBUG(188, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy189;
+ if (yych != 'r') goto yy53;
yy189:
- YYDEBUG(189, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy190;
- if(yych != 't') goto yy53;
+ YYDEBUG(189, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy190;
+ if (yych != 't') goto yy53;
yy190:
- YYDEBUG(190, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych == 'H') goto yy192;
- if(yych <= 'M') goto yy53;
+ YYDEBUG(190, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych == 'H') goto yy192;
+ if (yych <= 'M') goto yy53;
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'g') goto yy53;
+ goto yy192;
} else {
- if(yych <= 'h') {
- if(yych <= 'g') goto yy53;
- goto yy192;
- } else {
- if(yych != 'n') goto yy53;
- }
+ if (yych != 'n') goto yy53;
}
- YYDEBUG(191, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'I') goto yy197;
- if(yych == 'i') goto yy197;
- goto yy53;
+ }
+ YYDEBUG(191, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'I') goto yy197;
+ if (yych == 'i') goto yy197;
+ goto yy53;
yy192:
- YYDEBUG(192, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy193;
- if(yych != 'n') goto yy53;
+ YYDEBUG(192, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy193;
+ if (yych != 'n') goto yy53;
yy193:
- YYDEBUG(193, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'I') goto yy194;
- if(yych != 'i') goto yy53;
+ YYDEBUG(193, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'I') goto yy194;
+ if (yych != 'i') goto yy53;
yy194:
- YYDEBUG(194, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'G') goto yy195;
- if(yych != 'g') goto yy53;
+ YYDEBUG(194, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'G') goto yy195;
+ if (yych != 'g') goto yy53;
yy195:
- YYDEBUG(195, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'H') goto yy196;
- if(yych != 'h') goto yy53;
+ YYDEBUG(195, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'H') goto yy196;
+ if (yych != 'h') goto yy53;
yy196:
- YYDEBUG(196, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy186;
- if(yych == 't') goto yy186;
- goto yy53;
+ YYDEBUG(196, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy186;
+ if (yych == 't') goto yy186;
+ goto yy53;
yy197:
- YYDEBUG(197, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'G') goto yy198;
- if(yych != 'g') goto yy53;
+ YYDEBUG(197, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'G') goto yy198;
+ if (yych != 'g') goto yy53;
yy198:
- YYDEBUG(198, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'H') goto yy199;
- if(yych != 'h') goto yy53;
+ YYDEBUG(198, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'H') goto yy199;
+ if (yych != 'h') goto yy53;
yy199:
- YYDEBUG(199, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy186;
- if(yych == 't') goto yy186;
- goto yy53;
+ YYDEBUG(199, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy186;
+ if (yych == 't') goto yy186;
+ goto yy53;
yy200:
- YYDEBUG(200, *YYCURSOR);
- yyaccept = 4;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'D') goto yy201;
- if(yych != 'd') goto yy174;
+ YYDEBUG(200, *YYCURSOR);
+ yyaccept = 4;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'D') goto yy201;
+ if (yych != 'd') goto yy174;
yy201:
- YYDEBUG(201, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy202;
- if(yych != 'a') goto yy53;
+ YYDEBUG(201, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy202;
+ if (yych != 'a') goto yy53;
yy202:
- YYDEBUG(202, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy178;
- if(yych == 'y') goto yy178;
- goto yy53;
+ YYDEBUG(202, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy178;
+ if (yych == 'y') goto yy178;
+ goto yy53;
yy203:
- YYDEBUG(203, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= 'C') goto yy53;
- if(yych <= 'D') goto yy205;
- } else {
- if(yych <= 'c') goto yy53;
- if(yych <= 'd') goto yy205;
- if(yych >= 'f') goto yy53;
- }
- YYDEBUG(204, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'K') goto yy211;
- if(yych == 'k') goto yy211;
- goto yy53;
+ YYDEBUG(203, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= 'C') goto yy53;
+ if (yych <= 'D') goto yy205;
+ } else {
+ if (yych <= 'c') goto yy53;
+ if (yych <= 'd') goto yy205;
+ if (yych >= 'f') goto yy53;
+ }
+ YYDEBUG(204, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'K') goto yy211;
+ if (yych == 'k') goto yy211;
+ goto yy53;
yy205:
- YYDEBUG(205, *YYCURSOR);
- yyaccept = 4;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'N') goto yy206;
- if(yych != 'n') goto yy174;
+ YYDEBUG(205, *YYCURSOR);
+ yyaccept = 4;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'N') goto yy206;
+ if (yych != 'n') goto yy174;
yy206:
- YYDEBUG(206, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy207;
- if(yych != 'e') goto yy53;
+ YYDEBUG(206, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy207;
+ if (yych != 'e') goto yy53;
yy207:
- YYDEBUG(207, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy208;
- if(yych != 's') goto yy53;
+ YYDEBUG(207, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy208;
+ if (yych != 's') goto yy53;
yy208:
- YYDEBUG(208, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'D') goto yy209;
- if(yych != 'd') goto yy53;
+ YYDEBUG(208, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'D') goto yy209;
+ if (yych != 'd') goto yy53;
yy209:
- YYDEBUG(209, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy210;
- if(yych != 'a') goto yy53;
+ YYDEBUG(209, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy210;
+ if (yych != 'a') goto yy53;
yy210:
- YYDEBUG(210, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy178;
- if(yych == 'y') goto yy178;
- goto yy53;
+ YYDEBUG(210, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy178;
+ if (yych == 'y') goto yy178;
+ goto yy53;
yy211:
- YYDEBUG(211, *YYCURSOR);
- yyaccept = 4;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych == 'D') goto yy212;
- if(yych <= 'R') goto yy174;
- goto yy178;
+ YYDEBUG(211, *YYCURSOR);
+ yyaccept = 4;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych == 'D') goto yy212;
+ if (yych <= 'R') goto yy174;
+ goto yy178;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'c') goto yy174;
} else {
- if(yych <= 'd') {
- if(yych <= 'c') goto yy174;
- } else {
- if(yych == 's') goto yy178;
- goto yy174;
- }
+ if (yych == 's') goto yy178;
+ goto yy174;
}
+ }
yy212:
- YYDEBUG(212, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy213;
- if(yych != 'a') goto yy53;
+ YYDEBUG(212, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy213;
+ if (yych != 'a') goto yy53;
yy213:
- YYDEBUG(213, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy214;
- if(yych != 'y') goto yy53;
+ YYDEBUG(213, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy214;
+ if (yych != 'y') goto yy53;
yy214:
- YYDEBUG(214, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy178;
- if(yych == 's') goto yy178;
- goto yy174;
+ YYDEBUG(214, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy178;
+ if (yych == 's') goto yy178;
+ goto yy174;
yy215:
- YYDEBUG(215, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy186;
- if(yych == 'y') goto yy186;
- goto yy53;
+ YYDEBUG(215, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy186;
+ if (yych == 'y') goto yy186;
+ goto yy53;
yy216:
- YYDEBUG(216, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'U') goto yy217;
- if(yych != 'u') goto yy53;
+ YYDEBUG(216, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'U') goto yy217;
+ if (yych != 'u') goto yy53;
yy217:
- YYDEBUG(217, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy186;
- if(yych == 'r') goto yy186;
- goto yy53;
+ YYDEBUG(217, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy186;
+ if (yych == 'r') goto yy186;
+ goto yy53;
yy218:
- YYDEBUG(218, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy223;
- if(yych == 'n') goto yy223;
- goto yy53;
+ YYDEBUG(218, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy223;
+ if (yych == 'n') goto yy223;
+ goto yy53;
yy219:
- YYDEBUG(219, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy220;
- if(yych != 'n') goto yy53;
+ YYDEBUG(219, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy220;
+ if (yych != 'n') goto yy53;
yy220:
- YYDEBUG(220, *YYCURSOR);
- yyaccept = 4;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'U') {
- if(yych == 'S') goto yy178;
- if(yych <= 'T') goto yy174;
+ YYDEBUG(220, *YYCURSOR);
+ yyaccept = 4;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'U') {
+ if (yych == 'S') goto yy178;
+ if (yych <= 'T') goto yy174;
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'r') goto yy174;
+ goto yy178;
} else {
- if(yych <= 's') {
- if(yych <= 'r') goto yy174;
- goto yy178;
- } else {
- if(yych != 'u') goto yy174;
- }
+ if (yych != 'u') goto yy174;
}
- YYDEBUG(221, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy222;
- if(yych != 't') goto yy53;
+ }
+ YYDEBUG(221, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy222;
+ if (yych != 't') goto yy53;
yy222:
- YYDEBUG(222, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy186;
- if(yych == 'e') goto yy186;
- goto yy53;
+ YYDEBUG(222, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy186;
+ if (yych == 'e') goto yy186;
+ goto yy53;
yy223:
- YYDEBUG(223, *YYCURSOR);
- yyaccept = 4;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych == 'D') goto yy224;
- if(yych <= 'S') goto yy174;
- goto yy225;
+ YYDEBUG(223, *YYCURSOR);
+ yyaccept = 4;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych == 'D') goto yy224;
+ if (yych <= 'S') goto yy174;
+ goto yy225;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'c') goto yy174;
} else {
- if(yych <= 'd') {
- if(yych <= 'c') goto yy174;
- } else {
- if(yych == 't') goto yy225;
- goto yy174;
- }
+ if (yych == 't') goto yy225;
+ goto yy174;
}
+ }
yy224:
- YYDEBUG(224, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy226;
- if(yych == 'a') goto yy226;
- goto yy53;
+ YYDEBUG(224, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy226;
+ if (yych == 'a') goto yy226;
+ goto yy53;
yy225:
- YYDEBUG(225, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'H') goto yy186;
- if(yych == 'h') goto yy186;
- goto yy53;
+ YYDEBUG(225, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'H') goto yy186;
+ if (yych == 'h') goto yy186;
+ goto yy53;
yy226:
- YYDEBUG(226, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy178;
- if(yych == 'y') goto yy178;
- goto yy53;
+ YYDEBUG(226, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy178;
+ if (yych == 'y') goto yy178;
+ goto yy53;
yy227:
- YYDEBUG(227, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy238;
- if(yych == 'n') goto yy238;
- goto yy53;
+ YYDEBUG(227, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy238;
+ if (yych == 'n') goto yy238;
+ goto yy53;
yy228:
- YYDEBUG(228, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy233;
- if(yych == 't') goto yy233;
- goto yy53;
+ YYDEBUG(228, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy233;
+ if (yych == 't') goto yy233;
+ goto yy53;
yy229:
- YYDEBUG(229, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy230;
- if(yych != 'c') goto yy53;
+ YYDEBUG(229, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy230;
+ if (yych != 'c') goto yy53;
yy230:
- YYDEBUG(230, *YYCURSOR);
- yyaccept = 4;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych == 'O') goto yy231;
- if(yych <= 'R') goto yy174;
- goto yy178;
+ YYDEBUG(230, *YYCURSOR);
+ yyaccept = 4;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych == 'O') goto yy231;
+ if (yych <= 'R') goto yy174;
+ goto yy178;
+ } else {
+ if (yych <= 'o') {
+ if (yych <= 'n') goto yy174;
} else {
- if(yych <= 'o') {
- if(yych <= 'n') goto yy174;
- } else {
- if(yych == 's') goto yy178;
- goto yy174;
- }
+ if (yych == 's') goto yy178;
+ goto yy174;
}
+ }
yy231:
- YYDEBUG(231, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy232;
- if(yych != 'n') goto yy53;
+ YYDEBUG(231, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy232;
+ if (yych != 'n') goto yy53;
yy232:
- YYDEBUG(232, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'D') goto yy186;
- if(yych == 'd') goto yy186;
- goto yy53;
+ YYDEBUG(232, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'D') goto yy186;
+ if (yych == 'd') goto yy186;
+ goto yy53;
yy233:
- YYDEBUG(233, *YYCURSOR);
- yyaccept = 4;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'U') goto yy234;
- if(yych != 'u') goto yy174;
+ YYDEBUG(233, *YYCURSOR);
+ yyaccept = 4;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'U') goto yy234;
+ if (yych != 'u') goto yy174;
yy234:
- YYDEBUG(234, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy235;
- if(yych != 'r') goto yy53;
+ YYDEBUG(234, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy235;
+ if (yych != 'r') goto yy53;
yy235:
- YYDEBUG(235, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'D') goto yy236;
- if(yych != 'd') goto yy53;
+ YYDEBUG(235, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'D') goto yy236;
+ if (yych != 'd') goto yy53;
yy236:
- YYDEBUG(236, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy237;
- if(yych != 'a') goto yy53;
+ YYDEBUG(236, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy237;
+ if (yych != 'a') goto yy53;
yy237:
- YYDEBUG(237, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy178;
- if(yych == 'y') goto yy178;
- goto yy53;
+ YYDEBUG(237, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy178;
+ if (yych == 'y') goto yy178;
+ goto yy53;
yy238:
- YYDEBUG(238, *YYCURSOR);
- yyaccept = 4;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'D') goto yy239;
- if(yych != 'd') goto yy174;
+ YYDEBUG(238, *YYCURSOR);
+ yyaccept = 4;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'D') goto yy239;
+ if (yych != 'd') goto yy174;
yy239:
- YYDEBUG(239, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy240;
- if(yych != 'a') goto yy53;
+ YYDEBUG(239, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy240;
+ if (yych != 'a') goto yy53;
yy240:
- YYDEBUG(240, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy178;
- if(yych == 'y') goto yy178;
- goto yy53;
+ YYDEBUG(240, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy178;
+ if (yych == 'y') goto yy178;
+ goto yy53;
yy241:
- YYDEBUG(241, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy138;
- goto yy155;
- }
+ YYDEBUG(241, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'e') goto yy242;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy138;
+ goto yy155;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'e') goto yy242;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
+ }
yy242:
- YYDEBUG(242, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'U') goto yy139;
- goto yy156;
- }
+ YYDEBUG(242, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'v') goto yy243;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'U') goto yy139;
+ goto yy156;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'v') goto yy243;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy243:
- YYDEBUG(243, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'I') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'H') goto yy140;
- goto yy157;
- }
+ YYDEBUG(243, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'I') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'i') goto yy244;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'H') goto yy140;
+ goto yy157;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'i') goto yy244;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy244:
- YYDEBUG(244, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'O') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'N') goto yy141;
- goto yy158;
- }
+ YYDEBUG(244, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'O') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'o') goto yy245;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'N') goto yy141;
+ goto yy158;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'o') goto yy245;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
+ }
+ }
yy245:
- YYDEBUG(245, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'U') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'T') goto yy3;
- goto yy159;
- }
+ YYDEBUG(245, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'U') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'u') goto yy246;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'T') goto yy3;
+ goto yy159;
}
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'u') goto yy246;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
+ }
+ }
yy246:
- YYDEBUG(246, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy160;
- if(yych != 's') goto yy152;
+ YYDEBUG(246, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy160;
+ if (yych != 's') goto yy152;
yy247:
- YYDEBUG(247, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '.') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy53;
- goto yy161;
- } else {
- if(yych == ' ') goto yy161;
- goto yy53;
- }
+ YYDEBUG(247, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '.') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy53;
+ goto yy161;
+ } else {
+ if (yych == ' ') goto yy161;
+ goto yy53;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= '/') goto yy144;
+ if (yych <= '^') goto yy53;
+ goto yy144;
} else {
- if(yych <= '_') {
- if(yych <= '/') goto yy144;
- if(yych <= '^') goto yy53;
- goto yy144;
- } else {
- if(yych <= '`') goto yy53;
- if(yych <= 'z') goto yy151;
- goto yy53;
- }
+ if (yych <= '`') goto yy53;
+ if (yych <= 'z') goto yy151;
+ goto yy53;
}
+ }
yy248:
- YYDEBUG(248, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'S') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy138;
- }
+ YYDEBUG(248, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'S') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'r') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 's') goto yy249;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy138;
}
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 's') goto yy249;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
yy249:
- YYDEBUG(249, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- }
+ YYDEBUG(249, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 't') goto yy250;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
+ }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 't') goto yy250;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
+ }
yy250:
- YYDEBUG(250, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy3;
- goto yy161;
- } else {
- if(yych == ' ') goto yy161;
- goto yy3;
- }
+ YYDEBUG(250, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy3;
+ goto yy161;
+ } else {
+ if (yych == ' ') goto yy161;
+ goto yy3;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy140;
} else {
- if(yych <= 'Z') {
- if(yych <= ')') goto yy136;
- if(yych <= '@') goto yy3;
- goto yy140;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy251:
- YYDEBUG(251, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy138;
- goto yy249;
- }
+ YYDEBUG(251, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 's') goto yy252;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy138;
+ goto yy249;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 's') goto yy252;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
+ }
+ }
yy252:
- YYDEBUG(252, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- goto yy250;
- }
+ YYDEBUG(252, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy253;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
+ goto yy250;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy253;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy253:
- YYDEBUG(253, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy161;
- goto yy3;
- } else {
- if(yych <= ' ') goto yy161;
- if(yych == ')') goto yy136;
- goto yy3;
- }
+ YYDEBUG(253, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy161;
+ goto yy3;
} else {
- if(yych <= '^') {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'Z') goto yy140;
- goto yy3;
- } else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= ' ') goto yy161;
+ if (yych == ')') goto yy136;
+ goto yy3;
+ }
+ } else {
+ if (yych <= '^') {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Z') goto yy140;
+ goto yy3;
+ } else {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy254:
- YYDEBUG(254, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'G') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'F') goto yy138;
- goto yy261;
- }
+ YYDEBUG(254, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'G') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'f') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'g') goto yy261;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'F') goto yy138;
+ goto yy261;
+ }
+ } else {
+ if (yych <= 'f') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'g') goto yy261;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
+ }
yy255:
- YYDEBUG(255, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy138;
- }
+ YYDEBUG(255, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'e') goto yy256;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy138;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'e') goto yy256;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
+ }
yy256:
- YYDEBUG(256, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'V') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'U') goto yy139;
- }
+ YYDEBUG(256, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'V') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'u') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'v') goto yy257;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'U') goto yy139;
+ }
+ } else {
+ if (yych <= 'u') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 'v') goto yy257;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
+ }
yy257:
- YYDEBUG(257, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy140;
- }
+ YYDEBUG(257, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'e') goto yy258;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy140;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'e') goto yy258;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy258:
- YYDEBUG(258, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy141;
- }
+ YYDEBUG(258, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'm') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'n') goto yy259;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy141;
}
-yy259:
- YYDEBUG(259, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych == ')') goto yy136;
- goto yy3;
+ } else {
+ if (yych <= 'm') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
} else {
- if(yych <= 'T') goto yy260;
- if(yych != 't') goto yy3;
+ if (yych <= 'n') goto yy259;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
+yy259:
+ YYDEBUG(259, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'T') goto yy260;
+ if (yych != 't') goto yy3;
+ }
yy260:
- YYDEBUG(260, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'H') goto yy160;
- if(yych == 'h') goto yy160;
- goto yy53;
+ YYDEBUG(260, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'H') goto yy160;
+ if (yych == 'h') goto yy160;
+ goto yy53;
yy261:
- YYDEBUG(261, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'H') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy139;
- }
+ YYDEBUG(261, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'H') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'g') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'h') goto yy262;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy139;
+ }
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 'h') goto yy262;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
+ }
yy262:
- YYDEBUG(262, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy140;
- }
+ YYDEBUG(262, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 't') goto yy263;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy140;
+ }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 't') goto yy263;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy263:
- YYDEBUG(263, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy3;
- goto yy161;
- } else {
- if(yych == ' ') goto yy161;
- goto yy3;
- }
+ YYDEBUG(263, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy3;
+ goto yy161;
+ } else {
+ if (yych == ' ') goto yy161;
+ goto yy3;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy141;
} else {
- if(yych <= 'Z') {
- if(yych <= ')') goto yy136;
- if(yych <= '@') goto yy3;
- goto yy141;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
yy264:
- YYDEBUG(264, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'G') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'F') goto yy138;
- goto yy261;
- }
+ YYDEBUG(264, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'G') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'g') goto yy271;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'F') goto yy138;
+ goto yy261;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'g') goto yy271;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
+ }
+ }
yy265:
- YYDEBUG(265, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy138;
- goto yy256;
- }
+ YYDEBUG(265, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'e') goto yy266;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy138;
+ goto yy256;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'e') goto yy266;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
+ }
yy266:
- YYDEBUG(266, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'U') goto yy139;
- goto yy257;
- }
+ YYDEBUG(266, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'v') goto yy267;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'U') goto yy139;
+ goto yy257;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'v') goto yy267;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
+ }
+ }
yy267:
- YYDEBUG(267, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy140;
- goto yy258;
- }
+ YYDEBUG(267, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'e') goto yy268;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy140;
+ goto yy258;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'e') goto yy268;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy268:
- YYDEBUG(268, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy141;
- goto yy259;
- }
+ YYDEBUG(268, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'n') goto yy269;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy141;
+ goto yy259;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'n') goto yy269;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
+ }
+ }
yy269:
- YYDEBUG(269, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'S') goto yy3;
- goto yy260;
- }
+ YYDEBUG(269, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy270;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'S') goto yy3;
+ goto yy260;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy270;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
+ }
yy270:
- YYDEBUG(270, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'H') goto yy160;
- if(yych == 'h') goto yy247;
- goto yy152;
+ YYDEBUG(270, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'H') goto yy160;
+ if (yych == 'h') goto yy247;
+ goto yy152;
yy271:
- YYDEBUG(271, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'H') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy139;
- goto yy262;
- }
+ YYDEBUG(271, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'H') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'h') goto yy272;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy139;
+ goto yy262;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'h') goto yy272;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy272:
- YYDEBUG(272, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy140;
- goto yy263;
- }
+ YYDEBUG(272, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy273;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy140;
+ goto yy263;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy273;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy273:
- YYDEBUG(273, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy161;
- goto yy3;
- } else {
- if(yych <= ' ') goto yy161;
- if(yych == ')') goto yy136;
- goto yy3;
- }
+ YYDEBUG(273, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy161;
+ goto yy3;
} else {
- if(yych <= '^') {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'Z') goto yy141;
- goto yy3;
- } else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= ' ') goto yy161;
+ if (yych == ')') goto yy136;
+ goto yy3;
+ }
+ } else {
+ if (yych <= '^') {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Z') goto yy141;
+ goto yy3;
+ } else {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy274:
- YYDEBUG(274, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= 'C') goto yy138;
- if(yych >= 'E') goto yy277;
- }
+ YYDEBUG(274, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'c') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'd') goto yy275;
- if(yych <= 'e') goto yy277;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= 'C') goto yy138;
+ if (yych >= 'E') goto yy277;
+ }
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'd') goto yy275;
+ if (yych <= 'e') goto yy277;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
+ }
yy275:
- YYDEBUG(275, *YYCURSOR);
- ++YYCURSOR;
- if((yych = *YYCURSOR) <= 'N') {
- if(yych <= ')') {
- if(yych >= ')') goto yy136;
- } else {
- if(yych <= '@') goto yy276;
- if(yych <= 'M') goto yy139;
- goto yy283;
- }
+ YYDEBUG(275, *YYCURSOR);
+ ++YYCURSOR;
+ if ((yych = *YYCURSOR) <= 'N') {
+ if (yych <= ')') {
+ if (yych >= ')') goto yy136;
} else {
- if(yych <= 'm') {
- if(yych <= 'Z') goto yy139;
- if(yych >= 'a') goto yy139;
- } else {
- if(yych <= 'n') goto yy283;
- if(yych <= 'z') goto yy139;
- }
+ if (yych <= '@') goto yy276;
+ if (yych <= 'M') goto yy139;
+ goto yy283;
+ }
+ } else {
+ if (yych <= 'm') {
+ if (yych <= 'Z') goto yy139;
+ if (yych >= 'a') goto yy139;
+ } else {
+ if (yych <= 'n') goto yy283;
+ if (yych <= 'z') goto yy139;
}
+ }
yy276:
- YYDEBUG(276, *YYCURSOR);
- {
+ YYDEBUG(276, *YYCURSOR);
+ {
const timelib_relunit* relunit;
DEBUG_OUTPUT("daytext");
TIMELIB_INIT;
@@ -4757,488 +4756,490 @@ yy276:
TIMELIB_UNHAVE_TIME();
relunit = timelib_lookup_relunit((char**) &ptr);
s->time->relative.weekday = relunit->multiplier;
- s->time->relative.weekday_behavior = 1;
+ if (s->time->relative.weekday_behavior != 2) {
+ s->time->relative.weekday_behavior = 1;
+ }
TIMELIB_DEINIT;
return TIMELIB_WEEKDAY;
}
yy277:
- YYDEBUG(277, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'K') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'J') goto yy139;
- }
+ YYDEBUG(277, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'K') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'j') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'k') goto yy278;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'J') goto yy139;
+ }
+ } else {
+ if (yych <= 'j') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 'k') goto yy278;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
+ }
yy278:
- YYDEBUG(278, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy140;
- }
+ YYDEBUG(278, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'c') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'd') goto yy279;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy140;
}
-yy279:
- YYDEBUG(279, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- } else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy280;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'd') goto yy279;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
-yy280:
- YYDEBUG(280, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'X') {
- if(yych == ')') goto yy136;
+ }
+yy279:
+ YYDEBUG(279, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
goto yy3;
} else {
- if(yych <= 'Y') goto yy281;
- if(yych != 'y') goto yy3;
+ if (yych <= 'a') goto yy280;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
+yy280:
+ YYDEBUG(280, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'X') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'Y') goto yy281;
+ if (yych != 'y') goto yy3;
+ }
yy281:
- YYDEBUG(281, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy282;
- if(yych != 's') goto yy276;
+ YYDEBUG(281, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy282;
+ if (yych != 's') goto yy276;
yy282:
- YYDEBUG(282, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy276;
+ YYDEBUG(282, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy276;
yy283:
- YYDEBUG(283, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy140;
- }
+ YYDEBUG(283, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'e') goto yy284;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy140;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'e') goto yy284;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy284:
- YYDEBUG(284, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'S') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy141;
- }
+ YYDEBUG(284, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'S') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'r') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 's') goto yy285;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy141;
}
-yy285:
- YYDEBUG(285, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'C') {
- if(yych == ')') goto yy136;
- goto yy3;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
} else {
- if(yych <= 'D') goto yy286;
- if(yych != 'd') goto yy3;
+ if (yych <= 's') goto yy285;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
+yy285:
+ YYDEBUG(285, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'C') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'D') goto yy286;
+ if (yych != 'd') goto yy3;
+ }
yy286:
- YYDEBUG(286, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy287;
- if(yych != 'a') goto yy53;
+ YYDEBUG(286, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy287;
+ if (yych != 'a') goto yy53;
yy287:
- YYDEBUG(287, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy282;
- if(yych == 'y') goto yy282;
- goto yy53;
+ YYDEBUG(287, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy282;
+ if (yych == 'y') goto yy282;
+ goto yy53;
yy288:
- YYDEBUG(288, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '/') {
- if(yych == ')') goto yy136;
- if(yych <= '.') goto yy3;
- goto yy144;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy138;
- if(yych <= 'D') goto yy275;
- goto yy277;
- }
+ YYDEBUG(288, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '/') {
+ if (yych == ')') goto yy136;
+ if (yych <= '.') goto yy3;
+ goto yy144;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych <= 'd') {
- if(yych <= 'c') goto yy143;
- } else {
- if(yych <= 'e') goto yy290;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy138;
+ if (yych <= 'D') goto yy275;
+ goto yy277;
}
- YYDEBUG(289, *YYCURSOR);
- yyaccept = 5;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy276;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy276;
- if(yych <= 'M') goto yy139;
- goto yy283;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy276;
+ if (yych <= 'd') {
+ if (yych <= 'c') goto yy143;
} else {
- if(yych == 'n') goto yy296;
- if(yych <= 'z') goto yy148;
- goto yy276;
+ if (yych <= 'e') goto yy290;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
}
+ }
+ YYDEBUG(289, *YYCURSOR);
+ yyaccept = 5;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy276;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy276;
+ if (yych <= 'M') goto yy139;
+ goto yy283;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy276;
+ } else {
+ if (yych == 'n') goto yy296;
+ if (yych <= 'z') goto yy148;
+ goto yy276;
+ }
+ }
yy290:
- YYDEBUG(290, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'K') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'J') goto yy139;
- goto yy278;
- }
+ YYDEBUG(290, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'K') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'k') goto yy291;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'J') goto yy139;
+ goto yy278;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'k') goto yy291;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy291:
- YYDEBUG(291, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy140;
- goto yy279;
- }
+ YYDEBUG(291, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'd') goto yy292;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy140;
+ goto yy279;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'd') goto yy292;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy292:
- YYDEBUG(292, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'A') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- goto yy280;
- }
+ YYDEBUG(292, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'a') goto yy293;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ goto yy280;
}
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '^') goto yy3;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy3;
+ if (yych <= 'a') goto yy293;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
+ }
+ }
yy293:
- YYDEBUG(293, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'Y') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'X') goto yy3;
- goto yy281;
- }
+ YYDEBUG(293, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'Y') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'y') goto yy294;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'X') goto yy3;
+ goto yy281;
}
-yy294:
- YYDEBUG(294, *YYCURSOR);
- yyaccept = 5;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '^') {
- if(yych <= '/') {
- if(yych <= '.') goto yy276;
- goto yy144;
- } else {
- if(yych == 'S') goto yy282;
- goto yy276;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= 'r') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy276;
- goto yy151;
- } else {
- if(yych <= 's') goto yy295;
- if(yych <= 'z') goto yy151;
- goto yy276;
- }
+ if (yych == 'y') goto yy294;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
-yy295:
- YYDEBUG(295, *YYCURSOR);
- yyaccept = 5;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '^') {
- if(yych == '/') goto yy144;
+ }
+yy294:
+ YYDEBUG(294, *YYCURSOR);
+ yyaccept = 5;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '^') {
+ if (yych <= '/') {
+ if (yych <= '.') goto yy276;
+ goto yy144;
+ } else {
+ if (yych == 'S') goto yy282;
goto yy276;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy276;
+ goto yy151;
} else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy276;
- if(yych <= 'z') goto yy151;
+ if (yych <= 's') goto yy295;
+ if (yych <= 'z') goto yy151;
goto yy276;
}
+ }
+yy295:
+ YYDEBUG(295, *YYCURSOR);
+ yyaccept = 5;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '^') {
+ if (yych == '/') goto yy144;
+ goto yy276;
+ } else {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy276;
+ if (yych <= 'z') goto yy151;
+ goto yy276;
+ }
yy296:
- YYDEBUG(296, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy140;
- goto yy284;
- }
+ YYDEBUG(296, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'e') goto yy297;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy140;
+ goto yy284;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'e') goto yy297;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy297:
- YYDEBUG(297, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy141;
- goto yy285;
- }
+ YYDEBUG(297, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 's') goto yy298;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy141;
+ goto yy285;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 's') goto yy298;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy298:
- YYDEBUG(298, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'C') goto yy3;
- goto yy286;
- }
+ YYDEBUG(298, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'd') goto yy299;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'C') goto yy3;
+ goto yy286;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'd') goto yy299;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
+ }
yy299:
- YYDEBUG(299, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy287;
- if(yych != 'a') goto yy152;
- YYDEBUG(300, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy282;
- if(yych == 'y') goto yy295;
- goto yy152;
+ YYDEBUG(299, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy287;
+ if (yych != 'a') goto yy152;
+ YYDEBUG(300, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy282;
+ if (yych == 'y') goto yy295;
+ goto yy152;
yy301:
- YYDEBUG(301, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'C') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ YYDEBUG(301, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'C') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'B') goto yy138;
+ }
+ } else {
+ if (yych <= 'b') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'c') goto yy302;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
+yy302:
+ YYDEBUG(302, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych >= '\t') goto yy305;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'B') goto yy138;
+ if (yych == ' ') goto yy305;
}
} else {
- if(yych <= 'b') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
} else {
- if(yych <= 'c') goto yy302;
- if(yych <= 'z') goto yy138;
- goto yy3;
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
}
}
-yy302:
- YYDEBUG(302, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych >= 0x09) goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
} else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- }
+ if (yych == 'E') goto yy311;
+ goto yy139;
}
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- } else {
- if(yych == 'E') goto yy311;
- goto yy139;
- }
+ if (yych <= 'd') {
+ if (yych >= 'a') goto yy139;
} else {
- if(yych <= 'd') {
- if(yych >= 'a') goto yy139;
- } else {
- if(yych <= 'e') goto yy311;
- if(yych <= 'z') goto yy139;
- }
+ if (yych <= 'e') goto yy311;
+ if (yych <= 'z') goto yy139;
}
}
+ }
yy303:
- YYDEBUG(303, *YYCURSOR);
- {
+ YYDEBUG(303, *YYCURSOR);
+ {
DEBUG_OUTPUT("monthtext");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -5247,56 +5248,56 @@ yy303:
return TIMELIB_DATE_TEXT;
}
yy304:
- YYDEBUG(304, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 20) YYFILL(20);
- yych = *YYCURSOR;
+ YYDEBUG(304, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 20) YYFILL(20);
+ yych = *YYCURSOR;
yy305:
- YYDEBUG(305, *YYCURSOR);
- if(yybm[0+yych] & 32) {
- goto yy304;
- }
- if(yych <= '/') goto yy53;
- if(yych <= '2') goto yy307;
- if(yych <= '3') goto yy309;
- if(yych <= '9') goto yy310;
- goto yy53;
+ YYDEBUG(305, *YYCURSOR);
+ if (yybm[0+yych] & 32) {
+ goto yy304;
+ }
+ if (yych <= '/') goto yy53;
+ if (yych <= '2') goto yy307;
+ if (yych <= '3') goto yy309;
+ if (yych <= '9') goto yy310;
+ goto yy53;
yy306:
- YYDEBUG(306, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy305;
- if(yych <= '0') goto yy466;
- if(yych <= '2') goto yy467;
- if(yych <= '3') goto yy468;
- goto yy305;
+ YYDEBUG(306, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy305;
+ if (yych <= '0') goto yy464;
+ if (yych <= '2') goto yy465;
+ if (yych <= '3') goto yy466;
+ goto yy305;
yy307:
- YYDEBUG(307, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'm') {
- if(yych <= '1') {
- if(yych <= '/') goto yy325;
- if(yych <= '0') goto yy405;
- goto yy406;
- } else {
- if(yych <= '2') goto yy464;
- if(yych <= '9') goto yy465;
- goto yy325;
- }
+ YYDEBUG(307, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'm') {
+ if (yych <= '1') {
+ if (yych <= '/') goto yy325;
+ if (yych <= '0') goto yy405;
+ goto yy406;
+ } else {
+ if (yych <= '2') goto yy462;
+ if (yych <= '9') goto yy463;
+ goto yy325;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'n') goto yy321;
+ if (yych <= 'q') goto yy325;
+ goto yy322;
} else {
- if(yych <= 'r') {
- if(yych <= 'n') goto yy321;
- if(yych <= 'q') goto yy325;
- goto yy322;
- } else {
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
}
+ }
yy308:
- YYDEBUG(308, *YYCURSOR);
- {
+ YYDEBUG(308, *YYCURSOR);
+ {
DEBUG_OUTPUT("datetextual | datenoyear");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -5308,278 +5309,274 @@ yy308:
return TIMELIB_DATE_TEXT;
}
yy309:
- YYDEBUG(309, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'm') {
- if(yych <= '1') {
- if(yych <= '/') goto yy325;
- if(yych <= '0') goto yy405;
- goto yy406;
- } else {
- if(yych <= '2') goto yy318;
- if(yych <= '9') goto yy319;
- goto yy325;
- }
+ YYDEBUG(309, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'm') {
+ if (yych <= '1') {
+ if (yych <= '/') goto yy325;
+ if (yych <= '0') goto yy405;
+ goto yy406;
+ } else {
+ if (yych <= '2') goto yy318;
+ if (yych <= '9') goto yy319;
+ goto yy325;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'n') goto yy321;
+ if (yych <= 'q') goto yy325;
+ goto yy322;
} else {
- if(yych <= 'r') {
- if(yych <= 'n') goto yy321;
- if(yych <= 'q') goto yy325;
- goto yy322;
- } else {
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
}
+ }
yy310:
- YYDEBUG(310, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'm') {
- if(yych <= '1') {
- if(yych <= '/') goto yy325;
- if(yych <= '0') goto yy316;
- goto yy317;
- } else {
- if(yych <= '2') goto yy318;
- if(yych <= '9') goto yy319;
- goto yy325;
- }
+ YYDEBUG(310, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'm') {
+ if (yych <= '1') {
+ if (yych <= '/') goto yy325;
+ if (yych <= '0') goto yy316;
+ goto yy317;
+ } else {
+ if (yych <= '2') goto yy318;
+ if (yych <= '9') goto yy319;
+ goto yy325;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'n') goto yy321;
+ if (yych <= 'q') goto yy325;
+ goto yy322;
} else {
- if(yych <= 'r') {
- if(yych <= 'n') goto yy321;
- if(yych <= 'q') goto yy325;
- goto yy322;
- } else {
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
}
+ }
yy311:
- YYDEBUG(311, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'M') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'L') goto yy140;
- }
+ YYDEBUG(311, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'M') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'l') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'm') goto yy312;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'L') goto yy140;
}
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'm') goto yy312;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
+ }
+ }
yy312:
- YYDEBUG(312, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'B') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'A') goto yy141;
- }
+ YYDEBUG(312, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'B') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'a') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'b') goto yy313;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'A') goto yy141;
}
-yy313:
- YYDEBUG(313, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych == ')') goto yy136;
- goto yy3;
+ } else {
+ if (yych <= 'a') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
} else {
- if(yych <= 'E') goto yy314;
- if(yych != 'e') goto yy3;
+ if (yych <= 'b') goto yy313;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
+yy313:
+ YYDEBUG(313, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'E') goto yy314;
+ if (yych != 'e') goto yy3;
+ }
yy314:
- YYDEBUG(314, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy315;
- if(yych != 'r') goto yy53;
+ YYDEBUG(314, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy315;
+ if (yych != 'r') goto yy53;
yy315:
- YYDEBUG(315, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ' ') {
- if(yych == 0x09) goto yy305;
- if(yych <= 0x1F) goto yy303;
+ YYDEBUG(315, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy305;
+ if (yych <= 0x1F) goto yy303;
+ goto yy305;
+ } else {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy303;
goto yy305;
} else {
- if(yych <= '.') {
- if(yych <= ',') goto yy303;
- goto yy305;
- } else {
- if(yych <= '/') goto yy303;
- if(yych <= '9') goto yy305;
- goto yy303;
- }
+ if (yych <= '/') goto yy303;
+ if (yych <= '9') goto yy305;
+ goto yy303;
}
+ }
yy316:
- YYDEBUG(316, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy330;
- goto yy308;
- } else {
- if(yych <= '0') goto yy403;
- if(yych <= '9') goto yy404;
- if(yych <= ':') goto yy330;
- goto yy308;
- }
+ YYDEBUG(316, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy330;
+ goto yy53;
+ } else {
+ if (yych <= '0') goto yy403;
+ if (yych <= '9') goto yy404;
+ if (yych <= ':') goto yy330;
+ goto yy53;
+ }
yy317:
- YYDEBUG(317, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
- } else {
- if(yych <= '2') goto yy404;
- if(yych <= '9') goto yy403;
- if(yych <= ':') goto yy371;
- goto yy308;
- }
+ YYDEBUG(317, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy371;
+ goto yy53;
+ } else {
+ if (yych <= '2') goto yy404;
+ if (yych <= '9') goto yy403;
+ if (yych <= ':') goto yy371;
+ goto yy53;
+ }
yy318:
- YYDEBUG(318, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
- } else {
- if(yych <= '3') goto yy403;
- if(yych <= '9') goto yy400;
- if(yych <= ':') goto yy371;
- goto yy308;
- }
+ YYDEBUG(318, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy371;
+ goto yy53;
+ } else {
+ if (yych <= '3') goto yy403;
+ if (yych <= '9') goto yy400;
+ if (yych <= ':') goto yy371;
+ goto yy53;
+ }
yy319:
- YYDEBUG(319, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
- } else {
- if(yych <= '9') goto yy400;
- if(yych <= ':') goto yy371;
- goto yy308;
- }
+ YYDEBUG(319, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy371;
+ goto yy53;
+ } else {
+ if (yych <= '9') goto yy400;
+ if (yych <= ':') goto yy371;
+ goto yy53;
+ }
yy320:
- YYDEBUG(320, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- goto yy325;
+ YYDEBUG(320, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ goto yy325;
yy321:
- YYDEBUG(321, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- goto yy325;
+ YYDEBUG(321, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ goto yy325;
yy322:
- YYDEBUG(322, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- goto yy325;
+ YYDEBUG(322, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ goto yy325;
yy323:
- YYDEBUG(323, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- goto yy325;
+ YYDEBUG(323, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ goto yy325;
yy324:
- YYDEBUG(324, *YYCURSOR);
- yyaccept = 7;
- YYMARKER = ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 17) YYFILL(17);
- yych = *YYCURSOR;
+ YYDEBUG(324, *YYCURSOR);
+ yyaccept = 7;
+ YYMARKER = ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 17) YYFILL(17);
+ yych = *YYCURSOR;
yy325:
- YYDEBUG(325, *YYCURSOR);
- if(yybm[0+yych] & 64) {
- goto yy324;
- }
- if(yych <= '2') {
- if(yych <= '/') goto yy308;
- if(yych <= '0') goto yy366;
- if(yych <= '1') goto yy367;
- goto yy368;
- } else {
- if(yych <= '9') goto yy369;
- if(yych != 'T') goto yy308;
- }
- YYDEBUG(326, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '1') goto yy327;
- if(yych <= '2') goto yy328;
- if(yych <= '9') goto yy329;
- goto yy53;
+ YYDEBUG(325, *YYCURSOR);
+ if (yybm[0+yych] & 64) {
+ goto yy324;
+ }
+ if (yych <= '2') {
+ if (yych <= '/') goto yy308;
+ if (yych <= '0') goto yy366;
+ if (yych <= '1') goto yy367;
+ goto yy368;
+ } else {
+ if (yych <= '9') goto yy369;
+ if (yych != 'T') goto yy308;
+ }
+ YYDEBUG(326, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '1') goto yy327;
+ if (yych <= '2') goto yy328;
+ if (yych <= '9') goto yy329;
+ goto yy53;
yy327:
- YYDEBUG(327, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') {
- if(yych == '.') goto yy330;
- goto yy53;
- } else {
- if(yych <= '9') goto yy329;
- if(yych <= ':') goto yy330;
- goto yy53;
- }
+ YYDEBUG(327, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy330;
+ goto yy53;
+ } else {
+ if (yych <= '9') goto yy329;
+ if (yych <= ':') goto yy330;
+ goto yy53;
+ }
yy328:
- YYDEBUG(328, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') {
- if(yych == '.') goto yy330;
- goto yy53;
- } else {
- if(yych <= '3') goto yy329;
- if(yych == ':') goto yy330;
- goto yy53;
- }
+ YYDEBUG(328, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy330;
+ goto yy53;
+ } else {
+ if (yych <= '3') goto yy329;
+ if (yych == ':') goto yy330;
+ goto yy53;
+ }
yy329:
- YYDEBUG(329, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '.') goto yy330;
- if(yych != ':') goto yy53;
+ YYDEBUG(329, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '.') goto yy330;
+ if (yych != ':') goto yy53;
yy330:
- YYDEBUG(330, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy331;
- if(yych <= '9') goto yy333;
- goto yy53;
+ YYDEBUG(330, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy331;
+ if (yych <= '9') goto yy333;
+ goto yy53;
yy331:
- YYDEBUG(331, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy334;
- } else {
- if(yych <= '9') goto yy333;
- if(yych <= ':') goto yy334;
- }
+ YYDEBUG(331, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy334;
+ } else {
+ if (yych <= '9') goto yy333;
+ if (yych <= ':') goto yy334;
+ }
yy332:
- YYDEBUG(332, *YYCURSOR);
- {
+ YYDEBUG(332, *YYCURSOR);
+ {
int tz_not_found;
DEBUG_OUTPUT("dateshortwithtimeshort | dateshortwithtimelong | dateshortwithtimelongtz");
TIMELIB_INIT;
@@ -5608,616 +5605,616 @@ yy332:
return TIMELIB_SHORTDATE_WITH_TIME;
}
yy333:
- YYDEBUG(333, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy334;
- if(yych != ':') goto yy332;
+ YYDEBUG(333, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy334;
+ if (yych != ':') goto yy332;
yy334:
- YYDEBUG(334, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy335;
- if(yych <= '6') goto yy336;
- if(yych <= '9') goto yy337;
- goto yy53;
+ YYDEBUG(334, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy335;
+ if (yych <= '6') goto yy336;
+ if (yych <= '9') goto yy337;
+ goto yy53;
yy335:
- YYDEBUG(335, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy332;
- if(yych <= '9') goto yy338;
- goto yy332;
+ YYDEBUG(335, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy332;
+ if (yych <= '9') goto yy338;
+ goto yy332;
yy336:
- YYDEBUG(336, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '0') goto yy338;
- goto yy332;
+ YYDEBUG(336, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '0') goto yy338;
+ goto yy332;
yy337:
- YYDEBUG(337, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy332;
+ YYDEBUG(337, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy332;
yy338:
- YYDEBUG(338, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '*') {
- if(yych <= 0x1F) {
- if(yych != 0x09) goto yy332;
- } else {
- if(yych <= ' ') goto yy339;
- if(yych == '(') goto yy342;
- goto yy332;
- }
+ YYDEBUG(338, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '*') {
+ if (yych <= 0x1F) {
+ if (yych != '\t') goto yy332;
+ } else {
+ if (yych <= ' ') goto yy339;
+ if (yych == '(') goto yy342;
+ goto yy332;
+ }
+ } else {
+ if (yych <= '@') {
+ if (yych == ',') goto yy332;
+ if (yych <= '-') goto yy341;
+ goto yy332;
} else {
- if(yych <= '@') {
- if(yych == ',') goto yy332;
- if(yych <= '-') goto yy341;
- goto yy332;
- } else {
- if(yych <= 'Z') goto yy343;
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy344;
- goto yy332;
- }
+ if (yych <= 'Z') goto yy343;
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy344;
+ goto yy332;
}
+ }
yy339:
- YYDEBUG(339, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 8) YYFILL(8);
- yych = *YYCURSOR;
- YYDEBUG(340, *YYCURSOR);
- if(yych <= '*') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy339;
- goto yy53;
- } else {
- if(yych <= ' ') goto yy339;
- if(yych == '(') goto yy342;
- goto yy53;
- }
+ YYDEBUG(339, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 8) YYFILL(8);
+ yych = *YYCURSOR;
+ YYDEBUG(340, *YYCURSOR);
+ if (yych <= '*') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy339;
+ goto yy53;
} else {
- if(yych <= '@') {
- if(yych == ',') goto yy53;
- if(yych >= '.') goto yy53;
- } else {
- if(yych <= 'Z') goto yy343;
- if(yych <= '`') goto yy53;
- if(yych <= 'z') goto yy344;
- goto yy53;
- }
+ if (yych <= ' ') goto yy339;
+ if (yych == '(') goto yy342;
+ goto yy53;
+ }
+ } else {
+ if (yych <= '@') {
+ if (yych == ',') goto yy53;
+ if (yych >= '.') goto yy53;
+ } else {
+ if (yych <= 'Z') goto yy343;
+ if (yych <= '`') goto yy53;
+ if (yych <= 'z') goto yy344;
+ goto yy53;
}
+ }
yy341:
- YYDEBUG(341, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '1') goto yy361;
- if(yych <= '2') goto yy362;
- if(yych <= '9') goto yy363;
- goto yy53;
+ YYDEBUG(341, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '1') goto yy361;
+ if (yych <= '2') goto yy362;
+ if (yych <= '9') goto yy363;
+ goto yy53;
yy342:
- YYDEBUG(342, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') goto yy53;
- if(yych <= 'Z') goto yy344;
- if(yych <= '`') goto yy53;
- if(yych <= 'z') goto yy344;
- goto yy53;
+ YYDEBUG(342, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') goto yy53;
+ if (yych <= 'Z') goto yy344;
+ if (yych <= '`') goto yy53;
+ if (yych <= 'z') goto yy344;
+ goto yy53;
yy343:
- YYDEBUG(343, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy337;
- goto yy332;
- } else {
- if(yych <= 'Z') goto yy345;
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy350;
- goto yy332;
- }
+ YYDEBUG(343, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy337;
+ goto yy332;
+ } else {
+ if (yych <= 'Z') goto yy345;
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy350;
+ goto yy332;
+ }
yy344:
- YYDEBUG(344, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy337;
- goto yy332;
- } else {
- if(yych <= 'Z') goto yy345;
- if(yych <= '`') goto yy332;
- if(yych >= '{') goto yy332;
- }
+ YYDEBUG(344, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy337;
+ goto yy332;
+ } else {
+ if (yych <= 'Z') goto yy345;
+ if (yych <= '`') goto yy332;
+ if (yych >= '{') goto yy332;
+ }
yy345:
- YYDEBUG(345, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy337;
- goto yy332;
- } else {
- if(yych <= 'Z') goto yy346;
- if(yych <= '`') goto yy332;
- if(yych >= '{') goto yy332;
- }
+ YYDEBUG(345, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy337;
+ goto yy332;
+ } else {
+ if (yych <= 'Z') goto yy346;
+ if (yych <= '`') goto yy332;
+ if (yych >= '{') goto yy332;
+ }
yy346:
- YYDEBUG(346, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy337;
- goto yy332;
- } else {
- if(yych <= 'Z') goto yy347;
- if(yych <= '`') goto yy332;
- if(yych >= '{') goto yy332;
- }
+ YYDEBUG(346, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy337;
+ goto yy332;
+ } else {
+ if (yych <= 'Z') goto yy347;
+ if (yych <= '`') goto yy332;
+ if (yych >= '{') goto yy332;
+ }
yy347:
- YYDEBUG(347, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy337;
- goto yy332;
- } else {
- if(yych <= 'Z') goto yy348;
- if(yych <= '`') goto yy332;
- if(yych >= '{') goto yy332;
- }
+ YYDEBUG(347, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy337;
+ goto yy332;
+ } else {
+ if (yych <= 'Z') goto yy348;
+ if (yych <= '`') goto yy332;
+ if (yych >= '{') goto yy332;
+ }
yy348:
- YYDEBUG(348, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy337;
- goto yy332;
- } else {
- if(yych <= 'Z') goto yy349;
- if(yych <= '`') goto yy332;
- if(yych >= '{') goto yy332;
- }
-yy349:
- YYDEBUG(349, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == ')') goto yy337;
+ YYDEBUG(348, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy337;
goto yy332;
+ } else {
+ if (yych <= 'Z') goto yy349;
+ if (yych <= '`') goto yy332;
+ if (yych >= '{') goto yy332;
+ }
+yy349:
+ YYDEBUG(349, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == ')') goto yy337;
+ goto yy332;
yy350:
- YYDEBUG(350, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy332;
- goto yy337;
- } else {
- if(yych == '/') goto yy352;
- goto yy332;
- }
+ YYDEBUG(350, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy332;
+ goto yy337;
+ } else {
+ if (yych == '/') goto yy352;
+ goto yy332;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy346;
+ if (yych <= '^') goto yy332;
+ goto yy352;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy346;
- if(yych <= '^') goto yy332;
- goto yy352;
- } else {
- if(yych <= '`') goto yy332;
- if(yych >= '{') goto yy332;
- }
+ if (yych <= '`') goto yy332;
+ if (yych >= '{') goto yy332;
}
+ }
yy351:
- YYDEBUG(351, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy332;
- goto yy337;
- } else {
- if(yych != '/') goto yy332;
- }
+ YYDEBUG(351, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy332;
+ goto yy337;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy347;
- if(yych <= '^') goto yy332;
- } else {
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy356;
- goto yy332;
- }
+ if (yych != '/') goto yy332;
}
-yy352:
- YYDEBUG(352, *YYCURSOR);
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yych <= '@') goto yy53;
- if(yych >= '[') goto yy53;
- YYDEBUG(353, *YYCURSOR);
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yych <= '`') goto yy53;
- if(yych >= '{') goto yy53;
-yy354:
- YYDEBUG(354, *YYCURSOR);
- yyaccept = 8;
- YYMARKER = ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- YYDEBUG(355, *YYCURSOR);
- if(yych <= '^') {
- if(yych == '/') goto yy352;
- goto yy332;
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy347;
+ if (yych <= '^') goto yy332;
} else {
- if(yych <= '_') goto yy352;
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy354;
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy356;
goto yy332;
}
+ }
+yy352:
+ YYDEBUG(352, *YYCURSOR);
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yych <= '@') goto yy53;
+ if (yych >= '[') goto yy53;
+ YYDEBUG(353, *YYCURSOR);
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yych <= '`') goto yy53;
+ if (yych >= '{') goto yy53;
+yy354:
+ YYDEBUG(354, *YYCURSOR);
+ yyaccept = 8;
+ YYMARKER = ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ YYDEBUG(355, *YYCURSOR);
+ if (yych <= '^') {
+ if (yych == '/') goto yy352;
+ goto yy332;
+ } else {
+ if (yych <= '_') goto yy352;
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy354;
+ goto yy332;
+ }
yy356:
- YYDEBUG(356, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy332;
- goto yy337;
- } else {
- if(yych == '/') goto yy352;
- goto yy332;
- }
- } else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy348;
- if(yych <= '^') goto yy332;
- goto yy352;
- } else {
- if(yych <= '`') goto yy332;
- if(yych >= '{') goto yy332;
- }
+ YYDEBUG(356, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy332;
+ goto yy337;
+ } else {
+ if (yych == '/') goto yy352;
+ goto yy332;
}
- YYDEBUG(357, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy332;
- goto yy337;
- } else {
- if(yych == '/') goto yy352;
- goto yy332;
- }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy348;
+ if (yych <= '^') goto yy332;
+ goto yy352;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy349;
- if(yych <= '^') goto yy332;
- goto yy352;
- } else {
- if(yych <= '`') goto yy332;
- if(yych >= '{') goto yy332;
- }
+ if (yych <= '`') goto yy332;
+ if (yych >= '{') goto yy332;
}
- YYDEBUG(358, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == ')') goto yy337;
- if(yych <= '.') goto yy332;
+ }
+ YYDEBUG(357, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy332;
+ goto yy337;
+ } else {
+ if (yych == '/') goto yy352;
+ goto yy332;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy349;
+ if (yych <= '^') goto yy332;
goto yy352;
} else {
- if(yych <= '_') {
- if(yych <= '^') goto yy332;
- goto yy352;
- } else {
- if(yych <= '`') goto yy332;
- if(yych >= '{') goto yy332;
- }
+ if (yych <= '`') goto yy332;
+ if (yych >= '{') goto yy332;
}
-yy359:
- YYDEBUG(359, *YYCURSOR);
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- YYDEBUG(360, *YYCURSOR);
- if(yych <= '^') {
- if(yych == '/') goto yy352;
- goto yy53;
+ }
+ YYDEBUG(358, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == ')') goto yy337;
+ if (yych <= '.') goto yy332;
+ goto yy352;
+ } else {
+ if (yych <= '_') {
+ if (yych <= '^') goto yy332;
+ goto yy352;
} else {
- if(yych <= '_') goto yy352;
- if(yych <= '`') goto yy53;
- if(yych <= 'z') goto yy359;
- goto yy53;
+ if (yych <= '`') goto yy332;
+ if (yych >= '{') goto yy332;
}
+ }
+yy359:
+ YYDEBUG(359, *YYCURSOR);
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ YYDEBUG(360, *YYCURSOR);
+ if (yych <= '^') {
+ if (yych == '/') goto yy352;
+ goto yy53;
+ } else {
+ if (yych <= '_') goto yy352;
+ if (yych <= '`') goto yy53;
+ if (yych <= 'z') goto yy359;
+ goto yy53;
+ }
yy361:
- YYDEBUG(361, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy332;
- if(yych <= '9') goto yy363;
- if(yych <= ':') goto yy364;
- goto yy332;
+ YYDEBUG(361, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy332;
+ if (yych <= '9') goto yy363;
+ if (yych <= ':') goto yy364;
+ goto yy332;
yy362:
- YYDEBUG(362, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '5') {
- if(yych <= '/') goto yy332;
- if(yych >= '4') goto yy365;
- } else {
- if(yych <= '9') goto yy337;
- if(yych <= ':') goto yy364;
- goto yy332;
- }
+ YYDEBUG(362, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '5') {
+ if (yych <= '/') goto yy332;
+ if (yych >= '4') goto yy365;
+ } else {
+ if (yych <= '9') goto yy337;
+ if (yych <= ':') goto yy364;
+ goto yy332;
+ }
yy363:
- YYDEBUG(363, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy332;
- if(yych <= '5') goto yy365;
- if(yych <= '9') goto yy337;
- if(yych >= ';') goto yy332;
+ YYDEBUG(363, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy332;
+ if (yych <= '5') goto yy365;
+ if (yych <= '9') goto yy337;
+ if (yych >= ';') goto yy332;
yy364:
- YYDEBUG(364, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy332;
- if(yych <= '5') goto yy365;
- if(yych <= '9') goto yy337;
- goto yy332;
+ YYDEBUG(364, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy332;
+ if (yych <= '5') goto yy365;
+ if (yych <= '9') goto yy337;
+ goto yy332;
yy365:
- YYDEBUG(365, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy332;
- if(yych <= '9') goto yy337;
- goto yy332;
+ YYDEBUG(365, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy332;
+ if (yych <= '9') goto yy337;
+ goto yy332;
yy366:
- YYDEBUG(366, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy330;
- goto yy308;
- } else {
- if(yych <= '0') goto yy398;
- if(yych <= '9') goto yy399;
- if(yych <= ':') goto yy330;
- goto yy308;
- }
+ YYDEBUG(366, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy330;
+ goto yy308;
+ } else {
+ if (yych <= '0') goto yy398;
+ if (yych <= '9') goto yy399;
+ if (yych <= ':') goto yy330;
+ goto yy308;
+ }
yy367:
- YYDEBUG(367, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
- } else {
- if(yych <= '2') goto yy399;
- if(yych <= '9') goto yy398;
- if(yych <= ':') goto yy371;
- goto yy308;
- }
+ YYDEBUG(367, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy371;
+ goto yy308;
+ } else {
+ if (yych <= '2') goto yy399;
+ if (yych <= '9') goto yy398;
+ if (yych <= ':') goto yy371;
+ goto yy308;
+ }
yy368:
- YYDEBUG(368, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
- } else {
- if(yych <= '3') goto yy398;
- if(yych <= '9') goto yy370;
- if(yych <= ':') goto yy371;
- goto yy308;
- }
+ YYDEBUG(368, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy371;
+ goto yy308;
+ } else {
+ if (yych <= '3') goto yy398;
+ if (yych <= '9') goto yy370;
+ if (yych <= ':') goto yy371;
+ goto yy308;
+ }
yy369:
- YYDEBUG(369, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
- } else {
- if(yych <= '9') goto yy370;
- if(yych <= ':') goto yy371;
- goto yy308;
- }
-yy370:
- YYDEBUG(370, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy308;
- if(yych <= '9') goto yy396;
+ YYDEBUG(369, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy371;
goto yy308;
+ } else {
+ if (yych <= '9') goto yy370;
+ if (yych <= ':') goto yy371;
+ goto yy308;
+ }
+yy370:
+ YYDEBUG(370, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy308;
+ if (yych <= '9') goto yy396;
+ goto yy308;
yy371:
- YYDEBUG(371, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy372;
- if(yych <= '9') goto yy373;
- goto yy53;
+ YYDEBUG(371, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy372;
+ if (yych <= '9') goto yy373;
+ goto yy53;
yy372:
- YYDEBUG(372, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy374;
- goto yy332;
- } else {
- if(yych <= '9') goto yy389;
- if(yych <= ':') goto yy374;
- goto yy332;
- }
+ YYDEBUG(372, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy374;
+ goto yy332;
+ } else {
+ if (yych <= '9') goto yy389;
+ if (yych <= ':') goto yy374;
+ goto yy332;
+ }
yy373:
- YYDEBUG(373, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy374;
- if(yych != ':') goto yy332;
+ YYDEBUG(373, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy374;
+ if (yych != ':') goto yy332;
yy374:
- YYDEBUG(374, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy375;
- if(yych <= '6') goto yy376;
- if(yych <= '9') goto yy337;
- goto yy53;
+ YYDEBUG(374, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy375;
+ if (yych <= '6') goto yy376;
+ if (yych <= '9') goto yy337;
+ goto yy53;
yy375:
- YYDEBUG(375, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy332;
- if(yych <= '9') goto yy377;
- goto yy332;
+ YYDEBUG(375, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy332;
+ if (yych <= '9') goto yy377;
+ goto yy332;
yy376:
- YYDEBUG(376, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '0') goto yy332;
+ YYDEBUG(376, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '0') goto yy332;
yy377:
- YYDEBUG(377, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '*') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy379;
- goto yy332;
- } else {
- if(yych <= ' ') goto yy379;
- if(yych == '(') goto yy379;
- goto yy332;
- }
+ YYDEBUG(377, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '*') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy379;
+ goto yy332;
} else {
- if(yych <= '@') {
- if(yych == ',') goto yy332;
- if(yych <= '-') goto yy379;
- goto yy332;
- } else {
- if(yych <= 'Z') goto yy379;
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy379;
- goto yy332;
- }
+ if (yych <= ' ') goto yy379;
+ if (yych == '(') goto yy379;
+ goto yy332;
+ }
+ } else {
+ if (yych <= '@') {
+ if (yych == ',') goto yy332;
+ if (yych <= '-') goto yy379;
+ goto yy332;
+ } else {
+ if (yych <= 'Z') goto yy379;
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy379;
+ goto yy332;
}
+ }
yy378:
- YYDEBUG(378, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 8) YYFILL(8);
- yych = *YYCURSOR;
+ YYDEBUG(378, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 8) YYFILL(8);
+ yych = *YYCURSOR;
yy379:
- YYDEBUG(379, *YYCURSOR);
- if(yych <= '-') {
- if(yych <= '\'') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy53;
- goto yy378;
- } else {
- if(yych == ' ') goto yy378;
- goto yy53;
- }
- } else {
- if(yych <= '*') {
- if(yych <= '(') goto yy342;
- goto yy53;
- } else {
- if(yych == ',') goto yy53;
- goto yy341;
- }
+ YYDEBUG(379, *YYCURSOR);
+ if (yych <= '-') {
+ if (yych <= '\'') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy53;
+ goto yy378;
+ } else {
+ if (yych == ' ') goto yy378;
+ goto yy53;
}
} else {
- if(yych <= 'Z') {
- if(yych <= 'A') {
- if(yych <= '@') goto yy53;
- } else {
- if(yych != 'P') goto yy343;
- }
+ if (yych <= '*') {
+ if (yych <= '(') goto yy342;
+ goto yy53;
} else {
- if(yych <= 'o') {
- if(yych <= '`') goto yy53;
- if(yych <= 'a') goto yy381;
- goto yy344;
- } else {
- if(yych <= 'p') goto yy381;
- if(yych <= 'z') goto yy344;
- goto yy53;
- }
+ if (yych == ',') goto yy53;
+ goto yy341;
}
}
- YYDEBUG(380, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'L') {
- if(yych <= '-') {
- if(yych == ')') goto yy337;
- goto yy332;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= 'A') {
+ if (yych <= '@') goto yy53;
} else {
- if(yych <= '.') goto yy382;
- if(yych <= '@') goto yy332;
- goto yy345;
+ if (yych != 'P') goto yy343;
}
} else {
- if(yych <= '`') {
- if(yych <= 'M') goto yy383;
- if(yych <= 'Z') goto yy345;
- goto yy332;
+ if (yych <= 'o') {
+ if (yych <= '`') goto yy53;
+ if (yych <= 'a') goto yy381;
+ goto yy344;
} else {
- if(yych == 'm') goto yy388;
- if(yych <= 'z') goto yy350;
- goto yy332;
+ if (yych <= 'p') goto yy381;
+ if (yych <= 'z') goto yy344;
+ goto yy53;
}
}
+ }
+ YYDEBUG(380, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'L') {
+ if (yych <= '-') {
+ if (yych == ')') goto yy337;
+ goto yy332;
+ } else {
+ if (yych <= '.') goto yy382;
+ if (yych <= '@') goto yy332;
+ goto yy345;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'M') goto yy383;
+ if (yych <= 'Z') goto yy345;
+ goto yy332;
+ } else {
+ if (yych == 'm') goto yy388;
+ if (yych <= 'z') goto yy350;
+ goto yy332;
+ }
+ }
yy381:
- YYDEBUG(381, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'L') {
- if(yych <= '-') {
- if(yych == ')') goto yy337;
- goto yy332;
- } else {
- if(yych <= '.') goto yy382;
- if(yych <= '@') goto yy332;
- goto yy345;
- }
+ YYDEBUG(381, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'L') {
+ if (yych <= '-') {
+ if (yych == ')') goto yy337;
+ goto yy332;
} else {
- if(yych <= '`') {
- if(yych <= 'M') goto yy383;
- if(yych <= 'Z') goto yy345;
- goto yy332;
- } else {
- if(yych == 'm') goto yy383;
- if(yych <= 'z') goto yy345;
- goto yy332;
- }
+ if (yych <= '.') goto yy382;
+ if (yych <= '@') goto yy332;
+ goto yy345;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'M') goto yy383;
+ if (yych <= 'Z') goto yy345;
+ goto yy332;
+ } else {
+ if (yych == 'm') goto yy383;
+ if (yych <= 'z') goto yy345;
+ goto yy332;
}
+ }
yy382:
- YYDEBUG(382, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy387;
- if(yych == 'm') goto yy387;
- goto yy53;
+ YYDEBUG(382, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy387;
+ if (yych == 'm') goto yy387;
+ goto yy53;
yy383:
- YYDEBUG(383, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ')') {
- if(yych <= 0x09) {
- if(yych <= 0x00) goto yy385;
- if(yych <= 0x08) goto yy332;
- goto yy385;
- } else {
- if(yych == ' ') goto yy385;
- if(yych <= '(') goto yy332;
- goto yy337;
- }
- } else {
- if(yych <= '@') {
- if(yych != '.') goto yy332;
- } else {
- if(yych <= 'Z') goto yy346;
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy346;
- goto yy332;
- }
+ YYDEBUG(383, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ')') {
+ if (yych <= '\t') {
+ if (yych <= 0x00) goto yy385;
+ if (yych <= 0x08) goto yy332;
+ goto yy385;
+ } else {
+ if (yych == ' ') goto yy385;
+ if (yych <= '(') goto yy332;
+ goto yy337;
}
-yy384:
- YYDEBUG(384, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x09) {
- if(yych <= 0x00) goto yy385;
- if(yych <= 0x08) goto yy53;
+ } else {
+ if (yych <= '@') {
+ if (yych != '.') goto yy332;
} else {
- if(yych != ' ') goto yy53;
+ if (yych <= 'Z') goto yy346;
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy346;
+ goto yy332;
}
+ }
+yy384:
+ YYDEBUG(384, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '\t') {
+ if (yych <= 0x00) goto yy385;
+ if (yych <= 0x08) goto yy53;
+ } else {
+ if (yych != ' ') goto yy53;
+ }
yy385:
- YYDEBUG(385, *YYCURSOR);
- ++YYCURSOR;
- YYDEBUG(386, *YYCURSOR);
- {
+ YYDEBUG(385, *YYCURSOR);
+ ++YYCURSOR;
+ YYDEBUG(386, *YYCURSOR);
+ {
DEBUG_OUTPUT("dateshortwithtimeshort12 | dateshortwithtimelong12");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -6240,181 +6237,178 @@ yy385:
return TIMELIB_SHORTDATE_WITH_TIME;
}
yy387:
- YYDEBUG(387, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x1F) {
- if(yych <= 0x00) goto yy385;
- if(yych == 0x09) goto yy385;
- goto yy53;
+ YYDEBUG(387, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 0x1F) {
+ if (yych <= 0x00) goto yy385;
+ if (yych == '\t') goto yy385;
+ goto yy53;
+ } else {
+ if (yych <= ' ') goto yy385;
+ if (yych == '.') goto yy384;
+ goto yy53;
+ }
+yy388:
+ YYDEBUG(388, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '-') {
+ if (yych <= 0x1F) {
+ if (yych <= 0x00) goto yy385;
+ if (yych == '\t') goto yy385;
+ goto yy332;
} else {
- if(yych <= ' ') goto yy385;
- if(yych == '.') goto yy384;
- goto yy53;
+ if (yych <= ' ') goto yy385;
+ if (yych == ')') goto yy337;
+ goto yy332;
}
-yy388:
- YYDEBUG(388, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '-') {
- if(yych <= 0x1F) {
- if(yych <= 0x00) goto yy385;
- if(yych == 0x09) goto yy385;
- goto yy332;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '.') goto yy384;
+ if (yych <= '/') goto yy352;
+ if (yych <= '@') goto yy332;
+ goto yy346;
+ } else {
+ if (yych <= '_') {
+ if (yych <= '^') goto yy332;
+ goto yy352;
} else {
- if(yych <= ' ') goto yy385;
- if(yych == ')') goto yy337;
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy351;
goto yy332;
}
- } else {
- if(yych <= 'Z') {
- if(yych <= '.') goto yy384;
- if(yych <= '/') goto yy352;
- if(yych <= '@') goto yy332;
- goto yy346;
- } else {
- if(yych <= '_') {
- if(yych <= '^') goto yy332;
- goto yy352;
- } else {
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy351;
- goto yy332;
- }
- }
}
+ }
yy389:
- YYDEBUG(389, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ':') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy390;
- if(yych <= 0x1F) goto yy332;
- } else {
- if(yych == '.') goto yy374;
- if(yych <= '9') goto yy332;
- goto yy374;
- }
+ YYDEBUG(389, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ':') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy390;
+ if (yych <= 0x1F) goto yy332;
+ } else {
+ if (yych == '.') goto yy374;
+ if (yych <= '9') goto yy332;
+ goto yy374;
+ }
+ } else {
+ if (yych <= 'P') {
+ if (yych == 'A') goto yy392;
+ if (yych <= 'O') goto yy332;
+ goto yy392;
} else {
- if(yych <= 'P') {
- if(yych == 'A') goto yy392;
- if(yych <= 'O') goto yy332;
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy332;
goto yy392;
} else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy332;
- goto yy392;
- } else {
- if(yych == 'p') goto yy392;
- goto yy332;
- }
+ if (yych == 'p') goto yy392;
+ goto yy332;
}
}
+ }
yy390:
- YYDEBUG(390, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
- yych = *YYCURSOR;
- YYDEBUG(391, *YYCURSOR);
- if(yych <= 'A') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy390;
- goto yy53;
- } else {
- if(yych <= ' ') goto yy390;
- if(yych <= '@') goto yy53;
- }
+ YYDEBUG(390, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
+ yych = *YYCURSOR;
+ YYDEBUG(391, *YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy390;
+ goto yy53;
} else {
- if(yych <= '`') {
- if(yych != 'P') goto yy53;
- } else {
- if(yych <= 'a') goto yy392;
- if(yych != 'p') goto yy53;
- }
+ if (yych <= ' ') goto yy390;
+ if (yych <= '@') goto yy53;
}
-yy392:
- YYDEBUG(392, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'L') {
- if(yych != '.') goto yy53;
+ } else {
+ if (yych <= '`') {
+ if (yych != 'P') goto yy53;
} else {
- if(yych <= 'M') goto yy394;
- if(yych == 'm') goto yy394;
- goto yy53;
+ if (yych <= 'a') goto yy392;
+ if (yych != 'p') goto yy53;
}
+ }
+yy392:
+ YYDEBUG(392, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'L') {
+ if (yych != '.') goto yy53;
+ } else {
+ if (yych <= 'M') goto yy394;
+ if (yych == 'm') goto yy394;
+ goto yy53;
+ }
yy393:
- YYDEBUG(393, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy394;
- if(yych != 'm') goto yy53;
+ YYDEBUG(393, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy394;
+ if (yych != 'm') goto yy53;
yy394:
- YYDEBUG(394, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x1F) {
- if(yych <= 0x00) goto yy385;
- if(yych == 0x09) goto yy385;
- goto yy53;
- } else {
- if(yych <= ' ') goto yy385;
- if(yych != '.') goto yy53;
- }
+ YYDEBUG(394, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 0x1F) {
+ if (yych <= 0x00) goto yy385;
+ if (yych == '\t') goto yy385;
+ goto yy53;
+ } else {
+ if (yych <= ' ') goto yy385;
+ if (yych != '.') goto yy53;
+ }
yy395:
- YYDEBUG(395, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x09) {
- if(yych <= 0x00) goto yy385;
- if(yych <= 0x08) goto yy53;
- goto yy385;
- } else {
- if(yych == ' ') goto yy385;
- goto yy53;
- }
+ YYDEBUG(395, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '\t') {
+ if (yych <= 0x00) goto yy385;
+ if (yych <= 0x08) goto yy53;
+ goto yy385;
+ } else {
+ if (yych == ' ') goto yy385;
+ goto yy53;
+ }
yy396:
- YYDEBUG(396, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy308;
- if(yych >= ':') goto yy308;
-yy397:
- YYDEBUG(397, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy308;
+ YYDEBUG(396, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy308;
+ if (yych >= ':') goto yy308;
+ YYDEBUG(397, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy308;
yy398:
- YYDEBUG(398, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy330;
- goto yy308;
- } else {
- if(yych <= '9') goto yy396;
- if(yych <= ':') goto yy330;
- goto yy308;
- }
+ YYDEBUG(398, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy330;
+ goto yy308;
+ } else {
+ if (yych <= '9') goto yy396;
+ if (yych <= ':') goto yy330;
+ goto yy308;
+ }
yy399:
- YYDEBUG(399, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
- } else {
- if(yych <= '9') goto yy396;
- if(yych <= ':') goto yy371;
- goto yy308;
- }
+ YYDEBUG(399, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy371;
+ goto yy308;
+ } else {
+ if (yych <= '9') goto yy396;
+ if (yych <= ':') goto yy371;
+ goto yy308;
+ }
yy400:
- YYDEBUG(400, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy308;
- if(yych >= ':') goto yy308;
+ YYDEBUG(400, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
yy401:
- YYDEBUG(401, *YYCURSOR);
- ++YYCURSOR;
- if((yych = *YYCURSOR) <= '/') goto yy402;
- if(yych <= '9') goto yy397;
+ YYDEBUG(401, *YYCURSOR);
+ ++YYCURSOR;
yy402:
- YYDEBUG(402, *YYCURSOR);
- {
+ YYDEBUG(402, *YYCURSOR);
+ {
DEBUG_OUTPUT("datenoday");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -6426,1241 +6420,1207 @@ yy402:
return TIMELIB_DATE_NO_DAY;
}
yy403:
- YYDEBUG(403, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy330;
- goto yy308;
- } else {
- if(yych <= '9') goto yy401;
- if(yych <= ':') goto yy330;
- goto yy308;
- }
+ YYDEBUG(403, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy330;
+ goto yy53;
+ } else {
+ if (yych <= '9') goto yy401;
+ if (yych <= ':') goto yy330;
+ goto yy53;
+ }
yy404:
- YYDEBUG(404, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
+ YYDEBUG(404, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy371;
+ goto yy53;
+ } else {
+ if (yych <= '9') goto yy401;
+ if (yych <= ':') goto yy371;
+ goto yy53;
+ }
+yy405:
+ YYDEBUG(405, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '/') {
+ if (yych == '.') goto yy438;
+ goto yy325;
} else {
- if(yych <= '9') goto yy401;
- if(yych <= ':') goto yy371;
- goto yy308;
+ if (yych <= '0') goto yy439;
+ if (yych <= '1') goto yy409;
+ if (yych <= '2') goto yy410;
+ goto yy404;
}
-yy405:
- YYDEBUG(405, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '/') {
- if(yych == '.') goto yy440;
- goto yy325;
- } else {
- if(yych <= '0') goto yy441;
- if(yych <= '1') goto yy409;
- if(yych <= '2') goto yy410;
- goto yy411;
- }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= ':') goto yy330;
+ if (yych == 'n') goto yy321;
+ goto yy325;
} else {
- if(yych <= 'q') {
- if(yych <= ':') goto yy330;
- if(yych == 'n') goto yy321;
- goto yy325;
- } else {
- if(yych <= 'r') goto yy322;
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ if (yych <= 'r') goto yy322;
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
}
+ }
yy406:
- YYDEBUG(406, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '/') {
- if(yych != '.') goto yy325;
- } else {
- if(yych <= '0') goto yy408;
- if(yych <= '1') goto yy409;
- if(yych <= '2') goto yy410;
- goto yy411;
- }
- } else {
- if(yych <= 'q') {
- if(yych <= ':') goto yy371;
- if(yych == 'n') goto yy321;
- goto yy325;
- } else {
- if(yych <= 'r') goto yy322;
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ YYDEBUG(406, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '/') {
+ if (yych != '.') goto yy325;
+ } else {
+ if (yych <= '0') goto yy408;
+ if (yych <= '1') goto yy409;
+ if (yych <= '2') goto yy410;
+ goto yy404;
}
-yy407:
- YYDEBUG(407, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '1') {
- if(yych <= '/') goto yy325;
- if(yych <= '0') goto yy415;
- goto yy416;
- } else {
- if(yych <= '2') goto yy417;
- if(yych <= '5') goto yy418;
- if(yych <= '9') goto yy419;
+ } else {
+ if (yych <= 'q') {
+ if (yych <= ':') goto yy371;
+ if (yych == 'n') goto yy321;
+ goto yy325;
+ } else {
+ if (yych <= 'r') goto yy322;
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
goto yy325;
}
+ }
+yy407:
+ YYDEBUG(407, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '1') {
+ if (yych <= '/') goto yy325;
+ if (yych <= '0') goto yy413;
+ goto yy414;
+ } else {
+ if (yych <= '2') goto yy415;
+ if (yych <= '5') goto yy416;
+ if (yych <= '9') goto yy417;
+ goto yy325;
+ }
yy408:
- YYDEBUG(408, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
- } else {
- if(yych <= '0') goto yy413;
- if(yych <= '9') goto yy414;
- if(yych <= ':') goto yy371;
- goto yy308;
- }
+ YYDEBUG(408, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy371;
+ goto yy53;
+ } else {
+ if (yych <= '0') goto yy411;
+ if (yych <= '9') goto yy412;
+ if (yych <= ':') goto yy371;
+ goto yy53;
+ }
yy409:
- YYDEBUG(409, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
- } else {
- if(yych <= '2') goto yy414;
- if(yych <= '9') goto yy413;
- if(yych <= ':') goto yy371;
- goto yy308;
- }
+ YYDEBUG(409, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy371;
+ goto yy53;
+ } else {
+ if (yych <= '2') goto yy412;
+ if (yych <= '9') goto yy411;
+ if (yych <= ':') goto yy371;
+ goto yy53;
+ }
yy410:
- YYDEBUG(410, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
- } else {
- if(yych <= '3') goto yy413;
- if(yych <= '9') goto yy412;
- if(yych <= ':') goto yy371;
- goto yy308;
- }
+ YYDEBUG(410, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy371;
+ goto yy53;
+ } else {
+ if (yych <= '3') goto yy411;
+ if (yych <= '9') goto yy401;
+ if (yych <= ':') goto yy371;
+ goto yy53;
+ }
yy411:
- YYDEBUG(411, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
- } else {
- if(yych <= '9') goto yy412;
- if(yych <= ':') goto yy371;
- goto yy308;
- }
+ YYDEBUG(411, *YYCURSOR);
+ yyaccept = 9;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy330;
+ if (yych == ':') goto yy330;
+ goto yy402;
yy412:
- YYDEBUG(412, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy402;
- if(yych <= '9') goto yy396;
- goto yy402;
+ YYDEBUG(412, *YYCURSOR);
+ yyaccept = 9;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy371;
+ if (yych == ':') goto yy371;
+ goto yy402;
yy413:
- YYDEBUG(413, *YYCURSOR);
- yyaccept = 9;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy330;
- goto yy402;
- } else {
- if(yych <= '9') goto yy396;
- if(yych <= ':') goto yy330;
- goto yy402;
- }
+ YYDEBUG(413, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy433;
+ goto yy308;
+ } else {
+ if (yych <= '0') goto yy432;
+ if (yych <= '9') goto yy437;
+ if (yych <= ':') goto yy433;
+ goto yy308;
+ }
yy414:
- YYDEBUG(414, *YYCURSOR);
- yyaccept = 9;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy402;
- } else {
- if(yych <= '9') goto yy396;
- if(yych <= ':') goto yy371;
- goto yy402;
- }
+ YYDEBUG(414, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy418;
+ goto yy308;
+ } else {
+ if (yych <= '2') goto yy437;
+ if (yych <= '9') goto yy432;
+ if (yych <= ':') goto yy418;
+ goto yy308;
+ }
yy415:
- YYDEBUG(415, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy435;
- goto yy308;
- } else {
- if(yych <= '0') goto yy434;
- if(yych <= '9') goto yy439;
- if(yych <= ':') goto yy435;
- goto yy308;
- }
+ YYDEBUG(415, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy418;
+ goto yy308;
+ } else {
+ if (yych <= '3') goto yy432;
+ if (yych <= '9') goto yy431;
+ if (yych <= ':') goto yy418;
+ goto yy308;
+ }
yy416:
- YYDEBUG(416, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy420;
- goto yy308;
- } else {
- if(yych <= '2') goto yy439;
- if(yych <= '9') goto yy434;
- if(yych <= ':') goto yy420;
- goto yy308;
- }
+ YYDEBUG(416, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy418;
+ goto yy308;
+ } else {
+ if (yych <= '9') goto yy431;
+ if (yych <= ':') goto yy418;
+ goto yy308;
+ }
yy417:
- YYDEBUG(417, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy420;
- goto yy308;
- } else {
- if(yych <= '3') goto yy434;
- if(yych <= '9') goto yy433;
- if(yych <= ':') goto yy420;
- goto yy308;
- }
+ YYDEBUG(417, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych != '.') goto yy308;
+ } else {
+ if (yych <= '9') goto yy370;
+ if (yych >= ';') goto yy308;
+ }
yy418:
- YYDEBUG(418, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy420;
- goto yy308;
- } else {
- if(yych <= '9') goto yy433;
- if(yych <= ':') goto yy420;
- goto yy308;
- }
+ YYDEBUG(418, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy419;
+ if (yych <= '6') goto yy420;
+ if (yych <= '9') goto yy373;
+ goto yy53;
yy419:
- YYDEBUG(419, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych != '.') goto yy308;
- } else {
- if(yych <= '9') goto yy370;
- if(yych >= ';') goto yy308;
- }
+ YYDEBUG(419, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy374;
+ goto yy332;
+ } else {
+ if (yych <= '9') goto yy421;
+ if (yych <= ':') goto yy374;
+ goto yy332;
+ }
yy420:
- YYDEBUG(420, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy421;
- if(yych <= '6') goto yy422;
- if(yych <= '9') goto yy373;
- goto yy53;
+ YYDEBUG(420, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy374;
+ goto yy332;
+ } else {
+ if (yych <= '0') goto yy377;
+ if (yych == ':') goto yy374;
+ goto yy332;
+ }
yy421:
- YYDEBUG(421, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy374;
- goto yy332;
- } else {
- if(yych <= '9') goto yy423;
- if(yych <= ':') goto yy374;
- goto yy332;
+ YYDEBUG(421, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy423;
+ if (yych <= 0x1F) goto yy332;
+ goto yy423;
+ } else {
+ if (yych <= '(') {
+ if (yych <= '\'') goto yy332;
+ goto yy423;
+ } else {
+ if (yych == '+') goto yy423;
+ goto yy332;
+ }
}
-yy422:
- YYDEBUG(422, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy374;
- goto yy332;
- } else {
- if(yych <= '0') goto yy377;
- if(yych == ':') goto yy374;
- goto yy332;
+ } else {
+ if (yych <= ':') {
+ if (yych <= '-') goto yy423;
+ if (yych <= '.') goto yy374;
+ if (yych <= '9') goto yy332;
+ goto yy374;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy332;
+ goto yy423;
+ } else {
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy423;
+ goto yy332;
+ }
}
+ }
+yy422:
+ YYDEBUG(422, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 8) YYFILL(8);
+ yych = *YYCURSOR;
yy423:
- YYDEBUG(423, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy425;
- if(yych <= 0x1F) goto yy332;
- goto yy425;
- } else {
- if(yych <= '(') {
- if(yych <= '\'') goto yy332;
- goto yy425;
- } else {
- if(yych == '+') goto yy425;
- goto yy332;
- }
+ YYDEBUG(423, *YYCURSOR);
+ if (yych <= '-') {
+ if (yych <= '\'') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy53;
+ goto yy422;
+ } else {
+ if (yych == ' ') goto yy422;
+ goto yy53;
}
} else {
- if(yych <= ':') {
- if(yych <= '-') goto yy425;
- if(yych <= '.') goto yy374;
- if(yych <= '9') goto yy332;
- goto yy374;
+ if (yych <= '*') {
+ if (yych <= '(') goto yy342;
+ goto yy53;
} else {
- if(yych <= 'Z') {
- if(yych <= '@') goto yy332;
- goto yy425;
- } else {
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy425;
- goto yy332;
- }
+ if (yych == ',') goto yy53;
+ goto yy341;
}
}
-yy424:
- YYDEBUG(424, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 8) YYFILL(8);
- yych = *YYCURSOR;
-yy425:
- YYDEBUG(425, *YYCURSOR);
- if(yych <= '-') {
- if(yych <= '\'') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy53;
- goto yy424;
- } else {
- if(yych == ' ') goto yy424;
- goto yy53;
- }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= 'A') {
+ if (yych <= '@') goto yy53;
} else {
- if(yych <= '*') {
- if(yych <= '(') goto yy342;
- goto yy53;
- } else {
- if(yych == ',') goto yy53;
- goto yy341;
- }
+ if (yych != 'P') goto yy343;
}
} else {
- if(yych <= 'Z') {
- if(yych <= 'A') {
- if(yych <= '@') goto yy53;
- } else {
- if(yych != 'P') goto yy343;
- }
+ if (yych <= 'o') {
+ if (yych <= '`') goto yy53;
+ if (yych <= 'a') goto yy425;
+ goto yy344;
} else {
- if(yych <= 'o') {
- if(yych <= '`') goto yy53;
- if(yych <= 'a') goto yy427;
- goto yy344;
- } else {
- if(yych <= 'p') goto yy427;
- if(yych <= 'z') goto yy344;
- goto yy53;
- }
+ if (yych <= 'p') goto yy425;
+ if (yych <= 'z') goto yy344;
+ goto yy53;
}
}
- YYDEBUG(426, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'L') {
- if(yych <= '-') {
- if(yych == ')') goto yy337;
- goto yy332;
- } else {
- if(yych <= '.') goto yy429;
- if(yych <= '@') goto yy332;
- goto yy345;
- }
+ }
+ YYDEBUG(424, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'L') {
+ if (yych <= '-') {
+ if (yych == ')') goto yy337;
+ goto yy332;
} else {
- if(yych <= '`') {
- if(yych <= 'M') goto yy428;
- if(yych <= 'Z') goto yy345;
- goto yy332;
- } else {
- if(yych == 'm') goto yy432;
- if(yych <= 'z') goto yy350;
- goto yy332;
- }
+ if (yych <= '.') goto yy427;
+ if (yych <= '@') goto yy332;
+ goto yy345;
}
-yy427:
- YYDEBUG(427, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'L') {
- if(yych <= '-') {
- if(yych == ')') goto yy337;
- goto yy332;
- } else {
- if(yych <= '.') goto yy429;
- if(yych <= '@') goto yy332;
- goto yy345;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'M') goto yy426;
+ if (yych <= 'Z') goto yy345;
+ goto yy332;
} else {
- if(yych <= '`') {
- if(yych <= 'M') goto yy428;
- if(yych <= 'Z') goto yy345;
- goto yy332;
- } else {
- if(yych == 'm') goto yy428;
- if(yych <= 'z') goto yy345;
- goto yy332;
- }
+ if (yych == 'm') goto yy430;
+ if (yych <= 'z') goto yy350;
+ goto yy332;
}
-yy428:
- YYDEBUG(428, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ')') {
- if(yych <= 0x09) {
- if(yych <= 0x00) goto yy385;
- if(yych <= 0x08) goto yy332;
- goto yy385;
- } else {
- if(yych == ' ') goto yy385;
- if(yych <= '(') goto yy332;
- goto yy337;
- }
- } else {
- if(yych <= '@') {
- if(yych == '.') goto yy431;
- goto yy332;
- } else {
- if(yych <= 'Z') goto yy346;
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy346;
- goto yy332;
- }
+ }
+yy425:
+ YYDEBUG(425, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'L') {
+ if (yych <= '-') {
+ if (yych == ')') goto yy337;
+ goto yy332;
+ } else {
+ if (yych <= '.') goto yy427;
+ if (yych <= '@') goto yy332;
+ goto yy345;
}
-yy429:
- YYDEBUG(429, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy430;
- if(yych != 'm') goto yy53;
-yy430:
- YYDEBUG(430, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x1F) {
- if(yych <= 0x00) goto yy385;
- if(yych == 0x09) goto yy385;
- goto yy53;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'M') goto yy426;
+ if (yych <= 'Z') goto yy345;
+ goto yy332;
} else {
- if(yych <= ' ') goto yy385;
- if(yych != '.') goto yy53;
+ if (yych == 'm') goto yy426;
+ if (yych <= 'z') goto yy345;
+ goto yy332;
}
-yy431:
- YYDEBUG(431, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x09) {
- if(yych <= 0x00) goto yy385;
- if(yych <= 0x08) goto yy53;
+ }
+yy426:
+ YYDEBUG(426, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ')') {
+ if (yych <= '\t') {
+ if (yych <= 0x00) goto yy385;
+ if (yych <= 0x08) goto yy332;
goto yy385;
} else {
- if(yych == ' ') goto yy385;
- goto yy53;
+ if (yych == ' ') goto yy385;
+ if (yych <= '(') goto yy332;
+ goto yy337;
}
-yy432:
- YYDEBUG(432, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '-') {
- if(yych <= 0x1F) {
- if(yych <= 0x00) goto yy385;
- if(yych == 0x09) goto yy385;
- goto yy332;
+ } else {
+ if (yych <= '@') {
+ if (yych == '.') goto yy429;
+ goto yy332;
+ } else {
+ if (yych <= 'Z') goto yy346;
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy346;
+ goto yy332;
+ }
+ }
+yy427:
+ YYDEBUG(427, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy428;
+ if (yych != 'm') goto yy53;
+yy428:
+ YYDEBUG(428, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 0x1F) {
+ if (yych <= 0x00) goto yy385;
+ if (yych == '\t') goto yy385;
+ goto yy53;
+ } else {
+ if (yych <= ' ') goto yy385;
+ if (yych != '.') goto yy53;
+ }
+yy429:
+ YYDEBUG(429, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '\t') {
+ if (yych <= 0x00) goto yy385;
+ if (yych <= 0x08) goto yy53;
+ goto yy385;
+ } else {
+ if (yych == ' ') goto yy385;
+ goto yy53;
+ }
+yy430:
+ YYDEBUG(430, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '-') {
+ if (yych <= 0x1F) {
+ if (yych <= 0x00) goto yy385;
+ if (yych == '\t') goto yy385;
+ goto yy332;
+ } else {
+ if (yych <= ' ') goto yy385;
+ if (yych == ')') goto yy337;
+ goto yy332;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '.') goto yy429;
+ if (yych <= '/') goto yy352;
+ if (yych <= '@') goto yy332;
+ goto yy346;
+ } else {
+ if (yych <= '_') {
+ if (yych <= '^') goto yy332;
+ goto yy352;
} else {
- if(yych <= ' ') goto yy385;
- if(yych == ')') goto yy337;
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy351;
goto yy332;
}
- } else {
- if(yych <= 'Z') {
- if(yych <= '.') goto yy431;
- if(yych <= '/') goto yy352;
- if(yych <= '@') goto yy332;
- goto yy346;
+ }
+ }
+yy431:
+ YYDEBUG(431, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ':') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy390;
+ if (yych <= 0x1F) goto yy308;
+ goto yy390;
+ } else {
+ if (yych <= '.') {
+ if (yych <= '-') goto yy308;
+ goto yy374;
} else {
- if(yych <= '_') {
- if(yych <= '^') goto yy332;
- goto yy352;
- } else {
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy351;
- goto yy332;
- }
+ if (yych <= '/') goto yy308;
+ if (yych <= '9') goto yy396;
+ goto yy374;
}
}
-yy433:
- YYDEBUG(433, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ':') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy390;
- if(yych <= 0x1F) goto yy308;
- goto yy390;
- } else {
- if(yych <= '.') {
- if(yych <= '-') goto yy308;
- goto yy374;
- } else {
- if(yych <= '/') goto yy308;
- if(yych <= '9') goto yy396;
- goto yy374;
- }
- }
+ } else {
+ if (yych <= 'P') {
+ if (yych == 'A') goto yy392;
+ if (yych <= 'O') goto yy308;
+ goto yy392;
} else {
- if(yych <= 'P') {
- if(yych == 'A') goto yy392;
- if(yych <= 'O') goto yy308;
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy308;
goto yy392;
} else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy308;
- goto yy392;
- } else {
- if(yych == 'p') goto yy392;
- goto yy308;
- }
+ if (yych == 'p') goto yy392;
+ goto yy308;
}
}
-yy434:
- YYDEBUG(434, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ':') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy390;
- if(yych <= 0x1F) goto yy308;
- goto yy390;
- } else {
- if(yych <= '.') {
- if(yych <= '-') goto yy308;
- } else {
- if(yych <= '/') goto yy308;
- if(yych <= '9') goto yy396;
- }
+ }
+yy432:
+ YYDEBUG(432, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ':') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy390;
+ if (yych <= 0x1F) goto yy308;
+ goto yy390;
+ } else {
+ if (yych <= '.') {
+ if (yych <= '-') goto yy308;
+ } else {
+ if (yych <= '/') goto yy308;
+ if (yych <= '9') goto yy396;
}
+ }
+ } else {
+ if (yych <= 'P') {
+ if (yych == 'A') goto yy392;
+ if (yych <= 'O') goto yy308;
+ goto yy392;
} else {
- if(yych <= 'P') {
- if(yych == 'A') goto yy392;
- if(yych <= 'O') goto yy308;
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy308;
goto yy392;
} else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy308;
- goto yy392;
- } else {
- if(yych == 'p') goto yy392;
- goto yy308;
- }
+ if (yych == 'p') goto yy392;
+ goto yy308;
}
}
+ }
+yy433:
+ YYDEBUG(433, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy434;
+ if (yych <= '6') goto yy435;
+ if (yych <= '9') goto yy333;
+ goto yy53;
+yy434:
+ YYDEBUG(434, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy334;
+ goto yy332;
+ } else {
+ if (yych <= '9') goto yy436;
+ if (yych <= ':') goto yy334;
+ goto yy332;
+ }
yy435:
- YYDEBUG(435, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy436;
- if(yych <= '6') goto yy437;
- if(yych <= '9') goto yy333;
- goto yy53;
+ YYDEBUG(435, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy334;
+ goto yy332;
+ } else {
+ if (yych <= '0') goto yy377;
+ if (yych == ':') goto yy334;
+ goto yy332;
+ }
yy436:
- YYDEBUG(436, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy334;
- goto yy332;
- } else {
- if(yych <= '9') goto yy438;
- if(yych <= ':') goto yy334;
- goto yy332;
- }
-yy437:
- YYDEBUG(437, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy334;
- goto yy332;
- } else {
- if(yych <= '0') goto yy377;
- if(yych == ':') goto yy334;
- goto yy332;
+ YYDEBUG(436, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy379;
+ if (yych <= 0x1F) goto yy332;
+ goto yy379;
+ } else {
+ if (yych <= '(') {
+ if (yych <= '\'') goto yy332;
+ goto yy379;
+ } else {
+ if (yych == '+') goto yy379;
+ goto yy332;
+ }
}
-yy438:
- YYDEBUG(438, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy379;
- if(yych <= 0x1F) goto yy332;
+ } else {
+ if (yych <= ':') {
+ if (yych <= '-') goto yy379;
+ if (yych <= '.') goto yy334;
+ if (yych <= '9') goto yy332;
+ goto yy334;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy332;
goto yy379;
} else {
- if(yych <= '(') {
- if(yych <= '\'') goto yy332;
- goto yy379;
- } else {
- if(yych == '+') goto yy379;
- goto yy332;
- }
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy379;
+ goto yy332;
}
+ }
+ }
+yy437:
+ YYDEBUG(437, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ':') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy390;
+ if (yych <= 0x1F) goto yy308;
+ goto yy390;
} else {
- if(yych <= ':') {
- if(yych <= '-') goto yy379;
- if(yych <= '.') goto yy334;
- if(yych <= '9') goto yy332;
- goto yy334;
+ if (yych <= '.') {
+ if (yych <= '-') goto yy308;
+ goto yy418;
} else {
- if(yych <= 'Z') {
- if(yych <= '@') goto yy332;
- goto yy379;
- } else {
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy379;
- goto yy332;
- }
+ if (yych <= '/') goto yy308;
+ if (yych <= '9') goto yy396;
+ goto yy418;
}
}
-yy439:
- YYDEBUG(439, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ':') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy390;
- if(yych <= 0x1F) goto yy308;
- goto yy390;
- } else {
- if(yych <= '.') {
- if(yych <= '-') goto yy308;
- goto yy420;
- } else {
- if(yych <= '/') goto yy308;
- if(yych <= '9') goto yy396;
- goto yy420;
- }
- }
+ } else {
+ if (yych <= 'P') {
+ if (yych == 'A') goto yy392;
+ if (yych <= 'O') goto yy308;
+ goto yy392;
} else {
- if(yych <= 'P') {
- if(yych == 'A') goto yy392;
- if(yych <= 'O') goto yy308;
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy308;
goto yy392;
} else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy308;
- goto yy392;
- } else {
- if(yych == 'p') goto yy392;
- goto yy308;
- }
+ if (yych == 'p') goto yy392;
+ goto yy308;
}
}
+ }
+yy438:
+ YYDEBUG(438, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '1') {
+ if (yych <= '/') goto yy325;
+ if (yych <= '0') goto yy440;
+ goto yy441;
+ } else {
+ if (yych <= '2') goto yy442;
+ if (yych <= '5') goto yy443;
+ if (yych <= '9') goto yy444;
+ goto yy325;
+ }
+yy439:
+ YYDEBUG(439, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy330;
+ goto yy53;
+ } else {
+ if (yych <= '0') goto yy411;
+ if (yych <= '9') goto yy412;
+ if (yych <= ':') goto yy330;
+ goto yy53;
+ }
yy440:
- YYDEBUG(440, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '1') {
- if(yych <= '/') goto yy325;
- if(yych <= '0') goto yy442;
- goto yy443;
- } else {
- if(yych <= '2') goto yy444;
- if(yych <= '5') goto yy445;
- if(yych <= '9') goto yy446;
- goto yy325;
- }
+ YYDEBUG(440, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy457;
+ goto yy308;
+ } else {
+ if (yych <= '0') goto yy456;
+ if (yych <= '9') goto yy461;
+ if (yych <= ':') goto yy457;
+ goto yy308;
+ }
yy441:
- YYDEBUG(441, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy330;
- goto yy308;
- } else {
- if(yych <= '0') goto yy413;
- if(yych <= '9') goto yy414;
- if(yych <= ':') goto yy330;
- goto yy308;
- }
+ YYDEBUG(441, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy445;
+ goto yy308;
+ } else {
+ if (yych <= '2') goto yy461;
+ if (yych <= '9') goto yy456;
+ if (yych <= ':') goto yy445;
+ goto yy308;
+ }
yy442:
- YYDEBUG(442, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy459;
- goto yy308;
- } else {
- if(yych <= '0') goto yy458;
- if(yych <= '9') goto yy463;
- if(yych <= ':') goto yy459;
- goto yy308;
- }
+ YYDEBUG(442, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy445;
+ goto yy308;
+ } else {
+ if (yych <= '3') goto yy456;
+ if (yych <= '9') goto yy455;
+ if (yych <= ':') goto yy445;
+ goto yy308;
+ }
yy443:
- YYDEBUG(443, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy447;
- goto yy308;
- } else {
- if(yych <= '2') goto yy463;
- if(yych <= '9') goto yy458;
- if(yych <= ':') goto yy447;
- goto yy308;
- }
+ YYDEBUG(443, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy445;
+ goto yy308;
+ } else {
+ if (yych <= '9') goto yy455;
+ if (yych <= ':') goto yy445;
+ goto yy308;
+ }
yy444:
- YYDEBUG(444, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy447;
- goto yy308;
- } else {
- if(yych <= '3') goto yy458;
- if(yych <= '9') goto yy457;
- if(yych <= ':') goto yy447;
- goto yy308;
- }
+ YYDEBUG(444, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych != '.') goto yy308;
+ } else {
+ if (yych <= '9') goto yy370;
+ if (yych >= ';') goto yy308;
+ }
yy445:
- YYDEBUG(445, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy447;
- goto yy308;
- } else {
- if(yych <= '9') goto yy457;
- if(yych <= ':') goto yy447;
- goto yy308;
- }
+ YYDEBUG(445, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy446;
+ if (yych <= '6') goto yy447;
+ if (yych <= '9') goto yy373;
+ goto yy53;
yy446:
- YYDEBUG(446, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych != '.') goto yy308;
- } else {
- if(yych <= '9') goto yy370;
- if(yych >= ';') goto yy308;
- }
+ YYDEBUG(446, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy374;
+ goto yy332;
+ } else {
+ if (yych <= '9') goto yy448;
+ if (yych <= ':') goto yy374;
+ goto yy332;
+ }
yy447:
- YYDEBUG(447, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy448;
- if(yych <= '6') goto yy449;
- if(yych <= '9') goto yy373;
- goto yy53;
+ YYDEBUG(447, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy374;
+ goto yy332;
+ } else {
+ if (yych <= '0') goto yy338;
+ if (yych == ':') goto yy374;
+ goto yy332;
+ }
yy448:
- YYDEBUG(448, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy374;
- goto yy332;
- } else {
- if(yych <= '9') goto yy450;
- if(yych <= ':') goto yy374;
- goto yy332;
+ YYDEBUG(448, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy450;
+ if (yych <= 0x1F) goto yy332;
+ goto yy450;
+ } else {
+ if (yych <= '(') {
+ if (yych <= '\'') goto yy332;
+ goto yy450;
+ } else {
+ if (yych == '+') goto yy450;
+ goto yy332;
+ }
}
-yy449:
- YYDEBUG(449, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy374;
- goto yy332;
- } else {
- if(yych <= '0') goto yy338;
- if(yych == ':') goto yy374;
- goto yy332;
+ } else {
+ if (yych <= ':') {
+ if (yych <= '-') goto yy450;
+ if (yych <= '.') goto yy374;
+ if (yych <= '9') goto yy332;
+ goto yy374;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy332;
+ goto yy450;
+ } else {
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy450;
+ goto yy332;
+ }
}
+ }
+yy449:
+ YYDEBUG(449, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 8) YYFILL(8);
+ yych = *YYCURSOR;
yy450:
- YYDEBUG(450, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy452;
- if(yych <= 0x1F) goto yy332;
- goto yy452;
- } else {
- if(yych <= '(') {
- if(yych <= '\'') goto yy332;
- goto yy452;
- } else {
- if(yych == '+') goto yy452;
- goto yy332;
- }
+ YYDEBUG(450, *YYCURSOR);
+ if (yych <= '-') {
+ if (yych <= '\'') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy53;
+ goto yy449;
+ } else {
+ if (yych == ' ') goto yy449;
+ goto yy53;
}
} else {
- if(yych <= ':') {
- if(yych <= '-') goto yy452;
- if(yych <= '.') goto yy374;
- if(yych <= '9') goto yy332;
- goto yy374;
+ if (yych <= '*') {
+ if (yych <= '(') goto yy342;
+ goto yy53;
} else {
- if(yych <= 'Z') {
- if(yych <= '@') goto yy332;
- goto yy452;
- } else {
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy452;
- goto yy332;
- }
+ if (yych == ',') goto yy53;
+ goto yy341;
}
}
-yy451:
- YYDEBUG(451, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 8) YYFILL(8);
- yych = *YYCURSOR;
-yy452:
- YYDEBUG(452, *YYCURSOR);
- if(yych <= '-') {
- if(yych <= '\'') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy53;
- goto yy451;
- } else {
- if(yych == ' ') goto yy451;
- goto yy53;
- }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= 'A') {
+ if (yych <= '@') goto yy53;
} else {
- if(yych <= '*') {
- if(yych <= '(') goto yy342;
- goto yy53;
- } else {
- if(yych == ',') goto yy53;
- goto yy341;
- }
+ if (yych != 'P') goto yy343;
}
} else {
- if(yych <= 'Z') {
- if(yych <= 'A') {
- if(yych <= '@') goto yy53;
- } else {
- if(yych != 'P') goto yy343;
- }
+ if (yych <= 'o') {
+ if (yych <= '`') goto yy53;
+ if (yych <= 'a') goto yy452;
+ goto yy344;
} else {
- if(yych <= 'o') {
- if(yych <= '`') goto yy53;
- if(yych <= 'a') goto yy454;
- goto yy344;
- } else {
- if(yych <= 'p') goto yy454;
- if(yych <= 'z') goto yy344;
- goto yy53;
- }
+ if (yych <= 'p') goto yy452;
+ if (yych <= 'z') goto yy344;
+ goto yy53;
}
}
- YYDEBUG(453, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'L') {
- if(yych <= '-') {
- if(yych == ')') goto yy337;
- goto yy332;
- } else {
- if(yych <= '.') goto yy393;
- if(yych <= '@') goto yy332;
- goto yy345;
- }
+ }
+ YYDEBUG(451, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'L') {
+ if (yych <= '-') {
+ if (yych == ')') goto yy337;
+ goto yy332;
} else {
- if(yych <= '`') {
- if(yych <= 'M') goto yy455;
- if(yych <= 'Z') goto yy345;
- goto yy332;
- } else {
- if(yych == 'm') goto yy456;
- if(yych <= 'z') goto yy350;
- goto yy332;
- }
+ if (yych <= '.') goto yy393;
+ if (yych <= '@') goto yy332;
+ goto yy345;
}
-yy454:
- YYDEBUG(454, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'L') {
- if(yych <= '-') {
- if(yych == ')') goto yy337;
- goto yy332;
- } else {
- if(yych <= '.') goto yy393;
- if(yych <= '@') goto yy332;
- goto yy345;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'M') goto yy453;
+ if (yych <= 'Z') goto yy345;
+ goto yy332;
} else {
- if(yych <= '`') {
- if(yych <= 'M') goto yy455;
- if(yych <= 'Z') goto yy345;
- goto yy332;
- } else {
- if(yych == 'm') goto yy455;
- if(yych <= 'z') goto yy345;
- goto yy332;
- }
- }
-yy455:
- YYDEBUG(455, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ')') {
- if(yych <= 0x09) {
- if(yych <= 0x00) goto yy385;
- if(yych <= 0x08) goto yy332;
- goto yy385;
- } else {
- if(yych == ' ') goto yy385;
- if(yych <= '(') goto yy332;
- goto yy337;
- }
- } else {
- if(yych <= '@') {
- if(yych == '.') goto yy395;
- goto yy332;
- } else {
- if(yych <= 'Z') goto yy346;
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy346;
- goto yy332;
- }
+ if (yych == 'm') goto yy454;
+ if (yych <= 'z') goto yy350;
+ goto yy332;
}
-yy456:
- YYDEBUG(456, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '-') {
- if(yych <= 0x1F) {
- if(yych <= 0x00) goto yy385;
- if(yych == 0x09) goto yy385;
- goto yy332;
- } else {
- if(yych <= ' ') goto yy385;
- if(yych == ')') goto yy337;
- goto yy332;
- }
+ }
+yy452:
+ YYDEBUG(452, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'L') {
+ if (yych <= '-') {
+ if (yych == ')') goto yy337;
+ goto yy332;
} else {
- if(yych <= 'Z') {
- if(yych <= '.') goto yy395;
- if(yych <= '/') goto yy352;
- if(yych <= '@') goto yy332;
- goto yy346;
- } else {
- if(yych <= '_') {
- if(yych <= '^') goto yy332;
- goto yy352;
- } else {
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy351;
- goto yy332;
- }
- }
+ if (yych <= '.') goto yy393;
+ if (yych <= '@') goto yy332;
+ goto yy345;
}
-yy457:
- YYDEBUG(457, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy334;
- goto yy308;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'M') goto yy453;
+ if (yych <= 'Z') goto yy345;
+ goto yy332;
} else {
- if(yych <= '9') goto yy396;
- if(yych <= ':') goto yy334;
- goto yy308;
+ if (yych == 'm') goto yy453;
+ if (yych <= 'z') goto yy345;
+ goto yy332;
}
-yy458:
- YYDEBUG(458, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych != '.') goto yy308;
+ }
+yy453:
+ YYDEBUG(453, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ')') {
+ if (yych <= '\t') {
+ if (yych <= 0x00) goto yy385;
+ if (yych <= 0x08) goto yy332;
+ goto yy385;
} else {
- if(yych <= '9') goto yy396;
- if(yych >= ';') goto yy308;
+ if (yych == ' ') goto yy385;
+ if (yych <= '(') goto yy332;
+ goto yy337;
}
-yy459:
- YYDEBUG(459, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy460;
- if(yych <= '6') goto yy461;
- if(yych <= '9') goto yy333;
- goto yy53;
-yy460:
- YYDEBUG(460, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy334;
+ } else {
+ if (yych <= '@') {
+ if (yych == '.') goto yy395;
goto yy332;
} else {
- if(yych <= '9') goto yy462;
- if(yych <= ':') goto yy334;
+ if (yych <= 'Z') goto yy346;
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy346;
goto yy332;
}
-yy461:
- YYDEBUG(461, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy334;
+ }
+yy454:
+ YYDEBUG(454, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '-') {
+ if (yych <= 0x1F) {
+ if (yych <= 0x00) goto yy385;
+ if (yych == '\t') goto yy385;
goto yy332;
} else {
- if(yych <= '0') goto yy338;
- if(yych == ':') goto yy334;
+ if (yych <= ' ') goto yy385;
+ if (yych == ')') goto yy337;
goto yy332;
}
-yy462:
- YYDEBUG(462, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy339;
- if(yych <= 0x1F) goto yy332;
- goto yy339;
- } else {
- if(yych <= '(') {
- if(yych <= '\'') goto yy332;
- goto yy342;
- } else {
- if(yych == '+') goto yy341;
- goto yy332;
- }
- }
- } else {
- if(yych <= ':') {
- if(yych <= '-') goto yy341;
- if(yych <= '.') goto yy334;
- if(yych <= '9') goto yy332;
- goto yy334;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '.') goto yy395;
+ if (yych <= '/') goto yy352;
+ if (yych <= '@') goto yy332;
+ goto yy346;
+ } else {
+ if (yych <= '_') {
+ if (yych <= '^') goto yy332;
+ goto yy352;
} else {
- if(yych <= 'Z') {
- if(yych <= '@') goto yy332;
- goto yy343;
- } else {
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy344;
- goto yy332;
- }
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy351;
+ goto yy332;
+ }
+ }
+ }
+yy455:
+ YYDEBUG(455, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy334;
+ goto yy308;
+ } else {
+ if (yych <= '9') goto yy396;
+ if (yych <= ':') goto yy334;
+ goto yy308;
+ }
+yy456:
+ YYDEBUG(456, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych != '.') goto yy308;
+ } else {
+ if (yych <= '9') goto yy396;
+ if (yych >= ';') goto yy308;
+ }
+yy457:
+ YYDEBUG(457, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy458;
+ if (yych <= '6') goto yy459;
+ if (yych <= '9') goto yy333;
+ goto yy53;
+yy458:
+ YYDEBUG(458, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy334;
+ goto yy332;
+ } else {
+ if (yych <= '9') goto yy460;
+ if (yych <= ':') goto yy334;
+ goto yy332;
+ }
+yy459:
+ YYDEBUG(459, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy334;
+ goto yy332;
+ } else {
+ if (yych <= '0') goto yy338;
+ if (yych == ':') goto yy334;
+ goto yy332;
+ }
+yy460:
+ YYDEBUG(460, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy339;
+ if (yych <= 0x1F) goto yy332;
+ goto yy339;
+ } else {
+ if (yych <= '(') {
+ if (yych <= '\'') goto yy332;
+ goto yy342;
+ } else {
+ if (yych == '+') goto yy341;
+ goto yy332;
+ }
+ }
+ } else {
+ if (yych <= ':') {
+ if (yych <= '-') goto yy341;
+ if (yych <= '.') goto yy334;
+ if (yych <= '9') goto yy332;
+ goto yy334;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy332;
+ goto yy343;
+ } else {
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy344;
+ goto yy332;
}
}
+ }
+yy461:
+ YYDEBUG(461, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy445;
+ goto yy308;
+ } else {
+ if (yych <= '9') goto yy396;
+ if (yych <= ':') goto yy445;
+ goto yy308;
+ }
+yy462:
+ YYDEBUG(462, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '/') {
+ if (yych == '.') goto yy407;
+ goto yy325;
+ } else {
+ if (yych <= '0') goto yy439;
+ if (yych <= '1') goto yy409;
+ if (yych <= '2') goto yy410;
+ goto yy404;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= ':') goto yy371;
+ if (yych == 'n') goto yy321;
+ goto yy325;
+ } else {
+ if (yych <= 'r') goto yy322;
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
+ }
+ }
yy463:
- YYDEBUG(463, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy447;
- goto yy308;
+ YYDEBUG(463, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '/') {
+ if (yych == '.') goto yy407;
+ goto yy325;
+ } else {
+ if (yych <= '0') goto yy439;
+ if (yych <= '1') goto yy409;
+ if (yych <= '2') goto yy410;
+ goto yy404;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= ':') goto yy371;
+ if (yych == 'n') goto yy321;
+ goto yy325;
} else {
- if(yych <= '9') goto yy396;
- if(yych <= ':') goto yy447;
- goto yy308;
+ if (yych <= 'r') goto yy322;
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
}
+ }
yy464:
- YYDEBUG(464, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '/') {
- if(yych == '.') goto yy407;
- goto yy325;
- } else {
- if(yych <= '0') goto yy441;
- if(yych <= '1') goto yy409;
- if(yych <= '2') goto yy410;
- goto yy411;
- }
+ YYDEBUG(464, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'm') {
+ if (yych <= '1') {
+ if (yych <= '/') goto yy325;
+ if (yych <= '0') goto yy467;
+ goto yy468;
+ } else {
+ if (yych <= '2') goto yy475;
+ if (yych <= '9') goto yy476;
+ goto yy325;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'n') goto yy321;
+ if (yych <= 'q') goto yy325;
+ goto yy322;
} else {
- if(yych <= 'q') {
- if(yych <= ':') goto yy371;
- if(yych == 'n') goto yy321;
- goto yy325;
- } else {
- if(yych <= 'r') goto yy322;
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
}
+ }
yy465:
- YYDEBUG(465, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '/') {
- if(yych == '.') goto yy407;
- goto yy325;
- } else {
- if(yych <= '0') goto yy441;
- if(yych <= '1') goto yy409;
- if(yych <= '2') goto yy410;
- goto yy411;
- }
+ YYDEBUG(465, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'm') {
+ if (yych <= '1') {
+ if (yych <= '/') goto yy325;
+ if (yych <= '0') goto yy467;
+ goto yy468;
+ } else {
+ if (yych <= '2') goto yy475;
+ if (yych <= '9') goto yy476;
+ goto yy325;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'n') goto yy321;
+ if (yych <= 'q') goto yy325;
+ goto yy322;
} else {
- if(yych <= 'q') {
- if(yych <= ':') goto yy371;
- if(yych == 'n') goto yy321;
- goto yy325;
- } else {
- if(yych <= 'r') goto yy322;
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
}
+ }
yy466:
- YYDEBUG(466, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'm') {
- if(yych <= '1') {
- if(yych <= '/') goto yy325;
- if(yych <= '0') goto yy469;
- goto yy470;
- } else {
- if(yych <= '2') goto yy477;
- if(yych <= '9') goto yy478;
- goto yy325;
- }
+ YYDEBUG(466, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'm') {
+ if (yych <= '1') {
+ if (yych <= '/') goto yy325;
+ if (yych >= '1') goto yy468;
+ } else {
+ if (yych <= '2') goto yy318;
+ if (yych <= '9') goto yy319;
+ goto yy325;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'n') goto yy321;
+ if (yych <= 'q') goto yy325;
+ goto yy322;
} else {
- if(yych <= 'r') {
- if(yych <= 'n') goto yy321;
- if(yych <= 'q') goto yy325;
- goto yy322;
- } else {
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
}
+ }
yy467:
- YYDEBUG(467, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'm') {
- if(yych <= '1') {
- if(yych <= '/') goto yy325;
- if(yych <= '0') goto yy469;
- goto yy470;
- } else {
- if(yych <= '2') goto yy477;
- if(yych <= '9') goto yy478;
- goto yy325;
- }
+ YYDEBUG(467, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '/') {
+ if (yych <= ',') goto yy325;
+ if (yych <= '-') goto yy469;
+ if (yych <= '.') goto yy438;
+ goto yy325;
} else {
- if(yych <= 'r') {
- if(yych <= 'n') goto yy321;
- if(yych <= 'q') goto yy325;
- goto yy322;
- } else {
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ if (yych <= '0') goto yy439;
+ if (yych <= '1') goto yy409;
+ if (yych <= '2') goto yy410;
+ goto yy404;
}
+ } else {
+ if (yych <= 'q') {
+ if (yych <= ':') goto yy330;
+ if (yych == 'n') goto yy321;
+ goto yy325;
+ } else {
+ if (yych <= 'r') goto yy322;
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
+ }
+ }
yy468:
- YYDEBUG(468, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'm') {
- if(yych <= '1') {
- if(yych <= '/') goto yy325;
- if(yych >= '1') goto yy470;
- } else {
- if(yych <= '2') goto yy318;
- if(yych <= '9') goto yy319;
- goto yy325;
- }
+ YYDEBUG(468, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '/') {
+ if (yych <= ',') goto yy325;
+ if (yych <= '-') goto yy469;
+ if (yych <= '.') goto yy407;
+ goto yy325;
} else {
- if(yych <= 'r') {
- if(yych <= 'n') goto yy321;
- if(yych <= 'q') goto yy325;
- goto yy322;
- } else {
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ if (yych <= '0') goto yy408;
+ if (yych <= '1') goto yy409;
+ if (yych <= '2') goto yy410;
+ goto yy404;
}
-yy469:
- YYDEBUG(469, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '/') {
- if(yych <= ',') goto yy325;
- if(yych <= '-') goto yy471;
- if(yych <= '.') goto yy440;
- goto yy325;
- } else {
- if(yych <= '0') goto yy441;
- if(yych <= '1') goto yy409;
- if(yych <= '2') goto yy410;
- goto yy411;
- }
- } else {
- if(yych <= 'q') {
- if(yych <= ':') goto yy330;
- if(yych == 'n') goto yy321;
- goto yy325;
- } else {
- if(yych <= 'r') goto yy322;
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
- }
-yy470:
- YYDEBUG(470, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '/') {
- if(yych <= ',') goto yy325;
- if(yych <= '-') goto yy471;
- if(yych <= '.') goto yy407;
- goto yy325;
- } else {
- if(yych <= '0') goto yy408;
- if(yych <= '1') goto yy409;
- if(yych <= '2') goto yy410;
- goto yy411;
- }
- } else {
- if(yych <= 'q') {
- if(yych <= ':') goto yy371;
- if(yych == 'n') goto yy321;
- goto yy325;
- } else {
- if(yych <= 'r') goto yy322;
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= ':') goto yy371;
+ if (yych == 'n') goto yy321;
+ goto yy325;
+ } else {
+ if (yych <= 'r') goto yy322;
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
}
+ }
+yy469:
+ YYDEBUG(469, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(470, *YYCURSOR);
+ ++YYCURSOR;
+ if ((yych = *YYCURSOR) <= '/') goto yy471;
+ if (yych <= '9') goto yy472;
yy471:
- YYDEBUG(471, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- YYDEBUG(472, *YYCURSOR);
- ++YYCURSOR;
- if((yych = *YYCURSOR) <= '/') goto yy473;
- if(yych <= '9') goto yy474;
-yy473:
- YYDEBUG(473, *YYCURSOR);
- {
+ YYDEBUG(471, *YYCURSOR);
+ {
DEBUG_OUTPUT("pgtextshort");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -7671,1887 +7631,1887 @@ yy473:
TIMELIB_DEINIT;
return TIMELIB_PG_TEXT;
}
-yy474:
- YYDEBUG(474, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy473;
- if(yych >= ':') goto yy473;
- YYDEBUG(475, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy473;
- if(yych >= ':') goto yy473;
- YYDEBUG(476, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy473;
+yy472:
+ YYDEBUG(472, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy471;
+ if (yych >= ':') goto yy471;
+ YYDEBUG(473, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy471;
+ if (yych >= ':') goto yy471;
+ YYDEBUG(474, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy471;
+yy475:
+ YYDEBUG(475, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '/') {
+ if (yych <= ',') goto yy325;
+ if (yych <= '-') goto yy469;
+ if (yych <= '.') goto yy407;
+ goto yy325;
+ } else {
+ if (yych <= '0') goto yy439;
+ if (yych <= '1') goto yy409;
+ if (yych <= '2') goto yy410;
+ goto yy404;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= ':') goto yy371;
+ if (yych == 'n') goto yy321;
+ goto yy325;
+ } else {
+ if (yych <= 'r') goto yy322;
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
+ }
+ }
+yy476:
+ YYDEBUG(476, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '/') {
+ if (yych <= ',') goto yy325;
+ if (yych <= '-') goto yy469;
+ if (yych <= '.') goto yy407;
+ goto yy325;
+ } else {
+ if (yych <= '0') goto yy439;
+ if (yych <= '1') goto yy409;
+ if (yych <= '2') goto yy410;
+ goto yy404;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= ':') goto yy371;
+ if (yych == 'n') goto yy321;
+ goto yy325;
+ } else {
+ if (yych <= 'r') goto yy322;
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
+ }
+ }
yy477:
- YYDEBUG(477, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '/') {
- if(yych <= ',') goto yy325;
- if(yych <= '-') goto yy471;
- if(yych <= '.') goto yy407;
- goto yy325;
- } else {
- if(yych <= '0') goto yy441;
- if(yych <= '1') goto yy409;
- if(yych <= '2') goto yy410;
- goto yy411;
- }
+ YYDEBUG(477, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'C') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'q') {
- if(yych <= ':') goto yy371;
- if(yych == 'n') goto yy321;
- goto yy325;
- } else {
- if(yych <= 'r') goto yy322;
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'B') goto yy138;
+ goto yy302;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'c') goto yy478;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
+ }
+ }
yy478:
- YYDEBUG(478, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '/') {
- if(yych <= ',') goto yy325;
- if(yych <= '-') goto yy471;
- if(yych <= '.') goto yy407;
- goto yy325;
+ YYDEBUG(478, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '0') goto yy441;
- if(yych <= '1') goto yy409;
- if(yych <= '2') goto yy410;
- goto yy411;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= 'q') {
- if(yych <= ':') goto yy371;
- if(yych == 'n') goto yy321;
- goto yy325;
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych <= 'r') goto yy322;
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
-yy479:
- YYDEBUG(479, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'C') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'D') {
+ if (yych <= '@') goto yy303;
+ goto yy139;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'B') goto yy138;
- goto yy302;
+ if (yych <= 'E') goto yy311;
+ if (yych <= 'Z') goto yy139;
+ goto yy303;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 'd') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy148;
} else {
- if(yych == 'c') goto yy480;
- if(yych <= 'z') goto yy143;
- goto yy3;
+ if (yych <= 'e') goto yy479;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
+ }
+yy479:
+ YYDEBUG(479, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'M') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'L') goto yy140;
+ goto yy312;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'm') goto yy480;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy480:
- YYDEBUG(480, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
- }
+ YYDEBUG(480, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'B') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '^') {
- if(yych <= 'D') {
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'E') goto yy311;
- if(yych <= 'Z') goto yy139;
- goto yy303;
- }
- } else {
- if(yych <= 'd') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy148;
- } else {
- if(yych <= 'e') goto yy481;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'A') goto yy141;
+ goto yy313;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'b') goto yy481;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy481:
- YYDEBUG(481, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'M') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'L') goto yy140;
- goto yy312;
- }
+ YYDEBUG(481, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'm') goto yy482;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'D') goto yy3;
+ goto yy314;
}
-yy482:
- YYDEBUG(482, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'B') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'A') goto yy141;
- goto yy313;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'b') goto yy483;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych == 'e') goto yy482;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
+ }
+yy482:
+ YYDEBUG(482, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy315;
+ if (yych != 'r') goto yy152;
yy483:
- YYDEBUG(483, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'D') goto yy3;
- goto yy314;
- }
+ YYDEBUG(483, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy305;
+ goto yy303;
+ } else {
+ if (yych <= ' ') goto yy305;
+ if (yych <= ',') goto yy303;
+ goto yy305;
+ }
+ } else {
+ if (yych <= '^') {
+ if (yych <= '/') goto yy144;
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'e') goto yy484;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ if (yych <= 'z') goto yy151;
+ goto yy303;
}
+ }
yy484:
- YYDEBUG(484, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy315;
- if(yych != 'r') goto yy152;
+ YYDEBUG(484, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy138;
+ }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 't') goto yy485;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
yy485:
- YYDEBUG(485, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy305;
- goto yy303;
- } else {
- if(yych <= ' ') goto yy305;
- if(yych <= ',') goto yy303;
+ YYDEBUG(485, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
goto yy305;
+ } else {
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= '^') {
- if(yych <= '/') goto yy144;
- if(yych <= '9') goto yy305;
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
goto yy303;
} else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- if(yych <= 'z') goto yy151;
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
goto yy303;
}
}
-yy486:
- YYDEBUG(486, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy138;
+ if (yych != 'O') goto yy139;
}
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
+ if (yych <= 'n') {
+ if (yych <= '`') goto yy303;
+ goto yy139;
} else {
- if(yych <= 't') goto yy487;
- if(yych <= 'z') goto yy138;
- goto yy3;
+ if (yych <= 'o') goto yy486;
+ if (yych <= 'z') goto yy139;
+ goto yy303;
}
}
+ }
+yy486:
+ YYDEBUG(486, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'B') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'A') goto yy140;
+ }
+ } else {
+ if (yych <= 'a') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'b') goto yy487;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
+ }
+ }
yy487:
- YYDEBUG(487, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy303;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- goto yy303;
- }
- }
+ YYDEBUG(487, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych != 'O') goto yy139;
- }
- } else {
- if(yych <= 'n') {
- if(yych <= '`') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'o') goto yy488;
- if(yych <= 'z') goto yy139;
- goto yy303;
- }
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy141;
}
-yy488:
- YYDEBUG(488, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'B') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'A') goto yy140;
- }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
} else {
- if(yych <= 'a') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'b') goto yy489;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= 'e') goto yy488;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
+yy488:
+ YYDEBUG(488, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Q') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'R') goto yy315;
+ if (yych == 'r') goto yy315;
+ goto yy3;
+ }
yy489:
- YYDEBUG(489, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy141;
- }
+ YYDEBUG(489, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'e') goto yy490;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy138;
+ goto yy485;
}
-yy490:
- YYDEBUG(490, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Q') {
- if(yych == ')') goto yy136;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
goto yy3;
} else {
- if(yych <= 'R') goto yy315;
- if(yych == 'r') goto yy315;
+ if (yych == 't') goto yy490;
+ if (yych <= 'z') goto yy143;
goto yy3;
}
-yy491:
- YYDEBUG(491, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
+ }
+yy490:
+ YYDEBUG(490, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy138;
- goto yy487;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych == 't') goto yy492;
- if(yych <= 'z') goto yy143;
- goto yy3;
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
-yy492:
- YYDEBUG(492, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'N') {
+ if (yych <= '@') goto yy303;
+ goto yy139;
} else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
+ if (yych <= 'O') goto yy486;
+ if (yych <= 'Z') goto yy139;
+ goto yy303;
}
} else {
- if(yych <= '^') {
- if(yych <= 'N') {
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'O') goto yy488;
- if(yych <= 'Z') goto yy139;
- goto yy303;
- }
+ if (yych <= 'n') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy148;
} else {
- if(yych <= 'n') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy148;
- } else {
- if(yych <= 'o') goto yy493;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
+ if (yych <= 'o') goto yy491;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
+ }
+yy491:
+ YYDEBUG(491, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'B') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'A') goto yy140;
+ goto yy487;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'b') goto yy492;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
+yy492:
+ YYDEBUG(492, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy141;
+ goto yy488;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'e') goto yy493;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
+ }
+ }
yy493:
- YYDEBUG(493, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'B') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'A') goto yy140;
- goto yy489;
- }
+ YYDEBUG(493, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'R') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= '/') goto yy144;
+ if (yych <= 'Q') goto yy3;
+ goto yy315;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'r') goto yy483;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
+ }
+ }
+yy494:
+ YYDEBUG(494, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'V') {
+ if (yych <= 'B') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'O') {
+ if (yych <= 'C') goto yy510;
+ goto yy138;
} else {
- if(yych == 'b') goto yy494;
- if(yych <= 'z') goto yy149;
- goto yy3;
+ if (yych <= 'P') goto yy509;
+ if (yych <= 'U') goto yy138;
+ goto yy511;
}
}
-yy494:
- YYDEBUG(494, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
+ } else {
+ if (yych <= 'o') {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
goto yy3;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy141;
- goto yy490;
+ if (yych == 'c') goto yy510;
+ goto yy138;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 'u') {
+ if (yych <= 'p') goto yy509;
+ goto yy138;
} else {
- if(yych == 'e') goto yy495;
- if(yych <= 'z') goto yy150;
+ if (yych <= 'v') goto yy511;
+ if (yych <= 'z') goto yy138;
goto yy3;
}
}
+ }
yy495:
- YYDEBUG(495, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'R') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'Q') goto yy3;
- goto yy315;
- }
+ YYDEBUG(495, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'r') goto yy485;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy138;
+ goto yy504;
+ }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 't') goto yy504;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
+ }
yy496:
- YYDEBUG(496, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'V') {
- if(yych <= 'B') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'O') {
- if(yych <= 'C') goto yy512;
- goto yy138;
- } else {
- if(yych <= 'P') goto yy511;
- if(yych <= 'U') goto yy138;
- goto yy513;
- }
- }
+ YYDEBUG(496, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'X') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'o') {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- goto yy3;
- } else {
- if(yych == 'c') goto yy512;
- goto yy138;
- }
- } else {
- if(yych <= 'u') {
- if(yych <= 'p') goto yy511;
- goto yy138;
- } else {
- if(yych <= 'v') goto yy513;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'W') goto yy138;
+ goto yy502;
+ }
+ } else {
+ if (yych <= 'w') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'x') goto yy502;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
+ }
yy497:
- YYDEBUG(497, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy138;
- goto yy506;
- }
+ YYDEBUG(497, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 't') goto yy506;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy138;
}
+ } else {
+ if (yych <= 'm') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'n') goto yy498;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
yy498:
- YYDEBUG(498, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'X') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'W') goto yy138;
- goto yy504;
- }
+ YYDEBUG(498, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy276;
+ goto yy136;
} else {
- if(yych <= 'w') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'x') goto yy504;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy276;
+ if (yych <= 'C') goto yy139;
+ }
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy276;
+ goto yy139;
+ } else {
+ if (yych <= 'd') goto yy499;
+ if (yych <= 'z') goto yy139;
+ goto yy276;
}
+ }
yy499:
- YYDEBUG(499, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy138;
- }
+ YYDEBUG(499, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ goto yy3;
} else {
- if(yych <= 'm') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'n') goto yy500;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= 'a') goto yy500;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy500:
- YYDEBUG(500, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy276;
- goto yy136;
- } else {
- if(yych <= '@') goto yy276;
- if(yych <= 'C') goto yy139;
- }
+ YYDEBUG(500, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Y') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'c') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy276;
- goto yy139;
- } else {
- if(yych <= 'd') goto yy501;
- if(yych <= 'z') goto yy139;
- goto yy276;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'X') goto yy141;
}
-yy501:
- YYDEBUG(501, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- } else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy502;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ } else {
+ if (yych <= 'x') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
+ } else {
+ if (yych <= 'y') goto yy501;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
+yy501:
+ YYDEBUG(501, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == ')') goto yy136;
+ goto yy276;
yy502:
- YYDEBUG(502, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Y') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'X') goto yy141;
- }
+ YYDEBUG(502, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'x') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'y') goto yy503;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
}
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 't') goto yy503;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
+ }
+ }
yy503:
- YYDEBUG(503, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == ')') goto yy136;
- goto yy276;
+ YYDEBUG(503, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'H') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy140;
+ goto yy263;
+ }
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'h') goto yy263;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
+ }
+ }
yy504:
- YYDEBUG(504, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- }
+ YYDEBUG(504, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy276;
+ goto yy136;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 't') goto yy505;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy276;
+ if (yych <= 'T') goto yy139;
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy276;
+ goto yy139;
+ } else {
+ if (yych <= 'u') goto yy505;
+ if (yych <= 'z') goto yy139;
+ goto yy276;
}
+ }
yy505:
- YYDEBUG(505, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'H') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy140;
- goto yy263;
- }
+ YYDEBUG(505, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'g') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'h') goto yy263;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy140;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'r') goto yy506;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy506:
- YYDEBUG(506, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= ')') {
- if(yych <= '(') goto yy276;
- goto yy136;
- } else {
- if(yych <= '@') goto yy276;
- if(yych <= 'T') goto yy139;
- }
+ YYDEBUG(506, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 't') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy276;
- goto yy139;
- } else {
- if(yych <= 'u') goto yy507;
- if(yych <= 'z') goto yy139;
- goto yy276;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy141;
+ }
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
+ } else {
+ if (yych <= 'd') goto yy507;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
yy507:
- YYDEBUG(507, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ YYDEBUG(507, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'A') goto yy508;
+ if (yych != 'a') goto yy3;
+ }
+yy508:
+ YYDEBUG(508, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy282;
+ if (yych == 'y') goto yy282;
+ goto yy53;
+yy509:
+ YYDEBUG(509, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy140;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= 'q') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
+ goto yy303;
} else {
- if(yych <= 'r') goto yy508;
- if(yych <= 'z') goto yy140;
- goto yy3;
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
+ goto yy303;
}
}
-yy508:
- YYDEBUG(508, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy141;
+ if (yych == 'T') goto yy518;
+ goto yy139;
}
} else {
- if(yych <= 'c') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
+ if (yych <= 's') {
+ if (yych <= '`') goto yy303;
+ goto yy139;
} else {
- if(yych <= 'd') goto yy509;
- if(yych <= 'z') goto yy141;
- goto yy3;
+ if (yych <= 't') goto yy518;
+ if (yych <= 'z') goto yy139;
+ goto yy303;
}
}
-yy509:
- YYDEBUG(509, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
+ }
+yy510:
+ YYDEBUG(510, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'A') goto yy510;
- if(yych != 'a') goto yy3;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'N') goto yy139;
+ goto yy515;
}
-yy510:
- YYDEBUG(510, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy282;
- if(yych == 'y') goto yy282;
- goto yy53;
+ } else {
+ if (yych <= 'n') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 'o') goto yy515;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
+ }
+ }
yy511:
- YYDEBUG(511, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy303;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- goto yy303;
- }
- }
+ YYDEBUG(511, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych == 'T') goto yy520;
- goto yy139;
- }
- } else {
- if(yych <= 's') {
- if(yych <= '`') goto yy303;
- goto yy139;
- } else {
- if(yych <= 't') goto yy520;
- if(yych <= 'z') goto yy139;
- goto yy303;
- }
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy139;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 'e') goto yy512;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
+ }
yy512:
- YYDEBUG(512, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'N') goto yy139;
- goto yy517;
- }
+ YYDEBUG(512, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'n') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'o') goto yy517;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy140;
+ }
+ } else {
+ if (yych <= 'm') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'n') goto yy513;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy513:
- YYDEBUG(513, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy139;
- }
+ YYDEBUG(513, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'e') goto yy514;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy141;
}
-yy514:
- YYDEBUG(514, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy140;
- }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
} else {
- if(yych <= 'm') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'n') goto yy515;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= 't') goto yy514;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
+yy514:
+ YYDEBUG(514, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'G') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'H') goto yy160;
+ if (yych == 'h') goto yy160;
+ goto yy3;
+ }
yy515:
- YYDEBUG(515, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy141;
- }
+ YYDEBUG(515, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 't') goto yy516;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy140;
}
-yy516:
- YYDEBUG(516, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'G') {
- if(yych == ')') goto yy136;
+ } else {
+ if (yych <= 'm') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'n') goto yy516;
+ if (yych <= 'z') goto yy140;
goto yy3;
+ }
+ }
+yy516:
+ YYDEBUG(516, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy141;
+ }
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
} else {
- if(yych <= 'H') goto yy160;
- if(yych == 'h') goto yy160;
+ if (yych <= 'd') goto yy517;
+ if (yych <= 'z') goto yy141;
goto yy3;
}
+ }
yy517:
- YYDEBUG(517, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ YYDEBUG(517, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy161;
+ goto yy3;
+ } else {
+ if (yych <= ' ') goto yy161;
+ if (yych == ')') goto yy136;
+ goto yy3;
+ }
+yy518:
+ YYDEBUG(518, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy140;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= 'm') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
+ goto yy303;
} else {
- if(yych <= 'n') goto yy518;
- if(yych <= 'z') goto yy140;
- goto yy3;
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
+ goto yy303;
}
}
-yy518:
- YYDEBUG(518, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy141;
+ if (yych != 'E') goto yy140;
}
} else {
- if(yych <= 'c') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
+ if (yych <= 'd') {
+ if (yych <= '`') goto yy303;
+ goto yy140;
} else {
- if(yych <= 'd') goto yy519;
- if(yych <= 'z') goto yy141;
- goto yy3;
+ if (yych <= 'e') goto yy519;
+ if (yych <= 'z') goto yy140;
+ goto yy303;
}
}
+ }
yy519:
- YYDEBUG(519, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy161;
- goto yy3;
+ YYDEBUG(519, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'M') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'L') goto yy141;
+ }
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
} else {
- if(yych <= ' ') goto yy161;
- if(yych == ')') goto yy136;
+ if (yych <= 'm') goto yy520;
+ if (yych <= 'z') goto yy141;
goto yy3;
}
+ }
yy520:
- YYDEBUG(520, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
+ YYDEBUG(520, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'B') goto yy521;
+ if (yych != 'b') goto yy3;
+ }
+yy521:
+ YYDEBUG(521, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy522;
+ if (yych != 'e') goto yy53;
+yy522:
+ YYDEBUG(522, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy315;
+ if (yych == 'r') goto yy315;
+ goto yy53;
+yy523:
+ YYDEBUG(523, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy303;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- goto yy303;
- }
+ if (yych == '/') goto yy144;
+ goto yy3;
}
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych != 'E') goto yy140;
- }
+ if (yych <= 'O') {
+ if (yych == 'C') goto yy510;
+ goto yy138;
} else {
- if(yych <= 'd') {
- if(yych <= '`') goto yy303;
- goto yy140;
- } else {
- if(yych <= 'e') goto yy521;
- if(yych <= 'z') goto yy140;
- goto yy303;
- }
+ if (yych <= 'P') goto yy509;
+ if (yych <= 'U') goto yy138;
+ goto yy511;
}
}
-yy521:
- YYDEBUG(521, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'M') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'c') {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '^') goto yy3;
+ goto yy144;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'L') goto yy141;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'b') goto yy143;
+ goto yy539;
}
} else {
- if(yych <= 'l') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
+ if (yych <= 'u') {
+ if (yych == 'p') goto yy538;
+ goto yy143;
} else {
- if(yych <= 'm') goto yy522;
- if(yych <= 'z') goto yy141;
+ if (yych <= 'v') goto yy540;
+ if (yych <= 'z') goto yy143;
goto yy3;
}
}
-yy522:
- YYDEBUG(522, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
+ }
+yy524:
+ YYDEBUG(524, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
goto yy3;
} else {
- if(yych <= 'B') goto yy523;
- if(yych != 'b') goto yy3;
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy138;
+ goto yy504;
}
-yy523:
- YYDEBUG(523, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy524;
- if(yych != 'e') goto yy53;
-yy524:
- YYDEBUG(524, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy315;
- if(yych == 'r') goto yy315;
- goto yy53;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy533;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
+ }
+ }
yy525:
- YYDEBUG(525, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych == '/') goto yy144;
- goto yy3;
- }
- } else {
- if(yych <= 'O') {
- if(yych == 'C') goto yy512;
- goto yy138;
- } else {
- if(yych <= 'P') goto yy511;
- if(yych <= 'U') goto yy138;
- goto yy513;
- }
- }
+ YYDEBUG(525, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'X') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'c') {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'b') goto yy143;
- goto yy541;
- }
- } else {
- if(yych <= 'u') {
- if(yych == 'p') goto yy540;
- goto yy143;
- } else {
- if(yych <= 'v') goto yy542;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'W') goto yy138;
+ goto yy502;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'x') goto yy531;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
+ }
+ }
yy526:
- YYDEBUG(526, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy138;
- goto yy506;
- }
+ YYDEBUG(526, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy535;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy138;
+ goto yy498;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'n') goto yy527;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
+ }
yy527:
- YYDEBUG(527, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'X') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'W') goto yy138;
- goto yy504;
- }
+ YYDEBUG(527, *YYCURSOR);
+ yyaccept = 5;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy276;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'x') goto yy533;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy276;
+ if (yych <= 'C') goto yy139;
+ goto yy499;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy276;
+ } else {
+ if (yych == 'd') goto yy528;
+ if (yych <= 'z') goto yy148;
+ goto yy276;
}
+ }
yy528:
- YYDEBUG(528, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy138;
- goto yy500;
- }
+ YYDEBUG(528, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'n') goto yy529;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ goto yy500;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '^') goto yy3;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy3;
+ if (yych <= 'a') goto yy529;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy529:
- YYDEBUG(529, *YYCURSOR);
- yyaccept = 5;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy276;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy276;
- if(yych <= 'C') goto yy139;
- goto yy501;
- }
+ YYDEBUG(529, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'Y') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy276;
- } else {
- if(yych == 'd') goto yy530;
- if(yych <= 'z') goto yy148;
- goto yy276;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'X') goto yy141;
+ goto yy501;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'y') goto yy530;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy530:
- YYDEBUG(530, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'A') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- goto yy502;
- }
+ YYDEBUG(530, *YYCURSOR);
+ yyaccept = 5;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == ')') goto yy136;
+ if (yych <= '.') goto yy276;
+ goto yy144;
+ } else {
+ if (yych <= '_') {
+ if (yych <= '^') goto yy276;
+ goto yy144;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'a') goto yy531;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '`') goto yy276;
+ if (yych <= 'z') goto yy151;
+ goto yy276;
}
+ }
yy531:
- YYDEBUG(531, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'Y') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'X') goto yy141;
- goto yy503;
- }
+ YYDEBUG(531, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'y') goto yy532;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
+ goto yy503;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy532;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy532:
- YYDEBUG(532, *YYCURSOR);
- yyaccept = 5;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == ')') goto yy136;
- if(yych <= '.') goto yy276;
- goto yy144;
+ YYDEBUG(532, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'H') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '_') {
- if(yych <= '^') goto yy276;
- goto yy144;
- } else {
- if(yych <= '`') goto yy276;
- if(yych <= 'z') goto yy151;
- goto yy276;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy140;
+ goto yy263;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'h') goto yy273;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy533:
- YYDEBUG(533, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- goto yy505;
- }
+ YYDEBUG(533, *YYCURSOR);
+ yyaccept = 5;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'U') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy276;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy534;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy276;
+ if (yych <= 'T') goto yy139;
+ goto yy505;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy276;
+ } else {
+ if (yych == 'u') goto yy534;
+ if (yych <= 'z') goto yy148;
+ goto yy276;
+ }
+ }
yy534:
- YYDEBUG(534, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'H') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy140;
- goto yy263;
- }
+ YYDEBUG(534, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'R') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'h') goto yy273;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy140;
+ goto yy506;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'r') goto yy535;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy535:
- YYDEBUG(535, *YYCURSOR);
- yyaccept = 5;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'U') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy276;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy276;
- if(yych <= 'T') goto yy139;
- goto yy507;
- }
+ YYDEBUG(535, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy276;
- } else {
- if(yych == 'u') goto yy536;
- if(yych <= 'z') goto yy148;
- goto yy276;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy141;
+ goto yy507;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'd') goto yy536;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy536:
- YYDEBUG(536, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'R') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy140;
- goto yy508;
- }
+ YYDEBUG(536, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'r') goto yy537;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ goto yy508;
}
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych <= 'a') goto yy537;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
+ }
+ }
yy537:
- YYDEBUG(537, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
+ YYDEBUG(537, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy282;
+ if (yych == 'y') goto yy295;
+ goto yy152;
+yy538:
+ YYDEBUG(538, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy141;
- goto yy509;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych == 'd') goto yy538;
- if(yych <= 'z') goto yy150;
- goto yy3;
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
-yy538:
- YYDEBUG(538, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'A') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'S') {
+ if (yych <= '@') goto yy303;
+ goto yy139;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- goto yy510;
+ if (yych <= 'T') goto yy518;
+ if (yych <= 'Z') goto yy139;
+ goto yy303;
}
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 's') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy148;
} else {
- if(yych <= 'a') goto yy539;
- if(yych <= 'z') goto yy151;
- goto yy3;
+ if (yych <= 't') goto yy547;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
+ }
yy539:
- YYDEBUG(539, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy282;
- if(yych == 'y') goto yy295;
- goto yy152;
+ YYDEBUG(539, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'O') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'N') goto yy139;
+ goto yy515;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'o') goto yy544;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
+ }
+ }
yy540:
- YYDEBUG(540, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
- }
+ YYDEBUG(540, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '^') {
- if(yych <= 'S') {
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'T') goto yy520;
- if(yych <= 'Z') goto yy139;
- goto yy303;
- }
- } else {
- if(yych <= 's') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy148;
- } else {
- if(yych <= 't') goto yy549;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy139;
+ goto yy512;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'e') goto yy541;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy541:
- YYDEBUG(541, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'O') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'N') goto yy139;
- goto yy517;
- }
+ YYDEBUG(541, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'o') goto yy546;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy140;
+ goto yy513;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'n') goto yy542;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy542:
- YYDEBUG(542, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy139;
- goto yy514;
- }
+ YYDEBUG(542, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'e') goto yy543;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy141;
+ goto yy514;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy543;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy543:
- YYDEBUG(543, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy140;
- goto yy515;
- }
+ YYDEBUG(543, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'H') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'n') goto yy544;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'G') goto yy3;
+ goto yy160;
}
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'h') goto yy247;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
+ }
+ }
yy544:
- YYDEBUG(544, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy141;
- goto yy516;
- }
+ YYDEBUG(544, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy545;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy140;
+ goto yy516;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'n') goto yy545;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy545:
- YYDEBUG(545, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'H') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'G') goto yy3;
- goto yy160;
- }
+ YYDEBUG(545, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'h') goto yy247;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy141;
+ goto yy517;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'd') goto yy546;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy546:
- YYDEBUG(546, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy140;
- goto yy518;
- }
+ YYDEBUG(546, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ')') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy161;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'n') goto yy547;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= ' ') goto yy161;
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ }
+ } else {
+ if (yych <= '^') {
+ if (yych == '/') goto yy144;
+ goto yy3;
+ } else {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
+ }
yy547:
- YYDEBUG(547, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
+ YYDEBUG(547, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy141;
- goto yy519;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych == 'd') goto yy548;
- if(yych <= 'z') goto yy150;
- goto yy3;
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
-yy548:
- YYDEBUG(548, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ')') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy161;
- goto yy3;
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'D') {
+ if (yych <= '@') goto yy303;
+ goto yy140;
} else {
- if(yych <= ' ') goto yy161;
- if(yych <= '(') goto yy3;
- goto yy136;
+ if (yych <= 'E') goto yy519;
+ if (yych <= 'Z') goto yy140;
+ goto yy303;
}
} else {
- if(yych <= '^') {
- if(yych == '/') goto yy144;
- goto yy3;
+ if (yych <= 'd') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy149;
} else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy151;
- goto yy3;
+ if (yych <= 'e') goto yy548;
+ if (yych <= 'z') goto yy149;
+ goto yy303;
}
}
-yy549:
- YYDEBUG(549, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
- }
+ }
+yy548:
+ YYDEBUG(548, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'M') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '^') {
- if(yych <= 'D') {
- if(yych <= '@') goto yy303;
- goto yy140;
- } else {
- if(yych <= 'E') goto yy521;
- if(yych <= 'Z') goto yy140;
- goto yy303;
- }
- } else {
- if(yych <= 'd') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy149;
- } else {
- if(yych <= 'e') goto yy550;
- if(yych <= 'z') goto yy149;
- goto yy303;
- }
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'L') goto yy141;
+ goto yy520;
}
-yy550:
- YYDEBUG(550, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'M') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'L') goto yy141;
- goto yy522;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'm') goto yy551;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych == 'm') goto yy549;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
-yy551:
- YYDEBUG(551, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'B') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'A') goto yy3;
- goto yy523;
- }
+ }
+yy549:
+ YYDEBUG(549, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'B') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'b') goto yy552;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'A') goto yy3;
+ goto yy521;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'b') goto yy550;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
+ }
+yy550:
+ YYDEBUG(550, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy522;
+ if (yych != 'e') goto yy152;
+ YYDEBUG(551, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy315;
+ if (yych == 'r') goto yy483;
+ goto yy152;
yy552:
- YYDEBUG(552, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy524;
- if(yych != 'e') goto yy152;
- YYDEBUG(553, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy315;
- if(yych == 'r') goto yy485;
- goto yy152;
-yy554:
- YYDEBUG(554, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'G') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'F') goto yy138;
- goto yy562;
- }
+ YYDEBUG(552, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'G') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'f') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'g') goto yy562;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'F') goto yy138;
+ goto yy560;
}
-yy555:
- YYDEBUG(555, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy138;
- goto yy559;
- }
+ } else {
+ if (yych <= 'f') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
} else {
- if(yych <= 'q') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'r') goto yy559;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= 'g') goto yy560;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
-yy556:
- YYDEBUG(556, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'N') goto yy138;
- }
+ }
+yy553:
+ YYDEBUG(553, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy138;
+ goto yy557;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
} else {
- if(yych <= 'n') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'o') goto yy557;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= 'r') goto yy557;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
-yy557:
- YYDEBUG(557, *YYCURSOR);
- ++YYCURSOR;
- if((yych = *YYCURSOR) <= '@') {
- if(yych == ')') goto yy136;
+ }
+yy554:
+ YYDEBUG(554, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy558;
- if(yych <= 'z') goto yy139;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'N') goto yy138;
}
-yy558:
- YYDEBUG(558, *YYCURSOR);
- {
+ } else {
+ if (yych <= 'n') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'o') goto yy555;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
+yy555:
+ YYDEBUG(555, *YYCURSOR);
+ ++YYCURSOR;
+ if ((yych = *YYCURSOR) <= '@') {
+ if (yych == ')') goto yy136;
+ } else {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy556;
+ if (yych <= 'z') goto yy139;
+ }
+yy556:
+ YYDEBUG(556, *YYCURSOR);
+ {
DEBUG_OUTPUT("ago");
TIMELIB_INIT;
s->time->relative.y = 0 - s->time->relative.y;
@@ -9567,2601 +9527,2601 @@ yy558:
TIMELIB_DEINIT;
return TIMELIB_AGO;
}
-yy559:
- YYDEBUG(559, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
+yy557:
+ YYDEBUG(557, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy303;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- goto yy303;
- }
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych != 'I') goto yy139;
- }
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
+ goto yy303;
} else {
- if(yych <= 'h') {
- if(yych <= '`') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'i') goto yy560;
- if(yych <= 'z') goto yy139;
- goto yy303;
- }
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
+ goto yy303;
}
}
-yy560:
- YYDEBUG(560, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'L') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'K') goto yy140;
+ if (yych != 'I') goto yy139;
}
} else {
- if(yych <= 'k') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
+ if (yych <= 'h') {
+ if (yych <= '`') goto yy303;
+ goto yy139;
} else {
- if(yych <= 'l') goto yy561;
- if(yych <= 'z') goto yy140;
- goto yy3;
+ if (yych <= 'i') goto yy558;
+ if (yych <= 'z') goto yy139;
+ goto yy303;
}
}
-yy561:
- YYDEBUG(561, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy305;
- goto yy303;
+ }
+yy558:
+ YYDEBUG(558, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'L') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'K') goto yy140;
+ }
+ } else {
+ if (yych <= 'k') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'l') goto yy559;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
+ }
+ }
+yy559:
+ YYDEBUG(559, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy305;
+ goto yy303;
+ } else {
+ if (yych <= ' ') goto yy305;
+ if (yych == ')') goto yy136;
+ goto yy303;
+ }
+ } else {
+ if (yych <= '@') {
+ if (yych == '/') goto yy303;
+ if (yych <= '9') goto yy305;
+ goto yy303;
+ } else {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy303;
+ if (yych <= 'z') goto yy141;
+ goto yy303;
+ }
+ }
+yy560:
+ YYDEBUG(560, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= ' ') goto yy305;
- if(yych == ')') goto yy136;
+ if (yych == ' ') goto yy305;
goto yy303;
}
} else {
- if(yych <= '@') {
- if(yych == '/') goto yy303;
- if(yych <= '9') goto yy305;
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
goto yy303;
} else {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy303;
- if(yych <= 'z') goto yy141;
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
goto yy303;
}
}
-yy562:
- YYDEBUG(562, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy303;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- goto yy303;
- }
+ if (yych != 'U') goto yy139;
}
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych != 'U') goto yy139;
- }
+ if (yych <= 't') {
+ if (yych <= '`') goto yy303;
+ goto yy139;
} else {
- if(yych <= 't') {
- if(yych <= '`') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'u') goto yy563;
- if(yych <= 'z') goto yy139;
- goto yy303;
- }
+ if (yych <= 'u') goto yy561;
+ if (yych <= 'z') goto yy139;
+ goto yy303;
}
}
+ }
+yy561:
+ YYDEBUG(561, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'S') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy140;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 's') goto yy562;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
+ }
+ }
+yy562:
+ YYDEBUG(562, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy141;
+ }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
+ } else {
+ if (yych <= 't') goto yy563;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
+ }
+ }
yy563:
- YYDEBUG(563, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'S') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy140;
- }
+ YYDEBUG(563, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= 'r') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 's') goto yy564;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych == ' ') goto yy305;
+ goto yy303;
+ }
+ } else {
+ if (yych <= '.') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy305;
+ } else {
+ if (yych <= '/') goto yy303;
+ if (yych <= '9') goto yy305;
+ goto yy303;
}
+ }
yy564:
- YYDEBUG(564, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy141;
- }
+ YYDEBUG(564, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'G') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 't') goto yy565;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'F') goto yy138;
+ goto yy560;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'g') goto yy571;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
+ }
yy565:
- YYDEBUG(565, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
+ YYDEBUG(565, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'R') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '.') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy305;
- } else {
- if(yych <= '/') goto yy303;
- if(yych <= '9') goto yy305;
- goto yy303;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy138;
+ goto yy557;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'r') goto yy568;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
+ }
+ }
yy566:
- YYDEBUG(566, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'G') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'F') goto yy138;
- goto yy562;
- }
+ YYDEBUG(566, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'O') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'g') goto yy573;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'N') goto yy138;
+ goto yy555;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'o') goto yy567;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
+ }
yy567:
- YYDEBUG(567, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'R') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy138;
- goto yy559;
- }
+ YYDEBUG(567, *YYCURSOR);
+ yyaccept = 10;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy556;
+ goto yy136;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'r') goto yy570;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych == '/') goto yy144;
+ goto yy556;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '^') goto yy556;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy556;
+ if (yych <= 'z') goto yy148;
+ goto yy556;
}
+ }
yy568:
- YYDEBUG(568, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'O') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
+ YYDEBUG(568, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'N') goto yy138;
- goto yy557;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych == 'o') goto yy569;
- if(yych <= 'z') goto yy143;
- goto yy3;
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
-yy569:
- YYDEBUG(569, *YYCURSOR);
- yyaccept = 10;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy558;
- goto yy136;
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'H') {
+ if (yych <= '@') goto yy303;
+ goto yy139;
} else {
- if(yych == '/') goto yy144;
- goto yy558;
+ if (yych <= 'I') goto yy558;
+ if (yych <= 'Z') goto yy139;
+ goto yy303;
}
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '^') goto yy558;
- goto yy144;
+ if (yych <= 'h') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy148;
} else {
- if(yych <= '`') goto yy558;
- if(yych <= 'z') goto yy148;
- goto yy558;
+ if (yych <= 'i') goto yy569;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
+ }
+yy569:
+ YYDEBUG(569, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'L') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'K') goto yy140;
+ goto yy559;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'l') goto yy570;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy570:
- YYDEBUG(570, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
- }
+ YYDEBUG(570, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy305;
+ if (yych <= 0x1F) goto yy303;
+ goto yy305;
} else {
- if(yych <= '^') {
- if(yych <= 'H') {
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'I') goto yy560;
- if(yych <= 'Z') goto yy139;
- goto yy303;
- }
+ if (yych == ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy305;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '/') goto yy144;
+ if (yych <= '9') goto yy305;
+ if (yych <= '@') goto yy303;
+ goto yy141;
+ } else {
+ if (yych <= '_') {
+ if (yych <= '^') goto yy303;
+ goto yy144;
} else {
- if(yych <= 'h') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy148;
- } else {
- if(yych <= 'i') goto yy571;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
+ if (yych <= '`') goto yy303;
+ if (yych <= 'z') goto yy150;
+ goto yy303;
}
}
+ }
yy571:
- YYDEBUG(571, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'L') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
+ YYDEBUG(571, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'K') goto yy140;
- goto yy561;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych == 'l') goto yy572;
- if(yych <= 'z') goto yy149;
- goto yy3;
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
-yy572:
- YYDEBUG(572, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy305;
- if(yych <= 0x1F) goto yy303;
- goto yy305;
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'T') {
+ if (yych <= '@') goto yy303;
+ goto yy139;
} else {
- if(yych == ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy305;
+ if (yych <= 'U') goto yy561;
+ if (yych <= 'Z') goto yy139;
+ goto yy303;
}
} else {
- if(yych <= 'Z') {
- if(yych <= '/') goto yy144;
- if(yych <= '9') goto yy305;
- if(yych <= '@') goto yy303;
- goto yy141;
+ if (yych <= 't') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy148;
} else {
- if(yych <= '_') {
- if(yych <= '^') goto yy303;
- goto yy144;
- } else {
- if(yych <= '`') goto yy303;
- if(yych <= 'z') goto yy150;
- goto yy303;
- }
+ if (yych <= 'u') goto yy572;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
+ }
+yy572:
+ YYDEBUG(572, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy140;
+ goto yy562;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 's') goto yy573;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy573:
- YYDEBUG(573, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
- }
+ YYDEBUG(573, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '^') {
- if(yych <= 'T') {
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'U') goto yy563;
- if(yych <= 'Z') goto yy139;
- goto yy303;
- }
- } else {
- if(yych <= 't') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy148;
- } else {
- if(yych <= 'u') goto yy574;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy141;
+ goto yy563;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy574;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy574:
- YYDEBUG(574, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy140;
- goto yy564;
- }
+ YYDEBUG(574, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy305;
+ goto yy303;
+ } else {
+ if (yych <= ' ') goto yy305;
+ if (yych == ')') goto yy136;
+ goto yy303;
+ }
+ } else {
+ if (yych <= '^') {
+ if (yych == '/') goto yy144;
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 's') goto yy575;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ if (yych <= 'z') goto yy151;
+ goto yy303;
}
+ }
yy575:
- YYDEBUG(575, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy141;
- goto yy565;
- }
+ YYDEBUG(575, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'B') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy576;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'A') goto yy138;
+ goto yy589;
+ }
+ } else {
+ if (yych <= 'a') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'b') goto yy589;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
+ }
yy576:
- YYDEBUG(576, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy305;
- goto yy303;
- } else {
- if(yych <= ' ') goto yy305;
- if(yych == ')') goto yy136;
- goto yy303;
- }
+ YYDEBUG(576, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '^') {
- if(yych == '/') goto yy144;
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- if(yych <= 'z') goto yy151;
- goto yy303;
- }
+ if (yych == 'F') goto yy586;
+ if (yych <= 'Q') goto yy138;
+ goto yy585;
+ }
+ } else {
+ if (yych <= 'f') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'e') goto yy138;
+ goto yy586;
+ } else {
+ if (yych == 'r') goto yy585;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
+ }
yy577:
- YYDEBUG(577, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'B') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'A') goto yy138;
- goto yy591;
- }
+ YYDEBUG(577, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'a') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'b') goto yy591;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'T') goto yy138;
+ goto yy582;
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'u') goto yy582;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
+ }
yy578:
- YYDEBUG(578, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych == 'F') goto yy588;
- if(yych <= 'Q') goto yy138;
- goto yy587;
- }
+ YYDEBUG(578, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'I') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'f') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- if(yych <= 'e') goto yy138;
- goto yy588;
- } else {
- if(yych == 'r') goto yy587;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'H') goto yy138;
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'i') goto yy579;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
+ }
yy579:
- YYDEBUG(579, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'T') goto yy138;
- goto yy584;
- }
+ YYDEBUG(579, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy276;
+ goto yy136;
} else {
- if(yych <= 't') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'u') goto yy584;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy276;
+ if (yych <= 'C') goto yy139;
+ }
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy276;
+ goto yy139;
+ } else {
+ if (yych <= 'd') goto yy580;
+ if (yych <= 'z') goto yy139;
+ goto yy276;
}
+ }
yy580:
- YYDEBUG(580, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'I') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'H') goto yy138;
- }
+ YYDEBUG(580, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ goto yy3;
} else {
- if(yych <= 'h') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'i') goto yy581;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= 'a') goto yy581;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy581:
- YYDEBUG(581, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy276;
- goto yy136;
- } else {
- if(yych <= '@') goto yy276;
- if(yych <= 'C') goto yy139;
- }
+ YYDEBUG(581, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Y') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'c') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy276;
- goto yy139;
- } else {
- if(yych <= 'd') goto yy582;
- if(yych <= 'z') goto yy139;
- goto yy276;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'X') goto yy141;
+ goto yy501;
+ }
+ } else {
+ if (yych <= 'x') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
+ } else {
+ if (yych <= 'y') goto yy501;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
yy582:
- YYDEBUG(582, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- } else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy583;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ YYDEBUG(582, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy139;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 'r') goto yy583;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
+ }
yy583:
- YYDEBUG(583, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Y') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'X') goto yy141;
- goto yy503;
- }
+ YYDEBUG(583, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'x') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'y') goto yy503;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy140;
+ }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 't') goto yy584;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy584:
- YYDEBUG(584, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy139;
- }
+ YYDEBUG(584, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'H') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'q') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'r') goto yy585;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy141;
+ goto yy517;
}
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
+ } else {
+ if (yych <= 'h') goto yy517;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
+ }
+ }
yy585:
- YYDEBUG(585, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy140;
- }
+ YYDEBUG(585, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'S') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 't') goto yy586;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy139;
+ goto yy588;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 's') goto yy588;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
+ }
yy586:
- YYDEBUG(586, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'H') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy141;
- goto yy519;
- }
+ YYDEBUG(586, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'g') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'h') goto yy519;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
}
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 't') goto yy587;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
+ }
+ }
yy587:
- YYDEBUG(587, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'S') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy139;
- goto yy590;
- }
+ YYDEBUG(587, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'H') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'r') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 's') goto yy590;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy140;
+ goto yy263;
+ }
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'h') goto yy263;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy588:
- YYDEBUG(588, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- }
+ YYDEBUG(588, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 't') goto yy589;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy140;
+ goto yy263;
}
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 't') goto yy263;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
+ }
+ }
yy589:
- YYDEBUG(589, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'H') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ YYDEBUG(589, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy140;
- goto yy263;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= 'g') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
+ goto yy303;
} else {
- if(yych <= 'h') goto yy263;
- if(yych <= 'z') goto yy140;
- goto yy3;
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
+ goto yy303;
}
}
-yy590:
- YYDEBUG(590, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy140;
- goto yy263;
+ if (yych != 'R') goto yy139;
}
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
+ if (yych <= 'q') {
+ if (yych <= '`') goto yy303;
+ goto yy139;
} else {
- if(yych <= 't') goto yy263;
- if(yych <= 'z') goto yy140;
- goto yy3;
+ if (yych <= 'r') goto yy590;
+ if (yych <= 'z') goto yy139;
+ goto yy303;
}
}
-yy591:
- YYDEBUG(591, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy303;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- goto yy303;
- }
- }
+ }
+yy590:
+ YYDEBUG(590, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych != 'R') goto yy139;
- }
- } else {
- if(yych <= 'q') {
- if(yych <= '`') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'r') goto yy592;
- if(yych <= 'z') goto yy139;
- goto yy303;
- }
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'T') goto yy140;
}
-yy592:
- YYDEBUG(592, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'T') goto yy140;
- }
+ } else {
+ if (yych <= 't') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
} else {
- if(yych <= 't') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'u') goto yy593;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= 'u') goto yy591;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
-yy593:
- YYDEBUG(593, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- } else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy594;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ }
+yy591:
+ YYDEBUG(591, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ goto yy3;
+ } else {
+ if (yych <= 'a') goto yy592;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
+yy592:
+ YYDEBUG(592, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'Q') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'R') goto yy593;
+ if (yych != 'r') goto yy3;
+ }
+yy593:
+ YYDEBUG(593, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy315;
+ if (yych == 'y') goto yy315;
+ goto yy53;
yy594:
- YYDEBUG(594, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'Q') {
- if(yych == ')') goto yy136;
+ YYDEBUG(594, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'B') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'A') goto yy138;
+ goto yy589;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
goto yy3;
} else {
- if(yych <= 'R') goto yy595;
- if(yych != 'r') goto yy3;
+ if (yych == 'b') goto yy608;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
+ }
yy595:
- YYDEBUG(595, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy315;
- if(yych == 'y') goto yy315;
- goto yy53;
-yy596:
- YYDEBUG(596, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'B') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
+ YYDEBUG(595, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'R') {
+ if (yych <= '/') {
+ if (yych == ')') goto yy136;
+ if (yych <= '.') goto yy3;
+ goto yy144;
+ } else {
+ if (yych <= 'E') {
+ if (yych <= '@') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'F') goto yy586;
+ if (yych <= 'Q') goto yy138;
+ goto yy585;
+ }
+ }
+ } else {
+ if (yych <= 'e') {
+ if (yych <= '^') {
+ if (yych <= 'Z') goto yy138;
goto yy3;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'A') goto yy138;
- goto yy591;
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy3;
+ goto yy143;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 'q') {
+ if (yych <= 'f') goto yy605;
+ goto yy143;
} else {
- if(yych == 'b') goto yy610;
- if(yych <= 'z') goto yy143;
+ if (yych <= 'r') goto yy604;
+ if (yych <= 'z') goto yy143;
goto yy3;
}
}
+ }
+yy596:
+ YYDEBUG(596, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'U') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'T') goto yy138;
+ goto yy582;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'u') goto yy601;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
+ }
+ }
yy597:
- YYDEBUG(597, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'R') {
- if(yych <= '/') {
- if(yych == ')') goto yy136;
- if(yych <= '.') goto yy3;
- goto yy144;
- } else {
- if(yych <= 'E') {
- if(yych <= '@') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'F') goto yy588;
- if(yych <= 'Q') goto yy138;
- goto yy587;
- }
- }
+ YYDEBUG(597, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'I') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'e') {
- if(yych <= '^') {
- if(yych <= 'Z') goto yy138;
- goto yy3;
- } else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy3;
- goto yy143;
- }
- } else {
- if(yych <= 'q') {
- if(yych <= 'f') goto yy607;
- goto yy143;
- } else {
- if(yych <= 'r') goto yy606;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'H') goto yy138;
+ goto yy579;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'i') goto yy598;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
+ }
yy598:
- YYDEBUG(598, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'U') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'T') goto yy138;
- goto yy584;
- }
+ YYDEBUG(598, *YYCURSOR);
+ yyaccept = 5;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy276;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'u') goto yy603;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy276;
+ if (yych <= 'C') goto yy139;
+ goto yy580;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy276;
+ } else {
+ if (yych == 'd') goto yy599;
+ if (yych <= 'z') goto yy148;
+ goto yy276;
+ }
+ }
yy599:
- YYDEBUG(599, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'I') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'H') goto yy138;
- goto yy581;
- }
+ YYDEBUG(599, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'i') goto yy600;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ goto yy581;
}
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '^') goto yy3;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy3;
+ if (yych <= 'a') goto yy600;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy600:
- YYDEBUG(600, *YYCURSOR);
- yyaccept = 5;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy276;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy276;
- if(yych <= 'C') goto yy139;
- goto yy582;
- }
+ YYDEBUG(600, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'Y') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy276;
- } else {
- if(yych == 'd') goto yy601;
- if(yych <= 'z') goto yy148;
- goto yy276;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'X') goto yy141;
+ goto yy501;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'y') goto yy530;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy601:
- YYDEBUG(601, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'A') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- goto yy583;
- }
+ YYDEBUG(601, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'R') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'a') goto yy602;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy139;
+ goto yy583;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'r') goto yy602;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
+ }
+ }
yy602:
- YYDEBUG(602, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'Y') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'X') goto yy141;
- goto yy503;
- }
+ YYDEBUG(602, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'y') goto yy532;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy140;
+ goto yy584;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy603;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy603:
- YYDEBUG(603, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'R') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy139;
- goto yy585;
- }
+ YYDEBUG(603, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'H') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'r') goto yy604;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy141;
+ goto yy517;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'h') goto yy546;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy604:
- YYDEBUG(604, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy140;
- goto yy586;
- }
+ YYDEBUG(604, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy605;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy139;
+ goto yy588;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 's') goto yy607;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy605:
- YYDEBUG(605, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'H') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy141;
- goto yy519;
- }
+ YYDEBUG(605, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'h') goto yy548;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
+ goto yy587;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy606;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy606:
- YYDEBUG(606, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy139;
- goto yy590;
- }
+ YYDEBUG(606, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'H') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 's') goto yy609;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy140;
+ goto yy263;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'h') goto yy273;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy607:
- YYDEBUG(607, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- goto yy589;
- }
+ YYDEBUG(607, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy608;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy140;
+ goto yy263;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy273;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy608:
- YYDEBUG(608, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'H') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
+ YYDEBUG(608, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy140;
- goto yy263;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych == 'h') goto yy273;
- if(yych <= 'z') goto yy149;
- goto yy3;
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
-yy609:
- YYDEBUG(609, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'Q') {
+ if (yych <= '@') goto yy303;
+ goto yy139;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy140;
- goto yy263;
+ if (yych <= 'R') goto yy590;
+ if (yych <= 'Z') goto yy139;
+ goto yy303;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 'q') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy148;
} else {
- if(yych == 't') goto yy273;
- if(yych <= 'z') goto yy149;
- goto yy3;
+ if (yych <= 'r') goto yy609;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
+ }
+yy609:
+ YYDEBUG(609, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'U') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'T') goto yy140;
+ goto yy591;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'u') goto yy610;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy610:
- YYDEBUG(610, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
- }
+ YYDEBUG(610, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '^') {
- if(yych <= 'Q') {
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'R') goto yy592;
- if(yych <= 'Z') goto yy139;
- goto yy303;
- }
- } else {
- if(yych <= 'q') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy148;
- } else {
- if(yych <= 'r') goto yy611;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ goto yy592;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '^') goto yy3;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy3;
+ if (yych <= 'a') goto yy611;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy611:
- YYDEBUG(611, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'U') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'T') goto yy140;
- goto yy593;
- }
+ YYDEBUG(611, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'R') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'u') goto yy612;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'Q') goto yy3;
+ goto yy593;
}
-yy612:
- YYDEBUG(612, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'A') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- goto yy594;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'a') goto yy613;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych == 'r') goto yy612;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
+ }
+yy612:
+ YYDEBUG(612, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy315;
+ if (yych == 'y') goto yy483;
+ goto yy152;
yy613:
- YYDEBUG(613, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'R') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'Q') goto yy3;
- goto yy595;
- }
+ YYDEBUG(613, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'r') goto yy614;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych == 'L') goto yy620;
+ if (yych <= 'M') goto yy138;
+ goto yy619;
}
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'k') goto yy138;
+ goto yy620;
+ } else {
+ if (yych == 'n') goto yy619;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
yy614:
- YYDEBUG(614, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy315;
- if(yych == 'y') goto yy485;
- goto yy152;
-yy615:
- YYDEBUG(615, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych == 'L') goto yy622;
- if(yych <= 'M') goto yy138;
- goto yy621;
- }
+ YYDEBUG(614, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'l') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- if(yych <= 'k') goto yy138;
- goto yy622;
- } else {
- if(yych == 'n') goto yy621;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy138;
}
-yy616:
- YYDEBUG(616, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy138;
- }
+ } else {
+ if (yych <= 'm') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
} else {
- if(yych <= 'm') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'n') goto yy617;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= 'n') goto yy615;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
-yy617:
- YYDEBUG(617, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
+ }
+yy615:
+ YYDEBUG(615, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy303;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- goto yy303;
- }
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych != 'U') goto yy139;
- }
- } else {
- if(yych <= 't') {
- if(yych <= '`') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'u') goto yy618;
- if(yych <= 'z') goto yy139;
- goto yy303;
- }
- }
- }
-yy618:
- YYDEBUG(618, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- } else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- goto yy3;
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
+ goto yy303;
} else {
- if(yych <= 'a') goto yy619;
- if(yych <= 'z') goto yy140;
- goto yy3;
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
+ goto yy303;
}
}
-yy619:
- YYDEBUG(619, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy141;
+ if (yych != 'U') goto yy139;
}
} else {
- if(yych <= 'q') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
+ if (yych <= 't') {
+ if (yych <= '`') goto yy303;
+ goto yy139;
} else {
- if(yych <= 'r') goto yy620;
- if(yych <= 'z') goto yy141;
- goto yy3;
+ if (yych <= 'u') goto yy616;
+ if (yych <= 'z') goto yy139;
+ goto yy303;
}
}
-yy620:
- YYDEBUG(620, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'X') {
- if(yych == ')') goto yy136;
+ }
+yy616:
+ YYDEBUG(616, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
goto yy3;
} else {
- if(yych <= 'Y') goto yy315;
- if(yych == 'y') goto yy315;
+ if (yych <= 'a') goto yy617;
+ if (yych <= 'z') goto yy140;
goto yy3;
}
-yy621:
- YYDEBUG(621, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy303;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- goto yy303;
- }
- }
+ }
+yy617:
+ YYDEBUG(617, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych == 'E') goto yy623;
- goto yy139;
- }
- } else {
- if(yych <= 'd') {
- if(yych <= '`') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'e') goto yy623;
- if(yych <= 'z') goto yy139;
- goto yy303;
- }
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy141;
}
-yy622:
- YYDEBUG(622, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy303;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- goto yy303;
- }
- }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych != 'Y') goto yy139;
- }
- } else {
- if(yych <= 'x') {
- if(yych <= '`') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'y') goto yy623;
- if(yych <= 'z') goto yy139;
- goto yy303;
- }
- }
+ if (yych <= 'r') goto yy618;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
-yy623:
- YYDEBUG(623, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy305;
- goto yy303;
+ }
+yy618:
+ YYDEBUG(618, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'X') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'Y') goto yy315;
+ if (yych == 'y') goto yy315;
+ goto yy3;
+ }
+yy619:
+ YYDEBUG(619, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= ' ') goto yy305;
- if(yych == ')') goto yy136;
+ if (yych == ' ') goto yy305;
goto yy303;
}
} else {
- if(yych <= '@') {
- if(yych == '/') goto yy303;
- if(yych <= '9') goto yy305;
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
goto yy303;
} else {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy303;
- if(yych <= 'z') goto yy140;
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
goto yy303;
}
}
-yy624:
- YYDEBUG(624, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '/') {
- if(yych == ')') goto yy136;
- if(yych <= '.') goto yy3;
- goto yy144;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= 'K') {
- if(yych <= '@') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'L') goto yy622;
- if(yych <= 'M') goto yy138;
- goto yy621;
- }
+ if (yych == 'E') goto yy621;
+ goto yy139;
}
} else {
- if(yych <= 'k') {
- if(yych <= '^') {
- if(yych <= 'Z') goto yy138;
- goto yy3;
- } else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy3;
- goto yy143;
- }
+ if (yych <= 'd') {
+ if (yych <= '`') goto yy303;
+ goto yy139;
} else {
- if(yych <= 'm') {
- if(yych <= 'l') goto yy631;
- goto yy143;
- } else {
- if(yych <= 'n') goto yy630;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= 'e') goto yy621;
+ if (yych <= 'z') goto yy139;
+ goto yy303;
}
}
-yy625:
- YYDEBUG(625, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
+ }
+yy620:
+ YYDEBUG(620, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy138;
- goto yy617;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
+ goto yy303;
} else {
- if(yych == 'n') goto yy626;
- if(yych <= 'z') goto yy143;
- goto yy3;
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
+ goto yy303;
}
}
-yy626:
- YYDEBUG(626, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
+ if (yych != 'Y') goto yy139;
}
} else {
- if(yych <= '^') {
- if(yych <= 'T') {
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'U') goto yy618;
- if(yych <= 'Z') goto yy139;
- goto yy303;
- }
+ if (yych <= 'x') {
+ if (yych <= '`') goto yy303;
+ goto yy139;
} else {
- if(yych <= 't') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy148;
- } else {
- if(yych <= 'u') goto yy627;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
+ if (yych <= 'y') goto yy621;
+ if (yych <= 'z') goto yy139;
+ goto yy303;
}
}
-yy627:
- YYDEBUG(627, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'A') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- goto yy619;
- }
+ }
+yy621:
+ YYDEBUG(621, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy305;
+ goto yy303;
+ } else {
+ if (yych <= ' ') goto yy305;
+ if (yych == ')') goto yy136;
+ goto yy303;
+ }
+ } else {
+ if (yych <= '@') {
+ if (yych == '/') goto yy303;
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'a') goto yy628;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy303;
+ if (yych <= 'z') goto yy140;
+ goto yy303;
}
-yy628:
- YYDEBUG(628, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'R') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy141;
- goto yy620;
- }
+ }
+yy622:
+ YYDEBUG(622, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '/') {
+ if (yych == ')') goto yy136;
+ if (yych <= '.') goto yy3;
+ goto yy144;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 'K') {
+ if (yych <= '@') goto yy3;
+ goto yy138;
} else {
- if(yych == 'r') goto yy629;
- if(yych <= 'z') goto yy150;
- goto yy3;
+ if (yych <= 'L') goto yy620;
+ if (yych <= 'M') goto yy138;
+ goto yy619;
}
}
-yy629:
- YYDEBUG(629, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'Y') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
+ } else {
+ if (yych <= 'k') {
+ if (yych <= '^') {
+ if (yych <= 'Z') goto yy138;
goto yy3;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= 'X') goto yy3;
- goto yy315;
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy3;
+ goto yy143;
}
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 'm') {
+ if (yych <= 'l') goto yy629;
+ goto yy143;
} else {
- if(yych == 'y') goto yy485;
- if(yych <= 'z') goto yy151;
+ if (yych <= 'n') goto yy628;
+ if (yych <= 'z') goto yy143;
goto yy3;
}
}
-yy630:
- YYDEBUG(630, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
- }
+ }
+yy623:
+ YYDEBUG(623, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '^') {
- if(yych <= 'D') {
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'E') goto yy623;
- if(yych <= 'Z') goto yy139;
- goto yy303;
- }
- } else {
- if(yych <= 'd') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy148;
- } else {
- if(yych <= 'e') goto yy632;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy138;
+ goto yy615;
}
-yy631:
- YYDEBUG(631, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'n') goto yy624;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
+ }
+ }
+yy624:
+ YYDEBUG(624, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= '^') {
- if(yych <= 'X') {
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'Y') goto yy623;
- if(yych <= 'Z') goto yy139;
- goto yy303;
- }
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych <= 'x') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy148;
- } else {
- if(yych <= 'y') goto yy632;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
-yy632:
- YYDEBUG(632, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy305;
- if(yych <= 0x1F) goto yy303;
- goto yy305;
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'T') {
+ if (yych <= '@') goto yy303;
+ goto yy139;
} else {
- if(yych == ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy305;
+ if (yych <= 'U') goto yy616;
+ if (yych <= 'Z') goto yy139;
+ goto yy303;
}
} else {
- if(yych <= 'Z') {
- if(yych <= '/') goto yy144;
- if(yych <= '9') goto yy305;
- if(yych <= '@') goto yy303;
- goto yy140;
+ if (yych <= 't') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy148;
} else {
- if(yych <= '_') {
- if(yych <= '^') goto yy303;
- goto yy144;
- } else {
- if(yych <= '`') goto yy303;
- if(yych <= 'z') goto yy149;
- goto yy303;
- }
+ if (yych <= 'u') goto yy625;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
-yy633:
- YYDEBUG(633, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy305;
- if(yych <= 0x1F) goto yy3;
+ }
+yy625:
+ YYDEBUG(625, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ goto yy617;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '^') goto yy3;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy3;
+ if (yych <= 'a') goto yy626;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
+yy626:
+ YYDEBUG(626, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'R') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy141;
+ goto yy618;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'r') goto yy627;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
+ }
+ }
+yy627:
+ YYDEBUG(627, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'Y') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= 'X') goto yy3;
+ goto yy315;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'y') goto yy483;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
+ }
+ }
+yy628:
+ YYDEBUG(628, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
goto yy305;
} else {
- if(yych == ')') goto yy136;
- if(yych <= ',') goto yy3;
- goto yy305;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= 'H') {
- if(yych <= '/') goto yy3;
- if(yych <= '9') goto yy305;
- if(yych <= '@') goto yy3;
- goto yy138;
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych <= 'Z') {
- if(yych >= 'J') goto yy138;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
-yy634:
- YYDEBUG(634, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy305;
- goto yy3;
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'D') {
+ if (yych <= '@') goto yy303;
+ goto yy139;
} else {
- if(yych <= ' ') goto yy305;
- if(yych == ')') goto yy136;
- goto yy3;
+ if (yych <= 'E') goto yy621;
+ if (yych <= 'Z') goto yy139;
+ goto yy303;
}
} else {
- if(yych <= '@') {
- if(yych == '/') goto yy3;
- if(yych <= '9') goto yy305;
- goto yy3;
+ if (yych <= 'd') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy148;
} else {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy139;
- goto yy3;
+ if (yych <= 'e') goto yy630;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
-yy635:
- YYDEBUG(635, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy305;
- if(yych <= 0x1F) goto yy3;
+ }
+yy629:
+ YYDEBUG(629, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
goto yy305;
} else {
- if(yych == ')') goto yy136;
- if(yych <= ',') goto yy3;
- goto yy305;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= 'H') {
- if(yych <= '/') goto yy3;
- if(yych <= '9') goto yy305;
- if(yych <= '@') goto yy3;
- goto yy138;
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych <= 'Z') {
- if(yych >= 'J') goto yy138;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
- YYDEBUG(636, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy305;
- if(yych <= 0x1F) goto yy3;
- goto yy305;
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'X') {
+ if (yych <= '@') goto yy303;
+ goto yy139;
} else {
- if(yych == ')') goto yy136;
- if(yych <= ',') goto yy3;
- goto yy305;
+ if (yych <= 'Y') goto yy621;
+ if (yych <= 'Z') goto yy139;
+ goto yy303;
}
} else {
- if(yych <= 'H') {
- if(yych <= '/') goto yy3;
- if(yych <= '9') goto yy305;
- if(yych <= '@') goto yy3;
- goto yy139;
+ if (yych <= 'x') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy148;
} else {
- if(yych <= 'Z') {
- if(yych >= 'J') goto yy139;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= 'y') goto yy630;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
- YYDEBUG(637, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy305;
- goto yy3;
+ }
+yy630:
+ YYDEBUG(630, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy305;
+ if (yych <= 0x1F) goto yy303;
+ goto yy305;
+ } else {
+ if (yych == ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy305;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '/') goto yy144;
+ if (yych <= '9') goto yy305;
+ if (yych <= '@') goto yy303;
+ goto yy140;
+ } else {
+ if (yych <= '_') {
+ if (yych <= '^') goto yy303;
+ goto yy144;
} else {
- if(yych <= ' ') goto yy305;
- if(yych == ')') goto yy136;
- goto yy3;
+ if (yych <= '`') goto yy303;
+ if (yych <= 'z') goto yy149;
+ goto yy303;
}
+ }
+ }
+yy631:
+ YYDEBUG(631, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy305;
+ if (yych <= 0x1F) goto yy3;
+ goto yy305;
} else {
- if(yych <= '@') {
- if(yych == '/') goto yy3;
- if(yych <= '9') goto yy305;
- goto yy3;
+ if (yych == ')') goto yy136;
+ if (yych <= ',') goto yy3;
+ goto yy305;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych <= '/') goto yy3;
+ if (yych <= '9') goto yy305;
+ if (yych <= '@') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'Z') {
+ if (yych >= 'J') goto yy138;
} else {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy140;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy138;
goto yy3;
}
}
-yy638:
- YYDEBUG(638, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy305;
- goto yy3;
+ }
+yy632:
+ YYDEBUG(632, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy305;
+ goto yy3;
+ } else {
+ if (yych <= ' ') goto yy305;
+ if (yych == ')') goto yy136;
+ goto yy3;
+ }
+ } else {
+ if (yych <= '@') {
+ if (yych == '/') goto yy3;
+ if (yych <= '9') goto yy305;
+ goto yy3;
+ } else {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
+ }
+ }
+yy633:
+ YYDEBUG(633, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy305;
+ if (yych <= 0x1F) goto yy3;
+ goto yy305;
+ } else {
+ if (yych == ')') goto yy136;
+ if (yych <= ',') goto yy3;
+ goto yy305;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych <= '/') goto yy3;
+ if (yych <= '9') goto yy305;
+ if (yych <= '@') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'Z') {
+ if (yych >= 'J') goto yy138;
} else {
- if(yych <= ' ') goto yy305;
- if(yych == ')') goto yy136;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy138;
goto yy3;
}
+ }
+ }
+ YYDEBUG(634, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy305;
+ if (yych <= 0x1F) goto yy3;
+ goto yy305;
} else {
- if(yych <= '@') {
- if(yych == '/') goto yy3;
- if(yych <= '9') goto yy305;
- goto yy3;
+ if (yych == ')') goto yy136;
+ if (yych <= ',') goto yy3;
+ goto yy305;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych <= '/') goto yy3;
+ if (yych <= '9') goto yy305;
+ if (yych <= '@') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 'Z') {
+ if (yych >= 'J') goto yy139;
} else {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy138;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy139;
goto yy3;
}
}
-yy639:
- YYDEBUG(639, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy305;
- if(yych <= 0x1F) goto yy3;
- goto yy305;
- } else {
- if(yych == ')') goto yy136;
- if(yych <= ',') goto yy3;
- goto yy305;
- }
+ }
+ YYDEBUG(635, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy305;
+ goto yy3;
+ } else {
+ if (yych <= ' ') goto yy305;
+ if (yych == ')') goto yy136;
+ goto yy3;
+ }
+ } else {
+ if (yych <= '@') {
+ if (yych == '/') goto yy3;
+ if (yych <= '9') goto yy305;
+ goto yy3;
+ } else {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
+ }
+ }
+yy636:
+ YYDEBUG(636, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy305;
+ goto yy3;
+ } else {
+ if (yych <= ' ') goto yy305;
+ if (yych == ')') goto yy136;
+ goto yy3;
+ }
+ } else {
+ if (yych <= '@') {
+ if (yych == '/') goto yy3;
+ if (yych <= '9') goto yy305;
+ goto yy3;
} else {
- if(yych <= 'H') {
- if(yych <= '/') goto yy3;
- if(yych <= '9') goto yy305;
- if(yych <= '@') goto yy3;
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
+yy637:
+ YYDEBUG(637, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy305;
+ if (yych <= 0x1F) goto yy3;
+ goto yy305;
+ } else {
+ if (yych == ')') goto yy136;
+ if (yych <= ',') goto yy3;
+ goto yy305;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych <= '/') goto yy3;
+ if (yych <= '9') goto yy305;
+ if (yych <= '@') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= 'I') goto yy632;
goto yy138;
} else {
- if(yych <= 'Z') {
- if(yych <= 'I') goto yy634;
- goto yy138;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
}
-yy640:
- YYDEBUG(640, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy3;
+ }
+yy638:
+ YYDEBUG(638, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= '9') {
+ if (yych <= '/') goto yy3;
+ goto yy660;
+ } else {
+ if (yych <= ':') goto yy645;
+ if (yych <= 'C') goto yy3;
goto yy57;
- } else {
- if(yych <= '9') {
- if(yych <= '/') goto yy3;
- goto yy662;
- } else {
- if(yych <= ':') goto yy647;
- if(yych <= 'C') goto yy3;
- goto yy57;
- }
}
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy3;
+ goto yy57;
} else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy3;
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy3;
goto yy57;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy3;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy3;
- if(yych <= 'T') goto yy57;
- goto yy3;
- }
+ if (yych <= 'R') goto yy3;
+ if (yych <= 'T') goto yy57;
+ goto yy3;
}
}
- } else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy3;
- if(yych <= 'Y') goto yy57;
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy3;
+ if (yych <= 'Y') goto yy57;
+ goto yy3;
+ } else {
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
goto yy3;
} else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy3;
- } else {
- if(yych == 'g') goto yy3;
- goto yy57;
- }
+ if (yych == 'g') goto yy3;
+ goto yy57;
}
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy3;
+ goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy3;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy3;
goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy3;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy3;
- }
+ if (yych == 'y') goto yy57;
+ goto yy3;
}
}
}
-yy641:
- YYDEBUG(641, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= ':') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy3;
- goto yy57;
- } else {
- if(yych <= '3') {
- if(yych <= '/') goto yy3;
- goto yy662;
- } else {
- if(yych <= '5') goto yy645;
- if(yych <= '9') goto yy646;
- goto yy647;
- }
- }
+ }
+yy639:
+ YYDEBUG(639, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= ':') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy3;
+ goto yy57;
} else {
- if(yych <= 'G') {
- if(yych <= 'D') {
- if(yych <= 'C') goto yy3;
- goto yy57;
- } else {
- if(yych == 'F') goto yy57;
- goto yy3;
- }
+ if (yych <= '3') {
+ if (yych <= '/') goto yy3;
+ goto yy660;
} else {
- if(yych <= 'L') {
- if(yych <= 'H') goto yy57;
- goto yy3;
- } else {
- if(yych <= 'M') goto yy57;
- if(yych <= 'R') goto yy3;
- goto yy57;
- }
+ if (yych <= '5') goto yy643;
+ if (yych <= '9') goto yy644;
+ goto yy645;
}
}
} else {
- if(yych <= 'g') {
- if(yych <= 'Y') {
- if(yych == 'W') goto yy57;
- if(yych <= 'X') goto yy3;
+ if (yych <= 'G') {
+ if (yych <= 'D') {
+ if (yych <= 'C') goto yy3;
goto yy57;
} else {
- if(yych <= 'd') {
- if(yych <= 'c') goto yy3;
- goto yy57;
- } else {
- if(yych == 'f') goto yy57;
- goto yy3;
- }
+ if (yych == 'F') goto yy57;
+ goto yy3;
}
} else {
- if(yych <= 't') {
- if(yych <= 'l') {
- if(yych <= 'h') goto yy57;
- goto yy3;
- } else {
- if(yych <= 'm') goto yy57;
- if(yych <= 'r') goto yy3;
- goto yy57;
- }
+ if (yych <= 'L') {
+ if (yych <= 'H') goto yy57;
+ goto yy3;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy3;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy3;
- }
+ if (yych <= 'M') goto yy57;
+ if (yych <= 'R') goto yy3;
+ goto yy57;
}
}
}
-yy642:
- YYDEBUG(642, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= 'C') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy3;
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Y') {
+ if (yych == 'W') goto yy57;
+ if (yych <= 'X') goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'c') goto yy3;
goto yy57;
} else {
- if(yych <= '5') {
- if(yych <= '/') goto yy3;
- goto yy645;
- } else {
- if(yych <= '9') goto yy646;
- if(yych <= ':') goto yy647;
- goto yy3;
- }
- }
- } else {
- if(yych <= 'G') {
- if(yych == 'E') goto yy3;
- if(yych <= 'F') goto yy57;
+ if (yych == 'f') goto yy57;
goto yy3;
- } else {
- if(yych <= 'L') {
- if(yych <= 'H') goto yy57;
- goto yy3;
- } else {
- if(yych <= 'M') goto yy57;
- if(yych <= 'R') goto yy3;
- goto yy57;
- }
}
}
} else {
- if(yych <= 'g') {
- if(yych <= 'Y') {
- if(yych == 'W') goto yy57;
- if(yych <= 'X') goto yy3;
- goto yy57;
+ if (yych <= 't') {
+ if (yych <= 'l') {
+ if (yych <= 'h') goto yy57;
+ goto yy3;
} else {
- if(yych <= 'd') {
- if(yych <= 'c') goto yy3;
- goto yy57;
- } else {
- if(yych == 'f') goto yy57;
- goto yy3;
- }
+ if (yych <= 'm') goto yy57;
+ if (yych <= 'r') goto yy3;
+ goto yy57;
}
} else {
- if(yych <= 't') {
- if(yych <= 'l') {
- if(yych <= 'h') goto yy57;
- goto yy3;
- } else {
- if(yych <= 'm') goto yy57;
- if(yych <= 'r') goto yy3;
- goto yy57;
- }
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy3;
+ goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy3;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy3;
- }
+ if (yych == 'y') goto yy57;
+ goto yy3;
}
}
}
-yy643:
- YYDEBUG(643, *YYCURSOR);
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- YYDEBUG(644, *YYCURSOR);
- if(yybm[0+yych] & 8) {
- goto yy54;
- }
- if(yych <= ',') {
- if(yych == '+') goto yy643;
- goto yy53;
+ }
+yy640:
+ YYDEBUG(640, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= 'C') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= '5') {
+ if (yych <= '/') goto yy3;
+ goto yy643;
+ } else {
+ if (yych <= '9') goto yy644;
+ if (yych <= ':') goto yy645;
+ goto yy3;
+ }
+ }
} else {
- if(yych <= '-') goto yy643;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy51;
- goto yy53;
- }
-yy645:
- YYDEBUG(645, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy3;
- goto yy57;
+ if (yych <= 'G') {
+ if (yych == 'E') goto yy3;
+ if (yych <= 'F') goto yy57;
+ goto yy3;
+ } else {
+ if (yych <= 'L') {
+ if (yych <= 'H') goto yy57;
+ goto yy3;
} else {
- if(yych <= '/') goto yy3;
- if(yych <= '9') goto yy661;
- if(yych <= 'C') goto yy3;
+ if (yych <= 'M') goto yy57;
+ if (yych <= 'R') goto yy3;
goto yy57;
}
- } else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy3;
+ }
+ }
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Y') {
+ if (yych == 'W') goto yy57;
+ if (yych <= 'X') goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'c') goto yy3;
goto yy57;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy3;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy3;
- if(yych <= 'T') goto yy57;
- goto yy3;
- }
+ if (yych == 'f') goto yy57;
+ goto yy3;
}
}
} else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy3;
- if(yych <= 'Y') goto yy57;
+ if (yych <= 't') {
+ if (yych <= 'l') {
+ if (yych <= 'h') goto yy57;
goto yy3;
} else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy3;
- } else {
- if(yych == 'g') goto yy3;
- goto yy57;
- }
+ if (yych <= 'm') goto yy57;
+ if (yych <= 'r') goto yy3;
+ goto yy57;
}
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy3;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy3;
goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy3;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy3;
- }
+ if (yych == 'y') goto yy57;
+ goto yy3;
}
}
}
-yy646:
- YYDEBUG(646, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy3;
+ }
+yy641:
+ YYDEBUG(641, *YYCURSOR);
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ YYDEBUG(642, *YYCURSOR);
+ if (yybm[0+yych] & 8) {
+ goto yy54;
+ }
+ if (yych <= ',') {
+ if (yych == '+') goto yy641;
+ goto yy53;
+ } else {
+ if (yych <= '-') goto yy641;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy51;
+ goto yy53;
+ }
+yy643:
+ YYDEBUG(643, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= '/') goto yy3;
+ if (yych <= '9') goto yy659;
+ if (yych <= 'C') goto yy3;
+ goto yy57;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy3;
goto yy57;
} else {
- if(yych <= '/') goto yy3;
- if(yych <= '9') goto yy649;
- if(yych <= 'C') goto yy3;
+ if (yych <= 'R') goto yy3;
+ if (yych <= 'T') goto yy57;
+ goto yy3;
+ }
+ }
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy3;
+ if (yych <= 'Y') goto yy57;
+ goto yy3;
+ } else {
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
+ goto yy3;
+ } else {
+ if (yych == 'g') goto yy3;
goto yy57;
}
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy3;
+ goto yy57;
} else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy3;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy3;
goto yy57;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy3;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy3;
- if(yych <= 'T') goto yy57;
- goto yy3;
- }
+ if (yych == 'y') goto yy57;
+ goto yy3;
}
}
- } else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy3;
- if(yych <= 'Y') goto yy57;
+ }
+ }
+yy644:
+ YYDEBUG(644, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= '/') goto yy3;
+ if (yych <= '9') goto yy647;
+ if (yych <= 'C') goto yy3;
+ goto yy57;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= 'R') goto yy3;
+ if (yych <= 'T') goto yy57;
+ goto yy3;
+ }
+ }
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy3;
+ if (yych <= 'Y') goto yy57;
+ goto yy3;
+ } else {
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
goto yy3;
} else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy3;
- } else {
- if(yych == 'g') goto yy3;
- goto yy57;
- }
+ if (yych == 'g') goto yy3;
+ goto yy57;
}
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy3;
+ goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy3;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy3;
goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy3;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy3;
- }
+ if (yych == 'y') goto yy57;
+ goto yy3;
}
}
}
+ }
+yy645:
+ YYDEBUG(645, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy3;
+ if (yych <= '5') goto yy646;
+ if (yych <= '9') goto yy136;
+ goto yy3;
+yy646:
+ YYDEBUG(646, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy3;
+ if (yych <= '9') goto yy136;
+ goto yy3;
yy647:
- YYDEBUG(647, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy3;
- if(yych <= '5') goto yy648;
- if(yych <= '9') goto yy136;
- goto yy3;
+ YYDEBUG(647, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych >= ':') goto yy57;
yy648:
- YYDEBUG(648, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy3;
- if(yych <= '9') goto yy136;
- goto yy3;
+ YYDEBUG(648, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yybm[0+yych] & 4) {
+ goto yy51;
+ }
+ if (yych != '-') goto yy57;
yy649:
- YYDEBUG(649, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych >= ':') goto yy57;
+ YYDEBUG(649, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '0') goto yy650;
+ if (yych <= '1') goto yy651;
+ goto yy53;
yy650:
- YYDEBUG(650, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yybm[0+yych] & 4) {
- goto yy51;
- }
- if(yych != '-') goto yy57;
+ YYDEBUG(650, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy652;
+ goto yy53;
yy651:
- YYDEBUG(651, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '0') goto yy652;
- if(yych <= '1') goto yy653;
- goto yy53;
+ YYDEBUG(651, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '3') goto yy53;
yy652:
- YYDEBUG(652, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy654;
- goto yy53;
-yy653:
- YYDEBUG(653, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '3') goto yy53;
+ YYDEBUG(652, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '-') goto yy53;
+ YYDEBUG(653, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '0') goto yy654;
+ if (yych <= '2') goto yy655;
+ if (yych <= '3') goto yy656;
+ goto yy53;
yy654:
- YYDEBUG(654, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '-') goto yy53;
- YYDEBUG(655, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '0') goto yy656;
- if(yych <= '2') goto yy657;
- if(yych <= '3') goto yy658;
- goto yy53;
+ YYDEBUG(654, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy657;
+ goto yy53;
+yy655:
+ YYDEBUG(655, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy657;
+ goto yy53;
yy656:
- YYDEBUG(656, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy659;
- goto yy53;
+ YYDEBUG(656, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '2') goto yy53;
yy657:
- YYDEBUG(657, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy659;
- goto yy53;
+ YYDEBUG(657, *YYCURSOR);
+ ++YYCURSOR;
yy658:
- YYDEBUG(658, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '2') goto yy53;
-yy659:
- YYDEBUG(659, *YYCURSOR);
- ++YYCURSOR;
-yy660:
- YYDEBUG(660, *YYCURSOR);
- {
+ YYDEBUG(658, *YYCURSOR);
+ {
DEBUG_OUTPUT("iso8601date4 | iso8601date2 | iso8601dateslash | dateslash");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -12171,566 +12131,566 @@ yy660:
TIMELIB_DEINIT;
return TIMELIB_ISO_DATE;
}
-yy661:
- YYDEBUG(661, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy3;
+yy659:
+ YYDEBUG(659, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= '/') goto yy3;
+ if (yych <= '9') goto yy648;
+ if (yych <= 'C') goto yy3;
+ goto yy57;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy3;
goto yy57;
} else {
- if(yych <= '/') goto yy3;
- if(yych <= '9') goto yy650;
- if(yych <= 'C') goto yy3;
+ if (yych <= 'R') goto yy3;
+ if (yych <= 'T') goto yy57;
+ goto yy3;
+ }
+ }
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy3;
+ if (yych <= 'Y') goto yy57;
+ goto yy3;
+ } else {
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
+ goto yy3;
+ } else {
+ if (yych == 'g') goto yy3;
goto yy57;
}
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy3;
+ goto yy57;
} else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy3;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy3;
goto yy57;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy3;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy3;
- if(yych <= 'T') goto yy57;
- goto yy3;
- }
+ if (yych == 'y') goto yy57;
+ goto yy3;
}
}
- } else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy3;
- if(yych <= 'Y') goto yy57;
+ }
+ }
+yy660:
+ YYDEBUG(660, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= 'C') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= '5') {
+ if (yych <= '/') goto yy3;
+ } else {
+ if (yych <= '9') goto yy659;
+ if (yych <= ':') goto yy645;
goto yy3;
- } else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy3;
- } else {
- if(yych == 'g') goto yy3;
- goto yy57;
- }
}
+ }
+ } else {
+ if (yych <= 'G') {
+ if (yych == 'E') goto yy3;
+ if (yych <= 'F') goto yy57;
+ goto yy3;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy3;
- goto yy57;
+ if (yych <= 'L') {
+ if (yych <= 'H') goto yy57;
+ goto yy3;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy3;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy3;
- }
+ if (yych <= 'M') goto yy57;
+ if (yych <= 'R') goto yy3;
+ goto yy57;
}
}
}
-yy662:
- YYDEBUG(662, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= 'C') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy3;
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Y') {
+ if (yych == 'W') goto yy57;
+ if (yych <= 'X') goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'c') goto yy3;
goto yy57;
} else {
- if(yych <= '5') {
- if(yych <= '/') goto yy3;
- } else {
- if(yych <= '9') goto yy661;
- if(yych <= ':') goto yy647;
- goto yy3;
- }
- }
- } else {
- if(yych <= 'G') {
- if(yych == 'E') goto yy3;
- if(yych <= 'F') goto yy57;
+ if (yych == 'f') goto yy57;
goto yy3;
- } else {
- if(yych <= 'L') {
- if(yych <= 'H') goto yy57;
- goto yy3;
- } else {
- if(yych <= 'M') goto yy57;
- if(yych <= 'R') goto yy3;
- goto yy57;
- }
}
}
} else {
- if(yych <= 'g') {
- if(yych <= 'Y') {
- if(yych == 'W') goto yy57;
- if(yych <= 'X') goto yy3;
- goto yy57;
+ if (yych <= 't') {
+ if (yych <= 'l') {
+ if (yych <= 'h') goto yy57;
+ goto yy3;
} else {
- if(yych <= 'd') {
- if(yych <= 'c') goto yy3;
- goto yy57;
- } else {
- if(yych == 'f') goto yy57;
- goto yy3;
- }
+ if (yych <= 'm') goto yy57;
+ if (yych <= 'r') goto yy3;
+ goto yy57;
}
} else {
- if(yych <= 't') {
- if(yych <= 'l') {
- if(yych <= 'h') goto yy57;
- goto yy3;
- } else {
- if(yych <= 'm') goto yy57;
- if(yych <= 'r') goto yy3;
- goto yy57;
- }
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy3;
+ goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy3;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy3;
- }
+ if (yych == 'y') goto yy57;
+ goto yy3;
}
}
}
- YYDEBUG(663, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy3;
+ }
+ YYDEBUG(661, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= '/') goto yy3;
+ if (yych <= '9') goto yy662;
+ if (yych <= 'C') goto yy3;
+ goto yy57;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy3;
goto yy57;
} else {
- if(yych <= '/') goto yy3;
- if(yych <= '9') goto yy664;
- if(yych <= 'C') goto yy3;
- goto yy57;
+ if (yych <= 'R') goto yy3;
+ if (yych <= 'T') goto yy57;
+ goto yy3;
}
+ }
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy3;
+ if (yych <= 'Y') goto yy57;
+ goto yy3;
} else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy3;
- goto yy57;
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
+ goto yy3;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy3;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy3;
- if(yych <= 'T') goto yy57;
- goto yy3;
- }
+ if (yych == 'g') goto yy3;
+ goto yy57;
}
}
} else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy3;
- if(yych <= 'Y') goto yy57;
- goto yy3;
- } else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy3;
- } else {
- if(yych == 'g') goto yy3;
- goto yy57;
- }
- }
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy3;
+ goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy3;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy3;
goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy3;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy3;
- }
+ if (yych == 'y') goto yy57;
+ goto yy3;
}
}
}
-yy664:
- YYDEBUG(664, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yybm[0+yych] & 4) {
- goto yy51;
- }
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy3;
- goto yy57;
- } else {
- if(yych == '-') goto yy651;
- if(yych <= 'C') goto yy3;
- goto yy57;
- }
+ }
+yy662:
+ YYDEBUG(662, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yybm[0+yych] & 4) {
+ goto yy51;
+ }
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy3;
+ goto yy57;
} else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy3;
+ if (yych == '-') goto yy649;
+ if (yych <= 'C') goto yy3;
+ goto yy57;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy3;
goto yy57;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy3;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy3;
- if(yych <= 'T') goto yy57;
- goto yy3;
- }
+ if (yych <= 'R') goto yy3;
+ if (yych <= 'T') goto yy57;
+ goto yy3;
}
}
- } else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy3;
- if(yych <= 'Y') goto yy57;
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy3;
+ if (yych <= 'Y') goto yy57;
+ goto yy3;
+ } else {
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
goto yy3;
} else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy3;
- } else {
- if(yych == 'g') goto yy3;
- goto yy57;
- }
+ if (yych == 'g') goto yy3;
+ goto yy57;
}
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy3;
+ goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy3;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy3;
goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy3;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy3;
- }
+ if (yych == 'y') goto yy57;
+ goto yy3;
}
}
}
+ }
+yy663:
+ YYDEBUG(663, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy665;
+ if (yych <= '0') goto yy919;
+ if (yych <= '1') goto yy920;
+ if (yych <= '9') goto yy921;
+ goto yy665;
+yy664:
+ YYDEBUG(664, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 13) YYFILL(13);
+ yych = *YYCURSOR;
yy665:
- YYDEBUG(665, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy667;
- if(yych <= '0') goto yy916;
- if(yych <= '1') goto yy917;
- if(yych <= '9') goto yy918;
- goto yy667;
+ YYDEBUG(665, *YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t':
+ case ' ': goto yy664;
+ case '-':
+ case '.': goto yy764;
+ case 'A':
+ case 'a': goto yy683;
+ case 'D':
+ case 'd': goto yy669;
+ case 'F':
+ case 'f': goto yy670;
+ case 'H':
+ case 'h': goto yy60;
+ case 'I': goto yy678;
+ case 'J':
+ case 'j': goto yy682;
+ case 'M':
+ case 'm': goto yy668;
+ case 'N':
+ case 'n': goto yy685;
+ case 'O':
+ case 'o': goto yy684;
+ case 'P':
+ case 'p': goto yy687;
+ case 'S':
+ case 's': goto yy666;
+ case 'T':
+ case 't': goto yy65;
+ case 'V': goto yy680;
+ case 'W':
+ case 'w': goto yy62;
+ case 'X': goto yy681;
+ case 'Y':
+ case 'y': goto yy64;
+ default: goto yy53;
+ }
yy666:
- YYDEBUG(666, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 13) YYFILL(13);
- yych = *YYCURSOR;
+ YYDEBUG(666, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= 'D') {
+ if (yych == 'A') goto yy123;
+ goto yy53;
+ } else {
+ if (yych <= 'E') goto yy1229;
+ if (yych <= 'T') goto yy53;
+ goto yy122;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych == 'a') goto yy123;
+ goto yy53;
+ } else {
+ if (yych <= 'e') goto yy1229;
+ if (yych == 'u') goto yy122;
+ goto yy53;
+ }
+ }
yy667:
- YYDEBUG(667, *YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09:
- case ' ': goto yy666;
- case '-':
- case '.': goto yy766;
- case 'A':
- case 'a': goto yy685;
- case 'D':
- case 'd': goto yy671;
- case 'F':
- case 'f': goto yy672;
- case 'H':
- case 'h': goto yy60;
- case 'I': goto yy680;
- case 'J':
- case 'j': goto yy684;
- case 'M':
- case 'm': goto yy670;
- case 'N':
- case 'n': goto yy687;
- case 'O':
- case 'o': goto yy686;
- case 'P':
- case 'p': goto yy689;
- case 'S':
- case 's': goto yy668;
- case 'T':
- case 't': goto yy65;
- case 'V': goto yy682;
- case 'W':
- case 'w': goto yy62;
- case 'X': goto yy683;
- case 'Y':
- case 'y': goto yy64;
- default: goto yy53;
+ YYDEBUG(667, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '`') {
+ if (yych <= 'D') {
+ if (yych == 'A') goto yy123;
+ goto yy53;
+ } else {
+ if (yych <= 'E') goto yy1229;
+ if (yych == 'U') goto yy122;
+ goto yy53;
+ }
+ } else {
+ if (yych <= 'e') {
+ if (yych <= 'a') goto yy123;
+ if (yych <= 'd') goto yy53;
+ goto yy1229;
+ } else {
+ if (yych <= 's') goto yy53;
+ if (yych <= 't') goto yy912;
+ if (yych <= 'u') goto yy122;
+ goto yy53;
}
+ }
yy668:
- YYDEBUG(668, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= 'D') {
- if(yych == 'A') goto yy123;
- goto yy53;
- } else {
- if(yych <= 'E') goto yy1224;
- if(yych <= 'T') goto yy53;
- goto yy122;
- }
+ YYDEBUG(668, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych <= 'H') {
+ if (yych == 'A') goto yy779;
+ goto yy53;
} else {
- if(yych <= 'd') {
- if(yych == 'a') goto yy123;
- goto yy53;
- } else {
- if(yych <= 'e') goto yy1224;
- if(yych == 'u') goto yy122;
- goto yy53;
- }
+ if (yych <= 'I') goto yy114;
+ if (yych <= 'N') goto yy53;
+ goto yy113;
}
+ } else {
+ if (yych <= 'h') {
+ if (yych == 'a') goto yy779;
+ goto yy53;
+ } else {
+ if (yych <= 'i') goto yy114;
+ if (yych == 'o') goto yy113;
+ goto yy53;
+ }
+ }
yy669:
- YYDEBUG(669, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '`') {
- if(yych <= 'D') {
- if(yych == 'A') goto yy123;
- goto yy53;
- } else {
- if(yych <= 'E') goto yy1224;
- if(yych == 'U') goto yy122;
- goto yy53;
- }
+ YYDEBUG(669, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych == 'A') goto yy110;
+ if (yych <= 'D') goto yy53;
+ goto yy766;
+ } else {
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy53;
+ goto yy110;
} else {
- if(yych <= 'e') {
- if(yych <= 'a') goto yy123;
- if(yych <= 'd') goto yy53;
- goto yy1224;
- } else {
- if(yych <= 's') goto yy53;
- if(yych <= 't') goto yy913;
- if(yych <= 'u') goto yy122;
- goto yy53;
- }
+ if (yych == 'e') goto yy766;
+ goto yy53;
}
+ }
yy670:
- YYDEBUG(670, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych <= 'H') {
- if(yych == 'A') goto yy781;
- goto yy53;
- } else {
- if(yych <= 'I') goto yy114;
- if(yych <= 'N') goto yy53;
- goto yy113;
- }
+ YYDEBUG(670, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= 'N') {
+ if (yych == 'E') goto yy782;
+ goto yy53;
} else {
- if(yych <= 'h') {
- if(yych == 'a') goto yy781;
- goto yy53;
- } else {
- if(yych <= 'i') goto yy114;
- if(yych == 'o') goto yy113;
- goto yy53;
- }
+ if (yych <= 'O') goto yy83;
+ if (yych <= 'Q') goto yy53;
+ goto yy82;
}
-yy671:
- YYDEBUG(671, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych == 'A') goto yy110;
- if(yych <= 'D') goto yy53;
- goto yy768;
- } else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy53;
- goto yy110;
- } else {
- if(yych == 'e') goto yy768;
- goto yy53;
- }
+ } else {
+ if (yych <= 'n') {
+ if (yych == 'e') goto yy782;
+ goto yy53;
+ } else {
+ if (yych <= 'o') goto yy83;
+ if (yych == 'r') goto yy82;
+ goto yy53;
}
-yy672:
- YYDEBUG(672, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= 'N') {
- if(yych == 'E') goto yy784;
- goto yy53;
- } else {
- if(yych <= 'O') goto yy83;
- if(yych <= 'Q') goto yy53;
- goto yy82;
- }
+ }
+yy671:
+ YYDEBUG(671, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'H') goto yy66;
+ if (yych <= 'T') goto yy53;
+ goto yy67;
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'g') goto yy53;
+ goto yy1228;
} else {
- if(yych <= 'n') {
- if(yych == 'e') goto yy784;
- goto yy53;
- } else {
- if(yych <= 'o') goto yy83;
- if(yych == 'r') goto yy82;
- goto yy53;
- }
+ if (yych == 'u') goto yy67;
+ goto yy53;
}
+ }
+yy672:
+ YYDEBUG(672, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '-') goto yy925;
+ if (yych <= '/') goto yy57;
+ if (yych <= '9') goto yy924;
+ goto yy57;
yy673:
- YYDEBUG(673, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'H') goto yy66;
- if(yych <= 'T') goto yy53;
- goto yy67;
- } else {
- if(yych <= 'h') {
- if(yych <= 'g') goto yy53;
- goto yy1223;
- } else {
- if(yych == 'u') goto yy67;
- goto yy53;
- }
- }
+ YYDEBUG(673, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'c') {
+ if (yych == 'O') goto yy717;
+ goto yy53;
+ } else {
+ if (yych <= 'd') goto yy912;
+ if (yych == 'o') goto yy717;
+ goto yy53;
+ }
yy674:
- YYDEBUG(674, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '-') goto yy920;
- if(yych <= '/') goto yy57;
- if(yych <= '9') goto yy919;
- goto yy57;
+ YYDEBUG(674, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'd') goto yy912;
+ goto yy53;
yy675:
- YYDEBUG(675, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'c') {
- if(yych == 'O') goto yy719;
- goto yy53;
- } else {
- if(yych <= 'd') goto yy913;
- if(yych == 'o') goto yy719;
- goto yy53;
- }
+ YYDEBUG(675, *YYCURSOR);
+ yych = *++YYCURSOR;
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '0':
+ case '1':
+ case '2': goto yy852;
+ case '3': goto yy854;
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy855;
+ case 'A':
+ case 'a': goto yy859;
+ case 'D':
+ case 'd': goto yy863;
+ case 'F':
+ case 'f': goto yy857;
+ case 'J':
+ case 'j': goto yy856;
+ case 'M':
+ case 'm': goto yy858;
+ case 'N':
+ case 'n': goto yy862;
+ case 'O':
+ case 'o': goto yy861;
+ case 'S':
+ case 's': goto yy860;
+ default: goto yy53;
+ }
yy676:
- YYDEBUG(676, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'd') goto yy913;
- goto yy53;
+ YYDEBUG(676, *YYCURSOR);
+ yych = *++YYCURSOR;
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '0': goto yy802;
+ case '1': goto yy803;
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy804;
+ case 'A':
+ case 'a': goto yy808;
+ case 'D':
+ case 'd': goto yy812;
+ case 'F':
+ case 'f': goto yy806;
+ case 'J':
+ case 'j': goto yy805;
+ case 'M':
+ case 'm': goto yy807;
+ case 'N':
+ case 'n': goto yy811;
+ case 'O':
+ case 'o': goto yy810;
+ case 'S':
+ case 's': goto yy809;
+ default: goto yy765;
+ }
yy677:
- YYDEBUG(677, *YYCURSOR);
- yych = *++YYCURSOR;
- YYDEBUG(-1, yych);
- switch(yych) {
- case '0':
- case '1':
- case '2': goto yy853;
- case '3': goto yy855;
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy856;
- case 'A':
- case 'a': goto yy860;
- case 'D':
- case 'd': goto yy864;
- case 'F':
- case 'f': goto yy858;
- case 'J':
- case 'j': goto yy857;
- case 'M':
- case 'm': goto yy859;
- case 'N':
- case 'n': goto yy863;
- case 'O':
- case 'o': goto yy862;
- case 'S':
- case 's': goto yy861;
- default: goto yy53;
- }
+ YYDEBUG(677, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '1') {
+ if (yych <= '/') goto yy765;
+ if (yych <= '0') goto yy755;
+ goto yy756;
+ } else {
+ if (yych <= '5') goto yy757;
+ if (yych <= '9') goto yy758;
+ goto yy765;
+ }
yy678:
- YYDEBUG(678, *YYCURSOR);
- yych = *++YYCURSOR;
- YYDEBUG(-1, yych);
- switch(yych) {
- case '0': goto yy803;
- case '1': goto yy804;
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy805;
- case 'A':
- case 'a': goto yy809;
- case 'D':
- case 'd': goto yy813;
- case 'F':
- case 'f': goto yy807;
- case 'J':
- case 'j': goto yy806;
- case 'M':
- case 'm': goto yy808;
- case 'N':
- case 'n': goto yy812;
- case 'O':
- case 'o': goto yy811;
- case 'S':
- case 's': goto yy810;
- default: goto yy767;
- }
-yy679:
- YYDEBUG(679, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '1') {
- if(yych <= '/') goto yy767;
- if(yych <= '0') goto yy757;
- goto yy758;
+ YYDEBUG(678, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
} else {
- if(yych <= '5') goto yy759;
- if(yych <= '9') goto yy760;
- goto yy767;
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '.') goto yy719;
}
-yy680:
- YYDEBUG(680, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '.') goto yy721;
- }
+ } else {
+ if (yych <= 'U') {
+ if (yych <= '9') goto yy721;
+ if (yych == 'I') goto yy754;
} else {
- if(yych <= 'U') {
- if(yych <= '9') goto yy723;
- if(yych == 'I') goto yy756;
- } else {
- if(yych == 'W') goto yy681;
- if(yych <= 'X') goto yy729;
- }
+ if (yych == 'W') goto yy679;
+ if (yych <= 'X') goto yy727;
}
-yy681:
- YYDEBUG(681, *YYCURSOR);
- {
+ }
+yy679:
+ YYDEBUG(679, *YYCURSOR);
+ {
DEBUG_OUTPUT("datenoyearrev");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -12740,147 +12700,147 @@ yy681:
TIMELIB_DEINIT;
return TIMELIB_DATE_TEXT;
}
-yy682:
- YYDEBUG(682, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy681;
- goto yy721;
- } else {
- if(yych == ' ') goto yy721;
- goto yy681;
- }
+yy680:
+ YYDEBUG(680, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy679;
+ goto yy719;
} else {
- if(yych <= '9') {
- if(yych <= '.') goto yy721;
- if(yych <= '/') goto yy681;
- goto yy723;
- } else {
- if(yych == 'I') goto yy754;
- goto yy681;
- }
+ if (yych == ' ') goto yy719;
+ goto yy679;
}
-yy683:
- YYDEBUG(683, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy681;
- goto yy721;
- } else {
- if(yych == ' ') goto yy721;
- goto yy681;
- }
+ } else {
+ if (yych <= '9') {
+ if (yych <= '.') goto yy719;
+ if (yych <= '/') goto yy679;
+ goto yy721;
} else {
- if(yych <= '9') {
- if(yych <= '.') goto yy721;
- if(yych <= '/') goto yy681;
- goto yy723;
- } else {
- if(yych == 'I') goto yy753;
- goto yy681;
- }
+ if (yych == 'I') goto yy752;
+ goto yy679;
}
-yy684:
- YYDEBUG(684, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'A') goto yy746;
- if(yych <= 'T') goto yy53;
- goto yy745;
- } else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy53;
- goto yy746;
- } else {
- if(yych == 'u') goto yy745;
- goto yy53;
- }
+ }
+yy681:
+ YYDEBUG(681, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy679;
+ goto yy719;
+ } else {
+ if (yych == ' ') goto yy719;
+ goto yy679;
}
-yy685:
- YYDEBUG(685, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= 'L') {
- if(yych == '.') goto yy690;
- goto yy53;
- } else {
- if(yych <= 'M') goto yy691;
- if(yych == 'P') goto yy739;
- goto yy53;
- }
+ } else {
+ if (yych <= '9') {
+ if (yych <= '.') goto yy719;
+ if (yych <= '/') goto yy679;
+ goto yy721;
} else {
- if(yych <= 'o') {
- if(yych <= 'U') goto yy738;
- if(yych == 'm') goto yy691;
- goto yy53;
- } else {
- if(yych <= 'p') goto yy739;
- if(yych == 'u') goto yy738;
- goto yy53;
- }
+ if (yych == 'I') goto yy751;
+ goto yy679;
}
-yy686:
- YYDEBUG(686, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy733;
- if(yych == 'c') goto yy733;
- goto yy53;
-yy687:
- YYDEBUG(687, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'O') goto yy719;
- if(yych == 'o') goto yy719;
- goto yy53;
-yy688:
- YYDEBUG(688, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy695;
- if(yych <= '9') goto yy697;
- goto yy53;
-yy689:
- YYDEBUG(689, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'L') {
- if(yych != '.') goto yy53;
+ }
+yy682:
+ YYDEBUG(682, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'A') goto yy744;
+ if (yych <= 'T') goto yy53;
+ goto yy743;
+ } else {
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy53;
+ goto yy744;
} else {
- if(yych <= 'M') goto yy691;
- if(yych == 'm') goto yy691;
+ if (yych == 'u') goto yy743;
goto yy53;
}
-yy690:
- YYDEBUG(690, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy691;
- if(yych != 'm') goto yy53;
-yy691:
- YYDEBUG(691, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x1F) {
- if(yych <= 0x00) goto yy693;
- if(yych == 0x09) goto yy693;
+ }
+yy683:
+ YYDEBUG(683, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= 'L') {
+ if (yych == '.') goto yy688;
goto yy53;
} else {
- if(yych <= ' ') goto yy693;
- if(yych != '.') goto yy53;
+ if (yych <= 'M') goto yy689;
+ if (yych == 'P') goto yy737;
+ goto yy53;
}
- YYDEBUG(692, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x09) {
- if(yych <= 0x00) goto yy693;
- if(yych <= 0x08) goto yy53;
+ } else {
+ if (yych <= 'o') {
+ if (yych <= 'U') goto yy736;
+ if (yych == 'm') goto yy689;
+ goto yy53;
} else {
- if(yych != ' ') goto yy53;
+ if (yych <= 'p') goto yy737;
+ if (yych == 'u') goto yy736;
+ goto yy53;
}
-yy693:
- YYDEBUG(693, *YYCURSOR);
- ++YYCURSOR;
- YYDEBUG(694, *YYCURSOR);
- {
+ }
+yy684:
+ YYDEBUG(684, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy731;
+ if (yych == 'c') goto yy731;
+ goto yy53;
+yy685:
+ YYDEBUG(685, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'O') goto yy717;
+ if (yych == 'o') goto yy717;
+ goto yy53;
+yy686:
+ YYDEBUG(686, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy693;
+ if (yych <= '9') goto yy695;
+ goto yy53;
+yy687:
+ YYDEBUG(687, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'L') {
+ if (yych != '.') goto yy53;
+ } else {
+ if (yych <= 'M') goto yy689;
+ if (yych == 'm') goto yy689;
+ goto yy53;
+ }
+yy688:
+ YYDEBUG(688, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy689;
+ if (yych != 'm') goto yy53;
+yy689:
+ YYDEBUG(689, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 0x1F) {
+ if (yych <= 0x00) goto yy691;
+ if (yych == '\t') goto yy691;
+ goto yy53;
+ } else {
+ if (yych <= ' ') goto yy691;
+ if (yych != '.') goto yy53;
+ }
+ YYDEBUG(690, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '\t') {
+ if (yych <= 0x00) goto yy691;
+ if (yych <= 0x08) goto yy53;
+ } else {
+ if (yych != ' ') goto yy53;
+ }
+yy691:
+ YYDEBUG(691, *YYCURSOR);
+ ++YYCURSOR;
+ YYDEBUG(692, *YYCURSOR);
+ {
DEBUG_OUTPUT("timetiny12 | timeshort12 | timelong12");
TIMELIB_INIT;
TIMELIB_HAVE_TIME();
@@ -12895,19 +12855,19 @@ yy693:
TIMELIB_DEINIT;
return TIMELIB_TIME12;
}
-yy695:
- YYDEBUG(695, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy698;
- } else {
- if(yych <= '9') goto yy712;
- if(yych <= ':') goto yy698;
- }
-yy696:
- YYDEBUG(696, *YYCURSOR);
- {
+yy693:
+ YYDEBUG(693, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy696;
+ } else {
+ if (yych <= '9') goto yy710;
+ if (yych <= ':') goto yy696;
+ }
+yy694:
+ YYDEBUG(694, *YYCURSOR);
+ {
int tz_not_found;
DEBUG_OUTPUT("timeshort24 | timelong24 | iso8601long");
TIMELIB_INIT;
@@ -12931,274 +12891,274 @@ yy696:
TIMELIB_DEINIT;
return TIMELIB_TIME24_WITH_ZONE;
}
+yy695:
+ YYDEBUG(695, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy696;
+ if (yych != ':') goto yy694;
+yy696:
+ YYDEBUG(696, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy697;
+ if (yych <= '6') goto yy698;
+ if (yych <= '9') goto yy699;
+ goto yy53;
yy697:
- YYDEBUG(697, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy698;
- if(yych != ':') goto yy696;
+ YYDEBUG(697, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy700;
+ if (yych <= '/') goto yy694;
+ if (yych <= '9') goto yy703;
+ goto yy694;
yy698:
- YYDEBUG(698, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy699;
- if(yych <= '6') goto yy700;
- if(yych <= '9') goto yy701;
- goto yy53;
+ YYDEBUG(698, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy700;
+ if (yych == '0') goto yy703;
+ goto yy694;
yy699:
- YYDEBUG(699, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy702;
- if(yych <= '/') goto yy696;
- if(yych <= '9') goto yy705;
- goto yy696;
+ YYDEBUG(699, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych != '.') goto yy694;
yy700:
- YYDEBUG(700, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy702;
- if(yych == '0') goto yy705;
- goto yy696;
+ YYDEBUG(700, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
yy701:
- YYDEBUG(701, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych != '.') goto yy696;
-yy702:
- YYDEBUG(702, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
+ YYDEBUG(701, *YYCURSOR);
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ YYDEBUG(702, *YYCURSOR);
+ if (yych <= '/') goto yy694;
+ if (yych <= '9') goto yy701;
+ goto yy694;
yy703:
- YYDEBUG(703, *YYCURSOR);
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- YYDEBUG(704, *YYCURSOR);
- if(yych <= '/') goto yy696;
- if(yych <= '9') goto yy703;
- goto yy696;
-yy705:
- YYDEBUG(705, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= 0x1F) {
- if(yych != 0x09) goto yy696;
- } else {
- if(yych <= ' ') goto yy706;
- if(yych == '.') goto yy702;
- goto yy696;
- }
+ YYDEBUG(703, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= 0x1F) {
+ if (yych != '\t') goto yy694;
} else {
- if(yych <= '`') {
- if(yych <= 'A') goto yy708;
- if(yych == 'P') goto yy708;
- goto yy696;
- } else {
- if(yych <= 'a') goto yy708;
- if(yych == 'p') goto yy708;
- goto yy696;
- }
+ if (yych <= ' ') goto yy704;
+ if (yych == '.') goto yy700;
+ goto yy694;
}
-yy706:
- YYDEBUG(706, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
- yych = *YYCURSOR;
- YYDEBUG(707, *YYCURSOR);
- if(yych <= 'A') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy706;
- goto yy53;
- } else {
- if(yych <= ' ') goto yy706;
- if(yych <= '@') goto yy53;
- }
- } else {
- if(yych <= '`') {
- if(yych != 'P') goto yy53;
- } else {
- if(yych <= 'a') goto yy708;
- if(yych != 'p') goto yy53;
- }
- }
-yy708:
- YYDEBUG(708, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'L') {
- if(yych != '.') goto yy53;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'A') goto yy706;
+ if (yych == 'P') goto yy706;
+ goto yy694;
} else {
- if(yych <= 'M') goto yy710;
- if(yych == 'm') goto yy710;
- goto yy53;
+ if (yych <= 'a') goto yy706;
+ if (yych == 'p') goto yy706;
+ goto yy694;
}
- YYDEBUG(709, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy710;
- if(yych != 'm') goto yy53;
-yy710:
- YYDEBUG(710, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x1F) {
- if(yych <= 0x00) goto yy693;
- if(yych == 0x09) goto yy693;
+ }
+yy704:
+ YYDEBUG(704, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
+ yych = *YYCURSOR;
+ YYDEBUG(705, *YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy704;
goto yy53;
} else {
- if(yych <= ' ') goto yy693;
- if(yych != '.') goto yy53;
+ if (yych <= ' ') goto yy704;
+ if (yych <= '@') goto yy53;
}
- YYDEBUG(711, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x09) {
- if(yych <= 0x00) goto yy693;
- if(yych <= 0x08) goto yy53;
- goto yy693;
+ } else {
+ if (yych <= '`') {
+ if (yych != 'P') goto yy53;
} else {
- if(yych == ' ') goto yy693;
- goto yy53;
+ if (yych <= 'a') goto yy706;
+ if (yych != 'p') goto yy53;
}
-yy712:
- YYDEBUG(712, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ':') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy713;
- if(yych <= 0x1F) goto yy696;
- } else {
- if(yych == '.') goto yy698;
- if(yych <= '9') goto yy696;
- goto yy698;
- }
+ }
+yy706:
+ YYDEBUG(706, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'L') {
+ if (yych != '.') goto yy53;
+ } else {
+ if (yych <= 'M') goto yy708;
+ if (yych == 'm') goto yy708;
+ goto yy53;
+ }
+ YYDEBUG(707, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy708;
+ if (yych != 'm') goto yy53;
+yy708:
+ YYDEBUG(708, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 0x1F) {
+ if (yych <= 0x00) goto yy691;
+ if (yych == '\t') goto yy691;
+ goto yy53;
+ } else {
+ if (yych <= ' ') goto yy691;
+ if (yych != '.') goto yy53;
+ }
+ YYDEBUG(709, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '\t') {
+ if (yych <= 0x00) goto yy691;
+ if (yych <= 0x08) goto yy53;
+ goto yy691;
+ } else {
+ if (yych == ' ') goto yy691;
+ goto yy53;
+ }
+yy710:
+ YYDEBUG(710, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ':') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy711;
+ if (yych <= 0x1F) goto yy694;
+ } else {
+ if (yych == '.') goto yy696;
+ if (yych <= '9') goto yy694;
+ goto yy696;
+ }
+ } else {
+ if (yych <= 'P') {
+ if (yych == 'A') goto yy713;
+ if (yych <= 'O') goto yy694;
+ goto yy713;
} else {
- if(yych <= 'P') {
- if(yych == 'A') goto yy715;
- if(yych <= 'O') goto yy696;
- goto yy715;
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy694;
+ goto yy713;
} else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy696;
- goto yy715;
- } else {
- if(yych == 'p') goto yy715;
- goto yy696;
- }
+ if (yych == 'p') goto yy713;
+ goto yy694;
}
}
-yy713:
- YYDEBUG(713, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
- yych = *YYCURSOR;
- YYDEBUG(714, *YYCURSOR);
- if(yych <= 'A') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy713;
- goto yy53;
- } else {
- if(yych <= ' ') goto yy713;
- if(yych <= '@') goto yy53;
- }
+ }
+yy711:
+ YYDEBUG(711, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
+ yych = *YYCURSOR;
+ YYDEBUG(712, *YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy711;
+ goto yy53;
} else {
- if(yych <= '`') {
- if(yych != 'P') goto yy53;
- } else {
- if(yych <= 'a') goto yy715;
- if(yych != 'p') goto yy53;
- }
+ if (yych <= ' ') goto yy711;
+ if (yych <= '@') goto yy53;
}
-yy715:
- YYDEBUG(715, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'L') {
- if(yych != '.') goto yy53;
+ } else {
+ if (yych <= '`') {
+ if (yych != 'P') goto yy53;
} else {
- if(yych <= 'M') goto yy717;
- if(yych == 'm') goto yy717;
- goto yy53;
+ if (yych <= 'a') goto yy713;
+ if (yych != 'p') goto yy53;
}
- YYDEBUG(716, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy717;
- if(yych != 'm') goto yy53;
+ }
+yy713:
+ YYDEBUG(713, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'L') {
+ if (yych != '.') goto yy53;
+ } else {
+ if (yych <= 'M') goto yy715;
+ if (yych == 'm') goto yy715;
+ goto yy53;
+ }
+ YYDEBUG(714, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy715;
+ if (yych != 'm') goto yy53;
+yy715:
+ YYDEBUG(715, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 0x1F) {
+ if (yych <= 0x00) goto yy691;
+ if (yych == '\t') goto yy691;
+ goto yy53;
+ } else {
+ if (yych <= ' ') goto yy691;
+ if (yych != '.') goto yy53;
+ }
+ YYDEBUG(716, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '\t') {
+ if (yych <= 0x00) goto yy691;
+ if (yych <= 0x08) goto yy53;
+ goto yy691;
+ } else {
+ if (yych == ' ') goto yy691;
+ goto yy53;
+ }
yy717:
- YYDEBUG(717, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x1F) {
- if(yych <= 0x00) goto yy693;
- if(yych == 0x09) goto yy693;
- goto yy53;
- } else {
- if(yych <= ' ') goto yy693;
- if(yych != '.') goto yy53;
+ YYDEBUG(717, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'V') goto yy718;
+ if (yych != 'v') goto yy53;
+yy718:
+ YYDEBUG(718, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych != '\t') goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
}
- YYDEBUG(718, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x09) {
- if(yych <= 0x00) goto yy693;
- if(yych <= 0x08) goto yy53;
- goto yy693;
+ } else {
+ if (yych <= 'D') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych == ' ') goto yy693;
- goto yy53;
+ if (yych <= 'E') goto yy723;
+ if (yych == 'e') goto yy723;
+ goto yy679;
}
+ }
yy719:
- YYDEBUG(719, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'V') goto yy720;
- if(yych != 'v') goto yy53;
+ YYDEBUG(719, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
+ yych = *YYCURSOR;
yy720:
- YYDEBUG(720, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych != 0x09) goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- }
+ YYDEBUG(720, *YYCURSOR);
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy719;
+ if (yych <= 0x1F) goto yy53;
+ goto yy719;
+ } else {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy53;
+ goto yy719;
} else {
- if(yych <= 'D') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'E') goto yy725;
- if(yych == 'e') goto yy725;
- goto yy681;
- }
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
}
+ }
yy721:
- YYDEBUG(721, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
- yych = *YYCURSOR;
+ YYDEBUG(721, *YYCURSOR);
+ ++YYCURSOR;
+ if ((yych = *YYCURSOR) <= '/') goto yy722;
+ if (yych <= '9') goto yy728;
yy722:
- YYDEBUG(722, *YYCURSOR);
- if(yych <= ' ') {
- if(yych == 0x09) goto yy721;
- if(yych <= 0x1F) goto yy53;
- goto yy721;
- } else {
- if(yych <= '.') {
- if(yych <= ',') goto yy53;
- goto yy721;
- } else {
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- }
- }
-yy723:
- YYDEBUG(723, *YYCURSOR);
- ++YYCURSOR;
- if((yych = *YYCURSOR) <= '/') goto yy724;
- if(yych <= '9') goto yy730;
-yy724:
- YYDEBUG(724, *YYCURSOR);
- {
+ YYDEBUG(722, *YYCURSOR);
+ {
DEBUG_OUTPUT("datefull");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -13210,1408 +13170,1410 @@ yy724:
TIMELIB_DEINIT;
return TIMELIB_DATE_FULL;
}
+yy723:
+ YYDEBUG(723, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy724;
+ if (yych != 'm') goto yy53;
+yy724:
+ YYDEBUG(724, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy725;
+ if (yych != 'b') goto yy53;
yy725:
- YYDEBUG(725, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy726;
- if(yych != 'm') goto yy53;
+ YYDEBUG(725, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy726;
+ if (yych != 'e') goto yy53;
yy726:
- YYDEBUG(726, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy727;
- if(yych != 'b') goto yy53;
+ YYDEBUG(726, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy727;
+ if (yych != 'r') goto yy53;
yy727:
- YYDEBUG(727, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy728;
- if(yych != 'e') goto yy53;
+ YYDEBUG(727, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy719;
+ if (yych <= 0x1F) goto yy679;
+ goto yy719;
+ } else {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy679;
+ goto yy719;
+ } else {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
+ }
+ }
yy728:
- YYDEBUG(728, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy729;
- if(yych != 'r') goto yy53;
+ YYDEBUG(728, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy722;
+ if (yych >= ':') goto yy722;
yy729:
- YYDEBUG(729, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ' ') {
- if(yych == 0x09) goto yy721;
- if(yych <= 0x1F) goto yy681;
- goto yy721;
+ YYDEBUG(729, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy722;
+ if (yych >= ':') goto yy722;
+ YYDEBUG(730, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy722;
+yy731:
+ YYDEBUG(731, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy732;
+ if (yych != 't') goto yy53;
+yy732:
+ YYDEBUG(732, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'N') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= '.') {
- if(yych <= ',') goto yy681;
- goto yy721;
- } else {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- }
+ if (yych <= 'O') goto yy733;
+ if (yych != 'o') goto yy679;
}
-yy730:
- YYDEBUG(730, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy724;
- if(yych >= ':') goto yy724;
-yy731:
- YYDEBUG(731, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy724;
- if(yych >= ':') goto yy724;
- YYDEBUG(732, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy724;
+ }
yy733:
- YYDEBUG(733, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy734;
- if(yych != 't') goto yy53;
+ YYDEBUG(733, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy734;
+ if (yych != 'b') goto yy53;
yy734:
- YYDEBUG(734, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- goto yy721;
- }
- } else {
- if(yych <= 'N') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'O') goto yy735;
- if(yych != 'o') goto yy681;
- }
- }
+ YYDEBUG(734, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy735;
+ if (yych != 'e') goto yy53;
yy735:
- YYDEBUG(735, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy736;
- if(yych != 'b') goto yy53;
+ YYDEBUG(735, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy727;
+ if (yych == 'r') goto yy727;
+ goto yy53;
yy736:
- YYDEBUG(736, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy737;
- if(yych != 'e') goto yy53;
+ YYDEBUG(736, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'G') goto yy740;
+ if (yych == 'g') goto yy740;
+ goto yy53;
yy737:
- YYDEBUG(737, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy729;
- if(yych == 'r') goto yy729;
- goto yy53;
+ YYDEBUG(737, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy738;
+ if (yych != 'r') goto yy53;
yy738:
- YYDEBUG(738, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'G') goto yy742;
- if(yych == 'g') goto yy742;
- goto yy53;
+ YYDEBUG(738, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
+ } else {
+ if (yych <= 'I') goto yy739;
+ if (yych != 'i') goto yy679;
+ }
+ }
yy739:
- YYDEBUG(739, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy740;
- if(yych != 'r') goto yy53;
+ YYDEBUG(739, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'L') goto yy727;
+ if (yych == 'l') goto yy727;
+ goto yy53;
yy740:
- YYDEBUG(740, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- goto yy721;
- }
+ YYDEBUG(740, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'T') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'H') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'I') goto yy741;
- if(yych != 'i') goto yy681;
- }
+ if (yych <= 'U') goto yy741;
+ if (yych != 'u') goto yy679;
}
+ }
yy741:
- YYDEBUG(741, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'L') goto yy729;
- if(yych == 'l') goto yy729;
- goto yy53;
+ YYDEBUG(741, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy742;
+ if (yych != 's') goto yy53;
yy742:
- YYDEBUG(742, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- goto yy721;
- }
+ YYDEBUG(742, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy727;
+ if (yych == 't') goto yy727;
+ goto yy53;
+yy743:
+ YYDEBUG(743, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych == 'L') goto yy750;
+ if (yych <= 'M') goto yy53;
+ goto yy749;
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'k') goto yy53;
+ goto yy750;
} else {
- if(yych <= 'T') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'U') goto yy743;
- if(yych != 'u') goto yy681;
- }
+ if (yych == 'n') goto yy749;
+ goto yy53;
}
-yy743:
- YYDEBUG(743, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy744;
- if(yych != 's') goto yy53;
+ }
yy744:
- YYDEBUG(744, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy729;
- if(yych == 't') goto yy729;
- goto yy53;
+ YYDEBUG(744, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy745;
+ if (yych != 'n') goto yy53;
yy745:
- YYDEBUG(745, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych == 'L') goto yy752;
- if(yych <= 'M') goto yy53;
- goto yy751;
- } else {
- if(yych <= 'l') {
- if(yych <= 'k') goto yy53;
- goto yy752;
- } else {
- if(yych == 'n') goto yy751;
- goto yy53;
- }
+ YYDEBUG(745, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ goto yy719;
}
-yy746:
- YYDEBUG(746, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy747;
- if(yych != 'n') goto yy53;
-yy747:
- YYDEBUG(747, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- goto yy721;
- }
+ } else {
+ if (yych <= 'T') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'T') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'U') goto yy748;
- if(yych != 'u') goto yy681;
- }
+ if (yych <= 'U') goto yy746;
+ if (yych != 'u') goto yy679;
}
+ }
+yy746:
+ YYDEBUG(746, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy747;
+ if (yych != 'a') goto yy53;
+yy747:
+ YYDEBUG(747, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy748;
+ if (yych != 'r') goto yy53;
yy748:
- YYDEBUG(748, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy749;
- if(yych != 'a') goto yy53;
+ YYDEBUG(748, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy727;
+ if (yych == 'y') goto yy727;
+ goto yy53;
yy749:
- YYDEBUG(749, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy750;
- if(yych != 'r') goto yy53;
+ YYDEBUG(749, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'D') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
+ } else {
+ if (yych <= 'E') goto yy727;
+ if (yych == 'e') goto yy727;
+ goto yy679;
+ }
+ }
yy750:
- YYDEBUG(750, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy729;
- if(yych == 'y') goto yy729;
- goto yy53;
+ YYDEBUG(750, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'X') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
+ } else {
+ if (yych <= 'Y') goto yy727;
+ if (yych == 'y') goto yy727;
+ goto yy679;
+ }
+ }
yy751:
- YYDEBUG(751, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- goto yy721;
- }
+ YYDEBUG(751, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy679;
+ goto yy719;
} else {
- if(yych <= 'D') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'E') goto yy729;
- if(yych == 'e') goto yy729;
- goto yy681;
- }
+ if (yych == ' ') goto yy719;
+ goto yy679;
}
-yy752:
- YYDEBUG(752, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- goto yy721;
- }
+ } else {
+ if (yych <= '9') {
+ if (yych <= '.') goto yy719;
+ if (yych <= '/') goto yy679;
+ goto yy721;
} else {
- if(yych <= 'X') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'Y') goto yy729;
- if(yych == 'y') goto yy729;
- goto yy681;
- }
+ if (yych == 'I') goto yy727;
+ goto yy679;
}
-yy753:
- YYDEBUG(753, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy681;
- goto yy721;
- } else {
- if(yych == ' ') goto yy721;
- goto yy681;
- }
+ }
+yy752:
+ YYDEBUG(752, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy679;
+ goto yy719;
} else {
- if(yych <= '9') {
- if(yych <= '.') goto yy721;
- if(yych <= '/') goto yy681;
- goto yy723;
- } else {
- if(yych == 'I') goto yy729;
- goto yy681;
- }
+ if (yych == ' ') goto yy719;
+ goto yy679;
}
-yy754:
- YYDEBUG(754, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy681;
- goto yy721;
- } else {
- if(yych == ' ') goto yy721;
- goto yy681;
- }
+ } else {
+ if (yych <= '9') {
+ if (yych <= '.') goto yy719;
+ if (yych <= '/') goto yy679;
+ goto yy721;
} else {
- if(yych <= '9') {
- if(yych <= '.') goto yy721;
- if(yych <= '/') goto yy681;
- goto yy723;
- } else {
- if(yych != 'I') goto yy681;
- }
+ if (yych != 'I') goto yy679;
}
- YYDEBUG(755, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy681;
- goto yy721;
- } else {
- if(yych == ' ') goto yy721;
- goto yy681;
- }
+ }
+ YYDEBUG(753, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy679;
+ goto yy719;
} else {
- if(yych <= '9') {
- if(yych <= '.') goto yy721;
- if(yych <= '/') goto yy681;
- goto yy723;
- } else {
- if(yych == 'I') goto yy729;
- goto yy681;
- }
+ if (yych == ' ') goto yy719;
+ goto yy679;
}
-yy756:
- YYDEBUG(756, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy681;
- goto yy721;
- } else {
- if(yych == ' ') goto yy721;
- goto yy681;
- }
+ } else {
+ if (yych <= '9') {
+ if (yych <= '.') goto yy719;
+ if (yych <= '/') goto yy679;
+ goto yy721;
} else {
- if(yych <= '9') {
- if(yych <= '.') goto yy721;
- if(yych <= '/') goto yy681;
- goto yy723;
- } else {
- if(yych == 'I') goto yy729;
- goto yy681;
- }
+ if (yych == 'I') goto yy727;
+ goto yy679;
}
-yy757:
- YYDEBUG(757, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ',') goto yy696;
- if(yych <= '-') goto yy790;
- goto yy791;
- } else {
- if(yych <= '/') goto yy696;
- if(yych <= '9') goto yy802;
- if(yych <= ':') goto yy698;
- goto yy696;
+ }
+yy754:
+ YYDEBUG(754, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy679;
+ goto yy719;
+ } else {
+ if (yych == ' ') goto yy719;
+ goto yy679;
}
-yy758:
- YYDEBUG(758, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= ',') goto yy696;
- if(yych <= '-') goto yy790;
- if(yych <= '.') goto yy791;
- goto yy696;
+ } else {
+ if (yych <= '9') {
+ if (yych <= '.') goto yy719;
+ if (yych <= '/') goto yy679;
+ goto yy721;
} else {
- if(yych <= '2') goto yy802;
- if(yych <= '9') goto yy712;
- if(yych <= ':') goto yy698;
- goto yy696;
+ if (yych == 'I') goto yy727;
+ goto yy679;
}
+ }
+yy755:
+ YYDEBUG(755, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ',') goto yy694;
+ if (yych <= '-') goto yy789;
+ goto yy788;
+ } else {
+ if (yych <= '/') goto yy694;
+ if (yych <= '9') goto yy801;
+ if (yych <= ':') goto yy696;
+ goto yy694;
+ }
+yy756:
+ YYDEBUG(756, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= ',') goto yy694;
+ if (yych <= '-') goto yy789;
+ if (yych <= '.') goto yy788;
+ goto yy694;
+ } else {
+ if (yych <= '2') goto yy801;
+ if (yych <= '9') goto yy710;
+ if (yych <= ':') goto yy696;
+ goto yy694;
+ }
+yy757:
+ YYDEBUG(757, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ',') goto yy694;
+ if (yych <= '-') goto yy789;
+ goto yy788;
+ } else {
+ if (yych <= '/') goto yy694;
+ if (yych <= '9') goto yy710;
+ if (yych <= ':') goto yy696;
+ goto yy694;
+ }
+yy758:
+ YYDEBUG(758, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ',') goto yy694;
+ if (yych <= '-') goto yy789;
+ goto yy788;
+ } else {
+ if (yych == ':') goto yy696;
+ goto yy694;
+ }
yy759:
- YYDEBUG(759, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ',') goto yy696;
- if(yych <= '-') goto yy790;
- goto yy791;
- } else {
- if(yych <= '/') goto yy696;
- if(yych <= '9') goto yy712;
- if(yych <= ':') goto yy698;
- goto yy696;
- }
+ YYDEBUG(759, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy782;
+ if (yych == 'e') goto yy782;
+ goto yy53;
yy760:
- YYDEBUG(760, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ',') goto yy696;
- if(yych <= '-') goto yy790;
- goto yy791;
- } else {
- if(yych == ':') goto yy698;
- goto yy696;
- }
+ YYDEBUG(760, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy779;
+ if (yych == 'a') goto yy779;
+ goto yy53;
yy761:
- YYDEBUG(761, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy784;
- if(yych == 'e') goto yy784;
- goto yy53;
+ YYDEBUG(761, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'P') goto yy737;
+ if (yych <= 'T') goto yy53;
+ goto yy736;
+ } else {
+ if (yych <= 'p') {
+ if (yych <= 'o') goto yy53;
+ goto yy737;
+ } else {
+ if (yych == 'u') goto yy736;
+ goto yy53;
+ }
+ }
yy762:
- YYDEBUG(762, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy781;
- if(yych == 'a') goto yy781;
- goto yy53;
+ YYDEBUG(762, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy772;
+ if (yych == 'e') goto yy772;
+ goto yy53;
yy763:
- YYDEBUG(763, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'P') goto yy739;
- if(yych <= 'T') goto yy53;
- goto yy738;
- } else {
- if(yych <= 'p') {
- if(yych <= 'o') goto yy53;
- goto yy739;
- } else {
- if(yych == 'u') goto yy738;
- goto yy53;
- }
- }
+ YYDEBUG(763, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy766;
+ if (yych == 'e') goto yy766;
+ goto yy53;
yy764:
- YYDEBUG(764, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy774;
- if(yych == 'e') goto yy774;
- goto yy53;
+ YYDEBUG(764, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 13) YYFILL(13);
+ yych = *YYCURSOR;
yy765:
- YYDEBUG(765, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy768;
- if(yych == 'e') goto yy768;
- goto yy53;
+ YYDEBUG(765, *YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t':
+ case ' ':
+ case '-':
+ case '.': goto yy764;
+ case 'A':
+ case 'a': goto yy761;
+ case 'D':
+ case 'd': goto yy763;
+ case 'F':
+ case 'f': goto yy759;
+ case 'I': goto yy678;
+ case 'J':
+ case 'j': goto yy682;
+ case 'M':
+ case 'm': goto yy760;
+ case 'N':
+ case 'n': goto yy685;
+ case 'O':
+ case 'o': goto yy684;
+ case 'S':
+ case 's': goto yy762;
+ case 'V': goto yy680;
+ case 'X': goto yy681;
+ default: goto yy53;
+ }
yy766:
- YYDEBUG(766, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 13) YYFILL(13);
- yych = *YYCURSOR;
+ YYDEBUG(766, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy767;
+ if (yych != 'c') goto yy53;
yy767:
- YYDEBUG(767, *YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09:
- case ' ':
- case '-':
- case '.': goto yy766;
- case 'A':
- case 'a': goto yy763;
- case 'D':
- case 'd': goto yy765;
- case 'F':
- case 'f': goto yy761;
- case 'I': goto yy680;
- case 'J':
- case 'j': goto yy684;
- case 'M':
- case 'm': goto yy762;
- case 'N':
- case 'n': goto yy687;
- case 'O':
- case 'o': goto yy686;
- case 'S':
- case 's': goto yy764;
- case 'V': goto yy682;
- case 'X': goto yy683;
- default: goto yy53;
+ YYDEBUG(767, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ goto yy719;
}
-yy768:
- YYDEBUG(768, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy769;
- if(yych != 'c') goto yy53;
-yy769:
- YYDEBUG(769, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- goto yy721;
- }
+ } else {
+ if (yych <= 'D') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'D') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'E') goto yy770;
- if(yych != 'e') goto yy681;
- }
+ if (yych <= 'E') goto yy768;
+ if (yych != 'e') goto yy679;
}
+ }
+yy768:
+ YYDEBUG(768, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy769;
+ if (yych != 'm') goto yy53;
+yy769:
+ YYDEBUG(769, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy770;
+ if (yych != 'b') goto yy53;
yy770:
- YYDEBUG(770, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy771;
- if(yych != 'm') goto yy53;
+ YYDEBUG(770, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy771;
+ if (yych != 'e') goto yy53;
yy771:
- YYDEBUG(771, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy772;
- if(yych != 'b') goto yy53;
+ YYDEBUG(771, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy727;
+ if (yych == 'r') goto yy727;
+ goto yy53;
yy772:
- YYDEBUG(772, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy773;
- if(yych != 'e') goto yy53;
+ YYDEBUG(772, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'P') goto yy773;
+ if (yych != 'p') goto yy53;
yy773:
- YYDEBUG(773, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy729;
- if(yych == 'r') goto yy729;
- goto yy53;
-yy774:
- YYDEBUG(774, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'P') goto yy775;
- if(yych != 'p') goto yy53;
-yy775:
- YYDEBUG(775, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- goto yy721;
- }
+ YYDEBUG(773, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'S') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'S') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'T') goto yy776;
- if(yych != 't') goto yy681;
- }
+ if (yych <= 'T') goto yy774;
+ if (yych != 't') goto yy679;
}
-yy776:
- YYDEBUG(776, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- goto yy721;
- }
+ }
+yy774:
+ YYDEBUG(774, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'D') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'D') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'E') goto yy777;
- if(yych != 'e') goto yy681;
- }
+ if (yych <= 'E') goto yy775;
+ if (yych != 'e') goto yy679;
}
+ }
+yy775:
+ YYDEBUG(775, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy776;
+ if (yych != 'm') goto yy53;
+yy776:
+ YYDEBUG(776, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy777;
+ if (yych != 'b') goto yy53;
yy777:
- YYDEBUG(777, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy778;
- if(yych != 'm') goto yy53;
+ YYDEBUG(777, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy778;
+ if (yych != 'e') goto yy53;
yy778:
- YYDEBUG(778, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy779;
- if(yych != 'b') goto yy53;
+ YYDEBUG(778, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy727;
+ if (yych == 'r') goto yy727;
+ goto yy53;
yy779:
- YYDEBUG(779, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy780;
- if(yych != 'e') goto yy53;
+ YYDEBUG(779, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Y') {
+ if (yych == 'R') goto yy780;
+ if (yych <= 'X') goto yy53;
+ goto yy727;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy53;
+ } else {
+ if (yych == 'y') goto yy727;
+ goto yy53;
+ }
+ }
yy780:
- YYDEBUG(780, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy729;
- if(yych == 'r') goto yy729;
- goto yy53;
-yy781:
- YYDEBUG(781, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Y') {
- if(yych == 'R') goto yy782;
- if(yych <= 'X') goto yy53;
- goto yy729;
+ YYDEBUG(780, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'B') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy53;
- } else {
- if(yych == 'y') goto yy729;
- goto yy53;
- }
+ if (yych <= 'C') goto yy781;
+ if (yych != 'c') goto yy679;
}
+ }
+yy781:
+ YYDEBUG(781, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'H') goto yy727;
+ if (yych == 'h') goto yy727;
+ goto yy53;
yy782:
- YYDEBUG(782, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- goto yy721;
- }
+ YYDEBUG(782, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy783;
+ if (yych != 'b') goto yy53;
+yy783:
+ YYDEBUG(783, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'Q') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'B') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'C') goto yy783;
- if(yych != 'c') goto yy681;
- }
+ if (yych <= 'R') goto yy784;
+ if (yych != 'r') goto yy679;
}
-yy783:
- YYDEBUG(783, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'H') goto yy729;
- if(yych == 'h') goto yy729;
- goto yy53;
+ }
yy784:
- YYDEBUG(784, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy785;
- if(yych != 'b') goto yy53;
+ YYDEBUG(784, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'U') goto yy785;
+ if (yych != 'u') goto yy53;
yy785:
- YYDEBUG(785, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- goto yy721;
- }
- } else {
- if(yych <= 'Q') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'R') goto yy786;
- if(yych != 'r') goto yy681;
- }
- }
+ YYDEBUG(785, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy786;
+ if (yych != 'a') goto yy53;
yy786:
- YYDEBUG(786, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'U') goto yy787;
- if(yych != 'u') goto yy53;
+ YYDEBUG(786, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy787;
+ if (yych != 'r') goto yy53;
yy787:
- YYDEBUG(787, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy788;
- if(yych != 'a') goto yy53;
+ YYDEBUG(787, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy727;
+ if (yych == 'y') goto yy727;
+ goto yy53;
yy788:
- YYDEBUG(788, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy789;
- if(yych != 'r') goto yy53;
+ YYDEBUG(788, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy795;
+ if (yych <= '6') goto yy796;
+ if (yych <= '9') goto yy797;
+ goto yy53;
yy789:
- YYDEBUG(789, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy729;
- if(yych == 'y') goto yy729;
- goto yy53;
-yy790:
- YYDEBUG(790, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy801;
- goto yy53;
+ YYDEBUG(789, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(790, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
yy791:
- YYDEBUG(791, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy792;
- if(yych <= '6') goto yy793;
- if(yych <= '9') goto yy794;
- goto yy53;
+ YYDEBUG(791, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
yy792:
- YYDEBUG(792, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy702;
- if(yych <= '/') goto yy696;
- if(yych <= '9') goto yy800;
- goto yy696;
-yy793:
- YYDEBUG(793, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy702;
- goto yy696;
- } else {
- if(yych <= '0') goto yy800;
- if(yych <= '9') goto yy795;
- goto yy696;
- }
-yy794:
- YYDEBUG(794, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy702;
- if(yych <= '/') goto yy696;
- if(yych >= ':') goto yy696;
-yy795:
- YYDEBUG(795, *YYCURSOR);
- yyaccept = 13;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') goto yy796;
- if(yych <= '9') goto yy797;
-yy796:
- YYDEBUG(796, *YYCURSOR);
- {
- DEBUG_OUTPUT("pointed date YY");
+ YYDEBUG(792, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(793, *YYCURSOR);
+ ++YYCURSOR;
+ YYDEBUG(794, *YYCURSOR);
+ {
+ DEBUG_OUTPUT("pointed date YYYY");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
s->time->d = timelib_get_nr((char **) &ptr, 2);
s->time->m = timelib_get_nr((char **) &ptr, 2);
- s->time->y = timelib_get_nr((char **) &ptr, 2);
- TIMELIB_PROCESS_YEAR(s->time->y);
+ s->time->y = timelib_get_nr((char **) &ptr, 4);
TIMELIB_DEINIT;
return TIMELIB_DATE_FULL_POINTED;
}
+yy795:
+ YYDEBUG(795, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy700;
+ if (yych <= '/') goto yy694;
+ if (yych <= '9') goto yy800;
+ goto yy694;
+yy796:
+ YYDEBUG(796, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy700;
+ goto yy694;
+ } else {
+ if (yych <= '0') goto yy800;
+ if (yych <= '9') goto yy798;
+ goto yy694;
+ }
yy797:
- YYDEBUG(797, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- YYDEBUG(798, *YYCURSOR);
- ++YYCURSOR;
- YYDEBUG(799, *YYCURSOR);
- {
- DEBUG_OUTPUT("pointed date YYYY");
+ YYDEBUG(797, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy700;
+ if (yych <= '/') goto yy694;
+ if (yych >= ':') goto yy694;
+yy798:
+ YYDEBUG(798, *YYCURSOR);
+ yyaccept = 13;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') goto yy799;
+ if (yych <= '9') goto yy792;
+yy799:
+ YYDEBUG(799, *YYCURSOR);
+ {
+ DEBUG_OUTPUT("pointed date YY");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
s->time->d = timelib_get_nr((char **) &ptr, 2);
s->time->m = timelib_get_nr((char **) &ptr, 2);
- s->time->y = timelib_get_nr((char **) &ptr, 4);
+ s->time->y = timelib_get_nr((char **) &ptr, 2);
+ TIMELIB_PROCESS_YEAR(s->time->y);
TIMELIB_DEINIT;
return TIMELIB_DATE_FULL_POINTED;
}
yy800:
- YYDEBUG(800, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy706;
- if(yych <= 0x1F) goto yy696;
- goto yy706;
- } else {
- if(yych == '.') goto yy702;
- if(yych <= '/') goto yy696;
- goto yy797;
- }
+ YYDEBUG(800, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy704;
+ if (yych <= 0x1F) goto yy694;
+ goto yy704;
+ } else {
+ if (yych == '.') goto yy700;
+ if (yych <= '/') goto yy694;
+ goto yy792;
+ }
+ } else {
+ if (yych <= 'P') {
+ if (yych == 'A') goto yy706;
+ if (yych <= 'O') goto yy694;
+ goto yy706;
} else {
- if(yych <= 'P') {
- if(yych == 'A') goto yy708;
- if(yych <= 'O') goto yy696;
- goto yy708;
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy694;
+ goto yy706;
} else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy696;
- goto yy708;
- } else {
- if(yych == 'p') goto yy708;
- goto yy696;
- }
+ if (yych == 'p') goto yy706;
+ goto yy694;
}
}
+ }
yy801:
- YYDEBUG(801, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy795;
- goto yy53;
-yy802:
- YYDEBUG(802, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ':') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy713;
- if(yych <= 0x1F) goto yy696;
- goto yy713;
- } else {
- if(yych <= '-') {
- if(yych <= ',') goto yy696;
- goto yy790;
- } else {
- if(yych <= '.') goto yy791;
- if(yych <= '9') goto yy696;
- goto yy698;
- }
+ YYDEBUG(801, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ':') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy711;
+ if (yych <= 0x1F) goto yy694;
+ goto yy711;
+ } else {
+ if (yych <= '-') {
+ if (yych <= ',') goto yy694;
+ goto yy789;
+ } else {
+ if (yych <= '.') goto yy788;
+ if (yych <= '9') goto yy694;
+ goto yy696;
}
+ }
+ } else {
+ if (yych <= 'P') {
+ if (yych == 'A') goto yy713;
+ if (yych <= 'O') goto yy694;
+ goto yy713;
} else {
- if(yych <= 'P') {
- if(yych == 'A') goto yy715;
- if(yych <= 'O') goto yy696;
- goto yy715;
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy694;
+ goto yy713;
} else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy696;
- goto yy715;
- } else {
- if(yych == 'p') goto yy715;
- goto yy696;
- }
+ if (yych == 'p') goto yy713;
+ goto yy694;
}
}
+ }
+yy802:
+ YYDEBUG(802, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '.') {
+ if (yych <= ',') goto yy53;
+ if (yych <= '-') goto yy841;
+ goto yy789;
+ } else {
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy804;
+ goto yy53;
+ }
yy803:
- YYDEBUG(803, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '.') {
- if(yych <= ',') goto yy53;
- if(yych <= '-') goto yy842;
- goto yy790;
- } else {
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy805;
- goto yy53;
- }
+ YYDEBUG(803, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '.') {
+ if (yych <= ',') goto yy53;
+ if (yych <= '-') goto yy841;
+ goto yy789;
+ } else {
+ if (yych <= '/') goto yy53;
+ if (yych >= '3') goto yy53;
+ }
yy804:
- YYDEBUG(804, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '.') {
- if(yych <= ',') goto yy53;
- if(yych <= '-') goto yy842;
- goto yy790;
- } else {
- if(yych <= '/') goto yy53;
- if(yych >= '3') goto yy53;
- }
+ YYDEBUG(804, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= ',') goto yy53;
+ if (yych <= '-') goto yy841;
+ if (yych <= '.') goto yy789;
+ goto yy53;
yy805:
- YYDEBUG(805, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= ',') goto yy53;
- if(yych <= '-') goto yy842;
- if(yych <= '.') goto yy790;
- goto yy53;
-yy806:
- YYDEBUG(806, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'A') goto yy838;
- if(yych <= 'T') goto yy53;
+ YYDEBUG(805, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'A') goto yy837;
+ if (yych <= 'T') goto yy53;
+ goto yy836;
+ } else {
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy53;
goto yy837;
} else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy53;
- goto yy838;
- } else {
- if(yych == 'u') goto yy837;
- goto yy53;
- }
+ if (yych == 'u') goto yy836;
+ goto yy53;
}
+ }
+yy806:
+ YYDEBUG(806, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy834;
+ if (yych == 'e') goto yy834;
+ goto yy53;
yy807:
- YYDEBUG(807, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy835;
- if(yych == 'e') goto yy835;
- goto yy53;
+ YYDEBUG(807, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy831;
+ if (yych == 'a') goto yy831;
+ goto yy53;
yy808:
- YYDEBUG(808, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy832;
- if(yych == 'a') goto yy832;
- goto yy53;
-yy809:
- YYDEBUG(809, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'P') goto yy829;
- if(yych <= 'T') goto yy53;
+ YYDEBUG(808, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'P') goto yy828;
+ if (yych <= 'T') goto yy53;
+ goto yy827;
+ } else {
+ if (yych <= 'p') {
+ if (yych <= 'o') goto yy53;
goto yy828;
} else {
- if(yych <= 'p') {
- if(yych <= 'o') goto yy53;
- goto yy829;
- } else {
- if(yych == 'u') goto yy828;
- goto yy53;
- }
+ if (yych == 'u') goto yy827;
+ goto yy53;
}
+ }
+yy809:
+ YYDEBUG(809, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy824;
+ if (yych == 'e') goto yy824;
+ goto yy53;
yy810:
- YYDEBUG(810, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy825;
- if(yych == 'e') goto yy825;
- goto yy53;
+ YYDEBUG(810, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy822;
+ if (yych == 'c') goto yy822;
+ goto yy53;
yy811:
- YYDEBUG(811, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy823;
- if(yych == 'c') goto yy823;
- goto yy53;
+ YYDEBUG(811, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'O') goto yy820;
+ if (yych == 'o') goto yy820;
+ goto yy53;
yy812:
- YYDEBUG(812, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'O') goto yy821;
- if(yych == 'o') goto yy821;
- goto yy53;
+ YYDEBUG(812, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy813;
+ if (yych != 'e') goto yy53;
yy813:
- YYDEBUG(813, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy814;
- if(yych != 'e') goto yy53;
+ YYDEBUG(813, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy814;
+ if (yych != 'c') goto yy53;
yy814:
- YYDEBUG(814, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy815;
- if(yych != 'c') goto yy53;
-yy815:
- YYDEBUG(815, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych >= '.') goto yy721;
- }
+ YYDEBUG(814, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych >= '.') goto yy719;
+ }
+ } else {
+ if (yych <= 'D') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'D') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'E') goto yy770;
- if(yych == 'e') goto yy770;
- goto yy681;
- }
+ if (yych <= 'E') goto yy768;
+ if (yych == 'e') goto yy768;
+ goto yy679;
}
+ }
+yy815:
+ YYDEBUG(815, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy720;
+ if (yych <= '0') goto yy816;
+ if (yych <= '2') goto yy817;
+ if (yych <= '3') goto yy818;
+ goto yy720;
yy816:
- YYDEBUG(816, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy722;
- if(yych <= '0') goto yy817;
- if(yych <= '2') goto yy818;
- if(yych <= '3') goto yy819;
- goto yy722;
+ YYDEBUG(816, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy722;
+ if (yych <= '9') goto yy819;
+ goto yy722;
yy817:
- YYDEBUG(817, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy724;
- if(yych <= '9') goto yy820;
- goto yy724;
+ YYDEBUG(817, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy722;
+ if (yych <= '9') goto yy819;
+ goto yy722;
yy818:
- YYDEBUG(818, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy724;
- if(yych <= '9') goto yy820;
- goto yy724;
+ YYDEBUG(818, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy722;
+ if (yych <= '1') goto yy819;
+ if (yych <= '9') goto yy728;
+ goto yy722;
yy819:
- YYDEBUG(819, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy724;
- if(yych <= '1') goto yy820;
- if(yych <= '9') goto yy730;
- goto yy724;
+ YYDEBUG(819, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy722;
+ if (yych <= '9') goto yy729;
+ goto yy722;
yy820:
- YYDEBUG(820, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy724;
- if(yych <= '9') goto yy731;
- goto yy724;
+ YYDEBUG(820, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'V') goto yy821;
+ if (yych != 'v') goto yy53;
yy821:
- YYDEBUG(821, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'V') goto yy822;
- if(yych != 'v') goto yy53;
-yy822:
- YYDEBUG(822, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '-') goto yy816;
- goto yy721;
- }
+ YYDEBUG(821, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '-') goto yy815;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'D') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'D') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'E') goto yy725;
- if(yych == 'e') goto yy725;
- goto yy681;
- }
+ if (yych <= 'E') goto yy723;
+ if (yych == 'e') goto yy723;
+ goto yy679;
}
+ }
+yy822:
+ YYDEBUG(822, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy823;
+ if (yych != 't') goto yy53;
yy823:
- YYDEBUG(823, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy824;
- if(yych != 't') goto yy53;
-yy824:
- YYDEBUG(824, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '-') goto yy816;
- goto yy721;
- }
+ YYDEBUG(823, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '-') goto yy815;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'N') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'N') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'O') goto yy735;
- if(yych == 'o') goto yy735;
- goto yy681;
- }
+ if (yych <= 'O') goto yy733;
+ if (yych == 'o') goto yy733;
+ goto yy679;
}
+ }
+yy824:
+ YYDEBUG(824, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'P') goto yy825;
+ if (yych != 'p') goto yy53;
yy825:
- YYDEBUG(825, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'P') goto yy826;
- if(yych != 'p') goto yy53;
-yy826:
- YYDEBUG(826, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '-') goto yy816;
- goto yy721;
- }
+ YYDEBUG(825, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '-') goto yy815;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'S') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'S') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'T') goto yy827;
- if(yych != 't') goto yy681;
- }
+ if (yych <= 'T') goto yy826;
+ if (yych != 't') goto yy679;
}
-yy827:
- YYDEBUG(827, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '-') goto yy816;
- goto yy721;
- }
+ }
+yy826:
+ YYDEBUG(826, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '-') goto yy815;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'D') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'D') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'E') goto yy777;
- if(yych == 'e') goto yy777;
- goto yy681;
- }
+ if (yych <= 'E') goto yy775;
+ if (yych == 'e') goto yy775;
+ goto yy679;
}
+ }
+yy827:
+ YYDEBUG(827, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'G') goto yy830;
+ if (yych == 'g') goto yy830;
+ goto yy53;
yy828:
- YYDEBUG(828, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'G') goto yy831;
- if(yych == 'g') goto yy831;
- goto yy53;
+ YYDEBUG(828, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy829;
+ if (yych != 'r') goto yy53;
yy829:
- YYDEBUG(829, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy830;
- if(yych != 'r') goto yy53;
+ YYDEBUG(829, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '-') goto yy815;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
+ } else {
+ if (yych <= 'I') goto yy739;
+ if (yych == 'i') goto yy739;
+ goto yy679;
+ }
+ }
yy830:
- YYDEBUG(830, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '-') goto yy816;
- goto yy721;
- }
+ YYDEBUG(830, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '-') goto yy815;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'T') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'H') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'I') goto yy741;
- if(yych == 'i') goto yy741;
- goto yy681;
- }
+ if (yych <= 'U') goto yy741;
+ if (yych == 'u') goto yy741;
+ goto yy679;
}
+ }
yy831:
- YYDEBUG(831, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '-') goto yy816;
- goto yy721;
- }
+ YYDEBUG(831, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Y') {
+ if (yych == 'R') goto yy832;
+ if (yych <= 'X') goto yy53;
+ goto yy833;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy53;
} else {
- if(yych <= 'T') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'U') goto yy743;
- if(yych == 'u') goto yy743;
- goto yy681;
- }
+ if (yych == 'y') goto yy833;
+ goto yy53;
}
+ }
yy832:
- YYDEBUG(832, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Y') {
- if(yych == 'R') goto yy833;
- if(yych <= 'X') goto yy53;
- goto yy834;
+ YYDEBUG(832, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '-') goto yy815;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'B') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy53;
- } else {
- if(yych == 'y') goto yy834;
- goto yy53;
- }
+ if (yych <= 'C') goto yy781;
+ if (yych == 'c') goto yy781;
+ goto yy679;
}
+ }
yy833:
- YYDEBUG(833, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '-') goto yy816;
- goto yy721;
- }
+ YYDEBUG(833, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy679;
+ goto yy719;
} else {
- if(yych <= 'B') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'C') goto yy783;
- if(yych == 'c') goto yy783;
- goto yy681;
- }
+ if (yych == ' ') goto yy719;
+ goto yy679;
}
-yy834:
- YYDEBUG(834, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy681;
- goto yy721;
- } else {
- if(yych == ' ') goto yy721;
- goto yy681;
- }
+ } else {
+ if (yych <= '.') {
+ if (yych <= '-') goto yy815;
+ goto yy719;
} else {
- if(yych <= '.') {
- if(yych <= '-') goto yy816;
- goto yy721;
- } else {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- }
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
}
+ }
+yy834:
+ YYDEBUG(834, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy835;
+ if (yych != 'b') goto yy53;
yy835:
- YYDEBUG(835, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy836;
- if(yych != 'b') goto yy53;
-yy836:
- YYDEBUG(836, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '-') goto yy816;
- goto yy721;
- }
+ YYDEBUG(835, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '-') goto yy815;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'Q') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'Q') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'R') goto yy786;
- if(yych == 'r') goto yy786;
- goto yy681;
- }
+ if (yych <= 'R') goto yy784;
+ if (yych == 'r') goto yy784;
+ goto yy679;
}
-yy837:
- YYDEBUG(837, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych == 'L') goto yy841;
- if(yych <= 'M') goto yy53;
+ }
+yy836:
+ YYDEBUG(836, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych == 'L') goto yy840;
+ if (yych <= 'M') goto yy53;
+ goto yy839;
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'k') goto yy53;
goto yy840;
} else {
- if(yych <= 'l') {
- if(yych <= 'k') goto yy53;
- goto yy841;
- } else {
- if(yych == 'n') goto yy840;
- goto yy53;
- }
+ if (yych == 'n') goto yy839;
+ goto yy53;
}
+ }
+yy837:
+ YYDEBUG(837, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy838;
+ if (yych != 'n') goto yy53;
yy838:
- YYDEBUG(838, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy839;
- if(yych != 'n') goto yy53;
+ YYDEBUG(838, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '-') goto yy815;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'T') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
+ } else {
+ if (yych <= 'U') goto yy746;
+ if (yych == 'u') goto yy746;
+ goto yy679;
+ }
+ }
yy839:
- YYDEBUG(839, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '-') goto yy816;
- goto yy721;
- }
+ YYDEBUG(839, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '-') goto yy815;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'D') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'T') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'U') goto yy748;
- if(yych == 'u') goto yy748;
- goto yy681;
- }
+ if (yych <= 'E') goto yy727;
+ if (yych == 'e') goto yy727;
+ goto yy679;
}
+ }
yy840:
- YYDEBUG(840, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '-') goto yy816;
- goto yy721;
- }
- } else {
- if(yych <= 'D') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'E') goto yy729;
- if(yych == 'e') goto yy729;
- goto yy681;
- }
+ YYDEBUG(840, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '-') goto yy815;
+ goto yy719;
}
-yy841:
- YYDEBUG(841, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '-') goto yy816;
- goto yy721;
- }
+ } else {
+ if (yych <= 'X') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'X') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'Y') goto yy729;
- if(yych == 'y') goto yy729;
- goto yy681;
- }
+ if (yych <= 'Y') goto yy727;
+ if (yych == 'y') goto yy727;
+ goto yy679;
}
+ }
+yy841:
+ YYDEBUG(841, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '2') goto yy842;
+ if (yych <= '3') goto yy844;
+ if (yych <= '9') goto yy845;
+ goto yy53;
yy842:
- YYDEBUG(842, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '2') goto yy843;
- if(yych <= '3') goto yy845;
- if(yych <= '9') goto yy846;
- goto yy53;
-yy843:
- YYDEBUG(843, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy844;
- if(yych <= '9') goto yy852;
- if(yych >= 'n') goto yy848;
+ YYDEBUG(842, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy843;
+ if (yych <= '9') goto yy851;
+ if (yych >= 'n') goto yy847;
+ } else {
+ if (yych <= 'r') {
+ if (yych >= 'r') goto yy848;
} else {
- if(yych <= 'r') {
- if(yych >= 'r') goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
}
-yy844:
- YYDEBUG(844, *YYCURSOR);
- {
+ }
+yy843:
+ YYDEBUG(843, *YYCURSOR);
+ {
DEBUG_OUTPUT("gnudateshort");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -14622,112 +14584,112 @@ yy844:
TIMELIB_DEINIT;
return TIMELIB_ISO_DATE;
}
-yy845:
- YYDEBUG(845, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '1') {
- if(yych <= '/') goto yy844;
- goto yy852;
- } else {
- if(yych <= '9') goto yy795;
- if(yych <= 'm') goto yy844;
- goto yy848;
- }
+yy844:
+ YYDEBUG(844, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '1') {
+ if (yych <= '/') goto yy843;
+ goto yy851;
+ } else {
+ if (yych <= '9') goto yy791;
+ if (yych <= 'm') goto yy843;
+ goto yy847;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
+ goto yy848;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
}
-yy846:
- YYDEBUG(846, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy844;
- if(yych <= '9') goto yy795;
- if(yych <= 'm') goto yy844;
+ }
+yy845:
+ YYDEBUG(845, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy843;
+ if (yych <= '9') goto yy791;
+ if (yych <= 'm') goto yy843;
+ goto yy847;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
goto yy848;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
}
+ }
+yy846:
+ YYDEBUG(846, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 't') goto yy850;
+ goto yy53;
yy847:
- YYDEBUG(847, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 't') goto yy851;
- goto yy53;
+ YYDEBUG(847, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'd') goto yy850;
+ goto yy53;
yy848:
- YYDEBUG(848, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'd') goto yy851;
- goto yy53;
+ YYDEBUG(848, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'd') goto yy850;
+ goto yy53;
yy849:
- YYDEBUG(849, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'd') goto yy851;
- goto yy53;
+ YYDEBUG(849, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != 'h') goto yy53;
yy850:
- YYDEBUG(850, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != 'h') goto yy53;
+ YYDEBUG(850, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy843;
yy851:
- YYDEBUG(851, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy844;
-yy852:
- YYDEBUG(852, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy844;
- if(yych <= '9') goto yy797;
- if(yych <= 'm') goto yy844;
+ YYDEBUG(851, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy843;
+ if (yych <= '9') goto yy792;
+ if (yych <= 'm') goto yy843;
+ goto yy847;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
goto yy848;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
}
-yy853:
- YYDEBUG(853, *YYCURSOR);
- yyaccept = 15;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') {
- if(yych >= '/') goto yy907;
- } else {
- if(yych <= '9') goto yy856;
- if(yych >= 'n') goto yy904;
- }
+ }
+yy852:
+ YYDEBUG(852, *YYCURSOR);
+ yyaccept = 15;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') {
+ if (yych >= '/') goto yy906;
} else {
- if(yych <= 'r') {
- if(yych >= 'r') goto yy905;
- } else {
- if(yych <= 's') goto yy903;
- if(yych <= 't') goto yy906;
- }
+ if (yych <= '9') goto yy855;
+ if (yych >= 'n') goto yy903;
}
-yy854:
- YYDEBUG(854, *YYCURSOR);
- {
+ } else {
+ if (yych <= 'r') {
+ if (yych >= 'r') goto yy904;
+ } else {
+ if (yych <= 's') goto yy902;
+ if (yych <= 't') goto yy905;
+ }
+ }
+yy853:
+ YYDEBUG(853, *YYCURSOR);
+ {
DEBUG_OUTPUT("americanshort | american");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -14740,229 +14702,229 @@ yy854:
TIMELIB_DEINIT;
return TIMELIB_AMERICAN;
}
-yy855:
- YYDEBUG(855, *YYCURSOR);
- yyaccept = 15;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') {
- if(yych <= '.') goto yy854;
- goto yy907;
- } else {
- if(yych <= '1') goto yy856;
- if(yych <= 'm') goto yy854;
- goto yy904;
- }
+yy854:
+ YYDEBUG(854, *YYCURSOR);
+ yyaccept = 15;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') {
+ if (yych <= '.') goto yy853;
+ goto yy906;
+ } else {
+ if (yych <= '1') goto yy855;
+ if (yych <= 'm') goto yy853;
+ goto yy903;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy853;
+ goto yy904;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy854;
- goto yy905;
- } else {
- if(yych <= 's') goto yy903;
- if(yych <= 't') goto yy906;
- goto yy854;
- }
+ if (yych <= 's') goto yy902;
+ if (yych <= 't') goto yy905;
+ goto yy853;
}
-yy856:
- YYDEBUG(856, *YYCURSOR);
- yyaccept = 15;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych == '/') goto yy907;
- if(yych <= 'm') goto yy854;
+ }
+yy855:
+ YYDEBUG(855, *YYCURSOR);
+ yyaccept = 15;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych == '/') goto yy906;
+ if (yych <= 'm') goto yy853;
+ goto yy903;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy853;
goto yy904;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy854;
- goto yy905;
- } else {
- if(yych <= 's') goto yy903;
- if(yych <= 't') goto yy906;
- goto yy854;
- }
+ if (yych <= 's') goto yy902;
+ if (yych <= 't') goto yy905;
+ goto yy853;
}
-yy857:
- YYDEBUG(857, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'A') goto yy902;
- if(yych <= 'T') goto yy53;
+ }
+yy856:
+ YYDEBUG(856, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'A') goto yy901;
+ if (yych <= 'T') goto yy53;
+ goto yy900;
+ } else {
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy53;
goto yy901;
} else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy53;
- goto yy902;
- } else {
- if(yych == 'u') goto yy901;
- goto yy53;
- }
+ if (yych == 'u') goto yy900;
+ goto yy53;
}
+ }
+yy857:
+ YYDEBUG(857, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy899;
+ if (yych == 'e') goto yy899;
+ goto yy53;
yy858:
- YYDEBUG(858, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy900;
- if(yych == 'e') goto yy900;
- goto yy53;
+ YYDEBUG(858, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy898;
+ if (yych == 'a') goto yy898;
+ goto yy53;
yy859:
- YYDEBUG(859, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy899;
- if(yych == 'a') goto yy899;
- goto yy53;
-yy860:
- YYDEBUG(860, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'P') goto yy898;
- if(yych <= 'T') goto yy53;
+ YYDEBUG(859, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'P') goto yy897;
+ if (yych <= 'T') goto yy53;
+ goto yy896;
+ } else {
+ if (yych <= 'p') {
+ if (yych <= 'o') goto yy53;
goto yy897;
} else {
- if(yych <= 'p') {
- if(yych <= 'o') goto yy53;
- goto yy898;
- } else {
- if(yych == 'u') goto yy897;
- goto yy53;
- }
+ if (yych == 'u') goto yy896;
+ goto yy53;
}
+ }
+yy860:
+ YYDEBUG(860, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy894;
+ if (yych == 'e') goto yy894;
+ goto yy53;
yy861:
- YYDEBUG(861, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy895;
- if(yych == 'e') goto yy895;
- goto yy53;
+ YYDEBUG(861, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy893;
+ if (yych == 'c') goto yy893;
+ goto yy53;
yy862:
- YYDEBUG(862, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy894;
- if(yych == 'c') goto yy894;
- goto yy53;
+ YYDEBUG(862, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'O') goto yy892;
+ if (yych == 'o') goto yy892;
+ goto yy53;
yy863:
- YYDEBUG(863, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'O') goto yy893;
- if(yych == 'o') goto yy893;
- goto yy53;
+ YYDEBUG(863, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy864;
+ if (yych != 'e') goto yy53;
yy864:
- YYDEBUG(864, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy865;
- if(yych != 'e') goto yy53;
+ YYDEBUG(864, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy865;
+ if (yych != 'c') goto yy53;
yy865:
- YYDEBUG(865, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy866;
- if(yych != 'c') goto yy53;
+ YYDEBUG(865, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '/') goto yy53;
yy866:
- YYDEBUG(866, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '/') goto yy53;
-yy867:
- YYDEBUG(867, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- YYDEBUG(868, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- YYDEBUG(869, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- YYDEBUG(870, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- YYDEBUG(871, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ':') goto yy53;
- YYDEBUG(872, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '1') goto yy873;
- if(yych <= '2') goto yy874;
- goto yy53;
+ YYDEBUG(866, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(867, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(868, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(869, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(870, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ':') goto yy53;
+ YYDEBUG(871, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '1') goto yy872;
+ if (yych <= '2') goto yy873;
+ goto yy53;
+yy872:
+ YYDEBUG(872, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy874;
+ goto yy53;
yy873:
- YYDEBUG(873, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy875;
- goto yy53;
+ YYDEBUG(873, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '4') goto yy53;
yy874:
- YYDEBUG(874, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '4') goto yy53;
-yy875:
- YYDEBUG(875, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ':') goto yy53;
- YYDEBUG(876, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '6') goto yy53;
- YYDEBUG(877, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- YYDEBUG(878, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ':') goto yy53;
- YYDEBUG(879, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy880;
- if(yych <= '6') goto yy881;
- goto yy53;
+ YYDEBUG(874, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ':') goto yy53;
+ YYDEBUG(875, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '6') goto yy53;
+ YYDEBUG(876, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(877, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ':') goto yy53;
+ YYDEBUG(878, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy879;
+ if (yych <= '6') goto yy880;
+ goto yy53;
+yy879:
+ YYDEBUG(879, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy881;
+ goto yy53;
yy880:
- YYDEBUG(880, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy882;
- goto yy53;
+ YYDEBUG(880, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '0') goto yy53;
yy881:
- YYDEBUG(881, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '0') goto yy53;
+ YYDEBUG(881, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '\t') goto yy882;
+ if (yych != ' ') goto yy53;
yy882:
- YYDEBUG(882, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 0x09) goto yy883;
- if(yych != ' ') goto yy53;
-yy883:
- YYDEBUG(883, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 6) YYFILL(6);
- yych = *YYCURSOR;
- YYDEBUG(884, *YYCURSOR);
- if(yych <= ' ') {
- if(yych == 0x09) goto yy883;
- if(yych <= 0x1F) goto yy53;
- goto yy883;
- } else {
- if(yych <= '+') {
- if(yych <= '*') goto yy53;
- } else {
- if(yych != '-') goto yy53;
- }
- }
- YYDEBUG(885, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '1') goto yy886;
- if(yych <= '2') goto yy888;
- if(yych <= '9') goto yy889;
- goto yy53;
+ YYDEBUG(882, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 6) YYFILL(6);
+ yych = *YYCURSOR;
+ YYDEBUG(883, *YYCURSOR);
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy882;
+ if (yych <= 0x1F) goto yy53;
+ goto yy882;
+ } else {
+ if (yych <= '+') {
+ if (yych <= '*') goto yy53;
+ } else {
+ if (yych != '-') goto yy53;
+ }
+ }
+ YYDEBUG(884, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '1') goto yy885;
+ if (yych <= '2') goto yy887;
+ if (yych <= '9') goto yy888;
+ goto yy53;
+yy885:
+ YYDEBUG(885, *YYCURSOR);
+ ++YYCURSOR;
+ if ((yych = *YYCURSOR) <= '/') goto yy886;
+ if (yych <= '9') goto yy888;
+ if (yych <= ':') goto yy889;
yy886:
- YYDEBUG(886, *YYCURSOR);
- ++YYCURSOR;
- if((yych = *YYCURSOR) <= '/') goto yy887;
- if(yych <= '9') goto yy889;
- if(yych <= ':') goto yy890;
-yy887:
- YYDEBUG(887, *YYCURSOR);
- {
+ YYDEBUG(886, *YYCURSOR);
+ {
int tz_not_found;
DEBUG_OUTPUT("clf");
TIMELIB_INIT;
@@ -14981,501 +14943,549 @@ yy887:
TIMELIB_DEINIT;
return TIMELIB_CLF;
}
+yy887:
+ YYDEBUG(887, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '5') {
+ if (yych <= '/') goto yy886;
+ if (yych >= '4') goto yy890;
+ } else {
+ if (yych <= '9') goto yy891;
+ if (yych <= ':') goto yy889;
+ goto yy886;
+ }
yy888:
- YYDEBUG(888, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '5') {
- if(yych <= '/') goto yy887;
- if(yych >= '4') goto yy891;
- } else {
- if(yych <= '9') goto yy892;
- if(yych <= ':') goto yy890;
- goto yy887;
- }
+ YYDEBUG(888, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy886;
+ if (yych <= '5') goto yy890;
+ if (yych <= '9') goto yy891;
+ if (yych >= ';') goto yy886;
yy889:
- YYDEBUG(889, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy887;
- if(yych <= '5') goto yy891;
- if(yych <= '9') goto yy892;
- if(yych >= ';') goto yy887;
+ YYDEBUG(889, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy886;
+ if (yych <= '5') goto yy890;
+ if (yych <= '9') goto yy891;
+ goto yy886;
yy890:
- YYDEBUG(890, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy887;
- if(yych <= '5') goto yy891;
- if(yych <= '9') goto yy892;
- goto yy887;
+ YYDEBUG(890, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy886;
+ if (yych >= ':') goto yy886;
yy891:
- YYDEBUG(891, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy887;
- if(yych >= ':') goto yy887;
+ YYDEBUG(891, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy886;
yy892:
- YYDEBUG(892, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy887;
+ YYDEBUG(892, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'V') goto yy865;
+ if (yych == 'v') goto yy865;
+ goto yy53;
yy893:
- YYDEBUG(893, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'V') goto yy866;
- if(yych == 'v') goto yy866;
- goto yy53;
+ YYDEBUG(893, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy865;
+ if (yych == 't') goto yy865;
+ goto yy53;
yy894:
- YYDEBUG(894, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy866;
- if(yych == 't') goto yy866;
- goto yy53;
+ YYDEBUG(894, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'P') goto yy895;
+ if (yych != 'p') goto yy53;
yy895:
- YYDEBUG(895, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'P') goto yy896;
- if(yych != 'p') goto yy53;
+ YYDEBUG(895, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'S') {
+ if (yych == '/') goto yy866;
+ goto yy53;
+ } else {
+ if (yych <= 'T') goto yy865;
+ if (yych == 't') goto yy865;
+ goto yy53;
+ }
yy896:
- YYDEBUG(896, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'S') {
- if(yych == '/') goto yy867;
- goto yy53;
+ YYDEBUG(896, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'G') goto yy865;
+ if (yych == 'g') goto yy865;
+ goto yy53;
+yy897:
+ YYDEBUG(897, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy865;
+ if (yych == 'r') goto yy865;
+ goto yy53;
+yy898:
+ YYDEBUG(898, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Y') {
+ if (yych == 'R') goto yy865;
+ if (yych <= 'X') goto yy53;
+ goto yy865;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy53;
+ goto yy865;
} else {
- if(yych <= 'T') goto yy866;
- if(yych == 't') goto yy866;
+ if (yych == 'y') goto yy865;
goto yy53;
}
-yy897:
- YYDEBUG(897, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'G') goto yy866;
- if(yych == 'g') goto yy866;
- goto yy53;
-yy898:
- YYDEBUG(898, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy866;
- if(yych == 'r') goto yy866;
- goto yy53;
+ }
yy899:
- YYDEBUG(899, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Y') {
- if(yych == 'R') goto yy866;
- if(yych <= 'X') goto yy53;
- goto yy866;
- } else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy53;
- goto yy866;
- } else {
- if(yych == 'y') goto yy866;
- goto yy53;
- }
- }
+ YYDEBUG(899, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy865;
+ if (yych == 'b') goto yy865;
+ goto yy53;
yy900:
- YYDEBUG(900, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy866;
- if(yych == 'b') goto yy866;
- goto yy53;
-yy901:
- YYDEBUG(901, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych == 'L') goto yy866;
- if(yych <= 'M') goto yy53;
- goto yy866;
- } else {
- if(yych <= 'l') {
- if(yych <= 'k') goto yy53;
- goto yy866;
- } else {
- if(yych == 'n') goto yy866;
- goto yy53;
- }
+ YYDEBUG(900, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych == 'L') goto yy865;
+ if (yych <= 'M') goto yy53;
+ goto yy865;
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'k') goto yy53;
+ goto yy865;
+ } else {
+ if (yych == 'n') goto yy865;
+ goto yy53;
}
+ }
+yy901:
+ YYDEBUG(901, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy865;
+ if (yych == 'n') goto yy865;
+ goto yy53;
yy902:
- YYDEBUG(902, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy866;
- if(yych == 'n') goto yy866;
- goto yy53;
+ YYDEBUG(902, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 't') goto yy911;
+ goto yy53;
yy903:
- YYDEBUG(903, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 't') goto yy912;
- goto yy53;
+ YYDEBUG(903, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'd') goto yy911;
+ goto yy53;
yy904:
- YYDEBUG(904, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'd') goto yy912;
- goto yy53;
+ YYDEBUG(904, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'd') goto yy911;
+ goto yy53;
yy905:
- YYDEBUG(905, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'd') goto yy912;
- goto yy53;
+ YYDEBUG(905, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'h') goto yy911;
+ goto yy53;
yy906:
- YYDEBUG(906, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'h') goto yy912;
- goto yy53;
-yy907:
- YYDEBUG(907, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- YYDEBUG(908, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy854;
- if(yych >= ':') goto yy854;
- YYDEBUG(909, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy854;
- if(yych >= ':') goto yy854;
- YYDEBUG(910, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy854;
- if(yych >= ':') goto yy854;
- YYDEBUG(911, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy854;
+ YYDEBUG(906, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(907, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy853;
+ if (yych >= ':') goto yy853;
+ YYDEBUG(908, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy853;
+ if (yych >= ':') goto yy853;
+ YYDEBUG(909, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy853;
+ if (yych >= ':') goto yy853;
+ YYDEBUG(910, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy853;
+yy911:
+ YYDEBUG(911, *YYCURSOR);
+ yyaccept = 15;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '/') goto yy906;
+ goto yy853;
yy912:
- YYDEBUG(912, *YYCURSOR);
- yyaccept = 15;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '/') goto yy907;
- goto yy854;
+ YYDEBUG(912, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= ',') {
+ if (yych == '\t') goto yy914;
+ goto yy765;
+ } else {
+ if (yych <= '-') goto yy915;
+ if (yych <= '.') goto yy914;
+ if (yych >= '0') goto yy765;
+ }
yy913:
- YYDEBUG(913, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= ',') {
- if(yych == 0x09) goto yy915;
- goto yy767;
- } else {
- if(yych <= '.') goto yy915;
- if(yych >= '0') goto yy767;
- }
+ YYDEBUG(913, *YYCURSOR);
+ yych = *++YYCURSOR;
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case 'A':
+ case 'a': goto yy859;
+ case 'D':
+ case 'd': goto yy863;
+ case 'F':
+ case 'f': goto yy857;
+ case 'J':
+ case 'j': goto yy856;
+ case 'M':
+ case 'm': goto yy858;
+ case 'N':
+ case 'n': goto yy862;
+ case 'O':
+ case 'o': goto yy861;
+ case 'S':
+ case 's': goto yy860;
+ default: goto yy53;
+ }
yy914:
- YYDEBUG(914, *YYCURSOR);
- yych = *++YYCURSOR;
- YYDEBUG(-1, yych);
- switch(yych) {
- case 'A':
- case 'a': goto yy860;
- case 'D':
- case 'd': goto yy864;
- case 'F':
- case 'f': goto yy858;
- case 'J':
- case 'j': goto yy857;
- case 'M':
- case 'm': goto yy859;
- case 'N':
- case 'n': goto yy863;
- case 'O':
- case 'o': goto yy862;
- case 'S':
- case 's': goto yy861;
- default: goto yy53;
- }
+ YYDEBUG(914, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy765;
+ if (yych <= '0') goto yy919;
+ if (yych <= '1') goto yy920;
+ if (yych <= '9') goto yy921;
+ goto yy765;
yy915:
- YYDEBUG(915, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy767;
- if(yych <= '0') goto yy916;
- if(yych <= '1') goto yy917;
- if(yych <= '9') goto yy918;
- goto yy767;
+ YYDEBUG(915, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy765;
+ if (yych <= '0') goto yy916;
+ if (yych <= '1') goto yy917;
+ if (yych <= '9') goto yy918;
+ goto yy765;
yy916:
- YYDEBUG(916, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= ',') goto yy53;
- if(yych <= '.') goto yy790;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy918;
- goto yy53;
+ YYDEBUG(916, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= ',') goto yy53;
+ if (yych <= '.') goto yy789;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy918;
+ goto yy53;
yy917:
- YYDEBUG(917, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= ',') goto yy53;
- if(yych <= '.') goto yy790;
- if(yych <= '/') goto yy53;
- if(yych >= '3') goto yy53;
+ YYDEBUG(917, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= ',') goto yy53;
+ if (yych <= '.') goto yy789;
+ if (yych <= '/') goto yy53;
+ if (yych >= '3') goto yy53;
yy918:
- YYDEBUG(918, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= ',') goto yy53;
- if(yych <= '.') goto yy790;
- goto yy53;
+ YYDEBUG(918, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= ',') goto yy53;
+ if (yych <= '.') goto yy789;
+ goto yy53;
yy919:
- YYDEBUG(919, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '-') goto yy963;
- if(yych <= '/') goto yy57;
- if(yych <= '9') goto yy961;
- goto yy57;
+ YYDEBUG(919, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '.') {
+ if (yych <= ',') goto yy53;
+ if (yych <= '-') goto yy789;
+ goto yy922;
+ } else {
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy921;
+ goto yy53;
+ }
yy920:
- YYDEBUG(920, *YYCURSOR);
- yych = *++YYCURSOR;
- YYDEBUG(-1, yych);
- switch(yych) {
- case '0': goto yy929;
- case '1': goto yy930;
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy931;
- case 'A':
- case 'a': goto yy924;
- case 'D':
- case 'd': goto yy928;
- case 'F':
- case 'f': goto yy922;
- case 'J':
- case 'j': goto yy921;
- case 'M':
- case 'm': goto yy923;
- case 'N':
- case 'n': goto yy927;
- case 'O':
- case 'o': goto yy926;
- case 'S':
- case 's': goto yy925;
- default: goto yy53;
- }
+ YYDEBUG(920, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '.') {
+ if (yych <= ',') goto yy53;
+ if (yych <= '-') goto yy789;
+ goto yy922;
+ } else {
+ if (yych <= '/') goto yy53;
+ if (yych >= '3') goto yy53;
+ }
yy921:
- YYDEBUG(921, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'A') goto yy960;
- if(yych <= 'T') goto yy53;
- goto yy959;
- } else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy53;
- goto yy960;
- } else {
- if(yych == 'u') goto yy959;
- goto yy53;
- }
- }
+ YYDEBUG(921, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= ',') goto yy53;
+ if (yych <= '-') goto yy789;
+ if (yych >= '/') goto yy53;
yy922:
- YYDEBUG(922, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy958;
- if(yych == 'e') goto yy958;
- goto yy53;
-yy923:
- YYDEBUG(923, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy957;
- if(yych == 'a') goto yy957;
- goto yy53;
+ YYDEBUG(922, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(923, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy798;
+ goto yy53;
yy924:
- YYDEBUG(924, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'P') goto yy956;
- if(yych <= 'T') goto yy53;
- goto yy955;
- } else {
- if(yych <= 'p') {
- if(yych <= 'o') goto yy53;
- goto yy956;
- } else {
- if(yych == 'u') goto yy955;
- goto yy53;
- }
- }
+ YYDEBUG(924, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '-') goto yy968;
+ if (yych <= '/') goto yy57;
+ if (yych <= '9') goto yy966;
+ goto yy57;
yy925:
- YYDEBUG(925, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy953;
- if(yych == 'e') goto yy953;
- goto yy53;
+ YYDEBUG(925, *YYCURSOR);
+ yych = *++YYCURSOR;
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '0': goto yy934;
+ case '1': goto yy935;
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy936;
+ case 'A':
+ case 'a': goto yy929;
+ case 'D':
+ case 'd': goto yy933;
+ case 'F':
+ case 'f': goto yy927;
+ case 'J':
+ case 'j': goto yy926;
+ case 'M':
+ case 'm': goto yy928;
+ case 'N':
+ case 'n': goto yy932;
+ case 'O':
+ case 'o': goto yy931;
+ case 'S':
+ case 's': goto yy930;
+ default: goto yy53;
+ }
yy926:
- YYDEBUG(926, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy952;
- if(yych == 'c') goto yy952;
- goto yy53;
+ YYDEBUG(926, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'A') goto yy965;
+ if (yych <= 'T') goto yy53;
+ goto yy964;
+ } else {
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy53;
+ goto yy965;
+ } else {
+ if (yych == 'u') goto yy964;
+ goto yy53;
+ }
+ }
yy927:
- YYDEBUG(927, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'O') goto yy951;
- if(yych == 'o') goto yy951;
- goto yy53;
+ YYDEBUG(927, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy963;
+ if (yych == 'e') goto yy963;
+ goto yy53;
yy928:
- YYDEBUG(928, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy943;
- if(yych == 'e') goto yy943;
- goto yy53;
+ YYDEBUG(928, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy962;
+ if (yych == 'a') goto yy962;
+ goto yy53;
yy929:
- YYDEBUG(929, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '-') goto yy932;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy936;
- goto yy53;
+ YYDEBUG(929, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'P') goto yy961;
+ if (yych <= 'T') goto yy53;
+ goto yy960;
+ } else {
+ if (yych <= 'p') {
+ if (yych <= 'o') goto yy53;
+ goto yy961;
+ } else {
+ if (yych == 'u') goto yy960;
+ goto yy53;
+ }
+ }
yy930:
- YYDEBUG(930, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '-') goto yy932;
- if(yych <= '/') goto yy53;
- if(yych <= '2') goto yy936;
- goto yy53;
+ YYDEBUG(930, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy958;
+ if (yych == 'e') goto yy958;
+ goto yy53;
yy931:
- YYDEBUG(931, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '-') goto yy53;
+ YYDEBUG(931, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy957;
+ if (yych == 'c') goto yy957;
+ goto yy53;
yy932:
- YYDEBUG(932, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '2') goto yy933;
- if(yych <= '3') goto yy934;
- if(yych <= '9') goto yy935;
- goto yy53;
+ YYDEBUG(932, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'O') goto yy956;
+ if (yych == 'o') goto yy956;
+ goto yy53;
yy933:
- YYDEBUG(933, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy844;
- if(yych <= '9') goto yy935;
- if(yych <= 'm') goto yy844;
+ YYDEBUG(933, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy948;
+ if (yych == 'e') goto yy948;
+ goto yy53;
+yy934:
+ YYDEBUG(934, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '-') goto yy937;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy941;
+ goto yy53;
+yy935:
+ YYDEBUG(935, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '-') goto yy937;
+ if (yych <= '/') goto yy53;
+ if (yych <= '2') goto yy941;
+ goto yy53;
+yy936:
+ YYDEBUG(936, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '-') goto yy53;
+yy937:
+ YYDEBUG(937, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '2') goto yy938;
+ if (yych <= '3') goto yy939;
+ if (yych <= '9') goto yy940;
+ goto yy53;
+yy938:
+ YYDEBUG(938, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy843;
+ if (yych <= '9') goto yy940;
+ if (yych <= 'm') goto yy843;
+ goto yy847;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
goto yy848;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
}
-yy934:
- YYDEBUG(934, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy844;
- if(yych <= '1') goto yy935;
- if(yych <= 'm') goto yy844;
+ }
+yy939:
+ YYDEBUG(939, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy843;
+ if (yych <= '1') goto yy940;
+ if (yych <= 'm') goto yy843;
+ goto yy847;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
goto yy848;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
}
-yy935:
- YYDEBUG(935, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'q') {
- if(yych == 'n') goto yy848;
- goto yy844;
- } else {
- if(yych <= 'r') goto yy849;
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
-yy936:
- YYDEBUG(936, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '-') goto yy53;
- YYDEBUG(937, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '2') {
- if(yych <= '/') goto yy53;
- if(yych >= '1') goto yy939;
- } else {
- if(yych <= '3') goto yy940;
- if(yych <= '9') goto yy935;
- goto yy53;
- }
- YYDEBUG(938, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy844;
- if(yych <= '9') goto yy941;
- if(yych <= 'm') goto yy844;
+ }
+yy940:
+ YYDEBUG(940, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'q') {
+ if (yych == 'n') goto yy847;
+ goto yy843;
+ } else {
+ if (yych <= 'r') goto yy848;
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
+ }
+yy941:
+ YYDEBUG(941, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '-') goto yy53;
+ YYDEBUG(942, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '2') {
+ if (yych <= '/') goto yy53;
+ if (yych >= '1') goto yy944;
+ } else {
+ if (yych <= '3') goto yy945;
+ if (yych <= '9') goto yy940;
+ goto yy53;
+ }
+ YYDEBUG(943, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy843;
+ if (yych <= '9') goto yy946;
+ if (yych <= 'm') goto yy843;
+ goto yy847;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
goto yy848;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
}
-yy939:
- YYDEBUG(939, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy844;
- if(yych <= '9') goto yy941;
- if(yych <= 'm') goto yy844;
+ }
+yy944:
+ YYDEBUG(944, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy843;
+ if (yych <= '9') goto yy946;
+ if (yych <= 'm') goto yy843;
+ goto yy847;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
goto yy848;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
}
-yy940:
- YYDEBUG(940, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy844;
- if(yych <= '1') goto yy941;
- if(yych <= 'm') goto yy844;
+ }
+yy945:
+ YYDEBUG(945, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy843;
+ if (yych <= '1') goto yy946;
+ if (yych <= 'm') goto yy843;
+ goto yy847;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
goto yy848;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
}
-yy941:
- YYDEBUG(941, *YYCURSOR);
- yyaccept = 16;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'q') {
- if(yych == 'n') goto yy848;
- } else {
- if(yych <= 'r') goto yy849;
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- }
-yy942:
- YYDEBUG(942, *YYCURSOR);
- {
+ }
+yy946:
+ YYDEBUG(946, *YYCURSOR);
+ yyaccept = 16;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'q') {
+ if (yych == 'n') goto yy847;
+ } else {
+ if (yych <= 'r') goto yy848;
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ }
+yy947:
+ YYDEBUG(947, *YYCURSOR);
+ {
DEBUG_OUTPUT("iso8601date2");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -15486,45 +15496,45 @@ yy942:
TIMELIB_DEINIT;
return TIMELIB_ISO_DATE;
}
-yy943:
- YYDEBUG(943, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy944;
- if(yych != 'c') goto yy53;
-yy944:
- YYDEBUG(944, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '-') goto yy53;
-yy945:
- YYDEBUG(945, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '0') goto yy946;
- if(yych <= '2') goto yy947;
- if(yych <= '3') goto yy948;
- goto yy53;
-yy946:
- YYDEBUG(946, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy949;
- goto yy53;
-yy947:
- YYDEBUG(947, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy949;
- goto yy53;
yy948:
- YYDEBUG(948, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '2') goto yy53;
+ YYDEBUG(948, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy949;
+ if (yych != 'c') goto yy53;
yy949:
- YYDEBUG(949, *YYCURSOR);
- ++YYCURSOR;
- YYDEBUG(950, *YYCURSOR);
- {
+ YYDEBUG(949, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '-') goto yy53;
+yy950:
+ YYDEBUG(950, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '0') goto yy951;
+ if (yych <= '2') goto yy952;
+ if (yych <= '3') goto yy953;
+ goto yy53;
+yy951:
+ YYDEBUG(951, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy954;
+ goto yy53;
+yy952:
+ YYDEBUG(952, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy954;
+ goto yy53;
+yy953:
+ YYDEBUG(953, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '2') goto yy53;
+yy954:
+ YYDEBUG(954, *YYCURSOR);
+ ++YYCURSOR;
+ YYDEBUG(955, *YYCURSOR);
+ {
DEBUG_OUTPUT("pgtextreverse");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -15535,301 +15545,301 @@ yy949:
TIMELIB_DEINIT;
return TIMELIB_PG_TEXT;
}
-yy951:
- YYDEBUG(951, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'V') goto yy944;
- if(yych == 'v') goto yy944;
- goto yy53;
-yy952:
- YYDEBUG(952, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy944;
- if(yych == 't') goto yy944;
- goto yy53;
-yy953:
- YYDEBUG(953, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'P') goto yy954;
- if(yych != 'p') goto yy53;
-yy954:
- YYDEBUG(954, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'S') {
- if(yych == '-') goto yy945;
- goto yy53;
- } else {
- if(yych <= 'T') goto yy944;
- if(yych == 't') goto yy944;
- goto yy53;
- }
-yy955:
- YYDEBUG(955, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'G') goto yy944;
- if(yych == 'g') goto yy944;
- goto yy53;
yy956:
- YYDEBUG(956, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy944;
- if(yych == 'r') goto yy944;
- goto yy53;
+ YYDEBUG(956, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'V') goto yy949;
+ if (yych == 'v') goto yy949;
+ goto yy53;
yy957:
- YYDEBUG(957, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Y') {
- if(yych == 'R') goto yy944;
- if(yych <= 'X') goto yy53;
- goto yy944;
- } else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy53;
- goto yy944;
- } else {
- if(yych == 'y') goto yy944;
- goto yy53;
- }
- }
+ YYDEBUG(957, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy949;
+ if (yych == 't') goto yy949;
+ goto yy53;
yy958:
- YYDEBUG(958, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy944;
- if(yych == 'b') goto yy944;
- goto yy53;
+ YYDEBUG(958, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'P') goto yy959;
+ if (yych != 'p') goto yy53;
yy959:
- YYDEBUG(959, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych == 'L') goto yy944;
- if(yych <= 'M') goto yy53;
- goto yy944;
- } else {
- if(yych <= 'l') {
- if(yych <= 'k') goto yy53;
- goto yy944;
- } else {
- if(yych == 'n') goto yy944;
- goto yy53;
- }
- }
-yy960:
- YYDEBUG(960, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy944;
- if(yych == 'n') goto yy944;
+ YYDEBUG(959, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'S') {
+ if (yych == '-') goto yy950;
goto yy53;
+ } else {
+ if (yych <= 'T') goto yy949;
+ if (yych == 't') goto yy949;
+ goto yy53;
+ }
+yy960:
+ YYDEBUG(960, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'G') goto yy949;
+ if (yych == 'g') goto yy949;
+ goto yy53;
yy961:
- YYDEBUG(961, *YYCURSOR);
- yyaccept = 17;
- yych = *(YYMARKER = ++YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09:
- case ' ':
- case 'A':
- case 'D':
- case 'F':
- case 'H':
- case 'I':
- case 'J':
- case 'M':
- case 'N':
- case 'O':
- case 'S':
- case 'T':
- case 'V':
- case 'X':
- case 'Y':
- case 'a':
- case 'd':
- case 'f':
- case 'h':
- case 'j':
- case 'm':
- case 'n':
- case 'o':
- case 's':
- case 't':
- case 'w':
- case 'y': goto yy969;
- case '-': goto yy966;
- case '.': goto yy970;
- case '/': goto yy967;
- case '0': goto yy983;
- case '1': goto yy984;
- case '2': goto yy986;
- case '3': goto yy987;
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy51;
- case ':': goto yy985;
- case 'W': goto yy988;
- default: goto yy962;
- }
+ YYDEBUG(961, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy949;
+ if (yych == 'r') goto yy949;
+ goto yy53;
yy962:
- YYDEBUG(962, *YYCURSOR);
- {
- DEBUG_OUTPUT("year4");
- TIMELIB_INIT;
- s->time->y = timelib_get_nr((char **) &ptr, 4);
- TIMELIB_DEINIT;
- return TIMELIB_CLF;
+ YYDEBUG(962, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Y') {
+ if (yych == 'R') goto yy949;
+ if (yych <= 'X') goto yy53;
+ goto yy949;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy53;
+ goto yy949;
+ } else {
+ if (yych == 'y') goto yy949;
+ goto yy53;
+ }
}
yy963:
- YYDEBUG(963, *YYCURSOR);
- yych = *++YYCURSOR;
- YYDEBUG(-1, yych);
- switch(yych) {
- case '0': goto yy964;
- case '1': goto yy965;
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy931;
- case 'A':
- case 'a': goto yy924;
- case 'D':
- case 'd': goto yy928;
- case 'F':
- case 'f': goto yy922;
- case 'J':
- case 'j': goto yy921;
- case 'M':
- case 'm': goto yy923;
- case 'N':
- case 'n': goto yy927;
- case 'O':
- case 'o': goto yy926;
- case 'S':
- case 's': goto yy925;
- default: goto yy53;
- }
+ YYDEBUG(963, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy949;
+ if (yych == 'b') goto yy949;
+ goto yy53;
yy964:
- YYDEBUG(964, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '-') goto yy932;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy931;
- goto yy53;
+ YYDEBUG(964, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych == 'L') goto yy949;
+ if (yych <= 'M') goto yy53;
+ goto yy949;
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'k') goto yy53;
+ goto yy949;
+ } else {
+ if (yych == 'n') goto yy949;
+ goto yy53;
+ }
+ }
yy965:
- YYDEBUG(965, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '-') goto yy932;
- if(yych <= '/') goto yy53;
- if(yych <= '2') goto yy931;
- goto yy53;
+ YYDEBUG(965, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy949;
+ if (yych == 'n') goto yy949;
+ goto yy53;
yy966:
- YYDEBUG(966, *YYCURSOR);
- yych = *++YYCURSOR;
- YYDEBUG(-1, yych);
- switch(yych) {
- case '0': goto yy1151;
- case '1': goto yy1153;
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy1154;
- case 'A':
- case 'a': goto yy1145;
- case 'D':
- case 'd': goto yy1149;
- case 'F':
- case 'f': goto yy1143;
- case 'J':
- case 'j': goto yy1142;
- case 'M':
- case 'm': goto yy1144;
- case 'N':
- case 'n': goto yy1148;
- case 'O':
- case 'o': goto yy1147;
- case 'S':
- case 's': goto yy1146;
- case 'W': goto yy1150;
- default: goto yy1117;
- }
+ YYDEBUG(966, *YYCURSOR);
+ yyaccept = 17;
+ yych = *(YYMARKER = ++YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t':
+ case ' ':
+ case 'A':
+ case 'D':
+ case 'F':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'S':
+ case 'T':
+ case 'V':
+ case 'X':
+ case 'Y':
+ case 'a':
+ case 'd':
+ case 'f':
+ case 'h':
+ case 'j':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 's':
+ case 't':
+ case 'w':
+ case 'y': goto yy974;
+ case '-': goto yy971;
+ case '.': goto yy975;
+ case '/': goto yy972;
+ case '0': goto yy988;
+ case '1': goto yy989;
+ case '2': goto yy991;
+ case '3': goto yy992;
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy51;
+ case ':': goto yy990;
+ case 'W': goto yy993;
+ default: goto yy967;
+ }
yy967:
- YYDEBUG(967, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '0') goto yy1125;
- if(yych <= '1') goto yy1126;
- if(yych <= '9') goto yy1127;
- goto yy53;
+ YYDEBUG(967, *YYCURSOR);
+ {
+ DEBUG_OUTPUT("year4");
+ TIMELIB_INIT;
+ s->time->y = timelib_get_nr((char **) &ptr, 4);
+ TIMELIB_DEINIT;
+ return TIMELIB_CLF;
+ }
yy968:
- YYDEBUG(968, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 11) YYFILL(11);
- yych = *YYCURSOR;
+ YYDEBUG(968, *YYCURSOR);
+ yych = *++YYCURSOR;
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '0': goto yy969;
+ case '1': goto yy970;
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy936;
+ case 'A':
+ case 'a': goto yy929;
+ case 'D':
+ case 'd': goto yy933;
+ case 'F':
+ case 'f': goto yy927;
+ case 'J':
+ case 'j': goto yy926;
+ case 'M':
+ case 'm': goto yy928;
+ case 'N':
+ case 'n': goto yy932;
+ case 'O':
+ case 'o': goto yy931;
+ case 'S':
+ case 's': goto yy930;
+ default: goto yy53;
+ }
yy969:
- YYDEBUG(969, *YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09:
- case ' ': goto yy968;
- case '-':
- case '.': goto yy1116;
- case 'A':
- case 'a': goto yy978;
- case 'D':
- case 'd': goto yy982;
- case 'F':
- case 'f': goto yy976;
- case 'H':
- case 'h': goto yy60;
- case 'I': goto yy971;
- case 'J':
- case 'j': goto yy975;
- case 'M':
- case 'm': goto yy977;
- case 'N':
- case 'n': goto yy981;
- case 'O':
- case 'o': goto yy980;
- case 'S':
- case 's': goto yy979;
- case 'T':
- case 't': goto yy65;
- case 'V': goto yy973;
- case 'W':
- case 'w': goto yy62;
- case 'X': goto yy974;
- case 'Y':
- case 'y': goto yy64;
- default: goto yy53;
- }
+ YYDEBUG(969, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '-') goto yy937;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy936;
+ goto yy53;
yy970:
- YYDEBUG(970, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy1117;
- if(yych <= '0') goto yy1109;
- if(yych <= '2') goto yy1110;
- if(yych <= '3') goto yy1111;
- goto yy1117;
+ YYDEBUG(970, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '-') goto yy937;
+ if (yych <= '/') goto yy53;
+ if (yych <= '2') goto yy936;
+ goto yy53;
yy971:
- YYDEBUG(971, *YYCURSOR);
- ++YYCURSOR;
- if((yych = *YYCURSOR) <= 'U') {
- if(yych == 'I') goto yy1108;
- } else {
- if(yych == 'W') goto yy972;
- if(yych <= 'X') goto yy1062;
- }
+ YYDEBUG(971, *YYCURSOR);
+ yych = *++YYCURSOR;
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '0': goto yy1156;
+ case '1': goto yy1158;
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy1159;
+ case 'A':
+ case 'a': goto yy1150;
+ case 'D':
+ case 'd': goto yy1154;
+ case 'F':
+ case 'f': goto yy1148;
+ case 'J':
+ case 'j': goto yy1147;
+ case 'M':
+ case 'm': goto yy1149;
+ case 'N':
+ case 'n': goto yy1153;
+ case 'O':
+ case 'o': goto yy1152;
+ case 'S':
+ case 's': goto yy1151;
+ case 'W': goto yy1155;
+ default: goto yy1122;
+ }
yy972:
- YYDEBUG(972, *YYCURSOR);
- {
+ YYDEBUG(972, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '0') goto yy1130;
+ if (yych <= '1') goto yy1131;
+ if (yych <= '9') goto yy1132;
+ goto yy53;
+yy973:
+ YYDEBUG(973, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 11) YYFILL(11);
+ yych = *YYCURSOR;
+yy974:
+ YYDEBUG(974, *YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t':
+ case ' ': goto yy973;
+ case '-':
+ case '.': goto yy1121;
+ case 'A':
+ case 'a': goto yy983;
+ case 'D':
+ case 'd': goto yy987;
+ case 'F':
+ case 'f': goto yy981;
+ case 'H':
+ case 'h': goto yy60;
+ case 'I': goto yy976;
+ case 'J':
+ case 'j': goto yy980;
+ case 'M':
+ case 'm': goto yy982;
+ case 'N':
+ case 'n': goto yy986;
+ case 'O':
+ case 'o': goto yy985;
+ case 'S':
+ case 's': goto yy984;
+ case 'T':
+ case 't': goto yy65;
+ case 'V': goto yy978;
+ case 'W':
+ case 'w': goto yy62;
+ case 'X': goto yy979;
+ case 'Y':
+ case 'y': goto yy64;
+ default: goto yy53;
+ }
+yy975:
+ YYDEBUG(975, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy1122;
+ if (yych <= '0') goto yy1114;
+ if (yych <= '2') goto yy1115;
+ if (yych <= '3') goto yy1116;
+ goto yy1122;
+yy976:
+ YYDEBUG(976, *YYCURSOR);
+ ++YYCURSOR;
+ if ((yych = *YYCURSOR) <= 'U') {
+ if (yych == 'I') goto yy1113;
+ } else {
+ if (yych == 'W') goto yy977;
+ if (yych <= 'X') goto yy1067;
+ }
+yy977:
+ YYDEBUG(977, *YYCURSOR);
+ {
DEBUG_OUTPUT("datenodayrev");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -15840,221 +15850,221 @@ yy972:
TIMELIB_DEINIT;
return TIMELIB_DATE_NO_DAY;
}
-yy973:
- YYDEBUG(973, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'I') goto yy1106;
- goto yy972;
-yy974:
- YYDEBUG(974, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'I') goto yy1105;
- goto yy972;
-yy975:
- YYDEBUG(975, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'A') goto yy1098;
- if(yych <= 'T') goto yy53;
- goto yy1097;
- } else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy53;
- goto yy1098;
- } else {
- if(yych == 'u') goto yy1097;
- goto yy53;
- }
- }
-yy976:
- YYDEBUG(976, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= 'N') {
- if(yych == 'E') goto yy1091;
- goto yy53;
- } else {
- if(yych <= 'O') goto yy83;
- if(yych <= 'Q') goto yy53;
- goto yy82;
- }
+yy978:
+ YYDEBUG(978, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'I') goto yy1111;
+ goto yy977;
+yy979:
+ YYDEBUG(979, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'I') goto yy1110;
+ goto yy977;
+yy980:
+ YYDEBUG(980, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'A') goto yy1103;
+ if (yych <= 'T') goto yy53;
+ goto yy1102;
+ } else {
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy53;
+ goto yy1103;
} else {
- if(yych <= 'n') {
- if(yych == 'e') goto yy1091;
- goto yy53;
- } else {
- if(yych <= 'o') goto yy83;
- if(yych == 'r') goto yy82;
- goto yy53;
- }
+ if (yych == 'u') goto yy1102;
+ goto yy53;
}
-yy977:
- YYDEBUG(977, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych <= 'H') {
- if(yych == 'A') goto yy1088;
- goto yy53;
- } else {
- if(yych <= 'I') goto yy114;
- if(yych <= 'N') goto yy53;
- goto yy113;
- }
+ }
+yy981:
+ YYDEBUG(981, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= 'N') {
+ if (yych == 'E') goto yy1096;
+ goto yy53;
} else {
- if(yych <= 'h') {
- if(yych == 'a') goto yy1088;
- goto yy53;
- } else {
- if(yych <= 'i') goto yy114;
- if(yych == 'o') goto yy113;
- goto yy53;
- }
- }
-yy978:
- YYDEBUG(978, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'P') goto yy1082;
- if(yych <= 'T') goto yy53;
- goto yy1081;
- } else {
- if(yych <= 'p') {
- if(yych <= 'o') goto yy53;
- goto yy1082;
- } else {
- if(yych == 'u') goto yy1081;
- goto yy53;
- }
+ if (yych <= 'O') goto yy83;
+ if (yych <= 'Q') goto yy53;
+ goto yy82;
}
-yy979:
- YYDEBUG(979, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= 'D') {
- if(yych == 'A') goto yy123;
- goto yy53;
- } else {
- if(yych <= 'E') goto yy1074;
- if(yych <= 'T') goto yy53;
- goto yy122;
- }
+ } else {
+ if (yych <= 'n') {
+ if (yych == 'e') goto yy1096;
+ goto yy53;
} else {
- if(yych <= 'd') {
- if(yych == 'a') goto yy123;
- goto yy53;
- } else {
- if(yych <= 'e') goto yy1074;
- if(yych == 'u') goto yy122;
- goto yy53;
- }
+ if (yych <= 'o') goto yy83;
+ if (yych == 'r') goto yy82;
+ goto yy53;
}
-yy980:
- YYDEBUG(980, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy1069;
- if(yych == 'c') goto yy1069;
- goto yy53;
-yy981:
- YYDEBUG(981, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'O') goto yy1063;
- if(yych == 'o') goto yy1063;
- goto yy53;
+ }
yy982:
- YYDEBUG(982, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych == 'A') goto yy110;
- if(yych <= 'D') goto yy53;
- goto yy1056;
- } else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy53;
- goto yy110;
- } else {
- if(yych == 'e') goto yy1056;
- goto yy53;
- }
+ YYDEBUG(982, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych <= 'H') {
+ if (yych == 'A') goto yy1093;
+ goto yy53;
+ } else {
+ if (yych <= 'I') goto yy114;
+ if (yych <= 'N') goto yy53;
+ goto yy113;
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych == 'a') goto yy1093;
+ goto yy53;
+ } else {
+ if (yych <= 'i') goto yy114;
+ if (yych == 'o') goto yy113;
+ goto yy53;
}
+ }
yy983:
- YYDEBUG(983, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '0') goto yy1053;
- if(yych <= '9') goto yy1054;
- goto yy57;
+ YYDEBUG(983, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'P') goto yy1087;
+ if (yych <= 'T') goto yy53;
+ goto yy1086;
+ } else {
+ if (yych <= 'p') {
+ if (yych <= 'o') goto yy53;
+ goto yy1087;
+ } else {
+ if (yych == 'u') goto yy1086;
+ goto yy53;
+ }
+ }
yy984:
- YYDEBUG(984, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '2') goto yy1022;
- if(yych <= '9') goto yy1001;
- goto yy57;
+ YYDEBUG(984, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= 'D') {
+ if (yych == 'A') goto yy123;
+ goto yy53;
+ } else {
+ if (yych <= 'E') goto yy1079;
+ if (yych <= 'T') goto yy53;
+ goto yy122;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych == 'a') goto yy123;
+ goto yy53;
+ } else {
+ if (yych <= 'e') goto yy1079;
+ if (yych == 'u') goto yy122;
+ goto yy53;
+ }
+ }
yy985:
- YYDEBUG(985, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '0') goto yy1002;
- if(yych <= '1') goto yy1003;
- goto yy53;
+ YYDEBUG(985, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy1074;
+ if (yych == 'c') goto yy1074;
+ goto yy53;
yy986:
- YYDEBUG(986, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '9') goto yy1001;
- goto yy57;
+ YYDEBUG(986, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'O') goto yy1068;
+ if (yych == 'o') goto yy1068;
+ goto yy53;
yy987:
- YYDEBUG(987, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '5') goto yy997;
- if(yych <= '6') goto yy998;
- if(yych <= '9') goto yy51;
- goto yy57;
-yy988:
- YYDEBUG(988, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '5') {
- if(yych <= '/') goto yy53;
- if(yych <= '0') goto yy989;
- if(yych <= '4') goto yy990;
- goto yy991;
- } else {
- if(yych <= 'E') {
- if(yych <= 'D') goto yy53;
- goto yy98;
- } else {
- if(yych == 'e') goto yy98;
- goto yy53;
- }
+ YYDEBUG(987, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych == 'A') goto yy110;
+ if (yych <= 'D') goto yy53;
+ goto yy1061;
+ } else {
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy53;
+ goto yy110;
+ } else {
+ if (yych == 'e') goto yy1061;
+ goto yy53;
}
+ }
+yy988:
+ YYDEBUG(988, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '0') goto yy1058;
+ if (yych <= '9') goto yy1059;
+ goto yy57;
yy989:
- YYDEBUG(989, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '0') goto yy53;
- if(yych <= '9') goto yy992;
- goto yy53;
+ YYDEBUG(989, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '2') goto yy1027;
+ if (yych <= '9') goto yy1006;
+ goto yy57;
yy990:
- YYDEBUG(990, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy992;
- goto yy53;
+ YYDEBUG(990, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '0') goto yy1007;
+ if (yych <= '1') goto yy1008;
+ goto yy53;
yy991:
- YYDEBUG(991, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '4') goto yy53;
+ YYDEBUG(991, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '9') goto yy1006;
+ goto yy57;
yy992:
- YYDEBUG(992, *YYCURSOR);
- yyaccept = 18;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '-') goto yy994;
- if(yych <= '/') goto yy993;
- if(yych <= '7') goto yy995;
+ YYDEBUG(992, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '5') goto yy1002;
+ if (yych <= '6') goto yy1003;
+ if (yych <= '9') goto yy51;
+ goto yy57;
yy993:
- YYDEBUG(993, *YYCURSOR);
- {
+ YYDEBUG(993, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '5') {
+ if (yych <= '/') goto yy53;
+ if (yych <= '0') goto yy994;
+ if (yych <= '4') goto yy995;
+ goto yy996;
+ } else {
+ if (yych <= 'E') {
+ if (yych <= 'D') goto yy53;
+ goto yy98;
+ } else {
+ if (yych == 'e') goto yy98;
+ goto yy53;
+ }
+ }
+yy994:
+ YYDEBUG(994, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '0') goto yy53;
+ if (yych <= '9') goto yy997;
+ goto yy53;
+yy995:
+ YYDEBUG(995, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy997;
+ goto yy53;
+yy996:
+ YYDEBUG(996, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '4') goto yy53;
+yy997:
+ YYDEBUG(997, *YYCURSOR);
+ yyaccept = 18;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '-') goto yy999;
+ if (yych <= '/') goto yy998;
+ if (yych <= '7') goto yy1000;
+yy998:
+ YYDEBUG(998, *YYCURSOR);
+ {
timelib_sll w, d;
DEBUG_OUTPUT("isoweek");
TIMELIB_INIT;
@@ -16071,16 +16081,16 @@ yy993:
TIMELIB_DEINIT;
return TIMELIB_ISO_WEEK;
}
-yy994:
- YYDEBUG(994, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '8') goto yy53;
-yy995:
- YYDEBUG(995, *YYCURSOR);
- ++YYCURSOR;
- YYDEBUG(996, *YYCURSOR);
- {
+yy999:
+ YYDEBUG(999, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '8') goto yy53;
+yy1000:
+ YYDEBUG(1000, *YYCURSOR);
+ ++YYCURSOR;
+ YYDEBUG(1001, *YYCURSOR);
+ {
timelib_sll w, d;
DEBUG_OUTPUT("isoweekday");
TIMELIB_INIT;
@@ -16097,70 +16107,70 @@ yy995:
TIMELIB_DEINIT;
return TIMELIB_ISO_WEEK;
}
-yy997:
- YYDEBUG(997, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '9') goto yy999;
- goto yy57;
-yy998:
- YYDEBUG(998, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '6') goto yy999;
- if(yych <= '9') goto yy51;
- goto yy57;
-yy999:
- YYDEBUG(999, *YYCURSOR);
- yyaccept = 19;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yybm[0+yych] & 4) {
- goto yy51;
- }
- if(yych <= 'W') {
- if(yych <= 'F') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych >= ' ') goto yy57;
- } else {
- if(yych == 'D') goto yy57;
- if(yych >= 'F') goto yy57;
- }
+yy1002:
+ YYDEBUG(1002, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '9') goto yy1004;
+ goto yy57;
+yy1003:
+ YYDEBUG(1003, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '6') goto yy1004;
+ if (yych <= '9') goto yy51;
+ goto yy57;
+yy1004:
+ YYDEBUG(1004, *YYCURSOR);
+ yyaccept = 19;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yybm[0+yych] & 4) {
+ goto yy51;
+ }
+ if (yych <= 'W') {
+ if (yych <= 'F') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych >= ' ') goto yy57;
} else {
- if(yych <= 'M') {
- if(yych == 'H') goto yy57;
- if(yych >= 'M') goto yy57;
- } else {
- if(yych <= 'R') goto yy1000;
- if(yych <= 'T') goto yy57;
- if(yych >= 'W') goto yy57;
- }
+ if (yych == 'D') goto yy57;
+ if (yych >= 'F') goto yy57;
}
} else {
- if(yych <= 'h') {
- if(yych <= 'd') {
- if(yych == 'Y') goto yy57;
- if(yych >= 'd') goto yy57;
- } else {
- if(yych == 'f') goto yy57;
- if(yych >= 'h') goto yy57;
- }
+ if (yych <= 'M') {
+ if (yych == 'H') goto yy57;
+ if (yych >= 'M') goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych >= 's') goto yy57;
+ if (yych <= 'R') goto yy1005;
+ if (yych <= 'T') goto yy57;
+ if (yych >= 'W') goto yy57;
+ }
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'd') {
+ if (yych == 'Y') goto yy57;
+ if (yych >= 'd') goto yy57;
+ } else {
+ if (yych == 'f') goto yy57;
+ if (yych >= 'h') goto yy57;
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych >= 's') goto yy57;
+ } else {
+ if (yych <= 'w') {
+ if (yych >= 'w') goto yy57;
} else {
- if(yych <= 'w') {
- if(yych >= 'w') goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- }
+ if (yych == 'y') goto yy57;
}
}
}
-yy1000:
- YYDEBUG(1000, *YYCURSOR);
- {
+ }
+yy1005:
+ YYDEBUG(1005, *YYCURSOR);
+ {
DEBUG_OUTPUT("pgydotd");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -16171,109 +16181,109 @@ yy1000:
TIMELIB_DEINIT;
return TIMELIB_PG_YEARDAY;
}
-yy1001:
- YYDEBUG(1001, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '9') goto yy999;
- goto yy57;
-yy1002:
- YYDEBUG(1002, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1004;
- goto yy53;
-yy1003:
- YYDEBUG(1003, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '3') goto yy53;
-yy1004:
- YYDEBUG(1004, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ':') goto yy53;
- YYDEBUG(1005, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '0') goto yy1006;
- if(yych <= '2') goto yy1007;
- if(yych <= '3') goto yy1008;
- goto yy53;
yy1006:
- YYDEBUG(1006, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1009;
- goto yy53;
+ YYDEBUG(1006, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '9') goto yy1004;
+ goto yy57;
yy1007:
- YYDEBUG(1007, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1009;
- goto yy53;
+ YYDEBUG(1007, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1009;
+ goto yy53;
yy1008:
- YYDEBUG(1008, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '2') goto yy53;
+ YYDEBUG(1008, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '3') goto yy53;
yy1009:
- YYDEBUG(1009, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ' ') goto yy53;
- YYDEBUG(1010, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '1') goto yy1011;
- if(yych <= '2') goto yy1012;
- goto yy53;
+ YYDEBUG(1009, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ':') goto yy53;
+ YYDEBUG(1010, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '0') goto yy1011;
+ if (yych <= '2') goto yy1012;
+ if (yych <= '3') goto yy1013;
+ goto yy53;
yy1011:
- YYDEBUG(1011, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1013;
- goto yy53;
+ YYDEBUG(1011, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1014;
+ goto yy53;
yy1012:
- YYDEBUG(1012, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '4') goto yy53;
+ YYDEBUG(1012, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1014;
+ goto yy53;
yy1013:
- YYDEBUG(1013, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ':') goto yy53;
- YYDEBUG(1014, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '6') goto yy53;
- YYDEBUG(1015, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- YYDEBUG(1016, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ':') goto yy53;
- YYDEBUG(1017, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1018;
- if(yych <= '6') goto yy1019;
- goto yy53;
+ YYDEBUG(1013, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '2') goto yy53;
+yy1014:
+ YYDEBUG(1014, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ' ') goto yy53;
+ YYDEBUG(1015, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '1') goto yy1016;
+ if (yych <= '2') goto yy1017;
+ goto yy53;
+yy1016:
+ YYDEBUG(1016, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1018;
+ goto yy53;
+yy1017:
+ YYDEBUG(1017, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '4') goto yy53;
yy1018:
- YYDEBUG(1018, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1020;
- goto yy53;
-yy1019:
- YYDEBUG(1019, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '0') goto yy53;
-yy1020:
- YYDEBUG(1020, *YYCURSOR);
- ++YYCURSOR;
-yy1021:
- YYDEBUG(1021, *YYCURSOR);
- {
+ YYDEBUG(1018, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ':') goto yy53;
+ YYDEBUG(1019, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '6') goto yy53;
+ YYDEBUG(1020, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(1021, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ':') goto yy53;
+ YYDEBUG(1022, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1023;
+ if (yych <= '6') goto yy1024;
+ goto yy53;
+yy1023:
+ YYDEBUG(1023, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1025;
+ goto yy53;
+yy1024:
+ YYDEBUG(1024, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '0') goto yy53;
+yy1025:
+ YYDEBUG(1025, *YYCURSOR);
+ ++YYCURSOR;
+yy1026:
+ YYDEBUG(1026, *YYCURSOR);
+ {
int tz_not_found;
DEBUG_OUTPUT("xmlrpc | xmlrpcnocolon | soap | wddx | exif");
TIMELIB_INIT;
@@ -16297,268 +16307,268 @@ yy1021:
TIMELIB_DEINIT;
return TIMELIB_XMLRPC_SOAP;
}
-yy1022:
- YYDEBUG(1022, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '2') {
- if(yych <= '/') goto yy57;
- if(yych >= '1') goto yy1024;
- } else {
- if(yych <= '3') goto yy1025;
- if(yych <= '9') goto yy999;
- goto yy57;
- }
-yy1023:
- YYDEBUG(1023, *YYCURSOR);
- yyaccept = 19;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy1000;
+yy1027:
+ YYDEBUG(1027, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '2') {
+ if (yych <= '/') goto yy57;
+ if (yych >= '1') goto yy1029;
+ } else {
+ if (yych <= '3') goto yy1030;
+ if (yych <= '9') goto yy1004;
+ goto yy57;
+ }
+yy1028:
+ YYDEBUG(1028, *YYCURSOR);
+ yyaccept = 19;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy1005;
+ goto yy57;
+ } else {
+ if (yych <= '/') goto yy1005;
+ if (yych <= '9') goto yy1031;
+ if (yych <= 'C') goto yy1005;
+ goto yy57;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy1005;
+ goto yy57;
+ } else {
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy1005;
goto yy57;
} else {
- if(yych <= '/') goto yy1000;
- if(yych <= '9') goto yy1026;
- if(yych <= 'C') goto yy1000;
- goto yy57;
+ if (yych <= 'R') goto yy1005;
+ if (yych <= 'T') goto yy57;
+ goto yy1005;
}
+ }
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy1005;
+ if (yych <= 'Y') goto yy57;
+ goto yy1005;
} else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy1000;
- goto yy57;
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
+ goto yy1005;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy1000;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy1000;
- if(yych <= 'T') goto yy57;
- goto yy1000;
- }
+ if (yych == 'g') goto yy1005;
+ goto yy57;
}
}
} else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy1000;
- if(yych <= 'Y') goto yy57;
- goto yy1000;
- } else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy1000;
- } else {
- if(yych == 'g') goto yy1000;
- goto yy57;
- }
- }
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy1005;
+ goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy1000;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy1005;
goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy1000;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy1000;
- }
+ if (yych == 'y') goto yy57;
+ goto yy1005;
}
}
}
-yy1024:
- YYDEBUG(1024, *YYCURSOR);
- yyaccept = 19;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy1000;
+ }
+yy1029:
+ YYDEBUG(1029, *YYCURSOR);
+ yyaccept = 19;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy1005;
+ goto yy57;
+ } else {
+ if (yych <= '/') goto yy1005;
+ if (yych <= '9') goto yy1031;
+ if (yych <= 'C') goto yy1005;
+ goto yy57;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy1005;
+ goto yy57;
+ } else {
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy1005;
goto yy57;
} else {
- if(yych <= '/') goto yy1000;
- if(yych <= '9') goto yy1026;
- if(yych <= 'C') goto yy1000;
- goto yy57;
+ if (yych <= 'R') goto yy1005;
+ if (yych <= 'T') goto yy57;
+ goto yy1005;
}
+ }
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy1005;
+ if (yych <= 'Y') goto yy57;
+ goto yy1005;
} else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy1000;
- goto yy57;
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
+ goto yy1005;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy1000;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy1000;
- if(yych <= 'T') goto yy57;
- goto yy1000;
- }
+ if (yych == 'g') goto yy1005;
+ goto yy57;
}
}
} else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy1000;
- if(yych <= 'Y') goto yy57;
- goto yy1000;
- } else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy1000;
- } else {
- if(yych == 'g') goto yy1000;
- goto yy57;
- }
- }
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy1005;
+ goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy1000;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy1005;
goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy1000;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy1000;
- }
+ if (yych == 'y') goto yy57;
+ goto yy1005;
}
}
}
-yy1025:
- YYDEBUG(1025, *YYCURSOR);
- yyaccept = 19;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy1000;
+ }
+yy1030:
+ YYDEBUG(1030, *YYCURSOR);
+ yyaccept = 19;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy1005;
+ goto yy57;
+ } else {
+ if (yych <= '1') {
+ if (yych <= '/') goto yy1005;
+ } else {
+ if (yych <= '9') goto yy51;
+ if (yych <= 'C') goto yy1005;
goto yy57;
- } else {
- if(yych <= '1') {
- if(yych <= '/') goto yy1000;
- } else {
- if(yych <= '9') goto yy51;
- if(yych <= 'C') goto yy1000;
- goto yy57;
- }
}
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy1005;
+ goto yy57;
} else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy1000;
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy1005;
goto yy57;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy1000;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy1000;
- if(yych <= 'T') goto yy57;
- goto yy1000;
- }
+ if (yych <= 'R') goto yy1005;
+ if (yych <= 'T') goto yy57;
+ goto yy1005;
}
}
- } else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy1000;
- if(yych <= 'Y') goto yy57;
- goto yy1000;
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy1005;
+ if (yych <= 'Y') goto yy57;
+ goto yy1005;
+ } else {
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
+ goto yy1005;
} else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy1000;
- } else {
- if(yych == 'g') goto yy1000;
- goto yy57;
- }
+ if (yych == 'g') goto yy1005;
+ goto yy57;
}
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy1005;
+ goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy1000;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy1005;
goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy1000;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy1000;
- }
+ if (yych == 'y') goto yy57;
+ goto yy1005;
}
}
}
-yy1026:
- YYDEBUG(1026, *YYCURSOR);
- yyaccept = 20;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yybm[0+yych] & 4) {
- goto yy51;
- }
- if(yych <= 'W') {
- if(yych <= 'F') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy56;
- if(yych >= ' ') goto yy56;
+ }
+yy1031:
+ YYDEBUG(1031, *YYCURSOR);
+ yyaccept = 20;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yybm[0+yych] & 4) {
+ goto yy51;
+ }
+ if (yych <= 'W') {
+ if (yych <= 'F') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy56;
+ if (yych >= ' ') goto yy56;
+ } else {
+ if (yych == 'D') goto yy61;
+ if (yych >= 'F') goto yy63;
+ }
+ } else {
+ if (yych <= 'M') {
+ if (yych == 'H') goto yy60;
+ if (yych >= 'M') goto yy59;
+ } else {
+ if (yych <= 'S') {
+ if (yych >= 'S') goto yy58;
} else {
- if(yych == 'D') goto yy61;
- if(yych >= 'F') goto yy63;
+ if (yych <= 'T') goto yy1033;
+ if (yych >= 'W') goto yy62;
}
+ }
+ }
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'd') {
+ if (yych == 'Y') goto yy64;
+ if (yych >= 'd') goto yy61;
} else {
- if(yych <= 'M') {
- if(yych == 'H') goto yy60;
- if(yych >= 'M') goto yy59;
+ if (yych <= 'f') {
+ if (yych >= 'f') goto yy63;
} else {
- if(yych <= 'S') {
- if(yych >= 'S') goto yy58;
- } else {
- if(yych <= 'T') goto yy1028;
- if(yych >= 'W') goto yy62;
- }
+ if (yych == 'h') goto yy60;
}
}
} else {
- if(yych <= 'l') {
- if(yych <= 'd') {
- if(yych == 'Y') goto yy64;
- if(yych >= 'd') goto yy61;
- } else {
- if(yych <= 'f') {
- if(yych >= 'f') goto yy63;
- } else {
- if(yych == 'h') goto yy60;
- }
- }
+ if (yych <= 't') {
+ if (yych <= 'm') goto yy59;
+ if (yych <= 'r') goto yy1032;
+ if (yych <= 's') goto yy58;
+ goto yy1034;
} else {
- if(yych <= 't') {
- if(yych <= 'm') goto yy59;
- if(yych <= 'r') goto yy1027;
- if(yych <= 's') goto yy58;
- goto yy1029;
+ if (yych <= 'w') {
+ if (yych >= 'w') goto yy62;
} else {
- if(yych <= 'w') {
- if(yych >= 'w') goto yy62;
- } else {
- if(yych == 'y') goto yy64;
- }
+ if (yych == 'y') goto yy64;
}
}
}
-yy1027:
- YYDEBUG(1027, *YYCURSOR);
- {
+ }
+yy1032:
+ YYDEBUG(1032, *YYCURSOR);
+ {
DEBUG_OUTPUT("datenocolon");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -16568,1926 +16578,1928 @@ yy1027:
TIMELIB_DEINIT;
return TIMELIB_DATE_NOCOLON;
}
-yy1028:
- YYDEBUG(1028, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'H') {
- if(yych <= '2') {
- if(yych <= '/') goto yy53;
- if(yych <= '1') goto yy1043;
- goto yy1044;
- } else {
- if(yych <= '9') goto yy1045;
- if(yych <= 'G') goto yy53;
- goto yy66;
- }
- } else {
- if(yych <= 'g') {
- if(yych == 'U') goto yy67;
- goto yy53;
- } else {
- if(yych <= 'h') goto yy66;
- if(yych == 'u') goto yy67;
- goto yy53;
- }
+yy1033:
+ YYDEBUG(1033, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'H') {
+ if (yych <= '2') {
+ if (yych <= '/') goto yy53;
+ if (yych <= '1') goto yy1048;
+ goto yy1049;
+ } else {
+ if (yych <= '9') goto yy1050;
+ if (yych <= 'G') goto yy53;
+ goto yy66;
}
-yy1029:
- YYDEBUG(1029, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'H') {
- if(yych <= '2') {
- if(yych <= '/') goto yy53;
- if(yych >= '2') goto yy1031;
- } else {
- if(yych <= '9') goto yy1032;
- if(yych <= 'G') goto yy53;
- goto yy66;
- }
+ } else {
+ if (yych <= 'g') {
+ if (yych == 'U') goto yy67;
+ goto yy53;
} else {
- if(yych <= 'g') {
- if(yych == 'U') goto yy67;
- goto yy53;
- } else {
- if(yych <= 'h') goto yy66;
- if(yych == 'u') goto yy67;
- goto yy53;
- }
+ if (yych <= 'h') goto yy66;
+ if (yych == 'u') goto yy67;
+ goto yy53;
}
- YYDEBUG(1030, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1037;
- if(yych <= '9') goto yy1032;
- goto yy53;
-yy1031:
- YYDEBUG(1031, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '3') goto yy1037;
- if(yych <= '5') goto yy1033;
- goto yy53;
-yy1032:
- YYDEBUG(1032, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '6') goto yy53;
-yy1033:
- YYDEBUG(1033, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
+ }
yy1034:
- YYDEBUG(1034, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1035;
- if(yych <= '6') goto yy1036;
- goto yy53;
-yy1035:
- YYDEBUG(1035, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1020;
- goto yy53;
+ YYDEBUG(1034, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'H') {
+ if (yych <= '2') {
+ if (yych <= '/') goto yy53;
+ if (yych >= '2') goto yy1036;
+ } else {
+ if (yych <= '9') goto yy1037;
+ if (yych <= 'G') goto yy53;
+ goto yy66;
+ }
+ } else {
+ if (yych <= 'g') {
+ if (yych == 'U') goto yy67;
+ goto yy53;
+ } else {
+ if (yych <= 'h') goto yy66;
+ if (yych == 'u') goto yy67;
+ goto yy53;
+ }
+ }
+ YYDEBUG(1035, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1042;
+ if (yych <= '9') goto yy1037;
+ goto yy53;
yy1036:
- YYDEBUG(1036, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '0') goto yy1020;
- goto yy53;
+ YYDEBUG(1036, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '3') goto yy1042;
+ if (yych <= '5') goto yy1038;
+ goto yy53;
yy1037:
- YYDEBUG(1037, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1038;
- if(yych <= '9') goto yy1034;
- goto yy53;
+ YYDEBUG(1037, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '6') goto yy53;
yy1038:
- YYDEBUG(1038, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1039;
- if(yych <= '6') goto yy1040;
- if(yych <= '9') goto yy1034;
- goto yy53;
+ YYDEBUG(1038, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
yy1039:
- YYDEBUG(1039, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1041;
- if(yych <= '6') goto yy1042;
- if(yych <= '9') goto yy1020;
- goto yy53;
+ YYDEBUG(1039, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1040;
+ if (yych <= '6') goto yy1041;
+ goto yy53;
yy1040:
- YYDEBUG(1040, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '0') goto yy1041;
- if(yych <= '5') goto yy1035;
- if(yych <= '6') goto yy1036;
- goto yy53;
+ YYDEBUG(1040, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1025;
+ goto yy53;
yy1041:
- YYDEBUG(1041, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy1021;
- if(yych <= '9') goto yy1020;
- goto yy1021;
+ YYDEBUG(1041, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '0') goto yy1025;
+ goto yy53;
yy1042:
- YYDEBUG(1042, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '0') goto yy1020;
- goto yy1021;
+ YYDEBUG(1042, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1043;
+ if (yych <= '9') goto yy1039;
+ goto yy53;
yy1043:
- YYDEBUG(1043, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1052;
- if(yych <= '9') goto yy1045;
- if(yych <= ':') goto yy1046;
- goto yy53;
+ YYDEBUG(1043, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1044;
+ if (yych <= '6') goto yy1045;
+ if (yych <= '9') goto yy1039;
+ goto yy53;
yy1044:
- YYDEBUG(1044, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '5') {
- if(yych <= '/') goto yy53;
- if(yych <= '3') goto yy1052;
- goto yy1033;
- } else {
- if(yych == ':') goto yy1046;
- goto yy53;
- }
+ YYDEBUG(1044, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1046;
+ if (yych <= '6') goto yy1047;
+ if (yych <= '9') goto yy1025;
+ goto yy53;
yy1045:
- YYDEBUG(1045, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1033;
- if(yych != ':') goto yy53;
+ YYDEBUG(1045, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '0') goto yy1046;
+ if (yych <= '5') goto yy1040;
+ if (yych <= '6') goto yy1041;
+ goto yy53;
yy1046:
- YYDEBUG(1046, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '6') goto yy53;
- YYDEBUG(1047, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- YYDEBUG(1048, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ':') goto yy53;
- YYDEBUG(1049, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1050;
- if(yych <= '6') goto yy1051;
+ YYDEBUG(1046, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy1026;
+ if (yych <= '9') goto yy1025;
+ goto yy1026;
+yy1047:
+ YYDEBUG(1047, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '0') goto yy1025;
+ goto yy1026;
+yy1048:
+ YYDEBUG(1048, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1057;
+ if (yych <= '9') goto yy1050;
+ if (yych <= ':') goto yy1051;
+ goto yy53;
+yy1049:
+ YYDEBUG(1049, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '5') {
+ if (yych <= '/') goto yy53;
+ if (yych <= '3') goto yy1057;
+ goto yy1038;
+ } else {
+ if (yych == ':') goto yy1051;
goto yy53;
+ }
yy1050:
- YYDEBUG(1050, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1020;
- goto yy53;
+ YYDEBUG(1050, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1038;
+ if (yych != ':') goto yy53;
yy1051:
- YYDEBUG(1051, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '0') goto yy1020;
- goto yy53;
-yy1052:
- YYDEBUG(1052, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1038;
- if(yych <= '9') goto yy1034;
- if(yych <= ':') goto yy1046;
- goto yy53;
-yy1053:
- YYDEBUG(1053, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '2') {
- if(yych <= '/') goto yy57;
- if(yych <= '0') goto yy1055;
- goto yy1024;
- } else {
- if(yych <= '3') goto yy1025;
- if(yych <= '9') goto yy999;
- goto yy57;
- }
-yy1054:
- YYDEBUG(1054, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '2') {
- if(yych <= '/') goto yy57;
- if(yych <= '0') goto yy1023;
- goto yy1024;
- } else {
- if(yych <= '3') goto yy1025;
- if(yych <= '9') goto yy999;
- goto yy57;
- }
+ YYDEBUG(1051, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '6') goto yy53;
+ YYDEBUG(1052, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(1053, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ':') goto yy53;
+ YYDEBUG(1054, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1055;
+ if (yych <= '6') goto yy1056;
+ goto yy53;
yy1055:
- YYDEBUG(1055, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '9') goto yy1026;
- goto yy57;
+ YYDEBUG(1055, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1025;
+ goto yy53;
yy1056:
- YYDEBUG(1056, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy1057;
- if(yych != 'c') goto yy53;
+ YYDEBUG(1056, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '0') goto yy1025;
+ goto yy53;
yy1057:
- YYDEBUG(1057, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'E') goto yy1058;
- if(yych != 'e') goto yy972;
+ YYDEBUG(1057, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1043;
+ if (yych <= '9') goto yy1039;
+ if (yych <= ':') goto yy1051;
+ goto yy53;
yy1058:
- YYDEBUG(1058, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy1059;
- if(yych != 'm') goto yy53;
+ YYDEBUG(1058, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '2') {
+ if (yych <= '/') goto yy57;
+ if (yych <= '0') goto yy1060;
+ goto yy1029;
+ } else {
+ if (yych <= '3') goto yy1030;
+ if (yych <= '9') goto yy1004;
+ goto yy57;
+ }
yy1059:
- YYDEBUG(1059, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy1060;
- if(yych != 'b') goto yy53;
+ YYDEBUG(1059, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '2') {
+ if (yych <= '/') goto yy57;
+ if (yych <= '0') goto yy1028;
+ goto yy1029;
+ } else {
+ if (yych <= '3') goto yy1030;
+ if (yych <= '9') goto yy1004;
+ goto yy57;
+ }
yy1060:
- YYDEBUG(1060, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy1061;
- if(yych != 'e') goto yy53;
+ YYDEBUG(1060, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '9') goto yy1031;
+ goto yy57;
yy1061:
- YYDEBUG(1061, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy1062;
- if(yych != 'r') goto yy53;
+ YYDEBUG(1061, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy1062;
+ if (yych != 'c') goto yy53;
yy1062:
- YYDEBUG(1062, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy972;
+ YYDEBUG(1062, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'E') goto yy1063;
+ if (yych != 'e') goto yy977;
yy1063:
- YYDEBUG(1063, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'V') goto yy1064;
- if(yych != 'v') goto yy53;
+ YYDEBUG(1063, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy1064;
+ if (yych != 'm') goto yy53;
yy1064:
- YYDEBUG(1064, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'E') goto yy1065;
- if(yych != 'e') goto yy972;
+ YYDEBUG(1064, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy1065;
+ if (yych != 'b') goto yy53;
yy1065:
- YYDEBUG(1065, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy1066;
- if(yych != 'm') goto yy53;
+ YYDEBUG(1065, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy1066;
+ if (yych != 'e') goto yy53;
yy1066:
- YYDEBUG(1066, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy1067;
- if(yych != 'b') goto yy53;
+ YYDEBUG(1066, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy1067;
+ if (yych != 'r') goto yy53;
yy1067:
- YYDEBUG(1067, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy1068;
- if(yych != 'e') goto yy53;
+ YYDEBUG(1067, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy977;
yy1068:
- YYDEBUG(1068, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy1062;
- if(yych == 'r') goto yy1062;
- goto yy53;
+ YYDEBUG(1068, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'V') goto yy1069;
+ if (yych != 'v') goto yy53;
yy1069:
- YYDEBUG(1069, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy1070;
- if(yych != 't') goto yy53;
+ YYDEBUG(1069, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'E') goto yy1070;
+ if (yych != 'e') goto yy977;
yy1070:
- YYDEBUG(1070, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'O') goto yy1071;
- if(yych != 'o') goto yy972;
+ YYDEBUG(1070, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy1071;
+ if (yych != 'm') goto yy53;
yy1071:
- YYDEBUG(1071, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy1072;
- if(yych != 'b') goto yy53;
+ YYDEBUG(1071, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy1072;
+ if (yych != 'b') goto yy53;
yy1072:
- YYDEBUG(1072, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy1073;
- if(yych != 'e') goto yy53;
+ YYDEBUG(1072, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy1073;
+ if (yych != 'e') goto yy53;
yy1073:
- YYDEBUG(1073, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy1062;
- if(yych == 'r') goto yy1062;
- goto yy53;
+ YYDEBUG(1073, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy1067;
+ if (yych == 'r') goto yy1067;
+ goto yy53;
yy1074:
- YYDEBUG(1074, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'P') {
- if(yych == 'C') goto yy125;
- if(yych <= 'O') goto yy53;
- } else {
- if(yych <= 'c') {
- if(yych <= 'b') goto yy53;
- goto yy125;
- } else {
- if(yych != 'p') goto yy53;
- }
- }
+ YYDEBUG(1074, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy1075;
+ if (yych != 't') goto yy53;
yy1075:
- YYDEBUG(1075, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy1076;
- if(yych != 't') goto yy972;
+ YYDEBUG(1075, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'O') goto yy1076;
+ if (yych != 'o') goto yy977;
yy1076:
- YYDEBUG(1076, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'E') goto yy1077;
- if(yych != 'e') goto yy972;
+ YYDEBUG(1076, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy1077;
+ if (yych != 'b') goto yy53;
yy1077:
- YYDEBUG(1077, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy1078;
- if(yych != 'm') goto yy53;
+ YYDEBUG(1077, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy1078;
+ if (yych != 'e') goto yy53;
yy1078:
- YYDEBUG(1078, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy1079;
- if(yych != 'b') goto yy53;
+ YYDEBUG(1078, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy1067;
+ if (yych == 'r') goto yy1067;
+ goto yy53;
yy1079:
- YYDEBUG(1079, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy1080;
- if(yych != 'e') goto yy53;
+ YYDEBUG(1079, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'P') {
+ if (yych == 'C') goto yy125;
+ if (yych <= 'O') goto yy53;
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'b') goto yy53;
+ goto yy125;
+ } else {
+ if (yych != 'p') goto yy53;
+ }
+ }
yy1080:
- YYDEBUG(1080, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy1062;
- if(yych == 'r') goto yy1062;
- goto yy53;
+ YYDEBUG(1080, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy1081;
+ if (yych != 't') goto yy977;
yy1081:
- YYDEBUG(1081, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'G') goto yy1085;
- if(yych == 'g') goto yy1085;
- goto yy53;
+ YYDEBUG(1081, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'E') goto yy1082;
+ if (yych != 'e') goto yy977;
yy1082:
- YYDEBUG(1082, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy1083;
- if(yych != 'r') goto yy53;
+ YYDEBUG(1082, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy1083;
+ if (yych != 'm') goto yy53;
yy1083:
- YYDEBUG(1083, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'I') goto yy1084;
- if(yych != 'i') goto yy972;
+ YYDEBUG(1083, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy1084;
+ if (yych != 'b') goto yy53;
yy1084:
- YYDEBUG(1084, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'L') goto yy1062;
- if(yych == 'l') goto yy1062;
- goto yy53;
+ YYDEBUG(1084, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy1085;
+ if (yych != 'e') goto yy53;
yy1085:
- YYDEBUG(1085, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'U') goto yy1086;
- if(yych != 'u') goto yy972;
+ YYDEBUG(1085, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy1067;
+ if (yych == 'r') goto yy1067;
+ goto yy53;
yy1086:
- YYDEBUG(1086, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy1087;
- if(yych != 's') goto yy53;
+ YYDEBUG(1086, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'G') goto yy1090;
+ if (yych == 'g') goto yy1090;
+ goto yy53;
yy1087:
- YYDEBUG(1087, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy1062;
- if(yych == 't') goto yy1062;
- goto yy53;
+ YYDEBUG(1087, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy1088;
+ if (yych != 'r') goto yy53;
yy1088:
- YYDEBUG(1088, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Y') {
- if(yych == 'R') goto yy1089;
- if(yych <= 'X') goto yy53;
- goto yy1062;
- } else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy53;
- } else {
- if(yych == 'y') goto yy1062;
- goto yy53;
- }
- }
+ YYDEBUG(1088, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'I') goto yy1089;
+ if (yych != 'i') goto yy977;
yy1089:
- YYDEBUG(1089, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'C') goto yy1090;
- if(yych != 'c') goto yy972;
+ YYDEBUG(1089, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'L') goto yy1067;
+ if (yych == 'l') goto yy1067;
+ goto yy53;
yy1090:
- YYDEBUG(1090, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'H') goto yy1062;
- if(yych == 'h') goto yy1062;
- goto yy53;
+ YYDEBUG(1090, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'U') goto yy1091;
+ if (yych != 'u') goto yy977;
yy1091:
- YYDEBUG(1091, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy1092;
- if(yych != 'b') goto yy53;
+ YYDEBUG(1091, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy1092;
+ if (yych != 's') goto yy53;
yy1092:
- YYDEBUG(1092, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'R') goto yy1093;
- if(yych != 'r') goto yy972;
+ YYDEBUG(1092, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy1067;
+ if (yych == 't') goto yy1067;
+ goto yy53;
yy1093:
- YYDEBUG(1093, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'U') goto yy1094;
- if(yych != 'u') goto yy53;
+ YYDEBUG(1093, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Y') {
+ if (yych == 'R') goto yy1094;
+ if (yych <= 'X') goto yy53;
+ goto yy1067;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy53;
+ } else {
+ if (yych == 'y') goto yy1067;
+ goto yy53;
+ }
+ }
yy1094:
- YYDEBUG(1094, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy1095;
- if(yych != 'a') goto yy53;
+ YYDEBUG(1094, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'C') goto yy1095;
+ if (yych != 'c') goto yy977;
yy1095:
- YYDEBUG(1095, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy1096;
- if(yych != 'r') goto yy53;
+ YYDEBUG(1095, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'H') goto yy1067;
+ if (yych == 'h') goto yy1067;
+ goto yy53;
yy1096:
- YYDEBUG(1096, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy1062;
- if(yych == 'y') goto yy1062;
- goto yy53;
+ YYDEBUG(1096, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy1097;
+ if (yych != 'b') goto yy53;
yy1097:
- YYDEBUG(1097, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych == 'L') goto yy1104;
- if(yych <= 'M') goto yy53;
- goto yy1103;
- } else {
- if(yych <= 'l') {
- if(yych <= 'k') goto yy53;
- goto yy1104;
- } else {
- if(yych == 'n') goto yy1103;
- goto yy53;
- }
- }
+ YYDEBUG(1097, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'R') goto yy1098;
+ if (yych != 'r') goto yy977;
yy1098:
- YYDEBUG(1098, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy1099;
- if(yych != 'n') goto yy53;
+ YYDEBUG(1098, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'U') goto yy1099;
+ if (yych != 'u') goto yy53;
yy1099:
- YYDEBUG(1099, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'U') goto yy1100;
- if(yych != 'u') goto yy972;
+ YYDEBUG(1099, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy1100;
+ if (yych != 'a') goto yy53;
yy1100:
- YYDEBUG(1100, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy1101;
- if(yych != 'a') goto yy53;
+ YYDEBUG(1100, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy1101;
+ if (yych != 'r') goto yy53;
yy1101:
- YYDEBUG(1101, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy1102;
- if(yych != 'r') goto yy53;
+ YYDEBUG(1101, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy1067;
+ if (yych == 'y') goto yy1067;
+ goto yy53;
yy1102:
- YYDEBUG(1102, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy1062;
- if(yych == 'y') goto yy1062;
- goto yy53;
+ YYDEBUG(1102, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych == 'L') goto yy1109;
+ if (yych <= 'M') goto yy53;
+ goto yy1108;
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'k') goto yy53;
+ goto yy1109;
+ } else {
+ if (yych == 'n') goto yy1108;
+ goto yy53;
+ }
+ }
yy1103:
- YYDEBUG(1103, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy1062;
- if(yych == 'e') goto yy1062;
- goto yy972;
+ YYDEBUG(1103, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy1104;
+ if (yych != 'n') goto yy53;
yy1104:
- YYDEBUG(1104, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy1062;
- if(yych == 'y') goto yy1062;
- goto yy972;
+ YYDEBUG(1104, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'U') goto yy1105;
+ if (yych != 'u') goto yy977;
yy1105:
- YYDEBUG(1105, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'I') goto yy1062;
- goto yy972;
+ YYDEBUG(1105, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy1106;
+ if (yych != 'a') goto yy53;
yy1106:
- YYDEBUG(1106, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != 'I') goto yy972;
- YYDEBUG(1107, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'I') goto yy1062;
- goto yy972;
+ YYDEBUG(1106, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy1107;
+ if (yych != 'r') goto yy53;
+yy1107:
+ YYDEBUG(1107, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy1067;
+ if (yych == 'y') goto yy1067;
+ goto yy53;
yy1108:
- YYDEBUG(1108, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'I') goto yy1062;
- goto yy972;
+ YYDEBUG(1108, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy1067;
+ if (yych == 'e') goto yy1067;
+ goto yy977;
yy1109:
- YYDEBUG(1109, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '0') goto yy1124;
- if(yych <= '9') goto yy1123;
- goto yy53;
+ YYDEBUG(1109, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy1067;
+ if (yych == 'y') goto yy1067;
+ goto yy977;
yy1110:
- YYDEBUG(1110, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1122;
- goto yy53;
+ YYDEBUG(1110, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'I') goto yy1067;
+ goto yy977;
yy1111:
- YYDEBUG(1111, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1120;
- if(yych <= '6') goto yy1119;
- goto yy53;
-yy1112:
- YYDEBUG(1112, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy1091;
- if(yych == 'e') goto yy1091;
- goto yy53;
+ YYDEBUG(1111, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != 'I') goto yy977;
+ YYDEBUG(1112, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'I') goto yy1067;
+ goto yy977;
yy1113:
- YYDEBUG(1113, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy1088;
- if(yych == 'a') goto yy1088;
- goto yy53;
+ YYDEBUG(1113, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'I') goto yy1067;
+ goto yy977;
yy1114:
- YYDEBUG(1114, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy1118;
- if(yych == 'e') goto yy1118;
- goto yy53;
+ YYDEBUG(1114, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '0') goto yy1129;
+ if (yych <= '9') goto yy1128;
+ goto yy53;
yy1115:
- YYDEBUG(1115, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy1056;
- if(yych == 'e') goto yy1056;
- goto yy53;
+ YYDEBUG(1115, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1127;
+ goto yy53;
yy1116:
- YYDEBUG(1116, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 9) YYFILL(9);
- yych = *YYCURSOR;
+ YYDEBUG(1116, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1125;
+ if (yych <= '6') goto yy1124;
+ goto yy53;
yy1117:
- YYDEBUG(1117, *YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09:
- case ' ':
- case '-':
- case '.': goto yy1116;
- case 'A':
- case 'a': goto yy978;
- case 'D':
- case 'd': goto yy1115;
- case 'F':
- case 'f': goto yy1112;
- case 'I': goto yy971;
- case 'J':
- case 'j': goto yy975;
- case 'M':
- case 'm': goto yy1113;
- case 'N':
- case 'n': goto yy981;
- case 'O':
- case 'o': goto yy980;
- case 'S':
- case 's': goto yy1114;
- case 'V': goto yy973;
- case 'X': goto yy974;
- default: goto yy53;
- }
+ YYDEBUG(1117, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy1096;
+ if (yych == 'e') goto yy1096;
+ goto yy53;
yy1118:
- YYDEBUG(1118, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'P') goto yy1075;
- if(yych == 'p') goto yy1075;
- goto yy53;
+ YYDEBUG(1118, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy1093;
+ if (yych == 'a') goto yy1093;
+ goto yy53;
yy1119:
- YYDEBUG(1119, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '6') goto yy1121;
- goto yy53;
+ YYDEBUG(1119, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy1123;
+ if (yych == 'e') goto yy1123;
+ goto yy53;
yy1120:
- YYDEBUG(1120, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
+ YYDEBUG(1120, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy1061;
+ if (yych == 'e') goto yy1061;
+ goto yy53;
yy1121:
- YYDEBUG(1121, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy1000;
+ YYDEBUG(1121, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 9) YYFILL(9);
+ yych = *YYCURSOR;
yy1122:
- YYDEBUG(1122, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1121;
- goto yy53;
+ YYDEBUG(1122, *YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t':
+ case ' ':
+ case '-':
+ case '.': goto yy1121;
+ case 'A':
+ case 'a': goto yy983;
+ case 'D':
+ case 'd': goto yy1120;
+ case 'F':
+ case 'f': goto yy1117;
+ case 'I': goto yy976;
+ case 'J':
+ case 'j': goto yy980;
+ case 'M':
+ case 'm': goto yy1118;
+ case 'N':
+ case 'n': goto yy986;
+ case 'O':
+ case 'o': goto yy985;
+ case 'S':
+ case 's': goto yy1119;
+ case 'V': goto yy978;
+ case 'X': goto yy979;
+ default: goto yy53;
+ }
yy1123:
- YYDEBUG(1123, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1121;
- goto yy53;
+ YYDEBUG(1123, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'P') goto yy1080;
+ if (yych == 'p') goto yy1080;
+ goto yy53;
yy1124:
- YYDEBUG(1124, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '0') goto yy53;
- if(yych <= '9') goto yy1121;
- goto yy53;
+ YYDEBUG(1124, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '6') goto yy1126;
+ goto yy53;
yy1125:
- YYDEBUG(1125, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '.') goto yy53;
- if(yych <= '/') goto yy1128;
- if(yych <= '9') goto yy1136;
- goto yy53;
+ YYDEBUG(1125, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
yy1126:
- YYDEBUG(1126, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '.') goto yy53;
- if(yych <= '/') goto yy1128;
- if(yych <= '2') goto yy1136;
- goto yy53;
+ YYDEBUG(1126, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy1005;
yy1127:
- YYDEBUG(1127, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '/') goto yy53;
+ YYDEBUG(1127, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1126;
+ goto yy53;
yy1128:
- YYDEBUG(1128, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '2') goto yy1129;
- if(yych <= '3') goto yy1130;
- if(yych <= '9') goto yy1131;
- goto yy53;
+ YYDEBUG(1128, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1126;
+ goto yy53;
yy1129:
- YYDEBUG(1129, *YYCURSOR);
- yyaccept = 22;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy660;
- if(yych <= '9') goto yy1131;
- if(yych <= 'm') goto yy660;
- goto yy1133;
- } else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy660;
- goto yy1134;
- } else {
- if(yych <= 's') goto yy1132;
- if(yych <= 't') goto yy1135;
- goto yy660;
- }
- }
+ YYDEBUG(1129, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '0') goto yy53;
+ if (yych <= '9') goto yy1126;
+ goto yy53;
yy1130:
- YYDEBUG(1130, *YYCURSOR);
- yyaccept = 22;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy660;
- if(yych <= '1') goto yy1131;
- if(yych <= 'm') goto yy660;
- goto yy1133;
- } else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy660;
- goto yy1134;
- } else {
- if(yych <= 's') goto yy1132;
- if(yych <= 't') goto yy1135;
- goto yy660;
- }
- }
+ YYDEBUG(1130, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '.') goto yy53;
+ if (yych <= '/') goto yy1133;
+ if (yych <= '9') goto yy1141;
+ goto yy53;
yy1131:
- YYDEBUG(1131, *YYCURSOR);
- yyaccept = 22;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'q') {
- if(yych == 'n') goto yy1133;
- goto yy660;
- } else {
- if(yych <= 'r') goto yy1134;
- if(yych <= 's') goto yy1132;
- if(yych <= 't') goto yy1135;
- goto yy660;
- }
+ YYDEBUG(1131, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '.') goto yy53;
+ if (yych <= '/') goto yy1133;
+ if (yych <= '2') goto yy1141;
+ goto yy53;
yy1132:
- YYDEBUG(1132, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 't') goto yy659;
- goto yy53;
+ YYDEBUG(1132, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '/') goto yy53;
yy1133:
- YYDEBUG(1133, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'd') goto yy659;
- goto yy53;
+ YYDEBUG(1133, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '2') goto yy1134;
+ if (yych <= '3') goto yy1135;
+ if (yych <= '9') goto yy1136;
+ goto yy53;
yy1134:
- YYDEBUG(1134, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'd') goto yy659;
- goto yy53;
-yy1135:
- YYDEBUG(1135, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'h') goto yy659;
- goto yy53;
-yy1136:
- YYDEBUG(1136, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '/') goto yy53;
- YYDEBUG(1137, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '2') {
- if(yych <= '/') goto yy53;
- if(yych >= '1') goto yy1139;
- } else {
- if(yych <= '3') goto yy1140;
- if(yych <= '9') goto yy1131;
- goto yy53;
- }
- YYDEBUG(1138, *YYCURSOR);
- yyaccept = 22;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy660;
- if(yych <= '9') goto yy1141;
- if(yych <= 'm') goto yy660;
- goto yy1133;
+ YYDEBUG(1134, *YYCURSOR);
+ yyaccept = 22;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy658;
+ if (yych <= '9') goto yy1136;
+ if (yych <= 'm') goto yy658;
+ goto yy1138;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy658;
+ goto yy1139;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy660;
- goto yy1134;
- } else {
- if(yych <= 's') goto yy1132;
- if(yych <= 't') goto yy1135;
- goto yy660;
- }
+ if (yych <= 's') goto yy1137;
+ if (yych <= 't') goto yy1140;
+ goto yy658;
}
-yy1139:
- YYDEBUG(1139, *YYCURSOR);
- yyaccept = 22;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy660;
- if(yych <= '9') goto yy1141;
- if(yych <= 'm') goto yy660;
- goto yy1133;
+ }
+yy1135:
+ YYDEBUG(1135, *YYCURSOR);
+ yyaccept = 22;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy658;
+ if (yych <= '1') goto yy1136;
+ if (yych <= 'm') goto yy658;
+ goto yy1138;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy658;
+ goto yy1139;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy660;
- goto yy1134;
- } else {
- if(yych <= 's') goto yy1132;
- if(yych <= 't') goto yy1135;
- goto yy660;
- }
+ if (yych <= 's') goto yy1137;
+ if (yych <= 't') goto yy1140;
+ goto yy658;
}
+ }
+yy1136:
+ YYDEBUG(1136, *YYCURSOR);
+ yyaccept = 22;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'q') {
+ if (yych == 'n') goto yy1138;
+ goto yy658;
+ } else {
+ if (yych <= 'r') goto yy1139;
+ if (yych <= 's') goto yy1137;
+ if (yych <= 't') goto yy1140;
+ goto yy658;
+ }
+yy1137:
+ YYDEBUG(1137, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 't') goto yy657;
+ goto yy53;
+yy1138:
+ YYDEBUG(1138, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'd') goto yy657;
+ goto yy53;
+yy1139:
+ YYDEBUG(1139, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'd') goto yy657;
+ goto yy53;
yy1140:
- YYDEBUG(1140, *YYCURSOR);
- yyaccept = 22;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy660;
- if(yych <= '1') goto yy1141;
- if(yych <= 'm') goto yy660;
- goto yy1133;
- } else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy660;
- goto yy1134;
- } else {
- if(yych <= 's') goto yy1132;
- if(yych <= 't') goto yy1135;
- goto yy660;
- }
- }
+ YYDEBUG(1140, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'h') goto yy657;
+ goto yy53;
yy1141:
- YYDEBUG(1141, *YYCURSOR);
- yyaccept = 22;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych == '/') goto yy659;
- if(yych <= 'm') goto yy660;
- goto yy1133;
- } else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy660;
- goto yy1134;
- } else {
- if(yych <= 's') goto yy1132;
- if(yych <= 't') goto yy1135;
- goto yy660;
- }
- }
-yy1142:
- YYDEBUG(1142, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'A') goto yy1219;
- if(yych <= 'T') goto yy53;
- goto yy1218;
- } else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy53;
- goto yy1219;
- } else {
- if(yych == 'u') goto yy1218;
- goto yy53;
- }
- }
-yy1143:
- YYDEBUG(1143, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy1216;
- if(yych == 'e') goto yy1216;
+ YYDEBUG(1141, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '/') goto yy53;
+ YYDEBUG(1142, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '2') {
+ if (yych <= '/') goto yy53;
+ if (yych >= '1') goto yy1144;
+ } else {
+ if (yych <= '3') goto yy1145;
+ if (yych <= '9') goto yy1136;
goto yy53;
+ }
+ YYDEBUG(1143, *YYCURSOR);
+ yyaccept = 22;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy658;
+ if (yych <= '9') goto yy1146;
+ if (yych <= 'm') goto yy658;
+ goto yy1138;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy658;
+ goto yy1139;
+ } else {
+ if (yych <= 's') goto yy1137;
+ if (yych <= 't') goto yy1140;
+ goto yy658;
+ }
+ }
yy1144:
- YYDEBUG(1144, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy1213;
- if(yych == 'a') goto yy1213;
- goto yy53;
+ YYDEBUG(1144, *YYCURSOR);
+ yyaccept = 22;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy658;
+ if (yych <= '9') goto yy1146;
+ if (yych <= 'm') goto yy658;
+ goto yy1138;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy658;
+ goto yy1139;
+ } else {
+ if (yych <= 's') goto yy1137;
+ if (yych <= 't') goto yy1140;
+ goto yy658;
+ }
+ }
yy1145:
- YYDEBUG(1145, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'P') goto yy1210;
- if(yych <= 'T') goto yy53;
- goto yy1209;
- } else {
- if(yych <= 'p') {
- if(yych <= 'o') goto yy53;
- goto yy1210;
- } else {
- if(yych == 'u') goto yy1209;
- goto yy53;
- }
+ YYDEBUG(1145, *YYCURSOR);
+ yyaccept = 22;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy658;
+ if (yych <= '1') goto yy1146;
+ if (yych <= 'm') goto yy658;
+ goto yy1138;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy658;
+ goto yy1139;
+ } else {
+ if (yych <= 's') goto yy1137;
+ if (yych <= 't') goto yy1140;
+ goto yy658;
}
+ }
yy1146:
- YYDEBUG(1146, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy1206;
- if(yych == 'e') goto yy1206;
- goto yy53;
+ YYDEBUG(1146, *YYCURSOR);
+ yyaccept = 22;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych == '/') goto yy657;
+ if (yych <= 'm') goto yy658;
+ goto yy1138;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy658;
+ goto yy1139;
+ } else {
+ if (yych <= 's') goto yy1137;
+ if (yych <= 't') goto yy1140;
+ goto yy658;
+ }
+ }
yy1147:
- YYDEBUG(1147, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy1204;
- if(yych == 'c') goto yy1204;
- goto yy53;
+ YYDEBUG(1147, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'A') goto yy1224;
+ if (yych <= 'T') goto yy53;
+ goto yy1223;
+ } else {
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy53;
+ goto yy1224;
+ } else {
+ if (yych == 'u') goto yy1223;
+ goto yy53;
+ }
+ }
yy1148:
- YYDEBUG(1148, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'O') goto yy1202;
- if(yych == 'o') goto yy1202;
- goto yy53;
+ YYDEBUG(1148, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy1221;
+ if (yych == 'e') goto yy1221;
+ goto yy53;
yy1149:
- YYDEBUG(1149, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy1200;
- if(yych == 'e') goto yy1200;
- goto yy53;
+ YYDEBUG(1149, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy1218;
+ if (yych == 'a') goto yy1218;
+ goto yy53;
yy1150:
- YYDEBUG(1150, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '0') goto yy989;
- if(yych <= '4') goto yy990;
- if(yych <= '5') goto yy991;
- goto yy53;
+ YYDEBUG(1150, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'P') goto yy1215;
+ if (yych <= 'T') goto yy53;
+ goto yy1214;
+ } else {
+ if (yych <= 'p') {
+ if (yych <= 'o') goto yy53;
+ goto yy1215;
+ } else {
+ if (yych == 'u') goto yy1214;
+ goto yy53;
+ }
+ }
yy1151:
- YYDEBUG(1151, *YYCURSOR);
- yyaccept = 23;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '-') goto yy1155;
- if(yych <= '/') goto yy1152;
- if(yych <= '9') goto yy1174;
+ YYDEBUG(1151, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy1211;
+ if (yych == 'e') goto yy1211;
+ goto yy53;
yy1152:
- YYDEBUG(1152, *YYCURSOR);
- {
+ YYDEBUG(1152, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy1209;
+ if (yych == 'c') goto yy1209;
+ goto yy53;
+yy1153:
+ YYDEBUG(1153, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'O') goto yy1207;
+ if (yych == 'o') goto yy1207;
+ goto yy53;
+yy1154:
+ YYDEBUG(1154, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy1205;
+ if (yych == 'e') goto yy1205;
+ goto yy53;
+yy1155:
+ YYDEBUG(1155, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '0') goto yy994;
+ if (yych <= '4') goto yy995;
+ if (yych <= '5') goto yy996;
+ goto yy53;
+yy1156:
+ YYDEBUG(1156, *YYCURSOR);
+ yyaccept = 23;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '-') goto yy1160;
+ if (yych <= '/') goto yy1157;
+ if (yych <= '9') goto yy1179;
+yy1157:
+ YYDEBUG(1157, *YYCURSOR);
+ {
DEBUG_OUTPUT("gnudateshorter");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
s->time->y = timelib_get_nr((char **) &ptr, 4);
s->time->m = timelib_get_nr((char **) &ptr, 2);
+ s->time->d = 1;
TIMELIB_PROCESS_YEAR(s->time->y);
TIMELIB_DEINIT;
return TIMELIB_ISO_DATE;
}
-yy1153:
- YYDEBUG(1153, *YYCURSOR);
- yyaccept = 23;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '-') goto yy1155;
- if(yych <= '/') goto yy1152;
- if(yych <= '2') goto yy1174;
- goto yy1152;
-yy1154:
- YYDEBUG(1154, *YYCURSOR);
- yyaccept = 23;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych != '-') goto yy1152;
-yy1155:
- YYDEBUG(1155, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '2') goto yy1156;
- if(yych <= '3') goto yy1157;
- if(yych <= '9') goto yy1158;
- goto yy53;
-yy1156:
- YYDEBUG(1156, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'm') {
- if(yych <= '9') {
- if(yych <= '/') goto yy844;
- goto yy1158;
- } else {
- if(yych == 'T') goto yy1163;
- goto yy844;
- }
+yy1158:
+ YYDEBUG(1158, *YYCURSOR);
+ yyaccept = 23;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '-') goto yy1160;
+ if (yych <= '/') goto yy1157;
+ if (yych <= '2') goto yy1179;
+ goto yy1157;
+yy1159:
+ YYDEBUG(1159, *YYCURSOR);
+ yyaccept = 23;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych != '-') goto yy1157;
+yy1160:
+ YYDEBUG(1160, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '2') goto yy1161;
+ if (yych <= '3') goto yy1162;
+ if (yych <= '9') goto yy1163;
+ goto yy53;
+yy1161:
+ YYDEBUG(1161, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'm') {
+ if (yych <= '9') {
+ if (yych <= '/') goto yy843;
+ goto yy1163;
} else {
- if(yych <= 'r') {
- if(yych <= 'n') goto yy1160;
- if(yych <= 'q') goto yy844;
- goto yy1161;
- } else {
- if(yych <= 's') goto yy1159;
- if(yych <= 't') goto yy1162;
- goto yy844;
- }
+ if (yych == 'T') goto yy1168;
+ goto yy843;
}
-yy1157:
- YYDEBUG(1157, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'm') {
- if(yych <= '1') {
- if(yych <= '/') goto yy844;
- } else {
- if(yych == 'T') goto yy1163;
- goto yy844;
- }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'n') goto yy1165;
+ if (yych <= 'q') goto yy843;
+ goto yy1166;
} else {
- if(yych <= 'r') {
- if(yych <= 'n') goto yy1160;
- if(yych <= 'q') goto yy844;
- goto yy1161;
- } else {
- if(yych <= 's') goto yy1159;
- if(yych <= 't') goto yy1162;
- goto yy844;
- }
+ if (yych <= 's') goto yy1164;
+ if (yych <= 't') goto yy1167;
+ goto yy843;
}
-yy1158:
- YYDEBUG(1158, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych == 'T') goto yy1163;
- if(yych <= 'm') goto yy844;
- goto yy1160;
+ }
+yy1162:
+ YYDEBUG(1162, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'm') {
+ if (yych <= '1') {
+ if (yych <= '/') goto yy843;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy1161;
- } else {
- if(yych <= 's') goto yy1159;
- if(yych <= 't') goto yy1162;
- goto yy844;
- }
+ if (yych == 'T') goto yy1168;
+ goto yy843;
}
-yy1159:
- YYDEBUG(1159, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 't') goto yy1173;
- goto yy53;
-yy1160:
- YYDEBUG(1160, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'd') goto yy1173;
- goto yy53;
-yy1161:
- YYDEBUG(1161, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'd') goto yy1173;
- goto yy53;
-yy1162:
- YYDEBUG(1162, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'h') goto yy1173;
- goto yy53;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'n') goto yy1165;
+ if (yych <= 'q') goto yy843;
+ goto yy1166;
+ } else {
+ if (yych <= 's') goto yy1164;
+ if (yych <= 't') goto yy1167;
+ goto yy843;
+ }
+ }
yy1163:
- YYDEBUG(1163, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '1') goto yy1164;
- if(yych <= '2') goto yy1165;
- if(yych <= '9') goto yy1166;
- goto yy53;
+ YYDEBUG(1163, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych == 'T') goto yy1168;
+ if (yych <= 'm') goto yy843;
+ goto yy1165;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
+ goto yy1166;
+ } else {
+ if (yych <= 's') goto yy1164;
+ if (yych <= 't') goto yy1167;
+ goto yy843;
+ }
+ }
yy1164:
- YYDEBUG(1164, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1166;
- if(yych <= ':') goto yy1167;
- goto yy53;
+ YYDEBUG(1164, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 't') goto yy1178;
+ goto yy53;
yy1165:
- YYDEBUG(1165, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '3') goto yy1166;
- if(yych == ':') goto yy1167;
- goto yy53;
+ YYDEBUG(1165, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'd') goto yy1178;
+ goto yy53;
yy1166:
- YYDEBUG(1166, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ':') goto yy53;
+ YYDEBUG(1166, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'd') goto yy1178;
+ goto yy53;
yy1167:
- YYDEBUG(1167, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1168;
- if(yych <= '9') goto yy1169;
- goto yy53;
+ YYDEBUG(1167, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'h') goto yy1178;
+ goto yy53;
yy1168:
- YYDEBUG(1168, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1169;
- if(yych <= ':') goto yy1170;
- goto yy53;
+ YYDEBUG(1168, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '1') goto yy1169;
+ if (yych <= '2') goto yy1170;
+ if (yych <= '9') goto yy1171;
+ goto yy53;
yy1169:
- YYDEBUG(1169, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ':') goto yy53;
+ YYDEBUG(1169, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1171;
+ if (yych <= ':') goto yy1172;
+ goto yy53;
yy1170:
- YYDEBUG(1170, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1171;
- if(yych <= '6') goto yy1172;
- if(yych <= '9') goto yy1020;
- goto yy53;
+ YYDEBUG(1170, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '3') goto yy1171;
+ if (yych == ':') goto yy1172;
+ goto yy53;
yy1171:
- YYDEBUG(1171, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy1021;
- if(yych <= '9') goto yy1020;
- goto yy1021;
+ YYDEBUG(1171, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ':') goto yy53;
yy1172:
- YYDEBUG(1172, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '0') goto yy1020;
- goto yy1021;
+ YYDEBUG(1172, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1173;
+ if (yych <= '9') goto yy1174;
+ goto yy53;
yy1173:
- YYDEBUG(1173, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'T') goto yy1163;
- goto yy844;
+ YYDEBUG(1173, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1174;
+ if (yych <= ':') goto yy1175;
+ goto yy53;
yy1174:
- YYDEBUG(1174, *YYCURSOR);
- yyaccept = 23;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych != '-') goto yy1152;
- YYDEBUG(1175, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '2') {
- if(yych <= '/') goto yy53;
- if(yych >= '1') goto yy1177;
- } else {
- if(yych <= '3') goto yy1178;
- if(yych <= '9') goto yy1158;
- goto yy53;
+ YYDEBUG(1174, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ':') goto yy53;
+yy1175:
+ YYDEBUG(1175, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1176;
+ if (yych <= '6') goto yy1177;
+ if (yych <= '9') goto yy1025;
+ goto yy53;
+yy1176:
+ YYDEBUG(1176, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy1026;
+ if (yych <= '9') goto yy1025;
+ goto yy1026;
+yy1177:
+ YYDEBUG(1177, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '0') goto yy1025;
+ goto yy1026;
+yy1178:
+ YYDEBUG(1178, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'T') goto yy1168;
+ goto yy843;
+yy1179:
+ YYDEBUG(1179, *YYCURSOR);
+ yyaccept = 23;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych != '-') goto yy1157;
+ YYDEBUG(1180, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '2') {
+ if (yych <= '/') goto yy53;
+ if (yych >= '1') goto yy1182;
+ } else {
+ if (yych <= '3') goto yy1183;
+ if (yych <= '9') goto yy1163;
+ goto yy53;
+ }
+ YYDEBUG(1181, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'm') {
+ if (yych <= '9') {
+ if (yych <= '/') goto yy843;
+ goto yy1184;
+ } else {
+ if (yych == 'T') goto yy1168;
+ goto yy843;
}
- YYDEBUG(1176, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'm') {
- if(yych <= '9') {
- if(yych <= '/') goto yy844;
- goto yy1179;
- } else {
- if(yych == 'T') goto yy1163;
- goto yy844;
- }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'n') goto yy1165;
+ if (yych <= 'q') goto yy843;
+ goto yy1166;
} else {
- if(yych <= 'r') {
- if(yych <= 'n') goto yy1160;
- if(yych <= 'q') goto yy844;
- goto yy1161;
- } else {
- if(yych <= 's') goto yy1159;
- if(yych <= 't') goto yy1162;
- goto yy844;
- }
+ if (yych <= 's') goto yy1164;
+ if (yych <= 't') goto yy1167;
+ goto yy843;
}
-yy1177:
- YYDEBUG(1177, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'm') {
- if(yych <= '9') {
- if(yych <= '/') goto yy844;
- goto yy1179;
- } else {
- if(yych == 'T') goto yy1163;
- goto yy844;
- }
+ }
+yy1182:
+ YYDEBUG(1182, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'm') {
+ if (yych <= '9') {
+ if (yych <= '/') goto yy843;
+ goto yy1184;
} else {
- if(yych <= 'r') {
- if(yych <= 'n') goto yy1160;
- if(yych <= 'q') goto yy844;
- goto yy1161;
- } else {
- if(yych <= 's') goto yy1159;
- if(yych <= 't') goto yy1162;
- goto yy844;
- }
+ if (yych == 'T') goto yy1168;
+ goto yy843;
}
-yy1178:
- YYDEBUG(1178, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'm') {
- if(yych <= '1') {
- if(yych <= '/') goto yy844;
- } else {
- if(yych == 'T') goto yy1163;
- goto yy844;
- }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'n') goto yy1165;
+ if (yych <= 'q') goto yy843;
+ goto yy1166;
} else {
- if(yych <= 'r') {
- if(yych <= 'n') goto yy1160;
- if(yych <= 'q') goto yy844;
- goto yy1161;
- } else {
- if(yych <= 's') goto yy1159;
- if(yych <= 't') goto yy1162;
- goto yy844;
- }
+ if (yych <= 's') goto yy1164;
+ if (yych <= 't') goto yy1167;
+ goto yy843;
}
-yy1179:
- YYDEBUG(1179, *YYCURSOR);
- yyaccept = 22;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych == 'T') goto yy1180;
- if(yych <= 'm') goto yy660;
- goto yy1160;
- } else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy660;
- goto yy1161;
- } else {
- if(yych <= 's') goto yy1159;
- if(yych <= 't') goto yy1162;
- goto yy660;
- }
- }
-yy1180:
- YYDEBUG(1180, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '1') goto yy1181;
- if(yych <= '2') goto yy1182;
- if(yych <= '9') goto yy1166;
- goto yy53;
-yy1181:
- YYDEBUG(1181, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1183;
- if(yych <= ':') goto yy1167;
- goto yy53;
-yy1182:
- YYDEBUG(1182, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '3') goto yy1183;
- if(yych == ':') goto yy1167;
- goto yy53;
+ }
yy1183:
- YYDEBUG(1183, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ':') goto yy53;
- YYDEBUG(1184, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1185;
- if(yych <= '9') goto yy1169;
- goto yy53;
+ YYDEBUG(1183, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'm') {
+ if (yych <= '1') {
+ if (yych <= '/') goto yy843;
+ } else {
+ if (yych == 'T') goto yy1168;
+ goto yy843;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'n') goto yy1165;
+ if (yych <= 'q') goto yy843;
+ goto yy1166;
+ } else {
+ if (yych <= 's') goto yy1164;
+ if (yych <= 't') goto yy1167;
+ goto yy843;
+ }
+ }
+yy1184:
+ YYDEBUG(1184, *YYCURSOR);
+ yyaccept = 22;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych == 'T') goto yy1185;
+ if (yych <= 'm') goto yy658;
+ goto yy1165;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy658;
+ goto yy1166;
+ } else {
+ if (yych <= 's') goto yy1164;
+ if (yych <= 't') goto yy1167;
+ goto yy658;
+ }
+ }
yy1185:
- YYDEBUG(1185, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1186;
- if(yych <= ':') goto yy1170;
- goto yy53;
+ YYDEBUG(1185, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '1') goto yy1186;
+ if (yych <= '2') goto yy1187;
+ if (yych <= '9') goto yy1171;
+ goto yy53;
yy1186:
- YYDEBUG(1186, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ':') goto yy53;
- YYDEBUG(1187, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1188;
- if(yych <= '6') goto yy1189;
- if(yych <= '9') goto yy1020;
- goto yy53;
+ YYDEBUG(1186, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1188;
+ if (yych <= ':') goto yy1172;
+ goto yy53;
+yy1187:
+ YYDEBUG(1187, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '3') goto yy1188;
+ if (yych == ':') goto yy1172;
+ goto yy53;
yy1188:
- YYDEBUG(1188, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy1021;
- if(yych <= '9') goto yy1190;
- goto yy1021;
-yy1189:
- YYDEBUG(1189, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '0') goto yy1021;
+ YYDEBUG(1188, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ':') goto yy53;
+ YYDEBUG(1189, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1190;
+ if (yych <= '9') goto yy1174;
+ goto yy53;
yy1190:
- YYDEBUG(1190, *YYCURSOR);
- yyaccept = 24;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych != '.') goto yy1021;
- YYDEBUG(1191, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
-yy1192:
- YYDEBUG(1192, *YYCURSOR);
- yyaccept = 24;
- YYMARKER = ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 6) YYFILL(6);
- yych = *YYCURSOR;
- YYDEBUG(1193, *YYCURSOR);
- if(yych <= ',') {
- if(yych != '+') goto yy1021;
- } else {
- if(yych <= '-') goto yy1194;
- if(yych <= '/') goto yy1021;
- if(yych <= '9') goto yy1192;
- goto yy1021;
- }
+ YYDEBUG(1190, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1191;
+ if (yych <= ':') goto yy1175;
+ goto yy53;
+yy1191:
+ YYDEBUG(1191, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ':') goto yy53;
+ YYDEBUG(1192, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1193;
+ if (yych <= '6') goto yy1194;
+ if (yych <= '9') goto yy1025;
+ goto yy53;
+yy1193:
+ YYDEBUG(1193, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy1026;
+ if (yych <= '9') goto yy1195;
+ goto yy1026;
yy1194:
- YYDEBUG(1194, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '1') goto yy1195;
- if(yych <= '2') goto yy1196;
- if(yych <= '9') goto yy1197;
- goto yy53;
+ YYDEBUG(1194, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '0') goto yy1026;
yy1195:
- YYDEBUG(1195, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy1021;
- if(yych <= '9') goto yy1197;
- if(yych <= ':') goto yy1198;
- goto yy1021;
-yy1196:
- YYDEBUG(1196, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '5') {
- if(yych <= '/') goto yy1021;
- if(yych >= '4') goto yy1199;
- } else {
- if(yych <= '9') goto yy1020;
- if(yych <= ':') goto yy1198;
- goto yy1021;
- }
+ YYDEBUG(1195, *YYCURSOR);
+ yyaccept = 24;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych != '.') goto yy1026;
+ YYDEBUG(1196, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
yy1197:
- YYDEBUG(1197, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy1021;
- if(yych <= '5') goto yy1199;
- if(yych <= '9') goto yy1020;
- if(yych >= ';') goto yy1021;
-yy1198:
- YYDEBUG(1198, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy1021;
- if(yych <= '5') goto yy1199;
- if(yych <= '9') goto yy1020;
- goto yy1021;
+ YYDEBUG(1197, *YYCURSOR);
+ yyaccept = 24;
+ YYMARKER = ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 6) YYFILL(6);
+ yych = *YYCURSOR;
+ YYDEBUG(1198, *YYCURSOR);
+ if (yych <= ',') {
+ if (yych != '+') goto yy1026;
+ } else {
+ if (yych <= '-') goto yy1199;
+ if (yych <= '/') goto yy1026;
+ if (yych <= '9') goto yy1197;
+ goto yy1026;
+ }
yy1199:
- YYDEBUG(1199, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy1021;
- if(yych <= '9') goto yy1020;
- goto yy1021;
+ YYDEBUG(1199, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '1') goto yy1200;
+ if (yych <= '2') goto yy1201;
+ if (yych <= '9') goto yy1202;
+ goto yy53;
yy1200:
- YYDEBUG(1200, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy1201;
- if(yych != 'c') goto yy53;
+ YYDEBUG(1200, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy1026;
+ if (yych <= '9') goto yy1202;
+ if (yych <= ':') goto yy1203;
+ goto yy1026;
yy1201:
- YYDEBUG(1201, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'E') goto yy1058;
- if(yych == 'e') goto yy1058;
- goto yy972;
- }
+ YYDEBUG(1201, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '5') {
+ if (yych <= '/') goto yy1026;
+ if (yych >= '4') goto yy1204;
+ } else {
+ if (yych <= '9') goto yy1025;
+ if (yych <= ':') goto yy1203;
+ goto yy1026;
+ }
yy1202:
- YYDEBUG(1202, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'V') goto yy1203;
- if(yych != 'v') goto yy53;
+ YYDEBUG(1202, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy1026;
+ if (yych <= '5') goto yy1204;
+ if (yych <= '9') goto yy1025;
+ if (yych >= ';') goto yy1026;
yy1203:
- YYDEBUG(1203, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'E') goto yy1065;
- if(yych == 'e') goto yy1065;
- goto yy972;
- }
+ YYDEBUG(1203, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy1026;
+ if (yych <= '5') goto yy1204;
+ if (yych <= '9') goto yy1025;
+ goto yy1026;
yy1204:
- YYDEBUG(1204, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy1205;
- if(yych != 't') goto yy53;
+ YYDEBUG(1204, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy1026;
+ if (yych <= '9') goto yy1025;
+ goto yy1026;
yy1205:
- YYDEBUG(1205, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'O') goto yy1071;
- if(yych == 'o') goto yy1071;
- goto yy972;
- }
+ YYDEBUG(1205, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy1206;
+ if (yych != 'c') goto yy53;
yy1206:
- YYDEBUG(1206, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'P') goto yy1207;
- if(yych != 'p') goto yy53;
+ YYDEBUG(1206, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'E') goto yy1063;
+ if (yych == 'e') goto yy1063;
+ goto yy977;
+ }
yy1207:
- YYDEBUG(1207, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'T') goto yy1208;
- if(yych != 't') goto yy972;
- }
+ YYDEBUG(1207, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'V') goto yy1208;
+ if (yych != 'v') goto yy53;
yy1208:
- YYDEBUG(1208, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'E') goto yy1077;
- if(yych == 'e') goto yy1077;
- goto yy972;
- }
+ YYDEBUG(1208, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'E') goto yy1070;
+ if (yych == 'e') goto yy1070;
+ goto yy977;
+ }
yy1209:
- YYDEBUG(1209, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'G') goto yy1212;
- if(yych == 'g') goto yy1212;
- goto yy53;
+ YYDEBUG(1209, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy1210;
+ if (yych != 't') goto yy53;
yy1210:
- YYDEBUG(1210, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy1211;
- if(yych != 'r') goto yy53;
+ YYDEBUG(1210, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'O') goto yy1076;
+ if (yych == 'o') goto yy1076;
+ goto yy977;
+ }
yy1211:
- YYDEBUG(1211, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'H') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'I') goto yy1084;
- if(yych == 'i') goto yy1084;
- goto yy972;
- }
+ YYDEBUG(1211, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'P') goto yy1212;
+ if (yych != 'p') goto yy53;
yy1212:
- YYDEBUG(1212, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'U') goto yy1086;
- if(yych == 'u') goto yy1086;
- goto yy972;
- }
+ YYDEBUG(1212, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'T') goto yy1213;
+ if (yych != 't') goto yy977;
+ }
yy1213:
- YYDEBUG(1213, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Y') {
- if(yych == 'R') goto yy1214;
- if(yych <= 'X') goto yy53;
- goto yy1215;
- } else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy53;
- } else {
- if(yych == 'y') goto yy1215;
- goto yy53;
- }
- }
+ YYDEBUG(1213, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'E') goto yy1082;
+ if (yych == 'e') goto yy1082;
+ goto yy977;
+ }
yy1214:
- YYDEBUG(1214, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'B') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'C') goto yy1090;
- if(yych == 'c') goto yy1090;
- goto yy972;
- }
+ YYDEBUG(1214, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'G') goto yy1217;
+ if (yych == 'g') goto yy1217;
+ goto yy53;
yy1215:
- YYDEBUG(1215, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '-') goto yy945;
- goto yy972;
+ YYDEBUG(1215, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy1216;
+ if (yych != 'r') goto yy53;
yy1216:
- YYDEBUG(1216, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy1217;
- if(yych != 'b') goto yy53;
+ YYDEBUG(1216, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'H') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'I') goto yy1089;
+ if (yych == 'i') goto yy1089;
+ goto yy977;
+ }
yy1217:
- YYDEBUG(1217, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'Q') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'R') goto yy1093;
- if(yych == 'r') goto yy1093;
- goto yy972;
- }
+ YYDEBUG(1217, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'U') goto yy1091;
+ if (yych == 'u') goto yy1091;
+ goto yy977;
+ }
yy1218:
- YYDEBUG(1218, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych == 'L') goto yy1222;
- if(yych <= 'M') goto yy53;
- goto yy1221;
- } else {
- if(yych <= 'l') {
- if(yych <= 'k') goto yy53;
- goto yy1222;
- } else {
- if(yych == 'n') goto yy1221;
- goto yy53;
- }
+ YYDEBUG(1218, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Y') {
+ if (yych == 'R') goto yy1219;
+ if (yych <= 'X') goto yy53;
+ goto yy1220;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy53;
+ } else {
+ if (yych == 'y') goto yy1220;
+ goto yy53;
}
+ }
yy1219:
- YYDEBUG(1219, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy1220;
- if(yych != 'n') goto yy53;
+ YYDEBUG(1219, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'B') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'C') goto yy1095;
+ if (yych == 'c') goto yy1095;
+ goto yy977;
+ }
yy1220:
- YYDEBUG(1220, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'U') goto yy1100;
- if(yych == 'u') goto yy1100;
- goto yy972;
- }
+ YYDEBUG(1220, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '-') goto yy950;
+ goto yy977;
yy1221:
- YYDEBUG(1221, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'E') goto yy1062;
- if(yych == 'e') goto yy1062;
- goto yy972;
- }
+ YYDEBUG(1221, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy1222;
+ if (yych != 'b') goto yy53;
yy1222:
- YYDEBUG(1222, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'X') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'Y') goto yy1062;
- if(yych == 'y') goto yy1062;
- goto yy972;
- }
+ YYDEBUG(1222, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'Q') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'R') goto yy1098;
+ if (yych == 'r') goto yy1098;
+ goto yy977;
+ }
yy1223:
- YYDEBUG(1223, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy767;
- goto yy915;
- } else {
- if(yych <= ',') goto yy767;
- if(yych <= '.') goto yy915;
- goto yy914;
- }
+ YYDEBUG(1223, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych == 'L') goto yy1227;
+ if (yych <= 'M') goto yy53;
+ goto yy1226;
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'k') goto yy53;
+ goto yy1227;
} else {
- if(yych <= 'U') {
- if(yych <= 'T') goto yy767;
- goto yy74;
- } else {
- if(yych == 'u') goto yy74;
- goto yy767;
- }
+ if (yych == 'n') goto yy1226;
+ goto yy53;
}
+ }
yy1224:
- YYDEBUG(1224, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'P') {
- if(yych == 'C') goto yy125;
- if(yych <= 'O') goto yy53;
- goto yy775;
- } else {
- if(yych <= 'c') {
- if(yych <= 'b') goto yy53;
- goto yy125;
- } else {
- if(yych == 'p') goto yy775;
- goto yy53;
- }
- }
+ YYDEBUG(1224, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy1225;
+ if (yych != 'n') goto yy53;
yy1225:
- YYDEBUG(1225, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '9') {
- if(yych <= ',') {
- if(yych == 0x09) goto yy1227;
- goto yy1229;
- } else {
- if(yych <= '-') goto yy1226;
- if(yych <= '.') goto yy915;
- if(yych <= '/') goto yy914;
- goto yy919;
- }
- } else {
- if(yych <= 'q') {
- if(yych == 'n') goto yy675;
- goto yy1229;
- } else {
- if(yych <= 'r') goto yy676;
- if(yych <= 's') goto yy669;
- if(yych <= 't') goto yy673;
- goto yy1229;
- }
- }
+ YYDEBUG(1225, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'U') goto yy1105;
+ if (yych == 'u') goto yy1105;
+ goto yy977;
+ }
yy1226:
- YYDEBUG(1226, *YYCURSOR);
- yych = *++YYCURSOR;
- YYDEBUG(-1, yych);
- switch(yych) {
- case '0': goto yy1230;
- case '1': goto yy1231;
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy805;
- case 'A':
- case 'a': goto yy809;
- case 'D':
- case 'd': goto yy813;
- case 'F':
- case 'f': goto yy807;
- case 'J':
- case 'j': goto yy806;
- case 'M':
- case 'm': goto yy808;
- case 'N':
- case 'n': goto yy812;
- case 'O':
- case 'o': goto yy811;
- case 'S':
- case 's': goto yy810;
- default: goto yy767;
- }
+ YYDEBUG(1226, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'E') goto yy1067;
+ if (yych == 'e') goto yy1067;
+ goto yy977;
+ }
yy1227:
- YYDEBUG(1227, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy1229;
- if(yych <= '0') goto yy916;
- if(yych <= '1') goto yy917;
- if(yych <= '9') goto yy918;
- goto yy1229;
+ YYDEBUG(1227, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'X') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'Y') goto yy1067;
+ if (yych == 'y') goto yy1067;
+ goto yy977;
+ }
yy1228:
- YYDEBUG(1228, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 13) YYFILL(13);
- yych = *YYCURSOR;
+ YYDEBUG(1228, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '.') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy765;
+ goto yy914;
+ } else {
+ if (yych <= ',') goto yy765;
+ if (yych <= '-') goto yy915;
+ goto yy914;
+ }
+ } else {
+ if (yych <= 'U') {
+ if (yych <= '/') goto yy913;
+ if (yych <= 'T') goto yy765;
+ goto yy74;
+ } else {
+ if (yych == 'u') goto yy74;
+ goto yy765;
+ }
+ }
yy1229:
- YYDEBUG(1229, *YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09:
- case ' ': goto yy1228;
- case '-':
- case '.': goto yy766;
- case 'A':
- case 'a': goto yy763;
- case 'D':
- case 'd': goto yy671;
- case 'F':
- case 'f': goto yy672;
- case 'H':
- case 'h': goto yy60;
- case 'I': goto yy680;
- case 'J':
- case 'j': goto yy684;
- case 'M':
- case 'm': goto yy670;
- case 'N':
- case 'n': goto yy687;
- case 'O':
- case 'o': goto yy686;
- case 'S':
- case 's': goto yy668;
- case 'T':
- case 't': goto yy65;
- case 'V': goto yy682;
- case 'W':
- case 'w': goto yy62;
- case 'X': goto yy683;
- case 'Y':
- case 'y': goto yy64;
- default: goto yy53;
+ YYDEBUG(1229, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'P') {
+ if (yych == 'C') goto yy125;
+ if (yych <= 'O') goto yy53;
+ goto yy773;
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'b') goto yy53;
+ goto yy125;
+ } else {
+ if (yych == 'p') goto yy773;
+ goto yy53;
}
+ }
yy1230:
- YYDEBUG(1230, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '.') {
- if(yych <= ',') goto yy53;
- if(yych <= '-') goto yy842;
- goto yy790;
- } else {
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1232;
- goto yy53;
+ YYDEBUG(1230, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych == '\t') goto yy1232;
+ goto yy1234;
+ } else {
+ if (yych <= '-') goto yy1231;
+ if (yych <= '.') goto yy914;
+ if (yych <= '/') goto yy913;
+ goto yy924;
}
-yy1231:
- YYDEBUG(1231, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '.') {
- if(yych <= ',') goto yy53;
- if(yych <= '-') goto yy842;
- goto yy790;
+ } else {
+ if (yych <= 'q') {
+ if (yych == 'n') goto yy673;
+ goto yy1234;
} else {
- if(yych <= '/') goto yy53;
- if(yych >= '3') goto yy53;
+ if (yych <= 'r') goto yy674;
+ if (yych <= 's') goto yy667;
+ if (yych <= 't') goto yy671;
+ goto yy1234;
}
+ }
+yy1231:
+ YYDEBUG(1231, *YYCURSOR);
+ yych = *++YYCURSOR;
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '0': goto yy1235;
+ case '1': goto yy1236;
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy804;
+ case 'A':
+ case 'a': goto yy808;
+ case 'D':
+ case 'd': goto yy812;
+ case 'F':
+ case 'f': goto yy806;
+ case 'J':
+ case 'j': goto yy805;
+ case 'M':
+ case 'm': goto yy807;
+ case 'N':
+ case 'n': goto yy811;
+ case 'O':
+ case 'o': goto yy810;
+ case 'S':
+ case 's': goto yy809;
+ default: goto yy765;
+ }
yy1232:
- YYDEBUG(1232, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= ',') goto yy53;
- if(yych <= '-') goto yy1233;
- if(yych <= '.') goto yy790;
- goto yy53;
+ YYDEBUG(1232, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy1234;
+ if (yych <= '0') goto yy919;
+ if (yych <= '1') goto yy920;
+ if (yych <= '9') goto yy921;
+ goto yy1234;
yy1233:
- YYDEBUG(1233, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '2') {
- if(yych <= '/') goto yy53;
- if(yych >= '1') goto yy1235;
- } else {
- if(yych <= '3') goto yy1236;
- if(yych <= '9') goto yy846;
- goto yy53;
- }
- YYDEBUG(1234, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy844;
- if(yych <= '9') goto yy1237;
- if(yych <= 'm') goto yy844;
+ YYDEBUG(1233, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 13) YYFILL(13);
+ yych = *YYCURSOR;
+yy1234:
+ YYDEBUG(1234, *YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t':
+ case ' ': goto yy1233;
+ case '-':
+ case '.': goto yy764;
+ case 'A':
+ case 'a': goto yy761;
+ case 'D':
+ case 'd': goto yy669;
+ case 'F':
+ case 'f': goto yy670;
+ case 'H':
+ case 'h': goto yy60;
+ case 'I': goto yy678;
+ case 'J':
+ case 'j': goto yy682;
+ case 'M':
+ case 'm': goto yy668;
+ case 'N':
+ case 'n': goto yy685;
+ case 'O':
+ case 'o': goto yy684;
+ case 'S':
+ case 's': goto yy666;
+ case 'T':
+ case 't': goto yy65;
+ case 'V': goto yy680;
+ case 'W':
+ case 'w': goto yy62;
+ case 'X': goto yy681;
+ case 'Y':
+ case 'y': goto yy64;
+ default: goto yy53;
+ }
+yy1235:
+ YYDEBUG(1235, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '.') {
+ if (yych <= ',') goto yy53;
+ if (yych <= '-') goto yy841;
+ goto yy789;
+ } else {
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1237;
+ goto yy53;
+ }
+yy1236:
+ YYDEBUG(1236, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '.') {
+ if (yych <= ',') goto yy53;
+ if (yych <= '-') goto yy841;
+ goto yy789;
+ } else {
+ if (yych <= '/') goto yy53;
+ if (yych >= '3') goto yy53;
+ }
+yy1237:
+ YYDEBUG(1237, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= ',') goto yy53;
+ if (yych <= '-') goto yy1238;
+ if (yych <= '.') goto yy789;
+ goto yy53;
+yy1238:
+ YYDEBUG(1238, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '2') {
+ if (yych <= '/') goto yy53;
+ if (yych >= '1') goto yy1240;
+ } else {
+ if (yych <= '3') goto yy1241;
+ if (yych <= '9') goto yy845;
+ goto yy53;
+ }
+ YYDEBUG(1239, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy843;
+ if (yych <= '9') goto yy1242;
+ if (yych <= 'm') goto yy843;
+ goto yy847;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
goto yy848;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
}
-yy1235:
- YYDEBUG(1235, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy844;
- if(yych <= '9') goto yy1237;
- if(yych <= 'm') goto yy844;
+ }
+yy1240:
+ YYDEBUG(1240, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy843;
+ if (yych <= '9') goto yy1242;
+ if (yych <= 'm') goto yy843;
+ goto yy847;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
goto yy848;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
}
-yy1236:
- YYDEBUG(1236, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '1') {
- if(yych <= '/') goto yy844;
- } else {
- if(yych <= '9') goto yy795;
- if(yych <= 'm') goto yy844;
- goto yy848;
- }
+ }
+yy1241:
+ YYDEBUG(1241, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '1') {
+ if (yych <= '/') goto yy843;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
+ if (yych <= '9') goto yy791;
+ if (yych <= 'm') goto yy843;
+ goto yy847;
}
-yy1237:
- YYDEBUG(1237, *YYCURSOR);
- yyaccept = 16;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy942;
- if(yych <= '9') goto yy797;
- if(yych <= 'm') goto yy942;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
goto yy848;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy942;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy942;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
}
-yy1238:
- YYDEBUG(1238, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '9') {
- if(yych <= '-') {
- if(yych == 0x09) goto yy1227;
- if(yych <= ',') goto yy1229;
- goto yy1226;
- } else {
- if(yych <= '.') goto yy1239;
- if(yych <= '/') goto yy914;
- if(yych <= '5') goto yy1241;
- goto yy919;
- }
- } else {
- if(yych <= 'q') {
- if(yych <= ':') goto yy1240;
- if(yych == 'n') goto yy675;
- goto yy1229;
- } else {
- if(yych <= 'r') goto yy676;
- if(yych <= 's') goto yy669;
- if(yych <= 't') goto yy673;
- goto yy1229;
- }
- }
-yy1239:
- YYDEBUG(1239, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '1') {
- if(yych <= '/') goto yy767;
- if(yych <= '0') goto yy1263;
- goto yy1264;
- } else {
- if(yych <= '5') goto yy1265;
- if(yych <= '9') goto yy1266;
- goto yy767;
- }
-yy1240:
- YYDEBUG(1240, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1258;
- if(yych <= '9') goto yy1259;
- goto yy53;
-yy1241:
- YYDEBUG(1241, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '-') goto yy963;
- if(yych <= '/') goto yy57;
- if(yych >= ':') goto yy57;
- YYDEBUG(1242, *YYCURSOR);
- yyaccept = 25;
- yych = *(YYMARKER = ++YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09:
- case ' ':
- case 'A':
- case 'D':
- case 'F':
- case 'H':
- case 'I':
- case 'J':
- case 'M':
- case 'N':
- case 'O':
- case 'S':
- case 'T':
- case 'V':
- case 'X':
- case 'Y':
- case 'a':
- case 'd':
- case 'f':
- case 'h':
- case 'j':
- case 'm':
- case 'n':
- case 'o':
- case 's':
- case 't':
- case 'w':
- case 'y': goto yy969;
- case '-': goto yy966;
- case '.': goto yy970;
- case '/': goto yy967;
- case '0': goto yy1244;
- case '1': goto yy1245;
- case '2': goto yy1246;
- case '3': goto yy1247;
- case '4':
- case '5': goto yy1248;
- case '6': goto yy1249;
- case '7':
- case '8':
- case '9': goto yy51;
- case ':': goto yy985;
- case 'W': goto yy988;
- default: goto yy1243;
+ }
+yy1242:
+ YYDEBUG(1242, *YYCURSOR);
+ yyaccept = 16;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy947;
+ if (yych <= '9') goto yy792;
+ if (yych <= 'm') goto yy947;
+ goto yy847;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy947;
+ goto yy848;
+ } else {
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy947;
}
+ }
yy1243:
- YYDEBUG(1243, *YYCURSOR);
- {
+ YYDEBUG(1243, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '9') {
+ if (yych <= '-') {
+ if (yych == '\t') goto yy1232;
+ if (yych <= ',') goto yy1234;
+ goto yy1231;
+ } else {
+ if (yych <= '.') goto yy1244;
+ if (yych <= '/') goto yy913;
+ if (yych <= '5') goto yy1246;
+ goto yy924;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= ':') goto yy1245;
+ if (yych == 'n') goto yy673;
+ goto yy1234;
+ } else {
+ if (yych <= 'r') goto yy674;
+ if (yych <= 's') goto yy667;
+ if (yych <= 't') goto yy671;
+ goto yy1234;
+ }
+ }
+yy1244:
+ YYDEBUG(1244, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '1') {
+ if (yych <= '/') goto yy765;
+ if (yych <= '0') goto yy1268;
+ goto yy1269;
+ } else {
+ if (yych <= '5') goto yy1270;
+ if (yych <= '9') goto yy1271;
+ goto yy765;
+ }
+yy1245:
+ YYDEBUG(1245, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1263;
+ if (yych <= '9') goto yy1264;
+ goto yy53;
+yy1246:
+ YYDEBUG(1246, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '-') goto yy968;
+ if (yych <= '/') goto yy57;
+ if (yych >= ':') goto yy57;
+ YYDEBUG(1247, *YYCURSOR);
+ yyaccept = 25;
+ yych = *(YYMARKER = ++YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t':
+ case ' ':
+ case 'A':
+ case 'D':
+ case 'F':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'S':
+ case 'T':
+ case 'V':
+ case 'X':
+ case 'Y':
+ case 'a':
+ case 'd':
+ case 'f':
+ case 'h':
+ case 'j':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 's':
+ case 't':
+ case 'w':
+ case 'y': goto yy974;
+ case '-': goto yy971;
+ case '.': goto yy975;
+ case '/': goto yy972;
+ case '0': goto yy1249;
+ case '1': goto yy1250;
+ case '2': goto yy1251;
+ case '3': goto yy1252;
+ case '4':
+ case '5': goto yy1253;
+ case '6': goto yy1254;
+ case '7':
+ case '8':
+ case '9': goto yy51;
+ case ':': goto yy990;
+ case 'W': goto yy993;
+ default: goto yy1248;
+ }
+yy1248:
+ YYDEBUG(1248, *YYCURSOR);
+ {
DEBUG_OUTPUT("gnunocolon");
TIMELIB_INIT;
switch (s->time->have_time) {
@@ -18508,98 +18520,98 @@ yy1243:
TIMELIB_DEINIT;
return TIMELIB_GNU_NOCOLON;
}
-yy1244:
- YYDEBUG(1244, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '0') goto yy1256;
- if(yych <= '9') goto yy1257;
- goto yy57;
-yy1245:
- YYDEBUG(1245, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '2') goto yy1255;
- if(yych <= '9') goto yy1254;
- goto yy57;
-yy1246:
- YYDEBUG(1246, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '9') goto yy1254;
- goto yy57;
-yy1247:
- YYDEBUG(1247, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '5') goto yy1252;
- if(yych <= '6') goto yy1253;
- if(yych <= '9') goto yy1250;
- goto yy57;
-yy1248:
- YYDEBUG(1248, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '9') goto yy1250;
- goto yy57;
yy1249:
- YYDEBUG(1249, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '0') goto yy1250;
- if(yych <= '9') goto yy51;
- goto yy57;
+ YYDEBUG(1249, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '0') goto yy1261;
+ if (yych <= '9') goto yy1262;
+ goto yy57;
yy1250:
- YYDEBUG(1250, *YYCURSOR);
- yyaccept = 26;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yybm[0+yych] & 4) {
- goto yy51;
- }
- if(yych <= 'W') {
- if(yych <= 'F') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych >= ' ') goto yy57;
- } else {
- if(yych == 'D') goto yy57;
- if(yych >= 'F') goto yy57;
- }
+ YYDEBUG(1250, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '2') goto yy1260;
+ if (yych <= '9') goto yy1259;
+ goto yy57;
+yy1251:
+ YYDEBUG(1251, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '9') goto yy1259;
+ goto yy57;
+yy1252:
+ YYDEBUG(1252, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '5') goto yy1257;
+ if (yych <= '6') goto yy1258;
+ if (yych <= '9') goto yy1255;
+ goto yy57;
+yy1253:
+ YYDEBUG(1253, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '9') goto yy1255;
+ goto yy57;
+yy1254:
+ YYDEBUG(1254, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '0') goto yy1255;
+ if (yych <= '9') goto yy51;
+ goto yy57;
+yy1255:
+ YYDEBUG(1255, *YYCURSOR);
+ yyaccept = 26;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yybm[0+yych] & 4) {
+ goto yy51;
+ }
+ if (yych <= 'W') {
+ if (yych <= 'F') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych >= ' ') goto yy57;
} else {
- if(yych <= 'M') {
- if(yych == 'H') goto yy57;
- if(yych >= 'M') goto yy57;
- } else {
- if(yych <= 'R') goto yy1251;
- if(yych <= 'T') goto yy57;
- if(yych >= 'W') goto yy57;
- }
+ if (yych == 'D') goto yy57;
+ if (yych >= 'F') goto yy57;
}
} else {
- if(yych <= 'h') {
- if(yych <= 'd') {
- if(yych == 'Y') goto yy57;
- if(yych >= 'd') goto yy57;
- } else {
- if(yych == 'f') goto yy57;
- if(yych >= 'h') goto yy57;
- }
+ if (yych <= 'M') {
+ if (yych == 'H') goto yy57;
+ if (yych >= 'M') goto yy57;
+ } else {
+ if (yych <= 'R') goto yy1256;
+ if (yych <= 'T') goto yy57;
+ if (yych >= 'W') goto yy57;
+ }
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'd') {
+ if (yych == 'Y') goto yy57;
+ if (yych >= 'd') goto yy57;
+ } else {
+ if (yych == 'f') goto yy57;
+ if (yych >= 'h') goto yy57;
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych >= 's') goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych >= 's') goto yy57;
+ if (yych <= 'w') {
+ if (yych >= 'w') goto yy57;
} else {
- if(yych <= 'w') {
- if(yych >= 'w') goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- }
+ if (yych == 'y') goto yy57;
}
}
}
-yy1251:
- YYDEBUG(1251, *YYCURSOR);
- {
+ }
+yy1256:
+ YYDEBUG(1256, *YYCURSOR);
+ {
int tz_not_found;
DEBUG_OUTPUT("iso8601nocolon");
TIMELIB_INIT;
@@ -18617,626 +18629,626 @@ yy1251:
TIMELIB_DEINIT;
return TIMELIB_ISO_NOCOLON;
}
-yy1252:
- YYDEBUG(1252, *YYCURSOR);
- yyaccept = 26;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy1251;
+yy1257:
+ YYDEBUG(1257, *YYCURSOR);
+ yyaccept = 26;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy1256;
+ goto yy57;
+ } else {
+ if (yych <= '/') goto yy1256;
+ if (yych <= '9') goto yy1004;
+ if (yych <= 'C') goto yy1256;
+ goto yy57;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy1256;
+ goto yy57;
+ } else {
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy1256;
goto yy57;
} else {
- if(yych <= '/') goto yy1251;
- if(yych <= '9') goto yy999;
- if(yych <= 'C') goto yy1251;
- goto yy57;
+ if (yych <= 'R') goto yy1256;
+ if (yych <= 'T') goto yy57;
+ goto yy1256;
}
+ }
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy1256;
+ if (yych <= 'Y') goto yy57;
+ goto yy1256;
} else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy1251;
- goto yy57;
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
+ goto yy1256;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy1251;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy1251;
- if(yych <= 'T') goto yy57;
- goto yy1251;
- }
+ if (yych == 'g') goto yy1256;
+ goto yy57;
}
}
} else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy1251;
- if(yych <= 'Y') goto yy57;
- goto yy1251;
- } else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy1251;
- } else {
- if(yych == 'g') goto yy1251;
- goto yy57;
- }
- }
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy1256;
+ goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy1251;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy1256;
goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy1251;
- }
+ if (yych == 'y') goto yy57;
+ goto yy1256;
}
}
}
-yy1253:
- YYDEBUG(1253, *YYCURSOR);
- yyaccept = 26;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy1251;
+ }
+yy1258:
+ YYDEBUG(1258, *YYCURSOR);
+ yyaccept = 26;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy1256;
+ goto yy57;
+ } else {
+ if (yych <= '6') {
+ if (yych <= '/') goto yy1256;
+ goto yy1004;
+ } else {
+ if (yych <= '9') goto yy51;
+ if (yych <= 'C') goto yy1256;
goto yy57;
- } else {
- if(yych <= '6') {
- if(yych <= '/') goto yy1251;
- goto yy999;
- } else {
- if(yych <= '9') goto yy51;
- if(yych <= 'C') goto yy1251;
- goto yy57;
- }
}
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy1256;
+ goto yy57;
} else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy1251;
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy1256;
goto yy57;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy1251;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy1251;
- if(yych <= 'T') goto yy57;
- goto yy1251;
- }
+ if (yych <= 'R') goto yy1256;
+ if (yych <= 'T') goto yy57;
+ goto yy1256;
}
}
- } else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy1251;
- if(yych <= 'Y') goto yy57;
- goto yy1251;
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy1256;
+ if (yych <= 'Y') goto yy57;
+ goto yy1256;
+ } else {
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
+ goto yy1256;
} else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy1251;
- } else {
- if(yych == 'g') goto yy1251;
- goto yy57;
- }
+ if (yych == 'g') goto yy1256;
+ goto yy57;
}
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy1256;
+ goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy1251;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy1256;
goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy1251;
- }
+ if (yych == 'y') goto yy57;
+ goto yy1256;
}
}
}
-yy1254:
- YYDEBUG(1254, *YYCURSOR);
- yyaccept = 26;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy1251;
+ }
+yy1259:
+ YYDEBUG(1259, *YYCURSOR);
+ yyaccept = 26;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy1256;
+ goto yy57;
+ } else {
+ if (yych <= '/') goto yy1256;
+ if (yych <= '9') goto yy1004;
+ if (yych <= 'C') goto yy1256;
+ goto yy57;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy1256;
+ goto yy57;
+ } else {
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy1256;
goto yy57;
} else {
- if(yych <= '/') goto yy1251;
- if(yych <= '9') goto yy999;
- if(yych <= 'C') goto yy1251;
- goto yy57;
+ if (yych <= 'R') goto yy1256;
+ if (yych <= 'T') goto yy57;
+ goto yy1256;
}
+ }
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy1256;
+ if (yych <= 'Y') goto yy57;
+ goto yy1256;
} else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy1251;
- goto yy57;
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
+ goto yy1256;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy1251;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy1251;
- if(yych <= 'T') goto yy57;
- goto yy1251;
- }
+ if (yych == 'g') goto yy1256;
+ goto yy57;
}
}
} else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy1251;
- if(yych <= 'Y') goto yy57;
- goto yy1251;
- } else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy1251;
- } else {
- if(yych == 'g') goto yy1251;
- goto yy57;
- }
- }
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy1256;
+ goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy1251;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy1256;
goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy1251;
- }
+ if (yych == 'y') goto yy57;
+ goto yy1256;
}
}
}
-yy1255:
- YYDEBUG(1255, *YYCURSOR);
- yyaccept = 26;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '9') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy1251;
- goto yy57;
- } else {
- if(yych <= '0') {
- if(yych <= '/') goto yy1251;
- goto yy1023;
- } else {
- if(yych <= '2') goto yy1024;
- if(yych <= '3') goto yy1025;
- goto yy999;
- }
- }
+ }
+yy1260:
+ YYDEBUG(1260, *YYCURSOR);
+ yyaccept = 26;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '9') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy1256;
+ goto yy57;
} else {
- if(yych <= 'G') {
- if(yych <= 'D') {
- if(yych <= 'C') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'F') goto yy57;
- goto yy1251;
- }
+ if (yych <= '0') {
+ if (yych <= '/') goto yy1256;
+ goto yy1028;
} else {
- if(yych <= 'L') {
- if(yych <= 'H') goto yy57;
- goto yy1251;
- } else {
- if(yych <= 'M') goto yy57;
- if(yych <= 'R') goto yy1251;
- goto yy57;
- }
+ if (yych <= '2') goto yy1029;
+ if (yych <= '3') goto yy1030;
+ goto yy1004;
}
}
} else {
- if(yych <= 'g') {
- if(yych <= 'Y') {
- if(yych == 'W') goto yy57;
- if(yych <= 'X') goto yy1251;
+ if (yych <= 'G') {
+ if (yych <= 'D') {
+ if (yych <= 'C') goto yy1256;
goto yy57;
} else {
- if(yych <= 'd') {
- if(yych <= 'c') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'f') goto yy57;
- goto yy1251;
- }
+ if (yych == 'F') goto yy57;
+ goto yy1256;
}
} else {
- if(yych <= 't') {
- if(yych <= 'l') {
- if(yych <= 'h') goto yy57;
- goto yy1251;
- } else {
- if(yych <= 'm') goto yy57;
- if(yych <= 'r') goto yy1251;
- goto yy57;
- }
+ if (yych <= 'L') {
+ if (yych <= 'H') goto yy57;
+ goto yy1256;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy1251;
- }
+ if (yych <= 'M') goto yy57;
+ if (yych <= 'R') goto yy1256;
+ goto yy57;
}
}
}
-yy1256:
- YYDEBUG(1256, *YYCURSOR);
- yyaccept = 26;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '9') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy1251;
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Y') {
+ if (yych == 'W') goto yy57;
+ if (yych <= 'X') goto yy1256;
+ goto yy57;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'c') goto yy1256;
goto yy57;
} else {
- if(yych <= '0') {
- if(yych <= '/') goto yy1251;
- goto yy1055;
- } else {
- if(yych <= '2') goto yy1024;
- if(yych <= '3') goto yy1025;
- goto yy999;
- }
+ if (yych == 'f') goto yy57;
+ goto yy1256;
+ }
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych <= 'l') {
+ if (yych <= 'h') goto yy57;
+ goto yy1256;
+ } else {
+ if (yych <= 'm') goto yy57;
+ if (yych <= 'r') goto yy1256;
+ goto yy57;
}
} else {
- if(yych <= 'G') {
- if(yych <= 'D') {
- if(yych <= 'C') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'F') goto yy57;
- goto yy1251;
- }
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy1256;
+ goto yy57;
} else {
- if(yych <= 'L') {
- if(yych <= 'H') goto yy57;
- goto yy1251;
- } else {
- if(yych <= 'M') goto yy57;
- if(yych <= 'R') goto yy1251;
- goto yy57;
- }
+ if (yych == 'y') goto yy57;
+ goto yy1256;
+ }
+ }
+ }
+ }
+yy1261:
+ YYDEBUG(1261, *YYCURSOR);
+ yyaccept = 26;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '9') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy1256;
+ goto yy57;
+ } else {
+ if (yych <= '0') {
+ if (yych <= '/') goto yy1256;
+ goto yy1060;
+ } else {
+ if (yych <= '2') goto yy1029;
+ if (yych <= '3') goto yy1030;
+ goto yy1004;
}
}
} else {
- if(yych <= 'g') {
- if(yych <= 'Y') {
- if(yych == 'W') goto yy57;
- if(yych <= 'X') goto yy1251;
+ if (yych <= 'G') {
+ if (yych <= 'D') {
+ if (yych <= 'C') goto yy1256;
goto yy57;
} else {
- if(yych <= 'd') {
- if(yych <= 'c') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'f') goto yy57;
- goto yy1251;
- }
+ if (yych == 'F') goto yy57;
+ goto yy1256;
}
} else {
- if(yych <= 't') {
- if(yych <= 'l') {
- if(yych <= 'h') goto yy57;
- goto yy1251;
- } else {
- if(yych <= 'm') goto yy57;
- if(yych <= 'r') goto yy1251;
- goto yy57;
- }
+ if (yych <= 'L') {
+ if (yych <= 'H') goto yy57;
+ goto yy1256;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy1251;
- }
+ if (yych <= 'M') goto yy57;
+ if (yych <= 'R') goto yy1256;
+ goto yy57;
}
}
}
-yy1257:
- YYDEBUG(1257, *YYCURSOR);
- yyaccept = 26;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '9') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy1251;
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Y') {
+ if (yych == 'W') goto yy57;
+ if (yych <= 'X') goto yy1256;
+ goto yy57;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'c') goto yy1256;
goto yy57;
} else {
- if(yych <= '0') {
- if(yych <= '/') goto yy1251;
- goto yy1023;
- } else {
- if(yych <= '2') goto yy1024;
- if(yych <= '3') goto yy1025;
- goto yy999;
- }
+ if (yych == 'f') goto yy57;
+ goto yy1256;
+ }
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych <= 'l') {
+ if (yych <= 'h') goto yy57;
+ goto yy1256;
+ } else {
+ if (yych <= 'm') goto yy57;
+ if (yych <= 'r') goto yy1256;
+ goto yy57;
}
} else {
- if(yych <= 'G') {
- if(yych <= 'D') {
- if(yych <= 'C') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'F') goto yy57;
- goto yy1251;
- }
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy1256;
+ goto yy57;
} else {
- if(yych <= 'L') {
- if(yych <= 'H') goto yy57;
- goto yy1251;
- } else {
- if(yych <= 'M') goto yy57;
- if(yych <= 'R') goto yy1251;
- goto yy57;
- }
+ if (yych == 'y') goto yy57;
+ goto yy1256;
+ }
+ }
+ }
+ }
+yy1262:
+ YYDEBUG(1262, *YYCURSOR);
+ yyaccept = 26;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '9') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy1256;
+ goto yy57;
+ } else {
+ if (yych <= '0') {
+ if (yych <= '/') goto yy1256;
+ goto yy1028;
+ } else {
+ if (yych <= '2') goto yy1029;
+ if (yych <= '3') goto yy1030;
+ goto yy1004;
}
}
} else {
- if(yych <= 'g') {
- if(yych <= 'Y') {
- if(yych == 'W') goto yy57;
- if(yych <= 'X') goto yy1251;
+ if (yych <= 'G') {
+ if (yych <= 'D') {
+ if (yych <= 'C') goto yy1256;
goto yy57;
} else {
- if(yych <= 'd') {
- if(yych <= 'c') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'f') goto yy57;
- goto yy1251;
- }
+ if (yych == 'F') goto yy57;
+ goto yy1256;
}
} else {
- if(yych <= 't') {
- if(yych <= 'l') {
- if(yych <= 'h') goto yy57;
- goto yy1251;
- } else {
- if(yych <= 'm') goto yy57;
- if(yych <= 'r') goto yy1251;
- goto yy57;
- }
+ if (yych <= 'L') {
+ if (yych <= 'H') goto yy57;
+ goto yy1256;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy1251;
- }
+ if (yych <= 'M') goto yy57;
+ if (yych <= 'R') goto yy1256;
+ goto yy57;
}
}
}
-yy1258:
- YYDEBUG(1258, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy1260;
- goto yy696;
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Y') {
+ if (yych == 'W') goto yy57;
+ if (yych <= 'X') goto yy1256;
+ goto yy57;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'c') goto yy1256;
+ goto yy57;
+ } else {
+ if (yych == 'f') goto yy57;
+ goto yy1256;
+ }
+ }
} else {
- if(yych <= '9') goto yy1259;
- if(yych <= ':') goto yy1260;
- goto yy696;
+ if (yych <= 't') {
+ if (yych <= 'l') {
+ if (yych <= 'h') goto yy57;
+ goto yy1256;
+ } else {
+ if (yych <= 'm') goto yy57;
+ if (yych <= 'r') goto yy1256;
+ goto yy57;
+ }
+ } else {
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy1256;
+ goto yy57;
+ } else {
+ if (yych == 'y') goto yy57;
+ goto yy1256;
+ }
+ }
}
-yy1259:
- YYDEBUG(1259, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy1260;
- if(yych != ':') goto yy696;
-yy1260:
- YYDEBUG(1260, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1261;
- if(yych <= '6') goto yy1262;
- if(yych <= '9') goto yy701;
- goto yy53;
-yy1261:
- YYDEBUG(1261, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy702;
- if(yych <= '/') goto yy696;
- if(yych <= '9') goto yy701;
- goto yy696;
-yy1262:
- YYDEBUG(1262, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy702;
- if(yych == '0') goto yy701;
- goto yy696;
+ }
yy1263:
- YYDEBUG(1263, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ',') goto yy696;
- if(yych <= '-') goto yy790;
- goto yy1267;
- } else {
- if(yych <= '/') goto yy696;
- if(yych <= '9') goto yy1266;
- if(yych <= ':') goto yy1260;
- goto yy696;
- }
+ YYDEBUG(1263, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy1265;
+ goto yy694;
+ } else {
+ if (yych <= '9') goto yy1264;
+ if (yych <= ':') goto yy1265;
+ goto yy694;
+ }
yy1264:
- YYDEBUG(1264, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= ',') goto yy696;
- if(yych <= '-') goto yy790;
- if(yych <= '.') goto yy1267;
- goto yy696;
- } else {
- if(yych <= '2') goto yy1266;
- if(yych <= '9') goto yy1259;
- if(yych <= ':') goto yy1260;
- goto yy696;
- }
+ YYDEBUG(1264, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy1265;
+ if (yych != ':') goto yy694;
yy1265:
- YYDEBUG(1265, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ',') goto yy696;
- if(yych <= '-') goto yy790;
- goto yy1267;
- } else {
- if(yych <= '/') goto yy696;
- if(yych <= '9') goto yy1259;
- if(yych <= ':') goto yy1260;
- goto yy696;
- }
+ YYDEBUG(1265, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1266;
+ if (yych <= '6') goto yy1267;
+ if (yych <= '9') goto yy699;
+ goto yy53;
yy1266:
- YYDEBUG(1266, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ',') goto yy696;
- if(yych <= '-') goto yy790;
- } else {
- if(yych == ':') goto yy1260;
- goto yy696;
- }
+ YYDEBUG(1266, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy700;
+ if (yych <= '/') goto yy694;
+ if (yych <= '9') goto yy699;
+ goto yy694;
yy1267:
- YYDEBUG(1267, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1268;
- if(yych <= '6') goto yy1269;
- if(yych <= '9') goto yy794;
- goto yy53;
+ YYDEBUG(1267, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy700;
+ if (yych == '0') goto yy699;
+ goto yy694;
yy1268:
- YYDEBUG(1268, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy702;
- if(yych <= '/') goto yy696;
- if(yych <= '9') goto yy1270;
- goto yy696;
+ YYDEBUG(1268, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ',') goto yy694;
+ if (yych <= '-') goto yy789;
+ goto yy1272;
+ } else {
+ if (yych <= '/') goto yy694;
+ if (yych <= '9') goto yy1271;
+ if (yych <= ':') goto yy1265;
+ goto yy694;
+ }
yy1269:
- YYDEBUG(1269, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy702;
- goto yy696;
- } else {
- if(yych <= '0') goto yy1270;
- if(yych <= '9') goto yy795;
- goto yy696;
- }
+ YYDEBUG(1269, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= ',') goto yy694;
+ if (yych <= '-') goto yy789;
+ if (yych <= '.') goto yy1272;
+ goto yy694;
+ } else {
+ if (yych <= '2') goto yy1271;
+ if (yych <= '9') goto yy1264;
+ if (yych <= ':') goto yy1265;
+ goto yy694;
+ }
yy1270:
- YYDEBUG(1270, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy702;
- if(yych <= '/') goto yy696;
- if(yych <= '9') goto yy797;
- goto yy696;
+ YYDEBUG(1270, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ',') goto yy694;
+ if (yych <= '-') goto yy789;
+ goto yy1272;
+ } else {
+ if (yych <= '/') goto yy694;
+ if (yych <= '9') goto yy1264;
+ if (yych <= ':') goto yy1265;
+ goto yy694;
+ }
yy1271:
- YYDEBUG(1271, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '9') {
- if(yych <= '-') {
- if(yych == 0x09) goto yy665;
- if(yych <= ',') goto yy667;
- goto yy1226;
- } else {
- if(yych <= '.') goto yy679;
- if(yych <= '/') goto yy677;
- if(yych <= '5') goto yy1241;
- goto yy919;
- }
- } else {
- if(yych <= 'q') {
- if(yych <= ':') goto yy688;
- if(yych == 'n') goto yy675;
- goto yy667;
- } else {
- if(yych <= 'r') goto yy676;
- if(yych <= 's') goto yy669;
- if(yych <= 't') goto yy673;
- goto yy667;
- }
- }
+ YYDEBUG(1271, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ',') goto yy694;
+ if (yych <= '-') goto yy789;
+ } else {
+ if (yych == ':') goto yy1265;
+ goto yy694;
+ }
yy1272:
- YYDEBUG(1272, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '9') {
- if(yych <= '-') {
- if(yych == 0x09) goto yy1227;
- if(yych <= ',') goto yy1229;
- goto yy1226;
- } else {
- if(yych <= '.') goto yy1239;
- if(yych <= '/') goto yy677;
- if(yych <= '5') goto yy1241;
- goto yy919;
- }
- } else {
- if(yych <= 'q') {
- if(yych <= ':') goto yy1240;
- if(yych == 'n') goto yy675;
- goto yy1229;
- } else {
- if(yych <= 'r') goto yy676;
- if(yych <= 's') goto yy669;
- if(yych <= 't') goto yy673;
- goto yy1229;
- }
- }
+ YYDEBUG(1272, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1273;
+ if (yych <= '6') goto yy1274;
+ if (yych <= '9') goto yy797;
+ goto yy53;
yy1273:
- YYDEBUG(1273, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
+ YYDEBUG(1273, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy700;
+ if (yych <= '/') goto yy694;
+ if (yych <= '9') goto yy1275;
+ goto yy694;
yy1274:
- YYDEBUG(1274, *YYCURSOR);
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- YYDEBUG(1275, *YYCURSOR);
- if(yych <= '/') goto yy1276;
- if(yych <= '9') goto yy1274;
+ YYDEBUG(1274, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy700;
+ goto yy694;
+ } else {
+ if (yych <= '0') goto yy1275;
+ if (yych <= '9') goto yy798;
+ goto yy694;
+ }
+yy1275:
+ YYDEBUG(1275, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy700;
+ if (yych <= '/') goto yy694;
+ if (yych <= '9') goto yy792;
+ goto yy694;
yy1276:
- YYDEBUG(1276, *YYCURSOR);
- {
+ YYDEBUG(1276, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '9') {
+ if (yych <= '-') {
+ if (yych == '\t') goto yy663;
+ if (yych <= ',') goto yy665;
+ goto yy1231;
+ } else {
+ if (yych <= '.') goto yy677;
+ if (yych <= '/') goto yy675;
+ if (yych <= '5') goto yy1246;
+ goto yy924;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= ':') goto yy686;
+ if (yych == 'n') goto yy673;
+ goto yy665;
+ } else {
+ if (yych <= 'r') goto yy674;
+ if (yych <= 's') goto yy667;
+ if (yych <= 't') goto yy671;
+ goto yy665;
+ }
+ }
+yy1277:
+ YYDEBUG(1277, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '9') {
+ if (yych <= '-') {
+ if (yych == '\t') goto yy1232;
+ if (yych <= ',') goto yy1234;
+ goto yy1231;
+ } else {
+ if (yych <= '.') goto yy1244;
+ if (yych <= '/') goto yy675;
+ if (yych <= '5') goto yy1246;
+ goto yy924;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= ':') goto yy1245;
+ if (yych == 'n') goto yy673;
+ goto yy1234;
+ } else {
+ if (yych <= 'r') goto yy674;
+ if (yych <= 's') goto yy667;
+ if (yych <= 't') goto yy671;
+ goto yy1234;
+ }
+ }
+yy1278:
+ YYDEBUG(1278, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+yy1279:
+ YYDEBUG(1279, *YYCURSOR);
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ YYDEBUG(1280, *YYCURSOR);
+ if (yych <= '/') goto yy1281;
+ if (yych <= '9') goto yy1279;
+yy1281:
+ YYDEBUG(1281, *YYCURSOR);
+ {
timelib_ull i;
TIMELIB_INIT;
@@ -19258,442 +19270,442 @@ yy1276:
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
-yy1277:
- YYDEBUG(1277, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy138;
- goto yy1317;
- }
+yy1282:
+ YYDEBUG(1282, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'm') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'n') goto yy1317;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy138;
+ goto yy1322;
}
-yy1278:
- YYDEBUG(1278, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych == 'I') goto yy1311;
- if(yych <= 'T') goto yy138;
- goto yy1310;
- }
+ } else {
+ if (yych <= 'm') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
} else {
- if(yych <= 'i') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- if(yych <= 'h') goto yy138;
- goto yy1311;
- } else {
- if(yych == 'u') goto yy1310;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= 'n') goto yy1322;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
-yy1279:
- YYDEBUG(1279, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'M') {
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych == 'D') goto yy1299;
- if(yych <= 'L') goto yy138;
- goto yy1300;
- }
+ }
+yy1283:
+ YYDEBUG(1283, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- if(yych <= 'c') goto yy138;
- goto yy1299;
- } else {
- if(yych == 'm') goto yy1300;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych == 'I') goto yy1316;
+ if (yych <= 'T') goto yy138;
+ goto yy1315;
}
-yy1280:
- YYDEBUG(1280, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy138;
- goto yy1295;
- }
+ } else {
+ if (yych <= 'i') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'h') goto yy138;
+ goto yy1316;
+ } else {
+ if (yych == 'u') goto yy1315;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
+yy1284:
+ YYDEBUG(1284, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'M') {
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'e') goto yy1295;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych == 'D') goto yy1304;
+ if (yych <= 'L') goto yy138;
+ goto yy1305;
}
-yy1281:
- YYDEBUG(1281, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy138;
- goto yy1291;
- }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'c') goto yy138;
+ goto yy1304;
+ } else {
+ if (yych == 'm') goto yy1305;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
+yy1285:
+ YYDEBUG(1285, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'e') goto yy1291;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy138;
+ goto yy1300;
}
-yy1282:
- YYDEBUG(1282, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') {
- if(yych == '.') goto yy1240;
- goto yy53;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
} else {
- if(yych <= '9') goto yy1285;
- if(yych <= ':') goto yy1240;
- goto yy53;
+ if (yych <= 'e') goto yy1300;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
-yy1283:
- YYDEBUG(1283, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') {
- if(yych == '.') goto yy1240;
- goto yy53;
+ }
+yy1286:
+ YYDEBUG(1286, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= '3') goto yy1285;
- if(yych == ':') goto yy1240;
- goto yy53;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy138;
+ goto yy1296;
}
-yy1284:
- YYDEBUG(1284, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '.') goto yy1240;
- if(yych == ':') goto yy1240;
- goto yy53;
-yy1285:
- YYDEBUG(1285, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') {
- if(yych == '.') goto yy1240;
- goto yy53;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
} else {
- if(yych <= '5') goto yy1286;
- if(yych == ':') goto yy1240;
- goto yy53;
+ if (yych <= 'e') goto yy1296;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
-yy1286:
- YYDEBUG(1286, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- YYDEBUG(1287, *YYCURSOR);
- yyaccept = 25;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') goto yy1243;
- if(yych <= '5') goto yy1288;
- if(yych <= '6') goto yy1289;
- goto yy1243;
+ }
+yy1287:
+ YYDEBUG(1287, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy1245;
+ goto yy53;
+ } else {
+ if (yych <= '9') goto yy1290;
+ if (yych <= ':') goto yy1245;
+ goto yy53;
+ }
yy1288:
- YYDEBUG(1288, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1290;
+ YYDEBUG(1288, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy1245;
goto yy53;
+ } else {
+ if (yych <= '3') goto yy1290;
+ if (yych == ':') goto yy1245;
+ goto yy53;
+ }
yy1289:
- YYDEBUG(1289, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '0') goto yy53;
+ YYDEBUG(1289, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '.') goto yy1245;
+ if (yych == ':') goto yy1245;
+ goto yy53;
yy1290:
- YYDEBUG(1290, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy1251;
+ YYDEBUG(1290, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy1245;
+ goto yy53;
+ } else {
+ if (yych <= '5') goto yy1291;
+ if (yych == ':') goto yy1245;
+ goto yy53;
+ }
yy1291:
- YYDEBUG(1291, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'L') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'K') goto yy139;
- }
- } else {
- if(yych <= 'k') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'l') goto yy1292;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
- }
-yy1292:
- YYDEBUG(1292, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'F') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'E') goto yy140;
- }
- } else {
- if(yych <= 'e') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'f') goto yy1293;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
- }
+ YYDEBUG(1291, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(1292, *YYCURSOR);
+ yyaccept = 25;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') goto yy1248;
+ if (yych <= '5') goto yy1293;
+ if (yych <= '6') goto yy1294;
+ goto yy1248;
yy1293:
- YYDEBUG(1293, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy141;
- }
+ YYDEBUG(1293, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1295;
+ goto yy53;
+yy1294:
+ YYDEBUG(1294, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '0') goto yy53;
+yy1295:
+ YYDEBUG(1295, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy1256;
+yy1296:
+ YYDEBUG(1296, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'L') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 't') goto yy1294;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'K') goto yy139;
}
-yy1294:
- YYDEBUG(1294, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'G') {
- if(yych == ')') goto yy136;
- goto yy3;
+ } else {
+ if (yych <= 'k') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
} else {
- if(yych <= 'H') goto yy160;
- if(yych == 'h') goto yy160;
+ if (yych <= 'l') goto yy1297;
+ if (yych <= 'z') goto yy139;
goto yy3;
}
-yy1295:
- YYDEBUG(1295, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'S') {
- if(yych <= ')') {
- if(yych <= '(') goto yy276;
- goto yy136;
- } else {
- if(yych <= '@') goto yy276;
- if(yych <= 'R') goto yy139;
- }
+ }
+yy1297:
+ YYDEBUG(1297, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'F') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'r') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy276;
- goto yy139;
- } else {
- if(yych <= 's') goto yy1296;
- if(yych <= 'z') goto yy139;
- goto yy276;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'E') goto yy140;
}
-yy1296:
- YYDEBUG(1296, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy140;
- }
+ } else {
+ if (yych <= 'e') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
} else {
- if(yych <= 'c') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'd') goto yy1297;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
- }
-yy1297:
- YYDEBUG(1297, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- } else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy1298;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= 'f') goto yy1298;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy1298:
- YYDEBUG(1298, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'X') {
- if(yych == ')') goto yy136;
- goto yy3;
+ YYDEBUG(1298, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'Y') goto yy282;
- if(yych == 'y') goto yy282;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy141;
+ }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
+ } else {
+ if (yych <= 't') goto yy1299;
+ if (yych <= 'z') goto yy141;
goto yy3;
}
+ }
yy1299:
- YYDEBUG(1299, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- goto yy1307;
+ YYDEBUG(1299, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'G') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'H') goto yy160;
+ if (yych == 'h') goto yy160;
+ goto yy3;
+ }
+yy1300:
+ YYDEBUG(1300, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'S') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy276;
+ goto yy136;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy1307;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy276;
+ if (yych <= 'R') goto yy139;
}
-yy1300:
- YYDEBUG(1300, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'N') goto yy139;
- }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy276;
+ goto yy139;
} else {
- if(yych <= 'n') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'o') goto yy1301;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= 's') goto yy1301;
+ if (yych <= 'z') goto yy139;
+ goto yy276;
}
+ }
yy1301:
- YYDEBUG(1301, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy140;
- }
+ YYDEBUG(1301, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'q') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'r') goto yy1302;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy140;
+ }
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'd') goto yy1302;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy1302:
- YYDEBUG(1302, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy141;
- }
+ YYDEBUG(1302, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ goto yy3;
} else {
- if(yych <= 'q') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'r') goto yy1303;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= 'a') goto yy1303;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
yy1303:
- YYDEBUG(1303, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych == ')') goto yy136;
+ YYDEBUG(1303, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'X') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'Y') goto yy282;
+ if (yych == 'y') goto yy282;
+ goto yy3;
+ }
+yy1304:
+ YYDEBUG(1304, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy1312;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
goto yy3;
} else {
- if(yych <= 'O') goto yy1304;
- if(yych != 'o') goto yy3;
+ if (yych <= 'a') goto yy1312;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
-yy1304:
- YYDEBUG(1304, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'W') goto yy1305;
- if(yych != 'w') goto yy53;
+ }
yy1305:
- YYDEBUG(1305, *YYCURSOR);
- ++YYCURSOR;
+ YYDEBUG(1305, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'N') goto yy139;
+ }
+ } else {
+ if (yych <= 'n') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 'o') goto yy1306;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
+ }
+ }
yy1306:
- YYDEBUG(1306, *YYCURSOR);
- {
+ YYDEBUG(1306, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy140;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'r') goto yy1307;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
+ }
+ }
+yy1307:
+ YYDEBUG(1307, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy141;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
+ } else {
+ if (yych <= 'r') goto yy1308;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
+ }
+ }
+yy1308:
+ YYDEBUG(1308, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'O') goto yy1309;
+ if (yych != 'o') goto yy3;
+ }
+yy1309:
+ YYDEBUG(1309, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'W') goto yy1310;
+ if (yych != 'w') goto yy53;
+yy1310:
+ YYDEBUG(1310, *YYCURSOR);
+ ++YYCURSOR;
+yy1311:
+ YYDEBUG(1311, *YYCURSOR);
+ {
DEBUG_OUTPUT("tomorrow");
TIMELIB_INIT;
TIMELIB_HAVE_RELATIVE();
@@ -19703,41 +19715,41 @@ yy1306:
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
-yy1307:
- YYDEBUG(1307, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Y') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'X') goto yy140;
- }
+yy1312:
+ YYDEBUG(1312, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Y') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'x') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'y') goto yy1308;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'X') goto yy140;
}
-yy1308:
- YYDEBUG(1308, *YYCURSOR);
- ++YYCURSOR;
- if((yych = *YYCURSOR) <= '@') {
- if(yych == ')') goto yy136;
+ } else {
+ if (yych <= 'x') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
} else {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy1309;
- if(yych <= 'z') goto yy141;
+ if (yych <= 'y') goto yy1313;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
-yy1309:
- YYDEBUG(1309, *YYCURSOR);
- {
+ }
+yy1313:
+ YYDEBUG(1313, *YYCURSOR);
+ ++YYCURSOR;
+ if ((yych = *YYCURSOR) <= '@') {
+ if (yych == ')') goto yy136;
+ } else {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy1314;
+ if (yych <= 'z') goto yy141;
+ }
+yy1314:
+ YYDEBUG(1314, *YYCURSOR);
+ {
DEBUG_OUTPUT("midnight | today");
TIMELIB_INIT;
TIMELIB_UNHAVE_TIME();
@@ -19745,1924 +19757,1924 @@ yy1309:
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
-yy1310:
- YYDEBUG(1310, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= ')') {
- if(yych <= '(') goto yy276;
- goto yy136;
- } else {
- if(yych <= '@') goto yy276;
- if(yych <= 'Q') goto yy139;
- goto yy1313;
- }
+yy1315:
+ YYDEBUG(1315, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy276;
+ goto yy136;
} else {
- if(yych <= 'q') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy276;
- goto yy139;
- } else {
- if(yych <= 'r') goto yy1313;
- if(yych <= 'z') goto yy139;
- goto yy276;
- }
+ if (yych <= '@') goto yy276;
+ if (yych <= 'Q') goto yy139;
+ goto yy1318;
}
-yy1311:
- YYDEBUG(1311, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'S') {
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= 'Q') goto yy139;
- if(yych >= 'S') goto yy250;
- }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy276;
+ goto yy139;
} else {
- if(yych <= 'q') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'r') goto yy1312;
- if(yych <= 's') goto yy250;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= 'r') goto yy1318;
+ if (yych <= 'z') goto yy139;
+ goto yy276;
}
-yy1312:
- YYDEBUG(1312, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy140;
- goto yy263;
- }
+ }
+yy1316:
+ YYDEBUG(1316, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'S') {
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'c') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'd') goto yy263;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= 'Q') goto yy139;
+ if (yych >= 'S') goto yy250;
}
-yy1313:
- YYDEBUG(1313, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'S') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy140;
- }
- } else {
- if(yych <= 'r') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 's') goto yy1314;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 'r') goto yy1317;
+ if (yych <= 's') goto yy250;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
-yy1314:
- YYDEBUG(1314, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy141;
- }
+ }
+yy1317:
+ YYDEBUG(1317, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'c') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'd') goto yy1315;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy140;
+ goto yy263;
}
-yy1315:
- YYDEBUG(1315, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
} else {
- if(yych <= 'A') goto yy1316;
- if(yych != 'a') goto yy3;
+ if (yych <= 'd') goto yy263;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
-yy1316:
- YYDEBUG(1316, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy282;
- if(yych == 'y') goto yy282;
- goto yy53;
-yy1317:
- YYDEBUG(1317, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- }
+ }
+yy1318:
+ YYDEBUG(1318, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'S') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 't') goto yy1318;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy140;
}
-yy1318:
- YYDEBUG(1318, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'H') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy140;
- goto yy263;
- }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
} else {
- if(yych <= 'g') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'h') goto yy263;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= 's') goto yy1319;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy1319:
- YYDEBUG(1319, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy138;
- goto yy1317;
- }
+ YYDEBUG(1319, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'n') goto yy1348;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy141;
}
-yy1320:
- YYDEBUG(1320, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'U') {
- if(yych <= '/') {
- if(yych == ')') goto yy136;
- if(yych <= '.') goto yy3;
- goto yy144;
- } else {
- if(yych <= 'H') {
- if(yych <= '@') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'I') goto yy1311;
- if(yych <= 'T') goto yy138;
- goto yy1310;
- }
- }
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
} else {
- if(yych <= 'h') {
- if(yych <= '^') {
- if(yych <= 'Z') goto yy138;
- goto yy3;
- } else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy3;
- goto yy143;
- }
- } else {
- if(yych <= 't') {
- if(yych <= 'i') goto yy1342;
- goto yy143;
- } else {
- if(yych <= 'u') goto yy1341;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
- }
+ if (yych <= 'd') goto yy1320;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
+yy1320:
+ YYDEBUG(1320, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'A') goto yy1321;
+ if (yych != 'a') goto yy3;
+ }
yy1321:
- YYDEBUG(1321, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'M') {
- if(yych <= '/') {
- if(yych == ')') goto yy136;
- if(yych <= '.') goto yy3;
- goto yy144;
- } else {
- if(yych <= 'C') {
- if(yych <= '@') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'D') goto yy1299;
- if(yych <= 'L') goto yy138;
- goto yy1300;
- }
- }
+ YYDEBUG(1321, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy282;
+ if (yych == 'y') goto yy282;
+ goto yy53;
+yy1322:
+ YYDEBUG(1322, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'c') {
- if(yych <= '^') {
- if(yych <= 'Z') goto yy138;
- goto yy3;
- } else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy3;
- goto yy143;
- }
- } else {
- if(yych <= 'l') {
- if(yych <= 'd') goto yy1332;
- goto yy143;
- } else {
- if(yych <= 'm') goto yy1333;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
}
-yy1322:
- YYDEBUG(1322, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy138;
- goto yy1295;
- }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'e') goto yy1328;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= 't') goto yy1323;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
+ }
yy1323:
- YYDEBUG(1323, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy138;
- goto yy1291;
- }
+ YYDEBUG(1323, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'H') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'e') goto yy1324;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy140;
+ goto yy263;
}
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'h') goto yy263;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
+ }
+ }
yy1324:
- YYDEBUG(1324, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'L') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'K') goto yy139;
- goto yy1292;
- }
+ YYDEBUG(1324, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy138;
+ goto yy1322;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'n') goto yy1353;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
+ }
+ }
+yy1325:
+ YYDEBUG(1325, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'U') {
+ if (yych <= '/') {
+ if (yych == ')') goto yy136;
+ if (yych <= '.') goto yy3;
+ goto yy144;
+ } else {
+ if (yych <= 'H') {
+ if (yych <= '@') goto yy3;
+ goto yy138;
} else {
- if(yych == 'l') goto yy1325;
- if(yych <= 'z') goto yy148;
- goto yy3;
+ if (yych <= 'I') goto yy1316;
+ if (yych <= 'T') goto yy138;
+ goto yy1315;
}
}
-yy1325:
- YYDEBUG(1325, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'F') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
+ } else {
+ if (yych <= 'h') {
+ if (yych <= '^') {
+ if (yych <= 'Z') goto yy138;
goto yy3;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'E') goto yy140;
- goto yy1293;
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy3;
+ goto yy143;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 't') {
+ if (yych <= 'i') goto yy1347;
+ goto yy143;
} else {
- if(yych == 'f') goto yy1326;
- if(yych <= 'z') goto yy149;
+ if (yych <= 'u') goto yy1346;
+ if (yych <= 'z') goto yy143;
goto yy3;
}
}
+ }
yy1326:
- YYDEBUG(1326, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy141;
- goto yy1294;
- }
+ YYDEBUG(1326, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'M') {
+ if (yych <= '/') {
+ if (yych == ')') goto yy136;
+ if (yych <= '.') goto yy3;
+ goto yy144;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 'C') {
+ if (yych <= '@') goto yy3;
+ goto yy138;
} else {
- if(yych == 't') goto yy1327;
- if(yych <= 'z') goto yy150;
- goto yy3;
+ if (yych <= 'D') goto yy1304;
+ if (yych <= 'L') goto yy138;
+ goto yy1305;
}
}
-yy1327:
- YYDEBUG(1327, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'H') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
+ } else {
+ if (yych <= 'c') {
+ if (yych <= '^') {
+ if (yych <= 'Z') goto yy138;
goto yy3;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= 'G') goto yy3;
- goto yy160;
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy3;
+ goto yy143;
}
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 'l') {
+ if (yych <= 'd') goto yy1337;
+ goto yy143;
} else {
- if(yych == 'h') goto yy247;
- if(yych <= 'z') goto yy151;
+ if (yych <= 'm') goto yy1338;
+ if (yych <= 'z') goto yy143;
goto yy3;
}
}
+ }
+yy1327:
+ YYDEBUG(1327, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy138;
+ goto yy1300;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'e') goto yy1333;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
+ }
+ }
yy1328:
- YYDEBUG(1328, *YYCURSOR);
- yyaccept = 5;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy276;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy276;
- if(yych <= 'R') goto yy139;
- goto yy1296;
- }
+ YYDEBUG(1328, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy276;
- } else {
- if(yych == 's') goto yy1329;
- if(yych <= 'z') goto yy148;
- goto yy276;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy138;
+ goto yy1296;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'e') goto yy1329;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
+ }
yy1329:
- YYDEBUG(1329, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy140;
- goto yy1297;
- }
+ YYDEBUG(1329, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'L') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'd') goto yy1330;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'K') goto yy139;
+ goto yy1297;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'l') goto yy1330;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy1330:
- YYDEBUG(1330, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'A') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- goto yy1298;
- }
+ YYDEBUG(1330, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'F') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'a') goto yy1331;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'E') goto yy140;
+ goto yy1298;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'f') goto yy1331;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy1331:
- YYDEBUG(1331, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'Y') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'X') goto yy3;
- goto yy282;
- }
+ YYDEBUG(1331, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'y') goto yy295;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy141;
+ goto yy1299;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy1332;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy1332:
- YYDEBUG(1332, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'A') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- goto yy1307;
- }
+ YYDEBUG(1332, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'H') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'a') goto yy1339;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'G') goto yy3;
+ goto yy160;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'h') goto yy247;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
+ }
yy1333:
- YYDEBUG(1333, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'O') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'N') goto yy139;
- goto yy1301;
- }
+ YYDEBUG(1333, *YYCURSOR);
+ yyaccept = 5;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy276;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'o') goto yy1334;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy276;
+ if (yych <= 'R') goto yy139;
+ goto yy1301;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy276;
+ } else {
+ if (yych == 's') goto yy1334;
+ if (yych <= 'z') goto yy148;
+ goto yy276;
}
+ }
yy1334:
- YYDEBUG(1334, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'R') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy140;
- goto yy1302;
- }
+ YYDEBUG(1334, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'r') goto yy1335;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy140;
+ goto yy1302;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'd') goto yy1335;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy1335:
- YYDEBUG(1335, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'R') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy141;
- goto yy1303;
- }
+ YYDEBUG(1335, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'r') goto yy1336;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ goto yy1303;
}
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '^') goto yy3;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy3;
+ if (yych <= 'a') goto yy1336;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
+ }
+ }
yy1336:
- YYDEBUG(1336, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'O') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'N') goto yy3;
- goto yy1304;
- }
+ YYDEBUG(1336, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'Y') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'o') goto yy1337;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'X') goto yy3;
+ goto yy282;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'y') goto yy295;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
+ }
yy1337:
- YYDEBUG(1337, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'W') goto yy1305;
- if(yych != 'w') goto yy152;
- YYDEBUG(1338, *YYCURSOR);
- yyaccept = 27;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '^') {
- if(yych == '/') goto yy144;
- goto yy1306;
+ YYDEBUG(1337, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ goto yy1312;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '^') goto yy3;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy3;
+ if (yych <= 'a') goto yy1344;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
+ }
+ }
+yy1338:
+ YYDEBUG(1338, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'O') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy1306;
- if(yych <= 'z') goto yy151;
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'N') goto yy139;
goto yy1306;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'o') goto yy1339;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
+ }
+ }
yy1339:
- YYDEBUG(1339, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'Y') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'X') goto yy140;
- goto yy1308;
- }
+ YYDEBUG(1339, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'R') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'y') goto yy1340;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy140;
+ goto yy1307;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'r') goto yy1340;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy1340:
- YYDEBUG(1340, *YYCURSOR);
- yyaccept = 28;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy1309;
- goto yy136;
- } else {
- if(yych == '/') goto yy144;
- goto yy1309;
- }
+ YYDEBUG(1340, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'R') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '^') goto yy1309;
- goto yy144;
- } else {
- if(yych <= '`') goto yy1309;
- if(yych <= 'z') goto yy150;
- goto yy1309;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy141;
+ goto yy1308;
}
-yy1341:
- YYDEBUG(1341, *YYCURSOR);
- yyaccept = 5;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'R') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy276;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy276;
- if(yych <= 'Q') goto yy139;
- goto yy1313;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy276;
- } else {
- if(yych == 'r') goto yy1344;
- if(yych <= 'z') goto yy148;
- goto yy276;
- }
+ if (yych == 'r') goto yy1341;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
-yy1342:
- YYDEBUG(1342, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych <= '/') {
- if(yych == ')') goto yy136;
- if(yych <= '.') goto yy3;
- goto yy144;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy139;
- if(yych <= 'R') goto yy1312;
- goto yy250;
- }
+ }
+yy1341:
+ YYDEBUG(1341, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'O') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy148;
- } else {
- if(yych <= 's') goto yy253;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'N') goto yy3;
+ goto yy1309;
}
- YYDEBUG(1343, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy140;
- goto yy263;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'd') goto yy273;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych == 'o') goto yy1342;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
+ }
+yy1342:
+ YYDEBUG(1342, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'W') goto yy1310;
+ if (yych != 'w') goto yy152;
+ YYDEBUG(1343, *YYCURSOR);
+ yyaccept = 27;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '^') {
+ if (yych == '/') goto yy144;
+ goto yy1311;
+ } else {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy1311;
+ if (yych <= 'z') goto yy151;
+ goto yy1311;
+ }
yy1344:
- YYDEBUG(1344, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy140;
- goto yy1314;
- }
+ YYDEBUG(1344, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'Y') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 's') goto yy1345;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'X') goto yy140;
+ goto yy1313;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'y') goto yy1345;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy1345:
- YYDEBUG(1345, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy141;
- goto yy1315;
- }
+ YYDEBUG(1345, *YYCURSOR);
+ yyaccept = 28;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy1314;
+ goto yy136;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'd') goto yy1346;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych == '/') goto yy144;
+ goto yy1314;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '^') goto yy1314;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy1314;
+ if (yych <= 'z') goto yy150;
+ goto yy1314;
}
+ }
yy1346:
- YYDEBUG(1346, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'A') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- goto yy1316;
- }
+ YYDEBUG(1346, *YYCURSOR);
+ yyaccept = 5;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'R') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy276;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy1347;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy276;
+ if (yych <= 'Q') goto yy139;
+ goto yy1318;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy276;
+ } else {
+ if (yych == 'r') goto yy1349;
+ if (yych <= 'z') goto yy148;
+ goto yy276;
+ }
+ }
yy1347:
- YYDEBUG(1347, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy282;
- if(yych == 'y') goto yy295;
- goto yy152;
-yy1348:
- YYDEBUG(1348, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- goto yy1318;
- }
+ YYDEBUG(1347, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych <= '/') {
+ if (yych == ')') goto yy136;
+ if (yych <= '.') goto yy3;
+ goto yy144;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy139;
+ if (yych <= 'R') goto yy1317;
+ goto yy250;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy148;
} else {
- if(yych == 't') goto yy1349;
- if(yych <= 'z') goto yy148;
+ if (yych <= 's') goto yy253;
+ if (yych <= 'z') goto yy148;
goto yy3;
}
}
+ }
+ YYDEBUG(1348, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy140;
+ goto yy263;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'd') goto yy273;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy1349:
- YYDEBUG(1349, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'H') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy140;
- goto yy263;
- }
+ YYDEBUG(1349, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'h') goto yy273;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy140;
+ goto yy1319;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 's') goto yy1350;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy1350:
- YYDEBUG(1350, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Y') {
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych == 'R') goto yy1362;
- if(yych <= 'X') goto yy138;
- goto yy1363;
- }
+ YYDEBUG(1350, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'r') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- if(yych <= 'q') goto yy138;
- goto yy1362;
- } else {
- if(yych == 'y') goto yy1363;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy141;
+ goto yy1320;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'd') goto yy1351;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
+ }
+ }
yy1351:
- YYDEBUG(1351, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy138;
- goto yy1356;
- }
+ YYDEBUG(1351, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'c') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'd') goto yy1356;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ goto yy1321;
}
-yy1352:
- YYDEBUG(1352, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy138;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= 'm') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'n') goto yy1353;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= 'a') goto yy1352;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
+ }
+yy1352:
+ YYDEBUG(1352, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy282;
+ if (yych == 'y') goto yy295;
+ goto yy152;
yy1353:
- YYDEBUG(1353, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy276;
- goto yy136;
- } else {
- if(yych <= '@') goto yy276;
- if(yych <= 'C') goto yy139;
- }
+ YYDEBUG(1353, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'c') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy276;
- goto yy139;
- } else {
- if(yych <= 'd') goto yy1354;
- if(yych <= 'z') goto yy139;
- goto yy276;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
+ goto yy1323;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy1354;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy1354:
- YYDEBUG(1354, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- } else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy1355;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ YYDEBUG(1354, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'H') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy140;
+ goto yy263;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'h') goto yy273;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy1355:
- YYDEBUG(1355, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Y') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'X') goto yy141;
- goto yy503;
- }
+ YYDEBUG(1355, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Y') {
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'x') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'y') goto yy503;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych == 'R') goto yy1367;
+ if (yych <= 'X') goto yy138;
+ goto yy1368;
}
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'q') goto yy138;
+ goto yy1367;
+ } else {
+ if (yych == 'y') goto yy1368;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
yy1356:
- YYDEBUG(1356, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy139;
- }
+ YYDEBUG(1356, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'm') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'n') goto yy1357;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy138;
+ goto yy1361;
}
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'd') goto yy1361;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
yy1357:
- YYDEBUG(1357, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'I') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'H') goto yy140;
- }
+ YYDEBUG(1357, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'h') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'i') goto yy1358;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy138;
+ }
+ } else {
+ if (yych <= 'm') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'n') goto yy1358;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
+ }
yy1358:
- YYDEBUG(1358, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'G') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'F') goto yy141;
- }
+ YYDEBUG(1358, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy276;
+ goto yy136;
} else {
- if(yych <= 'f') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'g') goto yy1359;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '@') goto yy276;
+ if (yych <= 'C') goto yy139;
+ }
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy276;
+ goto yy139;
+ } else {
+ if (yych <= 'd') goto yy1359;
+ if (yych <= 'z') goto yy139;
+ goto yy276;
}
+ }
yy1359:
- YYDEBUG(1359, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'G') {
- if(yych == ')') goto yy136;
+ YYDEBUG(1359, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
goto yy3;
} else {
- if(yych <= 'H') goto yy1360;
- if(yych != 'h') goto yy3;
+ if (yych <= 'a') goto yy1360;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy1360:
- YYDEBUG(1360, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy1361;
- if(yych != 't') goto yy53;
+ YYDEBUG(1360, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Y') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'X') goto yy141;
+ goto yy501;
+ }
+ } else {
+ if (yych <= 'x') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
+ } else {
+ if (yych <= 'y') goto yy501;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
+ }
+ }
yy1361:
- YYDEBUG(1361, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy1309;
+ YYDEBUG(1361, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy139;
+ }
+ } else {
+ if (yych <= 'm') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 'n') goto yy1362;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
+ }
+ }
yy1362:
- YYDEBUG(1362, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy303;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- goto yy303;
- }
- }
+ YYDEBUG(1362, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'I') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych == 'C') goto yy1364;
- goto yy139;
- }
- } else {
- if(yych <= 'b') {
- if(yych <= '`') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'c') goto yy1364;
- if(yych <= 'z') goto yy139;
- goto yy303;
- }
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'H') goto yy140;
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'i') goto yy1363;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy1363:
- YYDEBUG(1363, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '-') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy305;
- if(yych <= 0x1F) goto yy303;
+ YYDEBUG(1363, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'G') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'F') goto yy141;
+ }
+ } else {
+ if (yych <= 'f') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
+ } else {
+ if (yych <= 'g') goto yy1364;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
+ }
+ }
+yy1364:
+ YYDEBUG(1364, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'G') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'H') goto yy1365;
+ if (yych != 'h') goto yy3;
+ }
+yy1365:
+ YYDEBUG(1365, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy1366;
+ if (yych != 't') goto yy53;
+yy1366:
+ YYDEBUG(1366, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy1314;
+yy1367:
+ YYDEBUG(1367, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
goto yy305;
} else {
- if(yych == ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= '@') {
- if(yych == '/') goto yy303;
- if(yych <= '9') goto yy305;
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
goto yy303;
} else {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy303;
- if(yych <= 'z') goto yy139;
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
goto yy303;
}
}
-yy1364:
- YYDEBUG(1364, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'H') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy140;
- goto yy561;
+ if (yych == 'C') goto yy1369;
+ goto yy139;
}
} else {
- if(yych <= 'g') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
+ if (yych <= 'b') {
+ if (yych <= '`') goto yy303;
+ goto yy139;
} else {
- if(yych <= 'h') goto yy561;
- if(yych <= 'z') goto yy140;
- goto yy3;
+ if (yych <= 'c') goto yy1369;
+ if (yych <= 'z') goto yy139;
+ goto yy303;
}
}
-yy1365:
- YYDEBUG(1365, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'Y') {
- if(yych <= '/') {
- if(yych == ')') goto yy136;
- if(yych <= '.') goto yy3;
- goto yy144;
- } else {
- if(yych <= 'Q') {
- if(yych <= '@') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'R') goto yy1362;
- if(yych <= 'X') goto yy138;
- goto yy1363;
- }
- }
+ }
+yy1368:
+ YYDEBUG(1368, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '-') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy305;
+ if (yych <= 0x1F) goto yy303;
+ goto yy305;
} else {
- if(yych <= 'q') {
- if(yych <= '^') {
- if(yych <= 'Z') goto yy138;
- goto yy3;
- } else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy3;
- goto yy143;
- }
- } else {
- if(yych <= 'x') {
- if(yych <= 'r') goto yy1377;
- goto yy143;
- } else {
- if(yych <= 'y') goto yy1378;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
- }
+ if (yych == ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
}
-yy1366:
- YYDEBUG(1366, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy138;
- goto yy1356;
- }
+ } else {
+ if (yych <= '@') {
+ if (yych == '/') goto yy303;
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'd') goto yy1371;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy303;
+ if (yych <= 'z') goto yy139;
+ goto yy303;
}
-yy1367:
- YYDEBUG(1367, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy138;
- goto yy1353;
- }
+ }
+yy1369:
+ YYDEBUG(1369, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'H') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'n') goto yy1368;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy140;
+ goto yy559;
}
-yy1368:
- YYDEBUG(1368, *YYCURSOR);
- yyaccept = 5;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy276;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy276;
- if(yych <= 'C') goto yy139;
- goto yy1354;
- }
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy276;
- } else {
- if(yych == 'd') goto yy1369;
- if(yych <= 'z') goto yy148;
- goto yy276;
- }
+ if (yych <= 'h') goto yy559;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
-yy1369:
- YYDEBUG(1369, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'A') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- goto yy1355;
- }
+ }
+yy1370:
+ YYDEBUG(1370, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'Y') {
+ if (yych <= '/') {
+ if (yych == ')') goto yy136;
+ if (yych <= '.') goto yy3;
+ goto yy144;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '^') goto yy3;
- goto yy144;
+ if (yych <= 'Q') {
+ if (yych <= '@') goto yy3;
+ goto yy138;
} else {
- if(yych <= '`') goto yy3;
- if(yych <= 'a') goto yy1370;
- if(yych <= 'z') goto yy149;
- goto yy3;
+ if (yych <= 'R') goto yy1367;
+ if (yych <= 'X') goto yy138;
+ goto yy1368;
}
}
-yy1370:
- YYDEBUG(1370, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'Y') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
+ } else {
+ if (yych <= 'q') {
+ if (yych <= '^') {
+ if (yych <= 'Z') goto yy138;
goto yy3;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'X') goto yy141;
- goto yy503;
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy3;
+ goto yy143;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 'x') {
+ if (yych <= 'r') goto yy1382;
+ goto yy143;
} else {
- if(yych == 'y') goto yy532;
- if(yych <= 'z') goto yy150;
+ if (yych <= 'y') goto yy1383;
+ if (yych <= 'z') goto yy143;
goto yy3;
}
}
+ }
yy1371:
- YYDEBUG(1371, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy139;
- goto yy1357;
- }
+ YYDEBUG(1371, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'n') goto yy1372;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy138;
+ goto yy1361;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'd') goto yy1376;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
+ }
yy1372:
- YYDEBUG(1372, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'I') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'H') goto yy140;
- goto yy1358;
- }
+ YYDEBUG(1372, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'i') goto yy1373;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy138;
+ goto yy1358;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'n') goto yy1373;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
+ }
yy1373:
- YYDEBUG(1373, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'G') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'F') goto yy141;
- goto yy1359;
- }
+ YYDEBUG(1373, *YYCURSOR);
+ yyaccept = 5;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy276;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'g') goto yy1374;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy276;
+ if (yych <= 'C') goto yy139;
+ goto yy1359;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy276;
+ } else {
+ if (yych == 'd') goto yy1374;
+ if (yych <= 'z') goto yy148;
+ goto yy276;
}
+ }
yy1374:
- YYDEBUG(1374, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'H') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'G') goto yy3;
- goto yy1360;
- }
+ YYDEBUG(1374, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'h') goto yy1375;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ goto yy1360;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '^') goto yy3;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy3;
+ if (yych <= 'a') goto yy1375;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy1375:
- YYDEBUG(1375, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy1361;
- if(yych != 't') goto yy152;
- YYDEBUG(1376, *YYCURSOR);
- yyaccept = 28;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '^') {
- if(yych == '/') goto yy144;
- goto yy1309;
+ YYDEBUG(1375, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'Y') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy1309;
- if(yych <= 'z') goto yy151;
- goto yy1309;
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'X') goto yy141;
+ goto yy501;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'y') goto yy530;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
+ }
+ }
+yy1376:
+ YYDEBUG(1376, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy139;
+ goto yy1362;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'n') goto yy1377;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy1377:
- YYDEBUG(1377, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
- }
+ YYDEBUG(1377, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'I') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '^') {
- if(yych <= 'B') {
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'C') goto yy1364;
- if(yych <= 'Z') goto yy139;
- goto yy303;
- }
- } else {
- if(yych <= 'b') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy148;
- } else {
- if(yych <= 'c') goto yy1379;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'H') goto yy140;
+ goto yy1363;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'i') goto yy1378;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy1378:
- YYDEBUG(1378, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy305;
- if(yych <= 0x1F) goto yy303;
- goto yy305;
- } else {
- if(yych <= ')') {
- if(yych <= '(') goto yy303;
- goto yy136;
- } else {
- if(yych <= ',') goto yy303;
- if(yych <= '-') goto yy306;
- goto yy305;
- }
- }
+ YYDEBUG(1378, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'G') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'Z') {
- if(yych <= '/') goto yy144;
- if(yych <= '9') goto yy305;
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= '_') {
- if(yych <= '^') goto yy303;
- goto yy144;
- } else {
- if(yych <= '`') goto yy303;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'F') goto yy141;
+ goto yy1364;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'g') goto yy1379;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy1379:
- YYDEBUG(1379, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'H') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy140;
- goto yy561;
- }
+ YYDEBUG(1379, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'H') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'h') goto yy572;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'G') goto yy3;
+ goto yy1365;
}
-yy1380:
- YYDEBUG(1380, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'W') {
- if(yych <= 'N') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'O') goto yy1388;
- if(yych <= 'U') goto yy138;
- if(yych <= 'V') goto yy1389;
- goto yy1386;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= 'o') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- if(yych <= 'n') goto yy138;
- goto yy1388;
- } else {
- if(yych <= 'v') {
- if(yych <= 'u') goto yy138;
- goto yy1389;
- } else {
- if(yych <= 'w') goto yy1386;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
- }
+ if (yych == 'h') goto yy1380;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
-yy1381:
- YYDEBUG(1381, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'X') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ }
+yy1380:
+ YYDEBUG(1380, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy1366;
+ if (yych != 't') goto yy152;
+ YYDEBUG(1381, *YYCURSOR);
+ yyaccept = 28;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '^') {
+ if (yych == '/') goto yy144;
+ goto yy1314;
+ } else {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy1314;
+ if (yych <= 'z') goto yy151;
+ goto yy1314;
+ }
+yy1382:
+ YYDEBUG(1382, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'W') goto yy138;
- goto yy1385;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= 'w') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych <= 'x') goto yy1385;
- if(yych <= 'z') goto yy138;
- goto yy3;
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
-yy1382:
- YYDEBUG(1382, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'B') {
+ if (yych <= '@') goto yy303;
+ goto yy139;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy138;
+ if (yych <= 'C') goto yy1369;
+ if (yych <= 'Z') goto yy139;
+ goto yy303;
}
} else {
- if(yych <= 'm') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
+ if (yych <= 'b') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy148;
} else {
- if(yych <= 'n') goto yy1383;
- if(yych <= 'z') goto yy138;
- goto yy3;
+ if (yych <= 'c') goto yy1384;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
+ }
yy1383:
- YYDEBUG(1383, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
+ YYDEBUG(1383, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy305;
+ if (yych <= 0x1F) goto yy303;
+ goto yy305;
+ } else {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy303;
goto yy136;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
+ if (yych <= ',') goto yy303;
+ if (yych <= '-') goto yy306;
+ goto yy305;
}
- } else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '/') goto yy144;
+ if (yych <= '9') goto yy305;
+ if (yych <= '@') goto yy303;
+ goto yy139;
+ } else {
+ if (yych <= '_') {
+ if (yych <= '^') goto yy303;
+ goto yy144;
} else {
- if(yych <= 't') goto yy1384;
- if(yych <= 'z') goto yy139;
- goto yy3;
+ if (yych <= '`') goto yy303;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
+ }
yy1384:
- YYDEBUG(1384, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'H') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy140;
- goto yy263;
- }
+ YYDEBUG(1384, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'H') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'g') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'h') goto yy263;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy140;
+ goto yy559;
}
-yy1385:
- YYDEBUG(1385, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- goto yy250;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
+ if (yych == 'h') goto yy570;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
+yy1385:
+ YYDEBUG(1385, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'W') {
+ if (yych <= 'N') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'O') goto yy1393;
+ if (yych <= 'U') goto yy138;
+ if (yych <= 'V') goto yy1394;
+ goto yy1391;
+ }
+ } else {
+ if (yych <= 'o') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'n') goto yy138;
+ goto yy1393;
+ } else {
+ if (yych <= 'v') {
+ if (yych <= 'u') goto yy138;
+ goto yy1394;
} else {
- if(yych <= 't') goto yy250;
- if(yych <= 'z') goto yy139;
+ if (yych <= 'w') goto yy1391;
+ if (yych <= 'z') goto yy138;
goto yy3;
}
}
+ }
yy1386:
- YYDEBUG(1386, *YYCURSOR);
- ++YYCURSOR;
- if((yych = *YYCURSOR) <= '@') {
- if(yych == ')') goto yy136;
+ YYDEBUG(1386, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'X') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy1387;
- if(yych <= 'z') goto yy139;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'W') goto yy138;
+ goto yy1390;
}
+ } else {
+ if (yych <= 'w') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'x') goto yy1390;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
yy1387:
- YYDEBUG(1387, *YYCURSOR);
- {
+ YYDEBUG(1387, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy138;
+ }
+ } else {
+ if (yych <= 'm') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'n') goto yy1388;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
+yy1388:
+ YYDEBUG(1388, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
+ }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 't') goto yy1389;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
+ }
+ }
+yy1389:
+ YYDEBUG(1389, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'H') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy140;
+ goto yy263;
+ }
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'h') goto yy263;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
+ }
+ }
+yy1390:
+ YYDEBUG(1390, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
+ goto yy250;
+ }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 't') goto yy250;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
+ }
+ }
+yy1391:
+ YYDEBUG(1391, *YYCURSOR);
+ ++YYCURSOR;
+ if ((yych = *YYCURSOR) <= '@') {
+ if (yych == ')') goto yy136;
+ } else {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy1392;
+ if (yych <= 'z') goto yy139;
+ }
+yy1392:
+ YYDEBUG(1392, *YYCURSOR);
+ {
DEBUG_OUTPUT("now");
TIMELIB_INIT;
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
-yy1388:
- YYDEBUG(1388, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy139;
- goto yy1394;
- }
+yy1393:
+ YYDEBUG(1393, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'm') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'n') goto yy1394;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy139;
+ goto yy1399;
}
-yy1389:
- YYDEBUG(1389, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy303;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- goto yy303;
- }
- }
+ } else {
+ if (yych <= 'm') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych != 'E') goto yy139;
- }
- } else {
- if(yych <= 'd') {
- if(yych <= '`') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'e') goto yy1390;
- if(yych <= 'z') goto yy139;
- goto yy303;
- }
- }
+ if (yych <= 'n') goto yy1399;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
-yy1390:
- YYDEBUG(1390, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'M') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ }
+yy1394:
+ YYDEBUG(1394, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'L') goto yy140;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= 'l') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
+ goto yy303;
} else {
- if(yych <= 'm') goto yy1391;
- if(yych <= 'z') goto yy140;
- goto yy3;
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
+ goto yy303;
}
}
-yy1391:
- YYDEBUG(1391, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'B') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'A') goto yy141;
+ if (yych != 'E') goto yy139;
}
} else {
- if(yych <= 'a') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
+ if (yych <= 'd') {
+ if (yych <= '`') goto yy303;
+ goto yy139;
} else {
- if(yych <= 'b') goto yy1392;
- if(yych <= 'z') goto yy141;
- goto yy3;
+ if (yych <= 'e') goto yy1395;
+ if (yych <= 'z') goto yy139;
+ goto yy303;
}
}
-yy1392:
- YYDEBUG(1392, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych == ')') goto yy136;
+ }
+yy1395:
+ YYDEBUG(1395, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'M') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'L') goto yy140;
+ }
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'm') goto yy1396;
+ if (yych <= 'z') goto yy140;
goto yy3;
+ }
+ }
+yy1396:
+ YYDEBUG(1396, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'B') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'E') goto yy1393;
- if(yych != 'e') goto yy3;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'A') goto yy141;
}
-yy1393:
- YYDEBUG(1393, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy315;
- if(yych == 'r') goto yy315;
- goto yy53;
-yy1394:
- YYDEBUG(1394, *YYCURSOR);
- ++YYCURSOR;
- if((yych = *YYCURSOR) <= '@') {
- if(yych == ')') goto yy136;
+ } else {
+ if (yych <= 'a') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
} else {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy1395;
- if(yych <= 'z') goto yy140;
+ if (yych <= 'b') goto yy1397;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
-yy1395:
- YYDEBUG(1395, *YYCURSOR);
- {
+ }
+yy1397:
+ YYDEBUG(1397, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'E') goto yy1398;
+ if (yych != 'e') goto yy3;
+ }
+yy1398:
+ YYDEBUG(1398, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy315;
+ if (yych == 'r') goto yy315;
+ goto yy53;
+yy1399:
+ YYDEBUG(1399, *YYCURSOR);
+ ++YYCURSOR;
+ if ((yych = *YYCURSOR) <= '@') {
+ if (yych == ')') goto yy136;
+ } else {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy1400;
+ if (yych <= 'z') goto yy140;
+ }
+yy1400:
+ YYDEBUG(1400, *YYCURSOR);
+ {
DEBUG_OUTPUT("noon");
TIMELIB_INIT;
TIMELIB_UNHAVE_TIME();
@@ -21672,486 +21684,486 @@ yy1395:
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
-yy1396:
- YYDEBUG(1396, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'W') {
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych == '/') goto yy144;
- goto yy3;
- }
- } else {
- if(yych <= 'O') {
- if(yych <= 'N') goto yy138;
- goto yy1388;
- } else {
- if(yych <= 'U') goto yy138;
- if(yych <= 'V') goto yy1389;
- goto yy1386;
- }
- }
- } else {
- if(yych <= 'n') {
- if(yych <= '^') {
- if(yych <= 'Z') goto yy138;
- goto yy3;
- } else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy3;
- goto yy143;
- }
+yy1401:
+ YYDEBUG(1401, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'W') {
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'v') {
- if(yych <= 'o') goto yy1403;
- if(yych <= 'u') goto yy143;
- goto yy1404;
- } else {
- if(yych <= 'w') goto yy1402;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
- }
- }
-yy1397:
- YYDEBUG(1397, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'X') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
+ if (yych == '/') goto yy144;
goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'W') goto yy138;
- goto yy1385;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 'O') {
+ if (yych <= 'N') goto yy138;
+ goto yy1393;
} else {
- if(yych == 'x') goto yy1401;
- if(yych <= 'z') goto yy143;
- goto yy3;
+ if (yych <= 'U') goto yy138;
+ if (yych <= 'V') goto yy1394;
+ goto yy1391;
}
}
-yy1398:
- YYDEBUG(1398, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
+ } else {
+ if (yych <= 'n') {
+ if (yych <= '^') {
+ if (yych <= 'Z') goto yy138;
goto yy3;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy138;
- goto yy1383;
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy3;
+ goto yy143;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 'v') {
+ if (yych <= 'o') goto yy1408;
+ if (yych <= 'u') goto yy143;
+ goto yy1409;
} else {
- if(yych == 'n') goto yy1399;
- if(yych <= 'z') goto yy143;
+ if (yych <= 'w') goto yy1407;
+ if (yych <= 'z') goto yy143;
goto yy3;
}
}
-yy1399:
- YYDEBUG(1399, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- goto yy1384;
- }
+ }
+yy1402:
+ YYDEBUG(1402, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'X') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy1400;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'W') goto yy138;
+ goto yy1390;
}
-yy1400:
- YYDEBUG(1400, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'H') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy140;
- goto yy263;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'h') goto yy273;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych == 'x') goto yy1406;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
-yy1401:
- YYDEBUG(1401, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- goto yy250;
- }
+ }
+yy1403:
+ YYDEBUG(1403, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy253;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy138;
+ goto yy1388;
}
-yy1402:
- YYDEBUG(1402, *YYCURSOR);
- yyaccept = 29;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy1387;
- goto yy136;
- } else {
- if(yych == '/') goto yy144;
- goto yy1387;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '^') goto yy1387;
- goto yy144;
- } else {
- if(yych <= '`') goto yy1387;
- if(yych <= 'z') goto yy148;
- goto yy1387;
- }
+ if (yych == 'n') goto yy1404;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
-yy1403:
- YYDEBUG(1403, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy139;
- goto yy1394;
- }
+ }
+yy1404:
+ YYDEBUG(1404, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'n') goto yy1409;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
+ goto yy1389;
}
-yy1404:
- YYDEBUG(1404, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '^') {
- if(yych <= 'D') {
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'E') goto yy1390;
- if(yych <= 'Z') goto yy139;
- goto yy303;
- }
- } else {
- if(yych <= 'd') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy148;
- } else {
- if(yych <= 'e') goto yy1405;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
- }
+ if (yych == 't') goto yy1405;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy1405:
- YYDEBUG(1405, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'M') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'L') goto yy140;
- goto yy1391;
- }
+ YYDEBUG(1405, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'H') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'm') goto yy1406;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy140;
+ goto yy263;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'h') goto yy273;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy1406:
- YYDEBUG(1406, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'B') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'A') goto yy141;
- goto yy1392;
- }
+ YYDEBUG(1406, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'b') goto yy1407;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
+ goto yy250;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy253;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy1407:
- YYDEBUG(1407, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'D') goto yy3;
- goto yy1393;
- }
+ YYDEBUG(1407, *YYCURSOR);
+ yyaccept = 29;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy1392;
+ goto yy136;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'e') goto yy1408;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych == '/') goto yy144;
+ goto yy1392;
}
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '^') goto yy1392;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy1392;
+ if (yych <= 'z') goto yy148;
+ goto yy1392;
+ }
+ }
yy1408:
- YYDEBUG(1408, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy315;
- if(yych == 'r') goto yy485;
- goto yy152;
+ YYDEBUG(1408, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy139;
+ goto yy1399;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'n') goto yy1414;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
+ }
+ }
yy1409:
- YYDEBUG(1409, *YYCURSOR);
- yyaccept = 30;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy1395;
- goto yy136;
+ YYDEBUG(1409, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych == '/') goto yy144;
- goto yy1395;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '^') goto yy1395;
- goto yy144;
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych <= '`') goto yy1395;
- if(yych <= 'z') goto yy149;
- goto yy1395;
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
-yy1410:
- YYDEBUG(1410, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'S') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'D') {
+ if (yych <= '@') goto yy303;
+ goto yy139;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy138;
+ if (yych <= 'E') goto yy1395;
+ if (yych <= 'Z') goto yy139;
+ goto yy303;
}
} else {
- if(yych <= 'r') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
+ if (yych <= 'd') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy148;
} else {
- if(yych <= 's') goto yy1411;
- if(yych <= 'z') goto yy138;
- goto yy3;
+ if (yych <= 'e') goto yy1410;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
+ }
+yy1410:
+ YYDEBUG(1410, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'M') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'L') goto yy140;
+ goto yy1396;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'm') goto yy1411;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy1411:
- YYDEBUG(1411, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- }
+ YYDEBUG(1411, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'B') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 't') goto yy1412;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'A') goto yy141;
+ goto yy1397;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'b') goto yy1412;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
+ }
+ }
yy1412:
- YYDEBUG(1412, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy140;
- }
+ YYDEBUG(1412, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'e') goto yy1413;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'D') goto yy3;
+ goto yy1398;
}
-yy1413:
- YYDEBUG(1413, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy141;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= 'q') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'r') goto yy1414;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych == 'e') goto yy1413;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
+ }
+yy1413:
+ YYDEBUG(1413, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy315;
+ if (yych == 'r') goto yy483;
+ goto yy152;
yy1414:
- YYDEBUG(1414, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'C') {
- if(yych == ')') goto yy136;
- goto yy3;
+ YYDEBUG(1414, *YYCURSOR);
+ yyaccept = 30;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy1400;
+ goto yy136;
+ } else {
+ if (yych == '/') goto yy144;
+ goto yy1400;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '^') goto yy1400;
+ goto yy144;
} else {
- if(yych <= 'D') goto yy1415;
- if(yych != 'd') goto yy3;
+ if (yych <= '`') goto yy1400;
+ if (yych <= 'z') goto yy149;
+ goto yy1400;
}
+ }
yy1415:
- YYDEBUG(1415, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy1416;
- if(yych != 'a') goto yy53;
+ YYDEBUG(1415, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'S') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy138;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 's') goto yy1416;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
yy1416:
- YYDEBUG(1416, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy1417;
- if(yych != 'y') goto yy53;
+ YYDEBUG(1416, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
+ }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 't') goto yy1417;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
+ }
+ }
yy1417:
- YYDEBUG(1417, *YYCURSOR);
- ++YYCURSOR;
+ YYDEBUG(1417, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy140;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'e') goto yy1418;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
+ }
+ }
yy1418:
- YYDEBUG(1418, *YYCURSOR);
- {
+ YYDEBUG(1418, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy141;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
+ } else {
+ if (yych <= 'r') goto yy1419;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
+ }
+ }
+yy1419:
+ YYDEBUG(1419, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'C') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'D') goto yy1420;
+ if (yych != 'd') goto yy3;
+ }
+yy1420:
+ YYDEBUG(1420, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy1421;
+ if (yych != 'a') goto yy53;
+yy1421:
+ YYDEBUG(1421, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy1422;
+ if (yych != 'y') goto yy53;
+yy1422:
+ YYDEBUG(1422, *YYCURSOR);
+ ++YYCURSOR;
+yy1423:
+ YYDEBUG(1423, *YYCURSOR);
+ {
DEBUG_OUTPUT("yesterday");
TIMELIB_INIT;
TIMELIB_HAVE_RELATIVE();
@@ -22161,151 +22173,150 @@ yy1418:
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
-yy1419:
- YYDEBUG(1419, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy138;
- goto yy1411;
- }
+yy1424:
+ YYDEBUG(1424, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 's') goto yy1420;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy138;
+ goto yy1416;
}
-yy1420:
- YYDEBUG(1420, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- goto yy1412;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy1421;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych == 's') goto yy1425;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
-yy1421:
- YYDEBUG(1421, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy140;
- goto yy1413;
- }
+ }
+yy1425:
+ YYDEBUG(1425, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'e') goto yy1422;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
+ goto yy1417;
}
-yy1422:
- YYDEBUG(1422, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'R') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy141;
- goto yy1414;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'r') goto yy1423;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych == 't') goto yy1426;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
-yy1423:
- YYDEBUG(1423, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'C') goto yy3;
- goto yy1415;
- }
+ }
+yy1426:
+ YYDEBUG(1426, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'd') goto yy1424;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
- }
-yy1424:
- YYDEBUG(1424, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy1416;
- if(yych != 'a') goto yy152;
- YYDEBUG(1425, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy1417;
- if(yych != 'y') goto yy152;
- YYDEBUG(1426, *YYCURSOR);
- yyaccept = 31;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '^') {
- if(yych == '/') goto yy144;
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy140;
goto yy1418;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy1418;
- if(yych <= 'z') goto yy151;
- goto yy1418;
+ if (yych == 'e') goto yy1427;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
}
+yy1427:
+ YYDEBUG(1427, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'R') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy141;
+ goto yy1419;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'r') goto yy1428;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
+ }
+ }
+yy1428:
+ YYDEBUG(1428, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= 'C') goto yy3;
+ goto yy1420;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'd') goto yy1429;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
+ }
+ }
+yy1429:
+ YYDEBUG(1429, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy1421;
+ if (yych != 'a') goto yy152;
+ YYDEBUG(1430, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy1422;
+ if (yych != 'y') goto yy152;
+ YYDEBUG(1431, *YYCURSOR);
+ yyaccept = 31;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '^') {
+ if (yych == '/') goto yy144;
+ goto yy1423;
+ } else {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy1423;
+ if (yych <= 'z') goto yy151;
+ goto yy1423;
+ }
}
}
@@ -22384,7 +22395,7 @@ timelib_time* timelib_strtotime(char *s, int len, struct timelib_error_container
void timelib_fill_holes(timelib_time *parsed, timelib_time *now, int options)
{
- if (!(options && TIMELIB_OVERRIDE_TIME) && parsed->have_date && !parsed->have_time) {
+ if (!(options & TIMELIB_OVERRIDE_TIME) && parsed->have_date && !parsed->have_time) {
parsed->h = 0;
parsed->i = 0;
parsed->s = 0;
@@ -22404,7 +22415,7 @@ void timelib_fill_holes(timelib_time *parsed, timelib_time *now, int options)
parsed->tz_abbr = now->tz_abbr ? strdup(now->tz_abbr) : NULL;
}
if (!parsed->tz_info) {
- parsed->tz_info = now->tz_info ? timelib_tzinfo_clone(now->tz_info) : NULL;
+ parsed->tz_info = now->tz_info ? (!(options & TIMELIB_NO_CLONE) ? timelib_tzinfo_clone(now->tz_info) : now->tz_info) : NULL;
}
if (parsed->zone_type == 0 && now->zone_type != 0) {
parsed->zone_type = now->zone_type;
diff --git a/ext/date/lib/parse_date.c.orig b/ext/date/lib/parse_date.c.orig
index 4948a2e82..311bf91a6 100644
--- a/ext/date/lib/parse_date.c.orig
+++ b/ext/date/lib/parse_date.c.orig
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.12.1 on Mon Feb 25 19:27:05 2008 */
+/* Generated by re2c 0.13.5 on Thu Dec 18 15:52:22 2008 */
#line 1 "ext/date/lib/parse_date.re"
/*
+----------------------------------------------------------------------+
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: parse_date.c,v 1.29.2.30.2.16 2008/02/25 18:28:03 derick Exp $ */
+/* $Id: parse_date.c,v 1.29.2.30.2.18 2008/12/18 14:56:46 derick Exp $ */
#include "timelib.h"
@@ -734,7 +734,7 @@ static long timelib_get_zone(char **ptr, int *dst, timelib_time *t, int *tz_not_
}
#endif
/* If we have a TimeZone identifier to start with, use it */
- if (strstr(tz_abbr, "/")) {
+ if (strstr(tz_abbr, "/") || strcmp(tz_abbr, "UTC") == 0) {
if ((res = timelib_parse_tzfile(tz_abbr, tzdb)) != NULL) {
t->tz_info = res;
t->zone_type = TIMELIB_ZONETYPE_ID;
@@ -775,7 +775,11 @@ std:
#line 889 "ext/date/lib/parse_date.re"
+
+#line 780 "ext/date/lib/parse_date.c"
{
+ YYCTYPE yych;
+ unsigned int yyaccept = 0;
static const unsigned char yybm[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 104, 0, 0, 0, 0, 0, 0,
@@ -811,114 +815,109 @@ std:
0, 0, 0, 0, 0, 0, 0, 0,
};
-#line 815 "ext/date/lib/parse_date.c"
- {
- YYCTYPE yych;
- unsigned int yyaccept = 0;
-
- YYDEBUG(0, *YYCURSOR);
- if((YYLIMIT - YYCURSOR) < 29) YYFILL(29);
- yych = *YYCURSOR;
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x00:
- case 0x0A: goto yy48;
- case 0x09:
- case ' ': goto yy45;
- case '(': goto yy42;
- case '+':
- case '-': goto yy18;
- case ',':
- case '.': goto yy47;
- case '0': goto yy13;
- case '1': goto yy14;
- case '2': goto yy15;
- case '3': goto yy16;
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy17;
- case '@': goto yy11;
- case 'A': goto yy26;
- case 'B':
- case 'C':
- case 'G':
- case 'H':
- case 'K':
- case 'Q':
- case 'R':
- case 'U':
- case 'Z': goto yy43;
- case 'D': goto yy32;
- case 'E': goto yy36;
- case 'F': goto yy24;
- case 'I': goto yy19;
- case 'J': goto yy22;
- case 'L': goto yy38;
- case 'M': goto yy7;
- case 'N': goto yy5;
- case 'O': goto yy30;
- case 'P': goto yy40;
- case 'S': goto yy28;
- case 'T': goto yy9;
- case 'V': goto yy20;
- case 'W': goto yy34;
- case 'X': goto yy21;
- case 'Y': goto yy2;
- case 'a': goto yy27;
- case 'b':
- case 'c':
- case 'g':
- case 'h':
- case 'i':
- case 'k':
- case 'q':
- case 'r':
- case 'u':
- case 'v':
- case 'x':
- case 'z': goto yy44;
- case 'd': goto yy33;
- case 'e': goto yy37;
- case 'f': goto yy25;
- case 'j': goto yy23;
- case 'l': goto yy39;
- case 'm': goto yy8;
- case 'n': goto yy6;
- case 'o': goto yy31;
- case 'p': goto yy41;
- case 's': goto yy29;
- case 't': goto yy10;
- case 'w': goto yy35;
- case 'y': goto yy4;
- default: goto yy50;
- }
+ YYDEBUG(0, *YYCURSOR);
+ if ((YYLIMIT - YYCURSOR) < 29) YYFILL(29);
+ yych = *YYCURSOR;
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case 0x00:
+ case '\n': goto yy48;
+ case '\t':
+ case ' ': goto yy45;
+ case '(': goto yy42;
+ case '+':
+ case '-': goto yy18;
+ case ',':
+ case '.': goto yy47;
+ case '0': goto yy13;
+ case '1': goto yy14;
+ case '2': goto yy15;
+ case '3': goto yy16;
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy17;
+ case '@': goto yy11;
+ case 'A': goto yy26;
+ case 'B':
+ case 'C':
+ case 'G':
+ case 'H':
+ case 'K':
+ case 'Q':
+ case 'R':
+ case 'U':
+ case 'Z': goto yy43;
+ case 'D': goto yy32;
+ case 'E': goto yy36;
+ case 'F': goto yy24;
+ case 'I': goto yy19;
+ case 'J': goto yy22;
+ case 'L': goto yy38;
+ case 'M': goto yy7;
+ case 'N': goto yy5;
+ case 'O': goto yy30;
+ case 'P': goto yy40;
+ case 'S': goto yy28;
+ case 'T': goto yy9;
+ case 'V': goto yy20;
+ case 'W': goto yy34;
+ case 'X': goto yy21;
+ case 'Y': goto yy2;
+ case 'a': goto yy27;
+ case 'b':
+ case 'c':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'k':
+ case 'q':
+ case 'r':
+ case 'u':
+ case 'v':
+ case 'x':
+ case 'z': goto yy44;
+ case 'd': goto yy33;
+ case 'e': goto yy37;
+ case 'f': goto yy25;
+ case 'j': goto yy23;
+ case 'l': goto yy39;
+ case 'm': goto yy8;
+ case 'n': goto yy6;
+ case 'o': goto yy31;
+ case 'p': goto yy41;
+ case 's': goto yy29;
+ case 't': goto yy10;
+ case 'w': goto yy35;
+ case 'y': goto yy4;
+ default: goto yy50;
+ }
yy2:
- YYDEBUG(2, *YYCURSOR);
- ++YYCURSOR;
- if((yych = *YYCURSOR) <= 'E') {
- if(yych <= ')') {
- if(yych >= ')') goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy137;
- goto yy1410;
- }
+ YYDEBUG(2, *YYCURSOR);
+ ++YYCURSOR;
+ if ((yych = *YYCURSOR) <= 'E') {
+ if (yych <= ')') {
+ if (yych >= ')') goto yy136;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy137;
- if(yych >= 'a') goto yy142;
- } else {
- if(yych <= 'e') goto yy1419;
- if(yych <= 'z') goto yy142;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy137;
+ goto yy1415;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy137;
+ if (yych >= 'a') goto yy142;
+ } else {
+ if (yych <= 'e') goto yy1424;
+ if (yych <= 'z') goto yy142;
}
+ }
yy3:
- YYDEBUG(3, *YYCURSOR);
-#line 1443 "ext/date/lib/parse_date.re"
- {
+ YYDEBUG(3, *YYCURSOR);
+#line 1446 "ext/date/lib/parse_date.re"
+ {
int tz_not_found;
DEBUG_OUTPUT("tzcorrection | tz");
TIMELIB_INIT;
@@ -930,1727 +929,1727 @@ yy3:
TIMELIB_DEINIT;
return TIMELIB_TIMEZONE;
}
-#line 934 "ext/date/lib/parse_date.c"
+#line 933 "ext/date/lib/parse_date.c"
yy4:
- YYDEBUG(4, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy137;
- goto yy1410;
- }
+ YYDEBUG(4, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy137;
+ goto yy1415;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy137;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
+ if (yych <= 'e') goto yy1415;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
+ }
+ }
+yy5:
+ YYDEBUG(5, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych <= 'D') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy137;
+ } else {
+ if (yych <= 'H') {
+ if (yych <= 'E') goto yy1386;
goto yy137;
} else {
- if(yych <= 'e') goto yy1410;
- if(yych <= 'z') goto yy137;
- goto yy3;
+ if (yych <= 'I') goto yy1387;
+ if (yych <= 'N') goto yy137;
+ goto yy1385;
}
}
-yy5:
- YYDEBUG(5, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych <= 'D') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- goto yy137;
+ } else {
+ if (yych <= 'h') {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy137;
+ goto yy3;
} else {
- if(yych <= 'H') {
- if(yych <= 'E') goto yy1381;
- goto yy137;
- } else {
- if(yych <= 'I') goto yy1382;
- if(yych <= 'N') goto yy137;
- goto yy1380;
- }
+ if (yych == 'e') goto yy1402;
+ goto yy142;
}
} else {
- if(yych <= 'h') {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy137;
- goto yy3;
- } else {
- if(yych == 'e') goto yy1397;
- goto yy142;
- }
+ if (yych <= 'n') {
+ if (yych <= 'i') goto yy1403;
+ goto yy142;
} else {
- if(yych <= 'n') {
- if(yych <= 'i') goto yy1398;
- goto yy142;
- } else {
- if(yych <= 'o') goto yy1396;
- if(yych <= 'z') goto yy142;
- goto yy3;
- }
+ if (yych <= 'o') goto yy1401;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
}
}
+ }
yy6:
- YYDEBUG(6, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych <= 'D') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
+ YYDEBUG(6, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych <= 'D') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy137;
+ } else {
+ if (yych <= 'H') {
+ if (yych <= 'E') goto yy1386;
goto yy137;
} else {
- if(yych <= 'H') {
- if(yych <= 'E') goto yy1381;
- goto yy137;
- } else {
- if(yych <= 'I') goto yy1382;
- if(yych <= 'N') goto yy137;
- goto yy1380;
- }
+ if (yych <= 'I') goto yy1387;
+ if (yych <= 'N') goto yy137;
+ goto yy1385;
+ }
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy137;
+ goto yy3;
+ } else {
+ if (yych == 'e') goto yy1386;
+ goto yy137;
}
} else {
- if(yych <= 'h') {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy137;
- goto yy3;
- } else {
- if(yych == 'e') goto yy1381;
- goto yy137;
- }
+ if (yych <= 'n') {
+ if (yych <= 'i') goto yy1387;
+ goto yy137;
} else {
- if(yych <= 'n') {
- if(yych <= 'i') goto yy1382;
- goto yy137;
- } else {
- if(yych <= 'o') goto yy1380;
- if(yych <= 'z') goto yy137;
- goto yy3;
- }
+ if (yych <= 'o') goto yy1385;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
}
}
+ }
yy7:
- YYDEBUG(7, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- goto yy1350;
- } else {
- if(yych == 'I') goto yy1351;
- if(yych <= 'N') goto yy137;
- goto yy1352;
- }
- } else {
- if(yych <= 'h') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- if(yych <= 'a') goto yy1365;
+ YYDEBUG(7, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy1355;
+ } else {
+ if (yych == 'I') goto yy1356;
+ if (yych <= 'N') goto yy137;
+ goto yy1357;
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'a') goto yy1370;
+ goto yy142;
+ } else {
+ if (yych <= 'n') {
+ if (yych <= 'i') goto yy1371;
goto yy142;
} else {
- if(yych <= 'n') {
- if(yych <= 'i') goto yy1366;
- goto yy142;
- } else {
- if(yych <= 'o') goto yy1367;
- if(yych <= 'z') goto yy142;
- goto yy3;
- }
+ if (yych <= 'o') goto yy1372;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
}
}
+ }
yy8:
- YYDEBUG(8, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- goto yy1350;
- } else {
- if(yych == 'I') goto yy1351;
- if(yych <= 'N') goto yy137;
- goto yy1352;
- }
- } else {
- if(yych <= 'h') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- if(yych <= 'a') goto yy1350;
+ YYDEBUG(8, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy1355;
+ } else {
+ if (yych == 'I') goto yy1356;
+ if (yych <= 'N') goto yy137;
+ goto yy1357;
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'a') goto yy1355;
+ goto yy137;
+ } else {
+ if (yych <= 'n') {
+ if (yych <= 'i') goto yy1356;
goto yy137;
} else {
- if(yych <= 'n') {
- if(yych <= 'i') goto yy1351;
- goto yy137;
- } else {
- if(yych <= 'o') goto yy1352;
- if(yych <= 'z') goto yy137;
- goto yy3;
- }
+ if (yych <= 'o') goto yy1357;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
}
}
+ }
yy9:
- YYDEBUG(9, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case ')': goto yy136;
- case '0':
- case '1': goto yy1282;
- case '2': goto yy1283;
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy1284;
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'F':
- case 'G':
- case 'I':
- case 'J':
- case 'K':
- case 'L':
- case 'M':
- case 'N':
- case 'P':
- case 'Q':
- case 'R':
- case 'S':
- case 'T':
- case 'V':
- case 'X':
- case 'Y':
- case 'Z': goto yy137;
- case 'E': goto yy1277;
- case 'H': goto yy1278;
- case 'O': goto yy1279;
- case 'U': goto yy1280;
- case 'W': goto yy1281;
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'f':
- case 'g':
- case 'i':
- case 'j':
- case 'k':
- case 'l':
- case 'm':
- case 'n':
- case 'p':
- case 'q':
- case 'r':
- case 's':
- case 't':
- case 'v':
- case 'x':
- case 'y':
- case 'z': goto yy142;
- case 'e': goto yy1319;
- case 'h': goto yy1320;
- case 'o': goto yy1321;
- case 'u': goto yy1322;
- case 'w': goto yy1323;
- default: goto yy3;
- }
+ YYDEBUG(9, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case ')': goto yy136;
+ case '0':
+ case '1': goto yy1287;
+ case '2': goto yy1288;
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy1289;
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'F':
+ case 'G':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'V':
+ case 'X':
+ case 'Y':
+ case 'Z': goto yy137;
+ case 'E': goto yy1282;
+ case 'H': goto yy1283;
+ case 'O': goto yy1284;
+ case 'U': goto yy1285;
+ case 'W': goto yy1286;
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'f':
+ case 'g':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'v':
+ case 'x':
+ case 'y':
+ case 'z': goto yy142;
+ case 'e': goto yy1324;
+ case 'h': goto yy1325;
+ case 'o': goto yy1326;
+ case 'u': goto yy1327;
+ case 'w': goto yy1328;
+ default: goto yy3;
+ }
yy10:
- YYDEBUG(10, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case ')': goto yy136;
- case '0':
- case '1': goto yy1282;
- case '2': goto yy1283;
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy1284;
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'F':
- case 'G':
- case 'I':
- case 'J':
- case 'K':
- case 'L':
- case 'M':
- case 'N':
- case 'P':
- case 'Q':
- case 'R':
- case 'S':
- case 'T':
- case 'V':
- case 'X':
- case 'Y':
- case 'Z':
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'f':
- case 'g':
- case 'i':
- case 'j':
- case 'k':
- case 'l':
- case 'm':
- case 'n':
- case 'p':
- case 'q':
- case 'r':
- case 's':
- case 't':
- case 'v':
- case 'x':
- case 'y':
- case 'z': goto yy137;
- case 'E':
- case 'e': goto yy1277;
- case 'H':
- case 'h': goto yy1278;
- case 'O':
- case 'o': goto yy1279;
- case 'U':
- case 'u': goto yy1280;
- case 'W':
- case 'w': goto yy1281;
- default: goto yy3;
- }
+ YYDEBUG(10, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case ')': goto yy136;
+ case '0':
+ case '1': goto yy1287;
+ case '2': goto yy1288;
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy1289;
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'F':
+ case 'G':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'V':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'f':
+ case 'g':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'v':
+ case 'x':
+ case 'y':
+ case 'z': goto yy137;
+ case 'E':
+ case 'e': goto yy1282;
+ case 'H':
+ case 'h': goto yy1283;
+ case 'O':
+ case 'o': goto yy1284;
+ case 'U':
+ case 'u': goto yy1285;
+ case 'W':
+ case 'w': goto yy1286;
+ default: goto yy3;
+ }
yy11:
- YYDEBUG(11, *YYCURSOR);
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '-') goto yy1273;
- if(yych <= '/') goto yy12;
- if(yych <= '9') goto yy1274;
+ YYDEBUG(11, *YYCURSOR);
+ yyaccept = 1;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '-') goto yy1278;
+ if (yych <= '/') goto yy12;
+ if (yych <= '9') goto yy1279;
yy12:
- YYDEBUG(12, *YYCURSOR);
-#line 1538 "ext/date/lib/parse_date.re"
- {
+ YYDEBUG(12, *YYCURSOR);
+#line 1541 "ext/date/lib/parse_date.re"
+ {
add_error(s, "Unexpected character");
goto std;
}
-#line 1250 "ext/date/lib/parse_date.c"
+#line 1249 "ext/date/lib/parse_date.c"
yy13:
- YYDEBUG(13, *YYCURSOR);
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09: goto yy1227;
- case ' ':
- case 'A':
- case 'D':
- case 'F':
- case 'H':
- case 'I':
- case 'J':
- case 'M':
- case 'N':
- case 'O':
- case 'S':
- case 'T':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'a':
- case 'd':
- case 'f':
- case 'h':
- case 'j':
- case 'm':
- case 'o':
- case 'w':
- case 'y': goto yy1229;
- case '-': goto yy678;
- case '.': goto yy1239;
- case '/': goto yy677;
- case '0': goto yy1272;
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy1271;
- case ':': goto yy1240;
- case 'n': goto yy675;
- case 'r': goto yy676;
- case 's': goto yy669;
- case 't': goto yy673;
- default: goto yy12;
- }
+ YYDEBUG(13, *YYCURSOR);
+ yyaccept = 1;
+ yych = *(YYMARKER = ++YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t': goto yy1232;
+ case ' ':
+ case 'A':
+ case 'D':
+ case 'F':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'S':
+ case 'T':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'a':
+ case 'd':
+ case 'f':
+ case 'h':
+ case 'j':
+ case 'm':
+ case 'o':
+ case 'w':
+ case 'y': goto yy1234;
+ case '-': goto yy676;
+ case '.': goto yy1244;
+ case '/': goto yy675;
+ case '0': goto yy1277;
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy1276;
+ case ':': goto yy1245;
+ case 'n': goto yy673;
+ case 'r': goto yy674;
+ case 's': goto yy667;
+ case 't': goto yy671;
+ default: goto yy12;
+ }
yy14:
- YYDEBUG(14, *YYCURSOR);
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09: goto yy665;
- case ' ':
- case 'A':
- case 'D':
- case 'F':
- case 'H':
- case 'I':
- case 'J':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'S':
- case 'T':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'a':
- case 'd':
- case 'f':
- case 'h':
- case 'j':
- case 'm':
- case 'o':
- case 'p':
- case 'w':
- case 'y': goto yy667;
- case '-': goto yy678;
- case '.': goto yy679;
- case '/': goto yy677;
- case '0':
- case '1':
- case '2': goto yy1271;
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy1238;
- case ':': goto yy688;
- case 'n': goto yy675;
- case 'r': goto yy676;
- case 's': goto yy669;
- case 't': goto yy673;
- default: goto yy12;
- }
+ YYDEBUG(14, *YYCURSOR);
+ yyaccept = 1;
+ yych = *(YYMARKER = ++YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t': goto yy663;
+ case ' ':
+ case 'A':
+ case 'D':
+ case 'F':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'S':
+ case 'T':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'a':
+ case 'd':
+ case 'f':
+ case 'h':
+ case 'j':
+ case 'm':
+ case 'o':
+ case 'p':
+ case 'w':
+ case 'y': goto yy665;
+ case '-': goto yy676;
+ case '.': goto yy677;
+ case '/': goto yy675;
+ case '0':
+ case '1':
+ case '2': goto yy1276;
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy1243;
+ case ':': goto yy686;
+ case 'n': goto yy673;
+ case 'r': goto yy674;
+ case 's': goto yy667;
+ case 't': goto yy671;
+ default: goto yy12;
+ }
yy15:
- YYDEBUG(15, *YYCURSOR);
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09: goto yy665;
- case ' ':
- case 'A':
- case 'D':
- case 'F':
- case 'H':
- case 'I':
- case 'J':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'S':
- case 'T':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'a':
- case 'd':
- case 'f':
- case 'h':
- case 'j':
- case 'm':
- case 'o':
- case 'p':
- case 'w':
- case 'y': goto yy667;
- case '-': goto yy678;
- case '.': goto yy679;
- case '/': goto yy677;
- case '0':
- case '1':
- case '2':
- case '3': goto yy1238;
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy1225;
- case ':': goto yy688;
- case 'n': goto yy675;
- case 'r': goto yy676;
- case 's': goto yy669;
- case 't': goto yy673;
- default: goto yy12;
- }
+ YYDEBUG(15, *YYCURSOR);
+ yyaccept = 1;
+ yych = *(YYMARKER = ++YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t': goto yy663;
+ case ' ':
+ case 'A':
+ case 'D':
+ case 'F':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'S':
+ case 'T':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'a':
+ case 'd':
+ case 'f':
+ case 'h':
+ case 'j':
+ case 'm':
+ case 'o':
+ case 'p':
+ case 'w':
+ case 'y': goto yy665;
+ case '-': goto yy676;
+ case '.': goto yy677;
+ case '/': goto yy675;
+ case '0':
+ case '1':
+ case '2':
+ case '3': goto yy1243;
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy1230;
+ case ':': goto yy686;
+ case 'n': goto yy673;
+ case 'r': goto yy674;
+ case 's': goto yy667;
+ case 't': goto yy671;
+ default: goto yy12;
+ }
yy16:
- YYDEBUG(16, *YYCURSOR);
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09: goto yy665;
- case ' ':
- case 'A':
- case 'D':
- case 'F':
- case 'H':
- case 'I':
- case 'J':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'S':
- case 'T':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'a':
- case 'd':
- case 'f':
- case 'h':
- case 'j':
- case 'm':
- case 'o':
- case 'p':
- case 'w':
- case 'y': goto yy667;
- case '-': goto yy678;
- case '.': goto yy679;
- case '/': goto yy677;
- case '0':
- case '1': goto yy1225;
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy674;
- case ':': goto yy688;
- case 'n': goto yy675;
- case 'r': goto yy676;
- case 's': goto yy669;
- case 't': goto yy673;
- default: goto yy12;
- }
+ YYDEBUG(16, *YYCURSOR);
+ yyaccept = 1;
+ yych = *(YYMARKER = ++YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t': goto yy663;
+ case ' ':
+ case 'A':
+ case 'D':
+ case 'F':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'S':
+ case 'T':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'a':
+ case 'd':
+ case 'f':
+ case 'h':
+ case 'j':
+ case 'm':
+ case 'o':
+ case 'p':
+ case 'w':
+ case 'y': goto yy665;
+ case '-': goto yy676;
+ case '.': goto yy677;
+ case '/': goto yy675;
+ case '0':
+ case '1': goto yy1230;
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy672;
+ case ':': goto yy686;
+ case 'n': goto yy673;
+ case 'r': goto yy674;
+ case 's': goto yy667;
+ case 't': goto yy671;
+ default: goto yy12;
+ }
yy17:
- YYDEBUG(17, *YYCURSOR);
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09: goto yy665;
- case ' ':
- case 'A':
- case 'D':
- case 'F':
- case 'H':
- case 'I':
- case 'J':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'S':
- case 'T':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'a':
- case 'd':
- case 'f':
- case 'h':
- case 'j':
- case 'm':
- case 'o':
- case 'p':
- case 'w':
- case 'y': goto yy667;
- case '-': goto yy678;
- case '.': goto yy679;
- case '/': goto yy677;
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy674;
- case ':': goto yy688;
- case 'n': goto yy675;
- case 'r': goto yy676;
- case 's': goto yy669;
- case 't': goto yy673;
- default: goto yy12;
- }
+ YYDEBUG(17, *YYCURSOR);
+ yyaccept = 1;
+ yych = *(YYMARKER = ++YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t': goto yy663;
+ case ' ':
+ case 'A':
+ case 'D':
+ case 'F':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'S':
+ case 'T':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'a':
+ case 'd':
+ case 'f':
+ case 'h':
+ case 'j':
+ case 'm':
+ case 'o':
+ case 'p':
+ case 'w':
+ case 'y': goto yy665;
+ case '-': goto yy676;
+ case '.': goto yy677;
+ case '/': goto yy675;
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy672;
+ case ':': goto yy686;
+ case 'n': goto yy673;
+ case 'r': goto yy674;
+ case 's': goto yy667;
+ case 't': goto yy671;
+ default: goto yy12;
+ }
yy18:
- YYDEBUG(18, *YYCURSOR);
- yyaccept = 1;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yybm[0+yych] & 8) {
- goto yy54;
- }
- YYDEBUG(-1, yych);
- switch(yych) {
- case '+':
- case '-': goto yy643;
- case '0':
- case '1': goto yy640;
- case '2': goto yy641;
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy642;
- default: goto yy12;
- }
+ YYDEBUG(18, *YYCURSOR);
+ yyaccept = 1;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yybm[0+yych] & 8) {
+ goto yy54;
+ }
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '+':
+ case '-': goto yy641;
+ case '0':
+ case '1': goto yy638;
+ case '2': goto yy639;
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy640;
+ default: goto yy12;
+ }
yy19:
- YYDEBUG(19, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy3;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy3;
- }
+ YYDEBUG(19, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy3;
+ goto yy305;
} else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy3;
- } else {
- if(yych == '/') goto yy3;
- goto yy305;
- }
+ if (yych == ' ') goto yy305;
+ goto yy3;
}
} else {
- if(yych <= 'V') {
- if(yych <= 'H') {
- if(yych <= '@') goto yy3;
- goto yy137;
- } else {
- if(yych <= 'I') goto yy639;
- if(yych <= 'U') goto yy137;
- goto yy638;
- }
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'Z') {
- if(yych == 'X') goto yy638;
- goto yy137;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy142;
- goto yy3;
- }
+ if (yych == '/') goto yy3;
+ goto yy305;
}
}
-yy20:
- YYDEBUG(20, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy305;
- if(yych <= 0x1F) goto yy3;
- goto yy305;
+ } else {
+ if (yych <= 'V') {
+ if (yych <= 'H') {
+ if (yych <= '@') goto yy3;
+ goto yy137;
} else {
- if(yych == ')') goto yy136;
- if(yych <= ',') goto yy3;
- goto yy305;
+ if (yych <= 'I') goto yy637;
+ if (yych <= 'U') goto yy137;
+ goto yy636;
}
} else {
- if(yych <= 'H') {
- if(yych <= '/') goto yy3;
- if(yych <= '9') goto yy305;
- if(yych <= '@') goto yy3;
+ if (yych <= 'Z') {
+ if (yych == 'X') goto yy636;
goto yy137;
} else {
- if(yych <= 'Z') {
- if(yych <= 'I') goto yy635;
- goto yy137;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy142;
- goto yy3;
- }
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
}
}
-yy21:
- YYDEBUG(21, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy305;
- if(yych <= 0x1F) goto yy3;
- goto yy305;
- } else {
- if(yych == ')') goto yy136;
- if(yych <= ',') goto yy3;
- goto yy305;
- }
+ }
+yy20:
+ YYDEBUG(20, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy305;
+ if (yych <= 0x1F) goto yy3;
+ goto yy305;
} else {
- if(yych <= 'H') {
- if(yych <= '/') goto yy3;
- if(yych <= '9') goto yy305;
- if(yych <= '@') goto yy3;
+ if (yych == ')') goto yy136;
+ if (yych <= ',') goto yy3;
+ goto yy305;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych <= '/') goto yy3;
+ if (yych <= '9') goto yy305;
+ if (yych <= '@') goto yy3;
+ goto yy137;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= 'I') goto yy633;
goto yy137;
} else {
- if(yych <= 'Z') {
- if(yych <= 'I') goto yy633;
- goto yy137;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy142;
- goto yy3;
- }
- }
- }
-yy22:
- YYDEBUG(22, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= '@') {
- if(yych == ')') goto yy136;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy142;
goto yy3;
- } else {
- if(yych <= 'A') goto yy616;
- if(yych <= 'T') goto yy137;
- goto yy615;
}
+ }
+ }
+yy21:
+ YYDEBUG(21, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy305;
+ if (yych <= 0x1F) goto yy3;
+ goto yy305;
} else {
- if(yych <= 'a') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- goto yy625;
+ if (yych == ')') goto yy136;
+ if (yych <= ',') goto yy3;
+ goto yy305;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych <= '/') goto yy3;
+ if (yych <= '9') goto yy305;
+ if (yych <= '@') goto yy3;
+ goto yy137;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= 'I') goto yy631;
+ goto yy137;
} else {
- if(yych == 'u') goto yy624;
- if(yych <= 'z') goto yy142;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy142;
goto yy3;
}
}
+ }
+yy22:
+ YYDEBUG(22, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'A') goto yy614;
+ if (yych <= 'T') goto yy137;
+ goto yy613;
+ }
+ } else {
+ if (yych <= 'a') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy623;
+ } else {
+ if (yych == 'u') goto yy622;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
+ }
+ }
yy23:
- YYDEBUG(23, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
+ YYDEBUG(23, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'A') goto yy614;
+ if (yych <= 'T') goto yy137;
+ goto yy613;
+ }
+ } else {
+ if (yych <= 'a') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy614;
+ } else {
+ if (yych == 'u') goto yy613;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
+ }
+ }
+yy24:
+ YYDEBUG(24, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'A') goto yy616;
- if(yych <= 'T') goto yy137;
- goto yy615;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy137;
+ goto yy575;
}
} else {
- if(yych <= 'a') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- goto yy616;
+ if (yych <= 'N') {
+ if (yych == 'I') goto yy576;
+ goto yy137;
} else {
- if(yych == 'u') goto yy615;
- if(yych <= 'z') goto yy137;
- goto yy3;
+ if (yych <= 'O') goto yy577;
+ if (yych <= 'Q') goto yy137;
+ goto yy578;
}
}
-yy24:
- YYDEBUG(24, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy137;
- goto yy577;
- }
+ } else {
+ if (yych <= 'i') {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy142;
} else {
- if(yych <= 'N') {
- if(yych == 'I') goto yy578;
- goto yy137;
- } else {
- if(yych <= 'O') goto yy579;
- if(yych <= 'Q') goto yy137;
- goto yy580;
- }
+ if (yych <= 'e') goto yy594;
+ if (yych <= 'h') goto yy142;
+ goto yy595;
}
} else {
- if(yych <= 'i') {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- goto yy142;
- } else {
- if(yych <= 'e') goto yy596;
- if(yych <= 'h') goto yy142;
- goto yy597;
- }
+ if (yych <= 'q') {
+ if (yych == 'o') goto yy596;
+ goto yy142;
} else {
- if(yych <= 'q') {
- if(yych == 'o') goto yy598;
- goto yy142;
- } else {
- if(yych <= 'r') goto yy599;
- if(yych <= 'z') goto yy142;
- goto yy3;
- }
+ if (yych <= 'r') goto yy597;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
}
}
+ }
yy25:
- YYDEBUG(25, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy137;
- goto yy577;
- }
+ YYDEBUG(25, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'N') {
- if(yych == 'I') goto yy578;
- goto yy137;
- } else {
- if(yych <= 'O') goto yy579;
- if(yych <= 'Q') goto yy137;
- goto yy580;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy137;
+ goto yy575;
}
} else {
- if(yych <= 'i') {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- goto yy137;
- } else {
- if(yych <= 'e') goto yy577;
- if(yych <= 'h') goto yy137;
- goto yy578;
- }
+ if (yych <= 'N') {
+ if (yych == 'I') goto yy576;
+ goto yy137;
} else {
- if(yych <= 'q') {
- if(yych == 'o') goto yy579;
- goto yy137;
- } else {
- if(yych <= 'r') goto yy580;
- if(yych <= 'z') goto yy137;
- goto yy3;
- }
+ if (yych <= 'O') goto yy577;
+ if (yych <= 'Q') goto yy137;
+ goto yy578;
}
}
-yy26:
- YYDEBUG(26, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= 'F') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
+ } else {
+ if (yych <= 'i') {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
goto yy137;
} else {
- if(yych <= 'O') {
- if(yych <= 'G') goto yy556;
- goto yy137;
- } else {
- if(yych <= 'P') goto yy555;
- if(yych <= 'T') goto yy137;
- goto yy554;
- }
+ if (yych <= 'e') goto yy575;
+ if (yych <= 'h') goto yy137;
+ goto yy576;
}
} else {
- if(yych <= 'o') {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy137;
- goto yy3;
- } else {
- if(yych == 'g') goto yy568;
- goto yy142;
- }
+ if (yych <= 'q') {
+ if (yych == 'o') goto yy577;
+ goto yy137;
} else {
- if(yych <= 't') {
- if(yych <= 'p') goto yy567;
- goto yy142;
- } else {
- if(yych <= 'u') goto yy566;
- if(yych <= 'z') goto yy142;
- goto yy3;
- }
+ if (yych <= 'r') goto yy578;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
}
}
-yy27:
- YYDEBUG(27, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= 'F') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
+ }
+yy26:
+ YYDEBUG(26, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= 'F') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy137;
+ } else {
+ if (yych <= 'O') {
+ if (yych <= 'G') goto yy554;
goto yy137;
} else {
- if(yych <= 'O') {
- if(yych <= 'G') goto yy556;
- goto yy137;
- } else {
- if(yych <= 'P') goto yy555;
- if(yych <= 'T') goto yy137;
- goto yy554;
- }
- }
- } else {
- if(yych <= 'o') {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy137;
- goto yy3;
- } else {
- if(yych == 'g') goto yy556;
- goto yy137;
- }
- } else {
- if(yych <= 't') {
- if(yych <= 'p') goto yy555;
- goto yy137;
- } else {
- if(yych <= 'u') goto yy554;
- if(yych <= 'z') goto yy137;
- goto yy3;
- }
+ if (yych <= 'P') goto yy553;
+ if (yych <= 'T') goto yy137;
+ goto yy552;
}
}
-yy28:
- YYDEBUG(28, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'A') goto yy497;
- goto yy137;
- }
+ } else {
+ if (yych <= 'o') {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy137;
+ goto yy3;
} else {
- if(yych <= 'H') {
- if(yych <= 'E') goto yy496;
- goto yy137;
- } else {
- if(yych <= 'I') goto yy498;
- if(yych <= 'T') goto yy137;
- goto yy499;
- }
+ if (yych == 'g') goto yy566;
+ goto yy142;
}
} else {
- if(yych <= 'e') {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy137;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy526;
- if(yych <= 'd') goto yy142;
- goto yy525;
- }
+ if (yych <= 't') {
+ if (yych <= 'p') goto yy565;
+ goto yy142;
} else {
- if(yych <= 't') {
- if(yych == 'i') goto yy527;
- goto yy142;
- } else {
- if(yych <= 'u') goto yy528;
- if(yych <= 'z') goto yy142;
- goto yy3;
- }
+ if (yych <= 'u') goto yy564;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
}
}
-yy29:
- YYDEBUG(29, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'A') goto yy497;
- goto yy137;
- }
- } else {
- if(yych <= 'H') {
- if(yych <= 'E') goto yy496;
- goto yy137;
- } else {
- if(yych <= 'I') goto yy498;
- if(yych <= 'T') goto yy137;
- goto yy499;
- }
- }
- } else {
- if(yych <= 'e') {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy137;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy497;
- if(yych <= 'd') goto yy137;
- goto yy496;
- }
+ }
+yy27:
+ YYDEBUG(27, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= 'F') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy137;
+ } else {
+ if (yych <= 'O') {
+ if (yych <= 'G') goto yy554;
+ goto yy137;
} else {
- if(yych <= 't') {
- if(yych == 'i') goto yy498;
- goto yy137;
- } else {
- if(yych <= 'u') goto yy499;
- if(yych <= 'z') goto yy137;
- goto yy3;
- }
+ if (yych <= 'P') goto yy553;
+ if (yych <= 'T') goto yy137;
+ goto yy552;
}
}
-yy30:
- YYDEBUG(30, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'C') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'o') {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy137;
+ goto yy3;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'B') goto yy137;
- goto yy486;
+ if (yych == 'g') goto yy554;
+ goto yy137;
}
} else {
- if(yych <= 'b') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- goto yy142;
+ if (yych <= 't') {
+ if (yych <= 'p') goto yy553;
+ goto yy137;
} else {
- if(yych <= 'c') goto yy491;
- if(yych <= 'z') goto yy142;
+ if (yych <= 'u') goto yy552;
+ if (yych <= 'z') goto yy137;
goto yy3;
}
}
-yy31:
- YYDEBUG(31, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'C') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
+ }
+yy28:
+ YYDEBUG(28, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
goto yy136;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'B') goto yy137;
- goto yy486;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'A') goto yy495;
+ goto yy137;
}
} else {
- if(yych <= 'b') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
+ if (yych <= 'H') {
+ if (yych <= 'E') goto yy494;
goto yy137;
} else {
- if(yych <= 'c') goto yy486;
- if(yych <= 'z') goto yy137;
- goto yy3;
+ if (yych <= 'I') goto yy496;
+ if (yych <= 'T') goto yy137;
+ goto yy497;
}
}
-yy32:
- YYDEBUG(32, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'e') {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy137;
+ goto yy3;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy137;
- goto yy301;
+ if (yych <= 'a') goto yy524;
+ if (yych <= 'd') goto yy142;
+ goto yy523;
}
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
+ if (yych <= 't') {
+ if (yych == 'i') goto yy525;
goto yy142;
} else {
- if(yych <= 'e') goto yy479;
- if(yych <= 'z') goto yy142;
+ if (yych <= 'u') goto yy526;
+ if (yych <= 'z') goto yy142;
goto yy3;
}
}
-yy33:
- YYDEBUG(33, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
+ }
+yy29:
+ YYDEBUG(29, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
goto yy136;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy137;
- goto yy301;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'A') goto yy495;
+ goto yy137;
}
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
+ if (yych <= 'H') {
+ if (yych <= 'E') goto yy494;
goto yy137;
} else {
- if(yych <= 'e') goto yy301;
- if(yych <= 'z') goto yy137;
- goto yy3;
+ if (yych <= 'I') goto yy496;
+ if (yych <= 'T') goto yy137;
+ goto yy497;
}
}
-yy34:
- YYDEBUG(34, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'e') {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy137;
+ goto yy3;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy137;
- goto yy274;
+ if (yych <= 'a') goto yy495;
+ if (yych <= 'd') goto yy137;
+ goto yy494;
}
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- goto yy142;
+ if (yych <= 't') {
+ if (yych == 'i') goto yy496;
+ goto yy137;
} else {
- if(yych <= 'e') goto yy288;
- if(yych <= 'z') goto yy142;
+ if (yych <= 'u') goto yy497;
+ if (yych <= 'z') goto yy137;
goto yy3;
}
}
+ }
+yy30:
+ YYDEBUG(30, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'C') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'B') goto yy137;
+ goto yy484;
+ }
+ } else {
+ if (yych <= 'b') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy142;
+ } else {
+ if (yych <= 'c') goto yy489;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
+ }
+ }
+yy31:
+ YYDEBUG(31, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'C') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'B') goto yy137;
+ goto yy484;
+ }
+ } else {
+ if (yych <= 'b') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy137;
+ } else {
+ if (yych <= 'c') goto yy484;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
+ }
+ }
+yy32:
+ YYDEBUG(32, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy137;
+ goto yy301;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy142;
+ } else {
+ if (yych <= 'e') goto yy477;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
+ }
+ }
+yy33:
+ YYDEBUG(33, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy137;
+ goto yy301;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy137;
+ } else {
+ if (yych <= 'e') goto yy301;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
+ }
+ }
+yy34:
+ YYDEBUG(34, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy137;
+ goto yy274;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy142;
+ } else {
+ if (yych <= 'e') goto yy288;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
+ }
+ }
yy35:
- YYDEBUG(35, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy137;
- goto yy274;
- }
+ YYDEBUG(35, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- goto yy137;
- } else {
- if(yych <= 'e') goto yy274;
- if(yych <= 'z') goto yy137;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy137;
+ goto yy274;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy137;
+ } else {
+ if (yych <= 'e') goto yy274;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
}
+ }
yy36:
- YYDEBUG(36, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'L') {
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych == 'I') goto yy254;
- if(yych <= 'K') goto yy137;
- goto yy255;
- }
+ YYDEBUG(36, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'L') {
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'i') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- if(yych <= 'h') goto yy142;
- goto yy264;
- } else {
- if(yych == 'l') goto yy265;
- if(yych <= 'z') goto yy142;
- goto yy3;
- }
+ if (yych == 'I') goto yy254;
+ if (yych <= 'K') goto yy137;
+ goto yy255;
+ }
+ } else {
+ if (yych <= 'i') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'h') goto yy142;
+ goto yy264;
+ } else {
+ if (yych == 'l') goto yy265;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
}
+ }
yy37:
- YYDEBUG(37, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'L') {
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych == 'I') goto yy254;
- if(yych <= 'K') goto yy137;
- goto yy255;
- }
+ YYDEBUG(37, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'L') {
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'i') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- if(yych <= 'h') goto yy137;
- goto yy254;
- } else {
- if(yych == 'l') goto yy255;
- if(yych <= 'z') goto yy137;
- goto yy3;
- }
+ if (yych == 'I') goto yy254;
+ if (yych <= 'K') goto yy137;
+ goto yy255;
+ }
+ } else {
+ if (yych <= 'i') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'h') goto yy137;
+ goto yy254;
+ } else {
+ if (yych == 'l') goto yy255;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
}
+ }
yy38:
- YYDEBUG(38, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- goto yy248;
- } else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy137;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy251;
- if(yych <= 'z') goto yy142;
- goto yy3;
- }
+ YYDEBUG(38, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy248;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy137;
+ goto yy3;
+ } else {
+ if (yych <= 'a') goto yy251;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
}
+ }
yy39:
- YYDEBUG(39, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- goto yy248;
- } else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy137;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy248;
- if(yych <= 'z') goto yy137;
- goto yy3;
- }
+ YYDEBUG(39, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy248;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy137;
+ goto yy3;
+ } else {
+ if (yych <= 'a') goto yy248;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
}
+ }
yy40:
- YYDEBUG(40, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy137;
- goto yy154;
- }
+ YYDEBUG(40, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'q') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- goto yy142;
- } else {
- if(yych <= 'r') goto yy241;
- if(yych <= 'z') goto yy142;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy137;
+ goto yy154;
}
-yy41:
- YYDEBUG(41, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy137;
- goto yy154;
- }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy142;
} else {
- if(yych <= 'q') {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- goto yy137;
- } else {
- if(yych <= 'r') goto yy154;
- if(yych <= 'z') goto yy137;
- goto yy3;
- }
- }
-yy42:
- YYDEBUG(42, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') goto yy12;
- if(yych <= 'Z') goto yy153;
- if(yych <= '`') goto yy12;
- if(yych <= 'z') goto yy153;
- goto yy12;
-yy43:
- YYDEBUG(43, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy136;
+ if (yych <= 'r') goto yy241;
+ if (yych <= 'z') goto yy142;
goto yy3;
+ }
+ }
+yy41:
+ YYDEBUG(41, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy142;
- goto yy3;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy137;
+ goto yy154;
}
-yy44:
- YYDEBUG(44, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ goto yy137;
} else {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy137;
+ if (yych <= 'r') goto yy154;
+ if (yych <= 'z') goto yy137;
goto yy3;
}
+ }
+yy42:
+ YYDEBUG(42, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') goto yy12;
+ if (yych <= 'Z') goto yy153;
+ if (yych <= '`') goto yy12;
+ if (yych <= 'z') goto yy153;
+ goto yy12;
+yy43:
+ YYDEBUG(43, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy142;
+ goto yy3;
+ }
+yy44:
+ YYDEBUG(44, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
+ }
yy45:
- YYDEBUG(45, *YYCURSOR);
- yyaccept = 2;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yybm[0+yych] & 8) {
- goto yy54;
- }
- if(yych <= '/') goto yy46;
- if(yych <= '9') goto yy51;
+ YYDEBUG(45, *YYCURSOR);
+ yyaccept = 2;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yybm[0+yych] & 8) {
+ goto yy54;
+ }
+ if (yych <= '/') goto yy46;
+ if (yych <= '9') goto yy51;
yy46:
- YYDEBUG(46, *YYCURSOR);
-#line 1527 "ext/date/lib/parse_date.re"
- {
+ YYDEBUG(46, *YYCURSOR);
+#line 1530 "ext/date/lib/parse_date.re"
+ {
goto std;
}
-#line 2260 "ext/date/lib/parse_date.c"
+#line 2259 "ext/date/lib/parse_date.c"
yy47:
- YYDEBUG(47, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy46;
+ YYDEBUG(47, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy46;
yy48:
- YYDEBUG(48, *YYCURSOR);
- ++YYCURSOR;
- YYDEBUG(49, *YYCURSOR);
-#line 1532 "ext/date/lib/parse_date.re"
- {
+ YYDEBUG(48, *YYCURSOR);
+ ++YYCURSOR;
+ YYDEBUG(49, *YYCURSOR);
+#line 1535 "ext/date/lib/parse_date.re"
+ {
s->pos = cursor; s->line++;
goto std;
}
-#line 2274 "ext/date/lib/parse_date.c"
+#line 2273 "ext/date/lib/parse_date.c"
yy50:
- YYDEBUG(50, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy12;
+ YYDEBUG(50, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy12;
yy51:
- YYDEBUG(51, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 11) YYFILL(11);
- yych = *YYCURSOR;
- YYDEBUG(52, *YYCURSOR);
- if(yybm[0+yych] & 4) {
- goto yy51;
- }
- if(yych <= 'W') {
- if(yych <= 'F') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy56;
- if(yych >= ' ') goto yy56;
+ YYDEBUG(51, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 11) YYFILL(11);
+ yych = *YYCURSOR;
+ YYDEBUG(52, *YYCURSOR);
+ if (yybm[0+yych] & 4) {
+ goto yy51;
+ }
+ if (yych <= 'W') {
+ if (yych <= 'F') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy56;
+ if (yych >= ' ') goto yy56;
+ } else {
+ if (yych == 'D') goto yy61;
+ if (yych >= 'F') goto yy63;
+ }
+ } else {
+ if (yych <= 'M') {
+ if (yych == 'H') goto yy60;
+ if (yych >= 'M') goto yy59;
+ } else {
+ if (yych <= 'S') {
+ if (yych >= 'S') goto yy58;
} else {
- if(yych == 'D') goto yy61;
- if(yych >= 'F') goto yy63;
+ if (yych <= 'T') goto yy65;
+ if (yych >= 'W') goto yy62;
}
+ }
+ }
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'd') {
+ if (yych == 'Y') goto yy64;
+ if (yych >= 'd') goto yy61;
} else {
- if(yych <= 'M') {
- if(yych == 'H') goto yy60;
- if(yych >= 'M') goto yy59;
+ if (yych <= 'f') {
+ if (yych >= 'f') goto yy63;
} else {
- if(yych <= 'S') {
- if(yych >= 'S') goto yy58;
- } else {
- if(yych <= 'T') goto yy65;
- if(yych >= 'W') goto yy62;
- }
+ if (yych == 'h') goto yy60;
}
}
} else {
- if(yych <= 'l') {
- if(yych <= 'd') {
- if(yych == 'Y') goto yy64;
- if(yych >= 'd') goto yy61;
- } else {
- if(yych <= 'f') {
- if(yych >= 'f') goto yy63;
- } else {
- if(yych == 'h') goto yy60;
- }
- }
+ if (yych <= 't') {
+ if (yych <= 'm') goto yy59;
+ if (yych <= 'r') goto yy53;
+ if (yych <= 's') goto yy58;
+ goto yy65;
} else {
- if(yych <= 't') {
- if(yych <= 'm') goto yy59;
- if(yych <= 'r') goto yy53;
- if(yych <= 's') goto yy58;
- goto yy65;
+ if (yych <= 'w') {
+ if (yych >= 'w') goto yy62;
} else {
- if(yych <= 'w') {
- if(yych >= 'w') goto yy62;
- } else {
- if(yych == 'y') goto yy64;
- }
+ if (yych == 'y') goto yy64;
}
}
}
+ }
yy53:
- YYDEBUG(53, *YYCURSOR);
- YYCURSOR = YYMARKER;
- if(yyaccept <= 15) {
- if(yyaccept <= 7) {
- if(yyaccept <= 3) {
- if(yyaccept <= 1) {
- if(yyaccept <= 0) {
- goto yy3;
- } else {
- goto yy12;
- }
+ YYDEBUG(53, *YYCURSOR);
+ YYCURSOR = YYMARKER;
+ if (yyaccept <= 15) {
+ if (yyaccept <= 7) {
+ if (yyaccept <= 3) {
+ if (yyaccept <= 1) {
+ if (yyaccept <= 0) {
+ goto yy3;
} else {
- if(yyaccept <= 2) {
- goto yy46;
- } else {
- goto yy69;
- }
+ goto yy12;
}
} else {
- if(yyaccept <= 5) {
- if(yyaccept <= 4) {
- goto yy174;
- } else {
- goto yy276;
- }
+ if (yyaccept <= 2) {
+ goto yy46;
} else {
- if(yyaccept <= 6) {
- goto yy303;
- } else {
- goto yy308;
- }
+ goto yy69;
}
}
} else {
- if(yyaccept <= 11) {
- if(yyaccept <= 9) {
- if(yyaccept <= 8) {
- goto yy332;
- } else {
- goto yy402;
- }
+ if (yyaccept <= 5) {
+ if (yyaccept <= 4) {
+ goto yy174;
} else {
- if(yyaccept <= 10) {
- goto yy558;
- } else {
- goto yy681;
- }
+ goto yy276;
}
} else {
- if(yyaccept <= 13) {
- if(yyaccept <= 12) {
- goto yy696;
- } else {
- goto yy796;
- }
+ if (yyaccept <= 6) {
+ goto yy303;
} else {
- if(yyaccept <= 14) {
- goto yy844;
- } else {
- goto yy854;
- }
+ goto yy308;
}
}
}
} else {
- if(yyaccept <= 23) {
- if(yyaccept <= 19) {
- if(yyaccept <= 17) {
- if(yyaccept <= 16) {
- goto yy942;
- } else {
- goto yy962;
- }
+ if (yyaccept <= 11) {
+ if (yyaccept <= 9) {
+ if (yyaccept <= 8) {
+ goto yy332;
} else {
- if(yyaccept <= 18) {
- goto yy993;
- } else {
- goto yy1000;
- }
+ goto yy402;
}
} else {
- if(yyaccept <= 21) {
- if(yyaccept <= 20) {
- goto yy1027;
- } else {
- goto yy972;
- }
+ if (yyaccept <= 10) {
+ goto yy556;
} else {
- if(yyaccept <= 22) {
- goto yy660;
- } else {
- goto yy1152;
- }
+ goto yy679;
}
}
} else {
- if(yyaccept <= 27) {
- if(yyaccept <= 25) {
- if(yyaccept <= 24) {
- goto yy1021;
- } else {
- goto yy1243;
- }
+ if (yyaccept <= 13) {
+ if (yyaccept <= 12) {
+ goto yy694;
} else {
- if(yyaccept <= 26) {
- goto yy1251;
- } else {
- goto yy1306;
- }
+ goto yy799;
}
} else {
- if(yyaccept <= 29) {
- if(yyaccept <= 28) {
- goto yy1309;
- } else {
- goto yy1387;
- }
+ if (yyaccept <= 14) {
+ goto yy843;
} else {
- if(yyaccept <= 30) {
- goto yy1395;
- } else {
- goto yy1418;
- }
+ goto yy853;
}
}
}
}
-yy54:
- YYDEBUG(54, *YYCURSOR);
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- YYDEBUG(55, *YYCURSOR);
- if(yybm[0+yych] & 8) {
- goto yy54;
- }
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy51;
- goto yy53;
-yy56:
- YYDEBUG(56, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 11) YYFILL(11);
- yych = *YYCURSOR;
-yy57:
- YYDEBUG(57, *YYCURSOR);
- if(yych <= 'W') {
- if(yych <= 'F') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy56;
- if(yych <= 0x1F) goto yy53;
- goto yy56;
+ } else {
+ if (yyaccept <= 23) {
+ if (yyaccept <= 19) {
+ if (yyaccept <= 17) {
+ if (yyaccept <= 16) {
+ goto yy947;
+ } else {
+ goto yy967;
+ }
} else {
- if(yych == 'D') goto yy61;
- if(yych <= 'E') goto yy53;
- goto yy63;
+ if (yyaccept <= 18) {
+ goto yy998;
+ } else {
+ goto yy1005;
+ }
}
} else {
- if(yych <= 'M') {
- if(yych == 'H') goto yy60;
- if(yych <= 'L') goto yy53;
- goto yy59;
+ if (yyaccept <= 21) {
+ if (yyaccept <= 20) {
+ goto yy1032;
+ } else {
+ goto yy977;
+ }
} else {
- if(yych <= 'S') {
- if(yych <= 'R') goto yy53;
+ if (yyaccept <= 22) {
+ goto yy658;
} else {
- if(yych <= 'T') goto yy65;
- if(yych <= 'V') goto yy53;
- goto yy62;
+ goto yy1157;
}
}
}
} else {
- if(yych <= 'l') {
- if(yych <= 'd') {
- if(yych == 'Y') goto yy64;
- if(yych <= 'c') goto yy53;
- goto yy61;
+ if (yyaccept <= 27) {
+ if (yyaccept <= 25) {
+ if (yyaccept <= 24) {
+ goto yy1026;
+ } else {
+ goto yy1248;
+ }
} else {
- if(yych <= 'f') {
- if(yych <= 'e') goto yy53;
- goto yy63;
+ if (yyaccept <= 26) {
+ goto yy1256;
} else {
- if(yych == 'h') goto yy60;
- goto yy53;
+ goto yy1311;
}
}
} else {
- if(yych <= 't') {
- if(yych <= 'm') goto yy59;
- if(yych <= 'r') goto yy53;
- if(yych >= 't') goto yy65;
+ if (yyaccept <= 29) {
+ if (yyaccept <= 28) {
+ goto yy1314;
+ } else {
+ goto yy1392;
+ }
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy53;
- goto yy62;
+ if (yyaccept <= 30) {
+ goto yy1400;
} else {
- if(yych == 'y') goto yy64;
- goto yy53;
+ goto yy1423;
}
}
}
}
-yy58:
- YYDEBUG(58, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= 'D') {
- if(yych == 'A') goto yy123;
- goto yy53;
+ }
+yy54:
+ YYDEBUG(54, *YYCURSOR);
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ YYDEBUG(55, *YYCURSOR);
+ if (yybm[0+yych] & 8) {
+ goto yy54;
+ }
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy51;
+ goto yy53;
+yy56:
+ YYDEBUG(56, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 11) YYFILL(11);
+ yych = *YYCURSOR;
+yy57:
+ YYDEBUG(57, *YYCURSOR);
+ if (yych <= 'W') {
+ if (yych <= 'F') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy56;
+ if (yych <= 0x1F) goto yy53;
+ goto yy56;
} else {
- if(yych <= 'E') goto yy124;
- if(yych <= 'T') goto yy53;
- goto yy122;
+ if (yych == 'D') goto yy61;
+ if (yych <= 'E') goto yy53;
+ goto yy63;
}
} else {
- if(yych <= 'd') {
- if(yych == 'a') goto yy123;
- goto yy53;
+ if (yych <= 'M') {
+ if (yych == 'H') goto yy60;
+ if (yych <= 'L') goto yy53;
+ goto yy59;
} else {
- if(yych <= 'e') goto yy124;
- if(yych == 'u') goto yy122;
- goto yy53;
+ if (yych <= 'S') {
+ if (yych <= 'R') goto yy53;
+ } else {
+ if (yych <= 'T') goto yy65;
+ if (yych <= 'V') goto yy53;
+ goto yy62;
+ }
}
}
-yy59:
- YYDEBUG(59, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych == 'I') goto yy114;
- if(yych <= 'N') goto yy53;
- goto yy113;
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'd') {
+ if (yych == 'Y') goto yy64;
+ if (yych <= 'c') goto yy53;
+ goto yy61;
+ } else {
+ if (yych <= 'f') {
+ if (yych <= 'e') goto yy53;
+ goto yy63;
+ } else {
+ if (yych == 'h') goto yy60;
+ goto yy53;
+ }
+ }
} else {
- if(yych <= 'i') {
- if(yych <= 'h') goto yy53;
- goto yy114;
+ if (yych <= 't') {
+ if (yych <= 'm') goto yy59;
+ if (yych <= 'r') goto yy53;
+ if (yych >= 't') goto yy65;
} else {
- if(yych == 'o') goto yy113;
- goto yy53;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy53;
+ goto yy62;
+ } else {
+ if (yych == 'y') goto yy64;
+ goto yy53;
+ }
}
}
+ }
+yy58:
+ YYDEBUG(58, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= 'D') {
+ if (yych == 'A') goto yy123;
+ goto yy53;
+ } else {
+ if (yych <= 'E') goto yy124;
+ if (yych <= 'T') goto yy53;
+ goto yy122;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych == 'a') goto yy123;
+ goto yy53;
+ } else {
+ if (yych <= 'e') goto yy124;
+ if (yych == 'u') goto yy122;
+ goto yy53;
+ }
+ }
+yy59:
+ YYDEBUG(59, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych == 'I') goto yy114;
+ if (yych <= 'N') goto yy53;
+ goto yy113;
+ } else {
+ if (yych <= 'i') {
+ if (yych <= 'h') goto yy53;
+ goto yy114;
+ } else {
+ if (yych == 'o') goto yy113;
+ goto yy53;
+ }
+ }
yy60:
- YYDEBUG(60, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'O') goto yy111;
- if(yych == 'o') goto yy111;
- goto yy53;
+ YYDEBUG(60, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'O') goto yy111;
+ if (yych == 'o') goto yy111;
+ goto yy53;
yy61:
- YYDEBUG(61, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy110;
- if(yych == 'a') goto yy110;
- goto yy53;
+ YYDEBUG(61, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy110;
+ if (yych == 'a') goto yy110;
+ goto yy53;
yy62:
- YYDEBUG(62, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy98;
- if(yych == 'e') goto yy98;
- goto yy53;
+ YYDEBUG(62, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy98;
+ if (yych == 'e') goto yy98;
+ goto yy53;
yy63:
- YYDEBUG(63, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych == 'O') goto yy83;
- if(yych <= 'Q') goto yy53;
- goto yy82;
+ YYDEBUG(63, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych == 'O') goto yy83;
+ if (yych <= 'Q') goto yy53;
+ goto yy82;
+ } else {
+ if (yych <= 'o') {
+ if (yych <= 'n') goto yy53;
+ goto yy83;
} else {
- if(yych <= 'o') {
- if(yych <= 'n') goto yy53;
- goto yy83;
- } else {
- if(yych == 'r') goto yy82;
- goto yy53;
- }
+ if (yych == 'r') goto yy82;
+ goto yy53;
}
+ }
yy64:
- YYDEBUG(64, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy79;
- if(yych == 'e') goto yy79;
- goto yy53;
+ YYDEBUG(64, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy79;
+ if (yych == 'e') goto yy79;
+ goto yy53;
yy65:
- YYDEBUG(65, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'H') goto yy66;
- if(yych <= 'T') goto yy53;
- goto yy67;
+ YYDEBUG(65, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'H') goto yy66;
+ if (yych <= 'T') goto yy53;
+ goto yy67;
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'g') goto yy53;
} else {
- if(yych <= 'h') {
- if(yych <= 'g') goto yy53;
- } else {
- if(yych == 'u') goto yy67;
- goto yy53;
- }
+ if (yych == 'u') goto yy67;
+ goto yy53;
}
+ }
yy66:
- YYDEBUG(66, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'U') goto yy74;
- if(yych == 'u') goto yy74;
- goto yy53;
+ YYDEBUG(66, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'U') goto yy74;
+ if (yych == 'u') goto yy74;
+ goto yy53;
yy67:
- YYDEBUG(67, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy68;
- if(yych != 'e') goto yy53;
+ YYDEBUG(67, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy68;
+ if (yych != 'e') goto yy53;
yy68:
- YYDEBUG(68, *YYCURSOR);
- yyaccept = 3;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'S') goto yy70;
- if(yych == 's') goto yy70;
+ YYDEBUG(68, *YYCURSOR);
+ yyaccept = 3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'S') goto yy70;
+ if (yych == 's') goto yy70;
yy69:
- YYDEBUG(69, *YYCURSOR);
-#line 1511 "ext/date/lib/parse_date.re"
- {
+ YYDEBUG(69, *YYCURSOR);
+#line 1514 "ext/date/lib/parse_date.re"
+ {
timelib_ull i;
DEBUG_OUTPUT("relative");
TIMELIB_INIT;
@@ -2659,921 +2658,921 @@ yy69:
while(*ptr) {
i = timelib_get_unsigned_nr((char **) &ptr, 24);
timelib_eat_spaces((char **) &ptr);
- timelib_set_relative((char **) &ptr, i, 0, s);
+ timelib_set_relative((char **) &ptr, i, 1, s);
}
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
-#line 2668 "ext/date/lib/parse_date.c"
+#line 2667 "ext/date/lib/parse_date.c"
yy70:
- YYDEBUG(70, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'D') goto yy71;
- if(yych != 'd') goto yy53;
+ YYDEBUG(70, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'D') goto yy71;
+ if (yych != 'd') goto yy53;
yy71:
- YYDEBUG(71, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy72;
- if(yych != 'a') goto yy53;
+ YYDEBUG(71, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy72;
+ if (yych != 'a') goto yy53;
yy72:
- YYDEBUG(72, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy73;
- if(yych != 'y') goto yy53;
+ YYDEBUG(72, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy73;
+ if (yych != 'y') goto yy53;
yy73:
- YYDEBUG(73, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy69;
+ YYDEBUG(73, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy69;
yy74:
- YYDEBUG(74, *YYCURSOR);
- yyaccept = 3;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'R') goto yy75;
- if(yych != 'r') goto yy69;
+ YYDEBUG(74, *YYCURSOR);
+ yyaccept = 3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'R') goto yy75;
+ if (yych != 'r') goto yy69;
yy75:
- YYDEBUG(75, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy76;
- if(yych != 's') goto yy53;
+ YYDEBUG(75, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy76;
+ if (yych != 's') goto yy53;
yy76:
- YYDEBUG(76, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'D') goto yy77;
- if(yych != 'd') goto yy53;
+ YYDEBUG(76, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'D') goto yy77;
+ if (yych != 'd') goto yy53;
yy77:
- YYDEBUG(77, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy78;
- if(yych != 'a') goto yy53;
+ YYDEBUG(77, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy78;
+ if (yych != 'a') goto yy53;
yy78:
- YYDEBUG(78, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy73;
- if(yych == 'y') goto yy73;
- goto yy53;
+ YYDEBUG(78, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy73;
+ if (yych == 'y') goto yy73;
+ goto yy53;
yy79:
- YYDEBUG(79, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy80;
- if(yych != 'a') goto yy53;
+ YYDEBUG(79, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy80;
+ if (yych != 'a') goto yy53;
yy80:
- YYDEBUG(80, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy81;
- if(yych != 'r') goto yy53;
+ YYDEBUG(80, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy81;
+ if (yych != 'r') goto yy53;
yy81:
- YYDEBUG(81, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy73;
- if(yych == 's') goto yy73;
- goto yy69;
+ YYDEBUG(81, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy73;
+ if (yych == 's') goto yy73;
+ goto yy69;
yy82:
- YYDEBUG(82, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'I') goto yy95;
- if(yych == 'i') goto yy95;
- goto yy53;
+ YYDEBUG(82, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'I') goto yy95;
+ if (yych == 'i') goto yy95;
+ goto yy53;
yy83:
- YYDEBUG(83, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy84;
- if(yych != 'r') goto yy53;
+ YYDEBUG(83, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy84;
+ if (yych != 'r') goto yy53;
yy84:
- YYDEBUG(84, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy85;
- if(yych != 't') goto yy53;
+ YYDEBUG(84, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy85;
+ if (yych != 't') goto yy53;
yy85:
- YYDEBUG(85, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych == 'H') goto yy87;
- if(yych <= 'M') goto yy53;
+ YYDEBUG(85, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych == 'H') goto yy87;
+ if (yych <= 'M') goto yy53;
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'g') goto yy53;
+ goto yy87;
} else {
- if(yych <= 'h') {
- if(yych <= 'g') goto yy53;
- goto yy87;
- } else {
- if(yych != 'n') goto yy53;
- }
+ if (yych != 'n') goto yy53;
}
- YYDEBUG(86, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'I') goto yy92;
- if(yych == 'i') goto yy92;
- goto yy53;
+ }
+ YYDEBUG(86, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'I') goto yy92;
+ if (yych == 'i') goto yy92;
+ goto yy53;
yy87:
- YYDEBUG(87, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy88;
- if(yych != 'n') goto yy53;
+ YYDEBUG(87, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy88;
+ if (yych != 'n') goto yy53;
yy88:
- YYDEBUG(88, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'I') goto yy89;
- if(yych != 'i') goto yy53;
+ YYDEBUG(88, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'I') goto yy89;
+ if (yych != 'i') goto yy53;
yy89:
- YYDEBUG(89, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'G') goto yy90;
- if(yych != 'g') goto yy53;
+ YYDEBUG(89, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'G') goto yy90;
+ if (yych != 'g') goto yy53;
yy90:
- YYDEBUG(90, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'H') goto yy91;
- if(yych != 'h') goto yy53;
+ YYDEBUG(90, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'H') goto yy91;
+ if (yych != 'h') goto yy53;
yy91:
- YYDEBUG(91, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy81;
- if(yych == 't') goto yy81;
- goto yy53;
+ YYDEBUG(91, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy81;
+ if (yych == 't') goto yy81;
+ goto yy53;
yy92:
- YYDEBUG(92, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'G') goto yy93;
- if(yych != 'g') goto yy53;
+ YYDEBUG(92, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'G') goto yy93;
+ if (yych != 'g') goto yy53;
yy93:
- YYDEBUG(93, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'H') goto yy94;
- if(yych != 'h') goto yy53;
+ YYDEBUG(93, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'H') goto yy94;
+ if (yych != 'h') goto yy53;
yy94:
- YYDEBUG(94, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy81;
- if(yych == 't') goto yy81;
- goto yy53;
+ YYDEBUG(94, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy81;
+ if (yych == 't') goto yy81;
+ goto yy53;
yy95:
- YYDEBUG(95, *YYCURSOR);
- yyaccept = 3;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'D') goto yy96;
- if(yych != 'd') goto yy69;
+ YYDEBUG(95, *YYCURSOR);
+ yyaccept = 3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'D') goto yy96;
+ if (yych != 'd') goto yy69;
yy96:
- YYDEBUG(96, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy97;
- if(yych != 'a') goto yy53;
+ YYDEBUG(96, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy97;
+ if (yych != 'a') goto yy53;
yy97:
- YYDEBUG(97, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy73;
- if(yych == 'y') goto yy73;
- goto yy53;
+ YYDEBUG(97, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy73;
+ if (yych == 'y') goto yy73;
+ goto yy53;
yy98:
- YYDEBUG(98, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= 'C') goto yy53;
- if(yych <= 'D') goto yy100;
- } else {
- if(yych <= 'c') goto yy53;
- if(yych <= 'd') goto yy100;
- if(yych >= 'f') goto yy53;
- }
- YYDEBUG(99, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'K') goto yy106;
- if(yych == 'k') goto yy106;
- goto yy53;
+ YYDEBUG(98, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= 'C') goto yy53;
+ if (yych <= 'D') goto yy100;
+ } else {
+ if (yych <= 'c') goto yy53;
+ if (yych <= 'd') goto yy100;
+ if (yych >= 'f') goto yy53;
+ }
+ YYDEBUG(99, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'K') goto yy106;
+ if (yych == 'k') goto yy106;
+ goto yy53;
yy100:
- YYDEBUG(100, *YYCURSOR);
- yyaccept = 3;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'N') goto yy101;
- if(yych != 'n') goto yy69;
+ YYDEBUG(100, *YYCURSOR);
+ yyaccept = 3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'N') goto yy101;
+ if (yych != 'n') goto yy69;
yy101:
- YYDEBUG(101, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy102;
- if(yych != 'e') goto yy53;
+ YYDEBUG(101, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy102;
+ if (yych != 'e') goto yy53;
yy102:
- YYDEBUG(102, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy103;
- if(yych != 's') goto yy53;
+ YYDEBUG(102, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy103;
+ if (yych != 's') goto yy53;
yy103:
- YYDEBUG(103, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'D') goto yy104;
- if(yych != 'd') goto yy53;
+ YYDEBUG(103, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'D') goto yy104;
+ if (yych != 'd') goto yy53;
yy104:
- YYDEBUG(104, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy105;
- if(yych != 'a') goto yy53;
+ YYDEBUG(104, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy105;
+ if (yych != 'a') goto yy53;
yy105:
- YYDEBUG(105, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy73;
- if(yych == 'y') goto yy73;
- goto yy53;
+ YYDEBUG(105, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy73;
+ if (yych == 'y') goto yy73;
+ goto yy53;
yy106:
- YYDEBUG(106, *YYCURSOR);
- yyaccept = 3;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych == 'D') goto yy107;
- if(yych <= 'R') goto yy69;
- goto yy73;
+ YYDEBUG(106, *YYCURSOR);
+ yyaccept = 3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych == 'D') goto yy107;
+ if (yych <= 'R') goto yy69;
+ goto yy73;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'c') goto yy69;
} else {
- if(yych <= 'd') {
- if(yych <= 'c') goto yy69;
- } else {
- if(yych == 's') goto yy73;
- goto yy69;
- }
+ if (yych == 's') goto yy73;
+ goto yy69;
}
+ }
yy107:
- YYDEBUG(107, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy108;
- if(yych != 'a') goto yy53;
+ YYDEBUG(107, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy108;
+ if (yych != 'a') goto yy53;
yy108:
- YYDEBUG(108, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy109;
- if(yych != 'y') goto yy53;
+ YYDEBUG(108, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy109;
+ if (yych != 'y') goto yy53;
yy109:
- YYDEBUG(109, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy73;
- if(yych == 's') goto yy73;
- goto yy69;
+ YYDEBUG(109, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy73;
+ if (yych == 's') goto yy73;
+ goto yy69;
yy110:
- YYDEBUG(110, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy81;
- if(yych == 'y') goto yy81;
- goto yy53;
+ YYDEBUG(110, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy81;
+ if (yych == 'y') goto yy81;
+ goto yy53;
yy111:
- YYDEBUG(111, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'U') goto yy112;
- if(yych != 'u') goto yy53;
+ YYDEBUG(111, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'U') goto yy112;
+ if (yych != 'u') goto yy53;
yy112:
- YYDEBUG(112, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy81;
- if(yych == 'r') goto yy81;
- goto yy53;
+ YYDEBUG(112, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy81;
+ if (yych == 'r') goto yy81;
+ goto yy53;
yy113:
- YYDEBUG(113, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy118;
- if(yych == 'n') goto yy118;
- goto yy53;
+ YYDEBUG(113, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy118;
+ if (yych == 'n') goto yy118;
+ goto yy53;
yy114:
- YYDEBUG(114, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy115;
- if(yych != 'n') goto yy53;
+ YYDEBUG(114, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy115;
+ if (yych != 'n') goto yy53;
yy115:
- YYDEBUG(115, *YYCURSOR);
- yyaccept = 3;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'U') {
- if(yych == 'S') goto yy73;
- if(yych <= 'T') goto yy69;
+ YYDEBUG(115, *YYCURSOR);
+ yyaccept = 3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'U') {
+ if (yych == 'S') goto yy73;
+ if (yych <= 'T') goto yy69;
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'r') goto yy69;
+ goto yy73;
} else {
- if(yych <= 's') {
- if(yych <= 'r') goto yy69;
- goto yy73;
- } else {
- if(yych != 'u') goto yy69;
- }
+ if (yych != 'u') goto yy69;
}
- YYDEBUG(116, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy117;
- if(yych != 't') goto yy53;
+ }
+ YYDEBUG(116, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy117;
+ if (yych != 't') goto yy53;
yy117:
- YYDEBUG(117, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy81;
- if(yych == 'e') goto yy81;
- goto yy53;
+ YYDEBUG(117, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy81;
+ if (yych == 'e') goto yy81;
+ goto yy53;
yy118:
- YYDEBUG(118, *YYCURSOR);
- yyaccept = 3;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych == 'D') goto yy119;
- if(yych <= 'S') goto yy69;
- goto yy120;
+ YYDEBUG(118, *YYCURSOR);
+ yyaccept = 3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych == 'D') goto yy119;
+ if (yych <= 'S') goto yy69;
+ goto yy120;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'c') goto yy69;
} else {
- if(yych <= 'd') {
- if(yych <= 'c') goto yy69;
- } else {
- if(yych == 't') goto yy120;
- goto yy69;
- }
+ if (yych == 't') goto yy120;
+ goto yy69;
}
+ }
yy119:
- YYDEBUG(119, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy121;
- if(yych == 'a') goto yy121;
- goto yy53;
+ YYDEBUG(119, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy121;
+ if (yych == 'a') goto yy121;
+ goto yy53;
yy120:
- YYDEBUG(120, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'H') goto yy81;
- if(yych == 'h') goto yy81;
- goto yy53;
+ YYDEBUG(120, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'H') goto yy81;
+ if (yych == 'h') goto yy81;
+ goto yy53;
yy121:
- YYDEBUG(121, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy73;
- if(yych == 'y') goto yy73;
- goto yy53;
+ YYDEBUG(121, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy73;
+ if (yych == 'y') goto yy73;
+ goto yy53;
yy122:
- YYDEBUG(122, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy133;
- if(yych == 'n') goto yy133;
- goto yy53;
+ YYDEBUG(122, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy133;
+ if (yych == 'n') goto yy133;
+ goto yy53;
yy123:
- YYDEBUG(123, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy128;
- if(yych == 't') goto yy128;
- goto yy53;
+ YYDEBUG(123, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy128;
+ if (yych == 't') goto yy128;
+ goto yy53;
yy124:
- YYDEBUG(124, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy125;
- if(yych != 'c') goto yy53;
+ YYDEBUG(124, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy125;
+ if (yych != 'c') goto yy53;
yy125:
- YYDEBUG(125, *YYCURSOR);
- yyaccept = 3;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych == 'O') goto yy126;
- if(yych <= 'R') goto yy69;
- goto yy73;
+ YYDEBUG(125, *YYCURSOR);
+ yyaccept = 3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych == 'O') goto yy126;
+ if (yych <= 'R') goto yy69;
+ goto yy73;
+ } else {
+ if (yych <= 'o') {
+ if (yych <= 'n') goto yy69;
} else {
- if(yych <= 'o') {
- if(yych <= 'n') goto yy69;
- } else {
- if(yych == 's') goto yy73;
- goto yy69;
- }
+ if (yych == 's') goto yy73;
+ goto yy69;
}
+ }
yy126:
- YYDEBUG(126, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy127;
- if(yych != 'n') goto yy53;
+ YYDEBUG(126, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy127;
+ if (yych != 'n') goto yy53;
yy127:
- YYDEBUG(127, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'D') goto yy81;
- if(yych == 'd') goto yy81;
- goto yy53;
+ YYDEBUG(127, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'D') goto yy81;
+ if (yych == 'd') goto yy81;
+ goto yy53;
yy128:
- YYDEBUG(128, *YYCURSOR);
- yyaccept = 3;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'U') goto yy129;
- if(yych != 'u') goto yy69;
+ YYDEBUG(128, *YYCURSOR);
+ yyaccept = 3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'U') goto yy129;
+ if (yych != 'u') goto yy69;
yy129:
- YYDEBUG(129, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy130;
- if(yych != 'r') goto yy53;
+ YYDEBUG(129, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy130;
+ if (yych != 'r') goto yy53;
yy130:
- YYDEBUG(130, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'D') goto yy131;
- if(yych != 'd') goto yy53;
+ YYDEBUG(130, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'D') goto yy131;
+ if (yych != 'd') goto yy53;
yy131:
- YYDEBUG(131, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy132;
- if(yych != 'a') goto yy53;
+ YYDEBUG(131, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy132;
+ if (yych != 'a') goto yy53;
yy132:
- YYDEBUG(132, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy73;
- if(yych == 'y') goto yy73;
- goto yy53;
+ YYDEBUG(132, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy73;
+ if (yych == 'y') goto yy73;
+ goto yy53;
yy133:
- YYDEBUG(133, *YYCURSOR);
- yyaccept = 3;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'D') goto yy134;
- if(yych != 'd') goto yy69;
+ YYDEBUG(133, *YYCURSOR);
+ yyaccept = 3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'D') goto yy134;
+ if (yych != 'd') goto yy69;
yy134:
- YYDEBUG(134, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy135;
- if(yych != 'a') goto yy53;
+ YYDEBUG(134, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy135;
+ if (yych != 'a') goto yy53;
yy135:
- YYDEBUG(135, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy73;
- if(yych == 'y') goto yy73;
- goto yy53;
+ YYDEBUG(135, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy73;
+ if (yych == 'y') goto yy73;
+ goto yy53;
yy136:
- YYDEBUG(136, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy3;
+ YYDEBUG(136, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy3;
yy137:
- YYDEBUG(137, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- if(yych >= '{') goto yy3;
- }
+ YYDEBUG(137, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ if (yych >= '{') goto yy3;
+ }
yy138:
- YYDEBUG(138, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- if(yych >= '{') goto yy3;
- }
+ YYDEBUG(138, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ if (yych >= '{') goto yy3;
+ }
yy139:
- YYDEBUG(139, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- if(yych >= '{') goto yy3;
- }
+ YYDEBUG(139, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ if (yych >= '{') goto yy3;
+ }
yy140:
- YYDEBUG(140, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- if(yych >= '{') goto yy3;
- }
-yy141:
- YYDEBUG(141, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == ')') goto yy136;
+ YYDEBUG(140, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
goto yy3;
+ } else {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ if (yych >= '{') goto yy3;
+ }
+yy141:
+ YYDEBUG(141, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == ')') goto yy136;
+ goto yy3;
yy142:
- YYDEBUG(142, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych == '/') goto yy144;
- goto yy3;
- }
+ YYDEBUG(142, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych == '/') goto yy144;
+ goto yy3;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '^') goto yy3;
+ goto yy144;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych >= '{') goto yy3;
- }
+ if (yych <= '`') goto yy3;
+ if (yych >= '{') goto yy3;
}
+ }
yy143:
- YYDEBUG(143, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych != '/') goto yy3;
- }
+ YYDEBUG(143, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '^') goto yy3;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych != '/') goto yy3;
}
-yy144:
- YYDEBUG(144, *YYCURSOR);
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yych <= '@') goto yy53;
- if(yych >= '[') goto yy53;
- YYDEBUG(145, *YYCURSOR);
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 16) {
- goto yy146;
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '^') goto yy3;
+ } else {
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
- goto yy53;
+ }
+yy144:
+ YYDEBUG(144, *YYCURSOR);
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yych <= '@') goto yy53;
+ if (yych >= '[') goto yy53;
+ YYDEBUG(145, *YYCURSOR);
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yybm[0+yych] & 16) {
+ goto yy146;
+ }
+ goto yy53;
yy146:
- YYDEBUG(146, *YYCURSOR);
- yyaccept = 0;
- YYMARKER = ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- YYDEBUG(147, *YYCURSOR);
- if(yybm[0+yych] & 16) {
- goto yy146;
- }
- if(yych == '/') goto yy144;
- if(yych == '_') goto yy144;
- goto yy3;
+ YYDEBUG(146, *YYCURSOR);
+ yyaccept = 0;
+ YYMARKER = ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ YYDEBUG(147, *YYCURSOR);
+ if (yybm[0+yych] & 16) {
+ goto yy146;
+ }
+ if (yych == '/') goto yy144;
+ if (yych == '_') goto yy144;
+ goto yy3;
yy148:
- YYDEBUG(148, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych == '/') goto yy144;
- goto yy3;
- }
+ YYDEBUG(148, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych == '/') goto yy144;
+ goto yy3;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '^') goto yy3;
+ goto yy144;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych >= '{') goto yy3;
- }
+ if (yych <= '`') goto yy3;
+ if (yych >= '{') goto yy3;
}
+ }
yy149:
- YYDEBUG(149, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych == '/') goto yy144;
- goto yy3;
- }
+ YYDEBUG(149, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych == '/') goto yy144;
+ goto yy3;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '^') goto yy3;
+ goto yy144;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych >= '{') goto yy3;
- }
+ if (yych <= '`') goto yy3;
+ if (yych >= '{') goto yy3;
}
+ }
yy150:
- YYDEBUG(150, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == ')') goto yy136;
- if(yych <= '.') goto yy3;
+ YYDEBUG(150, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == ')') goto yy136;
+ if (yych <= '.') goto yy3;
+ goto yy144;
+ } else {
+ if (yych <= '_') {
+ if (yych <= '^') goto yy3;
goto yy144;
} else {
- if(yych <= '_') {
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych >= '{') goto yy3;
- }
+ if (yych <= '`') goto yy3;
+ if (yych >= '{') goto yy3;
}
+ }
yy151:
- YYDEBUG(151, *YYCURSOR);
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
+ YYDEBUG(151, *YYCURSOR);
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
yy152:
- YYDEBUG(152, *YYCURSOR);
- if(yych <= '^') {
- if(yych == '/') goto yy144;
- goto yy53;
+ YYDEBUG(152, *YYCURSOR);
+ if (yych <= '^') {
+ if (yych == '/') goto yy144;
+ goto yy53;
+ } else {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy53;
+ if (yych <= 'z') goto yy151;
+ goto yy53;
+ }
+yy153:
+ YYDEBUG(153, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'Z') goto yy137;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy137;
+ goto yy3;
+ }
+yy154:
+ YYDEBUG(154, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy53;
- if(yych <= 'z') goto yy151;
- goto yy53;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy138;
}
-yy153:
- YYDEBUG(153, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
} else {
- if(yych <= 'Z') goto yy137;
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy137;
+ if (yych <= 'e') goto yy155;
+ if (yych <= 'z') goto yy138;
goto yy3;
}
-yy154:
- YYDEBUG(154, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy138;
- }
+ }
+yy155:
+ YYDEBUG(155, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'V') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'e') goto yy155;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'U') goto yy139;
}
-yy155:
- YYDEBUG(155, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'V') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'U') goto yy139;
- }
+ } else {
+ if (yych <= 'u') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
} else {
- if(yych <= 'u') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'v') goto yy156;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= 'v') goto yy156;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
+ }
yy156:
- YYDEBUG(156, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'I') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'H') goto yy140;
- }
+ YYDEBUG(156, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'I') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'h') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'i') goto yy157;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'H') goto yy140;
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'i') goto yy157;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy157:
- YYDEBUG(157, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'N') goto yy141;
- }
+ YYDEBUG(157, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'n') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'o') goto yy158;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'N') goto yy141;
}
-yy158:
- YYDEBUG(158, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych == ')') goto yy136;
- goto yy3;
+ } else {
+ if (yych <= 'n') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
} else {
- if(yych <= 'U') goto yy159;
- if(yych != 'u') goto yy3;
+ if (yych <= 'o') goto yy158;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
+yy158:
+ YYDEBUG(158, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'U') goto yy159;
+ if (yych != 'u') goto yy3;
+ }
yy159:
- YYDEBUG(159, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy160;
- if(yych != 's') goto yy53;
+ YYDEBUG(159, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy160;
+ if (yych != 's') goto yy53;
yy160:
- YYDEBUG(160, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 0x09) goto yy161;
- if(yych != ' ') goto yy53;
+ YYDEBUG(160, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '\t') goto yy161;
+ if (yych != ' ') goto yy53;
yy161:
- YYDEBUG(161, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 11) YYFILL(11);
- yych = *YYCURSOR;
- YYDEBUG(162, *YYCURSOR);
- if(yych <= 'W') {
- if(yych <= 'F') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy161;
- if(yych <= 0x1F) goto yy53;
- goto yy161;
- } else {
- if(yych == 'D') goto yy166;
- if(yych <= 'E') goto yy53;
- goto yy168;
- }
+ YYDEBUG(161, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 11) YYFILL(11);
+ yych = *YYCURSOR;
+ YYDEBUG(162, *YYCURSOR);
+ if (yych <= 'W') {
+ if (yych <= 'F') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy161;
+ if (yych <= 0x1F) goto yy53;
+ goto yy161;
} else {
- if(yych <= 'M') {
- if(yych == 'H') goto yy165;
- if(yych <= 'L') goto yy53;
- goto yy164;
- } else {
- if(yych <= 'S') {
- if(yych <= 'R') goto yy53;
- } else {
- if(yych <= 'T') goto yy170;
- if(yych <= 'V') goto yy53;
- goto yy167;
- }
- }
+ if (yych == 'D') goto yy166;
+ if (yych <= 'E') goto yy53;
+ goto yy168;
}
} else {
- if(yych <= 'l') {
- if(yych <= 'd') {
- if(yych == 'Y') goto yy169;
- if(yych <= 'c') goto yy53;
- goto yy166;
- } else {
- if(yych <= 'f') {
- if(yych <= 'e') goto yy53;
- goto yy168;
- } else {
- if(yych == 'h') goto yy165;
- goto yy53;
- }
- }
+ if (yych <= 'M') {
+ if (yych == 'H') goto yy165;
+ if (yych <= 'L') goto yy53;
+ goto yy164;
} else {
- if(yych <= 't') {
- if(yych <= 'm') goto yy164;
- if(yych <= 'r') goto yy53;
- if(yych >= 't') goto yy170;
+ if (yych <= 'S') {
+ if (yych <= 'R') goto yy53;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy53;
- goto yy167;
- } else {
- if(yych == 'y') goto yy169;
- goto yy53;
- }
+ if (yych <= 'T') goto yy170;
+ if (yych <= 'V') goto yy53;
+ goto yy167;
}
}
}
- YYDEBUG(163, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= 'D') {
- if(yych == 'A') goto yy228;
- goto yy53;
- } else {
- if(yych <= 'E') goto yy229;
- if(yych <= 'T') goto yy53;
- goto yy227;
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'd') {
+ if (yych == 'Y') goto yy169;
+ if (yych <= 'c') goto yy53;
+ goto yy166;
+ } else {
+ if (yych <= 'f') {
+ if (yych <= 'e') goto yy53;
+ goto yy168;
+ } else {
+ if (yych == 'h') goto yy165;
+ goto yy53;
+ }
}
} else {
- if(yych <= 'd') {
- if(yych == 'a') goto yy228;
- goto yy53;
+ if (yych <= 't') {
+ if (yych <= 'm') goto yy164;
+ if (yych <= 'r') goto yy53;
+ if (yych >= 't') goto yy170;
} else {
- if(yych <= 'e') goto yy229;
- if(yych == 'u') goto yy227;
- goto yy53;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy53;
+ goto yy167;
+ } else {
+ if (yych == 'y') goto yy169;
+ goto yy53;
+ }
}
}
+ }
+ YYDEBUG(163, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= 'D') {
+ if (yych == 'A') goto yy228;
+ goto yy53;
+ } else {
+ if (yych <= 'E') goto yy229;
+ if (yych <= 'T') goto yy53;
+ goto yy227;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych == 'a') goto yy228;
+ goto yy53;
+ } else {
+ if (yych <= 'e') goto yy229;
+ if (yych == 'u') goto yy227;
+ goto yy53;
+ }
+ }
yy164:
- YYDEBUG(164, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych == 'I') goto yy219;
- if(yych <= 'N') goto yy53;
- goto yy218;
- } else {
- if(yych <= 'i') {
- if(yych <= 'h') goto yy53;
- goto yy219;
- } else {
- if(yych == 'o') goto yy218;
- goto yy53;
- }
+ YYDEBUG(164, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych == 'I') goto yy219;
+ if (yych <= 'N') goto yy53;
+ goto yy218;
+ } else {
+ if (yych <= 'i') {
+ if (yych <= 'h') goto yy53;
+ goto yy219;
+ } else {
+ if (yych == 'o') goto yy218;
+ goto yy53;
}
+ }
yy165:
- YYDEBUG(165, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'O') goto yy216;
- if(yych == 'o') goto yy216;
- goto yy53;
+ YYDEBUG(165, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'O') goto yy216;
+ if (yych == 'o') goto yy216;
+ goto yy53;
yy166:
- YYDEBUG(166, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy215;
- if(yych == 'a') goto yy215;
- goto yy53;
+ YYDEBUG(166, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy215;
+ if (yych == 'a') goto yy215;
+ goto yy53;
yy167:
- YYDEBUG(167, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy203;
- if(yych == 'e') goto yy203;
- goto yy53;
+ YYDEBUG(167, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy203;
+ if (yych == 'e') goto yy203;
+ goto yy53;
yy168:
- YYDEBUG(168, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych == 'O') goto yy188;
- if(yych <= 'Q') goto yy53;
- goto yy187;
- } else {
- if(yych <= 'o') {
- if(yych <= 'n') goto yy53;
- goto yy188;
- } else {
- if(yych == 'r') goto yy187;
- goto yy53;
- }
+ YYDEBUG(168, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych == 'O') goto yy188;
+ if (yych <= 'Q') goto yy53;
+ goto yy187;
+ } else {
+ if (yych <= 'o') {
+ if (yych <= 'n') goto yy53;
+ goto yy188;
+ } else {
+ if (yych == 'r') goto yy187;
+ goto yy53;
}
+ }
yy169:
- YYDEBUG(169, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy184;
- if(yych == 'e') goto yy184;
- goto yy53;
+ YYDEBUG(169, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy184;
+ if (yych == 'e') goto yy184;
+ goto yy53;
yy170:
- YYDEBUG(170, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'H') goto yy171;
- if(yych <= 'T') goto yy53;
- goto yy172;
+ YYDEBUG(170, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'H') goto yy171;
+ if (yych <= 'T') goto yy53;
+ goto yy172;
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'g') goto yy53;
} else {
- if(yych <= 'h') {
- if(yych <= 'g') goto yy53;
- } else {
- if(yych == 'u') goto yy172;
- goto yy53;
- }
+ if (yych == 'u') goto yy172;
+ goto yy53;
}
+ }
yy171:
- YYDEBUG(171, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'U') goto yy179;
- if(yych == 'u') goto yy179;
- goto yy53;
+ YYDEBUG(171, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'U') goto yy179;
+ if (yych == 'u') goto yy179;
+ goto yy53;
yy172:
- YYDEBUG(172, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy173;
- if(yych != 'e') goto yy53;
+ YYDEBUG(172, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy173;
+ if (yych != 'e') goto yy53;
yy173:
- YYDEBUG(173, *YYCURSOR);
- yyaccept = 4;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'S') goto yy175;
- if(yych == 's') goto yy175;
+ YYDEBUG(173, *YYCURSOR);
+ yyaccept = 4;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'S') goto yy175;
+ if (yych == 's') goto yy175;
yy174:
- YYDEBUG(174, *YYCURSOR);
-#line 1416 "ext/date/lib/parse_date.re"
- {
+ YYDEBUG(174, *YYCURSOR);
+#line 1419 "ext/date/lib/parse_date.re"
+ {
timelib_sll i;
int behavior = 0;
DEBUG_OUTPUT("relativetext");
@@ -3588,1183 +3587,1183 @@ yy174:
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
-#line 3592 "ext/date/lib/parse_date.c"
+#line 3591 "ext/date/lib/parse_date.c"
yy175:
- YYDEBUG(175, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'D') goto yy176;
- if(yych != 'd') goto yy53;
+ YYDEBUG(175, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'D') goto yy176;
+ if (yych != 'd') goto yy53;
yy176:
- YYDEBUG(176, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy177;
- if(yych != 'a') goto yy53;
+ YYDEBUG(176, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy177;
+ if (yych != 'a') goto yy53;
yy177:
- YYDEBUG(177, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy178;
- if(yych != 'y') goto yy53;
+ YYDEBUG(177, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy178;
+ if (yych != 'y') goto yy53;
yy178:
- YYDEBUG(178, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy174;
+ YYDEBUG(178, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy174;
yy179:
- YYDEBUG(179, *YYCURSOR);
- yyaccept = 4;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'R') goto yy180;
- if(yych != 'r') goto yy174;
+ YYDEBUG(179, *YYCURSOR);
+ yyaccept = 4;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'R') goto yy180;
+ if (yych != 'r') goto yy174;
yy180:
- YYDEBUG(180, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy181;
- if(yych != 's') goto yy53;
+ YYDEBUG(180, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy181;
+ if (yych != 's') goto yy53;
yy181:
- YYDEBUG(181, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'D') goto yy182;
- if(yych != 'd') goto yy53;
+ YYDEBUG(181, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'D') goto yy182;
+ if (yych != 'd') goto yy53;
yy182:
- YYDEBUG(182, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy183;
- if(yych != 'a') goto yy53;
+ YYDEBUG(182, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy183;
+ if (yych != 'a') goto yy53;
yy183:
- YYDEBUG(183, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy178;
- if(yych == 'y') goto yy178;
- goto yy53;
+ YYDEBUG(183, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy178;
+ if (yych == 'y') goto yy178;
+ goto yy53;
yy184:
- YYDEBUG(184, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy185;
- if(yych != 'a') goto yy53;
+ YYDEBUG(184, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy185;
+ if (yych != 'a') goto yy53;
yy185:
- YYDEBUG(185, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy186;
- if(yych != 'r') goto yy53;
+ YYDEBUG(185, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy186;
+ if (yych != 'r') goto yy53;
yy186:
- YYDEBUG(186, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy178;
- if(yych == 's') goto yy178;
- goto yy174;
+ YYDEBUG(186, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy178;
+ if (yych == 's') goto yy178;
+ goto yy174;
yy187:
- YYDEBUG(187, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'I') goto yy200;
- if(yych == 'i') goto yy200;
- goto yy53;
+ YYDEBUG(187, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'I') goto yy200;
+ if (yych == 'i') goto yy200;
+ goto yy53;
yy188:
- YYDEBUG(188, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy189;
- if(yych != 'r') goto yy53;
+ YYDEBUG(188, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy189;
+ if (yych != 'r') goto yy53;
yy189:
- YYDEBUG(189, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy190;
- if(yych != 't') goto yy53;
+ YYDEBUG(189, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy190;
+ if (yych != 't') goto yy53;
yy190:
- YYDEBUG(190, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych == 'H') goto yy192;
- if(yych <= 'M') goto yy53;
+ YYDEBUG(190, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych == 'H') goto yy192;
+ if (yych <= 'M') goto yy53;
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'g') goto yy53;
+ goto yy192;
} else {
- if(yych <= 'h') {
- if(yych <= 'g') goto yy53;
- goto yy192;
- } else {
- if(yych != 'n') goto yy53;
- }
+ if (yych != 'n') goto yy53;
}
- YYDEBUG(191, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'I') goto yy197;
- if(yych == 'i') goto yy197;
- goto yy53;
+ }
+ YYDEBUG(191, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'I') goto yy197;
+ if (yych == 'i') goto yy197;
+ goto yy53;
yy192:
- YYDEBUG(192, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy193;
- if(yych != 'n') goto yy53;
+ YYDEBUG(192, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy193;
+ if (yych != 'n') goto yy53;
yy193:
- YYDEBUG(193, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'I') goto yy194;
- if(yych != 'i') goto yy53;
+ YYDEBUG(193, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'I') goto yy194;
+ if (yych != 'i') goto yy53;
yy194:
- YYDEBUG(194, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'G') goto yy195;
- if(yych != 'g') goto yy53;
+ YYDEBUG(194, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'G') goto yy195;
+ if (yych != 'g') goto yy53;
yy195:
- YYDEBUG(195, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'H') goto yy196;
- if(yych != 'h') goto yy53;
+ YYDEBUG(195, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'H') goto yy196;
+ if (yych != 'h') goto yy53;
yy196:
- YYDEBUG(196, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy186;
- if(yych == 't') goto yy186;
- goto yy53;
+ YYDEBUG(196, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy186;
+ if (yych == 't') goto yy186;
+ goto yy53;
yy197:
- YYDEBUG(197, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'G') goto yy198;
- if(yych != 'g') goto yy53;
+ YYDEBUG(197, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'G') goto yy198;
+ if (yych != 'g') goto yy53;
yy198:
- YYDEBUG(198, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'H') goto yy199;
- if(yych != 'h') goto yy53;
+ YYDEBUG(198, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'H') goto yy199;
+ if (yych != 'h') goto yy53;
yy199:
- YYDEBUG(199, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy186;
- if(yych == 't') goto yy186;
- goto yy53;
+ YYDEBUG(199, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy186;
+ if (yych == 't') goto yy186;
+ goto yy53;
yy200:
- YYDEBUG(200, *YYCURSOR);
- yyaccept = 4;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'D') goto yy201;
- if(yych != 'd') goto yy174;
+ YYDEBUG(200, *YYCURSOR);
+ yyaccept = 4;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'D') goto yy201;
+ if (yych != 'd') goto yy174;
yy201:
- YYDEBUG(201, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy202;
- if(yych != 'a') goto yy53;
+ YYDEBUG(201, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy202;
+ if (yych != 'a') goto yy53;
yy202:
- YYDEBUG(202, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy178;
- if(yych == 'y') goto yy178;
- goto yy53;
+ YYDEBUG(202, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy178;
+ if (yych == 'y') goto yy178;
+ goto yy53;
yy203:
- YYDEBUG(203, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= 'C') goto yy53;
- if(yych <= 'D') goto yy205;
- } else {
- if(yych <= 'c') goto yy53;
- if(yych <= 'd') goto yy205;
- if(yych >= 'f') goto yy53;
- }
- YYDEBUG(204, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'K') goto yy211;
- if(yych == 'k') goto yy211;
- goto yy53;
+ YYDEBUG(203, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= 'C') goto yy53;
+ if (yych <= 'D') goto yy205;
+ } else {
+ if (yych <= 'c') goto yy53;
+ if (yych <= 'd') goto yy205;
+ if (yych >= 'f') goto yy53;
+ }
+ YYDEBUG(204, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'K') goto yy211;
+ if (yych == 'k') goto yy211;
+ goto yy53;
yy205:
- YYDEBUG(205, *YYCURSOR);
- yyaccept = 4;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'N') goto yy206;
- if(yych != 'n') goto yy174;
+ YYDEBUG(205, *YYCURSOR);
+ yyaccept = 4;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'N') goto yy206;
+ if (yych != 'n') goto yy174;
yy206:
- YYDEBUG(206, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy207;
- if(yych != 'e') goto yy53;
+ YYDEBUG(206, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy207;
+ if (yych != 'e') goto yy53;
yy207:
- YYDEBUG(207, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy208;
- if(yych != 's') goto yy53;
+ YYDEBUG(207, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy208;
+ if (yych != 's') goto yy53;
yy208:
- YYDEBUG(208, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'D') goto yy209;
- if(yych != 'd') goto yy53;
+ YYDEBUG(208, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'D') goto yy209;
+ if (yych != 'd') goto yy53;
yy209:
- YYDEBUG(209, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy210;
- if(yych != 'a') goto yy53;
+ YYDEBUG(209, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy210;
+ if (yych != 'a') goto yy53;
yy210:
- YYDEBUG(210, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy178;
- if(yych == 'y') goto yy178;
- goto yy53;
+ YYDEBUG(210, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy178;
+ if (yych == 'y') goto yy178;
+ goto yy53;
yy211:
- YYDEBUG(211, *YYCURSOR);
- yyaccept = 4;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych == 'D') goto yy212;
- if(yych <= 'R') goto yy174;
- goto yy178;
+ YYDEBUG(211, *YYCURSOR);
+ yyaccept = 4;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych == 'D') goto yy212;
+ if (yych <= 'R') goto yy174;
+ goto yy178;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'c') goto yy174;
} else {
- if(yych <= 'd') {
- if(yych <= 'c') goto yy174;
- } else {
- if(yych == 's') goto yy178;
- goto yy174;
- }
+ if (yych == 's') goto yy178;
+ goto yy174;
}
+ }
yy212:
- YYDEBUG(212, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy213;
- if(yych != 'a') goto yy53;
+ YYDEBUG(212, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy213;
+ if (yych != 'a') goto yy53;
yy213:
- YYDEBUG(213, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy214;
- if(yych != 'y') goto yy53;
+ YYDEBUG(213, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy214;
+ if (yych != 'y') goto yy53;
yy214:
- YYDEBUG(214, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy178;
- if(yych == 's') goto yy178;
- goto yy174;
+ YYDEBUG(214, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy178;
+ if (yych == 's') goto yy178;
+ goto yy174;
yy215:
- YYDEBUG(215, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy186;
- if(yych == 'y') goto yy186;
- goto yy53;
+ YYDEBUG(215, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy186;
+ if (yych == 'y') goto yy186;
+ goto yy53;
yy216:
- YYDEBUG(216, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'U') goto yy217;
- if(yych != 'u') goto yy53;
+ YYDEBUG(216, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'U') goto yy217;
+ if (yych != 'u') goto yy53;
yy217:
- YYDEBUG(217, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy186;
- if(yych == 'r') goto yy186;
- goto yy53;
+ YYDEBUG(217, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy186;
+ if (yych == 'r') goto yy186;
+ goto yy53;
yy218:
- YYDEBUG(218, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy223;
- if(yych == 'n') goto yy223;
- goto yy53;
+ YYDEBUG(218, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy223;
+ if (yych == 'n') goto yy223;
+ goto yy53;
yy219:
- YYDEBUG(219, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy220;
- if(yych != 'n') goto yy53;
+ YYDEBUG(219, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy220;
+ if (yych != 'n') goto yy53;
yy220:
- YYDEBUG(220, *YYCURSOR);
- yyaccept = 4;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'U') {
- if(yych == 'S') goto yy178;
- if(yych <= 'T') goto yy174;
+ YYDEBUG(220, *YYCURSOR);
+ yyaccept = 4;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'U') {
+ if (yych == 'S') goto yy178;
+ if (yych <= 'T') goto yy174;
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'r') goto yy174;
+ goto yy178;
} else {
- if(yych <= 's') {
- if(yych <= 'r') goto yy174;
- goto yy178;
- } else {
- if(yych != 'u') goto yy174;
- }
+ if (yych != 'u') goto yy174;
}
- YYDEBUG(221, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy222;
- if(yych != 't') goto yy53;
+ }
+ YYDEBUG(221, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy222;
+ if (yych != 't') goto yy53;
yy222:
- YYDEBUG(222, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy186;
- if(yych == 'e') goto yy186;
- goto yy53;
+ YYDEBUG(222, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy186;
+ if (yych == 'e') goto yy186;
+ goto yy53;
yy223:
- YYDEBUG(223, *YYCURSOR);
- yyaccept = 4;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych == 'D') goto yy224;
- if(yych <= 'S') goto yy174;
- goto yy225;
+ YYDEBUG(223, *YYCURSOR);
+ yyaccept = 4;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych == 'D') goto yy224;
+ if (yych <= 'S') goto yy174;
+ goto yy225;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'c') goto yy174;
} else {
- if(yych <= 'd') {
- if(yych <= 'c') goto yy174;
- } else {
- if(yych == 't') goto yy225;
- goto yy174;
- }
+ if (yych == 't') goto yy225;
+ goto yy174;
}
+ }
yy224:
- YYDEBUG(224, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy226;
- if(yych == 'a') goto yy226;
- goto yy53;
+ YYDEBUG(224, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy226;
+ if (yych == 'a') goto yy226;
+ goto yy53;
yy225:
- YYDEBUG(225, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'H') goto yy186;
- if(yych == 'h') goto yy186;
- goto yy53;
+ YYDEBUG(225, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'H') goto yy186;
+ if (yych == 'h') goto yy186;
+ goto yy53;
yy226:
- YYDEBUG(226, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy178;
- if(yych == 'y') goto yy178;
- goto yy53;
+ YYDEBUG(226, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy178;
+ if (yych == 'y') goto yy178;
+ goto yy53;
yy227:
- YYDEBUG(227, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy238;
- if(yych == 'n') goto yy238;
- goto yy53;
+ YYDEBUG(227, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy238;
+ if (yych == 'n') goto yy238;
+ goto yy53;
yy228:
- YYDEBUG(228, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy233;
- if(yych == 't') goto yy233;
- goto yy53;
+ YYDEBUG(228, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy233;
+ if (yych == 't') goto yy233;
+ goto yy53;
yy229:
- YYDEBUG(229, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy230;
- if(yych != 'c') goto yy53;
+ YYDEBUG(229, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy230;
+ if (yych != 'c') goto yy53;
yy230:
- YYDEBUG(230, *YYCURSOR);
- yyaccept = 4;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych == 'O') goto yy231;
- if(yych <= 'R') goto yy174;
- goto yy178;
+ YYDEBUG(230, *YYCURSOR);
+ yyaccept = 4;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych == 'O') goto yy231;
+ if (yych <= 'R') goto yy174;
+ goto yy178;
+ } else {
+ if (yych <= 'o') {
+ if (yych <= 'n') goto yy174;
} else {
- if(yych <= 'o') {
- if(yych <= 'n') goto yy174;
- } else {
- if(yych == 's') goto yy178;
- goto yy174;
- }
+ if (yych == 's') goto yy178;
+ goto yy174;
}
+ }
yy231:
- YYDEBUG(231, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy232;
- if(yych != 'n') goto yy53;
+ YYDEBUG(231, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy232;
+ if (yych != 'n') goto yy53;
yy232:
- YYDEBUG(232, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'D') goto yy186;
- if(yych == 'd') goto yy186;
- goto yy53;
+ YYDEBUG(232, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'D') goto yy186;
+ if (yych == 'd') goto yy186;
+ goto yy53;
yy233:
- YYDEBUG(233, *YYCURSOR);
- yyaccept = 4;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'U') goto yy234;
- if(yych != 'u') goto yy174;
+ YYDEBUG(233, *YYCURSOR);
+ yyaccept = 4;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'U') goto yy234;
+ if (yych != 'u') goto yy174;
yy234:
- YYDEBUG(234, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy235;
- if(yych != 'r') goto yy53;
+ YYDEBUG(234, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy235;
+ if (yych != 'r') goto yy53;
yy235:
- YYDEBUG(235, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'D') goto yy236;
- if(yych != 'd') goto yy53;
+ YYDEBUG(235, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'D') goto yy236;
+ if (yych != 'd') goto yy53;
yy236:
- YYDEBUG(236, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy237;
- if(yych != 'a') goto yy53;
+ YYDEBUG(236, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy237;
+ if (yych != 'a') goto yy53;
yy237:
- YYDEBUG(237, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy178;
- if(yych == 'y') goto yy178;
- goto yy53;
+ YYDEBUG(237, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy178;
+ if (yych == 'y') goto yy178;
+ goto yy53;
yy238:
- YYDEBUG(238, *YYCURSOR);
- yyaccept = 4;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'D') goto yy239;
- if(yych != 'd') goto yy174;
+ YYDEBUG(238, *YYCURSOR);
+ yyaccept = 4;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'D') goto yy239;
+ if (yych != 'd') goto yy174;
yy239:
- YYDEBUG(239, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy240;
- if(yych != 'a') goto yy53;
+ YYDEBUG(239, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy240;
+ if (yych != 'a') goto yy53;
yy240:
- YYDEBUG(240, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy178;
- if(yych == 'y') goto yy178;
- goto yy53;
+ YYDEBUG(240, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy178;
+ if (yych == 'y') goto yy178;
+ goto yy53;
yy241:
- YYDEBUG(241, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy138;
- goto yy155;
- }
+ YYDEBUG(241, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'e') goto yy242;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy138;
+ goto yy155;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'e') goto yy242;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
+ }
yy242:
- YYDEBUG(242, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'U') goto yy139;
- goto yy156;
- }
+ YYDEBUG(242, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'v') goto yy243;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'U') goto yy139;
+ goto yy156;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'v') goto yy243;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy243:
- YYDEBUG(243, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'I') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'H') goto yy140;
- goto yy157;
- }
+ YYDEBUG(243, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'I') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'i') goto yy244;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'H') goto yy140;
+ goto yy157;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'i') goto yy244;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy244:
- YYDEBUG(244, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'O') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'N') goto yy141;
- goto yy158;
- }
+ YYDEBUG(244, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'O') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'o') goto yy245;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'N') goto yy141;
+ goto yy158;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'o') goto yy245;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
+ }
+ }
yy245:
- YYDEBUG(245, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'U') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'T') goto yy3;
- goto yy159;
- }
+ YYDEBUG(245, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'U') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'u') goto yy246;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'T') goto yy3;
+ goto yy159;
}
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'u') goto yy246;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
+ }
+ }
yy246:
- YYDEBUG(246, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy160;
- if(yych != 's') goto yy152;
+ YYDEBUG(246, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy160;
+ if (yych != 's') goto yy152;
yy247:
- YYDEBUG(247, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '.') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy53;
- goto yy161;
- } else {
- if(yych == ' ') goto yy161;
- goto yy53;
- }
+ YYDEBUG(247, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '.') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy53;
+ goto yy161;
+ } else {
+ if (yych == ' ') goto yy161;
+ goto yy53;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= '/') goto yy144;
+ if (yych <= '^') goto yy53;
+ goto yy144;
} else {
- if(yych <= '_') {
- if(yych <= '/') goto yy144;
- if(yych <= '^') goto yy53;
- goto yy144;
- } else {
- if(yych <= '`') goto yy53;
- if(yych <= 'z') goto yy151;
- goto yy53;
- }
+ if (yych <= '`') goto yy53;
+ if (yych <= 'z') goto yy151;
+ goto yy53;
}
+ }
yy248:
- YYDEBUG(248, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'S') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy138;
- }
+ YYDEBUG(248, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'S') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'r') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 's') goto yy249;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy138;
}
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 's') goto yy249;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
yy249:
- YYDEBUG(249, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- }
+ YYDEBUG(249, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 't') goto yy250;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
+ }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 't') goto yy250;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
+ }
yy250:
- YYDEBUG(250, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy3;
- goto yy161;
- } else {
- if(yych == ' ') goto yy161;
- goto yy3;
- }
+ YYDEBUG(250, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy3;
+ goto yy161;
+ } else {
+ if (yych == ' ') goto yy161;
+ goto yy3;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy140;
} else {
- if(yych <= 'Z') {
- if(yych <= ')') goto yy136;
- if(yych <= '@') goto yy3;
- goto yy140;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy251:
- YYDEBUG(251, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy138;
- goto yy249;
- }
+ YYDEBUG(251, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 's') goto yy252;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy138;
+ goto yy249;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 's') goto yy252;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
+ }
+ }
yy252:
- YYDEBUG(252, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- goto yy250;
- }
+ YYDEBUG(252, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy253;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
+ goto yy250;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy253;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy253:
- YYDEBUG(253, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy161;
- goto yy3;
- } else {
- if(yych <= ' ') goto yy161;
- if(yych == ')') goto yy136;
- goto yy3;
- }
+ YYDEBUG(253, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy161;
+ goto yy3;
} else {
- if(yych <= '^') {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'Z') goto yy140;
- goto yy3;
- } else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= ' ') goto yy161;
+ if (yych == ')') goto yy136;
+ goto yy3;
+ }
+ } else {
+ if (yych <= '^') {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Z') goto yy140;
+ goto yy3;
+ } else {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy254:
- YYDEBUG(254, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'G') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'F') goto yy138;
- goto yy261;
- }
+ YYDEBUG(254, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'G') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'f') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'g') goto yy261;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'F') goto yy138;
+ goto yy261;
+ }
+ } else {
+ if (yych <= 'f') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'g') goto yy261;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
+ }
yy255:
- YYDEBUG(255, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy138;
- }
+ YYDEBUG(255, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'e') goto yy256;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy138;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'e') goto yy256;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
+ }
yy256:
- YYDEBUG(256, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'V') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'U') goto yy139;
- }
+ YYDEBUG(256, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'V') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'u') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'v') goto yy257;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'U') goto yy139;
+ }
+ } else {
+ if (yych <= 'u') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 'v') goto yy257;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
+ }
yy257:
- YYDEBUG(257, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy140;
- }
+ YYDEBUG(257, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'e') goto yy258;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy140;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'e') goto yy258;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy258:
- YYDEBUG(258, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy141;
- }
+ YYDEBUG(258, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'm') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'n') goto yy259;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy141;
}
-yy259:
- YYDEBUG(259, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych == ')') goto yy136;
- goto yy3;
+ } else {
+ if (yych <= 'm') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
} else {
- if(yych <= 'T') goto yy260;
- if(yych != 't') goto yy3;
+ if (yych <= 'n') goto yy259;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
+yy259:
+ YYDEBUG(259, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'T') goto yy260;
+ if (yych != 't') goto yy3;
+ }
yy260:
- YYDEBUG(260, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'H') goto yy160;
- if(yych == 'h') goto yy160;
- goto yy53;
+ YYDEBUG(260, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'H') goto yy160;
+ if (yych == 'h') goto yy160;
+ goto yy53;
yy261:
- YYDEBUG(261, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'H') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy139;
- }
+ YYDEBUG(261, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'H') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'g') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'h') goto yy262;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy139;
+ }
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 'h') goto yy262;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
+ }
yy262:
- YYDEBUG(262, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy140;
- }
+ YYDEBUG(262, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 't') goto yy263;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy140;
+ }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 't') goto yy263;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy263:
- YYDEBUG(263, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy3;
- goto yy161;
- } else {
- if(yych == ' ') goto yy161;
- goto yy3;
- }
+ YYDEBUG(263, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy3;
+ goto yy161;
+ } else {
+ if (yych == ' ') goto yy161;
+ goto yy3;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy141;
} else {
- if(yych <= 'Z') {
- if(yych <= ')') goto yy136;
- if(yych <= '@') goto yy3;
- goto yy141;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
yy264:
- YYDEBUG(264, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'G') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'F') goto yy138;
- goto yy261;
- }
+ YYDEBUG(264, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'G') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'g') goto yy271;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'F') goto yy138;
+ goto yy261;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'g') goto yy271;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
+ }
+ }
yy265:
- YYDEBUG(265, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy138;
- goto yy256;
- }
+ YYDEBUG(265, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'e') goto yy266;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy138;
+ goto yy256;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'e') goto yy266;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
+ }
yy266:
- YYDEBUG(266, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'U') goto yy139;
- goto yy257;
- }
+ YYDEBUG(266, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'v') goto yy267;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'U') goto yy139;
+ goto yy257;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'v') goto yy267;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
+ }
+ }
yy267:
- YYDEBUG(267, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy140;
- goto yy258;
- }
+ YYDEBUG(267, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'e') goto yy268;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy140;
+ goto yy258;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'e') goto yy268;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy268:
- YYDEBUG(268, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy141;
- goto yy259;
- }
+ YYDEBUG(268, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'n') goto yy269;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy141;
+ goto yy259;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'n') goto yy269;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
+ }
+ }
yy269:
- YYDEBUG(269, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'S') goto yy3;
- goto yy260;
- }
+ YYDEBUG(269, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy270;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'S') goto yy3;
+ goto yy260;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy270;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
+ }
yy270:
- YYDEBUG(270, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'H') goto yy160;
- if(yych == 'h') goto yy247;
- goto yy152;
+ YYDEBUG(270, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'H') goto yy160;
+ if (yych == 'h') goto yy247;
+ goto yy152;
yy271:
- YYDEBUG(271, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'H') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy139;
- goto yy262;
- }
+ YYDEBUG(271, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'H') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'h') goto yy272;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy139;
+ goto yy262;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'h') goto yy272;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy272:
- YYDEBUG(272, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy140;
- goto yy263;
- }
+ YYDEBUG(272, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy273;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy140;
+ goto yy263;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy273;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy273:
- YYDEBUG(273, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy161;
- goto yy3;
- } else {
- if(yych <= ' ') goto yy161;
- if(yych == ')') goto yy136;
- goto yy3;
- }
+ YYDEBUG(273, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy161;
+ goto yy3;
} else {
- if(yych <= '^') {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'Z') goto yy141;
- goto yy3;
- } else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= ' ') goto yy161;
+ if (yych == ')') goto yy136;
+ goto yy3;
+ }
+ } else {
+ if (yych <= '^') {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Z') goto yy141;
+ goto yy3;
+ } else {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy274:
- YYDEBUG(274, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= 'C') goto yy138;
- if(yych >= 'E') goto yy277;
- }
+ YYDEBUG(274, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'c') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'd') goto yy275;
- if(yych <= 'e') goto yy277;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= 'C') goto yy138;
+ if (yych >= 'E') goto yy277;
+ }
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'd') goto yy275;
+ if (yych <= 'e') goto yy277;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
+ }
yy275:
- YYDEBUG(275, *YYCURSOR);
- ++YYCURSOR;
- if((yych = *YYCURSOR) <= 'N') {
- if(yych <= ')') {
- if(yych >= ')') goto yy136;
- } else {
- if(yych <= '@') goto yy276;
- if(yych <= 'M') goto yy139;
- goto yy283;
- }
+ YYDEBUG(275, *YYCURSOR);
+ ++YYCURSOR;
+ if ((yych = *YYCURSOR) <= 'N') {
+ if (yych <= ')') {
+ if (yych >= ')') goto yy136;
} else {
- if(yych <= 'm') {
- if(yych <= 'Z') goto yy139;
- if(yych >= 'a') goto yy139;
- } else {
- if(yych <= 'n') goto yy283;
- if(yych <= 'z') goto yy139;
- }
+ if (yych <= '@') goto yy276;
+ if (yych <= 'M') goto yy139;
+ goto yy283;
+ }
+ } else {
+ if (yych <= 'm') {
+ if (yych <= 'Z') goto yy139;
+ if (yych >= 'a') goto yy139;
+ } else {
+ if (yych <= 'n') goto yy283;
+ if (yych <= 'z') goto yy139;
}
+ }
yy276:
- YYDEBUG(276, *YYCURSOR);
-#line 1400 "ext/date/lib/parse_date.re"
- {
+ YYDEBUG(276, *YYCURSOR);
+#line 1401 "ext/date/lib/parse_date.re"
+ {
const timelib_relunit* relunit;
DEBUG_OUTPUT("daytext");
TIMELIB_INIT;
@@ -4773,490 +4772,492 @@ yy276:
TIMELIB_UNHAVE_TIME();
relunit = timelib_lookup_relunit((char**) &ptr);
s->time->relative.weekday = relunit->multiplier;
- s->time->relative.weekday_behavior = 1;
+ if (s->time->relative.weekday_behavior != 2) {
+ s->time->relative.weekday_behavior = 1;
+ }
TIMELIB_DEINIT;
return TIMELIB_WEEKDAY;
}
-#line 4782 "ext/date/lib/parse_date.c"
+#line 4783 "ext/date/lib/parse_date.c"
yy277:
- YYDEBUG(277, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'K') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'J') goto yy139;
- }
+ YYDEBUG(277, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'K') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'j') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'k') goto yy278;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'J') goto yy139;
+ }
+ } else {
+ if (yych <= 'j') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 'k') goto yy278;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
+ }
yy278:
- YYDEBUG(278, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy140;
- }
+ YYDEBUG(278, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'c') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'd') goto yy279;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy140;
}
-yy279:
- YYDEBUG(279, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- } else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy280;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'd') goto yy279;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
-yy280:
- YYDEBUG(280, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'X') {
- if(yych == ')') goto yy136;
+ }
+yy279:
+ YYDEBUG(279, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
goto yy3;
} else {
- if(yych <= 'Y') goto yy281;
- if(yych != 'y') goto yy3;
+ if (yych <= 'a') goto yy280;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
+yy280:
+ YYDEBUG(280, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'X') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'Y') goto yy281;
+ if (yych != 'y') goto yy3;
+ }
yy281:
- YYDEBUG(281, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy282;
- if(yych != 's') goto yy276;
+ YYDEBUG(281, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy282;
+ if (yych != 's') goto yy276;
yy282:
- YYDEBUG(282, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy276;
+ YYDEBUG(282, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy276;
yy283:
- YYDEBUG(283, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy140;
- }
+ YYDEBUG(283, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'e') goto yy284;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy140;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'e') goto yy284;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy284:
- YYDEBUG(284, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'S') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy141;
- }
+ YYDEBUG(284, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'S') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'r') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 's') goto yy285;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy141;
}
-yy285:
- YYDEBUG(285, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'C') {
- if(yych == ')') goto yy136;
- goto yy3;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
} else {
- if(yych <= 'D') goto yy286;
- if(yych != 'd') goto yy3;
+ if (yych <= 's') goto yy285;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
+yy285:
+ YYDEBUG(285, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'C') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'D') goto yy286;
+ if (yych != 'd') goto yy3;
+ }
yy286:
- YYDEBUG(286, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy287;
- if(yych != 'a') goto yy53;
+ YYDEBUG(286, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy287;
+ if (yych != 'a') goto yy53;
yy287:
- YYDEBUG(287, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy282;
- if(yych == 'y') goto yy282;
- goto yy53;
+ YYDEBUG(287, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy282;
+ if (yych == 'y') goto yy282;
+ goto yy53;
yy288:
- YYDEBUG(288, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '/') {
- if(yych == ')') goto yy136;
- if(yych <= '.') goto yy3;
- goto yy144;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy138;
- if(yych <= 'D') goto yy275;
- goto yy277;
- }
+ YYDEBUG(288, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '/') {
+ if (yych == ')') goto yy136;
+ if (yych <= '.') goto yy3;
+ goto yy144;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych <= 'd') {
- if(yych <= 'c') goto yy143;
- } else {
- if(yych <= 'e') goto yy290;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy138;
+ if (yych <= 'D') goto yy275;
+ goto yy277;
}
- YYDEBUG(289, *YYCURSOR);
- yyaccept = 5;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy276;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy276;
- if(yych <= 'M') goto yy139;
- goto yy283;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy276;
+ if (yych <= 'd') {
+ if (yych <= 'c') goto yy143;
} else {
- if(yych == 'n') goto yy296;
- if(yych <= 'z') goto yy148;
- goto yy276;
+ if (yych <= 'e') goto yy290;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
}
+ }
+ YYDEBUG(289, *YYCURSOR);
+ yyaccept = 5;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy276;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy276;
+ if (yych <= 'M') goto yy139;
+ goto yy283;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy276;
+ } else {
+ if (yych == 'n') goto yy296;
+ if (yych <= 'z') goto yy148;
+ goto yy276;
+ }
+ }
yy290:
- YYDEBUG(290, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'K') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'J') goto yy139;
- goto yy278;
- }
+ YYDEBUG(290, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'K') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'k') goto yy291;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'J') goto yy139;
+ goto yy278;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'k') goto yy291;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy291:
- YYDEBUG(291, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy140;
- goto yy279;
- }
+ YYDEBUG(291, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'd') goto yy292;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy140;
+ goto yy279;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'd') goto yy292;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy292:
- YYDEBUG(292, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'A') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- goto yy280;
- }
+ YYDEBUG(292, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'a') goto yy293;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ goto yy280;
}
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '^') goto yy3;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy3;
+ if (yych <= 'a') goto yy293;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
+ }
+ }
yy293:
- YYDEBUG(293, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'Y') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'X') goto yy3;
- goto yy281;
- }
+ YYDEBUG(293, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'Y') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'y') goto yy294;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'X') goto yy3;
+ goto yy281;
}
-yy294:
- YYDEBUG(294, *YYCURSOR);
- yyaccept = 5;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '^') {
- if(yych <= '/') {
- if(yych <= '.') goto yy276;
- goto yy144;
- } else {
- if(yych == 'S') goto yy282;
- goto yy276;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= 'r') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy276;
- goto yy151;
- } else {
- if(yych <= 's') goto yy295;
- if(yych <= 'z') goto yy151;
- goto yy276;
- }
+ if (yych == 'y') goto yy294;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
-yy295:
- YYDEBUG(295, *YYCURSOR);
- yyaccept = 5;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '^') {
- if(yych == '/') goto yy144;
+ }
+yy294:
+ YYDEBUG(294, *YYCURSOR);
+ yyaccept = 5;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '^') {
+ if (yych <= '/') {
+ if (yych <= '.') goto yy276;
+ goto yy144;
+ } else {
+ if (yych == 'S') goto yy282;
goto yy276;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy276;
+ goto yy151;
} else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy276;
- if(yych <= 'z') goto yy151;
+ if (yych <= 's') goto yy295;
+ if (yych <= 'z') goto yy151;
goto yy276;
}
+ }
+yy295:
+ YYDEBUG(295, *YYCURSOR);
+ yyaccept = 5;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '^') {
+ if (yych == '/') goto yy144;
+ goto yy276;
+ } else {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy276;
+ if (yych <= 'z') goto yy151;
+ goto yy276;
+ }
yy296:
- YYDEBUG(296, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy140;
- goto yy284;
- }
+ YYDEBUG(296, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'e') goto yy297;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy140;
+ goto yy284;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'e') goto yy297;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy297:
- YYDEBUG(297, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy141;
- goto yy285;
- }
+ YYDEBUG(297, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 's') goto yy298;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy141;
+ goto yy285;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 's') goto yy298;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy298:
- YYDEBUG(298, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'C') goto yy3;
- goto yy286;
- }
+ YYDEBUG(298, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'd') goto yy299;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'C') goto yy3;
+ goto yy286;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'd') goto yy299;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
+ }
yy299:
- YYDEBUG(299, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy287;
- if(yych != 'a') goto yy152;
- YYDEBUG(300, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy282;
- if(yych == 'y') goto yy295;
- goto yy152;
+ YYDEBUG(299, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy287;
+ if (yych != 'a') goto yy152;
+ YYDEBUG(300, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy282;
+ if (yych == 'y') goto yy295;
+ goto yy152;
yy301:
- YYDEBUG(301, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'C') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ YYDEBUG(301, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'C') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'B') goto yy138;
+ }
+ } else {
+ if (yych <= 'b') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'c') goto yy302;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
+yy302:
+ YYDEBUG(302, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych >= '\t') goto yy305;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'B') goto yy138;
+ if (yych == ' ') goto yy305;
}
} else {
- if(yych <= 'b') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
} else {
- if(yych <= 'c') goto yy302;
- if(yych <= 'z') goto yy138;
- goto yy3;
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
}
}
-yy302:
- YYDEBUG(302, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych >= 0x09) goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
} else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- }
+ if (yych == 'E') goto yy311;
+ goto yy139;
}
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- } else {
- if(yych == 'E') goto yy311;
- goto yy139;
- }
+ if (yych <= 'd') {
+ if (yych >= 'a') goto yy139;
} else {
- if(yych <= 'd') {
- if(yych >= 'a') goto yy139;
- } else {
- if(yych <= 'e') goto yy311;
- if(yych <= 'z') goto yy139;
- }
+ if (yych <= 'e') goto yy311;
+ if (yych <= 'z') goto yy139;
}
}
+ }
yy303:
- YYDEBUG(303, *YYCURSOR);
-#line 1433 "ext/date/lib/parse_date.re"
- {
+ YYDEBUG(303, *YYCURSOR);
+#line 1436 "ext/date/lib/parse_date.re"
+ {
DEBUG_OUTPUT("monthtext");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -5264,59 +5265,59 @@ yy303:
TIMELIB_DEINIT;
return TIMELIB_DATE_TEXT;
}
-#line 5268 "ext/date/lib/parse_date.c"
+#line 5269 "ext/date/lib/parse_date.c"
yy304:
- YYDEBUG(304, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 20) YYFILL(20);
- yych = *YYCURSOR;
+ YYDEBUG(304, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 20) YYFILL(20);
+ yych = *YYCURSOR;
yy305:
- YYDEBUG(305, *YYCURSOR);
- if(yybm[0+yych] & 32) {
- goto yy304;
- }
- if(yych <= '/') goto yy53;
- if(yych <= '2') goto yy307;
- if(yych <= '3') goto yy309;
- if(yych <= '9') goto yy310;
- goto yy53;
+ YYDEBUG(305, *YYCURSOR);
+ if (yybm[0+yych] & 32) {
+ goto yy304;
+ }
+ if (yych <= '/') goto yy53;
+ if (yych <= '2') goto yy307;
+ if (yych <= '3') goto yy309;
+ if (yych <= '9') goto yy310;
+ goto yy53;
yy306:
- YYDEBUG(306, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy305;
- if(yych <= '0') goto yy466;
- if(yych <= '2') goto yy467;
- if(yych <= '3') goto yy468;
- goto yy305;
+ YYDEBUG(306, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy305;
+ if (yych <= '0') goto yy464;
+ if (yych <= '2') goto yy465;
+ if (yych <= '3') goto yy466;
+ goto yy305;
yy307:
- YYDEBUG(307, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'm') {
- if(yych <= '1') {
- if(yych <= '/') goto yy325;
- if(yych <= '0') goto yy405;
- goto yy406;
- } else {
- if(yych <= '2') goto yy464;
- if(yych <= '9') goto yy465;
- goto yy325;
- }
+ YYDEBUG(307, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'm') {
+ if (yych <= '1') {
+ if (yych <= '/') goto yy325;
+ if (yych <= '0') goto yy405;
+ goto yy406;
+ } else {
+ if (yych <= '2') goto yy462;
+ if (yych <= '9') goto yy463;
+ goto yy325;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'n') goto yy321;
+ if (yych <= 'q') goto yy325;
+ goto yy322;
} else {
- if(yych <= 'r') {
- if(yych <= 'n') goto yy321;
- if(yych <= 'q') goto yy325;
- goto yy322;
- } else {
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
}
+ }
yy308:
- YYDEBUG(308, *YYCURSOR);
-#line 1212 "ext/date/lib/parse_date.re"
- {
+ YYDEBUG(308, *YYCURSOR);
+#line 1213 "ext/date/lib/parse_date.re"
+ {
DEBUG_OUTPUT("datetextual | datenoyear");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -5327,281 +5328,277 @@ yy308:
TIMELIB_DEINIT;
return TIMELIB_DATE_TEXT;
}
-#line 5331 "ext/date/lib/parse_date.c"
+#line 5332 "ext/date/lib/parse_date.c"
yy309:
- YYDEBUG(309, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'm') {
- if(yych <= '1') {
- if(yych <= '/') goto yy325;
- if(yych <= '0') goto yy405;
- goto yy406;
- } else {
- if(yych <= '2') goto yy318;
- if(yych <= '9') goto yy319;
- goto yy325;
- }
+ YYDEBUG(309, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'm') {
+ if (yych <= '1') {
+ if (yych <= '/') goto yy325;
+ if (yych <= '0') goto yy405;
+ goto yy406;
+ } else {
+ if (yych <= '2') goto yy318;
+ if (yych <= '9') goto yy319;
+ goto yy325;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'n') goto yy321;
+ if (yych <= 'q') goto yy325;
+ goto yy322;
} else {
- if(yych <= 'r') {
- if(yych <= 'n') goto yy321;
- if(yych <= 'q') goto yy325;
- goto yy322;
- } else {
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
}
+ }
yy310:
- YYDEBUG(310, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'm') {
- if(yych <= '1') {
- if(yych <= '/') goto yy325;
- if(yych <= '0') goto yy316;
- goto yy317;
- } else {
- if(yych <= '2') goto yy318;
- if(yych <= '9') goto yy319;
- goto yy325;
- }
+ YYDEBUG(310, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'm') {
+ if (yych <= '1') {
+ if (yych <= '/') goto yy325;
+ if (yych <= '0') goto yy316;
+ goto yy317;
+ } else {
+ if (yych <= '2') goto yy318;
+ if (yych <= '9') goto yy319;
+ goto yy325;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'n') goto yy321;
+ if (yych <= 'q') goto yy325;
+ goto yy322;
} else {
- if(yych <= 'r') {
- if(yych <= 'n') goto yy321;
- if(yych <= 'q') goto yy325;
- goto yy322;
- } else {
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
}
+ }
yy311:
- YYDEBUG(311, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'M') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'L') goto yy140;
- }
+ YYDEBUG(311, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'M') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'l') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'm') goto yy312;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'L') goto yy140;
}
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'm') goto yy312;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
+ }
+ }
yy312:
- YYDEBUG(312, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'B') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'A') goto yy141;
- }
+ YYDEBUG(312, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'B') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'a') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'b') goto yy313;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'A') goto yy141;
}
-yy313:
- YYDEBUG(313, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych == ')') goto yy136;
- goto yy3;
+ } else {
+ if (yych <= 'a') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
} else {
- if(yych <= 'E') goto yy314;
- if(yych != 'e') goto yy3;
+ if (yych <= 'b') goto yy313;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
+yy313:
+ YYDEBUG(313, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'E') goto yy314;
+ if (yych != 'e') goto yy3;
+ }
yy314:
- YYDEBUG(314, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy315;
- if(yych != 'r') goto yy53;
+ YYDEBUG(314, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy315;
+ if (yych != 'r') goto yy53;
yy315:
- YYDEBUG(315, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ' ') {
- if(yych == 0x09) goto yy305;
- if(yych <= 0x1F) goto yy303;
+ YYDEBUG(315, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy305;
+ if (yych <= 0x1F) goto yy303;
+ goto yy305;
+ } else {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy303;
goto yy305;
} else {
- if(yych <= '.') {
- if(yych <= ',') goto yy303;
- goto yy305;
- } else {
- if(yych <= '/') goto yy303;
- if(yych <= '9') goto yy305;
- goto yy303;
- }
+ if (yych <= '/') goto yy303;
+ if (yych <= '9') goto yy305;
+ goto yy303;
}
+ }
yy316:
- YYDEBUG(316, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy330;
- goto yy308;
- } else {
- if(yych <= '0') goto yy403;
- if(yych <= '9') goto yy404;
- if(yych <= ':') goto yy330;
- goto yy308;
- }
+ YYDEBUG(316, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy330;
+ goto yy53;
+ } else {
+ if (yych <= '0') goto yy403;
+ if (yych <= '9') goto yy404;
+ if (yych <= ':') goto yy330;
+ goto yy53;
+ }
yy317:
- YYDEBUG(317, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
- } else {
- if(yych <= '2') goto yy404;
- if(yych <= '9') goto yy403;
- if(yych <= ':') goto yy371;
- goto yy308;
- }
+ YYDEBUG(317, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy371;
+ goto yy53;
+ } else {
+ if (yych <= '2') goto yy404;
+ if (yych <= '9') goto yy403;
+ if (yych <= ':') goto yy371;
+ goto yy53;
+ }
yy318:
- YYDEBUG(318, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
- } else {
- if(yych <= '3') goto yy403;
- if(yych <= '9') goto yy400;
- if(yych <= ':') goto yy371;
- goto yy308;
- }
+ YYDEBUG(318, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy371;
+ goto yy53;
+ } else {
+ if (yych <= '3') goto yy403;
+ if (yych <= '9') goto yy400;
+ if (yych <= ':') goto yy371;
+ goto yy53;
+ }
yy319:
- YYDEBUG(319, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
- } else {
- if(yych <= '9') goto yy400;
- if(yych <= ':') goto yy371;
- goto yy308;
- }
+ YYDEBUG(319, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy371;
+ goto yy53;
+ } else {
+ if (yych <= '9') goto yy400;
+ if (yych <= ':') goto yy371;
+ goto yy53;
+ }
yy320:
- YYDEBUG(320, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- goto yy325;
+ YYDEBUG(320, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ goto yy325;
yy321:
- YYDEBUG(321, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- goto yy325;
+ YYDEBUG(321, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ goto yy325;
yy322:
- YYDEBUG(322, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- goto yy325;
+ YYDEBUG(322, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ goto yy325;
yy323:
- YYDEBUG(323, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- goto yy325;
+ YYDEBUG(323, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ goto yy325;
yy324:
- YYDEBUG(324, *YYCURSOR);
- yyaccept = 7;
- YYMARKER = ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 17) YYFILL(17);
- yych = *YYCURSOR;
+ YYDEBUG(324, *YYCURSOR);
+ yyaccept = 7;
+ YYMARKER = ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 17) YYFILL(17);
+ yych = *YYCURSOR;
yy325:
- YYDEBUG(325, *YYCURSOR);
- if(yybm[0+yych] & 64) {
- goto yy324;
- }
- if(yych <= '2') {
- if(yych <= '/') goto yy308;
- if(yych <= '0') goto yy366;
- if(yych <= '1') goto yy367;
- goto yy368;
- } else {
- if(yych <= '9') goto yy369;
- if(yych != 'T') goto yy308;
- }
- YYDEBUG(326, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '1') goto yy327;
- if(yych <= '2') goto yy328;
- if(yych <= '9') goto yy329;
- goto yy53;
+ YYDEBUG(325, *YYCURSOR);
+ if (yybm[0+yych] & 64) {
+ goto yy324;
+ }
+ if (yych <= '2') {
+ if (yych <= '/') goto yy308;
+ if (yych <= '0') goto yy366;
+ if (yych <= '1') goto yy367;
+ goto yy368;
+ } else {
+ if (yych <= '9') goto yy369;
+ if (yych != 'T') goto yy308;
+ }
+ YYDEBUG(326, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '1') goto yy327;
+ if (yych <= '2') goto yy328;
+ if (yych <= '9') goto yy329;
+ goto yy53;
yy327:
- YYDEBUG(327, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') {
- if(yych == '.') goto yy330;
- goto yy53;
- } else {
- if(yych <= '9') goto yy329;
- if(yych <= ':') goto yy330;
- goto yy53;
- }
+ YYDEBUG(327, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy330;
+ goto yy53;
+ } else {
+ if (yych <= '9') goto yy329;
+ if (yych <= ':') goto yy330;
+ goto yy53;
+ }
yy328:
- YYDEBUG(328, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') {
- if(yych == '.') goto yy330;
- goto yy53;
- } else {
- if(yych <= '3') goto yy329;
- if(yych == ':') goto yy330;
- goto yy53;
- }
+ YYDEBUG(328, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy330;
+ goto yy53;
+ } else {
+ if (yych <= '3') goto yy329;
+ if (yych == ':') goto yy330;
+ goto yy53;
+ }
yy329:
- YYDEBUG(329, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '.') goto yy330;
- if(yych != ':') goto yy53;
+ YYDEBUG(329, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '.') goto yy330;
+ if (yych != ':') goto yy53;
yy330:
- YYDEBUG(330, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy331;
- if(yych <= '9') goto yy333;
- goto yy53;
+ YYDEBUG(330, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy331;
+ if (yych <= '9') goto yy333;
+ goto yy53;
yy331:
- YYDEBUG(331, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy334;
- } else {
- if(yych <= '9') goto yy333;
- if(yych <= ':') goto yy334;
- }
+ YYDEBUG(331, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy334;
+ } else {
+ if (yych <= '9') goto yy333;
+ if (yych <= ':') goto yy334;
+ }
yy332:
- YYDEBUG(332, *YYCURSOR);
-#line 1481 "ext/date/lib/parse_date.re"
- {
+ YYDEBUG(332, *YYCURSOR);
+#line 1484 "ext/date/lib/parse_date.re"
+ {
int tz_not_found;
DEBUG_OUTPUT("dateshortwithtimeshort | dateshortwithtimelong | dateshortwithtimelongtz");
TIMELIB_INIT;
@@ -5629,619 +5626,619 @@ yy332:
TIMELIB_DEINIT;
return TIMELIB_SHORTDATE_WITH_TIME;
}
-#line 5633 "ext/date/lib/parse_date.c"
+#line 5630 "ext/date/lib/parse_date.c"
yy333:
- YYDEBUG(333, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy334;
- if(yych != ':') goto yy332;
+ YYDEBUG(333, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy334;
+ if (yych != ':') goto yy332;
yy334:
- YYDEBUG(334, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy335;
- if(yych <= '6') goto yy336;
- if(yych <= '9') goto yy337;
- goto yy53;
+ YYDEBUG(334, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy335;
+ if (yych <= '6') goto yy336;
+ if (yych <= '9') goto yy337;
+ goto yy53;
yy335:
- YYDEBUG(335, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy332;
- if(yych <= '9') goto yy338;
- goto yy332;
+ YYDEBUG(335, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy332;
+ if (yych <= '9') goto yy338;
+ goto yy332;
yy336:
- YYDEBUG(336, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '0') goto yy338;
- goto yy332;
+ YYDEBUG(336, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '0') goto yy338;
+ goto yy332;
yy337:
- YYDEBUG(337, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy332;
+ YYDEBUG(337, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy332;
yy338:
- YYDEBUG(338, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '*') {
- if(yych <= 0x1F) {
- if(yych != 0x09) goto yy332;
- } else {
- if(yych <= ' ') goto yy339;
- if(yych == '(') goto yy342;
- goto yy332;
- }
+ YYDEBUG(338, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '*') {
+ if (yych <= 0x1F) {
+ if (yych != '\t') goto yy332;
+ } else {
+ if (yych <= ' ') goto yy339;
+ if (yych == '(') goto yy342;
+ goto yy332;
+ }
+ } else {
+ if (yych <= '@') {
+ if (yych == ',') goto yy332;
+ if (yych <= '-') goto yy341;
+ goto yy332;
} else {
- if(yych <= '@') {
- if(yych == ',') goto yy332;
- if(yych <= '-') goto yy341;
- goto yy332;
- } else {
- if(yych <= 'Z') goto yy343;
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy344;
- goto yy332;
- }
+ if (yych <= 'Z') goto yy343;
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy344;
+ goto yy332;
}
+ }
yy339:
- YYDEBUG(339, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 8) YYFILL(8);
- yych = *YYCURSOR;
- YYDEBUG(340, *YYCURSOR);
- if(yych <= '*') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy339;
- goto yy53;
- } else {
- if(yych <= ' ') goto yy339;
- if(yych == '(') goto yy342;
- goto yy53;
- }
+ YYDEBUG(339, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 8) YYFILL(8);
+ yych = *YYCURSOR;
+ YYDEBUG(340, *YYCURSOR);
+ if (yych <= '*') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy339;
+ goto yy53;
} else {
- if(yych <= '@') {
- if(yych == ',') goto yy53;
- if(yych >= '.') goto yy53;
- } else {
- if(yych <= 'Z') goto yy343;
- if(yych <= '`') goto yy53;
- if(yych <= 'z') goto yy344;
- goto yy53;
- }
+ if (yych <= ' ') goto yy339;
+ if (yych == '(') goto yy342;
+ goto yy53;
+ }
+ } else {
+ if (yych <= '@') {
+ if (yych == ',') goto yy53;
+ if (yych >= '.') goto yy53;
+ } else {
+ if (yych <= 'Z') goto yy343;
+ if (yych <= '`') goto yy53;
+ if (yych <= 'z') goto yy344;
+ goto yy53;
}
+ }
yy341:
- YYDEBUG(341, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '1') goto yy361;
- if(yych <= '2') goto yy362;
- if(yych <= '9') goto yy363;
- goto yy53;
+ YYDEBUG(341, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '1') goto yy361;
+ if (yych <= '2') goto yy362;
+ if (yych <= '9') goto yy363;
+ goto yy53;
yy342:
- YYDEBUG(342, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') goto yy53;
- if(yych <= 'Z') goto yy344;
- if(yych <= '`') goto yy53;
- if(yych <= 'z') goto yy344;
- goto yy53;
+ YYDEBUG(342, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') goto yy53;
+ if (yych <= 'Z') goto yy344;
+ if (yych <= '`') goto yy53;
+ if (yych <= 'z') goto yy344;
+ goto yy53;
yy343:
- YYDEBUG(343, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy337;
- goto yy332;
- } else {
- if(yych <= 'Z') goto yy345;
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy350;
- goto yy332;
- }
+ YYDEBUG(343, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy337;
+ goto yy332;
+ } else {
+ if (yych <= 'Z') goto yy345;
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy350;
+ goto yy332;
+ }
yy344:
- YYDEBUG(344, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy337;
- goto yy332;
- } else {
- if(yych <= 'Z') goto yy345;
- if(yych <= '`') goto yy332;
- if(yych >= '{') goto yy332;
- }
+ YYDEBUG(344, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy337;
+ goto yy332;
+ } else {
+ if (yych <= 'Z') goto yy345;
+ if (yych <= '`') goto yy332;
+ if (yych >= '{') goto yy332;
+ }
yy345:
- YYDEBUG(345, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy337;
- goto yy332;
- } else {
- if(yych <= 'Z') goto yy346;
- if(yych <= '`') goto yy332;
- if(yych >= '{') goto yy332;
- }
+ YYDEBUG(345, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy337;
+ goto yy332;
+ } else {
+ if (yych <= 'Z') goto yy346;
+ if (yych <= '`') goto yy332;
+ if (yych >= '{') goto yy332;
+ }
yy346:
- YYDEBUG(346, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy337;
- goto yy332;
- } else {
- if(yych <= 'Z') goto yy347;
- if(yych <= '`') goto yy332;
- if(yych >= '{') goto yy332;
- }
+ YYDEBUG(346, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy337;
+ goto yy332;
+ } else {
+ if (yych <= 'Z') goto yy347;
+ if (yych <= '`') goto yy332;
+ if (yych >= '{') goto yy332;
+ }
yy347:
- YYDEBUG(347, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy337;
- goto yy332;
- } else {
- if(yych <= 'Z') goto yy348;
- if(yych <= '`') goto yy332;
- if(yych >= '{') goto yy332;
- }
+ YYDEBUG(347, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy337;
+ goto yy332;
+ } else {
+ if (yych <= 'Z') goto yy348;
+ if (yych <= '`') goto yy332;
+ if (yych >= '{') goto yy332;
+ }
yy348:
- YYDEBUG(348, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '@') {
- if(yych == ')') goto yy337;
- goto yy332;
- } else {
- if(yych <= 'Z') goto yy349;
- if(yych <= '`') goto yy332;
- if(yych >= '{') goto yy332;
- }
-yy349:
- YYDEBUG(349, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == ')') goto yy337;
+ YYDEBUG(348, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '@') {
+ if (yych == ')') goto yy337;
goto yy332;
+ } else {
+ if (yych <= 'Z') goto yy349;
+ if (yych <= '`') goto yy332;
+ if (yych >= '{') goto yy332;
+ }
+yy349:
+ YYDEBUG(349, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == ')') goto yy337;
+ goto yy332;
yy350:
- YYDEBUG(350, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy332;
- goto yy337;
- } else {
- if(yych == '/') goto yy352;
- goto yy332;
- }
+ YYDEBUG(350, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy332;
+ goto yy337;
+ } else {
+ if (yych == '/') goto yy352;
+ goto yy332;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy346;
+ if (yych <= '^') goto yy332;
+ goto yy352;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy346;
- if(yych <= '^') goto yy332;
- goto yy352;
- } else {
- if(yych <= '`') goto yy332;
- if(yych >= '{') goto yy332;
- }
+ if (yych <= '`') goto yy332;
+ if (yych >= '{') goto yy332;
}
+ }
yy351:
- YYDEBUG(351, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy332;
- goto yy337;
- } else {
- if(yych != '/') goto yy332;
- }
+ YYDEBUG(351, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy332;
+ goto yy337;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy347;
- if(yych <= '^') goto yy332;
- } else {
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy356;
- goto yy332;
- }
+ if (yych != '/') goto yy332;
}
-yy352:
- YYDEBUG(352, *YYCURSOR);
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yych <= '@') goto yy53;
- if(yych >= '[') goto yy53;
- YYDEBUG(353, *YYCURSOR);
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yych <= '`') goto yy53;
- if(yych >= '{') goto yy53;
-yy354:
- YYDEBUG(354, *YYCURSOR);
- yyaccept = 8;
- YYMARKER = ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- YYDEBUG(355, *YYCURSOR);
- if(yych <= '^') {
- if(yych == '/') goto yy352;
- goto yy332;
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy347;
+ if (yych <= '^') goto yy332;
} else {
- if(yych <= '_') goto yy352;
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy354;
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy356;
goto yy332;
}
+ }
+yy352:
+ YYDEBUG(352, *YYCURSOR);
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yych <= '@') goto yy53;
+ if (yych >= '[') goto yy53;
+ YYDEBUG(353, *YYCURSOR);
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yych <= '`') goto yy53;
+ if (yych >= '{') goto yy53;
+yy354:
+ YYDEBUG(354, *YYCURSOR);
+ yyaccept = 8;
+ YYMARKER = ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ YYDEBUG(355, *YYCURSOR);
+ if (yych <= '^') {
+ if (yych == '/') goto yy352;
+ goto yy332;
+ } else {
+ if (yych <= '_') goto yy352;
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy354;
+ goto yy332;
+ }
yy356:
- YYDEBUG(356, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy332;
- goto yy337;
- } else {
- if(yych == '/') goto yy352;
- goto yy332;
- }
- } else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy348;
- if(yych <= '^') goto yy332;
- goto yy352;
- } else {
- if(yych <= '`') goto yy332;
- if(yych >= '{') goto yy332;
- }
+ YYDEBUG(356, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy332;
+ goto yy337;
+ } else {
+ if (yych == '/') goto yy352;
+ goto yy332;
}
- YYDEBUG(357, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy332;
- goto yy337;
- } else {
- if(yych == '/') goto yy352;
- goto yy332;
- }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy348;
+ if (yych <= '^') goto yy332;
+ goto yy352;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy349;
- if(yych <= '^') goto yy332;
- goto yy352;
- } else {
- if(yych <= '`') goto yy332;
- if(yych >= '{') goto yy332;
- }
+ if (yych <= '`') goto yy332;
+ if (yych >= '{') goto yy332;
}
- YYDEBUG(358, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == ')') goto yy337;
- if(yych <= '.') goto yy332;
+ }
+ YYDEBUG(357, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy332;
+ goto yy337;
+ } else {
+ if (yych == '/') goto yy352;
+ goto yy332;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy349;
+ if (yych <= '^') goto yy332;
goto yy352;
} else {
- if(yych <= '_') {
- if(yych <= '^') goto yy332;
- goto yy352;
- } else {
- if(yych <= '`') goto yy332;
- if(yych >= '{') goto yy332;
- }
+ if (yych <= '`') goto yy332;
+ if (yych >= '{') goto yy332;
}
-yy359:
- YYDEBUG(359, *YYCURSOR);
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- YYDEBUG(360, *YYCURSOR);
- if(yych <= '^') {
- if(yych == '/') goto yy352;
- goto yy53;
+ }
+ YYDEBUG(358, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == ')') goto yy337;
+ if (yych <= '.') goto yy332;
+ goto yy352;
+ } else {
+ if (yych <= '_') {
+ if (yych <= '^') goto yy332;
+ goto yy352;
} else {
- if(yych <= '_') goto yy352;
- if(yych <= '`') goto yy53;
- if(yych <= 'z') goto yy359;
- goto yy53;
+ if (yych <= '`') goto yy332;
+ if (yych >= '{') goto yy332;
}
+ }
+yy359:
+ YYDEBUG(359, *YYCURSOR);
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ YYDEBUG(360, *YYCURSOR);
+ if (yych <= '^') {
+ if (yych == '/') goto yy352;
+ goto yy53;
+ } else {
+ if (yych <= '_') goto yy352;
+ if (yych <= '`') goto yy53;
+ if (yych <= 'z') goto yy359;
+ goto yy53;
+ }
yy361:
- YYDEBUG(361, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy332;
- if(yych <= '9') goto yy363;
- if(yych <= ':') goto yy364;
- goto yy332;
+ YYDEBUG(361, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy332;
+ if (yych <= '9') goto yy363;
+ if (yych <= ':') goto yy364;
+ goto yy332;
yy362:
- YYDEBUG(362, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '5') {
- if(yych <= '/') goto yy332;
- if(yych >= '4') goto yy365;
- } else {
- if(yych <= '9') goto yy337;
- if(yych <= ':') goto yy364;
- goto yy332;
- }
+ YYDEBUG(362, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '5') {
+ if (yych <= '/') goto yy332;
+ if (yych >= '4') goto yy365;
+ } else {
+ if (yych <= '9') goto yy337;
+ if (yych <= ':') goto yy364;
+ goto yy332;
+ }
yy363:
- YYDEBUG(363, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy332;
- if(yych <= '5') goto yy365;
- if(yych <= '9') goto yy337;
- if(yych >= ';') goto yy332;
+ YYDEBUG(363, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy332;
+ if (yych <= '5') goto yy365;
+ if (yych <= '9') goto yy337;
+ if (yych >= ';') goto yy332;
yy364:
- YYDEBUG(364, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy332;
- if(yych <= '5') goto yy365;
- if(yych <= '9') goto yy337;
- goto yy332;
+ YYDEBUG(364, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy332;
+ if (yych <= '5') goto yy365;
+ if (yych <= '9') goto yy337;
+ goto yy332;
yy365:
- YYDEBUG(365, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy332;
- if(yych <= '9') goto yy337;
- goto yy332;
+ YYDEBUG(365, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy332;
+ if (yych <= '9') goto yy337;
+ goto yy332;
yy366:
- YYDEBUG(366, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy330;
- goto yy308;
- } else {
- if(yych <= '0') goto yy398;
- if(yych <= '9') goto yy399;
- if(yych <= ':') goto yy330;
- goto yy308;
- }
+ YYDEBUG(366, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy330;
+ goto yy308;
+ } else {
+ if (yych <= '0') goto yy398;
+ if (yych <= '9') goto yy399;
+ if (yych <= ':') goto yy330;
+ goto yy308;
+ }
yy367:
- YYDEBUG(367, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
- } else {
- if(yych <= '2') goto yy399;
- if(yych <= '9') goto yy398;
- if(yych <= ':') goto yy371;
- goto yy308;
- }
+ YYDEBUG(367, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy371;
+ goto yy308;
+ } else {
+ if (yych <= '2') goto yy399;
+ if (yych <= '9') goto yy398;
+ if (yych <= ':') goto yy371;
+ goto yy308;
+ }
yy368:
- YYDEBUG(368, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
- } else {
- if(yych <= '3') goto yy398;
- if(yych <= '9') goto yy370;
- if(yych <= ':') goto yy371;
- goto yy308;
- }
+ YYDEBUG(368, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy371;
+ goto yy308;
+ } else {
+ if (yych <= '3') goto yy398;
+ if (yych <= '9') goto yy370;
+ if (yych <= ':') goto yy371;
+ goto yy308;
+ }
yy369:
- YYDEBUG(369, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
- } else {
- if(yych <= '9') goto yy370;
- if(yych <= ':') goto yy371;
- goto yy308;
- }
-yy370:
- YYDEBUG(370, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy308;
- if(yych <= '9') goto yy396;
+ YYDEBUG(369, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy371;
goto yy308;
+ } else {
+ if (yych <= '9') goto yy370;
+ if (yych <= ':') goto yy371;
+ goto yy308;
+ }
+yy370:
+ YYDEBUG(370, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy308;
+ if (yych <= '9') goto yy396;
+ goto yy308;
yy371:
- YYDEBUG(371, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy372;
- if(yych <= '9') goto yy373;
- goto yy53;
+ YYDEBUG(371, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy372;
+ if (yych <= '9') goto yy373;
+ goto yy53;
yy372:
- YYDEBUG(372, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy374;
- goto yy332;
- } else {
- if(yych <= '9') goto yy389;
- if(yych <= ':') goto yy374;
- goto yy332;
- }
+ YYDEBUG(372, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy374;
+ goto yy332;
+ } else {
+ if (yych <= '9') goto yy389;
+ if (yych <= ':') goto yy374;
+ goto yy332;
+ }
yy373:
- YYDEBUG(373, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy374;
- if(yych != ':') goto yy332;
+ YYDEBUG(373, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy374;
+ if (yych != ':') goto yy332;
yy374:
- YYDEBUG(374, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy375;
- if(yych <= '6') goto yy376;
- if(yych <= '9') goto yy337;
- goto yy53;
+ YYDEBUG(374, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy375;
+ if (yych <= '6') goto yy376;
+ if (yych <= '9') goto yy337;
+ goto yy53;
yy375:
- YYDEBUG(375, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy332;
- if(yych <= '9') goto yy377;
- goto yy332;
+ YYDEBUG(375, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy332;
+ if (yych <= '9') goto yy377;
+ goto yy332;
yy376:
- YYDEBUG(376, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '0') goto yy332;
+ YYDEBUG(376, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '0') goto yy332;
yy377:
- YYDEBUG(377, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '*') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy379;
- goto yy332;
- } else {
- if(yych <= ' ') goto yy379;
- if(yych == '(') goto yy379;
- goto yy332;
- }
+ YYDEBUG(377, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '*') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy379;
+ goto yy332;
} else {
- if(yych <= '@') {
- if(yych == ',') goto yy332;
- if(yych <= '-') goto yy379;
- goto yy332;
- } else {
- if(yych <= 'Z') goto yy379;
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy379;
- goto yy332;
- }
+ if (yych <= ' ') goto yy379;
+ if (yych == '(') goto yy379;
+ goto yy332;
+ }
+ } else {
+ if (yych <= '@') {
+ if (yych == ',') goto yy332;
+ if (yych <= '-') goto yy379;
+ goto yy332;
+ } else {
+ if (yych <= 'Z') goto yy379;
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy379;
+ goto yy332;
}
+ }
yy378:
- YYDEBUG(378, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 8) YYFILL(8);
- yych = *YYCURSOR;
+ YYDEBUG(378, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 8) YYFILL(8);
+ yych = *YYCURSOR;
yy379:
- YYDEBUG(379, *YYCURSOR);
- if(yych <= '-') {
- if(yych <= '\'') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy53;
- goto yy378;
- } else {
- if(yych == ' ') goto yy378;
- goto yy53;
- }
- } else {
- if(yych <= '*') {
- if(yych <= '(') goto yy342;
- goto yy53;
- } else {
- if(yych == ',') goto yy53;
- goto yy341;
- }
+ YYDEBUG(379, *YYCURSOR);
+ if (yych <= '-') {
+ if (yych <= '\'') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy53;
+ goto yy378;
+ } else {
+ if (yych == ' ') goto yy378;
+ goto yy53;
}
} else {
- if(yych <= 'Z') {
- if(yych <= 'A') {
- if(yych <= '@') goto yy53;
- } else {
- if(yych != 'P') goto yy343;
- }
+ if (yych <= '*') {
+ if (yych <= '(') goto yy342;
+ goto yy53;
} else {
- if(yych <= 'o') {
- if(yych <= '`') goto yy53;
- if(yych <= 'a') goto yy381;
- goto yy344;
- } else {
- if(yych <= 'p') goto yy381;
- if(yych <= 'z') goto yy344;
- goto yy53;
- }
+ if (yych == ',') goto yy53;
+ goto yy341;
}
}
- YYDEBUG(380, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'L') {
- if(yych <= '-') {
- if(yych == ')') goto yy337;
- goto yy332;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= 'A') {
+ if (yych <= '@') goto yy53;
} else {
- if(yych <= '.') goto yy382;
- if(yych <= '@') goto yy332;
- goto yy345;
+ if (yych != 'P') goto yy343;
}
} else {
- if(yych <= '`') {
- if(yych <= 'M') goto yy383;
- if(yych <= 'Z') goto yy345;
- goto yy332;
+ if (yych <= 'o') {
+ if (yych <= '`') goto yy53;
+ if (yych <= 'a') goto yy381;
+ goto yy344;
} else {
- if(yych == 'm') goto yy388;
- if(yych <= 'z') goto yy350;
- goto yy332;
+ if (yych <= 'p') goto yy381;
+ if (yych <= 'z') goto yy344;
+ goto yy53;
}
}
+ }
+ YYDEBUG(380, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'L') {
+ if (yych <= '-') {
+ if (yych == ')') goto yy337;
+ goto yy332;
+ } else {
+ if (yych <= '.') goto yy382;
+ if (yych <= '@') goto yy332;
+ goto yy345;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'M') goto yy383;
+ if (yych <= 'Z') goto yy345;
+ goto yy332;
+ } else {
+ if (yych == 'm') goto yy388;
+ if (yych <= 'z') goto yy350;
+ goto yy332;
+ }
+ }
yy381:
- YYDEBUG(381, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'L') {
- if(yych <= '-') {
- if(yych == ')') goto yy337;
- goto yy332;
- } else {
- if(yych <= '.') goto yy382;
- if(yych <= '@') goto yy332;
- goto yy345;
- }
+ YYDEBUG(381, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'L') {
+ if (yych <= '-') {
+ if (yych == ')') goto yy337;
+ goto yy332;
} else {
- if(yych <= '`') {
- if(yych <= 'M') goto yy383;
- if(yych <= 'Z') goto yy345;
- goto yy332;
- } else {
- if(yych == 'm') goto yy383;
- if(yych <= 'z') goto yy345;
- goto yy332;
- }
+ if (yych <= '.') goto yy382;
+ if (yych <= '@') goto yy332;
+ goto yy345;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'M') goto yy383;
+ if (yych <= 'Z') goto yy345;
+ goto yy332;
+ } else {
+ if (yych == 'm') goto yy383;
+ if (yych <= 'z') goto yy345;
+ goto yy332;
}
+ }
yy382:
- YYDEBUG(382, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy387;
- if(yych == 'm') goto yy387;
- goto yy53;
+ YYDEBUG(382, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy387;
+ if (yych == 'm') goto yy387;
+ goto yy53;
yy383:
- YYDEBUG(383, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ')') {
- if(yych <= 0x09) {
- if(yych <= 0x00) goto yy385;
- if(yych <= 0x08) goto yy332;
- goto yy385;
- } else {
- if(yych == ' ') goto yy385;
- if(yych <= '(') goto yy332;
- goto yy337;
- }
- } else {
- if(yych <= '@') {
- if(yych != '.') goto yy332;
- } else {
- if(yych <= 'Z') goto yy346;
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy346;
- goto yy332;
- }
+ YYDEBUG(383, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ')') {
+ if (yych <= '\t') {
+ if (yych <= 0x00) goto yy385;
+ if (yych <= 0x08) goto yy332;
+ goto yy385;
+ } else {
+ if (yych == ' ') goto yy385;
+ if (yych <= '(') goto yy332;
+ goto yy337;
}
-yy384:
- YYDEBUG(384, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x09) {
- if(yych <= 0x00) goto yy385;
- if(yych <= 0x08) goto yy53;
+ } else {
+ if (yych <= '@') {
+ if (yych != '.') goto yy332;
} else {
- if(yych != ' ') goto yy53;
+ if (yych <= 'Z') goto yy346;
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy346;
+ goto yy332;
}
+ }
+yy384:
+ YYDEBUG(384, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '\t') {
+ if (yych <= 0x00) goto yy385;
+ if (yych <= 0x08) goto yy53;
+ } else {
+ if (yych != ' ') goto yy53;
+ }
yy385:
- YYDEBUG(385, *YYCURSOR);
- ++YYCURSOR;
- YYDEBUG(386, *YYCURSOR);
-#line 1457 "ext/date/lib/parse_date.re"
- {
+ YYDEBUG(385, *YYCURSOR);
+ ++YYCURSOR;
+ YYDEBUG(386, *YYCURSOR);
+#line 1460 "ext/date/lib/parse_date.re"
+ {
DEBUG_OUTPUT("dateshortwithtimeshort12 | dateshortwithtimelong12");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -6263,184 +6260,181 @@ yy385:
TIMELIB_DEINIT;
return TIMELIB_SHORTDATE_WITH_TIME;
}
-#line 6267 "ext/date/lib/parse_date.c"
+#line 6264 "ext/date/lib/parse_date.c"
yy387:
- YYDEBUG(387, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x1F) {
- if(yych <= 0x00) goto yy385;
- if(yych == 0x09) goto yy385;
- goto yy53;
+ YYDEBUG(387, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 0x1F) {
+ if (yych <= 0x00) goto yy385;
+ if (yych == '\t') goto yy385;
+ goto yy53;
+ } else {
+ if (yych <= ' ') goto yy385;
+ if (yych == '.') goto yy384;
+ goto yy53;
+ }
+yy388:
+ YYDEBUG(388, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '-') {
+ if (yych <= 0x1F) {
+ if (yych <= 0x00) goto yy385;
+ if (yych == '\t') goto yy385;
+ goto yy332;
} else {
- if(yych <= ' ') goto yy385;
- if(yych == '.') goto yy384;
- goto yy53;
+ if (yych <= ' ') goto yy385;
+ if (yych == ')') goto yy337;
+ goto yy332;
}
-yy388:
- YYDEBUG(388, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '-') {
- if(yych <= 0x1F) {
- if(yych <= 0x00) goto yy385;
- if(yych == 0x09) goto yy385;
- goto yy332;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '.') goto yy384;
+ if (yych <= '/') goto yy352;
+ if (yych <= '@') goto yy332;
+ goto yy346;
+ } else {
+ if (yych <= '_') {
+ if (yych <= '^') goto yy332;
+ goto yy352;
} else {
- if(yych <= ' ') goto yy385;
- if(yych == ')') goto yy337;
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy351;
goto yy332;
}
- } else {
- if(yych <= 'Z') {
- if(yych <= '.') goto yy384;
- if(yych <= '/') goto yy352;
- if(yych <= '@') goto yy332;
- goto yy346;
- } else {
- if(yych <= '_') {
- if(yych <= '^') goto yy332;
- goto yy352;
- } else {
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy351;
- goto yy332;
- }
- }
}
+ }
yy389:
- YYDEBUG(389, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ':') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy390;
- if(yych <= 0x1F) goto yy332;
- } else {
- if(yych == '.') goto yy374;
- if(yych <= '9') goto yy332;
- goto yy374;
- }
+ YYDEBUG(389, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ':') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy390;
+ if (yych <= 0x1F) goto yy332;
+ } else {
+ if (yych == '.') goto yy374;
+ if (yych <= '9') goto yy332;
+ goto yy374;
+ }
+ } else {
+ if (yych <= 'P') {
+ if (yych == 'A') goto yy392;
+ if (yych <= 'O') goto yy332;
+ goto yy392;
} else {
- if(yych <= 'P') {
- if(yych == 'A') goto yy392;
- if(yych <= 'O') goto yy332;
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy332;
goto yy392;
} else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy332;
- goto yy392;
- } else {
- if(yych == 'p') goto yy392;
- goto yy332;
- }
+ if (yych == 'p') goto yy392;
+ goto yy332;
}
}
+ }
yy390:
- YYDEBUG(390, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
- yych = *YYCURSOR;
- YYDEBUG(391, *YYCURSOR);
- if(yych <= 'A') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy390;
- goto yy53;
- } else {
- if(yych <= ' ') goto yy390;
- if(yych <= '@') goto yy53;
- }
+ YYDEBUG(390, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
+ yych = *YYCURSOR;
+ YYDEBUG(391, *YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy390;
+ goto yy53;
} else {
- if(yych <= '`') {
- if(yych != 'P') goto yy53;
- } else {
- if(yych <= 'a') goto yy392;
- if(yych != 'p') goto yy53;
- }
+ if (yych <= ' ') goto yy390;
+ if (yych <= '@') goto yy53;
}
-yy392:
- YYDEBUG(392, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'L') {
- if(yych != '.') goto yy53;
+ } else {
+ if (yych <= '`') {
+ if (yych != 'P') goto yy53;
} else {
- if(yych <= 'M') goto yy394;
- if(yych == 'm') goto yy394;
- goto yy53;
+ if (yych <= 'a') goto yy392;
+ if (yych != 'p') goto yy53;
}
+ }
+yy392:
+ YYDEBUG(392, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'L') {
+ if (yych != '.') goto yy53;
+ } else {
+ if (yych <= 'M') goto yy394;
+ if (yych == 'm') goto yy394;
+ goto yy53;
+ }
yy393:
- YYDEBUG(393, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy394;
- if(yych != 'm') goto yy53;
+ YYDEBUG(393, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy394;
+ if (yych != 'm') goto yy53;
yy394:
- YYDEBUG(394, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x1F) {
- if(yych <= 0x00) goto yy385;
- if(yych == 0x09) goto yy385;
- goto yy53;
- } else {
- if(yych <= ' ') goto yy385;
- if(yych != '.') goto yy53;
- }
+ YYDEBUG(394, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 0x1F) {
+ if (yych <= 0x00) goto yy385;
+ if (yych == '\t') goto yy385;
+ goto yy53;
+ } else {
+ if (yych <= ' ') goto yy385;
+ if (yych != '.') goto yy53;
+ }
yy395:
- YYDEBUG(395, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x09) {
- if(yych <= 0x00) goto yy385;
- if(yych <= 0x08) goto yy53;
- goto yy385;
- } else {
- if(yych == ' ') goto yy385;
- goto yy53;
- }
+ YYDEBUG(395, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '\t') {
+ if (yych <= 0x00) goto yy385;
+ if (yych <= 0x08) goto yy53;
+ goto yy385;
+ } else {
+ if (yych == ' ') goto yy385;
+ goto yy53;
+ }
yy396:
- YYDEBUG(396, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy308;
- if(yych >= ':') goto yy308;
-yy397:
- YYDEBUG(397, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy308;
+ YYDEBUG(396, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy308;
+ if (yych >= ':') goto yy308;
+ YYDEBUG(397, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy308;
yy398:
- YYDEBUG(398, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy330;
- goto yy308;
- } else {
- if(yych <= '9') goto yy396;
- if(yych <= ':') goto yy330;
- goto yy308;
- }
+ YYDEBUG(398, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy330;
+ goto yy308;
+ } else {
+ if (yych <= '9') goto yy396;
+ if (yych <= ':') goto yy330;
+ goto yy308;
+ }
yy399:
- YYDEBUG(399, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
- } else {
- if(yych <= '9') goto yy396;
- if(yych <= ':') goto yy371;
- goto yy308;
- }
+ YYDEBUG(399, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy371;
+ goto yy308;
+ } else {
+ if (yych <= '9') goto yy396;
+ if (yych <= ':') goto yy371;
+ goto yy308;
+ }
yy400:
- YYDEBUG(400, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy308;
- if(yych >= ':') goto yy308;
+ YYDEBUG(400, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
yy401:
- YYDEBUG(401, *YYCURSOR);
- ++YYCURSOR;
- if((yych = *YYCURSOR) <= '/') goto yy402;
- if(yych <= '9') goto yy397;
+ YYDEBUG(401, *YYCURSOR);
+ ++YYCURSOR;
yy402:
- YYDEBUG(402, *YYCURSOR);
-#line 1186 "ext/date/lib/parse_date.re"
- {
+ YYDEBUG(402, *YYCURSOR);
+#line 1187 "ext/date/lib/parse_date.re"
+ {
DEBUG_OUTPUT("datenoday");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -6451,1244 +6445,1210 @@ yy402:
TIMELIB_DEINIT;
return TIMELIB_DATE_NO_DAY;
}
-#line 6455 "ext/date/lib/parse_date.c"
+#line 6449 "ext/date/lib/parse_date.c"
yy403:
- YYDEBUG(403, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy330;
- goto yy308;
- } else {
- if(yych <= '9') goto yy401;
- if(yych <= ':') goto yy330;
- goto yy308;
- }
+ YYDEBUG(403, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy330;
+ goto yy53;
+ } else {
+ if (yych <= '9') goto yy401;
+ if (yych <= ':') goto yy330;
+ goto yy53;
+ }
yy404:
- YYDEBUG(404, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
+ YYDEBUG(404, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy371;
+ goto yy53;
+ } else {
+ if (yych <= '9') goto yy401;
+ if (yych <= ':') goto yy371;
+ goto yy53;
+ }
+yy405:
+ YYDEBUG(405, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '/') {
+ if (yych == '.') goto yy438;
+ goto yy325;
} else {
- if(yych <= '9') goto yy401;
- if(yych <= ':') goto yy371;
- goto yy308;
+ if (yych <= '0') goto yy439;
+ if (yych <= '1') goto yy409;
+ if (yych <= '2') goto yy410;
+ goto yy404;
}
-yy405:
- YYDEBUG(405, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '/') {
- if(yych == '.') goto yy440;
- goto yy325;
- } else {
- if(yych <= '0') goto yy441;
- if(yych <= '1') goto yy409;
- if(yych <= '2') goto yy410;
- goto yy411;
- }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= ':') goto yy330;
+ if (yych == 'n') goto yy321;
+ goto yy325;
} else {
- if(yych <= 'q') {
- if(yych <= ':') goto yy330;
- if(yych == 'n') goto yy321;
- goto yy325;
- } else {
- if(yych <= 'r') goto yy322;
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ if (yych <= 'r') goto yy322;
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
}
+ }
yy406:
- YYDEBUG(406, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '/') {
- if(yych != '.') goto yy325;
- } else {
- if(yych <= '0') goto yy408;
- if(yych <= '1') goto yy409;
- if(yych <= '2') goto yy410;
- goto yy411;
- }
- } else {
- if(yych <= 'q') {
- if(yych <= ':') goto yy371;
- if(yych == 'n') goto yy321;
- goto yy325;
- } else {
- if(yych <= 'r') goto yy322;
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ YYDEBUG(406, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '/') {
+ if (yych != '.') goto yy325;
+ } else {
+ if (yych <= '0') goto yy408;
+ if (yych <= '1') goto yy409;
+ if (yych <= '2') goto yy410;
+ goto yy404;
}
-yy407:
- YYDEBUG(407, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '1') {
- if(yych <= '/') goto yy325;
- if(yych <= '0') goto yy415;
- goto yy416;
- } else {
- if(yych <= '2') goto yy417;
- if(yych <= '5') goto yy418;
- if(yych <= '9') goto yy419;
+ } else {
+ if (yych <= 'q') {
+ if (yych <= ':') goto yy371;
+ if (yych == 'n') goto yy321;
+ goto yy325;
+ } else {
+ if (yych <= 'r') goto yy322;
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
goto yy325;
}
+ }
+yy407:
+ YYDEBUG(407, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '1') {
+ if (yych <= '/') goto yy325;
+ if (yych <= '0') goto yy413;
+ goto yy414;
+ } else {
+ if (yych <= '2') goto yy415;
+ if (yych <= '5') goto yy416;
+ if (yych <= '9') goto yy417;
+ goto yy325;
+ }
yy408:
- YYDEBUG(408, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
- } else {
- if(yych <= '0') goto yy413;
- if(yych <= '9') goto yy414;
- if(yych <= ':') goto yy371;
- goto yy308;
- }
+ YYDEBUG(408, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy371;
+ goto yy53;
+ } else {
+ if (yych <= '0') goto yy411;
+ if (yych <= '9') goto yy412;
+ if (yych <= ':') goto yy371;
+ goto yy53;
+ }
yy409:
- YYDEBUG(409, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
- } else {
- if(yych <= '2') goto yy414;
- if(yych <= '9') goto yy413;
- if(yych <= ':') goto yy371;
- goto yy308;
- }
+ YYDEBUG(409, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy371;
+ goto yy53;
+ } else {
+ if (yych <= '2') goto yy412;
+ if (yych <= '9') goto yy411;
+ if (yych <= ':') goto yy371;
+ goto yy53;
+ }
yy410:
- YYDEBUG(410, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
- } else {
- if(yych <= '3') goto yy413;
- if(yych <= '9') goto yy412;
- if(yych <= ':') goto yy371;
- goto yy308;
- }
+ YYDEBUG(410, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy371;
+ goto yy53;
+ } else {
+ if (yych <= '3') goto yy411;
+ if (yych <= '9') goto yy401;
+ if (yych <= ':') goto yy371;
+ goto yy53;
+ }
yy411:
- YYDEBUG(411, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy308;
- } else {
- if(yych <= '9') goto yy412;
- if(yych <= ':') goto yy371;
- goto yy308;
- }
+ YYDEBUG(411, *YYCURSOR);
+ yyaccept = 9;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy330;
+ if (yych == ':') goto yy330;
+ goto yy402;
yy412:
- YYDEBUG(412, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy402;
- if(yych <= '9') goto yy396;
- goto yy402;
+ YYDEBUG(412, *YYCURSOR);
+ yyaccept = 9;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy371;
+ if (yych == ':') goto yy371;
+ goto yy402;
yy413:
- YYDEBUG(413, *YYCURSOR);
- yyaccept = 9;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy330;
- goto yy402;
- } else {
- if(yych <= '9') goto yy396;
- if(yych <= ':') goto yy330;
- goto yy402;
- }
+ YYDEBUG(413, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy433;
+ goto yy308;
+ } else {
+ if (yych <= '0') goto yy432;
+ if (yych <= '9') goto yy437;
+ if (yych <= ':') goto yy433;
+ goto yy308;
+ }
yy414:
- YYDEBUG(414, *YYCURSOR);
- yyaccept = 9;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy371;
- goto yy402;
- } else {
- if(yych <= '9') goto yy396;
- if(yych <= ':') goto yy371;
- goto yy402;
- }
+ YYDEBUG(414, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy418;
+ goto yy308;
+ } else {
+ if (yych <= '2') goto yy437;
+ if (yych <= '9') goto yy432;
+ if (yych <= ':') goto yy418;
+ goto yy308;
+ }
yy415:
- YYDEBUG(415, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy435;
- goto yy308;
- } else {
- if(yych <= '0') goto yy434;
- if(yych <= '9') goto yy439;
- if(yych <= ':') goto yy435;
- goto yy308;
- }
+ YYDEBUG(415, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy418;
+ goto yy308;
+ } else {
+ if (yych <= '3') goto yy432;
+ if (yych <= '9') goto yy431;
+ if (yych <= ':') goto yy418;
+ goto yy308;
+ }
yy416:
- YYDEBUG(416, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy420;
- goto yy308;
- } else {
- if(yych <= '2') goto yy439;
- if(yych <= '9') goto yy434;
- if(yych <= ':') goto yy420;
- goto yy308;
- }
+ YYDEBUG(416, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy418;
+ goto yy308;
+ } else {
+ if (yych <= '9') goto yy431;
+ if (yych <= ':') goto yy418;
+ goto yy308;
+ }
yy417:
- YYDEBUG(417, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy420;
- goto yy308;
- } else {
- if(yych <= '3') goto yy434;
- if(yych <= '9') goto yy433;
- if(yych <= ':') goto yy420;
- goto yy308;
- }
+ YYDEBUG(417, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych != '.') goto yy308;
+ } else {
+ if (yych <= '9') goto yy370;
+ if (yych >= ';') goto yy308;
+ }
yy418:
- YYDEBUG(418, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy420;
- goto yy308;
- } else {
- if(yych <= '9') goto yy433;
- if(yych <= ':') goto yy420;
- goto yy308;
- }
+ YYDEBUG(418, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy419;
+ if (yych <= '6') goto yy420;
+ if (yych <= '9') goto yy373;
+ goto yy53;
yy419:
- YYDEBUG(419, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych != '.') goto yy308;
- } else {
- if(yych <= '9') goto yy370;
- if(yych >= ';') goto yy308;
- }
+ YYDEBUG(419, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy374;
+ goto yy332;
+ } else {
+ if (yych <= '9') goto yy421;
+ if (yych <= ':') goto yy374;
+ goto yy332;
+ }
yy420:
- YYDEBUG(420, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy421;
- if(yych <= '6') goto yy422;
- if(yych <= '9') goto yy373;
- goto yy53;
+ YYDEBUG(420, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy374;
+ goto yy332;
+ } else {
+ if (yych <= '0') goto yy377;
+ if (yych == ':') goto yy374;
+ goto yy332;
+ }
yy421:
- YYDEBUG(421, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy374;
- goto yy332;
- } else {
- if(yych <= '9') goto yy423;
- if(yych <= ':') goto yy374;
- goto yy332;
+ YYDEBUG(421, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy423;
+ if (yych <= 0x1F) goto yy332;
+ goto yy423;
+ } else {
+ if (yych <= '(') {
+ if (yych <= '\'') goto yy332;
+ goto yy423;
+ } else {
+ if (yych == '+') goto yy423;
+ goto yy332;
+ }
}
-yy422:
- YYDEBUG(422, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy374;
- goto yy332;
- } else {
- if(yych <= '0') goto yy377;
- if(yych == ':') goto yy374;
- goto yy332;
+ } else {
+ if (yych <= ':') {
+ if (yych <= '-') goto yy423;
+ if (yych <= '.') goto yy374;
+ if (yych <= '9') goto yy332;
+ goto yy374;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy332;
+ goto yy423;
+ } else {
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy423;
+ goto yy332;
+ }
}
+ }
+yy422:
+ YYDEBUG(422, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 8) YYFILL(8);
+ yych = *YYCURSOR;
yy423:
- YYDEBUG(423, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy425;
- if(yych <= 0x1F) goto yy332;
- goto yy425;
- } else {
- if(yych <= '(') {
- if(yych <= '\'') goto yy332;
- goto yy425;
- } else {
- if(yych == '+') goto yy425;
- goto yy332;
- }
+ YYDEBUG(423, *YYCURSOR);
+ if (yych <= '-') {
+ if (yych <= '\'') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy53;
+ goto yy422;
+ } else {
+ if (yych == ' ') goto yy422;
+ goto yy53;
}
} else {
- if(yych <= ':') {
- if(yych <= '-') goto yy425;
- if(yych <= '.') goto yy374;
- if(yych <= '9') goto yy332;
- goto yy374;
+ if (yych <= '*') {
+ if (yych <= '(') goto yy342;
+ goto yy53;
} else {
- if(yych <= 'Z') {
- if(yych <= '@') goto yy332;
- goto yy425;
- } else {
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy425;
- goto yy332;
- }
+ if (yych == ',') goto yy53;
+ goto yy341;
}
}
-yy424:
- YYDEBUG(424, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 8) YYFILL(8);
- yych = *YYCURSOR;
-yy425:
- YYDEBUG(425, *YYCURSOR);
- if(yych <= '-') {
- if(yych <= '\'') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy53;
- goto yy424;
- } else {
- if(yych == ' ') goto yy424;
- goto yy53;
- }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= 'A') {
+ if (yych <= '@') goto yy53;
} else {
- if(yych <= '*') {
- if(yych <= '(') goto yy342;
- goto yy53;
- } else {
- if(yych == ',') goto yy53;
- goto yy341;
- }
+ if (yych != 'P') goto yy343;
}
} else {
- if(yych <= 'Z') {
- if(yych <= 'A') {
- if(yych <= '@') goto yy53;
- } else {
- if(yych != 'P') goto yy343;
- }
+ if (yych <= 'o') {
+ if (yych <= '`') goto yy53;
+ if (yych <= 'a') goto yy425;
+ goto yy344;
} else {
- if(yych <= 'o') {
- if(yych <= '`') goto yy53;
- if(yych <= 'a') goto yy427;
- goto yy344;
- } else {
- if(yych <= 'p') goto yy427;
- if(yych <= 'z') goto yy344;
- goto yy53;
- }
+ if (yych <= 'p') goto yy425;
+ if (yych <= 'z') goto yy344;
+ goto yy53;
}
}
- YYDEBUG(426, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'L') {
- if(yych <= '-') {
- if(yych == ')') goto yy337;
- goto yy332;
- } else {
- if(yych <= '.') goto yy429;
- if(yych <= '@') goto yy332;
- goto yy345;
- }
+ }
+ YYDEBUG(424, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'L') {
+ if (yych <= '-') {
+ if (yych == ')') goto yy337;
+ goto yy332;
} else {
- if(yych <= '`') {
- if(yych <= 'M') goto yy428;
- if(yych <= 'Z') goto yy345;
- goto yy332;
- } else {
- if(yych == 'm') goto yy432;
- if(yych <= 'z') goto yy350;
- goto yy332;
- }
+ if (yych <= '.') goto yy427;
+ if (yych <= '@') goto yy332;
+ goto yy345;
}
-yy427:
- YYDEBUG(427, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'L') {
- if(yych <= '-') {
- if(yych == ')') goto yy337;
- goto yy332;
- } else {
- if(yych <= '.') goto yy429;
- if(yych <= '@') goto yy332;
- goto yy345;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'M') goto yy426;
+ if (yych <= 'Z') goto yy345;
+ goto yy332;
} else {
- if(yych <= '`') {
- if(yych <= 'M') goto yy428;
- if(yych <= 'Z') goto yy345;
- goto yy332;
- } else {
- if(yych == 'm') goto yy428;
- if(yych <= 'z') goto yy345;
- goto yy332;
- }
+ if (yych == 'm') goto yy430;
+ if (yych <= 'z') goto yy350;
+ goto yy332;
}
-yy428:
- YYDEBUG(428, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ')') {
- if(yych <= 0x09) {
- if(yych <= 0x00) goto yy385;
- if(yych <= 0x08) goto yy332;
- goto yy385;
- } else {
- if(yych == ' ') goto yy385;
- if(yych <= '(') goto yy332;
- goto yy337;
- }
- } else {
- if(yych <= '@') {
- if(yych == '.') goto yy431;
- goto yy332;
- } else {
- if(yych <= 'Z') goto yy346;
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy346;
- goto yy332;
- }
+ }
+yy425:
+ YYDEBUG(425, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'L') {
+ if (yych <= '-') {
+ if (yych == ')') goto yy337;
+ goto yy332;
+ } else {
+ if (yych <= '.') goto yy427;
+ if (yych <= '@') goto yy332;
+ goto yy345;
}
-yy429:
- YYDEBUG(429, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy430;
- if(yych != 'm') goto yy53;
-yy430:
- YYDEBUG(430, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x1F) {
- if(yych <= 0x00) goto yy385;
- if(yych == 0x09) goto yy385;
- goto yy53;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'M') goto yy426;
+ if (yych <= 'Z') goto yy345;
+ goto yy332;
} else {
- if(yych <= ' ') goto yy385;
- if(yych != '.') goto yy53;
+ if (yych == 'm') goto yy426;
+ if (yych <= 'z') goto yy345;
+ goto yy332;
}
-yy431:
- YYDEBUG(431, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x09) {
- if(yych <= 0x00) goto yy385;
- if(yych <= 0x08) goto yy53;
+ }
+yy426:
+ YYDEBUG(426, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ')') {
+ if (yych <= '\t') {
+ if (yych <= 0x00) goto yy385;
+ if (yych <= 0x08) goto yy332;
goto yy385;
} else {
- if(yych == ' ') goto yy385;
- goto yy53;
+ if (yych == ' ') goto yy385;
+ if (yych <= '(') goto yy332;
+ goto yy337;
}
-yy432:
- YYDEBUG(432, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '-') {
- if(yych <= 0x1F) {
- if(yych <= 0x00) goto yy385;
- if(yych == 0x09) goto yy385;
- goto yy332;
+ } else {
+ if (yych <= '@') {
+ if (yych == '.') goto yy429;
+ goto yy332;
+ } else {
+ if (yych <= 'Z') goto yy346;
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy346;
+ goto yy332;
+ }
+ }
+yy427:
+ YYDEBUG(427, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy428;
+ if (yych != 'm') goto yy53;
+yy428:
+ YYDEBUG(428, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 0x1F) {
+ if (yych <= 0x00) goto yy385;
+ if (yych == '\t') goto yy385;
+ goto yy53;
+ } else {
+ if (yych <= ' ') goto yy385;
+ if (yych != '.') goto yy53;
+ }
+yy429:
+ YYDEBUG(429, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '\t') {
+ if (yych <= 0x00) goto yy385;
+ if (yych <= 0x08) goto yy53;
+ goto yy385;
+ } else {
+ if (yych == ' ') goto yy385;
+ goto yy53;
+ }
+yy430:
+ YYDEBUG(430, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '-') {
+ if (yych <= 0x1F) {
+ if (yych <= 0x00) goto yy385;
+ if (yych == '\t') goto yy385;
+ goto yy332;
+ } else {
+ if (yych <= ' ') goto yy385;
+ if (yych == ')') goto yy337;
+ goto yy332;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '.') goto yy429;
+ if (yych <= '/') goto yy352;
+ if (yych <= '@') goto yy332;
+ goto yy346;
+ } else {
+ if (yych <= '_') {
+ if (yych <= '^') goto yy332;
+ goto yy352;
} else {
- if(yych <= ' ') goto yy385;
- if(yych == ')') goto yy337;
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy351;
goto yy332;
}
- } else {
- if(yych <= 'Z') {
- if(yych <= '.') goto yy431;
- if(yych <= '/') goto yy352;
- if(yych <= '@') goto yy332;
- goto yy346;
+ }
+ }
+yy431:
+ YYDEBUG(431, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ':') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy390;
+ if (yych <= 0x1F) goto yy308;
+ goto yy390;
+ } else {
+ if (yych <= '.') {
+ if (yych <= '-') goto yy308;
+ goto yy374;
} else {
- if(yych <= '_') {
- if(yych <= '^') goto yy332;
- goto yy352;
- } else {
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy351;
- goto yy332;
- }
+ if (yych <= '/') goto yy308;
+ if (yych <= '9') goto yy396;
+ goto yy374;
}
}
-yy433:
- YYDEBUG(433, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ':') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy390;
- if(yych <= 0x1F) goto yy308;
- goto yy390;
- } else {
- if(yych <= '.') {
- if(yych <= '-') goto yy308;
- goto yy374;
- } else {
- if(yych <= '/') goto yy308;
- if(yych <= '9') goto yy396;
- goto yy374;
- }
- }
+ } else {
+ if (yych <= 'P') {
+ if (yych == 'A') goto yy392;
+ if (yych <= 'O') goto yy308;
+ goto yy392;
} else {
- if(yych <= 'P') {
- if(yych == 'A') goto yy392;
- if(yych <= 'O') goto yy308;
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy308;
goto yy392;
} else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy308;
- goto yy392;
- } else {
- if(yych == 'p') goto yy392;
- goto yy308;
- }
+ if (yych == 'p') goto yy392;
+ goto yy308;
}
}
-yy434:
- YYDEBUG(434, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ':') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy390;
- if(yych <= 0x1F) goto yy308;
- goto yy390;
- } else {
- if(yych <= '.') {
- if(yych <= '-') goto yy308;
- } else {
- if(yych <= '/') goto yy308;
- if(yych <= '9') goto yy396;
- }
+ }
+yy432:
+ YYDEBUG(432, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ':') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy390;
+ if (yych <= 0x1F) goto yy308;
+ goto yy390;
+ } else {
+ if (yych <= '.') {
+ if (yych <= '-') goto yy308;
+ } else {
+ if (yych <= '/') goto yy308;
+ if (yych <= '9') goto yy396;
}
+ }
+ } else {
+ if (yych <= 'P') {
+ if (yych == 'A') goto yy392;
+ if (yych <= 'O') goto yy308;
+ goto yy392;
} else {
- if(yych <= 'P') {
- if(yych == 'A') goto yy392;
- if(yych <= 'O') goto yy308;
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy308;
goto yy392;
} else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy308;
- goto yy392;
- } else {
- if(yych == 'p') goto yy392;
- goto yy308;
- }
+ if (yych == 'p') goto yy392;
+ goto yy308;
}
}
+ }
+yy433:
+ YYDEBUG(433, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy434;
+ if (yych <= '6') goto yy435;
+ if (yych <= '9') goto yy333;
+ goto yy53;
+yy434:
+ YYDEBUG(434, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy334;
+ goto yy332;
+ } else {
+ if (yych <= '9') goto yy436;
+ if (yych <= ':') goto yy334;
+ goto yy332;
+ }
yy435:
- YYDEBUG(435, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy436;
- if(yych <= '6') goto yy437;
- if(yych <= '9') goto yy333;
- goto yy53;
+ YYDEBUG(435, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy334;
+ goto yy332;
+ } else {
+ if (yych <= '0') goto yy377;
+ if (yych == ':') goto yy334;
+ goto yy332;
+ }
yy436:
- YYDEBUG(436, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy334;
- goto yy332;
- } else {
- if(yych <= '9') goto yy438;
- if(yych <= ':') goto yy334;
- goto yy332;
- }
-yy437:
- YYDEBUG(437, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy334;
- goto yy332;
- } else {
- if(yych <= '0') goto yy377;
- if(yych == ':') goto yy334;
- goto yy332;
+ YYDEBUG(436, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy379;
+ if (yych <= 0x1F) goto yy332;
+ goto yy379;
+ } else {
+ if (yych <= '(') {
+ if (yych <= '\'') goto yy332;
+ goto yy379;
+ } else {
+ if (yych == '+') goto yy379;
+ goto yy332;
+ }
}
-yy438:
- YYDEBUG(438, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy379;
- if(yych <= 0x1F) goto yy332;
+ } else {
+ if (yych <= ':') {
+ if (yych <= '-') goto yy379;
+ if (yych <= '.') goto yy334;
+ if (yych <= '9') goto yy332;
+ goto yy334;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy332;
goto yy379;
} else {
- if(yych <= '(') {
- if(yych <= '\'') goto yy332;
- goto yy379;
- } else {
- if(yych == '+') goto yy379;
- goto yy332;
- }
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy379;
+ goto yy332;
}
+ }
+ }
+yy437:
+ YYDEBUG(437, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ':') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy390;
+ if (yych <= 0x1F) goto yy308;
+ goto yy390;
} else {
- if(yych <= ':') {
- if(yych <= '-') goto yy379;
- if(yych <= '.') goto yy334;
- if(yych <= '9') goto yy332;
- goto yy334;
+ if (yych <= '.') {
+ if (yych <= '-') goto yy308;
+ goto yy418;
} else {
- if(yych <= 'Z') {
- if(yych <= '@') goto yy332;
- goto yy379;
- } else {
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy379;
- goto yy332;
- }
+ if (yych <= '/') goto yy308;
+ if (yych <= '9') goto yy396;
+ goto yy418;
}
}
-yy439:
- YYDEBUG(439, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ':') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy390;
- if(yych <= 0x1F) goto yy308;
- goto yy390;
- } else {
- if(yych <= '.') {
- if(yych <= '-') goto yy308;
- goto yy420;
- } else {
- if(yych <= '/') goto yy308;
- if(yych <= '9') goto yy396;
- goto yy420;
- }
- }
+ } else {
+ if (yych <= 'P') {
+ if (yych == 'A') goto yy392;
+ if (yych <= 'O') goto yy308;
+ goto yy392;
} else {
- if(yych <= 'P') {
- if(yych == 'A') goto yy392;
- if(yych <= 'O') goto yy308;
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy308;
goto yy392;
} else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy308;
- goto yy392;
- } else {
- if(yych == 'p') goto yy392;
- goto yy308;
- }
+ if (yych == 'p') goto yy392;
+ goto yy308;
}
}
+ }
+yy438:
+ YYDEBUG(438, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '1') {
+ if (yych <= '/') goto yy325;
+ if (yych <= '0') goto yy440;
+ goto yy441;
+ } else {
+ if (yych <= '2') goto yy442;
+ if (yych <= '5') goto yy443;
+ if (yych <= '9') goto yy444;
+ goto yy325;
+ }
+yy439:
+ YYDEBUG(439, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy330;
+ goto yy53;
+ } else {
+ if (yych <= '0') goto yy411;
+ if (yych <= '9') goto yy412;
+ if (yych <= ':') goto yy330;
+ goto yy53;
+ }
yy440:
- YYDEBUG(440, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '1') {
- if(yych <= '/') goto yy325;
- if(yych <= '0') goto yy442;
- goto yy443;
- } else {
- if(yych <= '2') goto yy444;
- if(yych <= '5') goto yy445;
- if(yych <= '9') goto yy446;
- goto yy325;
- }
+ YYDEBUG(440, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy457;
+ goto yy308;
+ } else {
+ if (yych <= '0') goto yy456;
+ if (yych <= '9') goto yy461;
+ if (yych <= ':') goto yy457;
+ goto yy308;
+ }
yy441:
- YYDEBUG(441, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy330;
- goto yy308;
- } else {
- if(yych <= '0') goto yy413;
- if(yych <= '9') goto yy414;
- if(yych <= ':') goto yy330;
- goto yy308;
- }
+ YYDEBUG(441, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy445;
+ goto yy308;
+ } else {
+ if (yych <= '2') goto yy461;
+ if (yych <= '9') goto yy456;
+ if (yych <= ':') goto yy445;
+ goto yy308;
+ }
yy442:
- YYDEBUG(442, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy459;
- goto yy308;
- } else {
- if(yych <= '0') goto yy458;
- if(yych <= '9') goto yy463;
- if(yych <= ':') goto yy459;
- goto yy308;
- }
+ YYDEBUG(442, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy445;
+ goto yy308;
+ } else {
+ if (yych <= '3') goto yy456;
+ if (yych <= '9') goto yy455;
+ if (yych <= ':') goto yy445;
+ goto yy308;
+ }
yy443:
- YYDEBUG(443, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy447;
- goto yy308;
- } else {
- if(yych <= '2') goto yy463;
- if(yych <= '9') goto yy458;
- if(yych <= ':') goto yy447;
- goto yy308;
- }
+ YYDEBUG(443, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy445;
+ goto yy308;
+ } else {
+ if (yych <= '9') goto yy455;
+ if (yych <= ':') goto yy445;
+ goto yy308;
+ }
yy444:
- YYDEBUG(444, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy447;
- goto yy308;
- } else {
- if(yych <= '3') goto yy458;
- if(yych <= '9') goto yy457;
- if(yych <= ':') goto yy447;
- goto yy308;
- }
+ YYDEBUG(444, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych != '.') goto yy308;
+ } else {
+ if (yych <= '9') goto yy370;
+ if (yych >= ';') goto yy308;
+ }
yy445:
- YYDEBUG(445, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy447;
- goto yy308;
- } else {
- if(yych <= '9') goto yy457;
- if(yych <= ':') goto yy447;
- goto yy308;
- }
+ YYDEBUG(445, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy446;
+ if (yych <= '6') goto yy447;
+ if (yych <= '9') goto yy373;
+ goto yy53;
yy446:
- YYDEBUG(446, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych != '.') goto yy308;
- } else {
- if(yych <= '9') goto yy370;
- if(yych >= ';') goto yy308;
- }
+ YYDEBUG(446, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy374;
+ goto yy332;
+ } else {
+ if (yych <= '9') goto yy448;
+ if (yych <= ':') goto yy374;
+ goto yy332;
+ }
yy447:
- YYDEBUG(447, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy448;
- if(yych <= '6') goto yy449;
- if(yych <= '9') goto yy373;
- goto yy53;
+ YYDEBUG(447, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy374;
+ goto yy332;
+ } else {
+ if (yych <= '0') goto yy338;
+ if (yych == ':') goto yy374;
+ goto yy332;
+ }
yy448:
- YYDEBUG(448, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy374;
- goto yy332;
- } else {
- if(yych <= '9') goto yy450;
- if(yych <= ':') goto yy374;
- goto yy332;
+ YYDEBUG(448, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy450;
+ if (yych <= 0x1F) goto yy332;
+ goto yy450;
+ } else {
+ if (yych <= '(') {
+ if (yych <= '\'') goto yy332;
+ goto yy450;
+ } else {
+ if (yych == '+') goto yy450;
+ goto yy332;
+ }
}
-yy449:
- YYDEBUG(449, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy374;
- goto yy332;
- } else {
- if(yych <= '0') goto yy338;
- if(yych == ':') goto yy374;
- goto yy332;
+ } else {
+ if (yych <= ':') {
+ if (yych <= '-') goto yy450;
+ if (yych <= '.') goto yy374;
+ if (yych <= '9') goto yy332;
+ goto yy374;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy332;
+ goto yy450;
+ } else {
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy450;
+ goto yy332;
+ }
}
+ }
+yy449:
+ YYDEBUG(449, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 8) YYFILL(8);
+ yych = *YYCURSOR;
yy450:
- YYDEBUG(450, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy452;
- if(yych <= 0x1F) goto yy332;
- goto yy452;
- } else {
- if(yych <= '(') {
- if(yych <= '\'') goto yy332;
- goto yy452;
- } else {
- if(yych == '+') goto yy452;
- goto yy332;
- }
+ YYDEBUG(450, *YYCURSOR);
+ if (yych <= '-') {
+ if (yych <= '\'') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy53;
+ goto yy449;
+ } else {
+ if (yych == ' ') goto yy449;
+ goto yy53;
}
} else {
- if(yych <= ':') {
- if(yych <= '-') goto yy452;
- if(yych <= '.') goto yy374;
- if(yych <= '9') goto yy332;
- goto yy374;
+ if (yych <= '*') {
+ if (yych <= '(') goto yy342;
+ goto yy53;
} else {
- if(yych <= 'Z') {
- if(yych <= '@') goto yy332;
- goto yy452;
- } else {
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy452;
- goto yy332;
- }
+ if (yych == ',') goto yy53;
+ goto yy341;
}
}
-yy451:
- YYDEBUG(451, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 8) YYFILL(8);
- yych = *YYCURSOR;
-yy452:
- YYDEBUG(452, *YYCURSOR);
- if(yych <= '-') {
- if(yych <= '\'') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy53;
- goto yy451;
- } else {
- if(yych == ' ') goto yy451;
- goto yy53;
- }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= 'A') {
+ if (yych <= '@') goto yy53;
} else {
- if(yych <= '*') {
- if(yych <= '(') goto yy342;
- goto yy53;
- } else {
- if(yych == ',') goto yy53;
- goto yy341;
- }
+ if (yych != 'P') goto yy343;
}
} else {
- if(yych <= 'Z') {
- if(yych <= 'A') {
- if(yych <= '@') goto yy53;
- } else {
- if(yych != 'P') goto yy343;
- }
+ if (yych <= 'o') {
+ if (yych <= '`') goto yy53;
+ if (yych <= 'a') goto yy452;
+ goto yy344;
} else {
- if(yych <= 'o') {
- if(yych <= '`') goto yy53;
- if(yych <= 'a') goto yy454;
- goto yy344;
- } else {
- if(yych <= 'p') goto yy454;
- if(yych <= 'z') goto yy344;
- goto yy53;
- }
+ if (yych <= 'p') goto yy452;
+ if (yych <= 'z') goto yy344;
+ goto yy53;
}
}
- YYDEBUG(453, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'L') {
- if(yych <= '-') {
- if(yych == ')') goto yy337;
- goto yy332;
- } else {
- if(yych <= '.') goto yy393;
- if(yych <= '@') goto yy332;
- goto yy345;
- }
+ }
+ YYDEBUG(451, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'L') {
+ if (yych <= '-') {
+ if (yych == ')') goto yy337;
+ goto yy332;
} else {
- if(yych <= '`') {
- if(yych <= 'M') goto yy455;
- if(yych <= 'Z') goto yy345;
- goto yy332;
- } else {
- if(yych == 'm') goto yy456;
- if(yych <= 'z') goto yy350;
- goto yy332;
- }
+ if (yych <= '.') goto yy393;
+ if (yych <= '@') goto yy332;
+ goto yy345;
}
-yy454:
- YYDEBUG(454, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'L') {
- if(yych <= '-') {
- if(yych == ')') goto yy337;
- goto yy332;
- } else {
- if(yych <= '.') goto yy393;
- if(yych <= '@') goto yy332;
- goto yy345;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'M') goto yy453;
+ if (yych <= 'Z') goto yy345;
+ goto yy332;
} else {
- if(yych <= '`') {
- if(yych <= 'M') goto yy455;
- if(yych <= 'Z') goto yy345;
- goto yy332;
- } else {
- if(yych == 'm') goto yy455;
- if(yych <= 'z') goto yy345;
- goto yy332;
- }
- }
-yy455:
- YYDEBUG(455, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ')') {
- if(yych <= 0x09) {
- if(yych <= 0x00) goto yy385;
- if(yych <= 0x08) goto yy332;
- goto yy385;
- } else {
- if(yych == ' ') goto yy385;
- if(yych <= '(') goto yy332;
- goto yy337;
- }
- } else {
- if(yych <= '@') {
- if(yych == '.') goto yy395;
- goto yy332;
- } else {
- if(yych <= 'Z') goto yy346;
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy346;
- goto yy332;
- }
+ if (yych == 'm') goto yy454;
+ if (yych <= 'z') goto yy350;
+ goto yy332;
}
-yy456:
- YYDEBUG(456, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '-') {
- if(yych <= 0x1F) {
- if(yych <= 0x00) goto yy385;
- if(yych == 0x09) goto yy385;
- goto yy332;
- } else {
- if(yych <= ' ') goto yy385;
- if(yych == ')') goto yy337;
- goto yy332;
- }
+ }
+yy452:
+ YYDEBUG(452, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'L') {
+ if (yych <= '-') {
+ if (yych == ')') goto yy337;
+ goto yy332;
} else {
- if(yych <= 'Z') {
- if(yych <= '.') goto yy395;
- if(yych <= '/') goto yy352;
- if(yych <= '@') goto yy332;
- goto yy346;
- } else {
- if(yych <= '_') {
- if(yych <= '^') goto yy332;
- goto yy352;
- } else {
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy351;
- goto yy332;
- }
- }
+ if (yych <= '.') goto yy393;
+ if (yych <= '@') goto yy332;
+ goto yy345;
}
-yy457:
- YYDEBUG(457, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy334;
- goto yy308;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'M') goto yy453;
+ if (yych <= 'Z') goto yy345;
+ goto yy332;
} else {
- if(yych <= '9') goto yy396;
- if(yych <= ':') goto yy334;
- goto yy308;
+ if (yych == 'm') goto yy453;
+ if (yych <= 'z') goto yy345;
+ goto yy332;
}
-yy458:
- YYDEBUG(458, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych != '.') goto yy308;
+ }
+yy453:
+ YYDEBUG(453, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ')') {
+ if (yych <= '\t') {
+ if (yych <= 0x00) goto yy385;
+ if (yych <= 0x08) goto yy332;
+ goto yy385;
} else {
- if(yych <= '9') goto yy396;
- if(yych >= ';') goto yy308;
+ if (yych == ' ') goto yy385;
+ if (yych <= '(') goto yy332;
+ goto yy337;
}
-yy459:
- YYDEBUG(459, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy460;
- if(yych <= '6') goto yy461;
- if(yych <= '9') goto yy333;
- goto yy53;
-yy460:
- YYDEBUG(460, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy334;
+ } else {
+ if (yych <= '@') {
+ if (yych == '.') goto yy395;
goto yy332;
} else {
- if(yych <= '9') goto yy462;
- if(yych <= ':') goto yy334;
+ if (yych <= 'Z') goto yy346;
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy346;
goto yy332;
}
-yy461:
- YYDEBUG(461, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy334;
+ }
+yy454:
+ YYDEBUG(454, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '-') {
+ if (yych <= 0x1F) {
+ if (yych <= 0x00) goto yy385;
+ if (yych == '\t') goto yy385;
goto yy332;
} else {
- if(yych <= '0') goto yy338;
- if(yych == ':') goto yy334;
+ if (yych <= ' ') goto yy385;
+ if (yych == ')') goto yy337;
goto yy332;
}
-yy462:
- YYDEBUG(462, *YYCURSOR);
- yyaccept = 8;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy339;
- if(yych <= 0x1F) goto yy332;
- goto yy339;
- } else {
- if(yych <= '(') {
- if(yych <= '\'') goto yy332;
- goto yy342;
- } else {
- if(yych == '+') goto yy341;
- goto yy332;
- }
- }
- } else {
- if(yych <= ':') {
- if(yych <= '-') goto yy341;
- if(yych <= '.') goto yy334;
- if(yych <= '9') goto yy332;
- goto yy334;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '.') goto yy395;
+ if (yych <= '/') goto yy352;
+ if (yych <= '@') goto yy332;
+ goto yy346;
+ } else {
+ if (yych <= '_') {
+ if (yych <= '^') goto yy332;
+ goto yy352;
} else {
- if(yych <= 'Z') {
- if(yych <= '@') goto yy332;
- goto yy343;
- } else {
- if(yych <= '`') goto yy332;
- if(yych <= 'z') goto yy344;
- goto yy332;
- }
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy351;
+ goto yy332;
+ }
+ }
+ }
+yy455:
+ YYDEBUG(455, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy334;
+ goto yy308;
+ } else {
+ if (yych <= '9') goto yy396;
+ if (yych <= ':') goto yy334;
+ goto yy308;
+ }
+yy456:
+ YYDEBUG(456, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych != '.') goto yy308;
+ } else {
+ if (yych <= '9') goto yy396;
+ if (yych >= ';') goto yy308;
+ }
+yy457:
+ YYDEBUG(457, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy458;
+ if (yych <= '6') goto yy459;
+ if (yych <= '9') goto yy333;
+ goto yy53;
+yy458:
+ YYDEBUG(458, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy334;
+ goto yy332;
+ } else {
+ if (yych <= '9') goto yy460;
+ if (yych <= ':') goto yy334;
+ goto yy332;
+ }
+yy459:
+ YYDEBUG(459, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy334;
+ goto yy332;
+ } else {
+ if (yych <= '0') goto yy338;
+ if (yych == ':') goto yy334;
+ goto yy332;
+ }
+yy460:
+ YYDEBUG(460, *YYCURSOR);
+ yyaccept = 8;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy339;
+ if (yych <= 0x1F) goto yy332;
+ goto yy339;
+ } else {
+ if (yych <= '(') {
+ if (yych <= '\'') goto yy332;
+ goto yy342;
+ } else {
+ if (yych == '+') goto yy341;
+ goto yy332;
+ }
+ }
+ } else {
+ if (yych <= ':') {
+ if (yych <= '-') goto yy341;
+ if (yych <= '.') goto yy334;
+ if (yych <= '9') goto yy332;
+ goto yy334;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') goto yy332;
+ goto yy343;
+ } else {
+ if (yych <= '`') goto yy332;
+ if (yych <= 'z') goto yy344;
+ goto yy332;
}
}
+ }
+yy461:
+ YYDEBUG(461, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy445;
+ goto yy308;
+ } else {
+ if (yych <= '9') goto yy396;
+ if (yych <= ':') goto yy445;
+ goto yy308;
+ }
+yy462:
+ YYDEBUG(462, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '/') {
+ if (yych == '.') goto yy407;
+ goto yy325;
+ } else {
+ if (yych <= '0') goto yy439;
+ if (yych <= '1') goto yy409;
+ if (yych <= '2') goto yy410;
+ goto yy404;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= ':') goto yy371;
+ if (yych == 'n') goto yy321;
+ goto yy325;
+ } else {
+ if (yych <= 'r') goto yy322;
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
+ }
+ }
yy463:
- YYDEBUG(463, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy447;
- goto yy308;
+ YYDEBUG(463, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '/') {
+ if (yych == '.') goto yy407;
+ goto yy325;
+ } else {
+ if (yych <= '0') goto yy439;
+ if (yych <= '1') goto yy409;
+ if (yych <= '2') goto yy410;
+ goto yy404;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= ':') goto yy371;
+ if (yych == 'n') goto yy321;
+ goto yy325;
} else {
- if(yych <= '9') goto yy396;
- if(yych <= ':') goto yy447;
- goto yy308;
+ if (yych <= 'r') goto yy322;
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
}
+ }
yy464:
- YYDEBUG(464, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '/') {
- if(yych == '.') goto yy407;
- goto yy325;
- } else {
- if(yych <= '0') goto yy441;
- if(yych <= '1') goto yy409;
- if(yych <= '2') goto yy410;
- goto yy411;
- }
+ YYDEBUG(464, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'm') {
+ if (yych <= '1') {
+ if (yych <= '/') goto yy325;
+ if (yych <= '0') goto yy467;
+ goto yy468;
+ } else {
+ if (yych <= '2') goto yy475;
+ if (yych <= '9') goto yy476;
+ goto yy325;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'n') goto yy321;
+ if (yych <= 'q') goto yy325;
+ goto yy322;
} else {
- if(yych <= 'q') {
- if(yych <= ':') goto yy371;
- if(yych == 'n') goto yy321;
- goto yy325;
- } else {
- if(yych <= 'r') goto yy322;
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
}
+ }
yy465:
- YYDEBUG(465, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '/') {
- if(yych == '.') goto yy407;
- goto yy325;
- } else {
- if(yych <= '0') goto yy441;
- if(yych <= '1') goto yy409;
- if(yych <= '2') goto yy410;
- goto yy411;
- }
+ YYDEBUG(465, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'm') {
+ if (yych <= '1') {
+ if (yych <= '/') goto yy325;
+ if (yych <= '0') goto yy467;
+ goto yy468;
+ } else {
+ if (yych <= '2') goto yy475;
+ if (yych <= '9') goto yy476;
+ goto yy325;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'n') goto yy321;
+ if (yych <= 'q') goto yy325;
+ goto yy322;
} else {
- if(yych <= 'q') {
- if(yych <= ':') goto yy371;
- if(yych == 'n') goto yy321;
- goto yy325;
- } else {
- if(yych <= 'r') goto yy322;
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
}
+ }
yy466:
- YYDEBUG(466, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'm') {
- if(yych <= '1') {
- if(yych <= '/') goto yy325;
- if(yych <= '0') goto yy469;
- goto yy470;
- } else {
- if(yych <= '2') goto yy477;
- if(yych <= '9') goto yy478;
- goto yy325;
- }
+ YYDEBUG(466, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'm') {
+ if (yych <= '1') {
+ if (yych <= '/') goto yy325;
+ if (yych >= '1') goto yy468;
+ } else {
+ if (yych <= '2') goto yy318;
+ if (yych <= '9') goto yy319;
+ goto yy325;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'n') goto yy321;
+ if (yych <= 'q') goto yy325;
+ goto yy322;
} else {
- if(yych <= 'r') {
- if(yych <= 'n') goto yy321;
- if(yych <= 'q') goto yy325;
- goto yy322;
- } else {
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
}
+ }
yy467:
- YYDEBUG(467, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'm') {
- if(yych <= '1') {
- if(yych <= '/') goto yy325;
- if(yych <= '0') goto yy469;
- goto yy470;
- } else {
- if(yych <= '2') goto yy477;
- if(yych <= '9') goto yy478;
- goto yy325;
- }
+ YYDEBUG(467, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '/') {
+ if (yych <= ',') goto yy325;
+ if (yych <= '-') goto yy469;
+ if (yych <= '.') goto yy438;
+ goto yy325;
} else {
- if(yych <= 'r') {
- if(yych <= 'n') goto yy321;
- if(yych <= 'q') goto yy325;
- goto yy322;
- } else {
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ if (yych <= '0') goto yy439;
+ if (yych <= '1') goto yy409;
+ if (yych <= '2') goto yy410;
+ goto yy404;
}
+ } else {
+ if (yych <= 'q') {
+ if (yych <= ':') goto yy330;
+ if (yych == 'n') goto yy321;
+ goto yy325;
+ } else {
+ if (yych <= 'r') goto yy322;
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
+ }
+ }
yy468:
- YYDEBUG(468, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'm') {
- if(yych <= '1') {
- if(yych <= '/') goto yy325;
- if(yych >= '1') goto yy470;
- } else {
- if(yych <= '2') goto yy318;
- if(yych <= '9') goto yy319;
- goto yy325;
- }
+ YYDEBUG(468, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '/') {
+ if (yych <= ',') goto yy325;
+ if (yych <= '-') goto yy469;
+ if (yych <= '.') goto yy407;
+ goto yy325;
} else {
- if(yych <= 'r') {
- if(yych <= 'n') goto yy321;
- if(yych <= 'q') goto yy325;
- goto yy322;
- } else {
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ if (yych <= '0') goto yy408;
+ if (yych <= '1') goto yy409;
+ if (yych <= '2') goto yy410;
+ goto yy404;
}
-yy469:
- YYDEBUG(469, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '/') {
- if(yych <= ',') goto yy325;
- if(yych <= '-') goto yy471;
- if(yych <= '.') goto yy440;
- goto yy325;
- } else {
- if(yych <= '0') goto yy441;
- if(yych <= '1') goto yy409;
- if(yych <= '2') goto yy410;
- goto yy411;
- }
- } else {
- if(yych <= 'q') {
- if(yych <= ':') goto yy330;
- if(yych == 'n') goto yy321;
- goto yy325;
- } else {
- if(yych <= 'r') goto yy322;
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
- }
-yy470:
- YYDEBUG(470, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '/') {
- if(yych <= ',') goto yy325;
- if(yych <= '-') goto yy471;
- if(yych <= '.') goto yy407;
- goto yy325;
- } else {
- if(yych <= '0') goto yy408;
- if(yych <= '1') goto yy409;
- if(yych <= '2') goto yy410;
- goto yy411;
- }
- } else {
- if(yych <= 'q') {
- if(yych <= ':') goto yy371;
- if(yych == 'n') goto yy321;
- goto yy325;
- } else {
- if(yych <= 'r') goto yy322;
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= ':') goto yy371;
+ if (yych == 'n') goto yy321;
+ goto yy325;
+ } else {
+ if (yych <= 'r') goto yy322;
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
}
+ }
+yy469:
+ YYDEBUG(469, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(470, *YYCURSOR);
+ ++YYCURSOR;
+ if ((yych = *YYCURSOR) <= '/') goto yy471;
+ if (yych <= '9') goto yy472;
yy471:
- YYDEBUG(471, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- YYDEBUG(472, *YYCURSOR);
- ++YYCURSOR;
- if((yych = *YYCURSOR) <= '/') goto yy473;
- if(yych <= '9') goto yy474;
-yy473:
- YYDEBUG(473, *YYCURSOR);
-#line 1326 "ext/date/lib/parse_date.re"
- {
+ YYDEBUG(471, *YYCURSOR);
+#line 1327 "ext/date/lib/parse_date.re"
+ {
DEBUG_OUTPUT("pgtextshort");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -7699,1889 +7659,1889 @@ yy473:
TIMELIB_DEINIT;
return TIMELIB_PG_TEXT;
}
-#line 7703 "ext/date/lib/parse_date.c"
-yy474:
- YYDEBUG(474, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy473;
- if(yych >= ':') goto yy473;
- YYDEBUG(475, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy473;
- if(yych >= ':') goto yy473;
- YYDEBUG(476, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy473;
+#line 7663 "ext/date/lib/parse_date.c"
+yy472:
+ YYDEBUG(472, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy471;
+ if (yych >= ':') goto yy471;
+ YYDEBUG(473, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy471;
+ if (yych >= ':') goto yy471;
+ YYDEBUG(474, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy471;
+yy475:
+ YYDEBUG(475, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '/') {
+ if (yych <= ',') goto yy325;
+ if (yych <= '-') goto yy469;
+ if (yych <= '.') goto yy407;
+ goto yy325;
+ } else {
+ if (yych <= '0') goto yy439;
+ if (yych <= '1') goto yy409;
+ if (yych <= '2') goto yy410;
+ goto yy404;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= ':') goto yy371;
+ if (yych == 'n') goto yy321;
+ goto yy325;
+ } else {
+ if (yych <= 'r') goto yy322;
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
+ }
+ }
+yy476:
+ YYDEBUG(476, *YYCURSOR);
+ yyaccept = 7;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '/') {
+ if (yych <= ',') goto yy325;
+ if (yych <= '-') goto yy469;
+ if (yych <= '.') goto yy407;
+ goto yy325;
+ } else {
+ if (yych <= '0') goto yy439;
+ if (yych <= '1') goto yy409;
+ if (yych <= '2') goto yy410;
+ goto yy404;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= ':') goto yy371;
+ if (yych == 'n') goto yy321;
+ goto yy325;
+ } else {
+ if (yych <= 'r') goto yy322;
+ if (yych <= 's') goto yy320;
+ if (yych <= 't') goto yy323;
+ goto yy325;
+ }
+ }
yy477:
- YYDEBUG(477, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '/') {
- if(yych <= ',') goto yy325;
- if(yych <= '-') goto yy471;
- if(yych <= '.') goto yy407;
- goto yy325;
- } else {
- if(yych <= '0') goto yy441;
- if(yych <= '1') goto yy409;
- if(yych <= '2') goto yy410;
- goto yy411;
- }
+ YYDEBUG(477, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'C') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'q') {
- if(yych <= ':') goto yy371;
- if(yych == 'n') goto yy321;
- goto yy325;
- } else {
- if(yych <= 'r') goto yy322;
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'B') goto yy138;
+ goto yy302;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'c') goto yy478;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
+ }
+ }
yy478:
- YYDEBUG(478, *YYCURSOR);
- yyaccept = 7;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '/') {
- if(yych <= ',') goto yy325;
- if(yych <= '-') goto yy471;
- if(yych <= '.') goto yy407;
- goto yy325;
+ YYDEBUG(478, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '0') goto yy441;
- if(yych <= '1') goto yy409;
- if(yych <= '2') goto yy410;
- goto yy411;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= 'q') {
- if(yych <= ':') goto yy371;
- if(yych == 'n') goto yy321;
- goto yy325;
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych <= 'r') goto yy322;
- if(yych <= 's') goto yy320;
- if(yych <= 't') goto yy323;
- goto yy325;
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
-yy479:
- YYDEBUG(479, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'C') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'D') {
+ if (yych <= '@') goto yy303;
+ goto yy139;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'B') goto yy138;
- goto yy302;
+ if (yych <= 'E') goto yy311;
+ if (yych <= 'Z') goto yy139;
+ goto yy303;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 'd') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy148;
} else {
- if(yych == 'c') goto yy480;
- if(yych <= 'z') goto yy143;
- goto yy3;
+ if (yych <= 'e') goto yy479;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
+ }
+yy479:
+ YYDEBUG(479, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'M') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'L') goto yy140;
+ goto yy312;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'm') goto yy480;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy480:
- YYDEBUG(480, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
- }
+ YYDEBUG(480, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'B') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '^') {
- if(yych <= 'D') {
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'E') goto yy311;
- if(yych <= 'Z') goto yy139;
- goto yy303;
- }
- } else {
- if(yych <= 'd') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy148;
- } else {
- if(yych <= 'e') goto yy481;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'A') goto yy141;
+ goto yy313;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'b') goto yy481;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy481:
- YYDEBUG(481, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'M') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'L') goto yy140;
- goto yy312;
- }
+ YYDEBUG(481, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'm') goto yy482;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'D') goto yy3;
+ goto yy314;
}
-yy482:
- YYDEBUG(482, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'B') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'A') goto yy141;
- goto yy313;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'b') goto yy483;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych == 'e') goto yy482;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
+ }
+yy482:
+ YYDEBUG(482, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy315;
+ if (yych != 'r') goto yy152;
yy483:
- YYDEBUG(483, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'D') goto yy3;
- goto yy314;
- }
+ YYDEBUG(483, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy305;
+ goto yy303;
+ } else {
+ if (yych <= ' ') goto yy305;
+ if (yych <= ',') goto yy303;
+ goto yy305;
+ }
+ } else {
+ if (yych <= '^') {
+ if (yych <= '/') goto yy144;
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'e') goto yy484;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ if (yych <= 'z') goto yy151;
+ goto yy303;
}
+ }
yy484:
- YYDEBUG(484, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy315;
- if(yych != 'r') goto yy152;
+ YYDEBUG(484, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy138;
+ }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 't') goto yy485;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
yy485:
- YYDEBUG(485, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy305;
- goto yy303;
- } else {
- if(yych <= ' ') goto yy305;
- if(yych <= ',') goto yy303;
+ YYDEBUG(485, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
goto yy305;
+ } else {
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= '^') {
- if(yych <= '/') goto yy144;
- if(yych <= '9') goto yy305;
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
goto yy303;
} else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- if(yych <= 'z') goto yy151;
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
goto yy303;
}
}
-yy486:
- YYDEBUG(486, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy138;
+ if (yych != 'O') goto yy139;
}
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
+ if (yych <= 'n') {
+ if (yych <= '`') goto yy303;
+ goto yy139;
} else {
- if(yych <= 't') goto yy487;
- if(yych <= 'z') goto yy138;
- goto yy3;
+ if (yych <= 'o') goto yy486;
+ if (yych <= 'z') goto yy139;
+ goto yy303;
}
}
+ }
+yy486:
+ YYDEBUG(486, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'B') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'A') goto yy140;
+ }
+ } else {
+ if (yych <= 'a') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'b') goto yy487;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
+ }
+ }
yy487:
- YYDEBUG(487, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy303;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- goto yy303;
- }
- }
+ YYDEBUG(487, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych != 'O') goto yy139;
- }
- } else {
- if(yych <= 'n') {
- if(yych <= '`') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'o') goto yy488;
- if(yych <= 'z') goto yy139;
- goto yy303;
- }
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy141;
}
-yy488:
- YYDEBUG(488, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'B') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'A') goto yy140;
- }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
} else {
- if(yych <= 'a') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'b') goto yy489;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= 'e') goto yy488;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
+yy488:
+ YYDEBUG(488, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Q') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'R') goto yy315;
+ if (yych == 'r') goto yy315;
+ goto yy3;
+ }
yy489:
- YYDEBUG(489, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy141;
- }
+ YYDEBUG(489, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'e') goto yy490;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy138;
+ goto yy485;
}
-yy490:
- YYDEBUG(490, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Q') {
- if(yych == ')') goto yy136;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
goto yy3;
} else {
- if(yych <= 'R') goto yy315;
- if(yych == 'r') goto yy315;
+ if (yych == 't') goto yy490;
+ if (yych <= 'z') goto yy143;
goto yy3;
}
-yy491:
- YYDEBUG(491, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
+ }
+yy490:
+ YYDEBUG(490, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy138;
- goto yy487;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych == 't') goto yy492;
- if(yych <= 'z') goto yy143;
- goto yy3;
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
-yy492:
- YYDEBUG(492, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'N') {
+ if (yych <= '@') goto yy303;
+ goto yy139;
} else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
+ if (yych <= 'O') goto yy486;
+ if (yych <= 'Z') goto yy139;
+ goto yy303;
}
} else {
- if(yych <= '^') {
- if(yych <= 'N') {
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'O') goto yy488;
- if(yych <= 'Z') goto yy139;
- goto yy303;
- }
+ if (yych <= 'n') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy148;
} else {
- if(yych <= 'n') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy148;
- } else {
- if(yych <= 'o') goto yy493;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
+ if (yych <= 'o') goto yy491;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
+ }
+yy491:
+ YYDEBUG(491, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'B') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'A') goto yy140;
+ goto yy487;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'b') goto yy492;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
+yy492:
+ YYDEBUG(492, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy141;
+ goto yy488;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'e') goto yy493;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
+ }
+ }
yy493:
- YYDEBUG(493, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'B') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'A') goto yy140;
- goto yy489;
- }
+ YYDEBUG(493, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'R') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= '/') goto yy144;
+ if (yych <= 'Q') goto yy3;
+ goto yy315;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'r') goto yy483;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
+ }
+ }
+yy494:
+ YYDEBUG(494, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'V') {
+ if (yych <= 'B') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'O') {
+ if (yych <= 'C') goto yy510;
+ goto yy138;
} else {
- if(yych == 'b') goto yy494;
- if(yych <= 'z') goto yy149;
- goto yy3;
+ if (yych <= 'P') goto yy509;
+ if (yych <= 'U') goto yy138;
+ goto yy511;
}
}
-yy494:
- YYDEBUG(494, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
+ } else {
+ if (yych <= 'o') {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
goto yy3;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy141;
- goto yy490;
+ if (yych == 'c') goto yy510;
+ goto yy138;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 'u') {
+ if (yych <= 'p') goto yy509;
+ goto yy138;
} else {
- if(yych == 'e') goto yy495;
- if(yych <= 'z') goto yy150;
+ if (yych <= 'v') goto yy511;
+ if (yych <= 'z') goto yy138;
goto yy3;
}
}
+ }
yy495:
- YYDEBUG(495, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'R') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'Q') goto yy3;
- goto yy315;
- }
+ YYDEBUG(495, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'r') goto yy485;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy138;
+ goto yy504;
+ }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 't') goto yy504;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
+ }
yy496:
- YYDEBUG(496, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'V') {
- if(yych <= 'B') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'O') {
- if(yych <= 'C') goto yy512;
- goto yy138;
- } else {
- if(yych <= 'P') goto yy511;
- if(yych <= 'U') goto yy138;
- goto yy513;
- }
- }
+ YYDEBUG(496, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'X') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'o') {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- goto yy3;
- } else {
- if(yych == 'c') goto yy512;
- goto yy138;
- }
- } else {
- if(yych <= 'u') {
- if(yych <= 'p') goto yy511;
- goto yy138;
- } else {
- if(yych <= 'v') goto yy513;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'W') goto yy138;
+ goto yy502;
+ }
+ } else {
+ if (yych <= 'w') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'x') goto yy502;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
+ }
yy497:
- YYDEBUG(497, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy138;
- goto yy506;
- }
+ YYDEBUG(497, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 't') goto yy506;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy138;
}
+ } else {
+ if (yych <= 'm') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'n') goto yy498;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
yy498:
- YYDEBUG(498, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'X') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'W') goto yy138;
- goto yy504;
- }
+ YYDEBUG(498, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy276;
+ goto yy136;
} else {
- if(yych <= 'w') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'x') goto yy504;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy276;
+ if (yych <= 'C') goto yy139;
+ }
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy276;
+ goto yy139;
+ } else {
+ if (yych <= 'd') goto yy499;
+ if (yych <= 'z') goto yy139;
+ goto yy276;
}
+ }
yy499:
- YYDEBUG(499, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy138;
- }
+ YYDEBUG(499, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ goto yy3;
} else {
- if(yych <= 'm') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'n') goto yy500;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= 'a') goto yy500;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy500:
- YYDEBUG(500, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy276;
- goto yy136;
- } else {
- if(yych <= '@') goto yy276;
- if(yych <= 'C') goto yy139;
- }
+ YYDEBUG(500, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Y') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'c') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy276;
- goto yy139;
- } else {
- if(yych <= 'd') goto yy501;
- if(yych <= 'z') goto yy139;
- goto yy276;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'X') goto yy141;
}
-yy501:
- YYDEBUG(501, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- } else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy502;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ } else {
+ if (yych <= 'x') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
+ } else {
+ if (yych <= 'y') goto yy501;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
+yy501:
+ YYDEBUG(501, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == ')') goto yy136;
+ goto yy276;
yy502:
- YYDEBUG(502, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Y') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'X') goto yy141;
- }
+ YYDEBUG(502, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'x') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'y') goto yy503;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
}
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 't') goto yy503;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
+ }
+ }
yy503:
- YYDEBUG(503, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == ')') goto yy136;
- goto yy276;
+ YYDEBUG(503, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'H') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy140;
+ goto yy263;
+ }
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'h') goto yy263;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
+ }
+ }
yy504:
- YYDEBUG(504, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- }
+ YYDEBUG(504, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy276;
+ goto yy136;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 't') goto yy505;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy276;
+ if (yych <= 'T') goto yy139;
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy276;
+ goto yy139;
+ } else {
+ if (yych <= 'u') goto yy505;
+ if (yych <= 'z') goto yy139;
+ goto yy276;
}
+ }
yy505:
- YYDEBUG(505, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'H') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy140;
- goto yy263;
- }
+ YYDEBUG(505, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'g') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'h') goto yy263;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy140;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'r') goto yy506;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy506:
- YYDEBUG(506, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= ')') {
- if(yych <= '(') goto yy276;
- goto yy136;
- } else {
- if(yych <= '@') goto yy276;
- if(yych <= 'T') goto yy139;
- }
+ YYDEBUG(506, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 't') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy276;
- goto yy139;
- } else {
- if(yych <= 'u') goto yy507;
- if(yych <= 'z') goto yy139;
- goto yy276;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy141;
+ }
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
+ } else {
+ if (yych <= 'd') goto yy507;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
yy507:
- YYDEBUG(507, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ YYDEBUG(507, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'A') goto yy508;
+ if (yych != 'a') goto yy3;
+ }
+yy508:
+ YYDEBUG(508, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy282;
+ if (yych == 'y') goto yy282;
+ goto yy53;
+yy509:
+ YYDEBUG(509, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy140;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= 'q') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
+ goto yy303;
} else {
- if(yych <= 'r') goto yy508;
- if(yych <= 'z') goto yy140;
- goto yy3;
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
+ goto yy303;
}
}
-yy508:
- YYDEBUG(508, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy141;
+ if (yych == 'T') goto yy518;
+ goto yy139;
}
} else {
- if(yych <= 'c') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
+ if (yych <= 's') {
+ if (yych <= '`') goto yy303;
+ goto yy139;
} else {
- if(yych <= 'd') goto yy509;
- if(yych <= 'z') goto yy141;
- goto yy3;
+ if (yych <= 't') goto yy518;
+ if (yych <= 'z') goto yy139;
+ goto yy303;
}
}
-yy509:
- YYDEBUG(509, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
+ }
+yy510:
+ YYDEBUG(510, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'A') goto yy510;
- if(yych != 'a') goto yy3;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'N') goto yy139;
+ goto yy515;
}
-yy510:
- YYDEBUG(510, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy282;
- if(yych == 'y') goto yy282;
- goto yy53;
+ } else {
+ if (yych <= 'n') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 'o') goto yy515;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
+ }
+ }
yy511:
- YYDEBUG(511, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy303;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- goto yy303;
- }
- }
+ YYDEBUG(511, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych == 'T') goto yy520;
- goto yy139;
- }
- } else {
- if(yych <= 's') {
- if(yych <= '`') goto yy303;
- goto yy139;
- } else {
- if(yych <= 't') goto yy520;
- if(yych <= 'z') goto yy139;
- goto yy303;
- }
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy139;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 'e') goto yy512;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
+ }
yy512:
- YYDEBUG(512, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'N') goto yy139;
- goto yy517;
- }
+ YYDEBUG(512, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'n') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'o') goto yy517;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy140;
+ }
+ } else {
+ if (yych <= 'm') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'n') goto yy513;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy513:
- YYDEBUG(513, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy139;
- }
+ YYDEBUG(513, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'e') goto yy514;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy141;
}
-yy514:
- YYDEBUG(514, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy140;
- }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
} else {
- if(yych <= 'm') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'n') goto yy515;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= 't') goto yy514;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
+yy514:
+ YYDEBUG(514, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'G') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'H') goto yy160;
+ if (yych == 'h') goto yy160;
+ goto yy3;
+ }
yy515:
- YYDEBUG(515, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy141;
- }
+ YYDEBUG(515, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 't') goto yy516;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy140;
}
-yy516:
- YYDEBUG(516, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'G') {
- if(yych == ')') goto yy136;
+ } else {
+ if (yych <= 'm') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'n') goto yy516;
+ if (yych <= 'z') goto yy140;
goto yy3;
+ }
+ }
+yy516:
+ YYDEBUG(516, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy141;
+ }
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
} else {
- if(yych <= 'H') goto yy160;
- if(yych == 'h') goto yy160;
+ if (yych <= 'd') goto yy517;
+ if (yych <= 'z') goto yy141;
goto yy3;
}
+ }
yy517:
- YYDEBUG(517, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ YYDEBUG(517, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy161;
+ goto yy3;
+ } else {
+ if (yych <= ' ') goto yy161;
+ if (yych == ')') goto yy136;
+ goto yy3;
+ }
+yy518:
+ YYDEBUG(518, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy140;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= 'm') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
+ goto yy303;
} else {
- if(yych <= 'n') goto yy518;
- if(yych <= 'z') goto yy140;
- goto yy3;
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
+ goto yy303;
}
}
-yy518:
- YYDEBUG(518, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy141;
+ if (yych != 'E') goto yy140;
}
} else {
- if(yych <= 'c') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
+ if (yych <= 'd') {
+ if (yych <= '`') goto yy303;
+ goto yy140;
} else {
- if(yych <= 'd') goto yy519;
- if(yych <= 'z') goto yy141;
- goto yy3;
+ if (yych <= 'e') goto yy519;
+ if (yych <= 'z') goto yy140;
+ goto yy303;
}
}
+ }
yy519:
- YYDEBUG(519, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy161;
- goto yy3;
+ YYDEBUG(519, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'M') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'L') goto yy141;
+ }
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
} else {
- if(yych <= ' ') goto yy161;
- if(yych == ')') goto yy136;
+ if (yych <= 'm') goto yy520;
+ if (yych <= 'z') goto yy141;
goto yy3;
}
+ }
yy520:
- YYDEBUG(520, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
+ YYDEBUG(520, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'B') goto yy521;
+ if (yych != 'b') goto yy3;
+ }
+yy521:
+ YYDEBUG(521, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy522;
+ if (yych != 'e') goto yy53;
+yy522:
+ YYDEBUG(522, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy315;
+ if (yych == 'r') goto yy315;
+ goto yy53;
+yy523:
+ YYDEBUG(523, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy303;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- goto yy303;
- }
+ if (yych == '/') goto yy144;
+ goto yy3;
}
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych != 'E') goto yy140;
- }
+ if (yych <= 'O') {
+ if (yych == 'C') goto yy510;
+ goto yy138;
} else {
- if(yych <= 'd') {
- if(yych <= '`') goto yy303;
- goto yy140;
- } else {
- if(yych <= 'e') goto yy521;
- if(yych <= 'z') goto yy140;
- goto yy303;
- }
+ if (yych <= 'P') goto yy509;
+ if (yych <= 'U') goto yy138;
+ goto yy511;
}
}
-yy521:
- YYDEBUG(521, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'M') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'c') {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '^') goto yy3;
+ goto yy144;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'L') goto yy141;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'b') goto yy143;
+ goto yy539;
}
} else {
- if(yych <= 'l') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
+ if (yych <= 'u') {
+ if (yych == 'p') goto yy538;
+ goto yy143;
} else {
- if(yych <= 'm') goto yy522;
- if(yych <= 'z') goto yy141;
+ if (yych <= 'v') goto yy540;
+ if (yych <= 'z') goto yy143;
goto yy3;
}
}
-yy522:
- YYDEBUG(522, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
+ }
+yy524:
+ YYDEBUG(524, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
goto yy3;
} else {
- if(yych <= 'B') goto yy523;
- if(yych != 'b') goto yy3;
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy138;
+ goto yy504;
}
-yy523:
- YYDEBUG(523, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy524;
- if(yych != 'e') goto yy53;
-yy524:
- YYDEBUG(524, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy315;
- if(yych == 'r') goto yy315;
- goto yy53;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy533;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
+ }
+ }
yy525:
- YYDEBUG(525, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych == '/') goto yy144;
- goto yy3;
- }
- } else {
- if(yych <= 'O') {
- if(yych == 'C') goto yy512;
- goto yy138;
- } else {
- if(yych <= 'P') goto yy511;
- if(yych <= 'U') goto yy138;
- goto yy513;
- }
- }
+ YYDEBUG(525, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'X') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'c') {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'b') goto yy143;
- goto yy541;
- }
- } else {
- if(yych <= 'u') {
- if(yych == 'p') goto yy540;
- goto yy143;
- } else {
- if(yych <= 'v') goto yy542;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'W') goto yy138;
+ goto yy502;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'x') goto yy531;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
+ }
+ }
yy526:
- YYDEBUG(526, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy138;
- goto yy506;
- }
+ YYDEBUG(526, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy535;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy138;
+ goto yy498;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'n') goto yy527;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
+ }
yy527:
- YYDEBUG(527, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'X') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'W') goto yy138;
- goto yy504;
- }
+ YYDEBUG(527, *YYCURSOR);
+ yyaccept = 5;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy276;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'x') goto yy533;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy276;
+ if (yych <= 'C') goto yy139;
+ goto yy499;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy276;
+ } else {
+ if (yych == 'd') goto yy528;
+ if (yych <= 'z') goto yy148;
+ goto yy276;
}
+ }
yy528:
- YYDEBUG(528, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy138;
- goto yy500;
- }
+ YYDEBUG(528, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'n') goto yy529;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ goto yy500;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '^') goto yy3;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy3;
+ if (yych <= 'a') goto yy529;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy529:
- YYDEBUG(529, *YYCURSOR);
- yyaccept = 5;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy276;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy276;
- if(yych <= 'C') goto yy139;
- goto yy501;
- }
+ YYDEBUG(529, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'Y') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy276;
- } else {
- if(yych == 'd') goto yy530;
- if(yych <= 'z') goto yy148;
- goto yy276;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'X') goto yy141;
+ goto yy501;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'y') goto yy530;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy530:
- YYDEBUG(530, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'A') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- goto yy502;
- }
+ YYDEBUG(530, *YYCURSOR);
+ yyaccept = 5;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == ')') goto yy136;
+ if (yych <= '.') goto yy276;
+ goto yy144;
+ } else {
+ if (yych <= '_') {
+ if (yych <= '^') goto yy276;
+ goto yy144;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'a') goto yy531;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '`') goto yy276;
+ if (yych <= 'z') goto yy151;
+ goto yy276;
}
+ }
yy531:
- YYDEBUG(531, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'Y') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'X') goto yy141;
- goto yy503;
- }
+ YYDEBUG(531, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'y') goto yy532;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
+ goto yy503;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy532;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy532:
- YYDEBUG(532, *YYCURSOR);
- yyaccept = 5;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == ')') goto yy136;
- if(yych <= '.') goto yy276;
- goto yy144;
+ YYDEBUG(532, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'H') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '_') {
- if(yych <= '^') goto yy276;
- goto yy144;
- } else {
- if(yych <= '`') goto yy276;
- if(yych <= 'z') goto yy151;
- goto yy276;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy140;
+ goto yy263;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'h') goto yy273;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy533:
- YYDEBUG(533, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- goto yy505;
- }
+ YYDEBUG(533, *YYCURSOR);
+ yyaccept = 5;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'U') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy276;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy534;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy276;
+ if (yych <= 'T') goto yy139;
+ goto yy505;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy276;
+ } else {
+ if (yych == 'u') goto yy534;
+ if (yych <= 'z') goto yy148;
+ goto yy276;
+ }
+ }
yy534:
- YYDEBUG(534, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'H') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy140;
- goto yy263;
- }
+ YYDEBUG(534, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'R') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'h') goto yy273;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy140;
+ goto yy506;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'r') goto yy535;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy535:
- YYDEBUG(535, *YYCURSOR);
- yyaccept = 5;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'U') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy276;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy276;
- if(yych <= 'T') goto yy139;
- goto yy507;
- }
+ YYDEBUG(535, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy276;
- } else {
- if(yych == 'u') goto yy536;
- if(yych <= 'z') goto yy148;
- goto yy276;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy141;
+ goto yy507;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'd') goto yy536;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy536:
- YYDEBUG(536, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'R') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy140;
- goto yy508;
- }
+ YYDEBUG(536, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'r') goto yy537;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ goto yy508;
}
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych <= 'a') goto yy537;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
+ }
+ }
yy537:
- YYDEBUG(537, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
+ YYDEBUG(537, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy282;
+ if (yych == 'y') goto yy295;
+ goto yy152;
+yy538:
+ YYDEBUG(538, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy141;
- goto yy509;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych == 'd') goto yy538;
- if(yych <= 'z') goto yy150;
- goto yy3;
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
-yy538:
- YYDEBUG(538, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'A') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'S') {
+ if (yych <= '@') goto yy303;
+ goto yy139;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- goto yy510;
+ if (yych <= 'T') goto yy518;
+ if (yych <= 'Z') goto yy139;
+ goto yy303;
}
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 's') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy148;
} else {
- if(yych <= 'a') goto yy539;
- if(yych <= 'z') goto yy151;
- goto yy3;
+ if (yych <= 't') goto yy547;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
+ }
yy539:
- YYDEBUG(539, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy282;
- if(yych == 'y') goto yy295;
- goto yy152;
+ YYDEBUG(539, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'O') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'N') goto yy139;
+ goto yy515;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'o') goto yy544;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
+ }
+ }
yy540:
- YYDEBUG(540, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
- }
+ YYDEBUG(540, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '^') {
- if(yych <= 'S') {
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'T') goto yy520;
- if(yych <= 'Z') goto yy139;
- goto yy303;
- }
- } else {
- if(yych <= 's') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy148;
- } else {
- if(yych <= 't') goto yy549;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy139;
+ goto yy512;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'e') goto yy541;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy541:
- YYDEBUG(541, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'O') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'N') goto yy139;
- goto yy517;
- }
+ YYDEBUG(541, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'o') goto yy546;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy140;
+ goto yy513;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'n') goto yy542;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy542:
- YYDEBUG(542, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy139;
- goto yy514;
- }
+ YYDEBUG(542, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'e') goto yy543;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy141;
+ goto yy514;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy543;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy543:
- YYDEBUG(543, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy140;
- goto yy515;
- }
+ YYDEBUG(543, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'H') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'n') goto yy544;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'G') goto yy3;
+ goto yy160;
}
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'h') goto yy247;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
+ }
+ }
yy544:
- YYDEBUG(544, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy141;
- goto yy516;
- }
+ YYDEBUG(544, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy545;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy140;
+ goto yy516;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'n') goto yy545;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy545:
- YYDEBUG(545, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'H') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'G') goto yy3;
- goto yy160;
- }
+ YYDEBUG(545, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'h') goto yy247;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy141;
+ goto yy517;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'd') goto yy546;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy546:
- YYDEBUG(546, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy140;
- goto yy518;
- }
+ YYDEBUG(546, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ')') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy161;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'n') goto yy547;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= ' ') goto yy161;
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ }
+ } else {
+ if (yych <= '^') {
+ if (yych == '/') goto yy144;
+ goto yy3;
+ } else {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
+ }
yy547:
- YYDEBUG(547, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
+ YYDEBUG(547, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy141;
- goto yy519;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych == 'd') goto yy548;
- if(yych <= 'z') goto yy150;
- goto yy3;
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
-yy548:
- YYDEBUG(548, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ')') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy161;
- goto yy3;
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'D') {
+ if (yych <= '@') goto yy303;
+ goto yy140;
} else {
- if(yych <= ' ') goto yy161;
- if(yych <= '(') goto yy3;
- goto yy136;
+ if (yych <= 'E') goto yy519;
+ if (yych <= 'Z') goto yy140;
+ goto yy303;
}
} else {
- if(yych <= '^') {
- if(yych == '/') goto yy144;
- goto yy3;
+ if (yych <= 'd') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy149;
} else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy151;
- goto yy3;
+ if (yych <= 'e') goto yy548;
+ if (yych <= 'z') goto yy149;
+ goto yy303;
}
}
-yy549:
- YYDEBUG(549, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
- }
+ }
+yy548:
+ YYDEBUG(548, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'M') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '^') {
- if(yych <= 'D') {
- if(yych <= '@') goto yy303;
- goto yy140;
- } else {
- if(yych <= 'E') goto yy521;
- if(yych <= 'Z') goto yy140;
- goto yy303;
- }
- } else {
- if(yych <= 'd') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy149;
- } else {
- if(yych <= 'e') goto yy550;
- if(yych <= 'z') goto yy149;
- goto yy303;
- }
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'L') goto yy141;
+ goto yy520;
}
-yy550:
- YYDEBUG(550, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'M') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'L') goto yy141;
- goto yy522;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'm') goto yy551;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych == 'm') goto yy549;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
-yy551:
- YYDEBUG(551, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'B') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'A') goto yy3;
- goto yy523;
- }
+ }
+yy549:
+ YYDEBUG(549, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'B') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'b') goto yy552;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'A') goto yy3;
+ goto yy521;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'b') goto yy550;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
+ }
+yy550:
+ YYDEBUG(550, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy522;
+ if (yych != 'e') goto yy152;
+ YYDEBUG(551, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy315;
+ if (yych == 'r') goto yy483;
+ goto yy152;
yy552:
- YYDEBUG(552, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy524;
- if(yych != 'e') goto yy152;
- YYDEBUG(553, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy315;
- if(yych == 'r') goto yy485;
- goto yy152;
-yy554:
- YYDEBUG(554, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'G') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'F') goto yy138;
- goto yy562;
- }
+ YYDEBUG(552, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'G') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'f') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'g') goto yy562;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'F') goto yy138;
+ goto yy560;
}
-yy555:
- YYDEBUG(555, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy138;
- goto yy559;
- }
+ } else {
+ if (yych <= 'f') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
} else {
- if(yych <= 'q') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'r') goto yy559;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= 'g') goto yy560;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
-yy556:
- YYDEBUG(556, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'N') goto yy138;
- }
+ }
+yy553:
+ YYDEBUG(553, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy138;
+ goto yy557;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
} else {
- if(yych <= 'n') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'o') goto yy557;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= 'r') goto yy557;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
-yy557:
- YYDEBUG(557, *YYCURSOR);
- ++YYCURSOR;
- if((yych = *YYCURSOR) <= '@') {
- if(yych == ')') goto yy136;
+ }
+yy554:
+ YYDEBUG(554, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy558;
- if(yych <= 'z') goto yy139;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'N') goto yy138;
}
-yy558:
- YYDEBUG(558, *YYCURSOR);
-#line 1382 "ext/date/lib/parse_date.re"
- {
+ } else {
+ if (yych <= 'n') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'o') goto yy555;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
+yy555:
+ YYDEBUG(555, *YYCURSOR);
+ ++YYCURSOR;
+ if ((yych = *YYCURSOR) <= '@') {
+ if (yych == ')') goto yy136;
+ } else {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy556;
+ if (yych <= 'z') goto yy139;
+ }
+yy556:
+ YYDEBUG(556, *YYCURSOR);
+#line 1383 "ext/date/lib/parse_date.re"
+ {
DEBUG_OUTPUT("ago");
TIMELIB_INIT;
s->time->relative.y = 0 - s->time->relative.y;
@@ -9597,2603 +9557,2603 @@ yy558:
TIMELIB_DEINIT;
return TIMELIB_AGO;
}
-#line 9601 "ext/date/lib/parse_date.c"
-yy559:
- YYDEBUG(559, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
+#line 9561 "ext/date/lib/parse_date.c"
+yy557:
+ YYDEBUG(557, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy303;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- goto yy303;
- }
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych != 'I') goto yy139;
- }
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
+ goto yy303;
} else {
- if(yych <= 'h') {
- if(yych <= '`') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'i') goto yy560;
- if(yych <= 'z') goto yy139;
- goto yy303;
- }
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
+ goto yy303;
}
}
-yy560:
- YYDEBUG(560, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'L') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'K') goto yy140;
+ if (yych != 'I') goto yy139;
}
} else {
- if(yych <= 'k') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
+ if (yych <= 'h') {
+ if (yych <= '`') goto yy303;
+ goto yy139;
} else {
- if(yych <= 'l') goto yy561;
- if(yych <= 'z') goto yy140;
- goto yy3;
+ if (yych <= 'i') goto yy558;
+ if (yych <= 'z') goto yy139;
+ goto yy303;
}
}
-yy561:
- YYDEBUG(561, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy305;
- goto yy303;
+ }
+yy558:
+ YYDEBUG(558, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'L') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'K') goto yy140;
+ }
+ } else {
+ if (yych <= 'k') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'l') goto yy559;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
+ }
+ }
+yy559:
+ YYDEBUG(559, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy305;
+ goto yy303;
+ } else {
+ if (yych <= ' ') goto yy305;
+ if (yych == ')') goto yy136;
+ goto yy303;
+ }
+ } else {
+ if (yych <= '@') {
+ if (yych == '/') goto yy303;
+ if (yych <= '9') goto yy305;
+ goto yy303;
+ } else {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy303;
+ if (yych <= 'z') goto yy141;
+ goto yy303;
+ }
+ }
+yy560:
+ YYDEBUG(560, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= ' ') goto yy305;
- if(yych == ')') goto yy136;
+ if (yych == ' ') goto yy305;
goto yy303;
}
} else {
- if(yych <= '@') {
- if(yych == '/') goto yy303;
- if(yych <= '9') goto yy305;
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
goto yy303;
} else {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy303;
- if(yych <= 'z') goto yy141;
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
goto yy303;
}
}
-yy562:
- YYDEBUG(562, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy303;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- goto yy303;
- }
+ if (yych != 'U') goto yy139;
}
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych != 'U') goto yy139;
- }
+ if (yych <= 't') {
+ if (yych <= '`') goto yy303;
+ goto yy139;
} else {
- if(yych <= 't') {
- if(yych <= '`') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'u') goto yy563;
- if(yych <= 'z') goto yy139;
- goto yy303;
- }
+ if (yych <= 'u') goto yy561;
+ if (yych <= 'z') goto yy139;
+ goto yy303;
}
}
+ }
+yy561:
+ YYDEBUG(561, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'S') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy140;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 's') goto yy562;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
+ }
+ }
+yy562:
+ YYDEBUG(562, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy141;
+ }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
+ } else {
+ if (yych <= 't') goto yy563;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
+ }
+ }
yy563:
- YYDEBUG(563, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'S') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy140;
- }
+ YYDEBUG(563, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= 'r') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 's') goto yy564;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych == ' ') goto yy305;
+ goto yy303;
+ }
+ } else {
+ if (yych <= '.') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy305;
+ } else {
+ if (yych <= '/') goto yy303;
+ if (yych <= '9') goto yy305;
+ goto yy303;
}
+ }
yy564:
- YYDEBUG(564, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy141;
- }
+ YYDEBUG(564, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'G') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 't') goto yy565;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'F') goto yy138;
+ goto yy560;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'g') goto yy571;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
+ }
yy565:
- YYDEBUG(565, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
+ YYDEBUG(565, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'R') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '.') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy305;
- } else {
- if(yych <= '/') goto yy303;
- if(yych <= '9') goto yy305;
- goto yy303;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy138;
+ goto yy557;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'r') goto yy568;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
+ }
+ }
yy566:
- YYDEBUG(566, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'G') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'F') goto yy138;
- goto yy562;
- }
+ YYDEBUG(566, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'O') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'g') goto yy573;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'N') goto yy138;
+ goto yy555;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'o') goto yy567;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
+ }
yy567:
- YYDEBUG(567, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'R') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy138;
- goto yy559;
- }
+ YYDEBUG(567, *YYCURSOR);
+ yyaccept = 10;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy556;
+ goto yy136;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'r') goto yy570;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych == '/') goto yy144;
+ goto yy556;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '^') goto yy556;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy556;
+ if (yych <= 'z') goto yy148;
+ goto yy556;
}
+ }
yy568:
- YYDEBUG(568, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'O') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
+ YYDEBUG(568, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'N') goto yy138;
- goto yy557;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych == 'o') goto yy569;
- if(yych <= 'z') goto yy143;
- goto yy3;
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
-yy569:
- YYDEBUG(569, *YYCURSOR);
- yyaccept = 10;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy558;
- goto yy136;
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'H') {
+ if (yych <= '@') goto yy303;
+ goto yy139;
} else {
- if(yych == '/') goto yy144;
- goto yy558;
+ if (yych <= 'I') goto yy558;
+ if (yych <= 'Z') goto yy139;
+ goto yy303;
}
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '^') goto yy558;
- goto yy144;
+ if (yych <= 'h') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy148;
} else {
- if(yych <= '`') goto yy558;
- if(yych <= 'z') goto yy148;
- goto yy558;
+ if (yych <= 'i') goto yy569;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
+ }
+yy569:
+ YYDEBUG(569, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'L') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'K') goto yy140;
+ goto yy559;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'l') goto yy570;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy570:
- YYDEBUG(570, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
- }
+ YYDEBUG(570, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy305;
+ if (yych <= 0x1F) goto yy303;
+ goto yy305;
} else {
- if(yych <= '^') {
- if(yych <= 'H') {
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'I') goto yy560;
- if(yych <= 'Z') goto yy139;
- goto yy303;
- }
+ if (yych == ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy305;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '/') goto yy144;
+ if (yych <= '9') goto yy305;
+ if (yych <= '@') goto yy303;
+ goto yy141;
+ } else {
+ if (yych <= '_') {
+ if (yych <= '^') goto yy303;
+ goto yy144;
} else {
- if(yych <= 'h') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy148;
- } else {
- if(yych <= 'i') goto yy571;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
+ if (yych <= '`') goto yy303;
+ if (yych <= 'z') goto yy150;
+ goto yy303;
}
}
+ }
yy571:
- YYDEBUG(571, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'L') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
+ YYDEBUG(571, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'K') goto yy140;
- goto yy561;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych == 'l') goto yy572;
- if(yych <= 'z') goto yy149;
- goto yy3;
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
-yy572:
- YYDEBUG(572, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy305;
- if(yych <= 0x1F) goto yy303;
- goto yy305;
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'T') {
+ if (yych <= '@') goto yy303;
+ goto yy139;
} else {
- if(yych == ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy305;
+ if (yych <= 'U') goto yy561;
+ if (yych <= 'Z') goto yy139;
+ goto yy303;
}
} else {
- if(yych <= 'Z') {
- if(yych <= '/') goto yy144;
- if(yych <= '9') goto yy305;
- if(yych <= '@') goto yy303;
- goto yy141;
+ if (yych <= 't') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy148;
} else {
- if(yych <= '_') {
- if(yych <= '^') goto yy303;
- goto yy144;
- } else {
- if(yych <= '`') goto yy303;
- if(yych <= 'z') goto yy150;
- goto yy303;
- }
+ if (yych <= 'u') goto yy572;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
+ }
+yy572:
+ YYDEBUG(572, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy140;
+ goto yy562;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 's') goto yy573;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy573:
- YYDEBUG(573, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
- }
+ YYDEBUG(573, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '^') {
- if(yych <= 'T') {
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'U') goto yy563;
- if(yych <= 'Z') goto yy139;
- goto yy303;
- }
- } else {
- if(yych <= 't') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy148;
- } else {
- if(yych <= 'u') goto yy574;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy141;
+ goto yy563;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy574;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy574:
- YYDEBUG(574, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy140;
- goto yy564;
- }
+ YYDEBUG(574, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy305;
+ goto yy303;
+ } else {
+ if (yych <= ' ') goto yy305;
+ if (yych == ')') goto yy136;
+ goto yy303;
+ }
+ } else {
+ if (yych <= '^') {
+ if (yych == '/') goto yy144;
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 's') goto yy575;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ if (yych <= 'z') goto yy151;
+ goto yy303;
}
+ }
yy575:
- YYDEBUG(575, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy141;
- goto yy565;
- }
+ YYDEBUG(575, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'B') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy576;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'A') goto yy138;
+ goto yy589;
+ }
+ } else {
+ if (yych <= 'a') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'b') goto yy589;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
+ }
yy576:
- YYDEBUG(576, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy305;
- goto yy303;
- } else {
- if(yych <= ' ') goto yy305;
- if(yych == ')') goto yy136;
- goto yy303;
- }
+ YYDEBUG(576, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '^') {
- if(yych == '/') goto yy144;
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- if(yych <= 'z') goto yy151;
- goto yy303;
- }
+ if (yych == 'F') goto yy586;
+ if (yych <= 'Q') goto yy138;
+ goto yy585;
+ }
+ } else {
+ if (yych <= 'f') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'e') goto yy138;
+ goto yy586;
+ } else {
+ if (yych == 'r') goto yy585;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
+ }
yy577:
- YYDEBUG(577, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'B') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'A') goto yy138;
- goto yy591;
- }
+ YYDEBUG(577, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'a') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'b') goto yy591;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'T') goto yy138;
+ goto yy582;
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'u') goto yy582;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
+ }
yy578:
- YYDEBUG(578, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych == 'F') goto yy588;
- if(yych <= 'Q') goto yy138;
- goto yy587;
- }
+ YYDEBUG(578, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'I') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'f') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- if(yych <= 'e') goto yy138;
- goto yy588;
- } else {
- if(yych == 'r') goto yy587;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'H') goto yy138;
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'i') goto yy579;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
+ }
yy579:
- YYDEBUG(579, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'T') goto yy138;
- goto yy584;
- }
+ YYDEBUG(579, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy276;
+ goto yy136;
} else {
- if(yych <= 't') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'u') goto yy584;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy276;
+ if (yych <= 'C') goto yy139;
+ }
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy276;
+ goto yy139;
+ } else {
+ if (yych <= 'd') goto yy580;
+ if (yych <= 'z') goto yy139;
+ goto yy276;
}
+ }
yy580:
- YYDEBUG(580, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'I') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'H') goto yy138;
- }
+ YYDEBUG(580, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ goto yy3;
} else {
- if(yych <= 'h') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'i') goto yy581;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= 'a') goto yy581;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy581:
- YYDEBUG(581, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy276;
- goto yy136;
- } else {
- if(yych <= '@') goto yy276;
- if(yych <= 'C') goto yy139;
- }
+ YYDEBUG(581, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Y') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'c') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy276;
- goto yy139;
- } else {
- if(yych <= 'd') goto yy582;
- if(yych <= 'z') goto yy139;
- goto yy276;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'X') goto yy141;
+ goto yy501;
+ }
+ } else {
+ if (yych <= 'x') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
+ } else {
+ if (yych <= 'y') goto yy501;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
yy582:
- YYDEBUG(582, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- } else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy583;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ YYDEBUG(582, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy139;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 'r') goto yy583;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
+ }
yy583:
- YYDEBUG(583, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Y') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'X') goto yy141;
- goto yy503;
- }
+ YYDEBUG(583, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'x') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'y') goto yy503;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy140;
+ }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 't') goto yy584;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy584:
- YYDEBUG(584, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy139;
- }
+ YYDEBUG(584, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'H') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'q') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'r') goto yy585;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy141;
+ goto yy517;
}
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
+ } else {
+ if (yych <= 'h') goto yy517;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
+ }
+ }
yy585:
- YYDEBUG(585, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy140;
- }
+ YYDEBUG(585, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'S') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 't') goto yy586;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy139;
+ goto yy588;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 's') goto yy588;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
+ }
yy586:
- YYDEBUG(586, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'H') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy141;
- goto yy519;
- }
+ YYDEBUG(586, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'g') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'h') goto yy519;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
}
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 't') goto yy587;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
+ }
+ }
yy587:
- YYDEBUG(587, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'S') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy139;
- goto yy590;
- }
+ YYDEBUG(587, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'H') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'r') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 's') goto yy590;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy140;
+ goto yy263;
+ }
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'h') goto yy263;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy588:
- YYDEBUG(588, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- }
+ YYDEBUG(588, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 't') goto yy589;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy140;
+ goto yy263;
}
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 't') goto yy263;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
+ }
+ }
yy589:
- YYDEBUG(589, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'H') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ YYDEBUG(589, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy140;
- goto yy263;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= 'g') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
+ goto yy303;
} else {
- if(yych <= 'h') goto yy263;
- if(yych <= 'z') goto yy140;
- goto yy3;
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
+ goto yy303;
}
}
-yy590:
- YYDEBUG(590, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy140;
- goto yy263;
+ if (yych != 'R') goto yy139;
}
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
+ if (yych <= 'q') {
+ if (yych <= '`') goto yy303;
+ goto yy139;
} else {
- if(yych <= 't') goto yy263;
- if(yych <= 'z') goto yy140;
- goto yy3;
+ if (yych <= 'r') goto yy590;
+ if (yych <= 'z') goto yy139;
+ goto yy303;
}
}
-yy591:
- YYDEBUG(591, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy303;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- goto yy303;
- }
- }
+ }
+yy590:
+ YYDEBUG(590, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych != 'R') goto yy139;
- }
- } else {
- if(yych <= 'q') {
- if(yych <= '`') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'r') goto yy592;
- if(yych <= 'z') goto yy139;
- goto yy303;
- }
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'T') goto yy140;
}
-yy592:
- YYDEBUG(592, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'T') goto yy140;
- }
+ } else {
+ if (yych <= 't') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
} else {
- if(yych <= 't') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'u') goto yy593;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= 'u') goto yy591;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
-yy593:
- YYDEBUG(593, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- } else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy594;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ }
+yy591:
+ YYDEBUG(591, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ goto yy3;
+ } else {
+ if (yych <= 'a') goto yy592;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
+yy592:
+ YYDEBUG(592, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'Q') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'R') goto yy593;
+ if (yych != 'r') goto yy3;
+ }
+yy593:
+ YYDEBUG(593, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy315;
+ if (yych == 'y') goto yy315;
+ goto yy53;
yy594:
- YYDEBUG(594, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'Q') {
- if(yych == ')') goto yy136;
+ YYDEBUG(594, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'B') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'A') goto yy138;
+ goto yy589;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
goto yy3;
} else {
- if(yych <= 'R') goto yy595;
- if(yych != 'r') goto yy3;
+ if (yych == 'b') goto yy608;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
+ }
yy595:
- YYDEBUG(595, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy315;
- if(yych == 'y') goto yy315;
- goto yy53;
-yy596:
- YYDEBUG(596, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'B') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
+ YYDEBUG(595, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'R') {
+ if (yych <= '/') {
+ if (yych == ')') goto yy136;
+ if (yych <= '.') goto yy3;
+ goto yy144;
+ } else {
+ if (yych <= 'E') {
+ if (yych <= '@') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'F') goto yy586;
+ if (yych <= 'Q') goto yy138;
+ goto yy585;
+ }
+ }
+ } else {
+ if (yych <= 'e') {
+ if (yych <= '^') {
+ if (yych <= 'Z') goto yy138;
goto yy3;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'A') goto yy138;
- goto yy591;
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy3;
+ goto yy143;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 'q') {
+ if (yych <= 'f') goto yy605;
+ goto yy143;
} else {
- if(yych == 'b') goto yy610;
- if(yych <= 'z') goto yy143;
+ if (yych <= 'r') goto yy604;
+ if (yych <= 'z') goto yy143;
goto yy3;
}
}
+ }
+yy596:
+ YYDEBUG(596, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'U') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'T') goto yy138;
+ goto yy582;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'u') goto yy601;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
+ }
+ }
yy597:
- YYDEBUG(597, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'R') {
- if(yych <= '/') {
- if(yych == ')') goto yy136;
- if(yych <= '.') goto yy3;
- goto yy144;
- } else {
- if(yych <= 'E') {
- if(yych <= '@') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'F') goto yy588;
- if(yych <= 'Q') goto yy138;
- goto yy587;
- }
- }
+ YYDEBUG(597, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'I') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'e') {
- if(yych <= '^') {
- if(yych <= 'Z') goto yy138;
- goto yy3;
- } else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy3;
- goto yy143;
- }
- } else {
- if(yych <= 'q') {
- if(yych <= 'f') goto yy607;
- goto yy143;
- } else {
- if(yych <= 'r') goto yy606;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'H') goto yy138;
+ goto yy579;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'i') goto yy598;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
+ }
yy598:
- YYDEBUG(598, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'U') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'T') goto yy138;
- goto yy584;
- }
+ YYDEBUG(598, *YYCURSOR);
+ yyaccept = 5;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy276;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'u') goto yy603;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy276;
+ if (yych <= 'C') goto yy139;
+ goto yy580;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy276;
+ } else {
+ if (yych == 'd') goto yy599;
+ if (yych <= 'z') goto yy148;
+ goto yy276;
+ }
+ }
yy599:
- YYDEBUG(599, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'I') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'H') goto yy138;
- goto yy581;
- }
+ YYDEBUG(599, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'i') goto yy600;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ goto yy581;
}
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '^') goto yy3;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy3;
+ if (yych <= 'a') goto yy600;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy600:
- YYDEBUG(600, *YYCURSOR);
- yyaccept = 5;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy276;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy276;
- if(yych <= 'C') goto yy139;
- goto yy582;
- }
+ YYDEBUG(600, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'Y') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy276;
- } else {
- if(yych == 'd') goto yy601;
- if(yych <= 'z') goto yy148;
- goto yy276;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'X') goto yy141;
+ goto yy501;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'y') goto yy530;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy601:
- YYDEBUG(601, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'A') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- goto yy583;
- }
+ YYDEBUG(601, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'R') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'a') goto yy602;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy139;
+ goto yy583;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'r') goto yy602;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
+ }
+ }
yy602:
- YYDEBUG(602, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'Y') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'X') goto yy141;
- goto yy503;
- }
+ YYDEBUG(602, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'y') goto yy532;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy140;
+ goto yy584;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy603;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy603:
- YYDEBUG(603, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'R') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy139;
- goto yy585;
- }
+ YYDEBUG(603, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'H') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'r') goto yy604;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy141;
+ goto yy517;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'h') goto yy546;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy604:
- YYDEBUG(604, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy140;
- goto yy586;
- }
+ YYDEBUG(604, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy605;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy139;
+ goto yy588;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 's') goto yy607;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy605:
- YYDEBUG(605, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'H') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy141;
- goto yy519;
- }
+ YYDEBUG(605, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'h') goto yy548;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
+ goto yy587;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy606;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy606:
- YYDEBUG(606, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy139;
- goto yy590;
- }
+ YYDEBUG(606, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'H') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 's') goto yy609;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy140;
+ goto yy263;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'h') goto yy273;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy607:
- YYDEBUG(607, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- goto yy589;
- }
+ YYDEBUG(607, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy608;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy140;
+ goto yy263;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy273;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy608:
- YYDEBUG(608, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'H') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
+ YYDEBUG(608, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy140;
- goto yy263;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych == 'h') goto yy273;
- if(yych <= 'z') goto yy149;
- goto yy3;
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
-yy609:
- YYDEBUG(609, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'Q') {
+ if (yych <= '@') goto yy303;
+ goto yy139;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy140;
- goto yy263;
+ if (yych <= 'R') goto yy590;
+ if (yych <= 'Z') goto yy139;
+ goto yy303;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 'q') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy148;
} else {
- if(yych == 't') goto yy273;
- if(yych <= 'z') goto yy149;
- goto yy3;
+ if (yych <= 'r') goto yy609;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
+ }
+yy609:
+ YYDEBUG(609, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'U') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'T') goto yy140;
+ goto yy591;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'u') goto yy610;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy610:
- YYDEBUG(610, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
- }
+ YYDEBUG(610, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '^') {
- if(yych <= 'Q') {
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'R') goto yy592;
- if(yych <= 'Z') goto yy139;
- goto yy303;
- }
- } else {
- if(yych <= 'q') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy148;
- } else {
- if(yych <= 'r') goto yy611;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ goto yy592;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '^') goto yy3;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy3;
+ if (yych <= 'a') goto yy611;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy611:
- YYDEBUG(611, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'U') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'T') goto yy140;
- goto yy593;
- }
+ YYDEBUG(611, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'R') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'u') goto yy612;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'Q') goto yy3;
+ goto yy593;
}
-yy612:
- YYDEBUG(612, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'A') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- goto yy594;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'a') goto yy613;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych == 'r') goto yy612;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
+ }
+yy612:
+ YYDEBUG(612, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy315;
+ if (yych == 'y') goto yy483;
+ goto yy152;
yy613:
- YYDEBUG(613, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'R') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'Q') goto yy3;
- goto yy595;
- }
+ YYDEBUG(613, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'r') goto yy614;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych == 'L') goto yy620;
+ if (yych <= 'M') goto yy138;
+ goto yy619;
}
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'k') goto yy138;
+ goto yy620;
+ } else {
+ if (yych == 'n') goto yy619;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
yy614:
- YYDEBUG(614, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy315;
- if(yych == 'y') goto yy485;
- goto yy152;
-yy615:
- YYDEBUG(615, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych == 'L') goto yy622;
- if(yych <= 'M') goto yy138;
- goto yy621;
- }
+ YYDEBUG(614, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'l') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- if(yych <= 'k') goto yy138;
- goto yy622;
- } else {
- if(yych == 'n') goto yy621;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy138;
}
-yy616:
- YYDEBUG(616, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy138;
- }
+ } else {
+ if (yych <= 'm') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
} else {
- if(yych <= 'm') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'n') goto yy617;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= 'n') goto yy615;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
-yy617:
- YYDEBUG(617, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
+ }
+yy615:
+ YYDEBUG(615, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy303;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- goto yy303;
- }
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych != 'U') goto yy139;
- }
- } else {
- if(yych <= 't') {
- if(yych <= '`') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'u') goto yy618;
- if(yych <= 'z') goto yy139;
- goto yy303;
- }
- }
- }
-yy618:
- YYDEBUG(618, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- } else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- goto yy3;
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
+ goto yy303;
} else {
- if(yych <= 'a') goto yy619;
- if(yych <= 'z') goto yy140;
- goto yy3;
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
+ goto yy303;
}
}
-yy619:
- YYDEBUG(619, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy141;
+ if (yych != 'U') goto yy139;
}
} else {
- if(yych <= 'q') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
+ if (yych <= 't') {
+ if (yych <= '`') goto yy303;
+ goto yy139;
} else {
- if(yych <= 'r') goto yy620;
- if(yych <= 'z') goto yy141;
- goto yy3;
+ if (yych <= 'u') goto yy616;
+ if (yych <= 'z') goto yy139;
+ goto yy303;
}
}
-yy620:
- YYDEBUG(620, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'X') {
- if(yych == ')') goto yy136;
+ }
+yy616:
+ YYDEBUG(616, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
goto yy3;
} else {
- if(yych <= 'Y') goto yy315;
- if(yych == 'y') goto yy315;
+ if (yych <= 'a') goto yy617;
+ if (yych <= 'z') goto yy140;
goto yy3;
}
-yy621:
- YYDEBUG(621, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy303;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- goto yy303;
- }
- }
+ }
+yy617:
+ YYDEBUG(617, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych == 'E') goto yy623;
- goto yy139;
- }
- } else {
- if(yych <= 'd') {
- if(yych <= '`') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'e') goto yy623;
- if(yych <= 'z') goto yy139;
- goto yy303;
- }
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy141;
}
-yy622:
- YYDEBUG(622, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy303;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- goto yy303;
- }
- }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych != 'Y') goto yy139;
- }
- } else {
- if(yych <= 'x') {
- if(yych <= '`') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'y') goto yy623;
- if(yych <= 'z') goto yy139;
- goto yy303;
- }
- }
+ if (yych <= 'r') goto yy618;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
-yy623:
- YYDEBUG(623, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy305;
- goto yy303;
+ }
+yy618:
+ YYDEBUG(618, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'X') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'Y') goto yy315;
+ if (yych == 'y') goto yy315;
+ goto yy3;
+ }
+yy619:
+ YYDEBUG(619, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= ' ') goto yy305;
- if(yych == ')') goto yy136;
+ if (yych == ' ') goto yy305;
goto yy303;
}
} else {
- if(yych <= '@') {
- if(yych == '/') goto yy303;
- if(yych <= '9') goto yy305;
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
goto yy303;
} else {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy303;
- if(yych <= 'z') goto yy140;
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
goto yy303;
}
}
-yy624:
- YYDEBUG(624, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '/') {
- if(yych == ')') goto yy136;
- if(yych <= '.') goto yy3;
- goto yy144;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= 'K') {
- if(yych <= '@') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'L') goto yy622;
- if(yych <= 'M') goto yy138;
- goto yy621;
- }
+ if (yych == 'E') goto yy621;
+ goto yy139;
}
} else {
- if(yych <= 'k') {
- if(yych <= '^') {
- if(yych <= 'Z') goto yy138;
- goto yy3;
- } else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy3;
- goto yy143;
- }
+ if (yych <= 'd') {
+ if (yych <= '`') goto yy303;
+ goto yy139;
} else {
- if(yych <= 'm') {
- if(yych <= 'l') goto yy631;
- goto yy143;
- } else {
- if(yych <= 'n') goto yy630;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= 'e') goto yy621;
+ if (yych <= 'z') goto yy139;
+ goto yy303;
}
}
-yy625:
- YYDEBUG(625, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
+ }
+yy620:
+ YYDEBUG(620, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy138;
- goto yy617;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
+ goto yy303;
} else {
- if(yych == 'n') goto yy626;
- if(yych <= 'z') goto yy143;
- goto yy3;
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
+ goto yy303;
}
}
-yy626:
- YYDEBUG(626, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
+ if (yych != 'Y') goto yy139;
}
} else {
- if(yych <= '^') {
- if(yych <= 'T') {
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'U') goto yy618;
- if(yych <= 'Z') goto yy139;
- goto yy303;
- }
+ if (yych <= 'x') {
+ if (yych <= '`') goto yy303;
+ goto yy139;
} else {
- if(yych <= 't') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy148;
- } else {
- if(yych <= 'u') goto yy627;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
+ if (yych <= 'y') goto yy621;
+ if (yych <= 'z') goto yy139;
+ goto yy303;
}
}
-yy627:
- YYDEBUG(627, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'A') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- goto yy619;
- }
+ }
+yy621:
+ YYDEBUG(621, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy305;
+ goto yy303;
+ } else {
+ if (yych <= ' ') goto yy305;
+ if (yych == ')') goto yy136;
+ goto yy303;
+ }
+ } else {
+ if (yych <= '@') {
+ if (yych == '/') goto yy303;
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'a') goto yy628;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy303;
+ if (yych <= 'z') goto yy140;
+ goto yy303;
}
-yy628:
- YYDEBUG(628, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'R') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy141;
- goto yy620;
- }
+ }
+yy622:
+ YYDEBUG(622, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '/') {
+ if (yych == ')') goto yy136;
+ if (yych <= '.') goto yy3;
+ goto yy144;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 'K') {
+ if (yych <= '@') goto yy3;
+ goto yy138;
} else {
- if(yych == 'r') goto yy629;
- if(yych <= 'z') goto yy150;
- goto yy3;
+ if (yych <= 'L') goto yy620;
+ if (yych <= 'M') goto yy138;
+ goto yy619;
}
}
-yy629:
- YYDEBUG(629, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'Y') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
+ } else {
+ if (yych <= 'k') {
+ if (yych <= '^') {
+ if (yych <= 'Z') goto yy138;
goto yy3;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= 'X') goto yy3;
- goto yy315;
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy3;
+ goto yy143;
}
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 'm') {
+ if (yych <= 'l') goto yy629;
+ goto yy143;
} else {
- if(yych == 'y') goto yy485;
- if(yych <= 'z') goto yy151;
+ if (yych <= 'n') goto yy628;
+ if (yych <= 'z') goto yy143;
goto yy3;
}
}
-yy630:
- YYDEBUG(630, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
- }
+ }
+yy623:
+ YYDEBUG(623, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '^') {
- if(yych <= 'D') {
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'E') goto yy623;
- if(yych <= 'Z') goto yy139;
- goto yy303;
- }
- } else {
- if(yych <= 'd') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy148;
- } else {
- if(yych <= 'e') goto yy632;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy138;
+ goto yy615;
}
-yy631:
- YYDEBUG(631, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'n') goto yy624;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
+ }
+ }
+yy624:
+ YYDEBUG(624, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= '^') {
- if(yych <= 'X') {
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'Y') goto yy623;
- if(yych <= 'Z') goto yy139;
- goto yy303;
- }
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych <= 'x') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy148;
- } else {
- if(yych <= 'y') goto yy632;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
-yy632:
- YYDEBUG(632, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy305;
- if(yych <= 0x1F) goto yy303;
- goto yy305;
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'T') {
+ if (yych <= '@') goto yy303;
+ goto yy139;
} else {
- if(yych == ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy305;
+ if (yych <= 'U') goto yy616;
+ if (yych <= 'Z') goto yy139;
+ goto yy303;
}
} else {
- if(yych <= 'Z') {
- if(yych <= '/') goto yy144;
- if(yych <= '9') goto yy305;
- if(yych <= '@') goto yy303;
- goto yy140;
+ if (yych <= 't') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy148;
} else {
- if(yych <= '_') {
- if(yych <= '^') goto yy303;
- goto yy144;
- } else {
- if(yych <= '`') goto yy303;
- if(yych <= 'z') goto yy149;
- goto yy303;
- }
+ if (yych <= 'u') goto yy625;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
-yy633:
- YYDEBUG(633, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy305;
- if(yych <= 0x1F) goto yy3;
+ }
+yy625:
+ YYDEBUG(625, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ goto yy617;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '^') goto yy3;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy3;
+ if (yych <= 'a') goto yy626;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
+yy626:
+ YYDEBUG(626, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'R') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy141;
+ goto yy618;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'r') goto yy627;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
+ }
+ }
+yy627:
+ YYDEBUG(627, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'Y') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= 'X') goto yy3;
+ goto yy315;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'y') goto yy483;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
+ }
+ }
+yy628:
+ YYDEBUG(628, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
goto yy305;
} else {
- if(yych == ')') goto yy136;
- if(yych <= ',') goto yy3;
- goto yy305;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= 'H') {
- if(yych <= '/') goto yy3;
- if(yych <= '9') goto yy305;
- if(yych <= '@') goto yy3;
- goto yy138;
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych <= 'Z') {
- if(yych >= 'J') goto yy138;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
-yy634:
- YYDEBUG(634, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy305;
- goto yy3;
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'D') {
+ if (yych <= '@') goto yy303;
+ goto yy139;
} else {
- if(yych <= ' ') goto yy305;
- if(yych == ')') goto yy136;
- goto yy3;
+ if (yych <= 'E') goto yy621;
+ if (yych <= 'Z') goto yy139;
+ goto yy303;
}
} else {
- if(yych <= '@') {
- if(yych == '/') goto yy3;
- if(yych <= '9') goto yy305;
- goto yy3;
+ if (yych <= 'd') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy148;
} else {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy139;
- goto yy3;
+ if (yych <= 'e') goto yy630;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
-yy635:
- YYDEBUG(635, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy305;
- if(yych <= 0x1F) goto yy3;
+ }
+yy629:
+ YYDEBUG(629, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
goto yy305;
} else {
- if(yych == ')') goto yy136;
- if(yych <= ',') goto yy3;
- goto yy305;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= 'H') {
- if(yych <= '/') goto yy3;
- if(yych <= '9') goto yy305;
- if(yych <= '@') goto yy3;
- goto yy138;
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych <= 'Z') {
- if(yych >= 'J') goto yy138;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
- YYDEBUG(636, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy305;
- if(yych <= 0x1F) goto yy3;
- goto yy305;
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'X') {
+ if (yych <= '@') goto yy303;
+ goto yy139;
} else {
- if(yych == ')') goto yy136;
- if(yych <= ',') goto yy3;
- goto yy305;
+ if (yych <= 'Y') goto yy621;
+ if (yych <= 'Z') goto yy139;
+ goto yy303;
}
} else {
- if(yych <= 'H') {
- if(yych <= '/') goto yy3;
- if(yych <= '9') goto yy305;
- if(yych <= '@') goto yy3;
- goto yy139;
+ if (yych <= 'x') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy148;
} else {
- if(yych <= 'Z') {
- if(yych >= 'J') goto yy139;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= 'y') goto yy630;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
- YYDEBUG(637, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy305;
- goto yy3;
+ }
+yy630:
+ YYDEBUG(630, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy305;
+ if (yych <= 0x1F) goto yy303;
+ goto yy305;
+ } else {
+ if (yych == ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy305;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '/') goto yy144;
+ if (yych <= '9') goto yy305;
+ if (yych <= '@') goto yy303;
+ goto yy140;
+ } else {
+ if (yych <= '_') {
+ if (yych <= '^') goto yy303;
+ goto yy144;
} else {
- if(yych <= ' ') goto yy305;
- if(yych == ')') goto yy136;
- goto yy3;
+ if (yych <= '`') goto yy303;
+ if (yych <= 'z') goto yy149;
+ goto yy303;
}
+ }
+ }
+yy631:
+ YYDEBUG(631, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy305;
+ if (yych <= 0x1F) goto yy3;
+ goto yy305;
} else {
- if(yych <= '@') {
- if(yych == '/') goto yy3;
- if(yych <= '9') goto yy305;
- goto yy3;
+ if (yych == ')') goto yy136;
+ if (yych <= ',') goto yy3;
+ goto yy305;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych <= '/') goto yy3;
+ if (yych <= '9') goto yy305;
+ if (yych <= '@') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'Z') {
+ if (yych >= 'J') goto yy138;
} else {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy140;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy138;
goto yy3;
}
}
-yy638:
- YYDEBUG(638, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy305;
- goto yy3;
+ }
+yy632:
+ YYDEBUG(632, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy305;
+ goto yy3;
+ } else {
+ if (yych <= ' ') goto yy305;
+ if (yych == ')') goto yy136;
+ goto yy3;
+ }
+ } else {
+ if (yych <= '@') {
+ if (yych == '/') goto yy3;
+ if (yych <= '9') goto yy305;
+ goto yy3;
+ } else {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
+ }
+ }
+yy633:
+ YYDEBUG(633, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy305;
+ if (yych <= 0x1F) goto yy3;
+ goto yy305;
+ } else {
+ if (yych == ')') goto yy136;
+ if (yych <= ',') goto yy3;
+ goto yy305;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych <= '/') goto yy3;
+ if (yych <= '9') goto yy305;
+ if (yych <= '@') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'Z') {
+ if (yych >= 'J') goto yy138;
} else {
- if(yych <= ' ') goto yy305;
- if(yych == ')') goto yy136;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy138;
goto yy3;
}
+ }
+ }
+ YYDEBUG(634, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy305;
+ if (yych <= 0x1F) goto yy3;
+ goto yy305;
} else {
- if(yych <= '@') {
- if(yych == '/') goto yy3;
- if(yych <= '9') goto yy305;
- goto yy3;
+ if (yych == ')') goto yy136;
+ if (yych <= ',') goto yy3;
+ goto yy305;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych <= '/') goto yy3;
+ if (yych <= '9') goto yy305;
+ if (yych <= '@') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 'Z') {
+ if (yych >= 'J') goto yy139;
} else {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy138;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy139;
goto yy3;
}
}
-yy639:
- YYDEBUG(639, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy305;
- if(yych <= 0x1F) goto yy3;
- goto yy305;
- } else {
- if(yych == ')') goto yy136;
- if(yych <= ',') goto yy3;
- goto yy305;
- }
+ }
+ YYDEBUG(635, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy305;
+ goto yy3;
+ } else {
+ if (yych <= ' ') goto yy305;
+ if (yych == ')') goto yy136;
+ goto yy3;
+ }
+ } else {
+ if (yych <= '@') {
+ if (yych == '/') goto yy3;
+ if (yych <= '9') goto yy305;
+ goto yy3;
+ } else {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
+ }
+ }
+yy636:
+ YYDEBUG(636, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy305;
+ goto yy3;
+ } else {
+ if (yych <= ' ') goto yy305;
+ if (yych == ')') goto yy136;
+ goto yy3;
+ }
+ } else {
+ if (yych <= '@') {
+ if (yych == '/') goto yy3;
+ if (yych <= '9') goto yy305;
+ goto yy3;
} else {
- if(yych <= 'H') {
- if(yych <= '/') goto yy3;
- if(yych <= '9') goto yy305;
- if(yych <= '@') goto yy3;
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
+yy637:
+ YYDEBUG(637, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy305;
+ if (yych <= 0x1F) goto yy3;
+ goto yy305;
+ } else {
+ if (yych == ')') goto yy136;
+ if (yych <= ',') goto yy3;
+ goto yy305;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych <= '/') goto yy3;
+ if (yych <= '9') goto yy305;
+ if (yych <= '@') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= 'I') goto yy632;
goto yy138;
} else {
- if(yych <= 'Z') {
- if(yych <= 'I') goto yy634;
- goto yy138;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '`') goto yy3;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
}
-yy640:
- YYDEBUG(640, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy3;
+ }
+yy638:
+ YYDEBUG(638, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= '9') {
+ if (yych <= '/') goto yy3;
+ goto yy660;
+ } else {
+ if (yych <= ':') goto yy645;
+ if (yych <= 'C') goto yy3;
goto yy57;
- } else {
- if(yych <= '9') {
- if(yych <= '/') goto yy3;
- goto yy662;
- } else {
- if(yych <= ':') goto yy647;
- if(yych <= 'C') goto yy3;
- goto yy57;
- }
}
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy3;
+ goto yy57;
} else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy3;
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy3;
goto yy57;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy3;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy3;
- if(yych <= 'T') goto yy57;
- goto yy3;
- }
+ if (yych <= 'R') goto yy3;
+ if (yych <= 'T') goto yy57;
+ goto yy3;
}
}
- } else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy3;
- if(yych <= 'Y') goto yy57;
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy3;
+ if (yych <= 'Y') goto yy57;
+ goto yy3;
+ } else {
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
goto yy3;
} else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy3;
- } else {
- if(yych == 'g') goto yy3;
- goto yy57;
- }
+ if (yych == 'g') goto yy3;
+ goto yy57;
}
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy3;
+ goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy3;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy3;
goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy3;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy3;
- }
+ if (yych == 'y') goto yy57;
+ goto yy3;
}
}
}
-yy641:
- YYDEBUG(641, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= ':') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy3;
- goto yy57;
- } else {
- if(yych <= '3') {
- if(yych <= '/') goto yy3;
- goto yy662;
- } else {
- if(yych <= '5') goto yy645;
- if(yych <= '9') goto yy646;
- goto yy647;
- }
- }
+ }
+yy639:
+ YYDEBUG(639, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= ':') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy3;
+ goto yy57;
} else {
- if(yych <= 'G') {
- if(yych <= 'D') {
- if(yych <= 'C') goto yy3;
- goto yy57;
- } else {
- if(yych == 'F') goto yy57;
- goto yy3;
- }
+ if (yych <= '3') {
+ if (yych <= '/') goto yy3;
+ goto yy660;
} else {
- if(yych <= 'L') {
- if(yych <= 'H') goto yy57;
- goto yy3;
- } else {
- if(yych <= 'M') goto yy57;
- if(yych <= 'R') goto yy3;
- goto yy57;
- }
+ if (yych <= '5') goto yy643;
+ if (yych <= '9') goto yy644;
+ goto yy645;
}
}
} else {
- if(yych <= 'g') {
- if(yych <= 'Y') {
- if(yych == 'W') goto yy57;
- if(yych <= 'X') goto yy3;
+ if (yych <= 'G') {
+ if (yych <= 'D') {
+ if (yych <= 'C') goto yy3;
goto yy57;
} else {
- if(yych <= 'd') {
- if(yych <= 'c') goto yy3;
- goto yy57;
- } else {
- if(yych == 'f') goto yy57;
- goto yy3;
- }
+ if (yych == 'F') goto yy57;
+ goto yy3;
}
} else {
- if(yych <= 't') {
- if(yych <= 'l') {
- if(yych <= 'h') goto yy57;
- goto yy3;
- } else {
- if(yych <= 'm') goto yy57;
- if(yych <= 'r') goto yy3;
- goto yy57;
- }
+ if (yych <= 'L') {
+ if (yych <= 'H') goto yy57;
+ goto yy3;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy3;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy3;
- }
+ if (yych <= 'M') goto yy57;
+ if (yych <= 'R') goto yy3;
+ goto yy57;
}
}
}
-yy642:
- YYDEBUG(642, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= 'C') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy3;
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Y') {
+ if (yych == 'W') goto yy57;
+ if (yych <= 'X') goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'c') goto yy3;
goto yy57;
} else {
- if(yych <= '5') {
- if(yych <= '/') goto yy3;
- goto yy645;
- } else {
- if(yych <= '9') goto yy646;
- if(yych <= ':') goto yy647;
- goto yy3;
- }
- }
- } else {
- if(yych <= 'G') {
- if(yych == 'E') goto yy3;
- if(yych <= 'F') goto yy57;
+ if (yych == 'f') goto yy57;
goto yy3;
- } else {
- if(yych <= 'L') {
- if(yych <= 'H') goto yy57;
- goto yy3;
- } else {
- if(yych <= 'M') goto yy57;
- if(yych <= 'R') goto yy3;
- goto yy57;
- }
}
}
} else {
- if(yych <= 'g') {
- if(yych <= 'Y') {
- if(yych == 'W') goto yy57;
- if(yych <= 'X') goto yy3;
- goto yy57;
+ if (yych <= 't') {
+ if (yych <= 'l') {
+ if (yych <= 'h') goto yy57;
+ goto yy3;
} else {
- if(yych <= 'd') {
- if(yych <= 'c') goto yy3;
- goto yy57;
- } else {
- if(yych == 'f') goto yy57;
- goto yy3;
- }
+ if (yych <= 'm') goto yy57;
+ if (yych <= 'r') goto yy3;
+ goto yy57;
}
} else {
- if(yych <= 't') {
- if(yych <= 'l') {
- if(yych <= 'h') goto yy57;
- goto yy3;
- } else {
- if(yych <= 'm') goto yy57;
- if(yych <= 'r') goto yy3;
- goto yy57;
- }
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy3;
+ goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy3;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy3;
- }
+ if (yych == 'y') goto yy57;
+ goto yy3;
}
}
}
-yy643:
- YYDEBUG(643, *YYCURSOR);
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- YYDEBUG(644, *YYCURSOR);
- if(yybm[0+yych] & 8) {
- goto yy54;
- }
- if(yych <= ',') {
- if(yych == '+') goto yy643;
- goto yy53;
+ }
+yy640:
+ YYDEBUG(640, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= 'C') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= '5') {
+ if (yych <= '/') goto yy3;
+ goto yy643;
+ } else {
+ if (yych <= '9') goto yy644;
+ if (yych <= ':') goto yy645;
+ goto yy3;
+ }
+ }
} else {
- if(yych <= '-') goto yy643;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy51;
- goto yy53;
- }
-yy645:
- YYDEBUG(645, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy3;
- goto yy57;
+ if (yych <= 'G') {
+ if (yych == 'E') goto yy3;
+ if (yych <= 'F') goto yy57;
+ goto yy3;
+ } else {
+ if (yych <= 'L') {
+ if (yych <= 'H') goto yy57;
+ goto yy3;
} else {
- if(yych <= '/') goto yy3;
- if(yych <= '9') goto yy661;
- if(yych <= 'C') goto yy3;
+ if (yych <= 'M') goto yy57;
+ if (yych <= 'R') goto yy3;
goto yy57;
}
- } else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy3;
+ }
+ }
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Y') {
+ if (yych == 'W') goto yy57;
+ if (yych <= 'X') goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'c') goto yy3;
goto yy57;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy3;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy3;
- if(yych <= 'T') goto yy57;
- goto yy3;
- }
+ if (yych == 'f') goto yy57;
+ goto yy3;
}
}
} else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy3;
- if(yych <= 'Y') goto yy57;
+ if (yych <= 't') {
+ if (yych <= 'l') {
+ if (yych <= 'h') goto yy57;
goto yy3;
} else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy3;
- } else {
- if(yych == 'g') goto yy3;
- goto yy57;
- }
+ if (yych <= 'm') goto yy57;
+ if (yych <= 'r') goto yy3;
+ goto yy57;
}
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy3;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy3;
goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy3;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy3;
- }
+ if (yych == 'y') goto yy57;
+ goto yy3;
}
}
}
-yy646:
- YYDEBUG(646, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy3;
+ }
+yy641:
+ YYDEBUG(641, *YYCURSOR);
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ YYDEBUG(642, *YYCURSOR);
+ if (yybm[0+yych] & 8) {
+ goto yy54;
+ }
+ if (yych <= ',') {
+ if (yych == '+') goto yy641;
+ goto yy53;
+ } else {
+ if (yych <= '-') goto yy641;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy51;
+ goto yy53;
+ }
+yy643:
+ YYDEBUG(643, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= '/') goto yy3;
+ if (yych <= '9') goto yy659;
+ if (yych <= 'C') goto yy3;
+ goto yy57;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy3;
goto yy57;
} else {
- if(yych <= '/') goto yy3;
- if(yych <= '9') goto yy649;
- if(yych <= 'C') goto yy3;
+ if (yych <= 'R') goto yy3;
+ if (yych <= 'T') goto yy57;
+ goto yy3;
+ }
+ }
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy3;
+ if (yych <= 'Y') goto yy57;
+ goto yy3;
+ } else {
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
+ goto yy3;
+ } else {
+ if (yych == 'g') goto yy3;
goto yy57;
}
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy3;
+ goto yy57;
} else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy3;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy3;
goto yy57;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy3;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy3;
- if(yych <= 'T') goto yy57;
- goto yy3;
- }
+ if (yych == 'y') goto yy57;
+ goto yy3;
}
}
- } else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy3;
- if(yych <= 'Y') goto yy57;
+ }
+ }
+yy644:
+ YYDEBUG(644, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= '/') goto yy3;
+ if (yych <= '9') goto yy647;
+ if (yych <= 'C') goto yy3;
+ goto yy57;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= 'R') goto yy3;
+ if (yych <= 'T') goto yy57;
+ goto yy3;
+ }
+ }
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy3;
+ if (yych <= 'Y') goto yy57;
+ goto yy3;
+ } else {
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
goto yy3;
} else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy3;
- } else {
- if(yych == 'g') goto yy3;
- goto yy57;
- }
+ if (yych == 'g') goto yy3;
+ goto yy57;
}
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy3;
+ goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy3;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy3;
goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy3;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy3;
- }
+ if (yych == 'y') goto yy57;
+ goto yy3;
}
}
}
+ }
+yy645:
+ YYDEBUG(645, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy3;
+ if (yych <= '5') goto yy646;
+ if (yych <= '9') goto yy136;
+ goto yy3;
+yy646:
+ YYDEBUG(646, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy3;
+ if (yych <= '9') goto yy136;
+ goto yy3;
yy647:
- YYDEBUG(647, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy3;
- if(yych <= '5') goto yy648;
- if(yych <= '9') goto yy136;
- goto yy3;
+ YYDEBUG(647, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych >= ':') goto yy57;
yy648:
- YYDEBUG(648, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy3;
- if(yych <= '9') goto yy136;
- goto yy3;
+ YYDEBUG(648, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yybm[0+yych] & 4) {
+ goto yy51;
+ }
+ if (yych != '-') goto yy57;
yy649:
- YYDEBUG(649, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych >= ':') goto yy57;
+ YYDEBUG(649, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '0') goto yy650;
+ if (yych <= '1') goto yy651;
+ goto yy53;
yy650:
- YYDEBUG(650, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yybm[0+yych] & 4) {
- goto yy51;
- }
- if(yych != '-') goto yy57;
+ YYDEBUG(650, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy652;
+ goto yy53;
yy651:
- YYDEBUG(651, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '0') goto yy652;
- if(yych <= '1') goto yy653;
- goto yy53;
+ YYDEBUG(651, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '3') goto yy53;
yy652:
- YYDEBUG(652, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy654;
- goto yy53;
-yy653:
- YYDEBUG(653, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '3') goto yy53;
+ YYDEBUG(652, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '-') goto yy53;
+ YYDEBUG(653, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '0') goto yy654;
+ if (yych <= '2') goto yy655;
+ if (yych <= '3') goto yy656;
+ goto yy53;
yy654:
- YYDEBUG(654, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '-') goto yy53;
- YYDEBUG(655, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '0') goto yy656;
- if(yych <= '2') goto yy657;
- if(yych <= '3') goto yy658;
- goto yy53;
+ YYDEBUG(654, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy657;
+ goto yy53;
+yy655:
+ YYDEBUG(655, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy657;
+ goto yy53;
yy656:
- YYDEBUG(656, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy659;
- goto yy53;
+ YYDEBUG(656, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '2') goto yy53;
yy657:
- YYDEBUG(657, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy659;
- goto yy53;
+ YYDEBUG(657, *YYCURSOR);
+ ++YYCURSOR;
yy658:
- YYDEBUG(658, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '2') goto yy53;
-yy659:
- YYDEBUG(659, *YYCURSOR);
- ++YYCURSOR;
-yy660:
- YYDEBUG(660, *YYCURSOR);
+ YYDEBUG(658, *YYCURSOR);
#line 1097 "ext/date/lib/parse_date.re"
- {
+ {
DEBUG_OUTPUT("iso8601date4 | iso8601date2 | iso8601dateslash | dateslash");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -12203,568 +12163,568 @@ yy660:
TIMELIB_DEINIT;
return TIMELIB_ISO_DATE;
}
-#line 12207 "ext/date/lib/parse_date.c"
-yy661:
- YYDEBUG(661, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy3;
+#line 12167 "ext/date/lib/parse_date.c"
+yy659:
+ YYDEBUG(659, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= '/') goto yy3;
+ if (yych <= '9') goto yy648;
+ if (yych <= 'C') goto yy3;
+ goto yy57;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy3;
goto yy57;
} else {
- if(yych <= '/') goto yy3;
- if(yych <= '9') goto yy650;
- if(yych <= 'C') goto yy3;
+ if (yych <= 'R') goto yy3;
+ if (yych <= 'T') goto yy57;
+ goto yy3;
+ }
+ }
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy3;
+ if (yych <= 'Y') goto yy57;
+ goto yy3;
+ } else {
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
+ goto yy3;
+ } else {
+ if (yych == 'g') goto yy3;
goto yy57;
}
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy3;
+ goto yy57;
} else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy3;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy3;
goto yy57;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy3;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy3;
- if(yych <= 'T') goto yy57;
- goto yy3;
- }
+ if (yych == 'y') goto yy57;
+ goto yy3;
}
}
- } else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy3;
- if(yych <= 'Y') goto yy57;
+ }
+ }
+yy660:
+ YYDEBUG(660, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= 'C') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= '5') {
+ if (yych <= '/') goto yy3;
+ } else {
+ if (yych <= '9') goto yy659;
+ if (yych <= ':') goto yy645;
goto yy3;
- } else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy3;
- } else {
- if(yych == 'g') goto yy3;
- goto yy57;
- }
}
+ }
+ } else {
+ if (yych <= 'G') {
+ if (yych == 'E') goto yy3;
+ if (yych <= 'F') goto yy57;
+ goto yy3;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy3;
- goto yy57;
+ if (yych <= 'L') {
+ if (yych <= 'H') goto yy57;
+ goto yy3;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy3;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy3;
- }
+ if (yych <= 'M') goto yy57;
+ if (yych <= 'R') goto yy3;
+ goto yy57;
}
}
}
-yy662:
- YYDEBUG(662, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= 'C') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy3;
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Y') {
+ if (yych == 'W') goto yy57;
+ if (yych <= 'X') goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'c') goto yy3;
goto yy57;
} else {
- if(yych <= '5') {
- if(yych <= '/') goto yy3;
- } else {
- if(yych <= '9') goto yy661;
- if(yych <= ':') goto yy647;
- goto yy3;
- }
- }
- } else {
- if(yych <= 'G') {
- if(yych == 'E') goto yy3;
- if(yych <= 'F') goto yy57;
+ if (yych == 'f') goto yy57;
goto yy3;
- } else {
- if(yych <= 'L') {
- if(yych <= 'H') goto yy57;
- goto yy3;
- } else {
- if(yych <= 'M') goto yy57;
- if(yych <= 'R') goto yy3;
- goto yy57;
- }
}
}
} else {
- if(yych <= 'g') {
- if(yych <= 'Y') {
- if(yych == 'W') goto yy57;
- if(yych <= 'X') goto yy3;
- goto yy57;
+ if (yych <= 't') {
+ if (yych <= 'l') {
+ if (yych <= 'h') goto yy57;
+ goto yy3;
} else {
- if(yych <= 'd') {
- if(yych <= 'c') goto yy3;
- goto yy57;
- } else {
- if(yych == 'f') goto yy57;
- goto yy3;
- }
+ if (yych <= 'm') goto yy57;
+ if (yych <= 'r') goto yy3;
+ goto yy57;
}
} else {
- if(yych <= 't') {
- if(yych <= 'l') {
- if(yych <= 'h') goto yy57;
- goto yy3;
- } else {
- if(yych <= 'm') goto yy57;
- if(yych <= 'r') goto yy3;
- goto yy57;
- }
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy3;
+ goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy3;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy3;
- }
+ if (yych == 'y') goto yy57;
+ goto yy3;
}
}
}
- YYDEBUG(663, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy3;
+ }
+ YYDEBUG(661, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= '/') goto yy3;
+ if (yych <= '9') goto yy662;
+ if (yych <= 'C') goto yy3;
+ goto yy57;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy3;
goto yy57;
} else {
- if(yych <= '/') goto yy3;
- if(yych <= '9') goto yy664;
- if(yych <= 'C') goto yy3;
- goto yy57;
+ if (yych <= 'R') goto yy3;
+ if (yych <= 'T') goto yy57;
+ goto yy3;
}
+ }
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy3;
+ if (yych <= 'Y') goto yy57;
+ goto yy3;
} else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy3;
- goto yy57;
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
+ goto yy3;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy3;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy3;
- if(yych <= 'T') goto yy57;
- goto yy3;
- }
+ if (yych == 'g') goto yy3;
+ goto yy57;
}
}
} else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy3;
- if(yych <= 'Y') goto yy57;
- goto yy3;
- } else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy3;
- } else {
- if(yych == 'g') goto yy3;
- goto yy57;
- }
- }
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy3;
+ goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy3;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy3;
goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy3;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy3;
- }
+ if (yych == 'y') goto yy57;
+ goto yy3;
}
}
}
-yy664:
- YYDEBUG(664, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yybm[0+yych] & 4) {
- goto yy51;
- }
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy3;
- goto yy57;
- } else {
- if(yych == '-') goto yy651;
- if(yych <= 'C') goto yy3;
- goto yy57;
- }
+ }
+yy662:
+ YYDEBUG(662, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yybm[0+yych] & 4) {
+ goto yy51;
+ }
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy3;
+ goto yy57;
} else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy3;
+ if (yych == '-') goto yy649;
+ if (yych <= 'C') goto yy3;
+ goto yy57;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy3;
+ goto yy57;
+ } else {
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy3;
goto yy57;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy3;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy3;
- if(yych <= 'T') goto yy57;
- goto yy3;
- }
+ if (yych <= 'R') goto yy3;
+ if (yych <= 'T') goto yy57;
+ goto yy3;
}
}
- } else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy3;
- if(yych <= 'Y') goto yy57;
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy3;
+ if (yych <= 'Y') goto yy57;
+ goto yy3;
+ } else {
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
goto yy3;
} else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy3;
- } else {
- if(yych == 'g') goto yy3;
- goto yy57;
- }
+ if (yych == 'g') goto yy3;
+ goto yy57;
}
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy3;
+ goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy3;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy3;
goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy3;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy3;
- }
+ if (yych == 'y') goto yy57;
+ goto yy3;
}
}
}
+ }
+yy663:
+ YYDEBUG(663, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy665;
+ if (yych <= '0') goto yy919;
+ if (yych <= '1') goto yy920;
+ if (yych <= '9') goto yy921;
+ goto yy665;
+yy664:
+ YYDEBUG(664, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 13) YYFILL(13);
+ yych = *YYCURSOR;
yy665:
- YYDEBUG(665, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy667;
- if(yych <= '0') goto yy916;
- if(yych <= '1') goto yy917;
- if(yych <= '9') goto yy918;
- goto yy667;
+ YYDEBUG(665, *YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t':
+ case ' ': goto yy664;
+ case '-':
+ case '.': goto yy764;
+ case 'A':
+ case 'a': goto yy683;
+ case 'D':
+ case 'd': goto yy669;
+ case 'F':
+ case 'f': goto yy670;
+ case 'H':
+ case 'h': goto yy60;
+ case 'I': goto yy678;
+ case 'J':
+ case 'j': goto yy682;
+ case 'M':
+ case 'm': goto yy668;
+ case 'N':
+ case 'n': goto yy685;
+ case 'O':
+ case 'o': goto yy684;
+ case 'P':
+ case 'p': goto yy687;
+ case 'S':
+ case 's': goto yy666;
+ case 'T':
+ case 't': goto yy65;
+ case 'V': goto yy680;
+ case 'W':
+ case 'w': goto yy62;
+ case 'X': goto yy681;
+ case 'Y':
+ case 'y': goto yy64;
+ default: goto yy53;
+ }
yy666:
- YYDEBUG(666, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 13) YYFILL(13);
- yych = *YYCURSOR;
+ YYDEBUG(666, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= 'D') {
+ if (yych == 'A') goto yy123;
+ goto yy53;
+ } else {
+ if (yych <= 'E') goto yy1229;
+ if (yych <= 'T') goto yy53;
+ goto yy122;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych == 'a') goto yy123;
+ goto yy53;
+ } else {
+ if (yych <= 'e') goto yy1229;
+ if (yych == 'u') goto yy122;
+ goto yy53;
+ }
+ }
yy667:
- YYDEBUG(667, *YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09:
- case ' ': goto yy666;
- case '-':
- case '.': goto yy766;
- case 'A':
- case 'a': goto yy685;
- case 'D':
- case 'd': goto yy671;
- case 'F':
- case 'f': goto yy672;
- case 'H':
- case 'h': goto yy60;
- case 'I': goto yy680;
- case 'J':
- case 'j': goto yy684;
- case 'M':
- case 'm': goto yy670;
- case 'N':
- case 'n': goto yy687;
- case 'O':
- case 'o': goto yy686;
- case 'P':
- case 'p': goto yy689;
- case 'S':
- case 's': goto yy668;
- case 'T':
- case 't': goto yy65;
- case 'V': goto yy682;
- case 'W':
- case 'w': goto yy62;
- case 'X': goto yy683;
- case 'Y':
- case 'y': goto yy64;
- default: goto yy53;
+ YYDEBUG(667, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '`') {
+ if (yych <= 'D') {
+ if (yych == 'A') goto yy123;
+ goto yy53;
+ } else {
+ if (yych <= 'E') goto yy1229;
+ if (yych == 'U') goto yy122;
+ goto yy53;
+ }
+ } else {
+ if (yych <= 'e') {
+ if (yych <= 'a') goto yy123;
+ if (yych <= 'd') goto yy53;
+ goto yy1229;
+ } else {
+ if (yych <= 's') goto yy53;
+ if (yych <= 't') goto yy912;
+ if (yych <= 'u') goto yy122;
+ goto yy53;
}
+ }
yy668:
- YYDEBUG(668, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= 'D') {
- if(yych == 'A') goto yy123;
- goto yy53;
- } else {
- if(yych <= 'E') goto yy1224;
- if(yych <= 'T') goto yy53;
- goto yy122;
- }
+ YYDEBUG(668, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych <= 'H') {
+ if (yych == 'A') goto yy779;
+ goto yy53;
} else {
- if(yych <= 'd') {
- if(yych == 'a') goto yy123;
- goto yy53;
- } else {
- if(yych <= 'e') goto yy1224;
- if(yych == 'u') goto yy122;
- goto yy53;
- }
+ if (yych <= 'I') goto yy114;
+ if (yych <= 'N') goto yy53;
+ goto yy113;
}
+ } else {
+ if (yych <= 'h') {
+ if (yych == 'a') goto yy779;
+ goto yy53;
+ } else {
+ if (yych <= 'i') goto yy114;
+ if (yych == 'o') goto yy113;
+ goto yy53;
+ }
+ }
yy669:
- YYDEBUG(669, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '`') {
- if(yych <= 'D') {
- if(yych == 'A') goto yy123;
- goto yy53;
- } else {
- if(yych <= 'E') goto yy1224;
- if(yych == 'U') goto yy122;
- goto yy53;
- }
+ YYDEBUG(669, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych == 'A') goto yy110;
+ if (yych <= 'D') goto yy53;
+ goto yy766;
+ } else {
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy53;
+ goto yy110;
} else {
- if(yych <= 'e') {
- if(yych <= 'a') goto yy123;
- if(yych <= 'd') goto yy53;
- goto yy1224;
- } else {
- if(yych <= 's') goto yy53;
- if(yych <= 't') goto yy913;
- if(yych <= 'u') goto yy122;
- goto yy53;
- }
+ if (yych == 'e') goto yy766;
+ goto yy53;
}
+ }
yy670:
- YYDEBUG(670, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych <= 'H') {
- if(yych == 'A') goto yy781;
- goto yy53;
- } else {
- if(yych <= 'I') goto yy114;
- if(yych <= 'N') goto yy53;
- goto yy113;
- }
+ YYDEBUG(670, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= 'N') {
+ if (yych == 'E') goto yy782;
+ goto yy53;
} else {
- if(yych <= 'h') {
- if(yych == 'a') goto yy781;
- goto yy53;
- } else {
- if(yych <= 'i') goto yy114;
- if(yych == 'o') goto yy113;
- goto yy53;
- }
+ if (yych <= 'O') goto yy83;
+ if (yych <= 'Q') goto yy53;
+ goto yy82;
}
-yy671:
- YYDEBUG(671, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych == 'A') goto yy110;
- if(yych <= 'D') goto yy53;
- goto yy768;
- } else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy53;
- goto yy110;
- } else {
- if(yych == 'e') goto yy768;
- goto yy53;
- }
+ } else {
+ if (yych <= 'n') {
+ if (yych == 'e') goto yy782;
+ goto yy53;
+ } else {
+ if (yych <= 'o') goto yy83;
+ if (yych == 'r') goto yy82;
+ goto yy53;
}
-yy672:
- YYDEBUG(672, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= 'N') {
- if(yych == 'E') goto yy784;
- goto yy53;
- } else {
- if(yych <= 'O') goto yy83;
- if(yych <= 'Q') goto yy53;
- goto yy82;
- }
+ }
+yy671:
+ YYDEBUG(671, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'H') goto yy66;
+ if (yych <= 'T') goto yy53;
+ goto yy67;
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'g') goto yy53;
+ goto yy1228;
} else {
- if(yych <= 'n') {
- if(yych == 'e') goto yy784;
- goto yy53;
- } else {
- if(yych <= 'o') goto yy83;
- if(yych == 'r') goto yy82;
- goto yy53;
- }
+ if (yych == 'u') goto yy67;
+ goto yy53;
}
+ }
+yy672:
+ YYDEBUG(672, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '-') goto yy925;
+ if (yych <= '/') goto yy57;
+ if (yych <= '9') goto yy924;
+ goto yy57;
yy673:
- YYDEBUG(673, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'H') goto yy66;
- if(yych <= 'T') goto yy53;
- goto yy67;
- } else {
- if(yych <= 'h') {
- if(yych <= 'g') goto yy53;
- goto yy1223;
- } else {
- if(yych == 'u') goto yy67;
- goto yy53;
- }
- }
+ YYDEBUG(673, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'c') {
+ if (yych == 'O') goto yy717;
+ goto yy53;
+ } else {
+ if (yych <= 'd') goto yy912;
+ if (yych == 'o') goto yy717;
+ goto yy53;
+ }
yy674:
- YYDEBUG(674, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '-') goto yy920;
- if(yych <= '/') goto yy57;
- if(yych <= '9') goto yy919;
- goto yy57;
+ YYDEBUG(674, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'd') goto yy912;
+ goto yy53;
yy675:
- YYDEBUG(675, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'c') {
- if(yych == 'O') goto yy719;
- goto yy53;
- } else {
- if(yych <= 'd') goto yy913;
- if(yych == 'o') goto yy719;
- goto yy53;
- }
+ YYDEBUG(675, *YYCURSOR);
+ yych = *++YYCURSOR;
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '0':
+ case '1':
+ case '2': goto yy852;
+ case '3': goto yy854;
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy855;
+ case 'A':
+ case 'a': goto yy859;
+ case 'D':
+ case 'd': goto yy863;
+ case 'F':
+ case 'f': goto yy857;
+ case 'J':
+ case 'j': goto yy856;
+ case 'M':
+ case 'm': goto yy858;
+ case 'N':
+ case 'n': goto yy862;
+ case 'O':
+ case 'o': goto yy861;
+ case 'S':
+ case 's': goto yy860;
+ default: goto yy53;
+ }
yy676:
- YYDEBUG(676, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'd') goto yy913;
- goto yy53;
+ YYDEBUG(676, *YYCURSOR);
+ yych = *++YYCURSOR;
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '0': goto yy802;
+ case '1': goto yy803;
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy804;
+ case 'A':
+ case 'a': goto yy808;
+ case 'D':
+ case 'd': goto yy812;
+ case 'F':
+ case 'f': goto yy806;
+ case 'J':
+ case 'j': goto yy805;
+ case 'M':
+ case 'm': goto yy807;
+ case 'N':
+ case 'n': goto yy811;
+ case 'O':
+ case 'o': goto yy810;
+ case 'S':
+ case 's': goto yy809;
+ default: goto yy765;
+ }
yy677:
- YYDEBUG(677, *YYCURSOR);
- yych = *++YYCURSOR;
- YYDEBUG(-1, yych);
- switch(yych) {
- case '0':
- case '1':
- case '2': goto yy853;
- case '3': goto yy855;
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy856;
- case 'A':
- case 'a': goto yy860;
- case 'D':
- case 'd': goto yy864;
- case 'F':
- case 'f': goto yy858;
- case 'J':
- case 'j': goto yy857;
- case 'M':
- case 'm': goto yy859;
- case 'N':
- case 'n': goto yy863;
- case 'O':
- case 'o': goto yy862;
- case 'S':
- case 's': goto yy861;
- default: goto yy53;
- }
+ YYDEBUG(677, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '1') {
+ if (yych <= '/') goto yy765;
+ if (yych <= '0') goto yy755;
+ goto yy756;
+ } else {
+ if (yych <= '5') goto yy757;
+ if (yych <= '9') goto yy758;
+ goto yy765;
+ }
yy678:
- YYDEBUG(678, *YYCURSOR);
- yych = *++YYCURSOR;
- YYDEBUG(-1, yych);
- switch(yych) {
- case '0': goto yy803;
- case '1': goto yy804;
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy805;
- case 'A':
- case 'a': goto yy809;
- case 'D':
- case 'd': goto yy813;
- case 'F':
- case 'f': goto yy807;
- case 'J':
- case 'j': goto yy806;
- case 'M':
- case 'm': goto yy808;
- case 'N':
- case 'n': goto yy812;
- case 'O':
- case 'o': goto yy811;
- case 'S':
- case 's': goto yy810;
- default: goto yy767;
- }
-yy679:
- YYDEBUG(679, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '1') {
- if(yych <= '/') goto yy767;
- if(yych <= '0') goto yy757;
- goto yy758;
+ YYDEBUG(678, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
} else {
- if(yych <= '5') goto yy759;
- if(yych <= '9') goto yy760;
- goto yy767;
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '.') goto yy719;
}
-yy680:
- YYDEBUG(680, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '.') goto yy721;
- }
+ } else {
+ if (yych <= 'U') {
+ if (yych <= '9') goto yy721;
+ if (yych == 'I') goto yy754;
} else {
- if(yych <= 'U') {
- if(yych <= '9') goto yy723;
- if(yych == 'I') goto yy756;
- } else {
- if(yych == 'W') goto yy681;
- if(yych <= 'X') goto yy729;
- }
+ if (yych == 'W') goto yy679;
+ if (yych <= 'X') goto yy727;
}
-yy681:
- YYDEBUG(681, *YYCURSOR);
-#line 1225 "ext/date/lib/parse_date.re"
- {
+ }
+yy679:
+ YYDEBUG(679, *YYCURSOR);
+#line 1226 "ext/date/lib/parse_date.re"
+ {
DEBUG_OUTPUT("datenoyearrev");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -12774,149 +12734,149 @@ yy681:
TIMELIB_DEINIT;
return TIMELIB_DATE_TEXT;
}
-#line 12778 "ext/date/lib/parse_date.c"
-yy682:
- YYDEBUG(682, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy681;
- goto yy721;
- } else {
- if(yych == ' ') goto yy721;
- goto yy681;
- }
+#line 12738 "ext/date/lib/parse_date.c"
+yy680:
+ YYDEBUG(680, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy679;
+ goto yy719;
} else {
- if(yych <= '9') {
- if(yych <= '.') goto yy721;
- if(yych <= '/') goto yy681;
- goto yy723;
- } else {
- if(yych == 'I') goto yy754;
- goto yy681;
- }
+ if (yych == ' ') goto yy719;
+ goto yy679;
}
-yy683:
- YYDEBUG(683, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy681;
- goto yy721;
- } else {
- if(yych == ' ') goto yy721;
- goto yy681;
- }
+ } else {
+ if (yych <= '9') {
+ if (yych <= '.') goto yy719;
+ if (yych <= '/') goto yy679;
+ goto yy721;
} else {
- if(yych <= '9') {
- if(yych <= '.') goto yy721;
- if(yych <= '/') goto yy681;
- goto yy723;
- } else {
- if(yych == 'I') goto yy753;
- goto yy681;
- }
+ if (yych == 'I') goto yy752;
+ goto yy679;
}
-yy684:
- YYDEBUG(684, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'A') goto yy746;
- if(yych <= 'T') goto yy53;
- goto yy745;
- } else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy53;
- goto yy746;
- } else {
- if(yych == 'u') goto yy745;
- goto yy53;
- }
+ }
+yy681:
+ YYDEBUG(681, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy679;
+ goto yy719;
+ } else {
+ if (yych == ' ') goto yy719;
+ goto yy679;
}
-yy685:
- YYDEBUG(685, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= 'L') {
- if(yych == '.') goto yy690;
- goto yy53;
- } else {
- if(yych <= 'M') goto yy691;
- if(yych == 'P') goto yy739;
- goto yy53;
- }
+ } else {
+ if (yych <= '9') {
+ if (yych <= '.') goto yy719;
+ if (yych <= '/') goto yy679;
+ goto yy721;
} else {
- if(yych <= 'o') {
- if(yych <= 'U') goto yy738;
- if(yych == 'm') goto yy691;
- goto yy53;
- } else {
- if(yych <= 'p') goto yy739;
- if(yych == 'u') goto yy738;
- goto yy53;
- }
+ if (yych == 'I') goto yy751;
+ goto yy679;
}
-yy686:
- YYDEBUG(686, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy733;
- if(yych == 'c') goto yy733;
- goto yy53;
-yy687:
- YYDEBUG(687, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'O') goto yy719;
- if(yych == 'o') goto yy719;
- goto yy53;
-yy688:
- YYDEBUG(688, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy695;
- if(yych <= '9') goto yy697;
- goto yy53;
-yy689:
- YYDEBUG(689, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'L') {
- if(yych != '.') goto yy53;
+ }
+yy682:
+ YYDEBUG(682, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'A') goto yy744;
+ if (yych <= 'T') goto yy53;
+ goto yy743;
+ } else {
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy53;
+ goto yy744;
} else {
- if(yych <= 'M') goto yy691;
- if(yych == 'm') goto yy691;
+ if (yych == 'u') goto yy743;
goto yy53;
}
-yy690:
- YYDEBUG(690, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy691;
- if(yych != 'm') goto yy53;
-yy691:
- YYDEBUG(691, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x1F) {
- if(yych <= 0x00) goto yy693;
- if(yych == 0x09) goto yy693;
+ }
+yy683:
+ YYDEBUG(683, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= 'L') {
+ if (yych == '.') goto yy688;
goto yy53;
} else {
- if(yych <= ' ') goto yy693;
- if(yych != '.') goto yy53;
+ if (yych <= 'M') goto yy689;
+ if (yych == 'P') goto yy737;
+ goto yy53;
}
- YYDEBUG(692, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x09) {
- if(yych <= 0x00) goto yy693;
- if(yych <= 0x08) goto yy53;
+ } else {
+ if (yych <= 'o') {
+ if (yych <= 'U') goto yy736;
+ if (yych == 'm') goto yy689;
+ goto yy53;
} else {
- if(yych != ' ') goto yy53;
+ if (yych <= 'p') goto yy737;
+ if (yych == 'u') goto yy736;
+ goto yy53;
}
-yy693:
- YYDEBUG(693, *YYCURSOR);
- ++YYCURSOR;
- YYDEBUG(694, *YYCURSOR);
+ }
+yy684:
+ YYDEBUG(684, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy731;
+ if (yych == 'c') goto yy731;
+ goto yy53;
+yy685:
+ YYDEBUG(685, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'O') goto yy717;
+ if (yych == 'o') goto yy717;
+ goto yy53;
+yy686:
+ YYDEBUG(686, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy693;
+ if (yych <= '9') goto yy695;
+ goto yy53;
+yy687:
+ YYDEBUG(687, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'L') {
+ if (yych != '.') goto yy53;
+ } else {
+ if (yych <= 'M') goto yy689;
+ if (yych == 'm') goto yy689;
+ goto yy53;
+ }
+yy688:
+ YYDEBUG(688, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy689;
+ if (yych != 'm') goto yy53;
+yy689:
+ YYDEBUG(689, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 0x1F) {
+ if (yych <= 0x00) goto yy691;
+ if (yych == '\t') goto yy691;
+ goto yy53;
+ } else {
+ if (yych <= ' ') goto yy691;
+ if (yych != '.') goto yy53;
+ }
+ YYDEBUG(690, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '\t') {
+ if (yych <= 0x00) goto yy691;
+ if (yych <= 0x08) goto yy53;
+ } else {
+ if (yych != ' ') goto yy53;
+ }
+yy691:
+ YYDEBUG(691, *YYCURSOR);
+ ++YYCURSOR;
+ YYDEBUG(692, *YYCURSOR);
#line 973 "ext/date/lib/parse_date.re"
- {
+ {
DEBUG_OUTPUT("timetiny12 | timeshort12 | timelong12");
TIMELIB_INIT;
TIMELIB_HAVE_TIME();
@@ -12931,21 +12891,21 @@ yy693:
TIMELIB_DEINIT;
return TIMELIB_TIME12;
}
-#line 12935 "ext/date/lib/parse_date.c"
-yy695:
- YYDEBUG(695, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy698;
- } else {
- if(yych <= '9') goto yy712;
- if(yych <= ':') goto yy698;
- }
-yy696:
- YYDEBUG(696, *YYCURSOR);
+#line 12895 "ext/date/lib/parse_date.c"
+yy693:
+ YYDEBUG(693, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy696;
+ } else {
+ if (yych <= '9') goto yy710;
+ if (yych <= ':') goto yy696;
+ }
+yy694:
+ YYDEBUG(694, *YYCURSOR);
#line 990 "ext/date/lib/parse_date.re"
- {
+ {
int tz_not_found;
DEBUG_OUTPUT("timeshort24 | timelong24 | iso8601long");
TIMELIB_INIT;
@@ -12969,276 +12929,276 @@ yy696:
TIMELIB_DEINIT;
return TIMELIB_TIME24_WITH_ZONE;
}
-#line 12973 "ext/date/lib/parse_date.c"
+#line 12933 "ext/date/lib/parse_date.c"
+yy695:
+ YYDEBUG(695, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy696;
+ if (yych != ':') goto yy694;
+yy696:
+ YYDEBUG(696, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy697;
+ if (yych <= '6') goto yy698;
+ if (yych <= '9') goto yy699;
+ goto yy53;
yy697:
- YYDEBUG(697, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy698;
- if(yych != ':') goto yy696;
+ YYDEBUG(697, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy700;
+ if (yych <= '/') goto yy694;
+ if (yych <= '9') goto yy703;
+ goto yy694;
yy698:
- YYDEBUG(698, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy699;
- if(yych <= '6') goto yy700;
- if(yych <= '9') goto yy701;
- goto yy53;
+ YYDEBUG(698, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy700;
+ if (yych == '0') goto yy703;
+ goto yy694;
yy699:
- YYDEBUG(699, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy702;
- if(yych <= '/') goto yy696;
- if(yych <= '9') goto yy705;
- goto yy696;
+ YYDEBUG(699, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych != '.') goto yy694;
yy700:
- YYDEBUG(700, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy702;
- if(yych == '0') goto yy705;
- goto yy696;
+ YYDEBUG(700, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
yy701:
- YYDEBUG(701, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych != '.') goto yy696;
-yy702:
- YYDEBUG(702, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
+ YYDEBUG(701, *YYCURSOR);
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ YYDEBUG(702, *YYCURSOR);
+ if (yych <= '/') goto yy694;
+ if (yych <= '9') goto yy701;
+ goto yy694;
yy703:
- YYDEBUG(703, *YYCURSOR);
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- YYDEBUG(704, *YYCURSOR);
- if(yych <= '/') goto yy696;
- if(yych <= '9') goto yy703;
- goto yy696;
-yy705:
- YYDEBUG(705, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= 0x1F) {
- if(yych != 0x09) goto yy696;
- } else {
- if(yych <= ' ') goto yy706;
- if(yych == '.') goto yy702;
- goto yy696;
- }
+ YYDEBUG(703, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= 0x1F) {
+ if (yych != '\t') goto yy694;
} else {
- if(yych <= '`') {
- if(yych <= 'A') goto yy708;
- if(yych == 'P') goto yy708;
- goto yy696;
- } else {
- if(yych <= 'a') goto yy708;
- if(yych == 'p') goto yy708;
- goto yy696;
- }
+ if (yych <= ' ') goto yy704;
+ if (yych == '.') goto yy700;
+ goto yy694;
}
-yy706:
- YYDEBUG(706, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
- yych = *YYCURSOR;
- YYDEBUG(707, *YYCURSOR);
- if(yych <= 'A') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy706;
- goto yy53;
- } else {
- if(yych <= ' ') goto yy706;
- if(yych <= '@') goto yy53;
- }
- } else {
- if(yych <= '`') {
- if(yych != 'P') goto yy53;
- } else {
- if(yych <= 'a') goto yy708;
- if(yych != 'p') goto yy53;
- }
- }
-yy708:
- YYDEBUG(708, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'L') {
- if(yych != '.') goto yy53;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'A') goto yy706;
+ if (yych == 'P') goto yy706;
+ goto yy694;
} else {
- if(yych <= 'M') goto yy710;
- if(yych == 'm') goto yy710;
- goto yy53;
+ if (yych <= 'a') goto yy706;
+ if (yych == 'p') goto yy706;
+ goto yy694;
}
- YYDEBUG(709, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy710;
- if(yych != 'm') goto yy53;
-yy710:
- YYDEBUG(710, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x1F) {
- if(yych <= 0x00) goto yy693;
- if(yych == 0x09) goto yy693;
+ }
+yy704:
+ YYDEBUG(704, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
+ yych = *YYCURSOR;
+ YYDEBUG(705, *YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy704;
goto yy53;
} else {
- if(yych <= ' ') goto yy693;
- if(yych != '.') goto yy53;
+ if (yych <= ' ') goto yy704;
+ if (yych <= '@') goto yy53;
}
- YYDEBUG(711, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x09) {
- if(yych <= 0x00) goto yy693;
- if(yych <= 0x08) goto yy53;
- goto yy693;
+ } else {
+ if (yych <= '`') {
+ if (yych != 'P') goto yy53;
} else {
- if(yych == ' ') goto yy693;
- goto yy53;
+ if (yych <= 'a') goto yy706;
+ if (yych != 'p') goto yy53;
}
-yy712:
- YYDEBUG(712, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ':') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy713;
- if(yych <= 0x1F) goto yy696;
- } else {
- if(yych == '.') goto yy698;
- if(yych <= '9') goto yy696;
- goto yy698;
- }
+ }
+yy706:
+ YYDEBUG(706, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'L') {
+ if (yych != '.') goto yy53;
+ } else {
+ if (yych <= 'M') goto yy708;
+ if (yych == 'm') goto yy708;
+ goto yy53;
+ }
+ YYDEBUG(707, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy708;
+ if (yych != 'm') goto yy53;
+yy708:
+ YYDEBUG(708, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 0x1F) {
+ if (yych <= 0x00) goto yy691;
+ if (yych == '\t') goto yy691;
+ goto yy53;
+ } else {
+ if (yych <= ' ') goto yy691;
+ if (yych != '.') goto yy53;
+ }
+ YYDEBUG(709, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '\t') {
+ if (yych <= 0x00) goto yy691;
+ if (yych <= 0x08) goto yy53;
+ goto yy691;
+ } else {
+ if (yych == ' ') goto yy691;
+ goto yy53;
+ }
+yy710:
+ YYDEBUG(710, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ':') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy711;
+ if (yych <= 0x1F) goto yy694;
+ } else {
+ if (yych == '.') goto yy696;
+ if (yych <= '9') goto yy694;
+ goto yy696;
+ }
+ } else {
+ if (yych <= 'P') {
+ if (yych == 'A') goto yy713;
+ if (yych <= 'O') goto yy694;
+ goto yy713;
} else {
- if(yych <= 'P') {
- if(yych == 'A') goto yy715;
- if(yych <= 'O') goto yy696;
- goto yy715;
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy694;
+ goto yy713;
} else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy696;
- goto yy715;
- } else {
- if(yych == 'p') goto yy715;
- goto yy696;
- }
+ if (yych == 'p') goto yy713;
+ goto yy694;
}
}
-yy713:
- YYDEBUG(713, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
- yych = *YYCURSOR;
- YYDEBUG(714, *YYCURSOR);
- if(yych <= 'A') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy713;
- goto yy53;
- } else {
- if(yych <= ' ') goto yy713;
- if(yych <= '@') goto yy53;
- }
+ }
+yy711:
+ YYDEBUG(711, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
+ yych = *YYCURSOR;
+ YYDEBUG(712, *YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy711;
+ goto yy53;
} else {
- if(yych <= '`') {
- if(yych != 'P') goto yy53;
- } else {
- if(yych <= 'a') goto yy715;
- if(yych != 'p') goto yy53;
- }
+ if (yych <= ' ') goto yy711;
+ if (yych <= '@') goto yy53;
}
-yy715:
- YYDEBUG(715, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'L') {
- if(yych != '.') goto yy53;
+ } else {
+ if (yych <= '`') {
+ if (yych != 'P') goto yy53;
} else {
- if(yych <= 'M') goto yy717;
- if(yych == 'm') goto yy717;
- goto yy53;
+ if (yych <= 'a') goto yy713;
+ if (yych != 'p') goto yy53;
}
- YYDEBUG(716, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy717;
- if(yych != 'm') goto yy53;
+ }
+yy713:
+ YYDEBUG(713, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'L') {
+ if (yych != '.') goto yy53;
+ } else {
+ if (yych <= 'M') goto yy715;
+ if (yych == 'm') goto yy715;
+ goto yy53;
+ }
+ YYDEBUG(714, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy715;
+ if (yych != 'm') goto yy53;
+yy715:
+ YYDEBUG(715, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 0x1F) {
+ if (yych <= 0x00) goto yy691;
+ if (yych == '\t') goto yy691;
+ goto yy53;
+ } else {
+ if (yych <= ' ') goto yy691;
+ if (yych != '.') goto yy53;
+ }
+ YYDEBUG(716, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '\t') {
+ if (yych <= 0x00) goto yy691;
+ if (yych <= 0x08) goto yy53;
+ goto yy691;
+ } else {
+ if (yych == ' ') goto yy691;
+ goto yy53;
+ }
yy717:
- YYDEBUG(717, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x1F) {
- if(yych <= 0x00) goto yy693;
- if(yych == 0x09) goto yy693;
- goto yy53;
- } else {
- if(yych <= ' ') goto yy693;
- if(yych != '.') goto yy53;
+ YYDEBUG(717, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'V') goto yy718;
+ if (yych != 'v') goto yy53;
+yy718:
+ YYDEBUG(718, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych != '\t') goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
}
- YYDEBUG(718, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 0x09) {
- if(yych <= 0x00) goto yy693;
- if(yych <= 0x08) goto yy53;
- goto yy693;
+ } else {
+ if (yych <= 'D') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych == ' ') goto yy693;
- goto yy53;
+ if (yych <= 'E') goto yy723;
+ if (yych == 'e') goto yy723;
+ goto yy679;
}
+ }
yy719:
- YYDEBUG(719, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'V') goto yy720;
- if(yych != 'v') goto yy53;
+ YYDEBUG(719, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
+ yych = *YYCURSOR;
yy720:
- YYDEBUG(720, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych != 0x09) goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- }
+ YYDEBUG(720, *YYCURSOR);
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy719;
+ if (yych <= 0x1F) goto yy53;
+ goto yy719;
+ } else {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy53;
+ goto yy719;
} else {
- if(yych <= 'D') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'E') goto yy725;
- if(yych == 'e') goto yy725;
- goto yy681;
- }
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
}
+ }
yy721:
- YYDEBUG(721, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
- yych = *YYCURSOR;
+ YYDEBUG(721, *YYCURSOR);
+ ++YYCURSOR;
+ if ((yych = *YYCURSOR) <= '/') goto yy722;
+ if (yych <= '9') goto yy728;
yy722:
- YYDEBUG(722, *YYCURSOR);
- if(yych <= ' ') {
- if(yych == 0x09) goto yy721;
- if(yych <= 0x1F) goto yy53;
- goto yy721;
- } else {
- if(yych <= '.') {
- if(yych <= ',') goto yy53;
- goto yy721;
- } else {
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- }
- }
-yy723:
- YYDEBUG(723, *YYCURSOR);
- ++YYCURSOR;
- if((yych = *YYCURSOR) <= '/') goto yy724;
- if(yych <= '9') goto yy730;
-yy724:
- YYDEBUG(724, *YYCURSOR);
-#line 1147 "ext/date/lib/parse_date.re"
- {
+ YYDEBUG(722, *YYCURSOR);
+#line 1148 "ext/date/lib/parse_date.re"
+ {
DEBUG_OUTPUT("datefull");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -13250,1414 +13210,1416 @@ yy724:
TIMELIB_DEINIT;
return TIMELIB_DATE_FULL;
}
-#line 13254 "ext/date/lib/parse_date.c"
+#line 13214 "ext/date/lib/parse_date.c"
+yy723:
+ YYDEBUG(723, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy724;
+ if (yych != 'm') goto yy53;
+yy724:
+ YYDEBUG(724, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy725;
+ if (yych != 'b') goto yy53;
yy725:
- YYDEBUG(725, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy726;
- if(yych != 'm') goto yy53;
+ YYDEBUG(725, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy726;
+ if (yych != 'e') goto yy53;
yy726:
- YYDEBUG(726, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy727;
- if(yych != 'b') goto yy53;
+ YYDEBUG(726, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy727;
+ if (yych != 'r') goto yy53;
yy727:
- YYDEBUG(727, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy728;
- if(yych != 'e') goto yy53;
+ YYDEBUG(727, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy719;
+ if (yych <= 0x1F) goto yy679;
+ goto yy719;
+ } else {
+ if (yych <= '.') {
+ if (yych <= ',') goto yy679;
+ goto yy719;
+ } else {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
+ }
+ }
yy728:
- YYDEBUG(728, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy729;
- if(yych != 'r') goto yy53;
+ YYDEBUG(728, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy722;
+ if (yych >= ':') goto yy722;
yy729:
- YYDEBUG(729, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ' ') {
- if(yych == 0x09) goto yy721;
- if(yych <= 0x1F) goto yy681;
- goto yy721;
+ YYDEBUG(729, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy722;
+ if (yych >= ':') goto yy722;
+ YYDEBUG(730, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy722;
+yy731:
+ YYDEBUG(731, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy732;
+ if (yych != 't') goto yy53;
+yy732:
+ YYDEBUG(732, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'N') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= '.') {
- if(yych <= ',') goto yy681;
- goto yy721;
- } else {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- }
+ if (yych <= 'O') goto yy733;
+ if (yych != 'o') goto yy679;
}
-yy730:
- YYDEBUG(730, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy724;
- if(yych >= ':') goto yy724;
-yy731:
- YYDEBUG(731, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy724;
- if(yych >= ':') goto yy724;
- YYDEBUG(732, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy724;
+ }
yy733:
- YYDEBUG(733, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy734;
- if(yych != 't') goto yy53;
+ YYDEBUG(733, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy734;
+ if (yych != 'b') goto yy53;
yy734:
- YYDEBUG(734, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- goto yy721;
- }
- } else {
- if(yych <= 'N') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'O') goto yy735;
- if(yych != 'o') goto yy681;
- }
- }
+ YYDEBUG(734, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy735;
+ if (yych != 'e') goto yy53;
yy735:
- YYDEBUG(735, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy736;
- if(yych != 'b') goto yy53;
+ YYDEBUG(735, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy727;
+ if (yych == 'r') goto yy727;
+ goto yy53;
yy736:
- YYDEBUG(736, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy737;
- if(yych != 'e') goto yy53;
+ YYDEBUG(736, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'G') goto yy740;
+ if (yych == 'g') goto yy740;
+ goto yy53;
yy737:
- YYDEBUG(737, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy729;
- if(yych == 'r') goto yy729;
- goto yy53;
+ YYDEBUG(737, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy738;
+ if (yych != 'r') goto yy53;
yy738:
- YYDEBUG(738, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'G') goto yy742;
- if(yych == 'g') goto yy742;
- goto yy53;
+ YYDEBUG(738, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
+ } else {
+ if (yych <= 'I') goto yy739;
+ if (yych != 'i') goto yy679;
+ }
+ }
yy739:
- YYDEBUG(739, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy740;
- if(yych != 'r') goto yy53;
+ YYDEBUG(739, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'L') goto yy727;
+ if (yych == 'l') goto yy727;
+ goto yy53;
yy740:
- YYDEBUG(740, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- goto yy721;
- }
+ YYDEBUG(740, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'T') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'H') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'I') goto yy741;
- if(yych != 'i') goto yy681;
- }
+ if (yych <= 'U') goto yy741;
+ if (yych != 'u') goto yy679;
}
+ }
yy741:
- YYDEBUG(741, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'L') goto yy729;
- if(yych == 'l') goto yy729;
- goto yy53;
+ YYDEBUG(741, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy742;
+ if (yych != 's') goto yy53;
yy742:
- YYDEBUG(742, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- goto yy721;
- }
+ YYDEBUG(742, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy727;
+ if (yych == 't') goto yy727;
+ goto yy53;
+yy743:
+ YYDEBUG(743, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych == 'L') goto yy750;
+ if (yych <= 'M') goto yy53;
+ goto yy749;
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'k') goto yy53;
+ goto yy750;
} else {
- if(yych <= 'T') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'U') goto yy743;
- if(yych != 'u') goto yy681;
- }
+ if (yych == 'n') goto yy749;
+ goto yy53;
}
-yy743:
- YYDEBUG(743, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy744;
- if(yych != 's') goto yy53;
+ }
yy744:
- YYDEBUG(744, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy729;
- if(yych == 't') goto yy729;
- goto yy53;
+ YYDEBUG(744, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy745;
+ if (yych != 'n') goto yy53;
yy745:
- YYDEBUG(745, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych == 'L') goto yy752;
- if(yych <= 'M') goto yy53;
- goto yy751;
- } else {
- if(yych <= 'l') {
- if(yych <= 'k') goto yy53;
- goto yy752;
- } else {
- if(yych == 'n') goto yy751;
- goto yy53;
- }
+ YYDEBUG(745, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ goto yy719;
}
-yy746:
- YYDEBUG(746, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy747;
- if(yych != 'n') goto yy53;
-yy747:
- YYDEBUG(747, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- goto yy721;
- }
+ } else {
+ if (yych <= 'T') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'T') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'U') goto yy748;
- if(yych != 'u') goto yy681;
- }
+ if (yych <= 'U') goto yy746;
+ if (yych != 'u') goto yy679;
}
+ }
+yy746:
+ YYDEBUG(746, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy747;
+ if (yych != 'a') goto yy53;
+yy747:
+ YYDEBUG(747, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy748;
+ if (yych != 'r') goto yy53;
yy748:
- YYDEBUG(748, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy749;
- if(yych != 'a') goto yy53;
+ YYDEBUG(748, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy727;
+ if (yych == 'y') goto yy727;
+ goto yy53;
yy749:
- YYDEBUG(749, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy750;
- if(yych != 'r') goto yy53;
+ YYDEBUG(749, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'D') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
+ } else {
+ if (yych <= 'E') goto yy727;
+ if (yych == 'e') goto yy727;
+ goto yy679;
+ }
+ }
yy750:
- YYDEBUG(750, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy729;
- if(yych == 'y') goto yy729;
- goto yy53;
+ YYDEBUG(750, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'X') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
+ } else {
+ if (yych <= 'Y') goto yy727;
+ if (yych == 'y') goto yy727;
+ goto yy679;
+ }
+ }
yy751:
- YYDEBUG(751, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- goto yy721;
- }
+ YYDEBUG(751, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy679;
+ goto yy719;
} else {
- if(yych <= 'D') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'E') goto yy729;
- if(yych == 'e') goto yy729;
- goto yy681;
- }
+ if (yych == ' ') goto yy719;
+ goto yy679;
}
-yy752:
- YYDEBUG(752, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- goto yy721;
- }
+ } else {
+ if (yych <= '9') {
+ if (yych <= '.') goto yy719;
+ if (yych <= '/') goto yy679;
+ goto yy721;
} else {
- if(yych <= 'X') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'Y') goto yy729;
- if(yych == 'y') goto yy729;
- goto yy681;
- }
+ if (yych == 'I') goto yy727;
+ goto yy679;
}
-yy753:
- YYDEBUG(753, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy681;
- goto yy721;
- } else {
- if(yych == ' ') goto yy721;
- goto yy681;
- }
+ }
+yy752:
+ YYDEBUG(752, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy679;
+ goto yy719;
} else {
- if(yych <= '9') {
- if(yych <= '.') goto yy721;
- if(yych <= '/') goto yy681;
- goto yy723;
- } else {
- if(yych == 'I') goto yy729;
- goto yy681;
- }
+ if (yych == ' ') goto yy719;
+ goto yy679;
}
-yy754:
- YYDEBUG(754, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy681;
- goto yy721;
- } else {
- if(yych == ' ') goto yy721;
- goto yy681;
- }
+ } else {
+ if (yych <= '9') {
+ if (yych <= '.') goto yy719;
+ if (yych <= '/') goto yy679;
+ goto yy721;
} else {
- if(yych <= '9') {
- if(yych <= '.') goto yy721;
- if(yych <= '/') goto yy681;
- goto yy723;
- } else {
- if(yych != 'I') goto yy681;
- }
+ if (yych != 'I') goto yy679;
}
- YYDEBUG(755, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy681;
- goto yy721;
- } else {
- if(yych == ' ') goto yy721;
- goto yy681;
- }
+ }
+ YYDEBUG(753, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy679;
+ goto yy719;
} else {
- if(yych <= '9') {
- if(yych <= '.') goto yy721;
- if(yych <= '/') goto yy681;
- goto yy723;
- } else {
- if(yych == 'I') goto yy729;
- goto yy681;
- }
+ if (yych == ' ') goto yy719;
+ goto yy679;
}
-yy756:
- YYDEBUG(756, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy681;
- goto yy721;
- } else {
- if(yych == ' ') goto yy721;
- goto yy681;
- }
+ } else {
+ if (yych <= '9') {
+ if (yych <= '.') goto yy719;
+ if (yych <= '/') goto yy679;
+ goto yy721;
} else {
- if(yych <= '9') {
- if(yych <= '.') goto yy721;
- if(yych <= '/') goto yy681;
- goto yy723;
- } else {
- if(yych == 'I') goto yy729;
- goto yy681;
- }
+ if (yych == 'I') goto yy727;
+ goto yy679;
}
-yy757:
- YYDEBUG(757, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ',') goto yy696;
- if(yych <= '-') goto yy790;
- goto yy791;
- } else {
- if(yych <= '/') goto yy696;
- if(yych <= '9') goto yy802;
- if(yych <= ':') goto yy698;
- goto yy696;
+ }
+yy754:
+ YYDEBUG(754, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy679;
+ goto yy719;
+ } else {
+ if (yych == ' ') goto yy719;
+ goto yy679;
}
-yy758:
- YYDEBUG(758, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= ',') goto yy696;
- if(yych <= '-') goto yy790;
- if(yych <= '.') goto yy791;
- goto yy696;
+ } else {
+ if (yych <= '9') {
+ if (yych <= '.') goto yy719;
+ if (yych <= '/') goto yy679;
+ goto yy721;
} else {
- if(yych <= '2') goto yy802;
- if(yych <= '9') goto yy712;
- if(yych <= ':') goto yy698;
- goto yy696;
+ if (yych == 'I') goto yy727;
+ goto yy679;
}
+ }
+yy755:
+ YYDEBUG(755, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ',') goto yy694;
+ if (yych <= '-') goto yy789;
+ goto yy788;
+ } else {
+ if (yych <= '/') goto yy694;
+ if (yych <= '9') goto yy801;
+ if (yych <= ':') goto yy696;
+ goto yy694;
+ }
+yy756:
+ YYDEBUG(756, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= ',') goto yy694;
+ if (yych <= '-') goto yy789;
+ if (yych <= '.') goto yy788;
+ goto yy694;
+ } else {
+ if (yych <= '2') goto yy801;
+ if (yych <= '9') goto yy710;
+ if (yych <= ':') goto yy696;
+ goto yy694;
+ }
+yy757:
+ YYDEBUG(757, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ',') goto yy694;
+ if (yych <= '-') goto yy789;
+ goto yy788;
+ } else {
+ if (yych <= '/') goto yy694;
+ if (yych <= '9') goto yy710;
+ if (yych <= ':') goto yy696;
+ goto yy694;
+ }
+yy758:
+ YYDEBUG(758, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ',') goto yy694;
+ if (yych <= '-') goto yy789;
+ goto yy788;
+ } else {
+ if (yych == ':') goto yy696;
+ goto yy694;
+ }
yy759:
- YYDEBUG(759, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ',') goto yy696;
- if(yych <= '-') goto yy790;
- goto yy791;
- } else {
- if(yych <= '/') goto yy696;
- if(yych <= '9') goto yy712;
- if(yych <= ':') goto yy698;
- goto yy696;
- }
+ YYDEBUG(759, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy782;
+ if (yych == 'e') goto yy782;
+ goto yy53;
yy760:
- YYDEBUG(760, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ',') goto yy696;
- if(yych <= '-') goto yy790;
- goto yy791;
- } else {
- if(yych == ':') goto yy698;
- goto yy696;
- }
+ YYDEBUG(760, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy779;
+ if (yych == 'a') goto yy779;
+ goto yy53;
yy761:
- YYDEBUG(761, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy784;
- if(yych == 'e') goto yy784;
- goto yy53;
+ YYDEBUG(761, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'P') goto yy737;
+ if (yych <= 'T') goto yy53;
+ goto yy736;
+ } else {
+ if (yych <= 'p') {
+ if (yych <= 'o') goto yy53;
+ goto yy737;
+ } else {
+ if (yych == 'u') goto yy736;
+ goto yy53;
+ }
+ }
yy762:
- YYDEBUG(762, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy781;
- if(yych == 'a') goto yy781;
- goto yy53;
+ YYDEBUG(762, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy772;
+ if (yych == 'e') goto yy772;
+ goto yy53;
yy763:
- YYDEBUG(763, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'P') goto yy739;
- if(yych <= 'T') goto yy53;
- goto yy738;
- } else {
- if(yych <= 'p') {
- if(yych <= 'o') goto yy53;
- goto yy739;
- } else {
- if(yych == 'u') goto yy738;
- goto yy53;
- }
- }
+ YYDEBUG(763, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy766;
+ if (yych == 'e') goto yy766;
+ goto yy53;
yy764:
- YYDEBUG(764, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy774;
- if(yych == 'e') goto yy774;
- goto yy53;
+ YYDEBUG(764, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 13) YYFILL(13);
+ yych = *YYCURSOR;
yy765:
- YYDEBUG(765, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy768;
- if(yych == 'e') goto yy768;
- goto yy53;
+ YYDEBUG(765, *YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t':
+ case ' ':
+ case '-':
+ case '.': goto yy764;
+ case 'A':
+ case 'a': goto yy761;
+ case 'D':
+ case 'd': goto yy763;
+ case 'F':
+ case 'f': goto yy759;
+ case 'I': goto yy678;
+ case 'J':
+ case 'j': goto yy682;
+ case 'M':
+ case 'm': goto yy760;
+ case 'N':
+ case 'n': goto yy685;
+ case 'O':
+ case 'o': goto yy684;
+ case 'S':
+ case 's': goto yy762;
+ case 'V': goto yy680;
+ case 'X': goto yy681;
+ default: goto yy53;
+ }
yy766:
- YYDEBUG(766, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 13) YYFILL(13);
- yych = *YYCURSOR;
+ YYDEBUG(766, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy767;
+ if (yych != 'c') goto yy53;
yy767:
- YYDEBUG(767, *YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09:
- case ' ':
- case '-':
- case '.': goto yy766;
- case 'A':
- case 'a': goto yy763;
- case 'D':
- case 'd': goto yy765;
- case 'F':
- case 'f': goto yy761;
- case 'I': goto yy680;
- case 'J':
- case 'j': goto yy684;
- case 'M':
- case 'm': goto yy762;
- case 'N':
- case 'n': goto yy687;
- case 'O':
- case 'o': goto yy686;
- case 'S':
- case 's': goto yy764;
- case 'V': goto yy682;
- case 'X': goto yy683;
- default: goto yy53;
+ YYDEBUG(767, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ goto yy719;
}
-yy768:
- YYDEBUG(768, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy769;
- if(yych != 'c') goto yy53;
-yy769:
- YYDEBUG(769, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- goto yy721;
- }
+ } else {
+ if (yych <= 'D') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'D') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'E') goto yy770;
- if(yych != 'e') goto yy681;
- }
+ if (yych <= 'E') goto yy768;
+ if (yych != 'e') goto yy679;
}
+ }
+yy768:
+ YYDEBUG(768, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy769;
+ if (yych != 'm') goto yy53;
+yy769:
+ YYDEBUG(769, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy770;
+ if (yych != 'b') goto yy53;
yy770:
- YYDEBUG(770, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy771;
- if(yych != 'm') goto yy53;
+ YYDEBUG(770, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy771;
+ if (yych != 'e') goto yy53;
yy771:
- YYDEBUG(771, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy772;
- if(yych != 'b') goto yy53;
+ YYDEBUG(771, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy727;
+ if (yych == 'r') goto yy727;
+ goto yy53;
yy772:
- YYDEBUG(772, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy773;
- if(yych != 'e') goto yy53;
+ YYDEBUG(772, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'P') goto yy773;
+ if (yych != 'p') goto yy53;
yy773:
- YYDEBUG(773, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy729;
- if(yych == 'r') goto yy729;
- goto yy53;
-yy774:
- YYDEBUG(774, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'P') goto yy775;
- if(yych != 'p') goto yy53;
-yy775:
- YYDEBUG(775, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- goto yy721;
- }
+ YYDEBUG(773, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'S') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'S') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'T') goto yy776;
- if(yych != 't') goto yy681;
- }
+ if (yych <= 'T') goto yy774;
+ if (yych != 't') goto yy679;
}
-yy776:
- YYDEBUG(776, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- goto yy721;
- }
+ }
+yy774:
+ YYDEBUG(774, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'D') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'D') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'E') goto yy777;
- if(yych != 'e') goto yy681;
- }
+ if (yych <= 'E') goto yy775;
+ if (yych != 'e') goto yy679;
}
+ }
+yy775:
+ YYDEBUG(775, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy776;
+ if (yych != 'm') goto yy53;
+yy776:
+ YYDEBUG(776, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy777;
+ if (yych != 'b') goto yy53;
yy777:
- YYDEBUG(777, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy778;
- if(yych != 'm') goto yy53;
+ YYDEBUG(777, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy778;
+ if (yych != 'e') goto yy53;
yy778:
- YYDEBUG(778, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy779;
- if(yych != 'b') goto yy53;
+ YYDEBUG(778, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy727;
+ if (yych == 'r') goto yy727;
+ goto yy53;
yy779:
- YYDEBUG(779, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy780;
- if(yych != 'e') goto yy53;
+ YYDEBUG(779, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Y') {
+ if (yych == 'R') goto yy780;
+ if (yych <= 'X') goto yy53;
+ goto yy727;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy53;
+ } else {
+ if (yych == 'y') goto yy727;
+ goto yy53;
+ }
+ }
yy780:
- YYDEBUG(780, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy729;
- if(yych == 'r') goto yy729;
- goto yy53;
-yy781:
- YYDEBUG(781, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Y') {
- if(yych == 'R') goto yy782;
- if(yych <= 'X') goto yy53;
- goto yy729;
+ YYDEBUG(780, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'B') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy53;
- } else {
- if(yych == 'y') goto yy729;
- goto yy53;
- }
+ if (yych <= 'C') goto yy781;
+ if (yych != 'c') goto yy679;
}
+ }
+yy781:
+ YYDEBUG(781, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'H') goto yy727;
+ if (yych == 'h') goto yy727;
+ goto yy53;
yy782:
- YYDEBUG(782, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- goto yy721;
- }
+ YYDEBUG(782, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy783;
+ if (yych != 'b') goto yy53;
+yy783:
+ YYDEBUG(783, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'Q') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'B') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'C') goto yy783;
- if(yych != 'c') goto yy681;
- }
+ if (yych <= 'R') goto yy784;
+ if (yych != 'r') goto yy679;
}
-yy783:
- YYDEBUG(783, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'H') goto yy729;
- if(yych == 'h') goto yy729;
- goto yy53;
+ }
yy784:
- YYDEBUG(784, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy785;
- if(yych != 'b') goto yy53;
+ YYDEBUG(784, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'U') goto yy785;
+ if (yych != 'u') goto yy53;
yy785:
- YYDEBUG(785, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- goto yy721;
- }
- } else {
- if(yych <= 'Q') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'R') goto yy786;
- if(yych != 'r') goto yy681;
- }
- }
+ YYDEBUG(785, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy786;
+ if (yych != 'a') goto yy53;
yy786:
- YYDEBUG(786, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'U') goto yy787;
- if(yych != 'u') goto yy53;
+ YYDEBUG(786, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy787;
+ if (yych != 'r') goto yy53;
yy787:
- YYDEBUG(787, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy788;
- if(yych != 'a') goto yy53;
+ YYDEBUG(787, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy727;
+ if (yych == 'y') goto yy727;
+ goto yy53;
yy788:
- YYDEBUG(788, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy789;
- if(yych != 'r') goto yy53;
+ YYDEBUG(788, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy795;
+ if (yych <= '6') goto yy796;
+ if (yych <= '9') goto yy797;
+ goto yy53;
yy789:
- YYDEBUG(789, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy729;
- if(yych == 'y') goto yy729;
- goto yy53;
-yy790:
- YYDEBUG(790, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy801;
- goto yy53;
+ YYDEBUG(789, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(790, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
yy791:
- YYDEBUG(791, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy792;
- if(yych <= '6') goto yy793;
- if(yych <= '9') goto yy794;
- goto yy53;
+ YYDEBUG(791, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
yy792:
- YYDEBUG(792, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy702;
- if(yych <= '/') goto yy696;
- if(yych <= '9') goto yy800;
- goto yy696;
-yy793:
- YYDEBUG(793, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy702;
- goto yy696;
- } else {
- if(yych <= '0') goto yy800;
- if(yych <= '9') goto yy795;
- goto yy696;
- }
-yy794:
- YYDEBUG(794, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy702;
- if(yych <= '/') goto yy696;
- if(yych >= ':') goto yy696;
-yy795:
- YYDEBUG(795, *YYCURSOR);
- yyaccept = 13;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') goto yy796;
- if(yych <= '9') goto yy797;
-yy796:
- YYDEBUG(796, *YYCURSOR);
-#line 1173 "ext/date/lib/parse_date.re"
- {
- DEBUG_OUTPUT("pointed date YY");
+ YYDEBUG(792, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(793, *YYCURSOR);
+ ++YYCURSOR;
+ YYDEBUG(794, *YYCURSOR);
+#line 1162 "ext/date/lib/parse_date.re"
+ {
+ DEBUG_OUTPUT("pointed date YYYY");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
s->time->d = timelib_get_nr((char **) &ptr, 2);
s->time->m = timelib_get_nr((char **) &ptr, 2);
- s->time->y = timelib_get_nr((char **) &ptr, 2);
- TIMELIB_PROCESS_YEAR(s->time->y);
+ s->time->y = timelib_get_nr((char **) &ptr, 4);
TIMELIB_DEINIT;
return TIMELIB_DATE_FULL_POINTED;
}
-#line 14022 "ext/date/lib/parse_date.c"
+#line 13962 "ext/date/lib/parse_date.c"
+yy795:
+ YYDEBUG(795, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy700;
+ if (yych <= '/') goto yy694;
+ if (yych <= '9') goto yy800;
+ goto yy694;
+yy796:
+ YYDEBUG(796, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy700;
+ goto yy694;
+ } else {
+ if (yych <= '0') goto yy800;
+ if (yych <= '9') goto yy798;
+ goto yy694;
+ }
yy797:
- YYDEBUG(797, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- YYDEBUG(798, *YYCURSOR);
- ++YYCURSOR;
- YYDEBUG(799, *YYCURSOR);
-#line 1161 "ext/date/lib/parse_date.re"
- {
- DEBUG_OUTPUT("pointed date YYYY");
+ YYDEBUG(797, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy700;
+ if (yych <= '/') goto yy694;
+ if (yych >= ':') goto yy694;
+yy798:
+ YYDEBUG(798, *YYCURSOR);
+ yyaccept = 13;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') goto yy799;
+ if (yych <= '9') goto yy792;
+yy799:
+ YYDEBUG(799, *YYCURSOR);
+#line 1174 "ext/date/lib/parse_date.re"
+ {
+ DEBUG_OUTPUT("pointed date YY");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
s->time->d = timelib_get_nr((char **) &ptr, 2);
s->time->m = timelib_get_nr((char **) &ptr, 2);
- s->time->y = timelib_get_nr((char **) &ptr, 4);
+ s->time->y = timelib_get_nr((char **) &ptr, 2);
+ TIMELIB_PROCESS_YEAR(s->time->y);
TIMELIB_DEINIT;
return TIMELIB_DATE_FULL_POINTED;
}
-#line 14042 "ext/date/lib/parse_date.c"
+#line 14010 "ext/date/lib/parse_date.c"
yy800:
- YYDEBUG(800, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy706;
- if(yych <= 0x1F) goto yy696;
- goto yy706;
- } else {
- if(yych == '.') goto yy702;
- if(yych <= '/') goto yy696;
- goto yy797;
- }
+ YYDEBUG(800, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy704;
+ if (yych <= 0x1F) goto yy694;
+ goto yy704;
+ } else {
+ if (yych == '.') goto yy700;
+ if (yych <= '/') goto yy694;
+ goto yy792;
+ }
+ } else {
+ if (yych <= 'P') {
+ if (yych == 'A') goto yy706;
+ if (yych <= 'O') goto yy694;
+ goto yy706;
} else {
- if(yych <= 'P') {
- if(yych == 'A') goto yy708;
- if(yych <= 'O') goto yy696;
- goto yy708;
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy694;
+ goto yy706;
} else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy696;
- goto yy708;
- } else {
- if(yych == 'p') goto yy708;
- goto yy696;
- }
+ if (yych == 'p') goto yy706;
+ goto yy694;
}
}
+ }
yy801:
- YYDEBUG(801, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy795;
- goto yy53;
-yy802:
- YYDEBUG(802, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ':') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy713;
- if(yych <= 0x1F) goto yy696;
- goto yy713;
- } else {
- if(yych <= '-') {
- if(yych <= ',') goto yy696;
- goto yy790;
- } else {
- if(yych <= '.') goto yy791;
- if(yych <= '9') goto yy696;
- goto yy698;
- }
+ YYDEBUG(801, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ':') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy711;
+ if (yych <= 0x1F) goto yy694;
+ goto yy711;
+ } else {
+ if (yych <= '-') {
+ if (yych <= ',') goto yy694;
+ goto yy789;
+ } else {
+ if (yych <= '.') goto yy788;
+ if (yych <= '9') goto yy694;
+ goto yy696;
}
+ }
+ } else {
+ if (yych <= 'P') {
+ if (yych == 'A') goto yy713;
+ if (yych <= 'O') goto yy694;
+ goto yy713;
} else {
- if(yych <= 'P') {
- if(yych == 'A') goto yy715;
- if(yych <= 'O') goto yy696;
- goto yy715;
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy694;
+ goto yy713;
} else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy696;
- goto yy715;
- } else {
- if(yych == 'p') goto yy715;
- goto yy696;
- }
+ if (yych == 'p') goto yy713;
+ goto yy694;
}
}
+ }
+yy802:
+ YYDEBUG(802, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '.') {
+ if (yych <= ',') goto yy53;
+ if (yych <= '-') goto yy841;
+ goto yy789;
+ } else {
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy804;
+ goto yy53;
+ }
yy803:
- YYDEBUG(803, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '.') {
- if(yych <= ',') goto yy53;
- if(yych <= '-') goto yy842;
- goto yy790;
- } else {
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy805;
- goto yy53;
- }
+ YYDEBUG(803, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '.') {
+ if (yych <= ',') goto yy53;
+ if (yych <= '-') goto yy841;
+ goto yy789;
+ } else {
+ if (yych <= '/') goto yy53;
+ if (yych >= '3') goto yy53;
+ }
yy804:
- YYDEBUG(804, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '.') {
- if(yych <= ',') goto yy53;
- if(yych <= '-') goto yy842;
- goto yy790;
- } else {
- if(yych <= '/') goto yy53;
- if(yych >= '3') goto yy53;
- }
+ YYDEBUG(804, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= ',') goto yy53;
+ if (yych <= '-') goto yy841;
+ if (yych <= '.') goto yy789;
+ goto yy53;
yy805:
- YYDEBUG(805, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= ',') goto yy53;
- if(yych <= '-') goto yy842;
- if(yych <= '.') goto yy790;
- goto yy53;
-yy806:
- YYDEBUG(806, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'A') goto yy838;
- if(yych <= 'T') goto yy53;
+ YYDEBUG(805, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'A') goto yy837;
+ if (yych <= 'T') goto yy53;
+ goto yy836;
+ } else {
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy53;
goto yy837;
} else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy53;
- goto yy838;
- } else {
- if(yych == 'u') goto yy837;
- goto yy53;
- }
+ if (yych == 'u') goto yy836;
+ goto yy53;
}
+ }
+yy806:
+ YYDEBUG(806, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy834;
+ if (yych == 'e') goto yy834;
+ goto yy53;
yy807:
- YYDEBUG(807, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy835;
- if(yych == 'e') goto yy835;
- goto yy53;
+ YYDEBUG(807, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy831;
+ if (yych == 'a') goto yy831;
+ goto yy53;
yy808:
- YYDEBUG(808, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy832;
- if(yych == 'a') goto yy832;
- goto yy53;
-yy809:
- YYDEBUG(809, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'P') goto yy829;
- if(yych <= 'T') goto yy53;
+ YYDEBUG(808, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'P') goto yy828;
+ if (yych <= 'T') goto yy53;
+ goto yy827;
+ } else {
+ if (yych <= 'p') {
+ if (yych <= 'o') goto yy53;
goto yy828;
} else {
- if(yych <= 'p') {
- if(yych <= 'o') goto yy53;
- goto yy829;
- } else {
- if(yych == 'u') goto yy828;
- goto yy53;
- }
+ if (yych == 'u') goto yy827;
+ goto yy53;
}
+ }
+yy809:
+ YYDEBUG(809, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy824;
+ if (yych == 'e') goto yy824;
+ goto yy53;
yy810:
- YYDEBUG(810, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy825;
- if(yych == 'e') goto yy825;
- goto yy53;
+ YYDEBUG(810, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy822;
+ if (yych == 'c') goto yy822;
+ goto yy53;
yy811:
- YYDEBUG(811, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy823;
- if(yych == 'c') goto yy823;
- goto yy53;
+ YYDEBUG(811, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'O') goto yy820;
+ if (yych == 'o') goto yy820;
+ goto yy53;
yy812:
- YYDEBUG(812, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'O') goto yy821;
- if(yych == 'o') goto yy821;
- goto yy53;
+ YYDEBUG(812, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy813;
+ if (yych != 'e') goto yy53;
yy813:
- YYDEBUG(813, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy814;
- if(yych != 'e') goto yy53;
+ YYDEBUG(813, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy814;
+ if (yych != 'c') goto yy53;
yy814:
- YYDEBUG(814, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy815;
- if(yych != 'c') goto yy53;
-yy815:
- YYDEBUG(815, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych >= '.') goto yy721;
- }
+ YYDEBUG(814, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych >= '.') goto yy719;
+ }
+ } else {
+ if (yych <= 'D') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'D') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'E') goto yy770;
- if(yych == 'e') goto yy770;
- goto yy681;
- }
+ if (yych <= 'E') goto yy768;
+ if (yych == 'e') goto yy768;
+ goto yy679;
}
+ }
+yy815:
+ YYDEBUG(815, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy720;
+ if (yych <= '0') goto yy816;
+ if (yych <= '2') goto yy817;
+ if (yych <= '3') goto yy818;
+ goto yy720;
yy816:
- YYDEBUG(816, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy722;
- if(yych <= '0') goto yy817;
- if(yych <= '2') goto yy818;
- if(yych <= '3') goto yy819;
- goto yy722;
+ YYDEBUG(816, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy722;
+ if (yych <= '9') goto yy819;
+ goto yy722;
yy817:
- YYDEBUG(817, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy724;
- if(yych <= '9') goto yy820;
- goto yy724;
+ YYDEBUG(817, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy722;
+ if (yych <= '9') goto yy819;
+ goto yy722;
yy818:
- YYDEBUG(818, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy724;
- if(yych <= '9') goto yy820;
- goto yy724;
+ YYDEBUG(818, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy722;
+ if (yych <= '1') goto yy819;
+ if (yych <= '9') goto yy728;
+ goto yy722;
yy819:
- YYDEBUG(819, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy724;
- if(yych <= '1') goto yy820;
- if(yych <= '9') goto yy730;
- goto yy724;
+ YYDEBUG(819, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy722;
+ if (yych <= '9') goto yy729;
+ goto yy722;
yy820:
- YYDEBUG(820, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy724;
- if(yych <= '9') goto yy731;
- goto yy724;
+ YYDEBUG(820, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'V') goto yy821;
+ if (yych != 'v') goto yy53;
yy821:
- YYDEBUG(821, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'V') goto yy822;
- if(yych != 'v') goto yy53;
-yy822:
- YYDEBUG(822, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '-') goto yy816;
- goto yy721;
- }
+ YYDEBUG(821, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '-') goto yy815;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'D') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'D') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'E') goto yy725;
- if(yych == 'e') goto yy725;
- goto yy681;
- }
+ if (yych <= 'E') goto yy723;
+ if (yych == 'e') goto yy723;
+ goto yy679;
}
+ }
+yy822:
+ YYDEBUG(822, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy823;
+ if (yych != 't') goto yy53;
yy823:
- YYDEBUG(823, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy824;
- if(yych != 't') goto yy53;
-yy824:
- YYDEBUG(824, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '-') goto yy816;
- goto yy721;
- }
+ YYDEBUG(823, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '-') goto yy815;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'N') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'N') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'O') goto yy735;
- if(yych == 'o') goto yy735;
- goto yy681;
- }
+ if (yych <= 'O') goto yy733;
+ if (yych == 'o') goto yy733;
+ goto yy679;
}
+ }
+yy824:
+ YYDEBUG(824, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'P') goto yy825;
+ if (yych != 'p') goto yy53;
yy825:
- YYDEBUG(825, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'P') goto yy826;
- if(yych != 'p') goto yy53;
-yy826:
- YYDEBUG(826, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '-') goto yy816;
- goto yy721;
- }
+ YYDEBUG(825, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '-') goto yy815;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'S') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'S') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'T') goto yy827;
- if(yych != 't') goto yy681;
- }
+ if (yych <= 'T') goto yy826;
+ if (yych != 't') goto yy679;
}
-yy827:
- YYDEBUG(827, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '-') goto yy816;
- goto yy721;
- }
+ }
+yy826:
+ YYDEBUG(826, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '-') goto yy815;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'D') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'D') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'E') goto yy777;
- if(yych == 'e') goto yy777;
- goto yy681;
- }
+ if (yych <= 'E') goto yy775;
+ if (yych == 'e') goto yy775;
+ goto yy679;
}
+ }
+yy827:
+ YYDEBUG(827, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'G') goto yy830;
+ if (yych == 'g') goto yy830;
+ goto yy53;
yy828:
- YYDEBUG(828, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'G') goto yy831;
- if(yych == 'g') goto yy831;
- goto yy53;
+ YYDEBUG(828, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy829;
+ if (yych != 'r') goto yy53;
yy829:
- YYDEBUG(829, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy830;
- if(yych != 'r') goto yy53;
+ YYDEBUG(829, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '-') goto yy815;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
+ } else {
+ if (yych <= 'I') goto yy739;
+ if (yych == 'i') goto yy739;
+ goto yy679;
+ }
+ }
yy830:
- YYDEBUG(830, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '-') goto yy816;
- goto yy721;
- }
+ YYDEBUG(830, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '-') goto yy815;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'T') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'H') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'I') goto yy741;
- if(yych == 'i') goto yy741;
- goto yy681;
- }
+ if (yych <= 'U') goto yy741;
+ if (yych == 'u') goto yy741;
+ goto yy679;
}
+ }
yy831:
- YYDEBUG(831, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '-') goto yy816;
- goto yy721;
- }
+ YYDEBUG(831, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Y') {
+ if (yych == 'R') goto yy832;
+ if (yych <= 'X') goto yy53;
+ goto yy833;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy53;
} else {
- if(yych <= 'T') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'U') goto yy743;
- if(yych == 'u') goto yy743;
- goto yy681;
- }
+ if (yych == 'y') goto yy833;
+ goto yy53;
}
+ }
yy832:
- YYDEBUG(832, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Y') {
- if(yych == 'R') goto yy833;
- if(yych <= 'X') goto yy53;
- goto yy834;
+ YYDEBUG(832, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '-') goto yy815;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'B') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy53;
- } else {
- if(yych == 'y') goto yy834;
- goto yy53;
- }
+ if (yych <= 'C') goto yy781;
+ if (yych == 'c') goto yy781;
+ goto yy679;
}
+ }
yy833:
- YYDEBUG(833, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '-') goto yy816;
- goto yy721;
- }
+ YYDEBUG(833, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= ',') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy679;
+ goto yy719;
} else {
- if(yych <= 'B') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'C') goto yy783;
- if(yych == 'c') goto yy783;
- goto yy681;
- }
+ if (yych == ' ') goto yy719;
+ goto yy679;
}
-yy834:
- YYDEBUG(834, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= ',') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy681;
- goto yy721;
- } else {
- if(yych == ' ') goto yy721;
- goto yy681;
- }
+ } else {
+ if (yych <= '.') {
+ if (yych <= '-') goto yy815;
+ goto yy719;
} else {
- if(yych <= '.') {
- if(yych <= '-') goto yy816;
- goto yy721;
- } else {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- }
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
}
+ }
+yy834:
+ YYDEBUG(834, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy835;
+ if (yych != 'b') goto yy53;
yy835:
- YYDEBUG(835, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy836;
- if(yych != 'b') goto yy53;
-yy836:
- YYDEBUG(836, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '-') goto yy816;
- goto yy721;
- }
+ YYDEBUG(835, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '-') goto yy815;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'Q') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'Q') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'R') goto yy786;
- if(yych == 'r') goto yy786;
- goto yy681;
- }
+ if (yych <= 'R') goto yy784;
+ if (yych == 'r') goto yy784;
+ goto yy679;
}
-yy837:
- YYDEBUG(837, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych == 'L') goto yy841;
- if(yych <= 'M') goto yy53;
+ }
+yy836:
+ YYDEBUG(836, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych == 'L') goto yy840;
+ if (yych <= 'M') goto yy53;
+ goto yy839;
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'k') goto yy53;
goto yy840;
} else {
- if(yych <= 'l') {
- if(yych <= 'k') goto yy53;
- goto yy841;
- } else {
- if(yych == 'n') goto yy840;
- goto yy53;
- }
+ if (yych == 'n') goto yy839;
+ goto yy53;
}
+ }
+yy837:
+ YYDEBUG(837, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy838;
+ if (yych != 'n') goto yy53;
yy838:
- YYDEBUG(838, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy839;
- if(yych != 'n') goto yy53;
+ YYDEBUG(838, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '-') goto yy815;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'T') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
+ } else {
+ if (yych <= 'U') goto yy746;
+ if (yych == 'u') goto yy746;
+ goto yy679;
+ }
+ }
yy839:
- YYDEBUG(839, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '-') goto yy816;
- goto yy721;
- }
+ YYDEBUG(839, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '-') goto yy815;
+ goto yy719;
+ }
+ } else {
+ if (yych <= 'D') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'T') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'U') goto yy748;
- if(yych == 'u') goto yy748;
- goto yy681;
- }
+ if (yych <= 'E') goto yy727;
+ if (yych == 'e') goto yy727;
+ goto yy679;
}
+ }
yy840:
- YYDEBUG(840, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '-') goto yy816;
- goto yy721;
- }
- } else {
- if(yych <= 'D') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'E') goto yy729;
- if(yych == 'e') goto yy729;
- goto yy681;
- }
+ YYDEBUG(840, *YYCURSOR);
+ yyaccept = 11;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= 0x1F) {
+ if (yych == '\t') goto yy719;
+ goto yy679;
+ } else {
+ if (yych <= ' ') goto yy719;
+ if (yych <= ',') goto yy679;
+ if (yych <= '-') goto yy815;
+ goto yy719;
}
-yy841:
- YYDEBUG(841, *YYCURSOR);
- yyaccept = 11;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= 0x1F) {
- if(yych == 0x09) goto yy721;
- goto yy681;
- } else {
- if(yych <= ' ') goto yy721;
- if(yych <= ',') goto yy681;
- if(yych <= '-') goto yy816;
- goto yy721;
- }
+ } else {
+ if (yych <= 'X') {
+ if (yych <= '/') goto yy679;
+ if (yych <= '9') goto yy721;
+ goto yy679;
} else {
- if(yych <= 'X') {
- if(yych <= '/') goto yy681;
- if(yych <= '9') goto yy723;
- goto yy681;
- } else {
- if(yych <= 'Y') goto yy729;
- if(yych == 'y') goto yy729;
- goto yy681;
- }
+ if (yych <= 'Y') goto yy727;
+ if (yych == 'y') goto yy727;
+ goto yy679;
}
+ }
+yy841:
+ YYDEBUG(841, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '2') goto yy842;
+ if (yych <= '3') goto yy844;
+ if (yych <= '9') goto yy845;
+ goto yy53;
yy842:
- YYDEBUG(842, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '2') goto yy843;
- if(yych <= '3') goto yy845;
- if(yych <= '9') goto yy846;
- goto yy53;
-yy843:
- YYDEBUG(843, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy844;
- if(yych <= '9') goto yy852;
- if(yych >= 'n') goto yy848;
+ YYDEBUG(842, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy843;
+ if (yych <= '9') goto yy851;
+ if (yych >= 'n') goto yy847;
+ } else {
+ if (yych <= 'r') {
+ if (yych >= 'r') goto yy848;
} else {
- if(yych <= 'r') {
- if(yych >= 'r') goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
}
-yy844:
- YYDEBUG(844, *YYCURSOR);
-#line 1134 "ext/date/lib/parse_date.re"
- {
+ }
+yy843:
+ YYDEBUG(843, *YYCURSOR);
+#line 1135 "ext/date/lib/parse_date.re"
+ {
DEBUG_OUTPUT("gnudateshort");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -14668,114 +14630,114 @@ yy844:
TIMELIB_DEINIT;
return TIMELIB_ISO_DATE;
}
-#line 14672 "ext/date/lib/parse_date.c"
-yy845:
- YYDEBUG(845, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '1') {
- if(yych <= '/') goto yy844;
- goto yy852;
- } else {
- if(yych <= '9') goto yy795;
- if(yych <= 'm') goto yy844;
- goto yy848;
- }
+#line 14634 "ext/date/lib/parse_date.c"
+yy844:
+ YYDEBUG(844, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '1') {
+ if (yych <= '/') goto yy843;
+ goto yy851;
+ } else {
+ if (yych <= '9') goto yy791;
+ if (yych <= 'm') goto yy843;
+ goto yy847;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
+ goto yy848;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
}
-yy846:
- YYDEBUG(846, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy844;
- if(yych <= '9') goto yy795;
- if(yych <= 'm') goto yy844;
+ }
+yy845:
+ YYDEBUG(845, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy843;
+ if (yych <= '9') goto yy791;
+ if (yych <= 'm') goto yy843;
+ goto yy847;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
goto yy848;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
}
+ }
+yy846:
+ YYDEBUG(846, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 't') goto yy850;
+ goto yy53;
yy847:
- YYDEBUG(847, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 't') goto yy851;
- goto yy53;
+ YYDEBUG(847, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'd') goto yy850;
+ goto yy53;
yy848:
- YYDEBUG(848, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'd') goto yy851;
- goto yy53;
+ YYDEBUG(848, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'd') goto yy850;
+ goto yy53;
yy849:
- YYDEBUG(849, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'd') goto yy851;
- goto yy53;
+ YYDEBUG(849, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != 'h') goto yy53;
yy850:
- YYDEBUG(850, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != 'h') goto yy53;
+ YYDEBUG(850, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy843;
yy851:
- YYDEBUG(851, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy844;
-yy852:
- YYDEBUG(852, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy844;
- if(yych <= '9') goto yy797;
- if(yych <= 'm') goto yy844;
+ YYDEBUG(851, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy843;
+ if (yych <= '9') goto yy792;
+ if (yych <= 'm') goto yy843;
+ goto yy847;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
goto yy848;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
}
-yy853:
- YYDEBUG(853, *YYCURSOR);
- yyaccept = 15;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') {
- if(yych >= '/') goto yy907;
- } else {
- if(yych <= '9') goto yy856;
- if(yych >= 'n') goto yy904;
- }
+ }
+yy852:
+ YYDEBUG(852, *YYCURSOR);
+ yyaccept = 15;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') {
+ if (yych >= '/') goto yy906;
} else {
- if(yych <= 'r') {
- if(yych >= 'r') goto yy905;
- } else {
- if(yych <= 's') goto yy903;
- if(yych <= 't') goto yy906;
- }
+ if (yych <= '9') goto yy855;
+ if (yych >= 'n') goto yy903;
}
-yy854:
- YYDEBUG(854, *YYCURSOR);
+ } else {
+ if (yych <= 'r') {
+ if (yych >= 'r') goto yy904;
+ } else {
+ if (yych <= 's') goto yy902;
+ if (yych <= 't') goto yy905;
+ }
+ }
+yy853:
+ YYDEBUG(853, *YYCURSOR);
#line 1082 "ext/date/lib/parse_date.re"
- {
+ {
DEBUG_OUTPUT("americanshort | american");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -14788,231 +14750,231 @@ yy854:
TIMELIB_DEINIT;
return TIMELIB_AMERICAN;
}
-#line 14792 "ext/date/lib/parse_date.c"
-yy855:
- YYDEBUG(855, *YYCURSOR);
- yyaccept = 15;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') {
- if(yych <= '.') goto yy854;
- goto yy907;
- } else {
- if(yych <= '1') goto yy856;
- if(yych <= 'm') goto yy854;
- goto yy904;
- }
+#line 14754 "ext/date/lib/parse_date.c"
+yy854:
+ YYDEBUG(854, *YYCURSOR);
+ yyaccept = 15;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') {
+ if (yych <= '.') goto yy853;
+ goto yy906;
+ } else {
+ if (yych <= '1') goto yy855;
+ if (yych <= 'm') goto yy853;
+ goto yy903;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy853;
+ goto yy904;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy854;
- goto yy905;
- } else {
- if(yych <= 's') goto yy903;
- if(yych <= 't') goto yy906;
- goto yy854;
- }
+ if (yych <= 's') goto yy902;
+ if (yych <= 't') goto yy905;
+ goto yy853;
}
-yy856:
- YYDEBUG(856, *YYCURSOR);
- yyaccept = 15;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych == '/') goto yy907;
- if(yych <= 'm') goto yy854;
+ }
+yy855:
+ YYDEBUG(855, *YYCURSOR);
+ yyaccept = 15;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych == '/') goto yy906;
+ if (yych <= 'm') goto yy853;
+ goto yy903;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy853;
goto yy904;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy854;
- goto yy905;
- } else {
- if(yych <= 's') goto yy903;
- if(yych <= 't') goto yy906;
- goto yy854;
- }
+ if (yych <= 's') goto yy902;
+ if (yych <= 't') goto yy905;
+ goto yy853;
}
-yy857:
- YYDEBUG(857, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'A') goto yy902;
- if(yych <= 'T') goto yy53;
+ }
+yy856:
+ YYDEBUG(856, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'A') goto yy901;
+ if (yych <= 'T') goto yy53;
+ goto yy900;
+ } else {
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy53;
goto yy901;
} else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy53;
- goto yy902;
- } else {
- if(yych == 'u') goto yy901;
- goto yy53;
- }
+ if (yych == 'u') goto yy900;
+ goto yy53;
}
+ }
+yy857:
+ YYDEBUG(857, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy899;
+ if (yych == 'e') goto yy899;
+ goto yy53;
yy858:
- YYDEBUG(858, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy900;
- if(yych == 'e') goto yy900;
- goto yy53;
+ YYDEBUG(858, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy898;
+ if (yych == 'a') goto yy898;
+ goto yy53;
yy859:
- YYDEBUG(859, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy899;
- if(yych == 'a') goto yy899;
- goto yy53;
-yy860:
- YYDEBUG(860, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'P') goto yy898;
- if(yych <= 'T') goto yy53;
+ YYDEBUG(859, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'P') goto yy897;
+ if (yych <= 'T') goto yy53;
+ goto yy896;
+ } else {
+ if (yych <= 'p') {
+ if (yych <= 'o') goto yy53;
goto yy897;
} else {
- if(yych <= 'p') {
- if(yych <= 'o') goto yy53;
- goto yy898;
- } else {
- if(yych == 'u') goto yy897;
- goto yy53;
- }
+ if (yych == 'u') goto yy896;
+ goto yy53;
}
+ }
+yy860:
+ YYDEBUG(860, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy894;
+ if (yych == 'e') goto yy894;
+ goto yy53;
yy861:
- YYDEBUG(861, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy895;
- if(yych == 'e') goto yy895;
- goto yy53;
+ YYDEBUG(861, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy893;
+ if (yych == 'c') goto yy893;
+ goto yy53;
yy862:
- YYDEBUG(862, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy894;
- if(yych == 'c') goto yy894;
- goto yy53;
+ YYDEBUG(862, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'O') goto yy892;
+ if (yych == 'o') goto yy892;
+ goto yy53;
yy863:
- YYDEBUG(863, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'O') goto yy893;
- if(yych == 'o') goto yy893;
- goto yy53;
+ YYDEBUG(863, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy864;
+ if (yych != 'e') goto yy53;
yy864:
- YYDEBUG(864, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy865;
- if(yych != 'e') goto yy53;
+ YYDEBUG(864, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy865;
+ if (yych != 'c') goto yy53;
yy865:
- YYDEBUG(865, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy866;
- if(yych != 'c') goto yy53;
+ YYDEBUG(865, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '/') goto yy53;
yy866:
- YYDEBUG(866, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '/') goto yy53;
-yy867:
- YYDEBUG(867, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- YYDEBUG(868, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- YYDEBUG(869, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- YYDEBUG(870, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- YYDEBUG(871, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ':') goto yy53;
- YYDEBUG(872, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '1') goto yy873;
- if(yych <= '2') goto yy874;
- goto yy53;
+ YYDEBUG(866, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(867, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(868, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(869, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(870, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ':') goto yy53;
+ YYDEBUG(871, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '1') goto yy872;
+ if (yych <= '2') goto yy873;
+ goto yy53;
+yy872:
+ YYDEBUG(872, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy874;
+ goto yy53;
yy873:
- YYDEBUG(873, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy875;
- goto yy53;
+ YYDEBUG(873, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '4') goto yy53;
yy874:
- YYDEBUG(874, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '4') goto yy53;
-yy875:
- YYDEBUG(875, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ':') goto yy53;
- YYDEBUG(876, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '6') goto yy53;
- YYDEBUG(877, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- YYDEBUG(878, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ':') goto yy53;
- YYDEBUG(879, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy880;
- if(yych <= '6') goto yy881;
- goto yy53;
+ YYDEBUG(874, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ':') goto yy53;
+ YYDEBUG(875, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '6') goto yy53;
+ YYDEBUG(876, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(877, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ':') goto yy53;
+ YYDEBUG(878, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy879;
+ if (yych <= '6') goto yy880;
+ goto yy53;
+yy879:
+ YYDEBUG(879, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy881;
+ goto yy53;
yy880:
- YYDEBUG(880, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy882;
- goto yy53;
+ YYDEBUG(880, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '0') goto yy53;
yy881:
- YYDEBUG(881, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '0') goto yy53;
+ YYDEBUG(881, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '\t') goto yy882;
+ if (yych != ' ') goto yy53;
yy882:
- YYDEBUG(882, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 0x09) goto yy883;
- if(yych != ' ') goto yy53;
-yy883:
- YYDEBUG(883, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 6) YYFILL(6);
- yych = *YYCURSOR;
- YYDEBUG(884, *YYCURSOR);
- if(yych <= ' ') {
- if(yych == 0x09) goto yy883;
- if(yych <= 0x1F) goto yy53;
- goto yy883;
- } else {
- if(yych <= '+') {
- if(yych <= '*') goto yy53;
- } else {
- if(yych != '-') goto yy53;
- }
- }
- YYDEBUG(885, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '1') goto yy886;
- if(yych <= '2') goto yy888;
- if(yych <= '9') goto yy889;
- goto yy53;
+ YYDEBUG(882, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 6) YYFILL(6);
+ yych = *YYCURSOR;
+ YYDEBUG(883, *YYCURSOR);
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy882;
+ if (yych <= 0x1F) goto yy53;
+ goto yy882;
+ } else {
+ if (yych <= '+') {
+ if (yych <= '*') goto yy53;
+ } else {
+ if (yych != '-') goto yy53;
+ }
+ }
+ YYDEBUG(884, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '1') goto yy885;
+ if (yych <= '2') goto yy887;
+ if (yych <= '9') goto yy888;
+ goto yy53;
+yy885:
+ YYDEBUG(885, *YYCURSOR);
+ ++YYCURSOR;
+ if ((yych = *YYCURSOR) <= '/') goto yy886;
+ if (yych <= '9') goto yy888;
+ if (yych <= ':') goto yy889;
yy886:
- YYDEBUG(886, *YYCURSOR);
- ++YYCURSOR;
- if((yych = *YYCURSOR) <= '/') goto yy887;
- if(yych <= '9') goto yy889;
- if(yych <= ':') goto yy890;
-yy887:
- YYDEBUG(887, *YYCURSOR);
-#line 1352 "ext/date/lib/parse_date.re"
- {
+ YYDEBUG(886, *YYCURSOR);
+#line 1353 "ext/date/lib/parse_date.re"
+ {
int tz_not_found;
DEBUG_OUTPUT("clf");
TIMELIB_INIT;
@@ -15031,503 +14993,551 @@ yy887:
TIMELIB_DEINIT;
return TIMELIB_CLF;
}
-#line 15035 "ext/date/lib/parse_date.c"
+#line 14997 "ext/date/lib/parse_date.c"
+yy887:
+ YYDEBUG(887, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '5') {
+ if (yych <= '/') goto yy886;
+ if (yych >= '4') goto yy890;
+ } else {
+ if (yych <= '9') goto yy891;
+ if (yych <= ':') goto yy889;
+ goto yy886;
+ }
yy888:
- YYDEBUG(888, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '5') {
- if(yych <= '/') goto yy887;
- if(yych >= '4') goto yy891;
- } else {
- if(yych <= '9') goto yy892;
- if(yych <= ':') goto yy890;
- goto yy887;
- }
+ YYDEBUG(888, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy886;
+ if (yych <= '5') goto yy890;
+ if (yych <= '9') goto yy891;
+ if (yych >= ';') goto yy886;
yy889:
- YYDEBUG(889, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy887;
- if(yych <= '5') goto yy891;
- if(yych <= '9') goto yy892;
- if(yych >= ';') goto yy887;
+ YYDEBUG(889, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy886;
+ if (yych <= '5') goto yy890;
+ if (yych <= '9') goto yy891;
+ goto yy886;
yy890:
- YYDEBUG(890, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy887;
- if(yych <= '5') goto yy891;
- if(yych <= '9') goto yy892;
- goto yy887;
+ YYDEBUG(890, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy886;
+ if (yych >= ':') goto yy886;
yy891:
- YYDEBUG(891, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy887;
- if(yych >= ':') goto yy887;
+ YYDEBUG(891, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy886;
yy892:
- YYDEBUG(892, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy887;
+ YYDEBUG(892, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'V') goto yy865;
+ if (yych == 'v') goto yy865;
+ goto yy53;
yy893:
- YYDEBUG(893, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'V') goto yy866;
- if(yych == 'v') goto yy866;
- goto yy53;
+ YYDEBUG(893, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy865;
+ if (yych == 't') goto yy865;
+ goto yy53;
yy894:
- YYDEBUG(894, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy866;
- if(yych == 't') goto yy866;
- goto yy53;
+ YYDEBUG(894, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'P') goto yy895;
+ if (yych != 'p') goto yy53;
yy895:
- YYDEBUG(895, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'P') goto yy896;
- if(yych != 'p') goto yy53;
+ YYDEBUG(895, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'S') {
+ if (yych == '/') goto yy866;
+ goto yy53;
+ } else {
+ if (yych <= 'T') goto yy865;
+ if (yych == 't') goto yy865;
+ goto yy53;
+ }
yy896:
- YYDEBUG(896, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'S') {
- if(yych == '/') goto yy867;
- goto yy53;
+ YYDEBUG(896, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'G') goto yy865;
+ if (yych == 'g') goto yy865;
+ goto yy53;
+yy897:
+ YYDEBUG(897, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy865;
+ if (yych == 'r') goto yy865;
+ goto yy53;
+yy898:
+ YYDEBUG(898, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Y') {
+ if (yych == 'R') goto yy865;
+ if (yych <= 'X') goto yy53;
+ goto yy865;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy53;
+ goto yy865;
} else {
- if(yych <= 'T') goto yy866;
- if(yych == 't') goto yy866;
+ if (yych == 'y') goto yy865;
goto yy53;
}
-yy897:
- YYDEBUG(897, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'G') goto yy866;
- if(yych == 'g') goto yy866;
- goto yy53;
-yy898:
- YYDEBUG(898, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy866;
- if(yych == 'r') goto yy866;
- goto yy53;
+ }
yy899:
- YYDEBUG(899, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Y') {
- if(yych == 'R') goto yy866;
- if(yych <= 'X') goto yy53;
- goto yy866;
- } else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy53;
- goto yy866;
- } else {
- if(yych == 'y') goto yy866;
- goto yy53;
- }
- }
+ YYDEBUG(899, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy865;
+ if (yych == 'b') goto yy865;
+ goto yy53;
yy900:
- YYDEBUG(900, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy866;
- if(yych == 'b') goto yy866;
- goto yy53;
-yy901:
- YYDEBUG(901, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych == 'L') goto yy866;
- if(yych <= 'M') goto yy53;
- goto yy866;
- } else {
- if(yych <= 'l') {
- if(yych <= 'k') goto yy53;
- goto yy866;
- } else {
- if(yych == 'n') goto yy866;
- goto yy53;
- }
+ YYDEBUG(900, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych == 'L') goto yy865;
+ if (yych <= 'M') goto yy53;
+ goto yy865;
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'k') goto yy53;
+ goto yy865;
+ } else {
+ if (yych == 'n') goto yy865;
+ goto yy53;
}
+ }
+yy901:
+ YYDEBUG(901, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy865;
+ if (yych == 'n') goto yy865;
+ goto yy53;
yy902:
- YYDEBUG(902, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy866;
- if(yych == 'n') goto yy866;
- goto yy53;
+ YYDEBUG(902, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 't') goto yy911;
+ goto yy53;
yy903:
- YYDEBUG(903, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 't') goto yy912;
- goto yy53;
+ YYDEBUG(903, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'd') goto yy911;
+ goto yy53;
yy904:
- YYDEBUG(904, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'd') goto yy912;
- goto yy53;
+ YYDEBUG(904, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'd') goto yy911;
+ goto yy53;
yy905:
- YYDEBUG(905, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'd') goto yy912;
- goto yy53;
+ YYDEBUG(905, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'h') goto yy911;
+ goto yy53;
yy906:
- YYDEBUG(906, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'h') goto yy912;
- goto yy53;
-yy907:
- YYDEBUG(907, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- YYDEBUG(908, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy854;
- if(yych >= ':') goto yy854;
- YYDEBUG(909, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy854;
- if(yych >= ':') goto yy854;
- YYDEBUG(910, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy854;
- if(yych >= ':') goto yy854;
- YYDEBUG(911, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy854;
+ YYDEBUG(906, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(907, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy853;
+ if (yych >= ':') goto yy853;
+ YYDEBUG(908, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy853;
+ if (yych >= ':') goto yy853;
+ YYDEBUG(909, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy853;
+ if (yych >= ':') goto yy853;
+ YYDEBUG(910, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy853;
+yy911:
+ YYDEBUG(911, *YYCURSOR);
+ yyaccept = 15;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '/') goto yy906;
+ goto yy853;
yy912:
- YYDEBUG(912, *YYCURSOR);
- yyaccept = 15;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '/') goto yy907;
- goto yy854;
+ YYDEBUG(912, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= ',') {
+ if (yych == '\t') goto yy914;
+ goto yy765;
+ } else {
+ if (yych <= '-') goto yy915;
+ if (yych <= '.') goto yy914;
+ if (yych >= '0') goto yy765;
+ }
yy913:
- YYDEBUG(913, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= ',') {
- if(yych == 0x09) goto yy915;
- goto yy767;
- } else {
- if(yych <= '.') goto yy915;
- if(yych >= '0') goto yy767;
- }
+ YYDEBUG(913, *YYCURSOR);
+ yych = *++YYCURSOR;
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case 'A':
+ case 'a': goto yy859;
+ case 'D':
+ case 'd': goto yy863;
+ case 'F':
+ case 'f': goto yy857;
+ case 'J':
+ case 'j': goto yy856;
+ case 'M':
+ case 'm': goto yy858;
+ case 'N':
+ case 'n': goto yy862;
+ case 'O':
+ case 'o': goto yy861;
+ case 'S':
+ case 's': goto yy860;
+ default: goto yy53;
+ }
yy914:
- YYDEBUG(914, *YYCURSOR);
- yych = *++YYCURSOR;
- YYDEBUG(-1, yych);
- switch(yych) {
- case 'A':
- case 'a': goto yy860;
- case 'D':
- case 'd': goto yy864;
- case 'F':
- case 'f': goto yy858;
- case 'J':
- case 'j': goto yy857;
- case 'M':
- case 'm': goto yy859;
- case 'N':
- case 'n': goto yy863;
- case 'O':
- case 'o': goto yy862;
- case 'S':
- case 's': goto yy861;
- default: goto yy53;
- }
+ YYDEBUG(914, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy765;
+ if (yych <= '0') goto yy919;
+ if (yych <= '1') goto yy920;
+ if (yych <= '9') goto yy921;
+ goto yy765;
yy915:
- YYDEBUG(915, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy767;
- if(yych <= '0') goto yy916;
- if(yych <= '1') goto yy917;
- if(yych <= '9') goto yy918;
- goto yy767;
+ YYDEBUG(915, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy765;
+ if (yych <= '0') goto yy916;
+ if (yych <= '1') goto yy917;
+ if (yych <= '9') goto yy918;
+ goto yy765;
yy916:
- YYDEBUG(916, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= ',') goto yy53;
- if(yych <= '.') goto yy790;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy918;
- goto yy53;
+ YYDEBUG(916, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= ',') goto yy53;
+ if (yych <= '.') goto yy789;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy918;
+ goto yy53;
yy917:
- YYDEBUG(917, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= ',') goto yy53;
- if(yych <= '.') goto yy790;
- if(yych <= '/') goto yy53;
- if(yych >= '3') goto yy53;
+ YYDEBUG(917, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= ',') goto yy53;
+ if (yych <= '.') goto yy789;
+ if (yych <= '/') goto yy53;
+ if (yych >= '3') goto yy53;
yy918:
- YYDEBUG(918, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= ',') goto yy53;
- if(yych <= '.') goto yy790;
- goto yy53;
+ YYDEBUG(918, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= ',') goto yy53;
+ if (yych <= '.') goto yy789;
+ goto yy53;
yy919:
- YYDEBUG(919, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '-') goto yy963;
- if(yych <= '/') goto yy57;
- if(yych <= '9') goto yy961;
- goto yy57;
+ YYDEBUG(919, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '.') {
+ if (yych <= ',') goto yy53;
+ if (yych <= '-') goto yy789;
+ goto yy922;
+ } else {
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy921;
+ goto yy53;
+ }
yy920:
- YYDEBUG(920, *YYCURSOR);
- yych = *++YYCURSOR;
- YYDEBUG(-1, yych);
- switch(yych) {
- case '0': goto yy929;
- case '1': goto yy930;
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy931;
- case 'A':
- case 'a': goto yy924;
- case 'D':
- case 'd': goto yy928;
- case 'F':
- case 'f': goto yy922;
- case 'J':
- case 'j': goto yy921;
- case 'M':
- case 'm': goto yy923;
- case 'N':
- case 'n': goto yy927;
- case 'O':
- case 'o': goto yy926;
- case 'S':
- case 's': goto yy925;
- default: goto yy53;
- }
+ YYDEBUG(920, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '.') {
+ if (yych <= ',') goto yy53;
+ if (yych <= '-') goto yy789;
+ goto yy922;
+ } else {
+ if (yych <= '/') goto yy53;
+ if (yych >= '3') goto yy53;
+ }
yy921:
- YYDEBUG(921, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'A') goto yy960;
- if(yych <= 'T') goto yy53;
- goto yy959;
- } else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy53;
- goto yy960;
- } else {
- if(yych == 'u') goto yy959;
- goto yy53;
- }
- }
+ YYDEBUG(921, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= ',') goto yy53;
+ if (yych <= '-') goto yy789;
+ if (yych >= '/') goto yy53;
yy922:
- YYDEBUG(922, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy958;
- if(yych == 'e') goto yy958;
- goto yy53;
-yy923:
- YYDEBUG(923, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy957;
- if(yych == 'a') goto yy957;
- goto yy53;
+ YYDEBUG(922, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(923, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy798;
+ goto yy53;
yy924:
- YYDEBUG(924, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'P') goto yy956;
- if(yych <= 'T') goto yy53;
- goto yy955;
- } else {
- if(yych <= 'p') {
- if(yych <= 'o') goto yy53;
- goto yy956;
- } else {
- if(yych == 'u') goto yy955;
- goto yy53;
- }
- }
+ YYDEBUG(924, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '-') goto yy968;
+ if (yych <= '/') goto yy57;
+ if (yych <= '9') goto yy966;
+ goto yy57;
yy925:
- YYDEBUG(925, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy953;
- if(yych == 'e') goto yy953;
- goto yy53;
+ YYDEBUG(925, *YYCURSOR);
+ yych = *++YYCURSOR;
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '0': goto yy934;
+ case '1': goto yy935;
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy936;
+ case 'A':
+ case 'a': goto yy929;
+ case 'D':
+ case 'd': goto yy933;
+ case 'F':
+ case 'f': goto yy927;
+ case 'J':
+ case 'j': goto yy926;
+ case 'M':
+ case 'm': goto yy928;
+ case 'N':
+ case 'n': goto yy932;
+ case 'O':
+ case 'o': goto yy931;
+ case 'S':
+ case 's': goto yy930;
+ default: goto yy53;
+ }
yy926:
- YYDEBUG(926, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy952;
- if(yych == 'c') goto yy952;
- goto yy53;
+ YYDEBUG(926, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'A') goto yy965;
+ if (yych <= 'T') goto yy53;
+ goto yy964;
+ } else {
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy53;
+ goto yy965;
+ } else {
+ if (yych == 'u') goto yy964;
+ goto yy53;
+ }
+ }
yy927:
- YYDEBUG(927, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'O') goto yy951;
- if(yych == 'o') goto yy951;
- goto yy53;
+ YYDEBUG(927, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy963;
+ if (yych == 'e') goto yy963;
+ goto yy53;
yy928:
- YYDEBUG(928, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy943;
- if(yych == 'e') goto yy943;
- goto yy53;
+ YYDEBUG(928, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy962;
+ if (yych == 'a') goto yy962;
+ goto yy53;
yy929:
- YYDEBUG(929, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '-') goto yy932;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy936;
- goto yy53;
+ YYDEBUG(929, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'P') goto yy961;
+ if (yych <= 'T') goto yy53;
+ goto yy960;
+ } else {
+ if (yych <= 'p') {
+ if (yych <= 'o') goto yy53;
+ goto yy961;
+ } else {
+ if (yych == 'u') goto yy960;
+ goto yy53;
+ }
+ }
yy930:
- YYDEBUG(930, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '-') goto yy932;
- if(yych <= '/') goto yy53;
- if(yych <= '2') goto yy936;
- goto yy53;
+ YYDEBUG(930, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy958;
+ if (yych == 'e') goto yy958;
+ goto yy53;
yy931:
- YYDEBUG(931, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '-') goto yy53;
+ YYDEBUG(931, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy957;
+ if (yych == 'c') goto yy957;
+ goto yy53;
yy932:
- YYDEBUG(932, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '2') goto yy933;
- if(yych <= '3') goto yy934;
- if(yych <= '9') goto yy935;
- goto yy53;
+ YYDEBUG(932, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'O') goto yy956;
+ if (yych == 'o') goto yy956;
+ goto yy53;
yy933:
- YYDEBUG(933, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy844;
- if(yych <= '9') goto yy935;
- if(yych <= 'm') goto yy844;
+ YYDEBUG(933, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy948;
+ if (yych == 'e') goto yy948;
+ goto yy53;
+yy934:
+ YYDEBUG(934, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '-') goto yy937;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy941;
+ goto yy53;
+yy935:
+ YYDEBUG(935, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '-') goto yy937;
+ if (yych <= '/') goto yy53;
+ if (yych <= '2') goto yy941;
+ goto yy53;
+yy936:
+ YYDEBUG(936, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '-') goto yy53;
+yy937:
+ YYDEBUG(937, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '2') goto yy938;
+ if (yych <= '3') goto yy939;
+ if (yych <= '9') goto yy940;
+ goto yy53;
+yy938:
+ YYDEBUG(938, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy843;
+ if (yych <= '9') goto yy940;
+ if (yych <= 'm') goto yy843;
+ goto yy847;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
goto yy848;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
}
-yy934:
- YYDEBUG(934, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy844;
- if(yych <= '1') goto yy935;
- if(yych <= 'm') goto yy844;
+ }
+yy939:
+ YYDEBUG(939, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy843;
+ if (yych <= '1') goto yy940;
+ if (yych <= 'm') goto yy843;
+ goto yy847;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
goto yy848;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
}
-yy935:
- YYDEBUG(935, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'q') {
- if(yych == 'n') goto yy848;
- goto yy844;
- } else {
- if(yych <= 'r') goto yy849;
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
-yy936:
- YYDEBUG(936, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '-') goto yy53;
- YYDEBUG(937, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '2') {
- if(yych <= '/') goto yy53;
- if(yych >= '1') goto yy939;
- } else {
- if(yych <= '3') goto yy940;
- if(yych <= '9') goto yy935;
- goto yy53;
- }
- YYDEBUG(938, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy844;
- if(yych <= '9') goto yy941;
- if(yych <= 'm') goto yy844;
+ }
+yy940:
+ YYDEBUG(940, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'q') {
+ if (yych == 'n') goto yy847;
+ goto yy843;
+ } else {
+ if (yych <= 'r') goto yy848;
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
+ }
+yy941:
+ YYDEBUG(941, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '-') goto yy53;
+ YYDEBUG(942, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '2') {
+ if (yych <= '/') goto yy53;
+ if (yych >= '1') goto yy944;
+ } else {
+ if (yych <= '3') goto yy945;
+ if (yych <= '9') goto yy940;
+ goto yy53;
+ }
+ YYDEBUG(943, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy843;
+ if (yych <= '9') goto yy946;
+ if (yych <= 'm') goto yy843;
+ goto yy847;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
goto yy848;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
}
-yy939:
- YYDEBUG(939, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy844;
- if(yych <= '9') goto yy941;
- if(yych <= 'm') goto yy844;
+ }
+yy944:
+ YYDEBUG(944, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy843;
+ if (yych <= '9') goto yy946;
+ if (yych <= 'm') goto yy843;
+ goto yy847;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
goto yy848;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
}
-yy940:
- YYDEBUG(940, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy844;
- if(yych <= '1') goto yy941;
- if(yych <= 'm') goto yy844;
+ }
+yy945:
+ YYDEBUG(945, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy843;
+ if (yych <= '1') goto yy946;
+ if (yych <= 'm') goto yy843;
+ goto yy847;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
goto yy848;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
}
-yy941:
- YYDEBUG(941, *YYCURSOR);
- yyaccept = 16;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'q') {
- if(yych == 'n') goto yy848;
- } else {
- if(yych <= 'r') goto yy849;
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- }
-yy942:
- YYDEBUG(942, *YYCURSOR);
+ }
+yy946:
+ YYDEBUG(946, *YYCURSOR);
+ yyaccept = 16;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'q') {
+ if (yych == 'n') goto yy847;
+ } else {
+ if (yych <= 'r') goto yy848;
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ }
+yy947:
+ YYDEBUG(947, *YYCURSOR);
#line 1109 "ext/date/lib/parse_date.re"
- {
+ {
DEBUG_OUTPUT("iso8601date2");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -15538,47 +15548,47 @@ yy942:
TIMELIB_DEINIT;
return TIMELIB_ISO_DATE;
}
-#line 15542 "ext/date/lib/parse_date.c"
-yy943:
- YYDEBUG(943, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy944;
- if(yych != 'c') goto yy53;
-yy944:
- YYDEBUG(944, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '-') goto yy53;
-yy945:
- YYDEBUG(945, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '0') goto yy946;
- if(yych <= '2') goto yy947;
- if(yych <= '3') goto yy948;
- goto yy53;
-yy946:
- YYDEBUG(946, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy949;
- goto yy53;
-yy947:
- YYDEBUG(947, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy949;
- goto yy53;
+#line 15552 "ext/date/lib/parse_date.c"
yy948:
- YYDEBUG(948, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '2') goto yy53;
+ YYDEBUG(948, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy949;
+ if (yych != 'c') goto yy53;
yy949:
- YYDEBUG(949, *YYCURSOR);
- ++YYCURSOR;
- YYDEBUG(950, *YYCURSOR);
-#line 1339 "ext/date/lib/parse_date.re"
- {
+ YYDEBUG(949, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '-') goto yy53;
+yy950:
+ YYDEBUG(950, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '0') goto yy951;
+ if (yych <= '2') goto yy952;
+ if (yych <= '3') goto yy953;
+ goto yy53;
+yy951:
+ YYDEBUG(951, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy954;
+ goto yy53;
+yy952:
+ YYDEBUG(952, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy954;
+ goto yy53;
+yy953:
+ YYDEBUG(953, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '2') goto yy53;
+yy954:
+ YYDEBUG(954, *YYCURSOR);
+ ++YYCURSOR;
+ YYDEBUG(955, *YYCURSOR);
+#line 1340 "ext/date/lib/parse_date.re"
+ {
DEBUG_OUTPUT("pgtextreverse");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -15589,305 +15599,305 @@ yy949:
TIMELIB_DEINIT;
return TIMELIB_PG_TEXT;
}
-#line 15593 "ext/date/lib/parse_date.c"
-yy951:
- YYDEBUG(951, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'V') goto yy944;
- if(yych == 'v') goto yy944;
- goto yy53;
-yy952:
- YYDEBUG(952, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy944;
- if(yych == 't') goto yy944;
- goto yy53;
-yy953:
- YYDEBUG(953, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'P') goto yy954;
- if(yych != 'p') goto yy53;
-yy954:
- YYDEBUG(954, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'S') {
- if(yych == '-') goto yy945;
- goto yy53;
- } else {
- if(yych <= 'T') goto yy944;
- if(yych == 't') goto yy944;
- goto yy53;
- }
-yy955:
- YYDEBUG(955, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'G') goto yy944;
- if(yych == 'g') goto yy944;
- goto yy53;
+#line 15603 "ext/date/lib/parse_date.c"
yy956:
- YYDEBUG(956, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy944;
- if(yych == 'r') goto yy944;
- goto yy53;
+ YYDEBUG(956, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'V') goto yy949;
+ if (yych == 'v') goto yy949;
+ goto yy53;
yy957:
- YYDEBUG(957, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Y') {
- if(yych == 'R') goto yy944;
- if(yych <= 'X') goto yy53;
- goto yy944;
- } else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy53;
- goto yy944;
- } else {
- if(yych == 'y') goto yy944;
- goto yy53;
- }
- }
+ YYDEBUG(957, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy949;
+ if (yych == 't') goto yy949;
+ goto yy53;
yy958:
- YYDEBUG(958, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy944;
- if(yych == 'b') goto yy944;
- goto yy53;
+ YYDEBUG(958, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'P') goto yy959;
+ if (yych != 'p') goto yy53;
yy959:
- YYDEBUG(959, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych == 'L') goto yy944;
- if(yych <= 'M') goto yy53;
- goto yy944;
- } else {
- if(yych <= 'l') {
- if(yych <= 'k') goto yy53;
- goto yy944;
- } else {
- if(yych == 'n') goto yy944;
- goto yy53;
- }
- }
-yy960:
- YYDEBUG(960, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy944;
- if(yych == 'n') goto yy944;
+ YYDEBUG(959, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'S') {
+ if (yych == '-') goto yy950;
goto yy53;
+ } else {
+ if (yych <= 'T') goto yy949;
+ if (yych == 't') goto yy949;
+ goto yy53;
+ }
+yy960:
+ YYDEBUG(960, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'G') goto yy949;
+ if (yych == 'g') goto yy949;
+ goto yy53;
yy961:
- YYDEBUG(961, *YYCURSOR);
- yyaccept = 17;
- yych = *(YYMARKER = ++YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09:
- case ' ':
- case 'A':
- case 'D':
- case 'F':
- case 'H':
- case 'I':
- case 'J':
- case 'M':
- case 'N':
- case 'O':
- case 'S':
- case 'T':
- case 'V':
- case 'X':
- case 'Y':
- case 'a':
- case 'd':
- case 'f':
- case 'h':
- case 'j':
- case 'm':
- case 'n':
- case 'o':
- case 's':
- case 't':
- case 'w':
- case 'y': goto yy969;
- case '-': goto yy966;
- case '.': goto yy970;
- case '/': goto yy967;
- case '0': goto yy983;
- case '1': goto yy984;
- case '2': goto yy986;
- case '3': goto yy987;
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy51;
- case ':': goto yy985;
- case 'W': goto yy988;
- default: goto yy962;
- }
+ YYDEBUG(961, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy949;
+ if (yych == 'r') goto yy949;
+ goto yy53;
yy962:
- YYDEBUG(962, *YYCURSOR);
-#line 1373 "ext/date/lib/parse_date.re"
- {
- DEBUG_OUTPUT("year4");
- TIMELIB_INIT;
- s->time->y = timelib_get_nr((char **) &ptr, 4);
- TIMELIB_DEINIT;
- return TIMELIB_CLF;
+ YYDEBUG(962, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Y') {
+ if (yych == 'R') goto yy949;
+ if (yych <= 'X') goto yy53;
+ goto yy949;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy53;
+ goto yy949;
+ } else {
+ if (yych == 'y') goto yy949;
+ goto yy53;
+ }
}
-#line 15739 "ext/date/lib/parse_date.c"
yy963:
- YYDEBUG(963, *YYCURSOR);
- yych = *++YYCURSOR;
- YYDEBUG(-1, yych);
- switch(yych) {
- case '0': goto yy964;
- case '1': goto yy965;
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy931;
- case 'A':
- case 'a': goto yy924;
- case 'D':
- case 'd': goto yy928;
- case 'F':
- case 'f': goto yy922;
- case 'J':
- case 'j': goto yy921;
- case 'M':
- case 'm': goto yy923;
- case 'N':
- case 'n': goto yy927;
- case 'O':
- case 'o': goto yy926;
- case 'S':
- case 's': goto yy925;
- default: goto yy53;
- }
+ YYDEBUG(963, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy949;
+ if (yych == 'b') goto yy949;
+ goto yy53;
yy964:
- YYDEBUG(964, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '-') goto yy932;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy931;
- goto yy53;
+ YYDEBUG(964, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych == 'L') goto yy949;
+ if (yych <= 'M') goto yy53;
+ goto yy949;
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'k') goto yy53;
+ goto yy949;
+ } else {
+ if (yych == 'n') goto yy949;
+ goto yy53;
+ }
+ }
yy965:
- YYDEBUG(965, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '-') goto yy932;
- if(yych <= '/') goto yy53;
- if(yych <= '2') goto yy931;
- goto yy53;
+ YYDEBUG(965, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy949;
+ if (yych == 'n') goto yy949;
+ goto yy53;
yy966:
- YYDEBUG(966, *YYCURSOR);
- yych = *++YYCURSOR;
- YYDEBUG(-1, yych);
- switch(yych) {
- case '0': goto yy1151;
- case '1': goto yy1153;
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy1154;
- case 'A':
- case 'a': goto yy1145;
- case 'D':
- case 'd': goto yy1149;
- case 'F':
- case 'f': goto yy1143;
- case 'J':
- case 'j': goto yy1142;
- case 'M':
- case 'm': goto yy1144;
- case 'N':
- case 'n': goto yy1148;
- case 'O':
- case 'o': goto yy1147;
- case 'S':
- case 's': goto yy1146;
- case 'W': goto yy1150;
- default: goto yy1117;
- }
+ YYDEBUG(966, *YYCURSOR);
+ yyaccept = 17;
+ yych = *(YYMARKER = ++YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t':
+ case ' ':
+ case 'A':
+ case 'D':
+ case 'F':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'S':
+ case 'T':
+ case 'V':
+ case 'X':
+ case 'Y':
+ case 'a':
+ case 'd':
+ case 'f':
+ case 'h':
+ case 'j':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 's':
+ case 't':
+ case 'w':
+ case 'y': goto yy974;
+ case '-': goto yy971;
+ case '.': goto yy975;
+ case '/': goto yy972;
+ case '0': goto yy988;
+ case '1': goto yy989;
+ case '2': goto yy991;
+ case '3': goto yy992;
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy51;
+ case ':': goto yy990;
+ case 'W': goto yy993;
+ default: goto yy967;
+ }
yy967:
- YYDEBUG(967, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '0') goto yy1125;
- if(yych <= '1') goto yy1126;
- if(yych <= '9') goto yy1127;
- goto yy53;
+ YYDEBUG(967, *YYCURSOR);
+#line 1374 "ext/date/lib/parse_date.re"
+ {
+ DEBUG_OUTPUT("year4");
+ TIMELIB_INIT;
+ s->time->y = timelib_get_nr((char **) &ptr, 4);
+ TIMELIB_DEINIT;
+ return TIMELIB_CLF;
+ }
+#line 15749 "ext/date/lib/parse_date.c"
yy968:
- YYDEBUG(968, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 11) YYFILL(11);
- yych = *YYCURSOR;
+ YYDEBUG(968, *YYCURSOR);
+ yych = *++YYCURSOR;
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '0': goto yy969;
+ case '1': goto yy970;
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy936;
+ case 'A':
+ case 'a': goto yy929;
+ case 'D':
+ case 'd': goto yy933;
+ case 'F':
+ case 'f': goto yy927;
+ case 'J':
+ case 'j': goto yy926;
+ case 'M':
+ case 'm': goto yy928;
+ case 'N':
+ case 'n': goto yy932;
+ case 'O':
+ case 'o': goto yy931;
+ case 'S':
+ case 's': goto yy930;
+ default: goto yy53;
+ }
yy969:
- YYDEBUG(969, *YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09:
- case ' ': goto yy968;
- case '-':
- case '.': goto yy1116;
- case 'A':
- case 'a': goto yy978;
- case 'D':
- case 'd': goto yy982;
- case 'F':
- case 'f': goto yy976;
- case 'H':
- case 'h': goto yy60;
- case 'I': goto yy971;
- case 'J':
- case 'j': goto yy975;
- case 'M':
- case 'm': goto yy977;
- case 'N':
- case 'n': goto yy981;
- case 'O':
- case 'o': goto yy980;
- case 'S':
- case 's': goto yy979;
- case 'T':
- case 't': goto yy65;
- case 'V': goto yy973;
- case 'W':
- case 'w': goto yy62;
- case 'X': goto yy974;
- case 'Y':
- case 'y': goto yy64;
- default: goto yy53;
- }
+ YYDEBUG(969, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '-') goto yy937;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy936;
+ goto yy53;
yy970:
- YYDEBUG(970, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy1117;
- if(yych <= '0') goto yy1109;
- if(yych <= '2') goto yy1110;
- if(yych <= '3') goto yy1111;
- goto yy1117;
+ YYDEBUG(970, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '-') goto yy937;
+ if (yych <= '/') goto yy53;
+ if (yych <= '2') goto yy936;
+ goto yy53;
yy971:
- YYDEBUG(971, *YYCURSOR);
- ++YYCURSOR;
- if((yych = *YYCURSOR) <= 'U') {
- if(yych == 'I') goto yy1108;
- } else {
- if(yych == 'W') goto yy972;
- if(yych <= 'X') goto yy1062;
- }
+ YYDEBUG(971, *YYCURSOR);
+ yych = *++YYCURSOR;
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '0': goto yy1156;
+ case '1': goto yy1158;
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy1159;
+ case 'A':
+ case 'a': goto yy1150;
+ case 'D':
+ case 'd': goto yy1154;
+ case 'F':
+ case 'f': goto yy1148;
+ case 'J':
+ case 'j': goto yy1147;
+ case 'M':
+ case 'm': goto yy1149;
+ case 'N':
+ case 'n': goto yy1153;
+ case 'O':
+ case 'o': goto yy1152;
+ case 'S':
+ case 's': goto yy1151;
+ case 'W': goto yy1155;
+ default: goto yy1122;
+ }
yy972:
- YYDEBUG(972, *YYCURSOR);
-#line 1199 "ext/date/lib/parse_date.re"
- {
+ YYDEBUG(972, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '0') goto yy1130;
+ if (yych <= '1') goto yy1131;
+ if (yych <= '9') goto yy1132;
+ goto yy53;
+yy973:
+ YYDEBUG(973, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 11) YYFILL(11);
+ yych = *YYCURSOR;
+yy974:
+ YYDEBUG(974, *YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t':
+ case ' ': goto yy973;
+ case '-':
+ case '.': goto yy1121;
+ case 'A':
+ case 'a': goto yy983;
+ case 'D':
+ case 'd': goto yy987;
+ case 'F':
+ case 'f': goto yy981;
+ case 'H':
+ case 'h': goto yy60;
+ case 'I': goto yy976;
+ case 'J':
+ case 'j': goto yy980;
+ case 'M':
+ case 'm': goto yy982;
+ case 'N':
+ case 'n': goto yy986;
+ case 'O':
+ case 'o': goto yy985;
+ case 'S':
+ case 's': goto yy984;
+ case 'T':
+ case 't': goto yy65;
+ case 'V': goto yy978;
+ case 'W':
+ case 'w': goto yy62;
+ case 'X': goto yy979;
+ case 'Y':
+ case 'y': goto yy64;
+ default: goto yy53;
+ }
+yy975:
+ YYDEBUG(975, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy1122;
+ if (yych <= '0') goto yy1114;
+ if (yych <= '2') goto yy1115;
+ if (yych <= '3') goto yy1116;
+ goto yy1122;
+yy976:
+ YYDEBUG(976, *YYCURSOR);
+ ++YYCURSOR;
+ if ((yych = *YYCURSOR) <= 'U') {
+ if (yych == 'I') goto yy1113;
+ } else {
+ if (yych == 'W') goto yy977;
+ if (yych <= 'X') goto yy1067;
+ }
+yy977:
+ YYDEBUG(977, *YYCURSOR);
+#line 1200 "ext/date/lib/parse_date.re"
+ {
DEBUG_OUTPUT("datenodayrev");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -15898,223 +15908,223 @@ yy972:
TIMELIB_DEINIT;
return TIMELIB_DATE_NO_DAY;
}
-#line 15902 "ext/date/lib/parse_date.c"
-yy973:
- YYDEBUG(973, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'I') goto yy1106;
- goto yy972;
-yy974:
- YYDEBUG(974, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'I') goto yy1105;
- goto yy972;
-yy975:
- YYDEBUG(975, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'A') goto yy1098;
- if(yych <= 'T') goto yy53;
- goto yy1097;
- } else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy53;
- goto yy1098;
- } else {
- if(yych == 'u') goto yy1097;
- goto yy53;
- }
- }
-yy976:
- YYDEBUG(976, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= 'N') {
- if(yych == 'E') goto yy1091;
- goto yy53;
- } else {
- if(yych <= 'O') goto yy83;
- if(yych <= 'Q') goto yy53;
- goto yy82;
- }
+#line 15912 "ext/date/lib/parse_date.c"
+yy978:
+ YYDEBUG(978, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'I') goto yy1111;
+ goto yy977;
+yy979:
+ YYDEBUG(979, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'I') goto yy1110;
+ goto yy977;
+yy980:
+ YYDEBUG(980, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'A') goto yy1103;
+ if (yych <= 'T') goto yy53;
+ goto yy1102;
+ } else {
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy53;
+ goto yy1103;
} else {
- if(yych <= 'n') {
- if(yych == 'e') goto yy1091;
- goto yy53;
- } else {
- if(yych <= 'o') goto yy83;
- if(yych == 'r') goto yy82;
- goto yy53;
- }
+ if (yych == 'u') goto yy1102;
+ goto yy53;
}
-yy977:
- YYDEBUG(977, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych <= 'H') {
- if(yych == 'A') goto yy1088;
- goto yy53;
- } else {
- if(yych <= 'I') goto yy114;
- if(yych <= 'N') goto yy53;
- goto yy113;
- }
+ }
+yy981:
+ YYDEBUG(981, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= 'N') {
+ if (yych == 'E') goto yy1096;
+ goto yy53;
} else {
- if(yych <= 'h') {
- if(yych == 'a') goto yy1088;
- goto yy53;
- } else {
- if(yych <= 'i') goto yy114;
- if(yych == 'o') goto yy113;
- goto yy53;
- }
- }
-yy978:
- YYDEBUG(978, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'P') goto yy1082;
- if(yych <= 'T') goto yy53;
- goto yy1081;
- } else {
- if(yych <= 'p') {
- if(yych <= 'o') goto yy53;
- goto yy1082;
- } else {
- if(yych == 'u') goto yy1081;
- goto yy53;
- }
+ if (yych <= 'O') goto yy83;
+ if (yych <= 'Q') goto yy53;
+ goto yy82;
}
-yy979:
- YYDEBUG(979, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= 'D') {
- if(yych == 'A') goto yy123;
- goto yy53;
- } else {
- if(yych <= 'E') goto yy1074;
- if(yych <= 'T') goto yy53;
- goto yy122;
- }
+ } else {
+ if (yych <= 'n') {
+ if (yych == 'e') goto yy1096;
+ goto yy53;
} else {
- if(yych <= 'd') {
- if(yych == 'a') goto yy123;
- goto yy53;
- } else {
- if(yych <= 'e') goto yy1074;
- if(yych == 'u') goto yy122;
- goto yy53;
- }
+ if (yych <= 'o') goto yy83;
+ if (yych == 'r') goto yy82;
+ goto yy53;
}
-yy980:
- YYDEBUG(980, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy1069;
- if(yych == 'c') goto yy1069;
- goto yy53;
-yy981:
- YYDEBUG(981, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'O') goto yy1063;
- if(yych == 'o') goto yy1063;
- goto yy53;
+ }
yy982:
- YYDEBUG(982, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych == 'A') goto yy110;
- if(yych <= 'D') goto yy53;
- goto yy1056;
- } else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy53;
- goto yy110;
- } else {
- if(yych == 'e') goto yy1056;
- goto yy53;
- }
+ YYDEBUG(982, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych <= 'H') {
+ if (yych == 'A') goto yy1093;
+ goto yy53;
+ } else {
+ if (yych <= 'I') goto yy114;
+ if (yych <= 'N') goto yy53;
+ goto yy113;
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych == 'a') goto yy1093;
+ goto yy53;
+ } else {
+ if (yych <= 'i') goto yy114;
+ if (yych == 'o') goto yy113;
+ goto yy53;
}
+ }
yy983:
- YYDEBUG(983, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '0') goto yy1053;
- if(yych <= '9') goto yy1054;
- goto yy57;
+ YYDEBUG(983, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'P') goto yy1087;
+ if (yych <= 'T') goto yy53;
+ goto yy1086;
+ } else {
+ if (yych <= 'p') {
+ if (yych <= 'o') goto yy53;
+ goto yy1087;
+ } else {
+ if (yych == 'u') goto yy1086;
+ goto yy53;
+ }
+ }
yy984:
- YYDEBUG(984, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '2') goto yy1022;
- if(yych <= '9') goto yy1001;
- goto yy57;
+ YYDEBUG(984, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= 'D') {
+ if (yych == 'A') goto yy123;
+ goto yy53;
+ } else {
+ if (yych <= 'E') goto yy1079;
+ if (yych <= 'T') goto yy53;
+ goto yy122;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych == 'a') goto yy123;
+ goto yy53;
+ } else {
+ if (yych <= 'e') goto yy1079;
+ if (yych == 'u') goto yy122;
+ goto yy53;
+ }
+ }
yy985:
- YYDEBUG(985, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '0') goto yy1002;
- if(yych <= '1') goto yy1003;
- goto yy53;
+ YYDEBUG(985, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy1074;
+ if (yych == 'c') goto yy1074;
+ goto yy53;
yy986:
- YYDEBUG(986, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '9') goto yy1001;
- goto yy57;
+ YYDEBUG(986, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'O') goto yy1068;
+ if (yych == 'o') goto yy1068;
+ goto yy53;
yy987:
- YYDEBUG(987, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '5') goto yy997;
- if(yych <= '6') goto yy998;
- if(yych <= '9') goto yy51;
- goto yy57;
-yy988:
- YYDEBUG(988, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '5') {
- if(yych <= '/') goto yy53;
- if(yych <= '0') goto yy989;
- if(yych <= '4') goto yy990;
- goto yy991;
- } else {
- if(yych <= 'E') {
- if(yych <= 'D') goto yy53;
- goto yy98;
- } else {
- if(yych == 'e') goto yy98;
- goto yy53;
- }
+ YYDEBUG(987, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych == 'A') goto yy110;
+ if (yych <= 'D') goto yy53;
+ goto yy1061;
+ } else {
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy53;
+ goto yy110;
+ } else {
+ if (yych == 'e') goto yy1061;
+ goto yy53;
}
+ }
+yy988:
+ YYDEBUG(988, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '0') goto yy1058;
+ if (yych <= '9') goto yy1059;
+ goto yy57;
yy989:
- YYDEBUG(989, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '0') goto yy53;
- if(yych <= '9') goto yy992;
- goto yy53;
+ YYDEBUG(989, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '2') goto yy1027;
+ if (yych <= '9') goto yy1006;
+ goto yy57;
yy990:
- YYDEBUG(990, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy992;
- goto yy53;
+ YYDEBUG(990, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '0') goto yy1007;
+ if (yych <= '1') goto yy1008;
+ goto yy53;
yy991:
- YYDEBUG(991, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '4') goto yy53;
+ YYDEBUG(991, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '9') goto yy1006;
+ goto yy57;
yy992:
- YYDEBUG(992, *YYCURSOR);
- yyaccept = 18;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '-') goto yy994;
- if(yych <= '/') goto yy993;
- if(yych <= '7') goto yy995;
+ YYDEBUG(992, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '5') goto yy1002;
+ if (yych <= '6') goto yy1003;
+ if (yych <= '9') goto yy51;
+ goto yy57;
yy993:
- YYDEBUG(993, *YYCURSOR);
-#line 1307 "ext/date/lib/parse_date.re"
- {
+ YYDEBUG(993, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '5') {
+ if (yych <= '/') goto yy53;
+ if (yych <= '0') goto yy994;
+ if (yych <= '4') goto yy995;
+ goto yy996;
+ } else {
+ if (yych <= 'E') {
+ if (yych <= 'D') goto yy53;
+ goto yy98;
+ } else {
+ if (yych == 'e') goto yy98;
+ goto yy53;
+ }
+ }
+yy994:
+ YYDEBUG(994, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '0') goto yy53;
+ if (yych <= '9') goto yy997;
+ goto yy53;
+yy995:
+ YYDEBUG(995, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy997;
+ goto yy53;
+yy996:
+ YYDEBUG(996, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '4') goto yy53;
+yy997:
+ YYDEBUG(997, *YYCURSOR);
+ yyaccept = 18;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '-') goto yy999;
+ if (yych <= '/') goto yy998;
+ if (yych <= '7') goto yy1000;
+yy998:
+ YYDEBUG(998, *YYCURSOR);
+#line 1308 "ext/date/lib/parse_date.re"
+ {
timelib_sll w, d;
DEBUG_OUTPUT("isoweek");
TIMELIB_INIT;
@@ -16131,18 +16141,18 @@ yy993:
TIMELIB_DEINIT;
return TIMELIB_ISO_WEEK;
}
-#line 16135 "ext/date/lib/parse_date.c"
-yy994:
- YYDEBUG(994, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '8') goto yy53;
-yy995:
- YYDEBUG(995, *YYCURSOR);
- ++YYCURSOR;
- YYDEBUG(996, *YYCURSOR);
-#line 1288 "ext/date/lib/parse_date.re"
- {
+#line 16145 "ext/date/lib/parse_date.c"
+yy999:
+ YYDEBUG(999, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '8') goto yy53;
+yy1000:
+ YYDEBUG(1000, *YYCURSOR);
+ ++YYCURSOR;
+ YYDEBUG(1001, *YYCURSOR);
+#line 1289 "ext/date/lib/parse_date.re"
+ {
timelib_sll w, d;
DEBUG_OUTPUT("isoweekday");
TIMELIB_INIT;
@@ -16159,72 +16169,72 @@ yy995:
TIMELIB_DEINIT;
return TIMELIB_ISO_WEEK;
}
-#line 16163 "ext/date/lib/parse_date.c"
-yy997:
- YYDEBUG(997, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '9') goto yy999;
- goto yy57;
-yy998:
- YYDEBUG(998, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '6') goto yy999;
- if(yych <= '9') goto yy51;
- goto yy57;
-yy999:
- YYDEBUG(999, *YYCURSOR);
- yyaccept = 19;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yybm[0+yych] & 4) {
- goto yy51;
- }
- if(yych <= 'W') {
- if(yych <= 'F') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych >= ' ') goto yy57;
- } else {
- if(yych == 'D') goto yy57;
- if(yych >= 'F') goto yy57;
- }
+#line 16173 "ext/date/lib/parse_date.c"
+yy1002:
+ YYDEBUG(1002, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '9') goto yy1004;
+ goto yy57;
+yy1003:
+ YYDEBUG(1003, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '6') goto yy1004;
+ if (yych <= '9') goto yy51;
+ goto yy57;
+yy1004:
+ YYDEBUG(1004, *YYCURSOR);
+ yyaccept = 19;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yybm[0+yych] & 4) {
+ goto yy51;
+ }
+ if (yych <= 'W') {
+ if (yych <= 'F') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych >= ' ') goto yy57;
} else {
- if(yych <= 'M') {
- if(yych == 'H') goto yy57;
- if(yych >= 'M') goto yy57;
- } else {
- if(yych <= 'R') goto yy1000;
- if(yych <= 'T') goto yy57;
- if(yych >= 'W') goto yy57;
- }
+ if (yych == 'D') goto yy57;
+ if (yych >= 'F') goto yy57;
}
} else {
- if(yych <= 'h') {
- if(yych <= 'd') {
- if(yych == 'Y') goto yy57;
- if(yych >= 'd') goto yy57;
- } else {
- if(yych == 'f') goto yy57;
- if(yych >= 'h') goto yy57;
- }
+ if (yych <= 'M') {
+ if (yych == 'H') goto yy57;
+ if (yych >= 'M') goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych >= 's') goto yy57;
+ if (yych <= 'R') goto yy1005;
+ if (yych <= 'T') goto yy57;
+ if (yych >= 'W') goto yy57;
+ }
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'd') {
+ if (yych == 'Y') goto yy57;
+ if (yych >= 'd') goto yy57;
+ } else {
+ if (yych == 'f') goto yy57;
+ if (yych >= 'h') goto yy57;
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych >= 's') goto yy57;
+ } else {
+ if (yych <= 'w') {
+ if (yych >= 'w') goto yy57;
} else {
- if(yych <= 'w') {
- if(yych >= 'w') goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- }
+ if (yych == 'y') goto yy57;
}
}
}
-yy1000:
- YYDEBUG(1000, *YYCURSOR);
-#line 1275 "ext/date/lib/parse_date.re"
- {
+ }
+yy1005:
+ YYDEBUG(1005, *YYCURSOR);
+#line 1276 "ext/date/lib/parse_date.re"
+ {
DEBUG_OUTPUT("pgydotd");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -16235,111 +16245,111 @@ yy1000:
TIMELIB_DEINIT;
return TIMELIB_PG_YEARDAY;
}
-#line 16239 "ext/date/lib/parse_date.c"
-yy1001:
- YYDEBUG(1001, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '9') goto yy999;
- goto yy57;
-yy1002:
- YYDEBUG(1002, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1004;
- goto yy53;
-yy1003:
- YYDEBUG(1003, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '3') goto yy53;
-yy1004:
- YYDEBUG(1004, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ':') goto yy53;
- YYDEBUG(1005, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '0') goto yy1006;
- if(yych <= '2') goto yy1007;
- if(yych <= '3') goto yy1008;
- goto yy53;
+#line 16249 "ext/date/lib/parse_date.c"
yy1006:
- YYDEBUG(1006, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1009;
- goto yy53;
+ YYDEBUG(1006, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '9') goto yy1004;
+ goto yy57;
yy1007:
- YYDEBUG(1007, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1009;
- goto yy53;
+ YYDEBUG(1007, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1009;
+ goto yy53;
yy1008:
- YYDEBUG(1008, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '2') goto yy53;
+ YYDEBUG(1008, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '3') goto yy53;
yy1009:
- YYDEBUG(1009, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ' ') goto yy53;
- YYDEBUG(1010, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '1') goto yy1011;
- if(yych <= '2') goto yy1012;
- goto yy53;
+ YYDEBUG(1009, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ':') goto yy53;
+ YYDEBUG(1010, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '0') goto yy1011;
+ if (yych <= '2') goto yy1012;
+ if (yych <= '3') goto yy1013;
+ goto yy53;
yy1011:
- YYDEBUG(1011, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1013;
- goto yy53;
+ YYDEBUG(1011, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1014;
+ goto yy53;
yy1012:
- YYDEBUG(1012, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '4') goto yy53;
+ YYDEBUG(1012, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1014;
+ goto yy53;
yy1013:
- YYDEBUG(1013, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ':') goto yy53;
- YYDEBUG(1014, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '6') goto yy53;
- YYDEBUG(1015, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- YYDEBUG(1016, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ':') goto yy53;
- YYDEBUG(1017, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1018;
- if(yych <= '6') goto yy1019;
- goto yy53;
+ YYDEBUG(1013, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '2') goto yy53;
+yy1014:
+ YYDEBUG(1014, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ' ') goto yy53;
+ YYDEBUG(1015, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '1') goto yy1016;
+ if (yych <= '2') goto yy1017;
+ goto yy53;
+yy1016:
+ YYDEBUG(1016, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1018;
+ goto yy53;
+yy1017:
+ YYDEBUG(1017, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '4') goto yy53;
yy1018:
- YYDEBUG(1018, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1020;
- goto yy53;
-yy1019:
- YYDEBUG(1019, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '0') goto yy53;
-yy1020:
- YYDEBUG(1020, *YYCURSOR);
- ++YYCURSOR;
-yy1021:
- YYDEBUG(1021, *YYCURSOR);
-#line 1249 "ext/date/lib/parse_date.re"
- {
+ YYDEBUG(1018, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ':') goto yy53;
+ YYDEBUG(1019, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '6') goto yy53;
+ YYDEBUG(1020, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(1021, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ':') goto yy53;
+ YYDEBUG(1022, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1023;
+ if (yych <= '6') goto yy1024;
+ goto yy53;
+yy1023:
+ YYDEBUG(1023, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1025;
+ goto yy53;
+yy1024:
+ YYDEBUG(1024, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '0') goto yy53;
+yy1025:
+ YYDEBUG(1025, *YYCURSOR);
+ ++YYCURSOR;
+yy1026:
+ YYDEBUG(1026, *YYCURSOR);
+#line 1250 "ext/date/lib/parse_date.re"
+ {
int tz_not_found;
DEBUG_OUTPUT("xmlrpc | xmlrpcnocolon | soap | wddx | exif");
TIMELIB_INIT;
@@ -16363,270 +16373,270 @@ yy1021:
TIMELIB_DEINIT;
return TIMELIB_XMLRPC_SOAP;
}
-#line 16367 "ext/date/lib/parse_date.c"
-yy1022:
- YYDEBUG(1022, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '2') {
- if(yych <= '/') goto yy57;
- if(yych >= '1') goto yy1024;
- } else {
- if(yych <= '3') goto yy1025;
- if(yych <= '9') goto yy999;
- goto yy57;
- }
-yy1023:
- YYDEBUG(1023, *YYCURSOR);
- yyaccept = 19;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy1000;
+#line 16377 "ext/date/lib/parse_date.c"
+yy1027:
+ YYDEBUG(1027, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '2') {
+ if (yych <= '/') goto yy57;
+ if (yych >= '1') goto yy1029;
+ } else {
+ if (yych <= '3') goto yy1030;
+ if (yych <= '9') goto yy1004;
+ goto yy57;
+ }
+yy1028:
+ YYDEBUG(1028, *YYCURSOR);
+ yyaccept = 19;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy1005;
+ goto yy57;
+ } else {
+ if (yych <= '/') goto yy1005;
+ if (yych <= '9') goto yy1031;
+ if (yych <= 'C') goto yy1005;
+ goto yy57;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy1005;
+ goto yy57;
+ } else {
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy1005;
goto yy57;
} else {
- if(yych <= '/') goto yy1000;
- if(yych <= '9') goto yy1026;
- if(yych <= 'C') goto yy1000;
- goto yy57;
+ if (yych <= 'R') goto yy1005;
+ if (yych <= 'T') goto yy57;
+ goto yy1005;
}
+ }
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy1005;
+ if (yych <= 'Y') goto yy57;
+ goto yy1005;
} else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy1000;
- goto yy57;
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
+ goto yy1005;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy1000;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy1000;
- if(yych <= 'T') goto yy57;
- goto yy1000;
- }
+ if (yych == 'g') goto yy1005;
+ goto yy57;
}
}
} else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy1000;
- if(yych <= 'Y') goto yy57;
- goto yy1000;
- } else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy1000;
- } else {
- if(yych == 'g') goto yy1000;
- goto yy57;
- }
- }
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy1005;
+ goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy1000;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy1005;
goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy1000;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy1000;
- }
+ if (yych == 'y') goto yy57;
+ goto yy1005;
}
}
}
-yy1024:
- YYDEBUG(1024, *YYCURSOR);
- yyaccept = 19;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy1000;
+ }
+yy1029:
+ YYDEBUG(1029, *YYCURSOR);
+ yyaccept = 19;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy1005;
+ goto yy57;
+ } else {
+ if (yych <= '/') goto yy1005;
+ if (yych <= '9') goto yy1031;
+ if (yych <= 'C') goto yy1005;
+ goto yy57;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy1005;
+ goto yy57;
+ } else {
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy1005;
goto yy57;
} else {
- if(yych <= '/') goto yy1000;
- if(yych <= '9') goto yy1026;
- if(yych <= 'C') goto yy1000;
- goto yy57;
+ if (yych <= 'R') goto yy1005;
+ if (yych <= 'T') goto yy57;
+ goto yy1005;
}
+ }
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy1005;
+ if (yych <= 'Y') goto yy57;
+ goto yy1005;
} else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy1000;
- goto yy57;
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
+ goto yy1005;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy1000;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy1000;
- if(yych <= 'T') goto yy57;
- goto yy1000;
- }
+ if (yych == 'g') goto yy1005;
+ goto yy57;
}
}
} else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy1000;
- if(yych <= 'Y') goto yy57;
- goto yy1000;
- } else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy1000;
- } else {
- if(yych == 'g') goto yy1000;
- goto yy57;
- }
- }
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy1005;
+ goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy1000;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy1005;
goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy1000;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy1000;
- }
+ if (yych == 'y') goto yy57;
+ goto yy1005;
}
}
}
-yy1025:
- YYDEBUG(1025, *YYCURSOR);
- yyaccept = 19;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy1000;
+ }
+yy1030:
+ YYDEBUG(1030, *YYCURSOR);
+ yyaccept = 19;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy1005;
+ goto yy57;
+ } else {
+ if (yych <= '1') {
+ if (yych <= '/') goto yy1005;
+ } else {
+ if (yych <= '9') goto yy51;
+ if (yych <= 'C') goto yy1005;
goto yy57;
- } else {
- if(yych <= '1') {
- if(yych <= '/') goto yy1000;
- } else {
- if(yych <= '9') goto yy51;
- if(yych <= 'C') goto yy1000;
- goto yy57;
- }
}
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy1005;
+ goto yy57;
} else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy1000;
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy1005;
goto yy57;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy1000;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy1000;
- if(yych <= 'T') goto yy57;
- goto yy1000;
- }
+ if (yych <= 'R') goto yy1005;
+ if (yych <= 'T') goto yy57;
+ goto yy1005;
}
}
- } else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy1000;
- if(yych <= 'Y') goto yy57;
- goto yy1000;
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy1005;
+ if (yych <= 'Y') goto yy57;
+ goto yy1005;
+ } else {
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
+ goto yy1005;
} else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy1000;
- } else {
- if(yych == 'g') goto yy1000;
- goto yy57;
- }
+ if (yych == 'g') goto yy1005;
+ goto yy57;
}
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy1005;
+ goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy1000;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy1005;
goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy1000;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy1000;
- }
+ if (yych == 'y') goto yy57;
+ goto yy1005;
}
}
}
-yy1026:
- YYDEBUG(1026, *YYCURSOR);
- yyaccept = 20;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yybm[0+yych] & 4) {
- goto yy51;
- }
- if(yych <= 'W') {
- if(yych <= 'F') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy56;
- if(yych >= ' ') goto yy56;
+ }
+yy1031:
+ YYDEBUG(1031, *YYCURSOR);
+ yyaccept = 20;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yybm[0+yych] & 4) {
+ goto yy51;
+ }
+ if (yych <= 'W') {
+ if (yych <= 'F') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy56;
+ if (yych >= ' ') goto yy56;
+ } else {
+ if (yych == 'D') goto yy61;
+ if (yych >= 'F') goto yy63;
+ }
+ } else {
+ if (yych <= 'M') {
+ if (yych == 'H') goto yy60;
+ if (yych >= 'M') goto yy59;
+ } else {
+ if (yych <= 'S') {
+ if (yych >= 'S') goto yy58;
} else {
- if(yych == 'D') goto yy61;
- if(yych >= 'F') goto yy63;
+ if (yych <= 'T') goto yy1033;
+ if (yych >= 'W') goto yy62;
}
+ }
+ }
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'd') {
+ if (yych == 'Y') goto yy64;
+ if (yych >= 'd') goto yy61;
} else {
- if(yych <= 'M') {
- if(yych == 'H') goto yy60;
- if(yych >= 'M') goto yy59;
+ if (yych <= 'f') {
+ if (yych >= 'f') goto yy63;
} else {
- if(yych <= 'S') {
- if(yych >= 'S') goto yy58;
- } else {
- if(yych <= 'T') goto yy1028;
- if(yych >= 'W') goto yy62;
- }
+ if (yych == 'h') goto yy60;
}
}
} else {
- if(yych <= 'l') {
- if(yych <= 'd') {
- if(yych == 'Y') goto yy64;
- if(yych >= 'd') goto yy61;
- } else {
- if(yych <= 'f') {
- if(yych >= 'f') goto yy63;
- } else {
- if(yych == 'h') goto yy60;
- }
- }
+ if (yych <= 't') {
+ if (yych <= 'm') goto yy59;
+ if (yych <= 'r') goto yy1032;
+ if (yych <= 's') goto yy58;
+ goto yy1034;
} else {
- if(yych <= 't') {
- if(yych <= 'm') goto yy59;
- if(yych <= 'r') goto yy1027;
- if(yych <= 's') goto yy58;
- goto yy1029;
+ if (yych <= 'w') {
+ if (yych >= 'w') goto yy62;
} else {
- if(yych <= 'w') {
- if(yych >= 'w') goto yy62;
- } else {
- if(yych == 'y') goto yy64;
- }
+ if (yych == 'y') goto yy64;
}
}
}
-yy1027:
- YYDEBUG(1027, *YYCURSOR);
-#line 1237 "ext/date/lib/parse_date.re"
- {
+ }
+yy1032:
+ YYDEBUG(1032, *YYCURSOR);
+#line 1238 "ext/date/lib/parse_date.re"
+ {
DEBUG_OUTPUT("datenocolon");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
@@ -16636,1930 +16646,1932 @@ yy1027:
TIMELIB_DEINIT;
return TIMELIB_DATE_NOCOLON;
}
-#line 16640 "ext/date/lib/parse_date.c"
-yy1028:
- YYDEBUG(1028, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'H') {
- if(yych <= '2') {
- if(yych <= '/') goto yy53;
- if(yych <= '1') goto yy1043;
- goto yy1044;
- } else {
- if(yych <= '9') goto yy1045;
- if(yych <= 'G') goto yy53;
- goto yy66;
- }
- } else {
- if(yych <= 'g') {
- if(yych == 'U') goto yy67;
- goto yy53;
- } else {
- if(yych <= 'h') goto yy66;
- if(yych == 'u') goto yy67;
- goto yy53;
- }
+#line 16650 "ext/date/lib/parse_date.c"
+yy1033:
+ YYDEBUG(1033, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'H') {
+ if (yych <= '2') {
+ if (yych <= '/') goto yy53;
+ if (yych <= '1') goto yy1048;
+ goto yy1049;
+ } else {
+ if (yych <= '9') goto yy1050;
+ if (yych <= 'G') goto yy53;
+ goto yy66;
}
-yy1029:
- YYDEBUG(1029, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'H') {
- if(yych <= '2') {
- if(yych <= '/') goto yy53;
- if(yych >= '2') goto yy1031;
- } else {
- if(yych <= '9') goto yy1032;
- if(yych <= 'G') goto yy53;
- goto yy66;
- }
+ } else {
+ if (yych <= 'g') {
+ if (yych == 'U') goto yy67;
+ goto yy53;
} else {
- if(yych <= 'g') {
- if(yych == 'U') goto yy67;
- goto yy53;
- } else {
- if(yych <= 'h') goto yy66;
- if(yych == 'u') goto yy67;
- goto yy53;
- }
+ if (yych <= 'h') goto yy66;
+ if (yych == 'u') goto yy67;
+ goto yy53;
}
- YYDEBUG(1030, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1037;
- if(yych <= '9') goto yy1032;
- goto yy53;
-yy1031:
- YYDEBUG(1031, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '3') goto yy1037;
- if(yych <= '5') goto yy1033;
- goto yy53;
-yy1032:
- YYDEBUG(1032, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '6') goto yy53;
-yy1033:
- YYDEBUG(1033, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
+ }
yy1034:
- YYDEBUG(1034, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1035;
- if(yych <= '6') goto yy1036;
- goto yy53;
-yy1035:
- YYDEBUG(1035, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1020;
- goto yy53;
+ YYDEBUG(1034, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'H') {
+ if (yych <= '2') {
+ if (yych <= '/') goto yy53;
+ if (yych >= '2') goto yy1036;
+ } else {
+ if (yych <= '9') goto yy1037;
+ if (yych <= 'G') goto yy53;
+ goto yy66;
+ }
+ } else {
+ if (yych <= 'g') {
+ if (yych == 'U') goto yy67;
+ goto yy53;
+ } else {
+ if (yych <= 'h') goto yy66;
+ if (yych == 'u') goto yy67;
+ goto yy53;
+ }
+ }
+ YYDEBUG(1035, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1042;
+ if (yych <= '9') goto yy1037;
+ goto yy53;
yy1036:
- YYDEBUG(1036, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '0') goto yy1020;
- goto yy53;
+ YYDEBUG(1036, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '3') goto yy1042;
+ if (yych <= '5') goto yy1038;
+ goto yy53;
yy1037:
- YYDEBUG(1037, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1038;
- if(yych <= '9') goto yy1034;
- goto yy53;
+ YYDEBUG(1037, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '6') goto yy53;
yy1038:
- YYDEBUG(1038, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1039;
- if(yych <= '6') goto yy1040;
- if(yych <= '9') goto yy1034;
- goto yy53;
+ YYDEBUG(1038, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
yy1039:
- YYDEBUG(1039, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1041;
- if(yych <= '6') goto yy1042;
- if(yych <= '9') goto yy1020;
- goto yy53;
+ YYDEBUG(1039, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1040;
+ if (yych <= '6') goto yy1041;
+ goto yy53;
yy1040:
- YYDEBUG(1040, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '0') goto yy1041;
- if(yych <= '5') goto yy1035;
- if(yych <= '6') goto yy1036;
- goto yy53;
+ YYDEBUG(1040, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1025;
+ goto yy53;
yy1041:
- YYDEBUG(1041, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy1021;
- if(yych <= '9') goto yy1020;
- goto yy1021;
+ YYDEBUG(1041, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '0') goto yy1025;
+ goto yy53;
yy1042:
- YYDEBUG(1042, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '0') goto yy1020;
- goto yy1021;
+ YYDEBUG(1042, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1043;
+ if (yych <= '9') goto yy1039;
+ goto yy53;
yy1043:
- YYDEBUG(1043, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1052;
- if(yych <= '9') goto yy1045;
- if(yych <= ':') goto yy1046;
- goto yy53;
+ YYDEBUG(1043, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1044;
+ if (yych <= '6') goto yy1045;
+ if (yych <= '9') goto yy1039;
+ goto yy53;
yy1044:
- YYDEBUG(1044, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '5') {
- if(yych <= '/') goto yy53;
- if(yych <= '3') goto yy1052;
- goto yy1033;
- } else {
- if(yych == ':') goto yy1046;
- goto yy53;
- }
+ YYDEBUG(1044, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1046;
+ if (yych <= '6') goto yy1047;
+ if (yych <= '9') goto yy1025;
+ goto yy53;
yy1045:
- YYDEBUG(1045, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1033;
- if(yych != ':') goto yy53;
+ YYDEBUG(1045, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '0') goto yy1046;
+ if (yych <= '5') goto yy1040;
+ if (yych <= '6') goto yy1041;
+ goto yy53;
yy1046:
- YYDEBUG(1046, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= '6') goto yy53;
- YYDEBUG(1047, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- YYDEBUG(1048, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ':') goto yy53;
- YYDEBUG(1049, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1050;
- if(yych <= '6') goto yy1051;
+ YYDEBUG(1046, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy1026;
+ if (yych <= '9') goto yy1025;
+ goto yy1026;
+yy1047:
+ YYDEBUG(1047, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '0') goto yy1025;
+ goto yy1026;
+yy1048:
+ YYDEBUG(1048, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1057;
+ if (yych <= '9') goto yy1050;
+ if (yych <= ':') goto yy1051;
+ goto yy53;
+yy1049:
+ YYDEBUG(1049, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '5') {
+ if (yych <= '/') goto yy53;
+ if (yych <= '3') goto yy1057;
+ goto yy1038;
+ } else {
+ if (yych == ':') goto yy1051;
goto yy53;
+ }
yy1050:
- YYDEBUG(1050, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1020;
- goto yy53;
+ YYDEBUG(1050, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1038;
+ if (yych != ':') goto yy53;
yy1051:
- YYDEBUG(1051, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '0') goto yy1020;
- goto yy53;
-yy1052:
- YYDEBUG(1052, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1038;
- if(yych <= '9') goto yy1034;
- if(yych <= ':') goto yy1046;
- goto yy53;
-yy1053:
- YYDEBUG(1053, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '2') {
- if(yych <= '/') goto yy57;
- if(yych <= '0') goto yy1055;
- goto yy1024;
- } else {
- if(yych <= '3') goto yy1025;
- if(yych <= '9') goto yy999;
- goto yy57;
- }
-yy1054:
- YYDEBUG(1054, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '2') {
- if(yych <= '/') goto yy57;
- if(yych <= '0') goto yy1023;
- goto yy1024;
- } else {
- if(yych <= '3') goto yy1025;
- if(yych <= '9') goto yy999;
- goto yy57;
- }
+ YYDEBUG(1051, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= '6') goto yy53;
+ YYDEBUG(1052, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(1053, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ':') goto yy53;
+ YYDEBUG(1054, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1055;
+ if (yych <= '6') goto yy1056;
+ goto yy53;
yy1055:
- YYDEBUG(1055, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '9') goto yy1026;
- goto yy57;
+ YYDEBUG(1055, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1025;
+ goto yy53;
yy1056:
- YYDEBUG(1056, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy1057;
- if(yych != 'c') goto yy53;
+ YYDEBUG(1056, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '0') goto yy1025;
+ goto yy53;
yy1057:
- YYDEBUG(1057, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'E') goto yy1058;
- if(yych != 'e') goto yy972;
+ YYDEBUG(1057, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1043;
+ if (yych <= '9') goto yy1039;
+ if (yych <= ':') goto yy1051;
+ goto yy53;
yy1058:
- YYDEBUG(1058, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy1059;
- if(yych != 'm') goto yy53;
+ YYDEBUG(1058, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '2') {
+ if (yych <= '/') goto yy57;
+ if (yych <= '0') goto yy1060;
+ goto yy1029;
+ } else {
+ if (yych <= '3') goto yy1030;
+ if (yych <= '9') goto yy1004;
+ goto yy57;
+ }
yy1059:
- YYDEBUG(1059, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy1060;
- if(yych != 'b') goto yy53;
+ YYDEBUG(1059, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '2') {
+ if (yych <= '/') goto yy57;
+ if (yych <= '0') goto yy1028;
+ goto yy1029;
+ } else {
+ if (yych <= '3') goto yy1030;
+ if (yych <= '9') goto yy1004;
+ goto yy57;
+ }
yy1060:
- YYDEBUG(1060, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy1061;
- if(yych != 'e') goto yy53;
+ YYDEBUG(1060, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '9') goto yy1031;
+ goto yy57;
yy1061:
- YYDEBUG(1061, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy1062;
- if(yych != 'r') goto yy53;
+ YYDEBUG(1061, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy1062;
+ if (yych != 'c') goto yy53;
yy1062:
- YYDEBUG(1062, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy972;
+ YYDEBUG(1062, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'E') goto yy1063;
+ if (yych != 'e') goto yy977;
yy1063:
- YYDEBUG(1063, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'V') goto yy1064;
- if(yych != 'v') goto yy53;
+ YYDEBUG(1063, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy1064;
+ if (yych != 'm') goto yy53;
yy1064:
- YYDEBUG(1064, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'E') goto yy1065;
- if(yych != 'e') goto yy972;
+ YYDEBUG(1064, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy1065;
+ if (yych != 'b') goto yy53;
yy1065:
- YYDEBUG(1065, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy1066;
- if(yych != 'm') goto yy53;
+ YYDEBUG(1065, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy1066;
+ if (yych != 'e') goto yy53;
yy1066:
- YYDEBUG(1066, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy1067;
- if(yych != 'b') goto yy53;
+ YYDEBUG(1066, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy1067;
+ if (yych != 'r') goto yy53;
yy1067:
- YYDEBUG(1067, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy1068;
- if(yych != 'e') goto yy53;
+ YYDEBUG(1067, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy977;
yy1068:
- YYDEBUG(1068, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy1062;
- if(yych == 'r') goto yy1062;
- goto yy53;
+ YYDEBUG(1068, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'V') goto yy1069;
+ if (yych != 'v') goto yy53;
yy1069:
- YYDEBUG(1069, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy1070;
- if(yych != 't') goto yy53;
+ YYDEBUG(1069, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'E') goto yy1070;
+ if (yych != 'e') goto yy977;
yy1070:
- YYDEBUG(1070, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'O') goto yy1071;
- if(yych != 'o') goto yy972;
+ YYDEBUG(1070, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy1071;
+ if (yych != 'm') goto yy53;
yy1071:
- YYDEBUG(1071, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy1072;
- if(yych != 'b') goto yy53;
+ YYDEBUG(1071, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy1072;
+ if (yych != 'b') goto yy53;
yy1072:
- YYDEBUG(1072, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy1073;
- if(yych != 'e') goto yy53;
+ YYDEBUG(1072, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy1073;
+ if (yych != 'e') goto yy53;
yy1073:
- YYDEBUG(1073, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy1062;
- if(yych == 'r') goto yy1062;
- goto yy53;
+ YYDEBUG(1073, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy1067;
+ if (yych == 'r') goto yy1067;
+ goto yy53;
yy1074:
- YYDEBUG(1074, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'P') {
- if(yych == 'C') goto yy125;
- if(yych <= 'O') goto yy53;
- } else {
- if(yych <= 'c') {
- if(yych <= 'b') goto yy53;
- goto yy125;
- } else {
- if(yych != 'p') goto yy53;
- }
- }
+ YYDEBUG(1074, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy1075;
+ if (yych != 't') goto yy53;
yy1075:
- YYDEBUG(1075, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy1076;
- if(yych != 't') goto yy972;
+ YYDEBUG(1075, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'O') goto yy1076;
+ if (yych != 'o') goto yy977;
yy1076:
- YYDEBUG(1076, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'E') goto yy1077;
- if(yych != 'e') goto yy972;
+ YYDEBUG(1076, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy1077;
+ if (yych != 'b') goto yy53;
yy1077:
- YYDEBUG(1077, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'M') goto yy1078;
- if(yych != 'm') goto yy53;
+ YYDEBUG(1077, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy1078;
+ if (yych != 'e') goto yy53;
yy1078:
- YYDEBUG(1078, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy1079;
- if(yych != 'b') goto yy53;
+ YYDEBUG(1078, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy1067;
+ if (yych == 'r') goto yy1067;
+ goto yy53;
yy1079:
- YYDEBUG(1079, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy1080;
- if(yych != 'e') goto yy53;
+ YYDEBUG(1079, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'P') {
+ if (yych == 'C') goto yy125;
+ if (yych <= 'O') goto yy53;
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'b') goto yy53;
+ goto yy125;
+ } else {
+ if (yych != 'p') goto yy53;
+ }
+ }
yy1080:
- YYDEBUG(1080, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy1062;
- if(yych == 'r') goto yy1062;
- goto yy53;
+ YYDEBUG(1080, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy1081;
+ if (yych != 't') goto yy977;
yy1081:
- YYDEBUG(1081, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'G') goto yy1085;
- if(yych == 'g') goto yy1085;
- goto yy53;
+ YYDEBUG(1081, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'E') goto yy1082;
+ if (yych != 'e') goto yy977;
yy1082:
- YYDEBUG(1082, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy1083;
- if(yych != 'r') goto yy53;
+ YYDEBUG(1082, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'M') goto yy1083;
+ if (yych != 'm') goto yy53;
yy1083:
- YYDEBUG(1083, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'I') goto yy1084;
- if(yych != 'i') goto yy972;
+ YYDEBUG(1083, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy1084;
+ if (yych != 'b') goto yy53;
yy1084:
- YYDEBUG(1084, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'L') goto yy1062;
- if(yych == 'l') goto yy1062;
- goto yy53;
+ YYDEBUG(1084, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy1085;
+ if (yych != 'e') goto yy53;
yy1085:
- YYDEBUG(1085, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'U') goto yy1086;
- if(yych != 'u') goto yy972;
+ YYDEBUG(1085, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy1067;
+ if (yych == 'r') goto yy1067;
+ goto yy53;
yy1086:
- YYDEBUG(1086, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'S') goto yy1087;
- if(yych != 's') goto yy53;
+ YYDEBUG(1086, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'G') goto yy1090;
+ if (yych == 'g') goto yy1090;
+ goto yy53;
yy1087:
- YYDEBUG(1087, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy1062;
- if(yych == 't') goto yy1062;
- goto yy53;
+ YYDEBUG(1087, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy1088;
+ if (yych != 'r') goto yy53;
yy1088:
- YYDEBUG(1088, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Y') {
- if(yych == 'R') goto yy1089;
- if(yych <= 'X') goto yy53;
- goto yy1062;
- } else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy53;
- } else {
- if(yych == 'y') goto yy1062;
- goto yy53;
- }
- }
+ YYDEBUG(1088, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'I') goto yy1089;
+ if (yych != 'i') goto yy977;
yy1089:
- YYDEBUG(1089, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'C') goto yy1090;
- if(yych != 'c') goto yy972;
+ YYDEBUG(1089, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'L') goto yy1067;
+ if (yych == 'l') goto yy1067;
+ goto yy53;
yy1090:
- YYDEBUG(1090, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'H') goto yy1062;
- if(yych == 'h') goto yy1062;
- goto yy53;
+ YYDEBUG(1090, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'U') goto yy1091;
+ if (yych != 'u') goto yy977;
yy1091:
- YYDEBUG(1091, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy1092;
- if(yych != 'b') goto yy53;
+ YYDEBUG(1091, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'S') goto yy1092;
+ if (yych != 's') goto yy53;
yy1092:
- YYDEBUG(1092, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'R') goto yy1093;
- if(yych != 'r') goto yy972;
+ YYDEBUG(1092, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy1067;
+ if (yych == 't') goto yy1067;
+ goto yy53;
yy1093:
- YYDEBUG(1093, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'U') goto yy1094;
- if(yych != 'u') goto yy53;
+ YYDEBUG(1093, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Y') {
+ if (yych == 'R') goto yy1094;
+ if (yych <= 'X') goto yy53;
+ goto yy1067;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy53;
+ } else {
+ if (yych == 'y') goto yy1067;
+ goto yy53;
+ }
+ }
yy1094:
- YYDEBUG(1094, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy1095;
- if(yych != 'a') goto yy53;
+ YYDEBUG(1094, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'C') goto yy1095;
+ if (yych != 'c') goto yy977;
yy1095:
- YYDEBUG(1095, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy1096;
- if(yych != 'r') goto yy53;
+ YYDEBUG(1095, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'H') goto yy1067;
+ if (yych == 'h') goto yy1067;
+ goto yy53;
yy1096:
- YYDEBUG(1096, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy1062;
- if(yych == 'y') goto yy1062;
- goto yy53;
+ YYDEBUG(1096, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy1097;
+ if (yych != 'b') goto yy53;
yy1097:
- YYDEBUG(1097, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych == 'L') goto yy1104;
- if(yych <= 'M') goto yy53;
- goto yy1103;
- } else {
- if(yych <= 'l') {
- if(yych <= 'k') goto yy53;
- goto yy1104;
- } else {
- if(yych == 'n') goto yy1103;
- goto yy53;
- }
- }
+ YYDEBUG(1097, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'R') goto yy1098;
+ if (yych != 'r') goto yy977;
yy1098:
- YYDEBUG(1098, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy1099;
- if(yych != 'n') goto yy53;
+ YYDEBUG(1098, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'U') goto yy1099;
+ if (yych != 'u') goto yy53;
yy1099:
- YYDEBUG(1099, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'U') goto yy1100;
- if(yych != 'u') goto yy972;
+ YYDEBUG(1099, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy1100;
+ if (yych != 'a') goto yy53;
yy1100:
- YYDEBUG(1100, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy1101;
- if(yych != 'a') goto yy53;
+ YYDEBUG(1100, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy1101;
+ if (yych != 'r') goto yy53;
yy1101:
- YYDEBUG(1101, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy1102;
- if(yych != 'r') goto yy53;
+ YYDEBUG(1101, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy1067;
+ if (yych == 'y') goto yy1067;
+ goto yy53;
yy1102:
- YYDEBUG(1102, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy1062;
- if(yych == 'y') goto yy1062;
- goto yy53;
+ YYDEBUG(1102, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych == 'L') goto yy1109;
+ if (yych <= 'M') goto yy53;
+ goto yy1108;
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'k') goto yy53;
+ goto yy1109;
+ } else {
+ if (yych == 'n') goto yy1108;
+ goto yy53;
+ }
+ }
yy1103:
- YYDEBUG(1103, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy1062;
- if(yych == 'e') goto yy1062;
- goto yy972;
+ YYDEBUG(1103, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy1104;
+ if (yych != 'n') goto yy53;
yy1104:
- YYDEBUG(1104, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy1062;
- if(yych == 'y') goto yy1062;
- goto yy972;
+ YYDEBUG(1104, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'U') goto yy1105;
+ if (yych != 'u') goto yy977;
yy1105:
- YYDEBUG(1105, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'I') goto yy1062;
- goto yy972;
+ YYDEBUG(1105, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy1106;
+ if (yych != 'a') goto yy53;
yy1106:
- YYDEBUG(1106, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != 'I') goto yy972;
- YYDEBUG(1107, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'I') goto yy1062;
- goto yy972;
+ YYDEBUG(1106, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy1107;
+ if (yych != 'r') goto yy53;
+yy1107:
+ YYDEBUG(1107, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy1067;
+ if (yych == 'y') goto yy1067;
+ goto yy53;
yy1108:
- YYDEBUG(1108, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'I') goto yy1062;
- goto yy972;
+ YYDEBUG(1108, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy1067;
+ if (yych == 'e') goto yy1067;
+ goto yy977;
yy1109:
- YYDEBUG(1109, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '0') goto yy1124;
- if(yych <= '9') goto yy1123;
- goto yy53;
+ YYDEBUG(1109, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy1067;
+ if (yych == 'y') goto yy1067;
+ goto yy977;
yy1110:
- YYDEBUG(1110, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1122;
- goto yy53;
+ YYDEBUG(1110, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'I') goto yy1067;
+ goto yy977;
yy1111:
- YYDEBUG(1111, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1120;
- if(yych <= '6') goto yy1119;
- goto yy53;
-yy1112:
- YYDEBUG(1112, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy1091;
- if(yych == 'e') goto yy1091;
- goto yy53;
+ YYDEBUG(1111, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != 'I') goto yy977;
+ YYDEBUG(1112, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'I') goto yy1067;
+ goto yy977;
yy1113:
- YYDEBUG(1113, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy1088;
- if(yych == 'a') goto yy1088;
- goto yy53;
+ YYDEBUG(1113, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'I') goto yy1067;
+ goto yy977;
yy1114:
- YYDEBUG(1114, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy1118;
- if(yych == 'e') goto yy1118;
- goto yy53;
+ YYDEBUG(1114, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '0') goto yy1129;
+ if (yych <= '9') goto yy1128;
+ goto yy53;
yy1115:
- YYDEBUG(1115, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy1056;
- if(yych == 'e') goto yy1056;
- goto yy53;
+ YYDEBUG(1115, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1127;
+ goto yy53;
yy1116:
- YYDEBUG(1116, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 9) YYFILL(9);
- yych = *YYCURSOR;
+ YYDEBUG(1116, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1125;
+ if (yych <= '6') goto yy1124;
+ goto yy53;
yy1117:
- YYDEBUG(1117, *YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09:
- case ' ':
- case '-':
- case '.': goto yy1116;
- case 'A':
- case 'a': goto yy978;
- case 'D':
- case 'd': goto yy1115;
- case 'F':
- case 'f': goto yy1112;
- case 'I': goto yy971;
- case 'J':
- case 'j': goto yy975;
- case 'M':
- case 'm': goto yy1113;
- case 'N':
- case 'n': goto yy981;
- case 'O':
- case 'o': goto yy980;
- case 'S':
- case 's': goto yy1114;
- case 'V': goto yy973;
- case 'X': goto yy974;
- default: goto yy53;
- }
+ YYDEBUG(1117, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy1096;
+ if (yych == 'e') goto yy1096;
+ goto yy53;
yy1118:
- YYDEBUG(1118, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'P') goto yy1075;
- if(yych == 'p') goto yy1075;
- goto yy53;
+ YYDEBUG(1118, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy1093;
+ if (yych == 'a') goto yy1093;
+ goto yy53;
yy1119:
- YYDEBUG(1119, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '6') goto yy1121;
- goto yy53;
+ YYDEBUG(1119, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy1123;
+ if (yych == 'e') goto yy1123;
+ goto yy53;
yy1120:
- YYDEBUG(1120, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
+ YYDEBUG(1120, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy1061;
+ if (yych == 'e') goto yy1061;
+ goto yy53;
yy1121:
- YYDEBUG(1121, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy1000;
+ YYDEBUG(1121, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 9) YYFILL(9);
+ yych = *YYCURSOR;
yy1122:
- YYDEBUG(1122, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1121;
- goto yy53;
+ YYDEBUG(1122, *YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t':
+ case ' ':
+ case '-':
+ case '.': goto yy1121;
+ case 'A':
+ case 'a': goto yy983;
+ case 'D':
+ case 'd': goto yy1120;
+ case 'F':
+ case 'f': goto yy1117;
+ case 'I': goto yy976;
+ case 'J':
+ case 'j': goto yy980;
+ case 'M':
+ case 'm': goto yy1118;
+ case 'N':
+ case 'n': goto yy986;
+ case 'O':
+ case 'o': goto yy985;
+ case 'S':
+ case 's': goto yy1119;
+ case 'V': goto yy978;
+ case 'X': goto yy979;
+ default: goto yy53;
+ }
yy1123:
- YYDEBUG(1123, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1121;
- goto yy53;
+ YYDEBUG(1123, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'P') goto yy1080;
+ if (yych == 'p') goto yy1080;
+ goto yy53;
yy1124:
- YYDEBUG(1124, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '0') goto yy53;
- if(yych <= '9') goto yy1121;
- goto yy53;
+ YYDEBUG(1124, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '6') goto yy1126;
+ goto yy53;
yy1125:
- YYDEBUG(1125, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '.') goto yy53;
- if(yych <= '/') goto yy1128;
- if(yych <= '9') goto yy1136;
- goto yy53;
+ YYDEBUG(1125, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
yy1126:
- YYDEBUG(1126, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '.') goto yy53;
- if(yych <= '/') goto yy1128;
- if(yych <= '2') goto yy1136;
- goto yy53;
+ YYDEBUG(1126, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy1005;
yy1127:
- YYDEBUG(1127, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '/') goto yy53;
+ YYDEBUG(1127, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1126;
+ goto yy53;
yy1128:
- YYDEBUG(1128, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '2') goto yy1129;
- if(yych <= '3') goto yy1130;
- if(yych <= '9') goto yy1131;
- goto yy53;
+ YYDEBUG(1128, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1126;
+ goto yy53;
yy1129:
- YYDEBUG(1129, *YYCURSOR);
- yyaccept = 22;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy660;
- if(yych <= '9') goto yy1131;
- if(yych <= 'm') goto yy660;
- goto yy1133;
- } else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy660;
- goto yy1134;
- } else {
- if(yych <= 's') goto yy1132;
- if(yych <= 't') goto yy1135;
- goto yy660;
- }
- }
+ YYDEBUG(1129, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '0') goto yy53;
+ if (yych <= '9') goto yy1126;
+ goto yy53;
yy1130:
- YYDEBUG(1130, *YYCURSOR);
- yyaccept = 22;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy660;
- if(yych <= '1') goto yy1131;
- if(yych <= 'm') goto yy660;
- goto yy1133;
- } else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy660;
- goto yy1134;
- } else {
- if(yych <= 's') goto yy1132;
- if(yych <= 't') goto yy1135;
- goto yy660;
- }
- }
+ YYDEBUG(1130, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '.') goto yy53;
+ if (yych <= '/') goto yy1133;
+ if (yych <= '9') goto yy1141;
+ goto yy53;
yy1131:
- YYDEBUG(1131, *YYCURSOR);
- yyaccept = 22;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'q') {
- if(yych == 'n') goto yy1133;
- goto yy660;
- } else {
- if(yych <= 'r') goto yy1134;
- if(yych <= 's') goto yy1132;
- if(yych <= 't') goto yy1135;
- goto yy660;
- }
+ YYDEBUG(1131, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '.') goto yy53;
+ if (yych <= '/') goto yy1133;
+ if (yych <= '2') goto yy1141;
+ goto yy53;
yy1132:
- YYDEBUG(1132, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 't') goto yy659;
- goto yy53;
+ YYDEBUG(1132, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '/') goto yy53;
yy1133:
- YYDEBUG(1133, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'd') goto yy659;
- goto yy53;
+ YYDEBUG(1133, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '2') goto yy1134;
+ if (yych <= '3') goto yy1135;
+ if (yych <= '9') goto yy1136;
+ goto yy53;
yy1134:
- YYDEBUG(1134, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'd') goto yy659;
- goto yy53;
-yy1135:
- YYDEBUG(1135, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'h') goto yy659;
- goto yy53;
-yy1136:
- YYDEBUG(1136, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '/') goto yy53;
- YYDEBUG(1137, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '2') {
- if(yych <= '/') goto yy53;
- if(yych >= '1') goto yy1139;
- } else {
- if(yych <= '3') goto yy1140;
- if(yych <= '9') goto yy1131;
- goto yy53;
- }
- YYDEBUG(1138, *YYCURSOR);
- yyaccept = 22;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy660;
- if(yych <= '9') goto yy1141;
- if(yych <= 'm') goto yy660;
- goto yy1133;
+ YYDEBUG(1134, *YYCURSOR);
+ yyaccept = 22;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy658;
+ if (yych <= '9') goto yy1136;
+ if (yych <= 'm') goto yy658;
+ goto yy1138;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy658;
+ goto yy1139;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy660;
- goto yy1134;
- } else {
- if(yych <= 's') goto yy1132;
- if(yych <= 't') goto yy1135;
- goto yy660;
- }
+ if (yych <= 's') goto yy1137;
+ if (yych <= 't') goto yy1140;
+ goto yy658;
}
-yy1139:
- YYDEBUG(1139, *YYCURSOR);
- yyaccept = 22;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy660;
- if(yych <= '9') goto yy1141;
- if(yych <= 'm') goto yy660;
- goto yy1133;
+ }
+yy1135:
+ YYDEBUG(1135, *YYCURSOR);
+ yyaccept = 22;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy658;
+ if (yych <= '1') goto yy1136;
+ if (yych <= 'm') goto yy658;
+ goto yy1138;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy658;
+ goto yy1139;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy660;
- goto yy1134;
- } else {
- if(yych <= 's') goto yy1132;
- if(yych <= 't') goto yy1135;
- goto yy660;
- }
+ if (yych <= 's') goto yy1137;
+ if (yych <= 't') goto yy1140;
+ goto yy658;
}
+ }
+yy1136:
+ YYDEBUG(1136, *YYCURSOR);
+ yyaccept = 22;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'q') {
+ if (yych == 'n') goto yy1138;
+ goto yy658;
+ } else {
+ if (yych <= 'r') goto yy1139;
+ if (yych <= 's') goto yy1137;
+ if (yych <= 't') goto yy1140;
+ goto yy658;
+ }
+yy1137:
+ YYDEBUG(1137, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 't') goto yy657;
+ goto yy53;
+yy1138:
+ YYDEBUG(1138, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'd') goto yy657;
+ goto yy53;
+yy1139:
+ YYDEBUG(1139, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'd') goto yy657;
+ goto yy53;
yy1140:
- YYDEBUG(1140, *YYCURSOR);
- yyaccept = 22;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy660;
- if(yych <= '1') goto yy1141;
- if(yych <= 'm') goto yy660;
- goto yy1133;
- } else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy660;
- goto yy1134;
- } else {
- if(yych <= 's') goto yy1132;
- if(yych <= 't') goto yy1135;
- goto yy660;
- }
- }
+ YYDEBUG(1140, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'h') goto yy657;
+ goto yy53;
yy1141:
- YYDEBUG(1141, *YYCURSOR);
- yyaccept = 22;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych == '/') goto yy659;
- if(yych <= 'm') goto yy660;
- goto yy1133;
- } else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy660;
- goto yy1134;
- } else {
- if(yych <= 's') goto yy1132;
- if(yych <= 't') goto yy1135;
- goto yy660;
- }
- }
-yy1142:
- YYDEBUG(1142, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'A') goto yy1219;
- if(yych <= 'T') goto yy53;
- goto yy1218;
- } else {
- if(yych <= 'a') {
- if(yych <= '`') goto yy53;
- goto yy1219;
- } else {
- if(yych == 'u') goto yy1218;
- goto yy53;
- }
- }
-yy1143:
- YYDEBUG(1143, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy1216;
- if(yych == 'e') goto yy1216;
+ YYDEBUG(1141, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '/') goto yy53;
+ YYDEBUG(1142, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '2') {
+ if (yych <= '/') goto yy53;
+ if (yych >= '1') goto yy1144;
+ } else {
+ if (yych <= '3') goto yy1145;
+ if (yych <= '9') goto yy1136;
goto yy53;
+ }
+ YYDEBUG(1143, *YYCURSOR);
+ yyaccept = 22;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy658;
+ if (yych <= '9') goto yy1146;
+ if (yych <= 'm') goto yy658;
+ goto yy1138;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy658;
+ goto yy1139;
+ } else {
+ if (yych <= 's') goto yy1137;
+ if (yych <= 't') goto yy1140;
+ goto yy658;
+ }
+ }
yy1144:
- YYDEBUG(1144, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy1213;
- if(yych == 'a') goto yy1213;
- goto yy53;
+ YYDEBUG(1144, *YYCURSOR);
+ yyaccept = 22;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy658;
+ if (yych <= '9') goto yy1146;
+ if (yych <= 'm') goto yy658;
+ goto yy1138;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy658;
+ goto yy1139;
+ } else {
+ if (yych <= 's') goto yy1137;
+ if (yych <= 't') goto yy1140;
+ goto yy658;
+ }
+ }
yy1145:
- YYDEBUG(1145, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych == 'P') goto yy1210;
- if(yych <= 'T') goto yy53;
- goto yy1209;
- } else {
- if(yych <= 'p') {
- if(yych <= 'o') goto yy53;
- goto yy1210;
- } else {
- if(yych == 'u') goto yy1209;
- goto yy53;
- }
+ YYDEBUG(1145, *YYCURSOR);
+ yyaccept = 22;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy658;
+ if (yych <= '1') goto yy1146;
+ if (yych <= 'm') goto yy658;
+ goto yy1138;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy658;
+ goto yy1139;
+ } else {
+ if (yych <= 's') goto yy1137;
+ if (yych <= 't') goto yy1140;
+ goto yy658;
}
+ }
yy1146:
- YYDEBUG(1146, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy1206;
- if(yych == 'e') goto yy1206;
- goto yy53;
+ YYDEBUG(1146, *YYCURSOR);
+ yyaccept = 22;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych == '/') goto yy657;
+ if (yych <= 'm') goto yy658;
+ goto yy1138;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy658;
+ goto yy1139;
+ } else {
+ if (yych <= 's') goto yy1137;
+ if (yych <= 't') goto yy1140;
+ goto yy658;
+ }
+ }
yy1147:
- YYDEBUG(1147, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy1204;
- if(yych == 'c') goto yy1204;
- goto yy53;
+ YYDEBUG(1147, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'A') goto yy1224;
+ if (yych <= 'T') goto yy53;
+ goto yy1223;
+ } else {
+ if (yych <= 'a') {
+ if (yych <= '`') goto yy53;
+ goto yy1224;
+ } else {
+ if (yych == 'u') goto yy1223;
+ goto yy53;
+ }
+ }
yy1148:
- YYDEBUG(1148, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'O') goto yy1202;
- if(yych == 'o') goto yy1202;
- goto yy53;
+ YYDEBUG(1148, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy1221;
+ if (yych == 'e') goto yy1221;
+ goto yy53;
yy1149:
- YYDEBUG(1149, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'E') goto yy1200;
- if(yych == 'e') goto yy1200;
- goto yy53;
+ YYDEBUG(1149, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy1218;
+ if (yych == 'a') goto yy1218;
+ goto yy53;
yy1150:
- YYDEBUG(1150, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '0') goto yy989;
- if(yych <= '4') goto yy990;
- if(yych <= '5') goto yy991;
- goto yy53;
+ YYDEBUG(1150, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych == 'P') goto yy1215;
+ if (yych <= 'T') goto yy53;
+ goto yy1214;
+ } else {
+ if (yych <= 'p') {
+ if (yych <= 'o') goto yy53;
+ goto yy1215;
+ } else {
+ if (yych == 'u') goto yy1214;
+ goto yy53;
+ }
+ }
yy1151:
- YYDEBUG(1151, *YYCURSOR);
- yyaccept = 23;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '-') goto yy1155;
- if(yych <= '/') goto yy1152;
- if(yych <= '9') goto yy1174;
+ YYDEBUG(1151, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy1211;
+ if (yych == 'e') goto yy1211;
+ goto yy53;
yy1152:
- YYDEBUG(1152, *YYCURSOR);
+ YYDEBUG(1152, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy1209;
+ if (yych == 'c') goto yy1209;
+ goto yy53;
+yy1153:
+ YYDEBUG(1153, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'O') goto yy1207;
+ if (yych == 'o') goto yy1207;
+ goto yy53;
+yy1154:
+ YYDEBUG(1154, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'E') goto yy1205;
+ if (yych == 'e') goto yy1205;
+ goto yy53;
+yy1155:
+ YYDEBUG(1155, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '0') goto yy994;
+ if (yych <= '4') goto yy995;
+ if (yych <= '5') goto yy996;
+ goto yy53;
+yy1156:
+ YYDEBUG(1156, *YYCURSOR);
+ yyaccept = 23;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '-') goto yy1160;
+ if (yych <= '/') goto yy1157;
+ if (yych <= '9') goto yy1179;
+yy1157:
+ YYDEBUG(1157, *YYCURSOR);
#line 1122 "ext/date/lib/parse_date.re"
- {
+ {
DEBUG_OUTPUT("gnudateshorter");
TIMELIB_INIT;
TIMELIB_HAVE_DATE();
s->time->y = timelib_get_nr((char **) &ptr, 4);
s->time->m = timelib_get_nr((char **) &ptr, 2);
+ s->time->d = 1;
TIMELIB_PROCESS_YEAR(s->time->y);
TIMELIB_DEINIT;
return TIMELIB_ISO_DATE;
}
-#line 17571 "ext/date/lib/parse_date.c"
-yy1153:
- YYDEBUG(1153, *YYCURSOR);
- yyaccept = 23;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '-') goto yy1155;
- if(yych <= '/') goto yy1152;
- if(yych <= '2') goto yy1174;
- goto yy1152;
-yy1154:
- YYDEBUG(1154, *YYCURSOR);
- yyaccept = 23;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych != '-') goto yy1152;
-yy1155:
- YYDEBUG(1155, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '2') goto yy1156;
- if(yych <= '3') goto yy1157;
- if(yych <= '9') goto yy1158;
- goto yy53;
-yy1156:
- YYDEBUG(1156, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'm') {
- if(yych <= '9') {
- if(yych <= '/') goto yy844;
- goto yy1158;
- } else {
- if(yych == 'T') goto yy1163;
- goto yy844;
- }
+#line 17582 "ext/date/lib/parse_date.c"
+yy1158:
+ YYDEBUG(1158, *YYCURSOR);
+ yyaccept = 23;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '-') goto yy1160;
+ if (yych <= '/') goto yy1157;
+ if (yych <= '2') goto yy1179;
+ goto yy1157;
+yy1159:
+ YYDEBUG(1159, *YYCURSOR);
+ yyaccept = 23;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych != '-') goto yy1157;
+yy1160:
+ YYDEBUG(1160, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '2') goto yy1161;
+ if (yych <= '3') goto yy1162;
+ if (yych <= '9') goto yy1163;
+ goto yy53;
+yy1161:
+ YYDEBUG(1161, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'm') {
+ if (yych <= '9') {
+ if (yych <= '/') goto yy843;
+ goto yy1163;
} else {
- if(yych <= 'r') {
- if(yych <= 'n') goto yy1160;
- if(yych <= 'q') goto yy844;
- goto yy1161;
- } else {
- if(yych <= 's') goto yy1159;
- if(yych <= 't') goto yy1162;
- goto yy844;
- }
+ if (yych == 'T') goto yy1168;
+ goto yy843;
}
-yy1157:
- YYDEBUG(1157, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'm') {
- if(yych <= '1') {
- if(yych <= '/') goto yy844;
- } else {
- if(yych == 'T') goto yy1163;
- goto yy844;
- }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'n') goto yy1165;
+ if (yych <= 'q') goto yy843;
+ goto yy1166;
} else {
- if(yych <= 'r') {
- if(yych <= 'n') goto yy1160;
- if(yych <= 'q') goto yy844;
- goto yy1161;
- } else {
- if(yych <= 's') goto yy1159;
- if(yych <= 't') goto yy1162;
- goto yy844;
- }
+ if (yych <= 's') goto yy1164;
+ if (yych <= 't') goto yy1167;
+ goto yy843;
}
-yy1158:
- YYDEBUG(1158, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych == 'T') goto yy1163;
- if(yych <= 'm') goto yy844;
- goto yy1160;
+ }
+yy1162:
+ YYDEBUG(1162, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'm') {
+ if (yych <= '1') {
+ if (yych <= '/') goto yy843;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy1161;
- } else {
- if(yych <= 's') goto yy1159;
- if(yych <= 't') goto yy1162;
- goto yy844;
- }
+ if (yych == 'T') goto yy1168;
+ goto yy843;
}
-yy1159:
- YYDEBUG(1159, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 't') goto yy1173;
- goto yy53;
-yy1160:
- YYDEBUG(1160, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'd') goto yy1173;
- goto yy53;
-yy1161:
- YYDEBUG(1161, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'd') goto yy1173;
- goto yy53;
-yy1162:
- YYDEBUG(1162, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'h') goto yy1173;
- goto yy53;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'n') goto yy1165;
+ if (yych <= 'q') goto yy843;
+ goto yy1166;
+ } else {
+ if (yych <= 's') goto yy1164;
+ if (yych <= 't') goto yy1167;
+ goto yy843;
+ }
+ }
yy1163:
- YYDEBUG(1163, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '1') goto yy1164;
- if(yych <= '2') goto yy1165;
- if(yych <= '9') goto yy1166;
- goto yy53;
+ YYDEBUG(1163, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych == 'T') goto yy1168;
+ if (yych <= 'm') goto yy843;
+ goto yy1165;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
+ goto yy1166;
+ } else {
+ if (yych <= 's') goto yy1164;
+ if (yych <= 't') goto yy1167;
+ goto yy843;
+ }
+ }
yy1164:
- YYDEBUG(1164, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1166;
- if(yych <= ':') goto yy1167;
- goto yy53;
+ YYDEBUG(1164, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 't') goto yy1178;
+ goto yy53;
yy1165:
- YYDEBUG(1165, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '3') goto yy1166;
- if(yych == ':') goto yy1167;
- goto yy53;
+ YYDEBUG(1165, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'd') goto yy1178;
+ goto yy53;
yy1166:
- YYDEBUG(1166, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ':') goto yy53;
+ YYDEBUG(1166, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'd') goto yy1178;
+ goto yy53;
yy1167:
- YYDEBUG(1167, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1168;
- if(yych <= '9') goto yy1169;
- goto yy53;
+ YYDEBUG(1167, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'h') goto yy1178;
+ goto yy53;
yy1168:
- YYDEBUG(1168, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1169;
- if(yych <= ':') goto yy1170;
- goto yy53;
+ YYDEBUG(1168, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '1') goto yy1169;
+ if (yych <= '2') goto yy1170;
+ if (yych <= '9') goto yy1171;
+ goto yy53;
yy1169:
- YYDEBUG(1169, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ':') goto yy53;
+ YYDEBUG(1169, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1171;
+ if (yych <= ':') goto yy1172;
+ goto yy53;
yy1170:
- YYDEBUG(1170, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1171;
- if(yych <= '6') goto yy1172;
- if(yych <= '9') goto yy1020;
- goto yy53;
+ YYDEBUG(1170, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '3') goto yy1171;
+ if (yych == ':') goto yy1172;
+ goto yy53;
yy1171:
- YYDEBUG(1171, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy1021;
- if(yych <= '9') goto yy1020;
- goto yy1021;
+ YYDEBUG(1171, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ':') goto yy53;
yy1172:
- YYDEBUG(1172, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '0') goto yy1020;
- goto yy1021;
+ YYDEBUG(1172, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1173;
+ if (yych <= '9') goto yy1174;
+ goto yy53;
yy1173:
- YYDEBUG(1173, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == 'T') goto yy1163;
- goto yy844;
+ YYDEBUG(1173, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1174;
+ if (yych <= ':') goto yy1175;
+ goto yy53;
yy1174:
- YYDEBUG(1174, *YYCURSOR);
- yyaccept = 23;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych != '-') goto yy1152;
- YYDEBUG(1175, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '2') {
- if(yych <= '/') goto yy53;
- if(yych >= '1') goto yy1177;
- } else {
- if(yych <= '3') goto yy1178;
- if(yych <= '9') goto yy1158;
- goto yy53;
+ YYDEBUG(1174, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ':') goto yy53;
+yy1175:
+ YYDEBUG(1175, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1176;
+ if (yych <= '6') goto yy1177;
+ if (yych <= '9') goto yy1025;
+ goto yy53;
+yy1176:
+ YYDEBUG(1176, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy1026;
+ if (yych <= '9') goto yy1025;
+ goto yy1026;
+yy1177:
+ YYDEBUG(1177, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '0') goto yy1025;
+ goto yy1026;
+yy1178:
+ YYDEBUG(1178, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == 'T') goto yy1168;
+ goto yy843;
+yy1179:
+ YYDEBUG(1179, *YYCURSOR);
+ yyaccept = 23;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych != '-') goto yy1157;
+ YYDEBUG(1180, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '2') {
+ if (yych <= '/') goto yy53;
+ if (yych >= '1') goto yy1182;
+ } else {
+ if (yych <= '3') goto yy1183;
+ if (yych <= '9') goto yy1163;
+ goto yy53;
+ }
+ YYDEBUG(1181, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'm') {
+ if (yych <= '9') {
+ if (yych <= '/') goto yy843;
+ goto yy1184;
+ } else {
+ if (yych == 'T') goto yy1168;
+ goto yy843;
}
- YYDEBUG(1176, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'm') {
- if(yych <= '9') {
- if(yych <= '/') goto yy844;
- goto yy1179;
- } else {
- if(yych == 'T') goto yy1163;
- goto yy844;
- }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'n') goto yy1165;
+ if (yych <= 'q') goto yy843;
+ goto yy1166;
} else {
- if(yych <= 'r') {
- if(yych <= 'n') goto yy1160;
- if(yych <= 'q') goto yy844;
- goto yy1161;
- } else {
- if(yych <= 's') goto yy1159;
- if(yych <= 't') goto yy1162;
- goto yy844;
- }
+ if (yych <= 's') goto yy1164;
+ if (yych <= 't') goto yy1167;
+ goto yy843;
}
-yy1177:
- YYDEBUG(1177, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'm') {
- if(yych <= '9') {
- if(yych <= '/') goto yy844;
- goto yy1179;
- } else {
- if(yych == 'T') goto yy1163;
- goto yy844;
- }
+ }
+yy1182:
+ YYDEBUG(1182, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'm') {
+ if (yych <= '9') {
+ if (yych <= '/') goto yy843;
+ goto yy1184;
} else {
- if(yych <= 'r') {
- if(yych <= 'n') goto yy1160;
- if(yych <= 'q') goto yy844;
- goto yy1161;
- } else {
- if(yych <= 's') goto yy1159;
- if(yych <= 't') goto yy1162;
- goto yy844;
- }
+ if (yych == 'T') goto yy1168;
+ goto yy843;
}
-yy1178:
- YYDEBUG(1178, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'm') {
- if(yych <= '1') {
- if(yych <= '/') goto yy844;
- } else {
- if(yych == 'T') goto yy1163;
- goto yy844;
- }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'n') goto yy1165;
+ if (yych <= 'q') goto yy843;
+ goto yy1166;
} else {
- if(yych <= 'r') {
- if(yych <= 'n') goto yy1160;
- if(yych <= 'q') goto yy844;
- goto yy1161;
- } else {
- if(yych <= 's') goto yy1159;
- if(yych <= 't') goto yy1162;
- goto yy844;
- }
+ if (yych <= 's') goto yy1164;
+ if (yych <= 't') goto yy1167;
+ goto yy843;
}
-yy1179:
- YYDEBUG(1179, *YYCURSOR);
- yyaccept = 22;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych == 'T') goto yy1180;
- if(yych <= 'm') goto yy660;
- goto yy1160;
- } else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy660;
- goto yy1161;
- } else {
- if(yych <= 's') goto yy1159;
- if(yych <= 't') goto yy1162;
- goto yy660;
- }
- }
-yy1180:
- YYDEBUG(1180, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '1') goto yy1181;
- if(yych <= '2') goto yy1182;
- if(yych <= '9') goto yy1166;
- goto yy53;
-yy1181:
- YYDEBUG(1181, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1183;
- if(yych <= ':') goto yy1167;
- goto yy53;
-yy1182:
- YYDEBUG(1182, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '3') goto yy1183;
- if(yych == ':') goto yy1167;
- goto yy53;
+ }
yy1183:
- YYDEBUG(1183, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ':') goto yy53;
- YYDEBUG(1184, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1185;
- if(yych <= '9') goto yy1169;
- goto yy53;
+ YYDEBUG(1183, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'm') {
+ if (yych <= '1') {
+ if (yych <= '/') goto yy843;
+ } else {
+ if (yych == 'T') goto yy1168;
+ goto yy843;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'n') goto yy1165;
+ if (yych <= 'q') goto yy843;
+ goto yy1166;
+ } else {
+ if (yych <= 's') goto yy1164;
+ if (yych <= 't') goto yy1167;
+ goto yy843;
+ }
+ }
+yy1184:
+ YYDEBUG(1184, *YYCURSOR);
+ yyaccept = 22;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych == 'T') goto yy1185;
+ if (yych <= 'm') goto yy658;
+ goto yy1165;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy658;
+ goto yy1166;
+ } else {
+ if (yych <= 's') goto yy1164;
+ if (yych <= 't') goto yy1167;
+ goto yy658;
+ }
+ }
yy1185:
- YYDEBUG(1185, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1186;
- if(yych <= ':') goto yy1170;
- goto yy53;
+ YYDEBUG(1185, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '1') goto yy1186;
+ if (yych <= '2') goto yy1187;
+ if (yych <= '9') goto yy1171;
+ goto yy53;
yy1186:
- YYDEBUG(1186, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != ':') goto yy53;
- YYDEBUG(1187, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1188;
- if(yych <= '6') goto yy1189;
- if(yych <= '9') goto yy1020;
- goto yy53;
+ YYDEBUG(1186, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1188;
+ if (yych <= ':') goto yy1172;
+ goto yy53;
+yy1187:
+ YYDEBUG(1187, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '3') goto yy1188;
+ if (yych == ':') goto yy1172;
+ goto yy53;
yy1188:
- YYDEBUG(1188, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy1021;
- if(yych <= '9') goto yy1190;
- goto yy1021;
-yy1189:
- YYDEBUG(1189, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '0') goto yy1021;
+ YYDEBUG(1188, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ':') goto yy53;
+ YYDEBUG(1189, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1190;
+ if (yych <= '9') goto yy1174;
+ goto yy53;
yy1190:
- YYDEBUG(1190, *YYCURSOR);
- yyaccept = 24;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych != '.') goto yy1021;
- YYDEBUG(1191, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
-yy1192:
- YYDEBUG(1192, *YYCURSOR);
- yyaccept = 24;
- YYMARKER = ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 6) YYFILL(6);
- yych = *YYCURSOR;
- YYDEBUG(1193, *YYCURSOR);
- if(yych <= ',') {
- if(yych != '+') goto yy1021;
- } else {
- if(yych <= '-') goto yy1194;
- if(yych <= '/') goto yy1021;
- if(yych <= '9') goto yy1192;
- goto yy1021;
- }
+ YYDEBUG(1190, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1191;
+ if (yych <= ':') goto yy1175;
+ goto yy53;
+yy1191:
+ YYDEBUG(1191, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != ':') goto yy53;
+ YYDEBUG(1192, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1193;
+ if (yych <= '6') goto yy1194;
+ if (yych <= '9') goto yy1025;
+ goto yy53;
+yy1193:
+ YYDEBUG(1193, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy1026;
+ if (yych <= '9') goto yy1195;
+ goto yy1026;
yy1194:
- YYDEBUG(1194, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '1') goto yy1195;
- if(yych <= '2') goto yy1196;
- if(yych <= '9') goto yy1197;
- goto yy53;
+ YYDEBUG(1194, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '0') goto yy1026;
yy1195:
- YYDEBUG(1195, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy1021;
- if(yych <= '9') goto yy1197;
- if(yych <= ':') goto yy1198;
- goto yy1021;
-yy1196:
- YYDEBUG(1196, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '5') {
- if(yych <= '/') goto yy1021;
- if(yych >= '4') goto yy1199;
- } else {
- if(yych <= '9') goto yy1020;
- if(yych <= ':') goto yy1198;
- goto yy1021;
- }
+ YYDEBUG(1195, *YYCURSOR);
+ yyaccept = 24;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych != '.') goto yy1026;
+ YYDEBUG(1196, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
yy1197:
- YYDEBUG(1197, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy1021;
- if(yych <= '5') goto yy1199;
- if(yych <= '9') goto yy1020;
- if(yych >= ';') goto yy1021;
-yy1198:
- YYDEBUG(1198, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy1021;
- if(yych <= '5') goto yy1199;
- if(yych <= '9') goto yy1020;
- goto yy1021;
+ YYDEBUG(1197, *YYCURSOR);
+ yyaccept = 24;
+ YYMARKER = ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 6) YYFILL(6);
+ yych = *YYCURSOR;
+ YYDEBUG(1198, *YYCURSOR);
+ if (yych <= ',') {
+ if (yych != '+') goto yy1026;
+ } else {
+ if (yych <= '-') goto yy1199;
+ if (yych <= '/') goto yy1026;
+ if (yych <= '9') goto yy1197;
+ goto yy1026;
+ }
yy1199:
- YYDEBUG(1199, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy1021;
- if(yych <= '9') goto yy1020;
- goto yy1021;
+ YYDEBUG(1199, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '1') goto yy1200;
+ if (yych <= '2') goto yy1201;
+ if (yych <= '9') goto yy1202;
+ goto yy53;
yy1200:
- YYDEBUG(1200, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'C') goto yy1201;
- if(yych != 'c') goto yy53;
+ YYDEBUG(1200, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy1026;
+ if (yych <= '9') goto yy1202;
+ if (yych <= ':') goto yy1203;
+ goto yy1026;
yy1201:
- YYDEBUG(1201, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'E') goto yy1058;
- if(yych == 'e') goto yy1058;
- goto yy972;
- }
+ YYDEBUG(1201, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '5') {
+ if (yych <= '/') goto yy1026;
+ if (yych >= '4') goto yy1204;
+ } else {
+ if (yych <= '9') goto yy1025;
+ if (yych <= ':') goto yy1203;
+ goto yy1026;
+ }
yy1202:
- YYDEBUG(1202, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'V') goto yy1203;
- if(yych != 'v') goto yy53;
+ YYDEBUG(1202, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy1026;
+ if (yych <= '5') goto yy1204;
+ if (yych <= '9') goto yy1025;
+ if (yych >= ';') goto yy1026;
yy1203:
- YYDEBUG(1203, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'E') goto yy1065;
- if(yych == 'e') goto yy1065;
- goto yy972;
- }
+ YYDEBUG(1203, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy1026;
+ if (yych <= '5') goto yy1204;
+ if (yych <= '9') goto yy1025;
+ goto yy1026;
yy1204:
- YYDEBUG(1204, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy1205;
- if(yych != 't') goto yy53;
+ YYDEBUG(1204, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy1026;
+ if (yych <= '9') goto yy1025;
+ goto yy1026;
yy1205:
- YYDEBUG(1205, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'O') goto yy1071;
- if(yych == 'o') goto yy1071;
- goto yy972;
- }
+ YYDEBUG(1205, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'C') goto yy1206;
+ if (yych != 'c') goto yy53;
yy1206:
- YYDEBUG(1206, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'P') goto yy1207;
- if(yych != 'p') goto yy53;
+ YYDEBUG(1206, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'E') goto yy1063;
+ if (yych == 'e') goto yy1063;
+ goto yy977;
+ }
yy1207:
- YYDEBUG(1207, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'T') goto yy1208;
- if(yych != 't') goto yy972;
- }
+ YYDEBUG(1207, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'V') goto yy1208;
+ if (yych != 'v') goto yy53;
yy1208:
- YYDEBUG(1208, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'E') goto yy1077;
- if(yych == 'e') goto yy1077;
- goto yy972;
- }
+ YYDEBUG(1208, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'E') goto yy1070;
+ if (yych == 'e') goto yy1070;
+ goto yy977;
+ }
yy1209:
- YYDEBUG(1209, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'G') goto yy1212;
- if(yych == 'g') goto yy1212;
- goto yy53;
+ YYDEBUG(1209, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy1210;
+ if (yych != 't') goto yy53;
yy1210:
- YYDEBUG(1210, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy1211;
- if(yych != 'r') goto yy53;
+ YYDEBUG(1210, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'O') goto yy1076;
+ if (yych == 'o') goto yy1076;
+ goto yy977;
+ }
yy1211:
- YYDEBUG(1211, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'H') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'I') goto yy1084;
- if(yych == 'i') goto yy1084;
- goto yy972;
- }
+ YYDEBUG(1211, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'P') goto yy1212;
+ if (yych != 'p') goto yy53;
yy1212:
- YYDEBUG(1212, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'U') goto yy1086;
- if(yych == 'u') goto yy1086;
- goto yy972;
- }
+ YYDEBUG(1212, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'T') goto yy1213;
+ if (yych != 't') goto yy977;
+ }
yy1213:
- YYDEBUG(1213, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Y') {
- if(yych == 'R') goto yy1214;
- if(yych <= 'X') goto yy53;
- goto yy1215;
- } else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy53;
- } else {
- if(yych == 'y') goto yy1215;
- goto yy53;
- }
- }
+ YYDEBUG(1213, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'E') goto yy1082;
+ if (yych == 'e') goto yy1082;
+ goto yy977;
+ }
yy1214:
- YYDEBUG(1214, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'B') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'C') goto yy1090;
- if(yych == 'c') goto yy1090;
- goto yy972;
- }
+ YYDEBUG(1214, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'G') goto yy1217;
+ if (yych == 'g') goto yy1217;
+ goto yy53;
yy1215:
- YYDEBUG(1215, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '-') goto yy945;
- goto yy972;
+ YYDEBUG(1215, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy1216;
+ if (yych != 'r') goto yy53;
yy1216:
- YYDEBUG(1216, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'B') goto yy1217;
- if(yych != 'b') goto yy53;
+ YYDEBUG(1216, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'H') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'I') goto yy1089;
+ if (yych == 'i') goto yy1089;
+ goto yy977;
+ }
yy1217:
- YYDEBUG(1217, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'Q') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'R') goto yy1093;
- if(yych == 'r') goto yy1093;
- goto yy972;
- }
+ YYDEBUG(1217, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'U') goto yy1091;
+ if (yych == 'u') goto yy1091;
+ goto yy977;
+ }
yy1218:
- YYDEBUG(1218, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych == 'L') goto yy1222;
- if(yych <= 'M') goto yy53;
- goto yy1221;
- } else {
- if(yych <= 'l') {
- if(yych <= 'k') goto yy53;
- goto yy1222;
- } else {
- if(yych == 'n') goto yy1221;
- goto yy53;
- }
+ YYDEBUG(1218, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Y') {
+ if (yych == 'R') goto yy1219;
+ if (yych <= 'X') goto yy53;
+ goto yy1220;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy53;
+ } else {
+ if (yych == 'y') goto yy1220;
+ goto yy53;
}
+ }
yy1219:
- YYDEBUG(1219, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy1220;
- if(yych != 'n') goto yy53;
+ YYDEBUG(1219, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'B') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'C') goto yy1095;
+ if (yych == 'c') goto yy1095;
+ goto yy977;
+ }
yy1220:
- YYDEBUG(1220, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'U') goto yy1100;
- if(yych == 'u') goto yy1100;
- goto yy972;
- }
+ YYDEBUG(1220, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '-') goto yy950;
+ goto yy977;
yy1221:
- YYDEBUG(1221, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'E') goto yy1062;
- if(yych == 'e') goto yy1062;
- goto yy972;
- }
+ YYDEBUG(1221, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'B') goto yy1222;
+ if (yych != 'b') goto yy53;
yy1222:
- YYDEBUG(1222, *YYCURSOR);
- yyaccept = 21;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'X') {
- if(yych == '-') goto yy945;
- goto yy972;
- } else {
- if(yych <= 'Y') goto yy1062;
- if(yych == 'y') goto yy1062;
- goto yy972;
- }
+ YYDEBUG(1222, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'Q') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'R') goto yy1098;
+ if (yych == 'r') goto yy1098;
+ goto yy977;
+ }
yy1223:
- YYDEBUG(1223, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy767;
- goto yy915;
- } else {
- if(yych <= ',') goto yy767;
- if(yych <= '.') goto yy915;
- goto yy914;
- }
+ YYDEBUG(1223, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych == 'L') goto yy1227;
+ if (yych <= 'M') goto yy53;
+ goto yy1226;
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'k') goto yy53;
+ goto yy1227;
} else {
- if(yych <= 'U') {
- if(yych <= 'T') goto yy767;
- goto yy74;
- } else {
- if(yych == 'u') goto yy74;
- goto yy767;
- }
+ if (yych == 'n') goto yy1226;
+ goto yy53;
}
+ }
yy1224:
- YYDEBUG(1224, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'P') {
- if(yych == 'C') goto yy125;
- if(yych <= 'O') goto yy53;
- goto yy775;
- } else {
- if(yych <= 'c') {
- if(yych <= 'b') goto yy53;
- goto yy125;
- } else {
- if(yych == 'p') goto yy775;
- goto yy53;
- }
- }
+ YYDEBUG(1224, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy1225;
+ if (yych != 'n') goto yy53;
yy1225:
- YYDEBUG(1225, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '9') {
- if(yych <= ',') {
- if(yych == 0x09) goto yy1227;
- goto yy1229;
- } else {
- if(yych <= '-') goto yy1226;
- if(yych <= '.') goto yy915;
- if(yych <= '/') goto yy914;
- goto yy919;
- }
- } else {
- if(yych <= 'q') {
- if(yych == 'n') goto yy675;
- goto yy1229;
- } else {
- if(yych <= 'r') goto yy676;
- if(yych <= 's') goto yy669;
- if(yych <= 't') goto yy673;
- goto yy1229;
- }
- }
+ YYDEBUG(1225, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'U') goto yy1105;
+ if (yych == 'u') goto yy1105;
+ goto yy977;
+ }
yy1226:
- YYDEBUG(1226, *YYCURSOR);
- yych = *++YYCURSOR;
- YYDEBUG(-1, yych);
- switch(yych) {
- case '0': goto yy1230;
- case '1': goto yy1231;
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy805;
- case 'A':
- case 'a': goto yy809;
- case 'D':
- case 'd': goto yy813;
- case 'F':
- case 'f': goto yy807;
- case 'J':
- case 'j': goto yy806;
- case 'M':
- case 'm': goto yy808;
- case 'N':
- case 'n': goto yy812;
- case 'O':
- case 'o': goto yy811;
- case 'S':
- case 's': goto yy810;
- default: goto yy767;
- }
+ YYDEBUG(1226, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'E') goto yy1067;
+ if (yych == 'e') goto yy1067;
+ goto yy977;
+ }
yy1227:
- YYDEBUG(1227, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy1229;
- if(yych <= '0') goto yy916;
- if(yych <= '1') goto yy917;
- if(yych <= '9') goto yy918;
- goto yy1229;
+ YYDEBUG(1227, *YYCURSOR);
+ yyaccept = 21;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'X') {
+ if (yych == '-') goto yy950;
+ goto yy977;
+ } else {
+ if (yych <= 'Y') goto yy1067;
+ if (yych == 'y') goto yy1067;
+ goto yy977;
+ }
yy1228:
- YYDEBUG(1228, *YYCURSOR);
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 13) YYFILL(13);
- yych = *YYCURSOR;
+ YYDEBUG(1228, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '.') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy765;
+ goto yy914;
+ } else {
+ if (yych <= ',') goto yy765;
+ if (yych <= '-') goto yy915;
+ goto yy914;
+ }
+ } else {
+ if (yych <= 'U') {
+ if (yych <= '/') goto yy913;
+ if (yych <= 'T') goto yy765;
+ goto yy74;
+ } else {
+ if (yych == 'u') goto yy74;
+ goto yy765;
+ }
+ }
yy1229:
- YYDEBUG(1229, *YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09:
- case ' ': goto yy1228;
- case '-':
- case '.': goto yy766;
- case 'A':
- case 'a': goto yy763;
- case 'D':
- case 'd': goto yy671;
- case 'F':
- case 'f': goto yy672;
- case 'H':
- case 'h': goto yy60;
- case 'I': goto yy680;
- case 'J':
- case 'j': goto yy684;
- case 'M':
- case 'm': goto yy670;
- case 'N':
- case 'n': goto yy687;
- case 'O':
- case 'o': goto yy686;
- case 'S':
- case 's': goto yy668;
- case 'T':
- case 't': goto yy65;
- case 'V': goto yy682;
- case 'W':
- case 'w': goto yy62;
- case 'X': goto yy683;
- case 'Y':
- case 'y': goto yy64;
- default: goto yy53;
+ YYDEBUG(1229, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'P') {
+ if (yych == 'C') goto yy125;
+ if (yych <= 'O') goto yy53;
+ goto yy773;
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'b') goto yy53;
+ goto yy125;
+ } else {
+ if (yych == 'p') goto yy773;
+ goto yy53;
}
+ }
yy1230:
- YYDEBUG(1230, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '.') {
- if(yych <= ',') goto yy53;
- if(yych <= '-') goto yy842;
- goto yy790;
- } else {
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1232;
- goto yy53;
+ YYDEBUG(1230, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '9') {
+ if (yych <= ',') {
+ if (yych == '\t') goto yy1232;
+ goto yy1234;
+ } else {
+ if (yych <= '-') goto yy1231;
+ if (yych <= '.') goto yy914;
+ if (yych <= '/') goto yy913;
+ goto yy924;
}
-yy1231:
- YYDEBUG(1231, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '.') {
- if(yych <= ',') goto yy53;
- if(yych <= '-') goto yy842;
- goto yy790;
+ } else {
+ if (yych <= 'q') {
+ if (yych == 'n') goto yy673;
+ goto yy1234;
} else {
- if(yych <= '/') goto yy53;
- if(yych >= '3') goto yy53;
+ if (yych <= 'r') goto yy674;
+ if (yych <= 's') goto yy667;
+ if (yych <= 't') goto yy671;
+ goto yy1234;
}
+ }
+yy1231:
+ YYDEBUG(1231, *YYCURSOR);
+ yych = *++YYCURSOR;
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '0': goto yy1235;
+ case '1': goto yy1236;
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9': goto yy804;
+ case 'A':
+ case 'a': goto yy808;
+ case 'D':
+ case 'd': goto yy812;
+ case 'F':
+ case 'f': goto yy806;
+ case 'J':
+ case 'j': goto yy805;
+ case 'M':
+ case 'm': goto yy807;
+ case 'N':
+ case 'n': goto yy811;
+ case 'O':
+ case 'o': goto yy810;
+ case 'S':
+ case 's': goto yy809;
+ default: goto yy765;
+ }
yy1232:
- YYDEBUG(1232, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= ',') goto yy53;
- if(yych <= '-') goto yy1233;
- if(yych <= '.') goto yy790;
- goto yy53;
+ YYDEBUG(1232, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy1234;
+ if (yych <= '0') goto yy919;
+ if (yych <= '1') goto yy920;
+ if (yych <= '9') goto yy921;
+ goto yy1234;
yy1233:
- YYDEBUG(1233, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '2') {
- if(yych <= '/') goto yy53;
- if(yych >= '1') goto yy1235;
- } else {
- if(yych <= '3') goto yy1236;
- if(yych <= '9') goto yy846;
- goto yy53;
- }
- YYDEBUG(1234, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy844;
- if(yych <= '9') goto yy1237;
- if(yych <= 'm') goto yy844;
+ YYDEBUG(1233, *YYCURSOR);
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 13) YYFILL(13);
+ yych = *YYCURSOR;
+yy1234:
+ YYDEBUG(1234, *YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t':
+ case ' ': goto yy1233;
+ case '-':
+ case '.': goto yy764;
+ case 'A':
+ case 'a': goto yy761;
+ case 'D':
+ case 'd': goto yy669;
+ case 'F':
+ case 'f': goto yy670;
+ case 'H':
+ case 'h': goto yy60;
+ case 'I': goto yy678;
+ case 'J':
+ case 'j': goto yy682;
+ case 'M':
+ case 'm': goto yy668;
+ case 'N':
+ case 'n': goto yy685;
+ case 'O':
+ case 'o': goto yy684;
+ case 'S':
+ case 's': goto yy666;
+ case 'T':
+ case 't': goto yy65;
+ case 'V': goto yy680;
+ case 'W':
+ case 'w': goto yy62;
+ case 'X': goto yy681;
+ case 'Y':
+ case 'y': goto yy64;
+ default: goto yy53;
+ }
+yy1235:
+ YYDEBUG(1235, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '.') {
+ if (yych <= ',') goto yy53;
+ if (yych <= '-') goto yy841;
+ goto yy789;
+ } else {
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1237;
+ goto yy53;
+ }
+yy1236:
+ YYDEBUG(1236, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '.') {
+ if (yych <= ',') goto yy53;
+ if (yych <= '-') goto yy841;
+ goto yy789;
+ } else {
+ if (yych <= '/') goto yy53;
+ if (yych >= '3') goto yy53;
+ }
+yy1237:
+ YYDEBUG(1237, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= ',') goto yy53;
+ if (yych <= '-') goto yy1238;
+ if (yych <= '.') goto yy789;
+ goto yy53;
+yy1238:
+ YYDEBUG(1238, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '2') {
+ if (yych <= '/') goto yy53;
+ if (yych >= '1') goto yy1240;
+ } else {
+ if (yych <= '3') goto yy1241;
+ if (yych <= '9') goto yy845;
+ goto yy53;
+ }
+ YYDEBUG(1239, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy843;
+ if (yych <= '9') goto yy1242;
+ if (yych <= 'm') goto yy843;
+ goto yy847;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
goto yy848;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
}
-yy1235:
- YYDEBUG(1235, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy844;
- if(yych <= '9') goto yy1237;
- if(yych <= 'm') goto yy844;
+ }
+yy1240:
+ YYDEBUG(1240, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy843;
+ if (yych <= '9') goto yy1242;
+ if (yych <= 'm') goto yy843;
+ goto yy847;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
goto yy848;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
}
-yy1236:
- YYDEBUG(1236, *YYCURSOR);
- yyaccept = 14;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '1') {
- if(yych <= '/') goto yy844;
- } else {
- if(yych <= '9') goto yy795;
- if(yych <= 'm') goto yy844;
- goto yy848;
- }
+ }
+yy1241:
+ YYDEBUG(1241, *YYCURSOR);
+ yyaccept = 14;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '1') {
+ if (yych <= '/') goto yy843;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy844;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy844;
- }
+ if (yych <= '9') goto yy791;
+ if (yych <= 'm') goto yy843;
+ goto yy847;
}
-yy1237:
- YYDEBUG(1237, *YYCURSOR);
- yyaccept = 16;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'n') {
- if(yych <= '/') goto yy942;
- if(yych <= '9') goto yy797;
- if(yych <= 'm') goto yy942;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy843;
goto yy848;
} else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy942;
- goto yy849;
- } else {
- if(yych <= 's') goto yy847;
- if(yych <= 't') goto yy850;
- goto yy942;
- }
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy843;
}
-yy1238:
- YYDEBUG(1238, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '9') {
- if(yych <= '-') {
- if(yych == 0x09) goto yy1227;
- if(yych <= ',') goto yy1229;
- goto yy1226;
- } else {
- if(yych <= '.') goto yy1239;
- if(yych <= '/') goto yy914;
- if(yych <= '5') goto yy1241;
- goto yy919;
- }
- } else {
- if(yych <= 'q') {
- if(yych <= ':') goto yy1240;
- if(yych == 'n') goto yy675;
- goto yy1229;
- } else {
- if(yych <= 'r') goto yy676;
- if(yych <= 's') goto yy669;
- if(yych <= 't') goto yy673;
- goto yy1229;
- }
- }
-yy1239:
- YYDEBUG(1239, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '1') {
- if(yych <= '/') goto yy767;
- if(yych <= '0') goto yy1263;
- goto yy1264;
- } else {
- if(yych <= '5') goto yy1265;
- if(yych <= '9') goto yy1266;
- goto yy767;
- }
-yy1240:
- YYDEBUG(1240, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1258;
- if(yych <= '9') goto yy1259;
- goto yy53;
-yy1241:
- YYDEBUG(1241, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '-') goto yy963;
- if(yych <= '/') goto yy57;
- if(yych >= ':') goto yy57;
- YYDEBUG(1242, *YYCURSOR);
- yyaccept = 25;
- yych = *(YYMARKER = ++YYCURSOR);
- YYDEBUG(-1, yych);
- switch(yych) {
- case 0x09:
- case ' ':
- case 'A':
- case 'D':
- case 'F':
- case 'H':
- case 'I':
- case 'J':
- case 'M':
- case 'N':
- case 'O':
- case 'S':
- case 'T':
- case 'V':
- case 'X':
- case 'Y':
- case 'a':
- case 'd':
- case 'f':
- case 'h':
- case 'j':
- case 'm':
- case 'n':
- case 'o':
- case 's':
- case 't':
- case 'w':
- case 'y': goto yy969;
- case '-': goto yy966;
- case '.': goto yy970;
- case '/': goto yy967;
- case '0': goto yy1244;
- case '1': goto yy1245;
- case '2': goto yy1246;
- case '3': goto yy1247;
- case '4':
- case '5': goto yy1248;
- case '6': goto yy1249;
- case '7':
- case '8':
- case '9': goto yy51;
- case ':': goto yy985;
- case 'W': goto yy988;
- default: goto yy1243;
+ }
+yy1242:
+ YYDEBUG(1242, *YYCURSOR);
+ yyaccept = 16;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'n') {
+ if (yych <= '/') goto yy947;
+ if (yych <= '9') goto yy792;
+ if (yych <= 'm') goto yy947;
+ goto yy847;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy947;
+ goto yy848;
+ } else {
+ if (yych <= 's') goto yy846;
+ if (yych <= 't') goto yy849;
+ goto yy947;
}
+ }
yy1243:
- YYDEBUG(1243, *YYCURSOR);
+ YYDEBUG(1243, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '9') {
+ if (yych <= '-') {
+ if (yych == '\t') goto yy1232;
+ if (yych <= ',') goto yy1234;
+ goto yy1231;
+ } else {
+ if (yych <= '.') goto yy1244;
+ if (yych <= '/') goto yy913;
+ if (yych <= '5') goto yy1246;
+ goto yy924;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= ':') goto yy1245;
+ if (yych == 'n') goto yy673;
+ goto yy1234;
+ } else {
+ if (yych <= 'r') goto yy674;
+ if (yych <= 's') goto yy667;
+ if (yych <= 't') goto yy671;
+ goto yy1234;
+ }
+ }
+yy1244:
+ YYDEBUG(1244, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '1') {
+ if (yych <= '/') goto yy765;
+ if (yych <= '0') goto yy1268;
+ goto yy1269;
+ } else {
+ if (yych <= '5') goto yy1270;
+ if (yych <= '9') goto yy1271;
+ goto yy765;
+ }
+yy1245:
+ YYDEBUG(1245, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1263;
+ if (yych <= '9') goto yy1264;
+ goto yy53;
+yy1246:
+ YYDEBUG(1246, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '-') goto yy968;
+ if (yych <= '/') goto yy57;
+ if (yych >= ':') goto yy57;
+ YYDEBUG(1247, *YYCURSOR);
+ yyaccept = 25;
+ yych = *(YYMARKER = ++YYCURSOR);
+ YYDEBUG(-1, yych);
+ switch (yych) {
+ case '\t':
+ case ' ':
+ case 'A':
+ case 'D':
+ case 'F':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'S':
+ case 'T':
+ case 'V':
+ case 'X':
+ case 'Y':
+ case 'a':
+ case 'd':
+ case 'f':
+ case 'h':
+ case 'j':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 's':
+ case 't':
+ case 'w':
+ case 'y': goto yy974;
+ case '-': goto yy971;
+ case '.': goto yy975;
+ case '/': goto yy972;
+ case '0': goto yy1249;
+ case '1': goto yy1250;
+ case '2': goto yy1251;
+ case '3': goto yy1252;
+ case '4':
+ case '5': goto yy1253;
+ case '6': goto yy1254;
+ case '7':
+ case '8':
+ case '9': goto yy51;
+ case ':': goto yy990;
+ case 'W': goto yy993;
+ default: goto yy1248;
+ }
+yy1248:
+ YYDEBUG(1248, *YYCURSOR);
#line 1016 "ext/date/lib/parse_date.re"
- {
+ {
DEBUG_OUTPUT("gnunocolon");
TIMELIB_INIT;
switch (s->time->have_time) {
@@ -18580,100 +18592,100 @@ yy1243:
TIMELIB_DEINIT;
return TIMELIB_GNU_NOCOLON;
}
-#line 18584 "ext/date/lib/parse_date.c"
-yy1244:
- YYDEBUG(1244, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '0') goto yy1256;
- if(yych <= '9') goto yy1257;
- goto yy57;
-yy1245:
- YYDEBUG(1245, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '2') goto yy1255;
- if(yych <= '9') goto yy1254;
- goto yy57;
-yy1246:
- YYDEBUG(1246, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '9') goto yy1254;
- goto yy57;
-yy1247:
- YYDEBUG(1247, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '5') goto yy1252;
- if(yych <= '6') goto yy1253;
- if(yych <= '9') goto yy1250;
- goto yy57;
-yy1248:
- YYDEBUG(1248, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '9') goto yy1250;
- goto yy57;
+#line 18596 "ext/date/lib/parse_date.c"
yy1249:
- YYDEBUG(1249, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy57;
- if(yych <= '0') goto yy1250;
- if(yych <= '9') goto yy51;
- goto yy57;
+ YYDEBUG(1249, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '0') goto yy1261;
+ if (yych <= '9') goto yy1262;
+ goto yy57;
yy1250:
- YYDEBUG(1250, *YYCURSOR);
- yyaccept = 26;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yybm[0+yych] & 4) {
- goto yy51;
- }
- if(yych <= 'W') {
- if(yych <= 'F') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych >= ' ') goto yy57;
- } else {
- if(yych == 'D') goto yy57;
- if(yych >= 'F') goto yy57;
- }
+ YYDEBUG(1250, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '2') goto yy1260;
+ if (yych <= '9') goto yy1259;
+ goto yy57;
+yy1251:
+ YYDEBUG(1251, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '9') goto yy1259;
+ goto yy57;
+yy1252:
+ YYDEBUG(1252, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '5') goto yy1257;
+ if (yych <= '6') goto yy1258;
+ if (yych <= '9') goto yy1255;
+ goto yy57;
+yy1253:
+ YYDEBUG(1253, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '9') goto yy1255;
+ goto yy57;
+yy1254:
+ YYDEBUG(1254, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy57;
+ if (yych <= '0') goto yy1255;
+ if (yych <= '9') goto yy51;
+ goto yy57;
+yy1255:
+ YYDEBUG(1255, *YYCURSOR);
+ yyaccept = 26;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yybm[0+yych] & 4) {
+ goto yy51;
+ }
+ if (yych <= 'W') {
+ if (yych <= 'F') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych >= ' ') goto yy57;
} else {
- if(yych <= 'M') {
- if(yych == 'H') goto yy57;
- if(yych >= 'M') goto yy57;
- } else {
- if(yych <= 'R') goto yy1251;
- if(yych <= 'T') goto yy57;
- if(yych >= 'W') goto yy57;
- }
+ if (yych == 'D') goto yy57;
+ if (yych >= 'F') goto yy57;
}
} else {
- if(yych <= 'h') {
- if(yych <= 'd') {
- if(yych == 'Y') goto yy57;
- if(yych >= 'd') goto yy57;
- } else {
- if(yych == 'f') goto yy57;
- if(yych >= 'h') goto yy57;
- }
+ if (yych <= 'M') {
+ if (yych == 'H') goto yy57;
+ if (yych >= 'M') goto yy57;
+ } else {
+ if (yych <= 'R') goto yy1256;
+ if (yych <= 'T') goto yy57;
+ if (yych >= 'W') goto yy57;
+ }
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'd') {
+ if (yych == 'Y') goto yy57;
+ if (yych >= 'd') goto yy57;
+ } else {
+ if (yych == 'f') goto yy57;
+ if (yych >= 'h') goto yy57;
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych >= 's') goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych >= 's') goto yy57;
+ if (yych <= 'w') {
+ if (yych >= 'w') goto yy57;
} else {
- if(yych <= 'w') {
- if(yych >= 'w') goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- }
+ if (yych == 'y') goto yy57;
}
}
}
-yy1251:
- YYDEBUG(1251, *YYCURSOR);
+ }
+yy1256:
+ YYDEBUG(1256, *YYCURSOR);
#line 1062 "ext/date/lib/parse_date.re"
- {
+ {
int tz_not_found;
DEBUG_OUTPUT("iso8601nocolon");
TIMELIB_INIT;
@@ -18691,628 +18703,628 @@ yy1251:
TIMELIB_DEINIT;
return TIMELIB_ISO_NOCOLON;
}
-#line 18695 "ext/date/lib/parse_date.c"
-yy1252:
- YYDEBUG(1252, *YYCURSOR);
- yyaccept = 26;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy1251;
+#line 18707 "ext/date/lib/parse_date.c"
+yy1257:
+ YYDEBUG(1257, *YYCURSOR);
+ yyaccept = 26;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy1256;
+ goto yy57;
+ } else {
+ if (yych <= '/') goto yy1256;
+ if (yych <= '9') goto yy1004;
+ if (yych <= 'C') goto yy1256;
+ goto yy57;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy1256;
+ goto yy57;
+ } else {
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy1256;
goto yy57;
} else {
- if(yych <= '/') goto yy1251;
- if(yych <= '9') goto yy999;
- if(yych <= 'C') goto yy1251;
- goto yy57;
+ if (yych <= 'R') goto yy1256;
+ if (yych <= 'T') goto yy57;
+ goto yy1256;
}
+ }
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy1256;
+ if (yych <= 'Y') goto yy57;
+ goto yy1256;
} else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy1251;
- goto yy57;
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
+ goto yy1256;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy1251;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy1251;
- if(yych <= 'T') goto yy57;
- goto yy1251;
- }
+ if (yych == 'g') goto yy1256;
+ goto yy57;
}
}
} else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy1251;
- if(yych <= 'Y') goto yy57;
- goto yy1251;
- } else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy1251;
- } else {
- if(yych == 'g') goto yy1251;
- goto yy57;
- }
- }
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy1256;
+ goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy1251;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy1256;
goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy1251;
- }
+ if (yych == 'y') goto yy57;
+ goto yy1256;
}
}
}
-yy1253:
- YYDEBUG(1253, *YYCURSOR);
- yyaccept = 26;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy1251;
+ }
+yy1258:
+ YYDEBUG(1258, *YYCURSOR);
+ yyaccept = 26;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy1256;
+ goto yy57;
+ } else {
+ if (yych <= '6') {
+ if (yych <= '/') goto yy1256;
+ goto yy1004;
+ } else {
+ if (yych <= '9') goto yy51;
+ if (yych <= 'C') goto yy1256;
goto yy57;
- } else {
- if(yych <= '6') {
- if(yych <= '/') goto yy1251;
- goto yy999;
- } else {
- if(yych <= '9') goto yy51;
- if(yych <= 'C') goto yy1251;
- goto yy57;
- }
}
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy1256;
+ goto yy57;
} else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy1251;
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy1256;
goto yy57;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy1251;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy1251;
- if(yych <= 'T') goto yy57;
- goto yy1251;
- }
+ if (yych <= 'R') goto yy1256;
+ if (yych <= 'T') goto yy57;
+ goto yy1256;
}
}
- } else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy1251;
- if(yych <= 'Y') goto yy57;
- goto yy1251;
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy1256;
+ if (yych <= 'Y') goto yy57;
+ goto yy1256;
+ } else {
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
+ goto yy1256;
} else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy1251;
- } else {
- if(yych == 'g') goto yy1251;
- goto yy57;
- }
+ if (yych == 'g') goto yy1256;
+ goto yy57;
}
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy1256;
+ goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy1251;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy1256;
goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy1251;
- }
+ if (yych == 'y') goto yy57;
+ goto yy1256;
}
}
}
-yy1254:
- YYDEBUG(1254, *YYCURSOR);
- yyaccept = 26;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'V') {
- if(yych <= 'D') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy1251;
+ }
+yy1259:
+ YYDEBUG(1259, *YYCURSOR);
+ yyaccept = 26;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'V') {
+ if (yych <= 'D') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy1256;
+ goto yy57;
+ } else {
+ if (yych <= '/') goto yy1256;
+ if (yych <= '9') goto yy1004;
+ if (yych <= 'C') goto yy1256;
+ goto yy57;
+ }
+ } else {
+ if (yych <= 'H') {
+ if (yych == 'F') goto yy57;
+ if (yych <= 'G') goto yy1256;
+ goto yy57;
+ } else {
+ if (yych <= 'M') {
+ if (yych <= 'L') goto yy1256;
goto yy57;
} else {
- if(yych <= '/') goto yy1251;
- if(yych <= '9') goto yy999;
- if(yych <= 'C') goto yy1251;
- goto yy57;
+ if (yych <= 'R') goto yy1256;
+ if (yych <= 'T') goto yy57;
+ goto yy1256;
}
+ }
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'c') {
+ if (yych == 'X') goto yy1256;
+ if (yych <= 'Y') goto yy57;
+ goto yy1256;
} else {
- if(yych <= 'H') {
- if(yych == 'F') goto yy57;
- if(yych <= 'G') goto yy1251;
- goto yy57;
+ if (yych <= 'e') {
+ if (yych <= 'd') goto yy57;
+ goto yy1256;
} else {
- if(yych <= 'M') {
- if(yych <= 'L') goto yy1251;
- goto yy57;
- } else {
- if(yych <= 'R') goto yy1251;
- if(yych <= 'T') goto yy57;
- goto yy1251;
- }
+ if (yych == 'g') goto yy1256;
+ goto yy57;
}
}
} else {
- if(yych <= 'h') {
- if(yych <= 'c') {
- if(yych == 'X') goto yy1251;
- if(yych <= 'Y') goto yy57;
- goto yy1251;
- } else {
- if(yych <= 'e') {
- if(yych <= 'd') goto yy57;
- goto yy1251;
- } else {
- if(yych == 'g') goto yy1251;
- goto yy57;
- }
- }
+ if (yych <= 't') {
+ if (yych == 'm') goto yy57;
+ if (yych <= 'r') goto yy1256;
+ goto yy57;
} else {
- if(yych <= 't') {
- if(yych == 'm') goto yy57;
- if(yych <= 'r') goto yy1251;
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy1256;
goto yy57;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy1251;
- }
+ if (yych == 'y') goto yy57;
+ goto yy1256;
}
}
}
-yy1255:
- YYDEBUG(1255, *YYCURSOR);
- yyaccept = 26;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '9') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy1251;
- goto yy57;
- } else {
- if(yych <= '0') {
- if(yych <= '/') goto yy1251;
- goto yy1023;
- } else {
- if(yych <= '2') goto yy1024;
- if(yych <= '3') goto yy1025;
- goto yy999;
- }
- }
+ }
+yy1260:
+ YYDEBUG(1260, *YYCURSOR);
+ yyaccept = 26;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '9') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy1256;
+ goto yy57;
} else {
- if(yych <= 'G') {
- if(yych <= 'D') {
- if(yych <= 'C') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'F') goto yy57;
- goto yy1251;
- }
+ if (yych <= '0') {
+ if (yych <= '/') goto yy1256;
+ goto yy1028;
} else {
- if(yych <= 'L') {
- if(yych <= 'H') goto yy57;
- goto yy1251;
- } else {
- if(yych <= 'M') goto yy57;
- if(yych <= 'R') goto yy1251;
- goto yy57;
- }
+ if (yych <= '2') goto yy1029;
+ if (yych <= '3') goto yy1030;
+ goto yy1004;
}
}
} else {
- if(yych <= 'g') {
- if(yych <= 'Y') {
- if(yych == 'W') goto yy57;
- if(yych <= 'X') goto yy1251;
+ if (yych <= 'G') {
+ if (yych <= 'D') {
+ if (yych <= 'C') goto yy1256;
goto yy57;
} else {
- if(yych <= 'd') {
- if(yych <= 'c') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'f') goto yy57;
- goto yy1251;
- }
+ if (yych == 'F') goto yy57;
+ goto yy1256;
}
} else {
- if(yych <= 't') {
- if(yych <= 'l') {
- if(yych <= 'h') goto yy57;
- goto yy1251;
- } else {
- if(yych <= 'm') goto yy57;
- if(yych <= 'r') goto yy1251;
- goto yy57;
- }
+ if (yych <= 'L') {
+ if (yych <= 'H') goto yy57;
+ goto yy1256;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy1251;
- }
+ if (yych <= 'M') goto yy57;
+ if (yych <= 'R') goto yy1256;
+ goto yy57;
}
}
}
-yy1256:
- YYDEBUG(1256, *YYCURSOR);
- yyaccept = 26;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '9') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy1251;
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Y') {
+ if (yych == 'W') goto yy57;
+ if (yych <= 'X') goto yy1256;
+ goto yy57;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'c') goto yy1256;
goto yy57;
} else {
- if(yych <= '0') {
- if(yych <= '/') goto yy1251;
- goto yy1055;
- } else {
- if(yych <= '2') goto yy1024;
- if(yych <= '3') goto yy1025;
- goto yy999;
- }
+ if (yych == 'f') goto yy57;
+ goto yy1256;
+ }
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych <= 'l') {
+ if (yych <= 'h') goto yy57;
+ goto yy1256;
+ } else {
+ if (yych <= 'm') goto yy57;
+ if (yych <= 'r') goto yy1256;
+ goto yy57;
}
} else {
- if(yych <= 'G') {
- if(yych <= 'D') {
- if(yych <= 'C') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'F') goto yy57;
- goto yy1251;
- }
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy1256;
+ goto yy57;
} else {
- if(yych <= 'L') {
- if(yych <= 'H') goto yy57;
- goto yy1251;
- } else {
- if(yych <= 'M') goto yy57;
- if(yych <= 'R') goto yy1251;
- goto yy57;
- }
+ if (yych == 'y') goto yy57;
+ goto yy1256;
+ }
+ }
+ }
+ }
+yy1261:
+ YYDEBUG(1261, *YYCURSOR);
+ yyaccept = 26;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '9') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy1256;
+ goto yy57;
+ } else {
+ if (yych <= '0') {
+ if (yych <= '/') goto yy1256;
+ goto yy1060;
+ } else {
+ if (yych <= '2') goto yy1029;
+ if (yych <= '3') goto yy1030;
+ goto yy1004;
}
}
} else {
- if(yych <= 'g') {
- if(yych <= 'Y') {
- if(yych == 'W') goto yy57;
- if(yych <= 'X') goto yy1251;
+ if (yych <= 'G') {
+ if (yych <= 'D') {
+ if (yych <= 'C') goto yy1256;
goto yy57;
} else {
- if(yych <= 'd') {
- if(yych <= 'c') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'f') goto yy57;
- goto yy1251;
- }
+ if (yych == 'F') goto yy57;
+ goto yy1256;
}
} else {
- if(yych <= 't') {
- if(yych <= 'l') {
- if(yych <= 'h') goto yy57;
- goto yy1251;
- } else {
- if(yych <= 'm') goto yy57;
- if(yych <= 'r') goto yy1251;
- goto yy57;
- }
+ if (yych <= 'L') {
+ if (yych <= 'H') goto yy57;
+ goto yy1256;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy1251;
- }
+ if (yych <= 'M') goto yy57;
+ if (yych <= 'R') goto yy1256;
+ goto yy57;
}
}
}
-yy1257:
- YYDEBUG(1257, *YYCURSOR);
- yyaccept = 26;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '9') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy57;
- if(yych <= 0x1F) goto yy1251;
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Y') {
+ if (yych == 'W') goto yy57;
+ if (yych <= 'X') goto yy1256;
+ goto yy57;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'c') goto yy1256;
goto yy57;
} else {
- if(yych <= '0') {
- if(yych <= '/') goto yy1251;
- goto yy1023;
- } else {
- if(yych <= '2') goto yy1024;
- if(yych <= '3') goto yy1025;
- goto yy999;
- }
+ if (yych == 'f') goto yy57;
+ goto yy1256;
+ }
+ }
+ } else {
+ if (yych <= 't') {
+ if (yych <= 'l') {
+ if (yych <= 'h') goto yy57;
+ goto yy1256;
+ } else {
+ if (yych <= 'm') goto yy57;
+ if (yych <= 'r') goto yy1256;
+ goto yy57;
}
} else {
- if(yych <= 'G') {
- if(yych <= 'D') {
- if(yych <= 'C') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'F') goto yy57;
- goto yy1251;
- }
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy1256;
+ goto yy57;
} else {
- if(yych <= 'L') {
- if(yych <= 'H') goto yy57;
- goto yy1251;
- } else {
- if(yych <= 'M') goto yy57;
- if(yych <= 'R') goto yy1251;
- goto yy57;
- }
+ if (yych == 'y') goto yy57;
+ goto yy1256;
+ }
+ }
+ }
+ }
+yy1262:
+ YYDEBUG(1262, *YYCURSOR);
+ yyaccept = 26;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '9') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy57;
+ if (yych <= 0x1F) goto yy1256;
+ goto yy57;
+ } else {
+ if (yych <= '0') {
+ if (yych <= '/') goto yy1256;
+ goto yy1028;
+ } else {
+ if (yych <= '2') goto yy1029;
+ if (yych <= '3') goto yy1030;
+ goto yy1004;
}
}
} else {
- if(yych <= 'g') {
- if(yych <= 'Y') {
- if(yych == 'W') goto yy57;
- if(yych <= 'X') goto yy1251;
+ if (yych <= 'G') {
+ if (yych <= 'D') {
+ if (yych <= 'C') goto yy1256;
goto yy57;
} else {
- if(yych <= 'd') {
- if(yych <= 'c') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'f') goto yy57;
- goto yy1251;
- }
+ if (yych == 'F') goto yy57;
+ goto yy1256;
}
} else {
- if(yych <= 't') {
- if(yych <= 'l') {
- if(yych <= 'h') goto yy57;
- goto yy1251;
- } else {
- if(yych <= 'm') goto yy57;
- if(yych <= 'r') goto yy1251;
- goto yy57;
- }
+ if (yych <= 'L') {
+ if (yych <= 'H') goto yy57;
+ goto yy1256;
} else {
- if(yych <= 'w') {
- if(yych <= 'v') goto yy1251;
- goto yy57;
- } else {
- if(yych == 'y') goto yy57;
- goto yy1251;
- }
+ if (yych <= 'M') goto yy57;
+ if (yych <= 'R') goto yy1256;
+ goto yy57;
}
}
}
-yy1258:
- YYDEBUG(1258, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy1260;
- goto yy696;
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Y') {
+ if (yych == 'W') goto yy57;
+ if (yych <= 'X') goto yy1256;
+ goto yy57;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'c') goto yy1256;
+ goto yy57;
+ } else {
+ if (yych == 'f') goto yy57;
+ goto yy1256;
+ }
+ }
} else {
- if(yych <= '9') goto yy1259;
- if(yych <= ':') goto yy1260;
- goto yy696;
+ if (yych <= 't') {
+ if (yych <= 'l') {
+ if (yych <= 'h') goto yy57;
+ goto yy1256;
+ } else {
+ if (yych <= 'm') goto yy57;
+ if (yych <= 'r') goto yy1256;
+ goto yy57;
+ }
+ } else {
+ if (yych <= 'w') {
+ if (yych <= 'v') goto yy1256;
+ goto yy57;
+ } else {
+ if (yych == 'y') goto yy57;
+ goto yy1256;
+ }
+ }
}
-yy1259:
- YYDEBUG(1259, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy1260;
- if(yych != ':') goto yy696;
-yy1260:
- YYDEBUG(1260, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1261;
- if(yych <= '6') goto yy1262;
- if(yych <= '9') goto yy701;
- goto yy53;
-yy1261:
- YYDEBUG(1261, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy702;
- if(yych <= '/') goto yy696;
- if(yych <= '9') goto yy701;
- goto yy696;
-yy1262:
- YYDEBUG(1262, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy702;
- if(yych == '0') goto yy701;
- goto yy696;
+ }
yy1263:
- YYDEBUG(1263, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ',') goto yy696;
- if(yych <= '-') goto yy790;
- goto yy1267;
- } else {
- if(yych <= '/') goto yy696;
- if(yych <= '9') goto yy1266;
- if(yych <= ':') goto yy1260;
- goto yy696;
- }
+ YYDEBUG(1263, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy1265;
+ goto yy694;
+ } else {
+ if (yych <= '9') goto yy1264;
+ if (yych <= ':') goto yy1265;
+ goto yy694;
+ }
yy1264:
- YYDEBUG(1264, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= ',') goto yy696;
- if(yych <= '-') goto yy790;
- if(yych <= '.') goto yy1267;
- goto yy696;
- } else {
- if(yych <= '2') goto yy1266;
- if(yych <= '9') goto yy1259;
- if(yych <= ':') goto yy1260;
- goto yy696;
- }
+ YYDEBUG(1264, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy1265;
+ if (yych != ':') goto yy694;
yy1265:
- YYDEBUG(1265, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ',') goto yy696;
- if(yych <= '-') goto yy790;
- goto yy1267;
- } else {
- if(yych <= '/') goto yy696;
- if(yych <= '9') goto yy1259;
- if(yych <= ':') goto yy1260;
- goto yy696;
- }
+ YYDEBUG(1265, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1266;
+ if (yych <= '6') goto yy1267;
+ if (yych <= '9') goto yy699;
+ goto yy53;
yy1266:
- YYDEBUG(1266, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ',') goto yy696;
- if(yych <= '-') goto yy790;
- } else {
- if(yych == ':') goto yy1260;
- goto yy696;
- }
+ YYDEBUG(1266, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy700;
+ if (yych <= '/') goto yy694;
+ if (yych <= '9') goto yy699;
+ goto yy694;
yy1267:
- YYDEBUG(1267, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '5') goto yy1268;
- if(yych <= '6') goto yy1269;
- if(yych <= '9') goto yy794;
- goto yy53;
+ YYDEBUG(1267, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy700;
+ if (yych == '0') goto yy699;
+ goto yy694;
yy1268:
- YYDEBUG(1268, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy702;
- if(yych <= '/') goto yy696;
- if(yych <= '9') goto yy1270;
- goto yy696;
+ YYDEBUG(1268, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ',') goto yy694;
+ if (yych <= '-') goto yy789;
+ goto yy1272;
+ } else {
+ if (yych <= '/') goto yy694;
+ if (yych <= '9') goto yy1271;
+ if (yych <= ':') goto yy1265;
+ goto yy694;
+ }
yy1269:
- YYDEBUG(1269, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych == '.') goto yy702;
- goto yy696;
- } else {
- if(yych <= '0') goto yy1270;
- if(yych <= '9') goto yy795;
- goto yy696;
- }
+ YYDEBUG(1269, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= ',') goto yy694;
+ if (yych <= '-') goto yy789;
+ if (yych <= '.') goto yy1272;
+ goto yy694;
+ } else {
+ if (yych <= '2') goto yy1271;
+ if (yych <= '9') goto yy1264;
+ if (yych <= ':') goto yy1265;
+ goto yy694;
+ }
yy1270:
- YYDEBUG(1270, *YYCURSOR);
- yyaccept = 12;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == '.') goto yy702;
- if(yych <= '/') goto yy696;
- if(yych <= '9') goto yy797;
- goto yy696;
+ YYDEBUG(1270, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ',') goto yy694;
+ if (yych <= '-') goto yy789;
+ goto yy1272;
+ } else {
+ if (yych <= '/') goto yy694;
+ if (yych <= '9') goto yy1264;
+ if (yych <= ':') goto yy1265;
+ goto yy694;
+ }
yy1271:
- YYDEBUG(1271, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '9') {
- if(yych <= '-') {
- if(yych == 0x09) goto yy665;
- if(yych <= ',') goto yy667;
- goto yy1226;
- } else {
- if(yych <= '.') goto yy679;
- if(yych <= '/') goto yy677;
- if(yych <= '5') goto yy1241;
- goto yy919;
- }
- } else {
- if(yych <= 'q') {
- if(yych <= ':') goto yy688;
- if(yych == 'n') goto yy675;
- goto yy667;
- } else {
- if(yych <= 'r') goto yy676;
- if(yych <= 's') goto yy669;
- if(yych <= 't') goto yy673;
- goto yy667;
- }
- }
+ YYDEBUG(1271, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ',') goto yy694;
+ if (yych <= '-') goto yy789;
+ } else {
+ if (yych == ':') goto yy1265;
+ goto yy694;
+ }
yy1272:
- YYDEBUG(1272, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '9') {
- if(yych <= '-') {
- if(yych == 0x09) goto yy1227;
- if(yych <= ',') goto yy1229;
- goto yy1226;
- } else {
- if(yych <= '.') goto yy1239;
- if(yych <= '/') goto yy677;
- if(yych <= '5') goto yy1241;
- goto yy919;
- }
- } else {
- if(yych <= 'q') {
- if(yych <= ':') goto yy1240;
- if(yych == 'n') goto yy675;
- goto yy1229;
- } else {
- if(yych <= 'r') goto yy676;
- if(yych <= 's') goto yy669;
- if(yych <= 't') goto yy673;
- goto yy1229;
- }
- }
+ YYDEBUG(1272, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '5') goto yy1273;
+ if (yych <= '6') goto yy1274;
+ if (yych <= '9') goto yy797;
+ goto yy53;
yy1273:
- YYDEBUG(1273, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
+ YYDEBUG(1273, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy700;
+ if (yych <= '/') goto yy694;
+ if (yych <= '9') goto yy1275;
+ goto yy694;
yy1274:
- YYDEBUG(1274, *YYCURSOR);
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- YYDEBUG(1275, *YYCURSOR);
- if(yych <= '/') goto yy1276;
- if(yych <= '9') goto yy1274;
+ YYDEBUG(1274, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych == '.') goto yy700;
+ goto yy694;
+ } else {
+ if (yych <= '0') goto yy1275;
+ if (yych <= '9') goto yy798;
+ goto yy694;
+ }
+yy1275:
+ YYDEBUG(1275, *YYCURSOR);
+ yyaccept = 12;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == '.') goto yy700;
+ if (yych <= '/') goto yy694;
+ if (yych <= '9') goto yy792;
+ goto yy694;
yy1276:
- YYDEBUG(1276, *YYCURSOR);
+ YYDEBUG(1276, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '9') {
+ if (yych <= '-') {
+ if (yych == '\t') goto yy663;
+ if (yych <= ',') goto yy665;
+ goto yy1231;
+ } else {
+ if (yych <= '.') goto yy677;
+ if (yych <= '/') goto yy675;
+ if (yych <= '5') goto yy1246;
+ goto yy924;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= ':') goto yy686;
+ if (yych == 'n') goto yy673;
+ goto yy665;
+ } else {
+ if (yych <= 'r') goto yy674;
+ if (yych <= 's') goto yy667;
+ if (yych <= 't') goto yy671;
+ goto yy665;
+ }
+ }
+yy1277:
+ YYDEBUG(1277, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '9') {
+ if (yych <= '-') {
+ if (yych == '\t') goto yy1232;
+ if (yych <= ',') goto yy1234;
+ goto yy1231;
+ } else {
+ if (yych <= '.') goto yy1244;
+ if (yych <= '/') goto yy675;
+ if (yych <= '5') goto yy1246;
+ goto yy924;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= ':') goto yy1245;
+ if (yych == 'n') goto yy673;
+ goto yy1234;
+ } else {
+ if (yych <= 'r') goto yy674;
+ if (yych <= 's') goto yy667;
+ if (yych <= 't') goto yy671;
+ goto yy1234;
+ }
+ }
+yy1278:
+ YYDEBUG(1278, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+yy1279:
+ YYDEBUG(1279, *YYCURSOR);
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ YYDEBUG(1280, *YYCURSOR);
+ if (yych <= '/') goto yy1281;
+ if (yych <= '9') goto yy1279;
+yy1281:
+ YYDEBUG(1281, *YYCURSOR);
#line 949 "ext/date/lib/parse_date.re"
- {
+ {
timelib_ull i;
TIMELIB_INIT;
@@ -19334,444 +19346,444 @@ yy1276:
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
-#line 19338 "ext/date/lib/parse_date.c"
-yy1277:
- YYDEBUG(1277, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy138;
- goto yy1317;
- }
+#line 19350 "ext/date/lib/parse_date.c"
+yy1282:
+ YYDEBUG(1282, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'm') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'n') goto yy1317;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy138;
+ goto yy1322;
}
-yy1278:
- YYDEBUG(1278, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'U') {
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych == 'I') goto yy1311;
- if(yych <= 'T') goto yy138;
- goto yy1310;
- }
+ } else {
+ if (yych <= 'm') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
} else {
- if(yych <= 'i') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- if(yych <= 'h') goto yy138;
- goto yy1311;
- } else {
- if(yych == 'u') goto yy1310;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= 'n') goto yy1322;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
-yy1279:
- YYDEBUG(1279, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'M') {
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych == 'D') goto yy1299;
- if(yych <= 'L') goto yy138;
- goto yy1300;
- }
+ }
+yy1283:
+ YYDEBUG(1283, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'U') {
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- if(yych <= 'c') goto yy138;
- goto yy1299;
- } else {
- if(yych == 'm') goto yy1300;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych == 'I') goto yy1316;
+ if (yych <= 'T') goto yy138;
+ goto yy1315;
}
-yy1280:
- YYDEBUG(1280, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy138;
- goto yy1295;
- }
+ } else {
+ if (yych <= 'i') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'h') goto yy138;
+ goto yy1316;
+ } else {
+ if (yych == 'u') goto yy1315;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
+yy1284:
+ YYDEBUG(1284, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'M') {
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'e') goto yy1295;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych == 'D') goto yy1304;
+ if (yych <= 'L') goto yy138;
+ goto yy1305;
}
-yy1281:
- YYDEBUG(1281, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy138;
- goto yy1291;
- }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'c') goto yy138;
+ goto yy1304;
+ } else {
+ if (yych == 'm') goto yy1305;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
+yy1285:
+ YYDEBUG(1285, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'e') goto yy1291;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy138;
+ goto yy1300;
}
-yy1282:
- YYDEBUG(1282, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') {
- if(yych == '.') goto yy1240;
- goto yy53;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
} else {
- if(yych <= '9') goto yy1285;
- if(yych <= ':') goto yy1240;
- goto yy53;
+ if (yych <= 'e') goto yy1300;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
-yy1283:
- YYDEBUG(1283, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') {
- if(yych == '.') goto yy1240;
- goto yy53;
+ }
+yy1286:
+ YYDEBUG(1286, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= '3') goto yy1285;
- if(yych == ':') goto yy1240;
- goto yy53;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy138;
+ goto yy1296;
}
-yy1284:
- YYDEBUG(1284, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == '.') goto yy1240;
- if(yych == ':') goto yy1240;
- goto yy53;
-yy1285:
- YYDEBUG(1285, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') {
- if(yych == '.') goto yy1240;
- goto yy53;
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
} else {
- if(yych <= '5') goto yy1286;
- if(yych == ':') goto yy1240;
- goto yy53;
+ if (yych <= 'e') goto yy1296;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
-yy1286:
- YYDEBUG(1286, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych >= ':') goto yy53;
- YYDEBUG(1287, *YYCURSOR);
- yyaccept = 25;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') goto yy1243;
- if(yych <= '5') goto yy1288;
- if(yych <= '6') goto yy1289;
- goto yy1243;
+ }
+yy1287:
+ YYDEBUG(1287, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy1245;
+ goto yy53;
+ } else {
+ if (yych <= '9') goto yy1290;
+ if (yych <= ':') goto yy1245;
+ goto yy53;
+ }
yy1288:
- YYDEBUG(1288, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy53;
- if(yych <= '9') goto yy1290;
+ YYDEBUG(1288, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy1245;
goto yy53;
+ } else {
+ if (yych <= '3') goto yy1290;
+ if (yych == ':') goto yy1245;
+ goto yy53;
+ }
yy1289:
- YYDEBUG(1289, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych != '0') goto yy53;
+ YYDEBUG(1289, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == '.') goto yy1245;
+ if (yych == ':') goto yy1245;
+ goto yy53;
yy1290:
- YYDEBUG(1290, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy1251;
+ YYDEBUG(1290, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy1245;
+ goto yy53;
+ } else {
+ if (yych <= '5') goto yy1291;
+ if (yych == ':') goto yy1245;
+ goto yy53;
+ }
yy1291:
- YYDEBUG(1291, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'L') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'K') goto yy139;
- }
- } else {
- if(yych <= 'k') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'l') goto yy1292;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
- }
-yy1292:
- YYDEBUG(1292, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'F') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'E') goto yy140;
- }
- } else {
- if(yych <= 'e') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'f') goto yy1293;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
- }
+ YYDEBUG(1291, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych >= ':') goto yy53;
+ YYDEBUG(1292, *YYCURSOR);
+ yyaccept = 25;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') goto yy1248;
+ if (yych <= '5') goto yy1293;
+ if (yych <= '6') goto yy1294;
+ goto yy1248;
yy1293:
- YYDEBUG(1293, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy141;
- }
+ YYDEBUG(1293, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy53;
+ if (yych <= '9') goto yy1295;
+ goto yy53;
+yy1294:
+ YYDEBUG(1294, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych != '0') goto yy53;
+yy1295:
+ YYDEBUG(1295, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy1256;
+yy1296:
+ YYDEBUG(1296, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'L') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 't') goto yy1294;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'K') goto yy139;
}
-yy1294:
- YYDEBUG(1294, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'G') {
- if(yych == ')') goto yy136;
- goto yy3;
+ } else {
+ if (yych <= 'k') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
} else {
- if(yych <= 'H') goto yy160;
- if(yych == 'h') goto yy160;
+ if (yych <= 'l') goto yy1297;
+ if (yych <= 'z') goto yy139;
goto yy3;
}
-yy1295:
- YYDEBUG(1295, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'S') {
- if(yych <= ')') {
- if(yych <= '(') goto yy276;
- goto yy136;
- } else {
- if(yych <= '@') goto yy276;
- if(yych <= 'R') goto yy139;
- }
+ }
+yy1297:
+ YYDEBUG(1297, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'F') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'r') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy276;
- goto yy139;
- } else {
- if(yych <= 's') goto yy1296;
- if(yych <= 'z') goto yy139;
- goto yy276;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'E') goto yy140;
}
-yy1296:
- YYDEBUG(1296, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy140;
- }
+ } else {
+ if (yych <= 'e') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
} else {
- if(yych <= 'c') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'd') goto yy1297;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
- }
-yy1297:
- YYDEBUG(1297, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- } else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy1298;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= 'f') goto yy1298;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy1298:
- YYDEBUG(1298, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'X') {
- if(yych == ')') goto yy136;
- goto yy3;
+ YYDEBUG(1298, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'Y') goto yy282;
- if(yych == 'y') goto yy282;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy141;
+ }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
+ } else {
+ if (yych <= 't') goto yy1299;
+ if (yych <= 'z') goto yy141;
goto yy3;
}
+ }
yy1299:
- YYDEBUG(1299, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- goto yy1307;
+ YYDEBUG(1299, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'G') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'H') goto yy160;
+ if (yych == 'h') goto yy160;
+ goto yy3;
+ }
+yy1300:
+ YYDEBUG(1300, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'S') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy276;
+ goto yy136;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy1307;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy276;
+ if (yych <= 'R') goto yy139;
}
-yy1300:
- YYDEBUG(1300, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'O') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'N') goto yy139;
- }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy276;
+ goto yy139;
} else {
- if(yych <= 'n') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'o') goto yy1301;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= 's') goto yy1301;
+ if (yych <= 'z') goto yy139;
+ goto yy276;
}
+ }
yy1301:
- YYDEBUG(1301, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy140;
- }
+ YYDEBUG(1301, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'q') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'r') goto yy1302;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy140;
+ }
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'd') goto yy1302;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy1302:
- YYDEBUG(1302, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy141;
- }
+ YYDEBUG(1302, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ goto yy3;
} else {
- if(yych <= 'q') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'r') goto yy1303;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= 'a') goto yy1303;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
yy1303:
- YYDEBUG(1303, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych == ')') goto yy136;
+ YYDEBUG(1303, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'X') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'Y') goto yy282;
+ if (yych == 'y') goto yy282;
+ goto yy3;
+ }
+yy1304:
+ YYDEBUG(1304, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy1312;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
goto yy3;
} else {
- if(yych <= 'O') goto yy1304;
- if(yych != 'o') goto yy3;
+ if (yych <= 'a') goto yy1312;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
-yy1304:
- YYDEBUG(1304, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'W') goto yy1305;
- if(yych != 'w') goto yy53;
+ }
yy1305:
- YYDEBUG(1305, *YYCURSOR);
- ++YYCURSOR;
+ YYDEBUG(1305, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'O') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'N') goto yy139;
+ }
+ } else {
+ if (yych <= 'n') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 'o') goto yy1306;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
+ }
+ }
yy1306:
- YYDEBUG(1306, *YYCURSOR);
+ YYDEBUG(1306, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy140;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'r') goto yy1307;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
+ }
+ }
+yy1307:
+ YYDEBUG(1307, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy141;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
+ } else {
+ if (yych <= 'r') goto yy1308;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
+ }
+ }
+yy1308:
+ YYDEBUG(1308, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'O') goto yy1309;
+ if (yych != 'o') goto yy3;
+ }
+yy1309:
+ YYDEBUG(1309, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'W') goto yy1310;
+ if (yych != 'w') goto yy53;
+yy1310:
+ YYDEBUG(1310, *YYCURSOR);
+ ++YYCURSOR;
+yy1311:
+ YYDEBUG(1311, *YYCURSOR);
#line 937 "ext/date/lib/parse_date.re"
- {
+ {
DEBUG_OUTPUT("tomorrow");
TIMELIB_INIT;
TIMELIB_HAVE_RELATIVE();
@@ -19781,43 +19793,43 @@ yy1306:
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
-#line 19785 "ext/date/lib/parse_date.c"
-yy1307:
- YYDEBUG(1307, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Y') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'X') goto yy140;
- }
+#line 19797 "ext/date/lib/parse_date.c"
+yy1312:
+ YYDEBUG(1312, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Y') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'x') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'y') goto yy1308;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'X') goto yy140;
}
-yy1308:
- YYDEBUG(1308, *YYCURSOR);
- ++YYCURSOR;
- if((yych = *YYCURSOR) <= '@') {
- if(yych == ')') goto yy136;
+ } else {
+ if (yych <= 'x') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
} else {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy1309;
- if(yych <= 'z') goto yy141;
+ if (yych <= 'y') goto yy1313;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
-yy1309:
- YYDEBUG(1309, *YYCURSOR);
+ }
+yy1313:
+ YYDEBUG(1313, *YYCURSOR);
+ ++YYCURSOR;
+ if ((yych = *YYCURSOR) <= '@') {
+ if (yych == ')') goto yy136;
+ } else {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy1314;
+ if (yych <= 'z') goto yy141;
+ }
+yy1314:
+ YYDEBUG(1314, *YYCURSOR);
#line 927 "ext/date/lib/parse_date.re"
- {
+ {
DEBUG_OUTPUT("midnight | today");
TIMELIB_INIT;
TIMELIB_UNHAVE_TIME();
@@ -19825,1928 +19837,1928 @@ yy1309:
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
-#line 19829 "ext/date/lib/parse_date.c"
-yy1310:
- YYDEBUG(1310, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= ')') {
- if(yych <= '(') goto yy276;
- goto yy136;
- } else {
- if(yych <= '@') goto yy276;
- if(yych <= 'Q') goto yy139;
- goto yy1313;
- }
+#line 19841 "ext/date/lib/parse_date.c"
+yy1315:
+ YYDEBUG(1315, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy276;
+ goto yy136;
} else {
- if(yych <= 'q') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy276;
- goto yy139;
- } else {
- if(yych <= 'r') goto yy1313;
- if(yych <= 'z') goto yy139;
- goto yy276;
- }
+ if (yych <= '@') goto yy276;
+ if (yych <= 'Q') goto yy139;
+ goto yy1318;
}
-yy1311:
- YYDEBUG(1311, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'S') {
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= 'Q') goto yy139;
- if(yych >= 'S') goto yy250;
- }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy276;
+ goto yy139;
} else {
- if(yych <= 'q') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'r') goto yy1312;
- if(yych <= 's') goto yy250;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= 'r') goto yy1318;
+ if (yych <= 'z') goto yy139;
+ goto yy276;
}
-yy1312:
- YYDEBUG(1312, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy140;
- goto yy263;
- }
+ }
+yy1316:
+ YYDEBUG(1316, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'S') {
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'c') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'd') goto yy263;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= 'Q') goto yy139;
+ if (yych >= 'S') goto yy250;
}
-yy1313:
- YYDEBUG(1313, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'S') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy140;
- }
- } else {
- if(yych <= 'r') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 's') goto yy1314;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 'r') goto yy1317;
+ if (yych <= 's') goto yy250;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
-yy1314:
- YYDEBUG(1314, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy141;
- }
+ }
+yy1317:
+ YYDEBUG(1317, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'c') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'd') goto yy1315;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy140;
+ goto yy263;
}
-yy1315:
- YYDEBUG(1315, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
} else {
- if(yych <= 'A') goto yy1316;
- if(yych != 'a') goto yy3;
+ if (yych <= 'd') goto yy263;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
-yy1316:
- YYDEBUG(1316, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy282;
- if(yych == 'y') goto yy282;
- goto yy53;
-yy1317:
- YYDEBUG(1317, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- }
+ }
+yy1318:
+ YYDEBUG(1318, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'S') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 't') goto yy1318;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy140;
}
-yy1318:
- YYDEBUG(1318, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'H') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy140;
- goto yy263;
- }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
} else {
- if(yych <= 'g') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'h') goto yy263;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= 's') goto yy1319;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy1319:
- YYDEBUG(1319, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy138;
- goto yy1317;
- }
+ YYDEBUG(1319, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'n') goto yy1348;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy141;
}
-yy1320:
- YYDEBUG(1320, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'U') {
- if(yych <= '/') {
- if(yych == ')') goto yy136;
- if(yych <= '.') goto yy3;
- goto yy144;
- } else {
- if(yych <= 'H') {
- if(yych <= '@') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'I') goto yy1311;
- if(yych <= 'T') goto yy138;
- goto yy1310;
- }
- }
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
} else {
- if(yych <= 'h') {
- if(yych <= '^') {
- if(yych <= 'Z') goto yy138;
- goto yy3;
- } else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy3;
- goto yy143;
- }
- } else {
- if(yych <= 't') {
- if(yych <= 'i') goto yy1342;
- goto yy143;
- } else {
- if(yych <= 'u') goto yy1341;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
- }
+ if (yych <= 'd') goto yy1320;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
+ }
+yy1320:
+ YYDEBUG(1320, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'A') goto yy1321;
+ if (yych != 'a') goto yy3;
+ }
yy1321:
- YYDEBUG(1321, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'M') {
- if(yych <= '/') {
- if(yych == ')') goto yy136;
- if(yych <= '.') goto yy3;
- goto yy144;
- } else {
- if(yych <= 'C') {
- if(yych <= '@') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'D') goto yy1299;
- if(yych <= 'L') goto yy138;
- goto yy1300;
- }
- }
+ YYDEBUG(1321, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy282;
+ if (yych == 'y') goto yy282;
+ goto yy53;
+yy1322:
+ YYDEBUG(1322, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'c') {
- if(yych <= '^') {
- if(yych <= 'Z') goto yy138;
- goto yy3;
- } else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy3;
- goto yy143;
- }
- } else {
- if(yych <= 'l') {
- if(yych <= 'd') goto yy1332;
- goto yy143;
- } else {
- if(yych <= 'm') goto yy1333;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
}
-yy1322:
- YYDEBUG(1322, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy138;
- goto yy1295;
- }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'e') goto yy1328;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= 't') goto yy1323;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
+ }
yy1323:
- YYDEBUG(1323, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy138;
- goto yy1291;
- }
+ YYDEBUG(1323, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'H') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'e') goto yy1324;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy140;
+ goto yy263;
}
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'h') goto yy263;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
+ }
+ }
yy1324:
- YYDEBUG(1324, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'L') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'K') goto yy139;
- goto yy1292;
- }
+ YYDEBUG(1324, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy138;
+ goto yy1322;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'n') goto yy1353;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
+ }
+ }
+yy1325:
+ YYDEBUG(1325, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'U') {
+ if (yych <= '/') {
+ if (yych == ')') goto yy136;
+ if (yych <= '.') goto yy3;
+ goto yy144;
+ } else {
+ if (yych <= 'H') {
+ if (yych <= '@') goto yy3;
+ goto yy138;
} else {
- if(yych == 'l') goto yy1325;
- if(yych <= 'z') goto yy148;
- goto yy3;
+ if (yych <= 'I') goto yy1316;
+ if (yych <= 'T') goto yy138;
+ goto yy1315;
}
}
-yy1325:
- YYDEBUG(1325, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'F') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
+ } else {
+ if (yych <= 'h') {
+ if (yych <= '^') {
+ if (yych <= 'Z') goto yy138;
goto yy3;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'E') goto yy140;
- goto yy1293;
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy3;
+ goto yy143;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 't') {
+ if (yych <= 'i') goto yy1347;
+ goto yy143;
} else {
- if(yych == 'f') goto yy1326;
- if(yych <= 'z') goto yy149;
+ if (yych <= 'u') goto yy1346;
+ if (yych <= 'z') goto yy143;
goto yy3;
}
}
+ }
yy1326:
- YYDEBUG(1326, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy141;
- goto yy1294;
- }
+ YYDEBUG(1326, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'M') {
+ if (yych <= '/') {
+ if (yych == ')') goto yy136;
+ if (yych <= '.') goto yy3;
+ goto yy144;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 'C') {
+ if (yych <= '@') goto yy3;
+ goto yy138;
} else {
- if(yych == 't') goto yy1327;
- if(yych <= 'z') goto yy150;
- goto yy3;
+ if (yych <= 'D') goto yy1304;
+ if (yych <= 'L') goto yy138;
+ goto yy1305;
}
}
-yy1327:
- YYDEBUG(1327, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'H') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
+ } else {
+ if (yych <= 'c') {
+ if (yych <= '^') {
+ if (yych <= 'Z') goto yy138;
goto yy3;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= 'G') goto yy3;
- goto yy160;
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy3;
+ goto yy143;
}
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 'l') {
+ if (yych <= 'd') goto yy1337;
+ goto yy143;
} else {
- if(yych == 'h') goto yy247;
- if(yych <= 'z') goto yy151;
+ if (yych <= 'm') goto yy1338;
+ if (yych <= 'z') goto yy143;
goto yy3;
}
}
+ }
+yy1327:
+ YYDEBUG(1327, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy138;
+ goto yy1300;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'e') goto yy1333;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
+ }
+ }
yy1328:
- YYDEBUG(1328, *YYCURSOR);
- yyaccept = 5;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy276;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy276;
- if(yych <= 'R') goto yy139;
- goto yy1296;
- }
+ YYDEBUG(1328, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy276;
- } else {
- if(yych == 's') goto yy1329;
- if(yych <= 'z') goto yy148;
- goto yy276;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy138;
+ goto yy1296;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'e') goto yy1329;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
+ }
yy1329:
- YYDEBUG(1329, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy140;
- goto yy1297;
- }
+ YYDEBUG(1329, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'L') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'd') goto yy1330;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'K') goto yy139;
+ goto yy1297;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'l') goto yy1330;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy1330:
- YYDEBUG(1330, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'A') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- goto yy1298;
- }
+ YYDEBUG(1330, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'F') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'a') goto yy1331;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'E') goto yy140;
+ goto yy1298;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'f') goto yy1331;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy1331:
- YYDEBUG(1331, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'Y') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'X') goto yy3;
- goto yy282;
- }
+ YYDEBUG(1331, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'y') goto yy295;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy141;
+ goto yy1299;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy1332;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy1332:
- YYDEBUG(1332, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'A') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- goto yy1307;
- }
+ YYDEBUG(1332, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'H') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '^') goto yy3;
- goto yy144;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'a') goto yy1339;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'G') goto yy3;
+ goto yy160;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'h') goto yy247;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
+ }
yy1333:
- YYDEBUG(1333, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'O') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'N') goto yy139;
- goto yy1301;
- }
+ YYDEBUG(1333, *YYCURSOR);
+ yyaccept = 5;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy276;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'o') goto yy1334;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy276;
+ if (yych <= 'R') goto yy139;
+ goto yy1301;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy276;
+ } else {
+ if (yych == 's') goto yy1334;
+ if (yych <= 'z') goto yy148;
+ goto yy276;
}
+ }
yy1334:
- YYDEBUG(1334, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'R') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy140;
- goto yy1302;
- }
+ YYDEBUG(1334, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'r') goto yy1335;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy140;
+ goto yy1302;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'd') goto yy1335;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy1335:
- YYDEBUG(1335, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'R') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy141;
- goto yy1303;
- }
+ YYDEBUG(1335, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'r') goto yy1336;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ goto yy1303;
}
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '^') goto yy3;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy3;
+ if (yych <= 'a') goto yy1336;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
+ }
+ }
yy1336:
- YYDEBUG(1336, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'O') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'N') goto yy3;
- goto yy1304;
- }
+ YYDEBUG(1336, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'Y') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'o') goto yy1337;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'X') goto yy3;
+ goto yy282;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'y') goto yy295;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
+ }
yy1337:
- YYDEBUG(1337, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'W') goto yy1305;
- if(yych != 'w') goto yy152;
- YYDEBUG(1338, *YYCURSOR);
- yyaccept = 27;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '^') {
- if(yych == '/') goto yy144;
- goto yy1306;
+ YYDEBUG(1337, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ goto yy1312;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '^') goto yy3;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy3;
+ if (yych <= 'a') goto yy1344;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
+ }
+ }
+yy1338:
+ YYDEBUG(1338, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'O') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy1306;
- if(yych <= 'z') goto yy151;
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'N') goto yy139;
goto yy1306;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'o') goto yy1339;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
+ }
+ }
yy1339:
- YYDEBUG(1339, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'Y') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'X') goto yy140;
- goto yy1308;
- }
+ YYDEBUG(1339, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'R') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'y') goto yy1340;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy140;
+ goto yy1307;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'r') goto yy1340;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy1340:
- YYDEBUG(1340, *YYCURSOR);
- yyaccept = 28;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy1309;
- goto yy136;
- } else {
- if(yych == '/') goto yy144;
- goto yy1309;
- }
+ YYDEBUG(1340, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'R') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '^') goto yy1309;
- goto yy144;
- } else {
- if(yych <= '`') goto yy1309;
- if(yych <= 'z') goto yy150;
- goto yy1309;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy141;
+ goto yy1308;
}
-yy1341:
- YYDEBUG(1341, *YYCURSOR);
- yyaccept = 5;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'R') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy276;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy276;
- if(yych <= 'Q') goto yy139;
- goto yy1313;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy276;
- } else {
- if(yych == 'r') goto yy1344;
- if(yych <= 'z') goto yy148;
- goto yy276;
- }
+ if (yych == 'r') goto yy1341;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
-yy1342:
- YYDEBUG(1342, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych <= '/') {
- if(yych == ')') goto yy136;
- if(yych <= '.') goto yy3;
- goto yy144;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy139;
- if(yych <= 'R') goto yy1312;
- goto yy250;
- }
+ }
+yy1341:
+ YYDEBUG(1341, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'O') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych <= 'r') {
- if(yych <= 'q') goto yy148;
- } else {
- if(yych <= 's') goto yy253;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'N') goto yy3;
+ goto yy1309;
}
- YYDEBUG(1343, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy140;
- goto yy263;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'd') goto yy273;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych == 'o') goto yy1342;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
+ }
+yy1342:
+ YYDEBUG(1342, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'W') goto yy1310;
+ if (yych != 'w') goto yy152;
+ YYDEBUG(1343, *YYCURSOR);
+ yyaccept = 27;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '^') {
+ if (yych == '/') goto yy144;
+ goto yy1311;
+ } else {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy1311;
+ if (yych <= 'z') goto yy151;
+ goto yy1311;
+ }
yy1344:
- YYDEBUG(1344, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy140;
- goto yy1314;
- }
+ YYDEBUG(1344, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'Y') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 's') goto yy1345;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'X') goto yy140;
+ goto yy1313;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'y') goto yy1345;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy1345:
- YYDEBUG(1345, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy141;
- goto yy1315;
- }
+ YYDEBUG(1345, *YYCURSOR);
+ yyaccept = 28;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy1314;
+ goto yy136;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'd') goto yy1346;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych == '/') goto yy144;
+ goto yy1314;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '^') goto yy1314;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy1314;
+ if (yych <= 'z') goto yy150;
+ goto yy1314;
}
+ }
yy1346:
- YYDEBUG(1346, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'A') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- goto yy1316;
- }
+ YYDEBUG(1346, *YYCURSOR);
+ yyaccept = 5;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'R') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy276;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy1347;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy276;
+ if (yych <= 'Q') goto yy139;
+ goto yy1318;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy276;
+ } else {
+ if (yych == 'r') goto yy1349;
+ if (yych <= 'z') goto yy148;
+ goto yy276;
+ }
+ }
yy1347:
- YYDEBUG(1347, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy282;
- if(yych == 'y') goto yy295;
- goto yy152;
-yy1348:
- YYDEBUG(1348, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- goto yy1318;
- }
+ YYDEBUG(1347, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych <= '/') {
+ if (yych == ')') goto yy136;
+ if (yych <= '.') goto yy3;
+ goto yy144;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy139;
+ if (yych <= 'R') goto yy1317;
+ goto yy250;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'q') goto yy148;
} else {
- if(yych == 't') goto yy1349;
- if(yych <= 'z') goto yy148;
+ if (yych <= 's') goto yy253;
+ if (yych <= 'z') goto yy148;
goto yy3;
}
}
+ }
+ YYDEBUG(1348, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy140;
+ goto yy263;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'd') goto yy273;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy1349:
- YYDEBUG(1349, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'H') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy140;
- goto yy263;
- }
+ YYDEBUG(1349, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'h') goto yy273;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy140;
+ goto yy1319;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 's') goto yy1350;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy1350:
- YYDEBUG(1350, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Y') {
- if(yych <= '@') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych == 'R') goto yy1362;
- if(yych <= 'X') goto yy138;
- goto yy1363;
- }
+ YYDEBUG(1350, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'r') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- if(yych <= 'q') goto yy138;
- goto yy1362;
- } else {
- if(yych == 'y') goto yy1363;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy141;
+ goto yy1320;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'd') goto yy1351;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
+ }
+ }
yy1351:
- YYDEBUG(1351, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy138;
- goto yy1356;
- }
+ YYDEBUG(1351, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'c') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'd') goto yy1356;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ goto yy1321;
}
-yy1352:
- YYDEBUG(1352, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy138;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= 'm') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'n') goto yy1353;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
+ if (yych <= 'a') goto yy1352;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
+ }
+yy1352:
+ YYDEBUG(1352, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy282;
+ if (yych == 'y') goto yy295;
+ goto yy152;
yy1353:
- YYDEBUG(1353, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'D') {
- if(yych <= ')') {
- if(yych <= '(') goto yy276;
- goto yy136;
- } else {
- if(yych <= '@') goto yy276;
- if(yych <= 'C') goto yy139;
- }
+ YYDEBUG(1353, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'c') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy276;
- goto yy139;
- } else {
- if(yych <= 'd') goto yy1354;
- if(yych <= 'z') goto yy139;
- goto yy276;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
+ goto yy1323;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy1354;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy1354:
- YYDEBUG(1354, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'A') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- } else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- goto yy3;
- } else {
- if(yych <= 'a') goto yy1355;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ YYDEBUG(1354, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'H') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy140;
+ goto yy263;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'h') goto yy273;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy1355:
- YYDEBUG(1355, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'Y') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'X') goto yy141;
- goto yy503;
- }
+ YYDEBUG(1355, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Y') {
+ if (yych <= '@') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'x') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'y') goto yy503;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych == 'R') goto yy1367;
+ if (yych <= 'X') goto yy138;
+ goto yy1368;
}
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'q') goto yy138;
+ goto yy1367;
+ } else {
+ if (yych == 'y') goto yy1368;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
yy1356:
- YYDEBUG(1356, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy139;
- }
+ YYDEBUG(1356, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'm') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'n') goto yy1357;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy138;
+ goto yy1361;
}
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'd') goto yy1361;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
yy1357:
- YYDEBUG(1357, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'I') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'H') goto yy140;
- }
+ YYDEBUG(1357, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'h') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'i') goto yy1358;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy138;
+ }
+ } else {
+ if (yych <= 'm') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'n') goto yy1358;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
}
+ }
yy1358:
- YYDEBUG(1358, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'G') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'F') goto yy141;
- }
+ YYDEBUG(1358, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'D') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy276;
+ goto yy136;
} else {
- if(yych <= 'f') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'g') goto yy1359;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych <= '@') goto yy276;
+ if (yych <= 'C') goto yy139;
+ }
+ } else {
+ if (yych <= 'c') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy276;
+ goto yy139;
+ } else {
+ if (yych <= 'd') goto yy1359;
+ if (yych <= 'z') goto yy139;
+ goto yy276;
}
+ }
yy1359:
- YYDEBUG(1359, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'G') {
- if(yych == ')') goto yy136;
+ YYDEBUG(1359, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'A') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
goto yy3;
} else {
- if(yych <= 'H') goto yy1360;
- if(yych != 'h') goto yy3;
+ if (yych <= 'a') goto yy1360;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy1360:
- YYDEBUG(1360, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy1361;
- if(yych != 't') goto yy53;
+ YYDEBUG(1360, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'Y') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'X') goto yy141;
+ goto yy501;
+ }
+ } else {
+ if (yych <= 'x') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
+ } else {
+ if (yych <= 'y') goto yy501;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
+ }
+ }
yy1361:
- YYDEBUG(1361, *YYCURSOR);
- yych = *++YYCURSOR;
- goto yy1309;
+ YYDEBUG(1361, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy139;
+ }
+ } else {
+ if (yych <= 'm') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 'n') goto yy1362;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
+ }
+ }
yy1362:
- YYDEBUG(1362, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy303;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- goto yy303;
- }
- }
+ YYDEBUG(1362, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'I') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych == 'C') goto yy1364;
- goto yy139;
- }
- } else {
- if(yych <= 'b') {
- if(yych <= '`') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'c') goto yy1364;
- if(yych <= 'z') goto yy139;
- goto yy303;
- }
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'H') goto yy140;
+ }
+ } else {
+ if (yych <= 'h') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'i') goto yy1363;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
+ }
yy1363:
- YYDEBUG(1363, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '-') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy305;
- if(yych <= 0x1F) goto yy303;
+ YYDEBUG(1363, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'G') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'F') goto yy141;
+ }
+ } else {
+ if (yych <= 'f') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
+ } else {
+ if (yych <= 'g') goto yy1364;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
+ }
+ }
+yy1364:
+ YYDEBUG(1364, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'G') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'H') goto yy1365;
+ if (yych != 'h') goto yy3;
+ }
+yy1365:
+ YYDEBUG(1365, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy1366;
+ if (yych != 't') goto yy53;
+yy1366:
+ YYDEBUG(1366, *YYCURSOR);
+ yych = *++YYCURSOR;
+ goto yy1314;
+yy1367:
+ YYDEBUG(1367, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
goto yy305;
} else {
- if(yych == ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= '@') {
- if(yych == '/') goto yy303;
- if(yych <= '9') goto yy305;
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
goto yy303;
} else {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy303;
- if(yych <= 'z') goto yy139;
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
goto yy303;
}
}
-yy1364:
- YYDEBUG(1364, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'H') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy140;
- goto yy561;
+ if (yych == 'C') goto yy1369;
+ goto yy139;
}
} else {
- if(yych <= 'g') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
+ if (yych <= 'b') {
+ if (yych <= '`') goto yy303;
+ goto yy139;
} else {
- if(yych <= 'h') goto yy561;
- if(yych <= 'z') goto yy140;
- goto yy3;
+ if (yych <= 'c') goto yy1369;
+ if (yych <= 'z') goto yy139;
+ goto yy303;
}
}
-yy1365:
- YYDEBUG(1365, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'Y') {
- if(yych <= '/') {
- if(yych == ')') goto yy136;
- if(yych <= '.') goto yy3;
- goto yy144;
- } else {
- if(yych <= 'Q') {
- if(yych <= '@') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'R') goto yy1362;
- if(yych <= 'X') goto yy138;
- goto yy1363;
- }
- }
+ }
+yy1368:
+ YYDEBUG(1368, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '-') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy305;
+ if (yych <= 0x1F) goto yy303;
+ goto yy305;
} else {
- if(yych <= 'q') {
- if(yych <= '^') {
- if(yych <= 'Z') goto yy138;
- goto yy3;
- } else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy3;
- goto yy143;
- }
- } else {
- if(yych <= 'x') {
- if(yych <= 'r') goto yy1377;
- goto yy143;
- } else {
- if(yych <= 'y') goto yy1378;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
- }
+ if (yych == ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
}
-yy1366:
- YYDEBUG(1366, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'C') goto yy138;
- goto yy1356;
- }
+ } else {
+ if (yych <= '@') {
+ if (yych == '/') goto yy303;
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'd') goto yy1371;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy303;
+ if (yych <= 'z') goto yy139;
+ goto yy303;
}
-yy1367:
- YYDEBUG(1367, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy138;
- goto yy1353;
- }
+ }
+yy1369:
+ YYDEBUG(1369, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'H') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'n') goto yy1368;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy140;
+ goto yy559;
}
-yy1368:
- YYDEBUG(1368, *YYCURSOR);
- yyaccept = 5;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy276;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy276;
- if(yych <= 'C') goto yy139;
- goto yy1354;
- }
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy276;
- } else {
- if(yych == 'd') goto yy1369;
- if(yych <= 'z') goto yy148;
- goto yy276;
- }
+ if (yych <= 'h') goto yy559;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
}
-yy1369:
- YYDEBUG(1369, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'A') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- goto yy1355;
- }
+ }
+yy1370:
+ YYDEBUG(1370, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'Y') {
+ if (yych <= '/') {
+ if (yych == ')') goto yy136;
+ if (yych <= '.') goto yy3;
+ goto yy144;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '^') goto yy3;
- goto yy144;
+ if (yych <= 'Q') {
+ if (yych <= '@') goto yy3;
+ goto yy138;
} else {
- if(yych <= '`') goto yy3;
- if(yych <= 'a') goto yy1370;
- if(yych <= 'z') goto yy149;
- goto yy3;
+ if (yych <= 'R') goto yy1367;
+ if (yych <= 'X') goto yy138;
+ goto yy1368;
}
}
-yy1370:
- YYDEBUG(1370, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'Y') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
+ } else {
+ if (yych <= 'q') {
+ if (yych <= '^') {
+ if (yych <= 'Z') goto yy138;
goto yy3;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'X') goto yy141;
- goto yy503;
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy3;
+ goto yy143;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 'x') {
+ if (yych <= 'r') goto yy1382;
+ goto yy143;
} else {
- if(yych == 'y') goto yy532;
- if(yych <= 'z') goto yy150;
+ if (yych <= 'y') goto yy1383;
+ if (yych <= 'z') goto yy143;
goto yy3;
}
}
+ }
yy1371:
- YYDEBUG(1371, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy139;
- goto yy1357;
- }
+ YYDEBUG(1371, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'n') goto yy1372;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'C') goto yy138;
+ goto yy1361;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'd') goto yy1376;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
+ }
yy1372:
- YYDEBUG(1372, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'I') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'H') goto yy140;
- goto yy1358;
- }
+ YYDEBUG(1372, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'i') goto yy1373;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy138;
+ goto yy1358;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'n') goto yy1373;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
+ }
yy1373:
- YYDEBUG(1373, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'G') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'F') goto yy141;
- goto yy1359;
- }
+ YYDEBUG(1373, *YYCURSOR);
+ yyaccept = 5;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy276;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'g') goto yy1374;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy276;
+ if (yych <= 'C') goto yy139;
+ goto yy1359;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy276;
+ } else {
+ if (yych == 'd') goto yy1374;
+ if (yych <= 'z') goto yy148;
+ goto yy276;
}
+ }
yy1374:
- YYDEBUG(1374, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'H') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'G') goto yy3;
- goto yy1360;
- }
+ YYDEBUG(1374, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'A') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'h') goto yy1375;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ goto yy1360;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '^') goto yy3;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy3;
+ if (yych <= 'a') goto yy1375;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy1375:
- YYDEBUG(1375, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'T') goto yy1361;
- if(yych != 't') goto yy152;
- YYDEBUG(1376, *YYCURSOR);
- yyaccept = 28;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '^') {
- if(yych == '/') goto yy144;
- goto yy1309;
+ YYDEBUG(1375, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'Y') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy1309;
- if(yych <= 'z') goto yy151;
- goto yy1309;
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'X') goto yy141;
+ goto yy501;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'y') goto yy530;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
+ }
+ }
+yy1376:
+ YYDEBUG(1376, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy139;
+ goto yy1362;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'n') goto yy1377;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy1377:
- YYDEBUG(1377, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
- }
+ YYDEBUG(1377, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'I') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '^') {
- if(yych <= 'B') {
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'C') goto yy1364;
- if(yych <= 'Z') goto yy139;
- goto yy303;
- }
- } else {
- if(yych <= 'b') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy148;
- } else {
- if(yych <= 'c') goto yy1379;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'H') goto yy140;
+ goto yy1363;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'i') goto yy1378;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
+ }
yy1378:
- YYDEBUG(1378, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '.') {
- if(yych <= ' ') {
- if(yych == 0x09) goto yy305;
- if(yych <= 0x1F) goto yy303;
- goto yy305;
- } else {
- if(yych <= ')') {
- if(yych <= '(') goto yy303;
- goto yy136;
- } else {
- if(yych <= ',') goto yy303;
- if(yych <= '-') goto yy306;
- goto yy305;
- }
- }
+ YYDEBUG(1378, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'G') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'Z') {
- if(yych <= '/') goto yy144;
- if(yych <= '9') goto yy305;
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= '_') {
- if(yych <= '^') goto yy303;
- goto yy144;
- } else {
- if(yych <= '`') goto yy303;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'F') goto yy141;
+ goto yy1364;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'g') goto yy1379;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
}
+ }
yy1379:
- YYDEBUG(1379, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'H') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy140;
- goto yy561;
- }
+ YYDEBUG(1379, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'H') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'h') goto yy572;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'G') goto yy3;
+ goto yy1365;
}
-yy1380:
- YYDEBUG(1380, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'W') {
- if(yych <= 'N') {
- if(yych == ')') goto yy136;
- if(yych <= '@') goto yy3;
- goto yy138;
- } else {
- if(yych <= 'O') goto yy1388;
- if(yych <= 'U') goto yy138;
- if(yych <= 'V') goto yy1389;
- goto yy1386;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= 'o') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- if(yych <= 'n') goto yy138;
- goto yy1388;
- } else {
- if(yych <= 'v') {
- if(yych <= 'u') goto yy138;
- goto yy1389;
- } else {
- if(yych <= 'w') goto yy1386;
- if(yych <= 'z') goto yy138;
- goto yy3;
- }
- }
+ if (yych == 'h') goto yy1380;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
-yy1381:
- YYDEBUG(1381, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'X') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ }
+yy1380:
+ YYDEBUG(1380, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'T') goto yy1366;
+ if (yych != 't') goto yy152;
+ YYDEBUG(1381, *YYCURSOR);
+ yyaccept = 28;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '^') {
+ if (yych == '/') goto yy144;
+ goto yy1314;
+ } else {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy1314;
+ if (yych <= 'z') goto yy151;
+ goto yy1314;
+ }
+yy1382:
+ YYDEBUG(1382, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'W') goto yy138;
- goto yy1385;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= 'w') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych <= 'x') goto yy1385;
- if(yych <= 'z') goto yy138;
- goto yy3;
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
-yy1382:
- YYDEBUG(1382, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'B') {
+ if (yych <= '@') goto yy303;
+ goto yy139;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy138;
+ if (yych <= 'C') goto yy1369;
+ if (yych <= 'Z') goto yy139;
+ goto yy303;
}
} else {
- if(yych <= 'm') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
+ if (yych <= 'b') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy148;
} else {
- if(yych <= 'n') goto yy1383;
- if(yych <= 'z') goto yy138;
- goto yy3;
+ if (yych <= 'c') goto yy1384;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
+ }
yy1383:
- YYDEBUG(1383, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
+ YYDEBUG(1383, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '.') {
+ if (yych <= ' ') {
+ if (yych == '\t') goto yy305;
+ if (yych <= 0x1F) goto yy303;
+ goto yy305;
+ } else {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy303;
goto yy136;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
+ if (yych <= ',') goto yy303;
+ if (yych <= '-') goto yy306;
+ goto yy305;
}
- } else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
+ }
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '/') goto yy144;
+ if (yych <= '9') goto yy305;
+ if (yych <= '@') goto yy303;
+ goto yy139;
+ } else {
+ if (yych <= '_') {
+ if (yych <= '^') goto yy303;
+ goto yy144;
} else {
- if(yych <= 't') goto yy1384;
- if(yych <= 'z') goto yy139;
- goto yy3;
+ if (yych <= '`') goto yy303;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
+ }
yy1384:
- YYDEBUG(1384, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'H') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy140;
- goto yy263;
- }
+ YYDEBUG(1384, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'H') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'g') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'h') goto yy263;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy140;
+ goto yy559;
}
-yy1385:
- YYDEBUG(1385, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- goto yy250;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
+ if (yych == 'h') goto yy570;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
+yy1385:
+ YYDEBUG(1385, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'W') {
+ if (yych <= 'N') {
+ if (yych == ')') goto yy136;
+ if (yych <= '@') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'O') goto yy1393;
+ if (yych <= 'U') goto yy138;
+ if (yych <= 'V') goto yy1394;
+ goto yy1391;
+ }
+ } else {
+ if (yych <= 'o') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ if (yych <= 'n') goto yy138;
+ goto yy1393;
+ } else {
+ if (yych <= 'v') {
+ if (yych <= 'u') goto yy138;
+ goto yy1394;
} else {
- if(yych <= 't') goto yy250;
- if(yych <= 'z') goto yy139;
+ if (yych <= 'w') goto yy1391;
+ if (yych <= 'z') goto yy138;
goto yy3;
}
}
+ }
yy1386:
- YYDEBUG(1386, *YYCURSOR);
- ++YYCURSOR;
- if((yych = *YYCURSOR) <= '@') {
- if(yych == ')') goto yy136;
+ YYDEBUG(1386, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'X') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy1387;
- if(yych <= 'z') goto yy139;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'W') goto yy138;
+ goto yy1390;
}
+ } else {
+ if (yych <= 'w') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'x') goto yy1390;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
yy1387:
- YYDEBUG(1387, *YYCURSOR);
+ YYDEBUG(1387, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy138;
+ }
+ } else {
+ if (yych <= 'm') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 'n') goto yy1388;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
+yy1388:
+ YYDEBUG(1388, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
+ }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 't') goto yy1389;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
+ }
+ }
+yy1389:
+ YYDEBUG(1389, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'H') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy140;
+ goto yy263;
+ }
+ } else {
+ if (yych <= 'g') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'h') goto yy263;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
+ }
+ }
+yy1390:
+ YYDEBUG(1390, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
+ goto yy250;
+ }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 't') goto yy250;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
+ }
+ }
+yy1391:
+ YYDEBUG(1391, *YYCURSOR);
+ ++YYCURSOR;
+ if ((yych = *YYCURSOR) <= '@') {
+ if (yych == ')') goto yy136;
+ } else {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy1392;
+ if (yych <= 'z') goto yy139;
+ }
+yy1392:
+ YYDEBUG(1392, *YYCURSOR);
#line 906 "ext/date/lib/parse_date.re"
- {
+ {
DEBUG_OUTPUT("now");
TIMELIB_INIT;
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
-#line 21610 "ext/date/lib/parse_date.c"
-yy1388:
- YYDEBUG(1388, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'N') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy139;
- goto yy1394;
- }
+#line 21622 "ext/date/lib/parse_date.c"
+yy1393:
+ YYDEBUG(1393, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'N') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'm') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 'n') goto yy1394;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy139;
+ goto yy1399;
}
-yy1389:
- YYDEBUG(1389, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '/') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= ',') {
- if(yych <= ')') goto yy136;
- goto yy303;
- } else {
- if(yych <= '-') goto yy306;
- if(yych <= '.') goto yy305;
- goto yy303;
- }
- }
+ } else {
+ if (yych <= 'm') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
} else {
- if(yych <= 'Z') {
- if(yych <= '@') {
- if(yych <= '9') goto yy305;
- goto yy303;
- } else {
- if(yych != 'E') goto yy139;
- }
- } else {
- if(yych <= 'd') {
- if(yych <= '`') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'e') goto yy1390;
- if(yych <= 'z') goto yy139;
- goto yy303;
- }
- }
+ if (yych <= 'n') goto yy1399;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
}
-yy1390:
- YYDEBUG(1390, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'M') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ }
+yy1394:
+ YYDEBUG(1394, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '/') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'L') goto yy140;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= 'l') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
+ if (yych <= ',') {
+ if (yych <= ')') goto yy136;
+ goto yy303;
} else {
- if(yych <= 'm') goto yy1391;
- if(yych <= 'z') goto yy140;
- goto yy3;
+ if (yych <= '-') goto yy306;
+ if (yych <= '.') goto yy305;
+ goto yy303;
}
}
-yy1391:
- YYDEBUG(1391, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'B') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= 'Z') {
+ if (yych <= '@') {
+ if (yych <= '9') goto yy305;
+ goto yy303;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'A') goto yy141;
+ if (yych != 'E') goto yy139;
}
} else {
- if(yych <= 'a') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
+ if (yych <= 'd') {
+ if (yych <= '`') goto yy303;
+ goto yy139;
} else {
- if(yych <= 'b') goto yy1392;
- if(yych <= 'z') goto yy141;
- goto yy3;
+ if (yych <= 'e') goto yy1395;
+ if (yych <= 'z') goto yy139;
+ goto yy303;
}
}
-yy1392:
- YYDEBUG(1392, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych == ')') goto yy136;
+ }
+yy1395:
+ YYDEBUG(1395, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'M') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'L') goto yy140;
+ }
+ } else {
+ if (yych <= 'l') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'm') goto yy1396;
+ if (yych <= 'z') goto yy140;
goto yy3;
+ }
+ }
+yy1396:
+ YYDEBUG(1396, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'B') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'E') goto yy1393;
- if(yych != 'e') goto yy3;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'A') goto yy141;
}
-yy1393:
- YYDEBUG(1393, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy315;
- if(yych == 'r') goto yy315;
- goto yy53;
-yy1394:
- YYDEBUG(1394, *YYCURSOR);
- ++YYCURSOR;
- if((yych = *YYCURSOR) <= '@') {
- if(yych == ')') goto yy136;
+ } else {
+ if (yych <= 'a') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
} else {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy1395;
- if(yych <= 'z') goto yy140;
+ if (yych <= 'b') goto yy1397;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
}
-yy1395:
- YYDEBUG(1395, *YYCURSOR);
+ }
+yy1397:
+ YYDEBUG(1397, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'E') goto yy1398;
+ if (yych != 'e') goto yy3;
+ }
+yy1398:
+ YYDEBUG(1398, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy315;
+ if (yych == 'r') goto yy315;
+ goto yy53;
+yy1399:
+ YYDEBUG(1399, *YYCURSOR);
+ ++YYCURSOR;
+ if ((yych = *YYCURSOR) <= '@') {
+ if (yych == ')') goto yy136;
+ } else {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy1400;
+ if (yych <= 'z') goto yy140;
+ }
+yy1400:
+ YYDEBUG(1400, *YYCURSOR);
#line 915 "ext/date/lib/parse_date.re"
- {
+ {
DEBUG_OUTPUT("noon");
TIMELIB_INIT;
TIMELIB_UNHAVE_TIME();
@@ -21756,488 +21768,488 @@ yy1395:
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
-#line 21760 "ext/date/lib/parse_date.c"
-yy1396:
- YYDEBUG(1396, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'W') {
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych == '/') goto yy144;
- goto yy3;
- }
- } else {
- if(yych <= 'O') {
- if(yych <= 'N') goto yy138;
- goto yy1388;
- } else {
- if(yych <= 'U') goto yy138;
- if(yych <= 'V') goto yy1389;
- goto yy1386;
- }
- }
- } else {
- if(yych <= 'n') {
- if(yych <= '^') {
- if(yych <= 'Z') goto yy138;
- goto yy3;
- } else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy3;
- goto yy143;
- }
+#line 21772 "ext/date/lib/parse_date.c"
+yy1401:
+ YYDEBUG(1401, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'W') {
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
} else {
- if(yych <= 'v') {
- if(yych <= 'o') goto yy1403;
- if(yych <= 'u') goto yy143;
- goto yy1404;
- } else {
- if(yych <= 'w') goto yy1402;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
- }
- }
-yy1397:
- YYDEBUG(1397, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'X') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
+ if (yych == '/') goto yy144;
goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'W') goto yy138;
- goto yy1385;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 'O') {
+ if (yych <= 'N') goto yy138;
+ goto yy1393;
} else {
- if(yych == 'x') goto yy1401;
- if(yych <= 'z') goto yy143;
- goto yy3;
+ if (yych <= 'U') goto yy138;
+ if (yych <= 'V') goto yy1394;
+ goto yy1391;
}
}
-yy1398:
- YYDEBUG(1398, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
+ } else {
+ if (yych <= 'n') {
+ if (yych <= '^') {
+ if (yych <= 'Z') goto yy138;
goto yy3;
} else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy138;
- goto yy1383;
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy3;
+ goto yy143;
}
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
+ if (yych <= 'v') {
+ if (yych <= 'o') goto yy1408;
+ if (yych <= 'u') goto yy143;
+ goto yy1409;
} else {
- if(yych == 'n') goto yy1399;
- if(yych <= 'z') goto yy143;
+ if (yych <= 'w') goto yy1407;
+ if (yych <= 'z') goto yy143;
goto yy3;
}
}
-yy1399:
- YYDEBUG(1399, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- goto yy1384;
- }
+ }
+yy1402:
+ YYDEBUG(1402, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'X') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy1400;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'W') goto yy138;
+ goto yy1390;
}
-yy1400:
- YYDEBUG(1400, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'H') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'G') goto yy140;
- goto yy263;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'h') goto yy273;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych == 'x') goto yy1406;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
-yy1401:
- YYDEBUG(1401, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- goto yy250;
- }
+ }
+yy1403:
+ YYDEBUG(1403, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy253;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy138;
+ goto yy1388;
}
-yy1402:
- YYDEBUG(1402, *YYCURSOR);
- yyaccept = 29;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy1387;
- goto yy136;
- } else {
- if(yych == '/') goto yy144;
- goto yy1387;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '^') goto yy1387;
- goto yy144;
- } else {
- if(yych <= '`') goto yy1387;
- if(yych <= 'z') goto yy148;
- goto yy1387;
- }
+ if (yych == 'n') goto yy1404;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
-yy1403:
- YYDEBUG(1403, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'N') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'M') goto yy139;
- goto yy1394;
- }
+ }
+yy1404:
+ YYDEBUG(1404, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'n') goto yy1409;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
+ goto yy1389;
}
-yy1404:
- YYDEBUG(1404, *YYCURSOR);
- yyaccept = 6;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '9') {
- if(yych <= '(') {
- if(yych <= 0x09) {
- if(yych <= 0x08) goto yy303;
- goto yy305;
- } else {
- if(yych == ' ') goto yy305;
- goto yy303;
- }
- } else {
- if(yych <= '-') {
- if(yych <= ')') goto yy136;
- if(yych <= ',') goto yy303;
- goto yy306;
- } else {
- if(yych == '/') goto yy144;
- goto yy305;
- }
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '^') {
- if(yych <= 'D') {
- if(yych <= '@') goto yy303;
- goto yy139;
- } else {
- if(yych <= 'E') goto yy1390;
- if(yych <= 'Z') goto yy139;
- goto yy303;
- }
- } else {
- if(yych <= 'd') {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy303;
- goto yy148;
- } else {
- if(yych <= 'e') goto yy1405;
- if(yych <= 'z') goto yy148;
- goto yy303;
- }
- }
+ if (yych == 't') goto yy1405;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy1405:
- YYDEBUG(1405, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'M') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'L') goto yy140;
- goto yy1391;
- }
+ YYDEBUG(1405, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'H') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'm') goto yy1406;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'G') goto yy140;
+ goto yy263;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'h') goto yy273;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy1406:
- YYDEBUG(1406, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'B') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'A') goto yy141;
- goto yy1392;
- }
+ YYDEBUG(1406, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'b') goto yy1407;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
+ goto yy250;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 't') goto yy253;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
+ }
yy1407:
- YYDEBUG(1407, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'D') goto yy3;
- goto yy1393;
- }
+ YYDEBUG(1407, *YYCURSOR);
+ yyaccept = 29;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy1392;
+ goto yy136;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'e') goto yy1408;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
+ if (yych == '/') goto yy144;
+ goto yy1392;
}
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '^') goto yy1392;
+ goto yy144;
+ } else {
+ if (yych <= '`') goto yy1392;
+ if (yych <= 'z') goto yy148;
+ goto yy1392;
+ }
+ }
yy1408:
- YYDEBUG(1408, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'R') goto yy315;
- if(yych == 'r') goto yy485;
- goto yy152;
+ YYDEBUG(1408, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'N') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'M') goto yy139;
+ goto yy1399;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'n') goto yy1414;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
+ }
+ }
yy1409:
- YYDEBUG(1409, *YYCURSOR);
- yyaccept = 30;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '@') {
- if(yych <= ')') {
- if(yych <= '(') goto yy1395;
- goto yy136;
+ YYDEBUG(1409, *YYCURSOR);
+ yyaccept = 6;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '9') {
+ if (yych <= '(') {
+ if (yych <= '\t') {
+ if (yych <= 0x08) goto yy303;
+ goto yy305;
} else {
- if(yych == '/') goto yy144;
- goto yy1395;
+ if (yych == ' ') goto yy305;
+ goto yy303;
}
} else {
- if(yych <= '_') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '^') goto yy1395;
- goto yy144;
+ if (yych <= '-') {
+ if (yych <= ')') goto yy136;
+ if (yych <= ',') goto yy303;
+ goto yy306;
} else {
- if(yych <= '`') goto yy1395;
- if(yych <= 'z') goto yy149;
- goto yy1395;
+ if (yych == '/') goto yy144;
+ goto yy305;
}
}
-yy1410:
- YYDEBUG(1410, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'S') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
+ } else {
+ if (yych <= '^') {
+ if (yych <= 'D') {
+ if (yych <= '@') goto yy303;
+ goto yy139;
} else {
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy138;
+ if (yych <= 'E') goto yy1395;
+ if (yych <= 'Z') goto yy139;
+ goto yy303;
}
} else {
- if(yych <= 'r') {
- if(yych <= 'Z') goto yy138;
- if(yych <= '`') goto yy3;
- goto yy138;
+ if (yych <= 'd') {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy303;
+ goto yy148;
} else {
- if(yych <= 's') goto yy1411;
- if(yych <= 'z') goto yy138;
- goto yy3;
+ if (yych <= 'e') goto yy1410;
+ if (yych <= 'z') goto yy148;
+ goto yy303;
}
}
+ }
+yy1410:
+ YYDEBUG(1410, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'M') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'L') goto yy140;
+ goto yy1396;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'm') goto yy1411;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
+ }
+ }
yy1411:
- YYDEBUG(1411, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'T') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- }
+ YYDEBUG(1411, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'B') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 's') {
- if(yych <= 'Z') goto yy139;
- if(yych <= '`') goto yy3;
- goto yy139;
- } else {
- if(yych <= 't') goto yy1412;
- if(yych <= 'z') goto yy139;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'A') goto yy141;
+ goto yy1397;
}
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'b') goto yy1412;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
+ }
+ }
yy1412:
- YYDEBUG(1412, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'E') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy140;
- }
+ YYDEBUG(1412, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= 'd') {
- if(yych <= 'Z') goto yy140;
- if(yych <= '`') goto yy3;
- goto yy140;
- } else {
- if(yych <= 'e') goto yy1413;
- if(yych <= 'z') goto yy140;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= 'D') goto yy3;
+ goto yy1398;
}
-yy1413:
- YYDEBUG(1413, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych <= 'R') {
- if(yych <= ')') {
- if(yych <= '(') goto yy3;
- goto yy136;
- } else {
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy141;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= 'q') {
- if(yych <= 'Z') goto yy141;
- if(yych <= '`') goto yy3;
- goto yy141;
- } else {
- if(yych <= 'r') goto yy1414;
- if(yych <= 'z') goto yy141;
- goto yy3;
- }
+ if (yych == 'e') goto yy1413;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
}
+ }
+yy1413:
+ YYDEBUG(1413, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'R') goto yy315;
+ if (yych == 'r') goto yy483;
+ goto yy152;
yy1414:
- YYDEBUG(1414, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'C') {
- if(yych == ')') goto yy136;
- goto yy3;
+ YYDEBUG(1414, *YYCURSOR);
+ yyaccept = 30;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '@') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy1400;
+ goto yy136;
+ } else {
+ if (yych == '/') goto yy144;
+ goto yy1400;
+ }
+ } else {
+ if (yych <= '_') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '^') goto yy1400;
+ goto yy144;
} else {
- if(yych <= 'D') goto yy1415;
- if(yych != 'd') goto yy3;
+ if (yych <= '`') goto yy1400;
+ if (yych <= 'z') goto yy149;
+ goto yy1400;
}
+ }
yy1415:
- YYDEBUG(1415, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy1416;
- if(yych != 'a') goto yy53;
+ YYDEBUG(1415, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'S') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy138;
+ }
+ } else {
+ if (yych <= 'r') {
+ if (yych <= 'Z') goto yy138;
+ if (yych <= '`') goto yy3;
+ goto yy138;
+ } else {
+ if (yych <= 's') goto yy1416;
+ if (yych <= 'z') goto yy138;
+ goto yy3;
+ }
+ }
yy1416:
- YYDEBUG(1416, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy1417;
- if(yych != 'y') goto yy53;
+ YYDEBUG(1416, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'T') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
+ }
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'Z') goto yy139;
+ if (yych <= '`') goto yy3;
+ goto yy139;
+ } else {
+ if (yych <= 't') goto yy1417;
+ if (yych <= 'z') goto yy139;
+ goto yy3;
+ }
+ }
yy1417:
- YYDEBUG(1417, *YYCURSOR);
- ++YYCURSOR;
+ YYDEBUG(1417, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'E') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy140;
+ }
+ } else {
+ if (yych <= 'd') {
+ if (yych <= 'Z') goto yy140;
+ if (yych <= '`') goto yy3;
+ goto yy140;
+ } else {
+ if (yych <= 'e') goto yy1418;
+ if (yych <= 'z') goto yy140;
+ goto yy3;
+ }
+ }
yy1418:
- YYDEBUG(1418, *YYCURSOR);
+ YYDEBUG(1418, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych <= 'R') {
+ if (yych <= ')') {
+ if (yych <= '(') goto yy3;
+ goto yy136;
+ } else {
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy141;
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'Z') goto yy141;
+ if (yych <= '`') goto yy3;
+ goto yy141;
+ } else {
+ if (yych <= 'r') goto yy1419;
+ if (yych <= 'z') goto yy141;
+ goto yy3;
+ }
+ }
+yy1419:
+ YYDEBUG(1419, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'C') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= 'D') goto yy1420;
+ if (yych != 'd') goto yy3;
+ }
+yy1420:
+ YYDEBUG(1420, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy1421;
+ if (yych != 'a') goto yy53;
+yy1421:
+ YYDEBUG(1421, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy1422;
+ if (yych != 'y') goto yy53;
+yy1422:
+ YYDEBUG(1422, *YYCURSOR);
+ ++YYCURSOR;
+yy1423:
+ YYDEBUG(1423, *YYCURSOR);
#line 894 "ext/date/lib/parse_date.re"
- {
+ {
DEBUG_OUTPUT("yesterday");
TIMELIB_INIT;
TIMELIB_HAVE_RELATIVE();
@@ -22247,154 +22259,153 @@ yy1418:
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
-#line 22251 "ext/date/lib/parse_date.c"
-yy1419:
- YYDEBUG(1419, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'S') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'R') goto yy138;
- goto yy1411;
- }
+#line 22263 "ext/date/lib/parse_date.c"
+yy1424:
+ YYDEBUG(1424, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'S') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy138;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 's') goto yy1420;
- if(yych <= 'z') goto yy143;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'R') goto yy138;
+ goto yy1416;
}
-yy1420:
- YYDEBUG(1420, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'T') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'S') goto yy139;
- goto yy1412;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy138;
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy139;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 't') goto yy1421;
- if(yych <= 'z') goto yy148;
- goto yy3;
- }
+ if (yych == 's') goto yy1425;
+ if (yych <= 'z') goto yy143;
+ goto yy3;
}
-yy1421:
- YYDEBUG(1421, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'E') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'D') goto yy140;
- goto yy1413;
- }
+ }
+yy1425:
+ YYDEBUG(1425, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'T') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy140;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'e') goto yy1422;
- if(yych <= 'z') goto yy149;
- goto yy3;
- }
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'S') goto yy139;
+ goto yy1417;
}
-yy1422:
- YYDEBUG(1422, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'R') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= '@') goto yy3;
- if(yych <= 'Q') goto yy141;
- goto yy1414;
- }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy139;
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych <= 'Z') goto yy141;
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'r') goto yy1423;
- if(yych <= 'z') goto yy150;
- goto yy3;
- }
+ if (yych == 't') goto yy1426;
+ if (yych <= 'z') goto yy148;
+ goto yy3;
}
-yy1423:
- YYDEBUG(1423, *YYCURSOR);
- yyaccept = 0;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= 'D') {
- if(yych <= '.') {
- if(yych == ')') goto yy136;
- goto yy3;
- } else {
- if(yych <= '/') goto yy144;
- if(yych <= 'C') goto yy3;
- goto yy1415;
- }
+ }
+yy1426:
+ YYDEBUG(1426, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'E') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
} else {
- if(yych <= '`') {
- if(yych == '_') goto yy144;
- goto yy3;
- } else {
- if(yych == 'd') goto yy1424;
- if(yych <= 'z') goto yy151;
- goto yy3;
- }
- }
-yy1424:
- YYDEBUG(1424, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy1416;
- if(yych != 'a') goto yy152;
- YYDEBUG(1425, *YYCURSOR);
- yych = *++YYCURSOR;
- if(yych == 'Y') goto yy1417;
- if(yych != 'y') goto yy152;
- YYDEBUG(1426, *YYCURSOR);
- yyaccept = 31;
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych <= '^') {
- if(yych == '/') goto yy144;
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'D') goto yy140;
goto yy1418;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy140;
+ if (yych == '_') goto yy144;
+ goto yy3;
} else {
- if(yych <= '_') goto yy144;
- if(yych <= '`') goto yy1418;
- if(yych <= 'z') goto yy151;
- goto yy1418;
+ if (yych == 'e') goto yy1427;
+ if (yych <= 'z') goto yy149;
+ goto yy3;
}
}
+yy1427:
+ YYDEBUG(1427, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'R') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= '@') goto yy3;
+ if (yych <= 'Q') goto yy141;
+ goto yy1419;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych <= 'Z') goto yy141;
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'r') goto yy1428;
+ if (yych <= 'z') goto yy150;
+ goto yy3;
+ }
+ }
+yy1428:
+ YYDEBUG(1428, *YYCURSOR);
+ yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 'D') {
+ if (yych <= '.') {
+ if (yych == ')') goto yy136;
+ goto yy3;
+ } else {
+ if (yych <= '/') goto yy144;
+ if (yych <= 'C') goto yy3;
+ goto yy1420;
+ }
+ } else {
+ if (yych <= '`') {
+ if (yych == '_') goto yy144;
+ goto yy3;
+ } else {
+ if (yych == 'd') goto yy1429;
+ if (yych <= 'z') goto yy151;
+ goto yy3;
+ }
+ }
+yy1429:
+ YYDEBUG(1429, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy1421;
+ if (yych != 'a') goto yy152;
+ YYDEBUG(1430, *YYCURSOR);
+ yych = *++YYCURSOR;
+ if (yych == 'Y') goto yy1422;
+ if (yych != 'y') goto yy152;
+ YYDEBUG(1431, *YYCURSOR);
+ yyaccept = 31;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= '^') {
+ if (yych == '/') goto yy144;
+ goto yy1423;
+ } else {
+ if (yych <= '_') goto yy144;
+ if (yych <= '`') goto yy1423;
+ if (yych <= 'z') goto yy151;
+ goto yy1423;
+ }
}
-#line 1542 "ext/date/lib/parse_date.re"
+#line 1545 "ext/date/lib/parse_date.re"
}
@@ -22472,7 +22483,7 @@ timelib_time* timelib_strtotime(char *s, int len, struct timelib_error_container
void timelib_fill_holes(timelib_time *parsed, timelib_time *now, int options)
{
- if (!(options && TIMELIB_OVERRIDE_TIME) && parsed->have_date && !parsed->have_time) {
+ if (!(options & TIMELIB_OVERRIDE_TIME) && parsed->have_date && !parsed->have_time) {
parsed->h = 0;
parsed->i = 0;
parsed->s = 0;
@@ -22492,7 +22503,7 @@ void timelib_fill_holes(timelib_time *parsed, timelib_time *now, int options)
parsed->tz_abbr = now->tz_abbr ? strdup(now->tz_abbr) : NULL;
}
if (!parsed->tz_info) {
- parsed->tz_info = now->tz_info ? timelib_tzinfo_clone(now->tz_info) : NULL;
+ parsed->tz_info = now->tz_info ? (!(options & TIMELIB_NO_CLONE) ? timelib_tzinfo_clone(now->tz_info) : now->tz_info) : NULL;
}
if (parsed->zone_type == 0 && now->zone_type != 0) {
parsed->zone_type = now->zone_type;
diff --git a/ext/date/lib/parse_date.re b/ext/date/lib/parse_date.re
index 6a24ff1f0..9cf06ebe0 100644
--- a/ext/date/lib/parse_date.re
+++ b/ext/date/lib/parse_date.re
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: parse_date.re,v 1.26.2.27.2.13 2008/02/25 18:28:18 derick Exp $ */
+/* $Id: parse_date.re,v 1.26.2.27.2.15 2008/12/18 14:57:04 derick Exp $ */
#include "timelib.h"
@@ -732,7 +732,7 @@ static long timelib_get_zone(char **ptr, int *dst, timelib_time *t, int *tz_not_
}
#endif
/* If we have a TimeZone identifier to start with, use it */
- if (strstr(tz_abbr, "/")) {
+ if (strstr(tz_abbr, "/") || strcmp(tz_abbr, "UTC") == 0) {
if ((res = timelib_parse_tzfile(tz_abbr, tzdb)) != NULL) {
t->tz_info = res;
t->zone_type = TIMELIB_ZONETYPE_ID;
@@ -792,7 +792,7 @@ tzcorrection = [+-] hour24 ":"? minute?;
daysuf = "st" | "nd" | "rd" | "th";
month = "0"? [0-9] | "1"[0-2];
-day = ([0-2]?[0-9] | "3"[01]) daysuf?;
+day = (([0-2]?[0-9]) | ("3"[01])) daysuf?;
year = [0-9]{1,4};
year2 = [0-9]{2};
year4 = [0-9]{4};
@@ -842,11 +842,11 @@ iso8601date2 = year2 "-" monthlz "-" daylz;
gnudateshorter = year4 "-" month;
gnudateshort = year "-" month "-" day;
pointeddate4 = day [.\t-] month [.-] year4;
-pointeddate2 = day [.\t-] month [.-] year2;
+pointeddate2 = day [.\t] month "." year2;
datefull = day ([ \t.-])* monthtext ([ \t.-])* year;
datenoday = monthtext ([ .\t-])* year4;
datenodayrev = year4 ([ .\t-])* monthtext;
-datetextual = monthtext ([ .\t-])* day [,.stndrh\t ]* year;
+datetextual = monthtext ([ .\t-])* day [,.stndrh\t ]+ year;
datenoyear = monthtext ([ .\t-])* day [,.stndrh\t ]*;
datenoyearrev = day ([ .\t-])* monthtext;
datenocolon = year4 monthlz daylz;
@@ -1125,6 +1125,7 @@ relativetext = reltextnumber space reltextunit;
TIMELIB_HAVE_DATE();
s->time->y = timelib_get_nr((char **) &ptr, 4);
s->time->m = timelib_get_nr((char **) &ptr, 2);
+ s->time->d = 1;
TIMELIB_PROCESS_YEAR(s->time->y);
TIMELIB_DEINIT;
return TIMELIB_ISO_DATE;
@@ -1406,7 +1407,9 @@ relativetext = reltextnumber space reltextunit;
TIMELIB_UNHAVE_TIME();
relunit = timelib_lookup_relunit((char**) &ptr);
s->time->relative.weekday = relunit->multiplier;
- s->time->relative.weekday_behavior = 1;
+ if (s->time->relative.weekday_behavior != 2) {
+ s->time->relative.weekday_behavior = 1;
+ }
TIMELIB_DEINIT;
return TIMELIB_WEEKDAY;
@@ -1517,7 +1520,7 @@ relativetext = reltextnumber space reltextunit;
while(*ptr) {
i = timelib_get_unsigned_nr((char **) &ptr, 24);
timelib_eat_spaces((char **) &ptr);
- timelib_set_relative((char **) &ptr, i, 0, s);
+ timelib_set_relative((char **) &ptr, i, 1, s);
}
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
@@ -1616,7 +1619,7 @@ timelib_time* timelib_strtotime(char *s, int len, struct timelib_error_container
void timelib_fill_holes(timelib_time *parsed, timelib_time *now, int options)
{
- if (!(options && TIMELIB_OVERRIDE_TIME) && parsed->have_date && !parsed->have_time) {
+ if (!(options & TIMELIB_OVERRIDE_TIME) && parsed->have_date && !parsed->have_time) {
parsed->h = 0;
parsed->i = 0;
parsed->s = 0;
@@ -1636,7 +1639,7 @@ void timelib_fill_holes(timelib_time *parsed, timelib_time *now, int options)
parsed->tz_abbr = now->tz_abbr ? strdup(now->tz_abbr) : NULL;
}
if (!parsed->tz_info) {
- parsed->tz_info = now->tz_info ? timelib_tzinfo_clone(now->tz_info) : NULL;
+ parsed->tz_info = now->tz_info ? (!(options & TIMELIB_NO_CLONE) ? timelib_tzinfo_clone(now->tz_info) : now->tz_info) : NULL;
}
if (parsed->zone_type == 0 && now->zone_type != 0) {
parsed->zone_type = now->zone_type;
diff --git a/ext/date/lib/parse_tz.c b/ext/date/lib/parse_tz.c
index 1ec5def7c..c332f7a29 100644
--- a/ext/date/lib/parse_tz.c
+++ b/ext/date/lib/parse_tz.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: parse_tz.c,v 1.20.2.6.2.14 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: parse_tz.c,v 1.20.2.6.2.18 2008/12/31 11:17:36 sebastian Exp $ */
#include "timelib.h"
@@ -125,46 +125,52 @@ static void read_types(char **tzf, timelib_tzinfo *tz)
memcpy(tz->timezone_abbr, *tzf, sizeof(char) * tz->charcnt);
*tzf += sizeof(char) * tz->charcnt;
- leap_buffer = (int32_t *) malloc(tz->leapcnt * 2 * sizeof(int32_t));
- if (!leap_buffer) {
- return;
- }
- memcpy(leap_buffer, *tzf, sizeof(int32_t) * tz->leapcnt * 2);
- *tzf += sizeof(int32_t) * tz->leapcnt * 2;
+ if (tz->leapcnt) {
+ leap_buffer = (int32_t *) malloc(tz->leapcnt * 2 * sizeof(int32_t));
+ if (!leap_buffer) {
+ return;
+ }
+ memcpy(leap_buffer, *tzf, sizeof(int32_t) * tz->leapcnt * 2);
+ *tzf += sizeof(int32_t) * tz->leapcnt * 2;
- tz->leap_times = (tlinfo*) malloc(tz->leapcnt * sizeof(tlinfo));
- if (!tz->leap_times) {
- return;
- }
- for (i = 0; i < tz->leapcnt; i++) {
- tz->leap_times[i].trans = timelib_conv_int(leap_buffer[i * 2]);
- tz->leap_times[i].offset = timelib_conv_int(leap_buffer[i * 2 + 1]);
- }
- free(leap_buffer);
-
- buffer = (unsigned char*) malloc(tz->ttisstdcnt * sizeof(unsigned char));
- if (!buffer) {
- return;
+ tz->leap_times = (tlinfo*) malloc(tz->leapcnt * sizeof(tlinfo));
+ if (!tz->leap_times) {
+ return;
+ }
+ for (i = 0; i < tz->leapcnt; i++) {
+ tz->leap_times[i].trans = timelib_conv_int(leap_buffer[i * 2]);
+ tz->leap_times[i].offset = timelib_conv_int(leap_buffer[i * 2 + 1]);
+ }
+ free(leap_buffer);
}
- memcpy(buffer, *tzf, sizeof(unsigned char) * tz->ttisstdcnt);
- *tzf += sizeof(unsigned char) * tz->ttisstdcnt;
- for (i = 0; i < tz->ttisstdcnt; i++) {
- tz->type[i].isstdcnt = buffer[i];
- }
- free(buffer);
+ if (tz->ttisstdcnt) {
+ buffer = (unsigned char*) malloc(tz->ttisstdcnt * sizeof(unsigned char));
+ if (!buffer) {
+ return;
+ }
+ memcpy(buffer, *tzf, sizeof(unsigned char) * tz->ttisstdcnt);
+ *tzf += sizeof(unsigned char) * tz->ttisstdcnt;
- buffer = (unsigned char*) malloc(tz->ttisgmtcnt * sizeof(unsigned char));
- if (!buffer) {
- return;
+ for (i = 0; i < tz->ttisstdcnt; i++) {
+ tz->type[i].isstdcnt = buffer[i];
+ }
+ free(buffer);
}
- memcpy(buffer, *tzf, sizeof(unsigned char) * tz->ttisgmtcnt);
- *tzf += sizeof(unsigned char) * tz->ttisgmtcnt;
- for (i = 0; i < tz->ttisgmtcnt; i++) {
- tz->type[i].isgmtcnt = buffer[i];
+ if (tz->ttisgmtcnt) {
+ buffer = (unsigned char*) malloc(tz->ttisgmtcnt * sizeof(unsigned char));
+ if (!buffer) {
+ return;
+ }
+ memcpy(buffer, *tzf, sizeof(unsigned char) * tz->ttisgmtcnt);
+ *tzf += sizeof(unsigned char) * tz->ttisgmtcnt;
+
+ for (i = 0; i < tz->ttisgmtcnt; i++) {
+ tz->type[i].isgmtcnt = buffer[i];
+ }
+ free(buffer);
}
- free(buffer);
}
void timelib_dump_tzinfo(timelib_tzinfo *tz)
@@ -391,7 +397,7 @@ timelib_sll timelib_get_current_offset(timelib_time *t)
switch (t->zone_type) {
case TIMELIB_ZONETYPE_ABBR:
case TIMELIB_ZONETYPE_OFFSET:
- return t->z * 60;
+ return (t->z + t->dst) * -60;
case TIMELIB_ZONETYPE_ID:
gmt_offset = timelib_get_time_zone_info(t->sse, t->tz_info);
diff --git a/ext/date/lib/timelib.c b/ext/date/lib/timelib.c
index 1a5e3c632..5c0355486 100644
--- a/ext/date/lib/timelib.c
+++ b/ext/date/lib/timelib.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: timelib.c,v 1.7.2.4.2.7 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: timelib.c,v 1.7.2.4.2.8 2008/12/31 11:17:36 sebastian Exp $ */
#include "timelib.h"
#include <ctype.h>
diff --git a/ext/date/lib/timelib.h b/ext/date/lib/timelib.h
index 04db962bb..0ca5d9ee4 100644
--- a/ext/date/lib/timelib.h
+++ b/ext/date/lib/timelib.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: timelib.h,v 1.10.2.11.2.5 2008/02/22 09:48:18 derick Exp $ */
+/* $Id: timelib.h,v 1.10.2.11.2.7 2008/12/31 11:17:36 sebastian Exp $ */
#ifndef __TIMELIB_H__
#define __TIMELIB_H__
@@ -28,6 +28,7 @@
#define TIMELIB_NONE 0x00
#define TIMELIB_OVERRIDE_TIME 0x01
+#define TIMELIB_NO_CLONE 0x02
#define TIMELIB_SPECIAL_WEEKDAY 0x01
diff --git a/ext/date/lib/timelib_structs.h b/ext/date/lib/timelib_structs.h
index 57eb4aafd..2b1bc4640 100644
--- a/ext/date/lib/timelib_structs.h
+++ b/ext/date/lib/timelib_structs.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,12 +16,12 @@
+----------------------------------------------------------------------+
*/
-/* $Id: timelib_structs.h,v 1.13.2.6.2.4 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: timelib_structs.h,v 1.13.2.6.2.6 2008/12/31 11:17:36 sebastian Exp $ */
#ifndef __TIMELIB_STRUCTS_H__
#define __TIMELIB_STRUCTS_H__
-#include <timelib_config.h>
+#include "timelib_config.h"
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
diff --git a/ext/date/lib/timezonedb.h b/ext/date/lib/timezonedb.h
index bbd1c570a..223a75cfd 100644
--- a/ext/date/lib/timezonedb.h
+++ b/ext/date/lib/timezonedb.h
@@ -1,575 +1,579 @@
-const timelib_tzdb_index_entry timezonedb_idx_builtin[557] = {
+const timelib_tzdb_index_entry timezonedb_idx_builtin[560] = {
{ "Africa/Abidjan" , 0x000000 },
- { "Africa/Accra" , 0x000049 },
- { "Africa/Addis_Ababa" , 0x0000E5 },
- { "Africa/Algiers" , 0x00012F },
- { "Africa/Asmara" , 0x00024E },
- { "Africa/Asmera" , 0x000298 },
- { "Africa/Bamako" , 0x0002E2 },
- { "Africa/Bangui" , 0x000341 },
- { "Africa/Banjul" , 0x00038A },
- { "Africa/Bissau" , 0x0003F5 },
- { "Africa/Blantyre" , 0x00044F },
- { "Africa/Brazzaville" , 0x000498 },
- { "Africa/Bujumbura" , 0x0004E1 },
- { "Africa/Cairo" , 0x000519 },
- { "Africa/Casablanca" , 0x0008D4 },
- { "Africa/Ceuta" , 0x000990 },
- { "Africa/Conakry" , 0x000C7C },
- { "Africa/Dakar" , 0x000CDB },
- { "Africa/Dar_es_Salaam" , 0x000D35 },
- { "Africa/Djibouti" , 0x000D96 },
- { "Africa/Douala" , 0x000DDF },
- { "Africa/El_Aaiun" , 0x000E28 },
- { "Africa/Freetown" , 0x000E82 },
- { "Africa/Gaborone" , 0x000F85 },
- { "Africa/Harare" , 0x000FD4 },
- { "Africa/Johannesburg" , 0x00101D },
- { "Africa/Kampala" , 0x00107F },
- { "Africa/Khartoum" , 0x0010F2 },
- { "Africa/Kigali" , 0x0011F9 },
- { "Africa/Kinshasa" , 0x001242 },
- { "Africa/Lagos" , 0x00127A },
- { "Africa/Libreville" , 0x0012C3 },
- { "Africa/Lome" , 0x00130C },
- { "Africa/Luanda" , 0x001344 },
- { "Africa/Lubumbashi" , 0x00138D },
- { "Africa/Lusaka" , 0x0013C5 },
- { "Africa/Malabo" , 0x00140E },
- { "Africa/Maputo" , 0x001468 },
- { "Africa/Maseru" , 0x0014B1 },
- { "Africa/Mbabane" , 0x00150D },
- { "Africa/Mogadishu" , 0x001557 },
- { "Africa/Monrovia" , 0x0015A6 },
- { "Africa/Nairobi" , 0x001600 },
- { "Africa/Ndjamena" , 0x001673 },
- { "Africa/Niamey" , 0x0016D3 },
- { "Africa/Nouakchott" , 0x00173A },
- { "Africa/Ouagadougou" , 0x001799 },
- { "Africa/Porto-Novo" , 0x0017E2 },
- { "Africa/Sao_Tome" , 0x00183C },
- { "Africa/Timbuktu" , 0x001885 },
- { "Africa/Tripoli" , 0x0018E4 },
- { "Africa/Tunis" , 0x0019D2 },
- { "Africa/Windhoek" , 0x001BFA },
- { "America/Adak" , 0x001E35 },
- { "America/Anchorage" , 0x00218F },
- { "America/Anguilla" , 0x0024EC },
- { "America/Antigua" , 0x002535 },
- { "America/Araguaina" , 0x00258F },
- { "America/Argentina/Buenos_Aires" , 0x0026D5 },
- { "America/Argentina/Catamarca" , 0x00297F },
- { "America/Argentina/ComodRivadavia" , 0x002C40 },
- { "America/Argentina/Cordoba" , 0x002F01 },
- { "America/Argentina/Jujuy" , 0x0031B8 },
- { "America/Argentina/La_Rioja" , 0x00347D },
- { "America/Argentina/Mendoza" , 0x003743 },
- { "America/Argentina/Rio_Gallegos" , 0x003A12 },
- { "America/Argentina/San_Juan" , 0x003CD3 },
- { "America/Argentina/San_Luis" , 0x003F99 },
- { "America/Argentina/Tucuman" , 0x004138 },
- { "America/Argentina/Ushuaia" , 0x0043F9 },
- { "America/Aruba" , 0x0046BA },
- { "America/Asuncion" , 0x004714 },
- { "America/Atikokan" , 0x0049ED },
- { "America/Atka" , 0x004A73 },
- { "America/Bahia" , 0x004DCD },
- { "America/Barbados" , 0x004F45 },
- { "America/Belem" , 0x004FD3 },
- { "America/Belize" , 0x0050B5 },
- { "America/Blanc-Sablon" , 0x005225 },
- { "America/Boa_Vista" , 0x00529A },
- { "America/Bogota" , 0x005390 },
- { "America/Boise" , 0x0053F0 },
- { "America/Buenos_Aires" , 0x005752 },
- { "America/Cambridge_Bay" , 0x0059FC },
- { "America/Campo_Grande" , 0x005CFC },
- { "America/Cancun" , 0x005FCD },
- { "America/Caracas" , 0x0061E8 },
- { "America/Catamarca" , 0x006243 },
- { "America/Cayenne" , 0x006504 },
- { "America/Cayman" , 0x00655A },
- { "America/Chicago" , 0x0065A3 },
- { "America/Chihuahua" , 0x006AA2 },
- { "America/Coral_Harbour" , 0x006CCC },
- { "America/Cordoba" , 0x006D52 },
- { "America/Costa_Rica" , 0x007009 },
- { "America/Cuiaba" , 0x007087 },
- { "America/Curacao" , 0x00734E },
- { "America/Danmarkshavn" , 0x0073A8 },
- { "America/Dawson" , 0x0074BF },
- { "America/Dawson_Creek" , 0x0077B6 },
- { "America/Denver" , 0x00793B },
- { "America/Detroit" , 0x007CA8 },
- { "America/Dominica" , 0x007FD3 },
- { "America/Edmonton" , 0x00801C },
- { "America/Eirunepe" , 0x008386 },
- { "America/El_Salvador" , 0x008472 },
- { "America/Ensenada" , 0x0084DB },
- { "America/Fort_Wayne" , 0x00894C },
- { "America/Fortaleza" , 0x008838 },
+ { "Africa/Accra" , 0x000055 },
+ { "Africa/Addis_Ababa" , 0x0000FD },
+ { "Africa/Algiers" , 0x000153 },
+ { "Africa/Asmara" , 0x00027E },
+ { "Africa/Asmera" , 0x0002D4 },
+ { "Africa/Bamako" , 0x00032A },
+ { "Africa/Bangui" , 0x000395 },
+ { "Africa/Banjul" , 0x0003EA },
+ { "Africa/Bissau" , 0x000461 },
+ { "Africa/Blantyre" , 0x0004C7 },
+ { "Africa/Brazzaville" , 0x00051C },
+ { "Africa/Bujumbura" , 0x000571 },
+ { "Africa/Cairo" , 0x0005B5 },
+ { "Africa/Casablanca" , 0x00097C },
+ { "Africa/Ceuta" , 0x000A4E },
+ { "Africa/Conakry" , 0x000D55 },
+ { "Africa/Dakar" , 0x000DC0 },
+ { "Africa/Dar_es_Salaam" , 0x000E26 },
+ { "Africa/Djibouti" , 0x000E93 },
+ { "Africa/Douala" , 0x000EE8 },
+ { "Africa/El_Aaiun" , 0x000F3D },
+ { "Africa/Freetown" , 0x000FA3 },
+ { "Africa/Gaborone" , 0x0010B2 },
+ { "Africa/Harare" , 0x00110D },
+ { "Africa/Johannesburg" , 0x001162 },
+ { "Africa/Kampala" , 0x0011D0 },
+ { "Africa/Khartoum" , 0x00124F },
+ { "Africa/Kigali" , 0x001362 },
+ { "Africa/Kinshasa" , 0x0013B7 },
+ { "Africa/Lagos" , 0x001412 },
+ { "Africa/Libreville" , 0x001467 },
+ { "Africa/Lome" , 0x0014BC },
+ { "Africa/Luanda" , 0x001500 },
+ { "Africa/Lubumbashi" , 0x001555 },
+ { "Africa/Lusaka" , 0x0015B0 },
+ { "Africa/Malabo" , 0x001605 },
+ { "Africa/Maputo" , 0x00166B },
+ { "Africa/Maseru" , 0x0016C0 },
+ { "Africa/Mbabane" , 0x001728 },
+ { "Africa/Mogadishu" , 0x00177E },
+ { "Africa/Monrovia" , 0x0017D9 },
+ { "Africa/Nairobi" , 0x00183F },
+ { "Africa/Ndjamena" , 0x0018BE },
+ { "Africa/Niamey" , 0x00192A },
+ { "Africa/Nouakchott" , 0x00199D },
+ { "Africa/Ouagadougou" , 0x001A08 },
+ { "Africa/Porto-Novo" , 0x001A5D },
+ { "Africa/Sao_Tome" , 0x001AC3 },
+ { "Africa/Timbuktu" , 0x001B18 },
+ { "Africa/Tripoli" , 0x001B83 },
+ { "Africa/Tunis" , 0x001C7D },
+ { "Africa/Windhoek" , 0x001EB1 },
+ { "America/Adak" , 0x0020F8 },
+ { "America/Anchorage" , 0x00246E },
+ { "America/Anguilla" , 0x0027E2 },
+ { "America/Antigua" , 0x002837 },
+ { "America/Araguaina" , 0x00289D },
+ { "America/Argentina/Buenos_Aires" , 0x0029F8 },
+ { "America/Argentina/Catamarca" , 0x002CC3 },
+ { "America/Argentina/ComodRivadavia" , 0x002E84 },
+ { "America/Argentina/Cordoba" , 0x00302A },
+ { "America/Argentina/Jujuy" , 0x00331C },
+ { "America/Argentina/La_Rioja" , 0x0034D0 },
+ { "America/Argentina/Mendoza" , 0x003688 },
+ { "America/Argentina/Rio_Gallegos" , 0x003848 },
+ { "America/Argentina/Salta" , 0x0039FD },
+ { "America/Argentina/San_Juan" , 0x003BA9 },
+ { "America/Argentina/San_Luis" , 0x003D61 },
+ { "America/Argentina/Tucuman" , 0x003F13 },
+ { "America/Argentina/Ushuaia" , 0x0041EC },
+ { "America/Aruba" , 0x0043A7 },
+ { "America/Asuncion" , 0x00440D },
+ { "America/Atikokan" , 0x0046F2 },
+ { "America/Atka" , 0x0047C8 },
+ { "America/Bahia" , 0x004B2E },
+ { "America/Barbados" , 0x004CB7 },
+ { "America/Belem" , 0x004D51 },
+ { "America/Belize" , 0x004E4C },
+ { "America/Blanc-Sablon" , 0x004FC8 },
+ { "America/Boa_Vista" , 0x00507C },
+ { "America/Bogota" , 0x005185 },
+ { "America/Boise" , 0x0051F1 },
+ { "America/Buenos_Aires" , 0x005588 },
+ { "America/Cambridge_Bay" , 0x00583E },
+ { "America/Campo_Grande" , 0x005B66 },
+ { "America/Cancun" , 0x005E55 },
+ { "America/Caracas" , 0x006097 },
+ { "America/Catamarca" , 0x0060FE },
+ { "America/Cayenne" , 0x0062A4 },
+ { "America/Cayman" , 0x006306 },
+ { "America/Chicago" , 0x00635B },
+ { "America/Chihuahua" , 0x006872 },
+ { "America/Coral_Harbour" , 0x006AC1 },
+ { "America/Cordoba" , 0x006B53 },
+ { "America/Costa_Rica" , 0x006E16 },
+ { "America/Cuiaba" , 0x006EA0 },
+ { "America/Curacao" , 0x00717E },
+ { "America/Danmarkshavn" , 0x0071E4 },
+ { "America/Dawson" , 0x007328 },
+ { "America/Dawson_Creek" , 0x007645 },
+ { "America/Denver" , 0x00781F },
+ { "America/Detroit" , 0x007BA5 },
+ { "America/Dominica" , 0x007F04 },
+ { "America/Edmonton" , 0x007F59 },
+ { "America/Eirunepe" , 0x008311 },
+ { "America/El_Salvador" , 0x008424 },
+ { "America/Ensenada" , 0x008499 },
+ { "America/Fort_Wayne" , 0x008940 },
+ { "America/Fortaleza" , 0x008802 },
{ "America/Glace_Bay" , 0x008BAA },
- { "America/Godthab" , 0x008ECE },
- { "America/Goose_Bay" , 0x009178 },
- { "America/Grand_Turk" , 0x009600 },
- { "America/Grenada" , 0x0098A3 },
- { "America/Guadeloupe" , 0x0098EC },
- { "America/Guatemala" , 0x009935 },
- { "America/Guayaquil" , 0x0099B2 },
- { "America/Guyana" , 0x0099FB },
- { "America/Halifax" , 0x009A70 },
- { "America/Havana" , 0x009F4C },
- { "America/Hermosillo" , 0x00A2B3 },
- { "America/Indiana/Indianapolis" , 0x00A366 },
- { "America/Indiana/Knox" , 0x00A5C4 },
- { "America/Indiana/Marengo" , 0x00A929 },
- { "America/Indiana/Petersburg" , 0x00AB9B },
- { "America/Indiana/Tell_City" , 0x00B0AC },
- { "America/Indiana/Vevay" , 0x00B314 },
- { "America/Indiana/Vincennes" , 0x00B518 },
- { "America/Indiana/Winamac" , 0x00B780 },
- { "America/Indianapolis" , 0x00AE4E },
- { "America/Inuvik" , 0x00BA06 },
- { "America/Iqaluit" , 0x00BCC7 },
- { "America/Jamaica" , 0x00BFB1 },
- { "America/Jujuy" , 0x00C06A },
- { "America/Juneau" , 0x00C32F },
- { "America/Kentucky/Louisville" , 0x00C683 },
- { "America/Kentucky/Monticello" , 0x00CA6C },
- { "America/Knox_IN" , 0x00CDBF },
- { "America/La_Paz" , 0x00D124 },
- { "America/Lima" , 0x00D17F },
- { "America/Los_Angeles" , 0x00D21B },
- { "America/Louisville" , 0x00D614 },
- { "America/Maceio" , 0x00D9FD },
- { "America/Managua" , 0x00DB1B },
- { "America/Manaus" , 0x00DBC2 },
- { "America/Marigot" , 0x00DCAE },
- { "America/Martinique" , 0x00DCF7 },
- { "America/Mazatlan" , 0x00DD57 },
- { "America/Mendoza" , 0x00DF90 },
- { "America/Menominee" , 0x00E25F },
- { "America/Merida" , 0x00E58D },
- { "America/Mexico_City" , 0x00E79C },
- { "America/Miquelon" , 0x00E9EE },
- { "America/Moncton" , 0x00EC54 },
- { "America/Monterrey" , 0x00F0C2 },
- { "America/Montevideo" , 0x00F2C5 },
- { "America/Montreal" , 0x00F5CB },
- { "America/Montserrat" , 0x00FAAF },
- { "America/Nassau" , 0x00FAF8 },
- { "America/New_York" , 0x00FE31 },
- { "America/Nipigon" , 0x010324 },
- { "America/Nome" , 0x01061E },
- { "America/Noronha" , 0x010977 },
- { "America/North_Dakota/Center" , 0x010A8B },
- { "America/North_Dakota/New_Salem" , 0x010DE8 },
- { "America/Panama" , 0x011145 },
- { "America/Pangnirtung" , 0x01118E },
- { "America/Paramaribo" , 0x011495 },
- { "America/Phoenix" , 0x01151B },
- { "America/Port-au-Prince" , 0x01159D },
- { "America/Port_of_Spain" , 0x01178F },
- { "America/Porto_Acre" , 0x0116AD },
- { "America/Porto_Velho" , 0x0117D8 },
- { "America/Puerto_Rico" , 0x0118BA },
- { "America/Rainy_River" , 0x011919 },
- { "America/Rankin_Inlet" , 0x011C13 },
- { "America/Recife" , 0x011ECF },
- { "America/Regina" , 0x011FE3 },
- { "America/Resolute" , 0x012160 },
- { "America/Rio_Branco" , 0x0122E6 },
- { "America/Rosario" , 0x0123C8 },
- { "America/Santiago" , 0x01267F },
- { "America/Santo_Domingo" , 0x012A0E },
- { "America/Sao_Paulo" , 0x012AC8 },
- { "America/Scoresbysund" , 0x012D99 },
- { "America/Shiprock" , 0x01305C },
- { "America/St_Barthelemy" , 0x0133C9 },
- { "America/St_Johns" , 0x013412 },
- { "America/St_Kitts" , 0x013931 },
- { "America/St_Lucia" , 0x01397A },
- { "America/St_Thomas" , 0x0139C3 },
- { "America/St_Vincent" , 0x013A0C },
- { "America/Swift_Current" , 0x013A55 },
- { "America/Tegucigalpa" , 0x013B3C },
- { "America/Thule" , 0x013BAF },
- { "America/Thunder_Bay" , 0x013DDA },
- { "America/Tijuana" , 0x0140F4 },
- { "America/Toronto" , 0x014451 },
- { "America/Tortola" , 0x014935 },
- { "America/Vancouver" , 0x01497E },
- { "America/Virgin" , 0x014D8B },
- { "America/Whitehorse" , 0x014DD4 },
- { "America/Winnipeg" , 0x0150CB },
- { "America/Yakutat" , 0x0154D9 },
- { "America/Yellowknife" , 0x015815 },
- { "Antarctica/Casey" , 0x015AEC },
- { "Antarctica/Davis" , 0x015B35 },
- { "Antarctica/DumontDUrville" , 0x015B89 },
- { "Antarctica/Mawson" , 0x015BE9 },
- { "Antarctica/McMurdo" , 0x015C33 },
- { "Antarctica/Palmer" , 0x015F0D },
- { "Antarctica/Rothera" , 0x016200 },
- { "Antarctica/South_Pole" , 0x01624A },
- { "Antarctica/Syowa" , 0x016524 },
- { "Antarctica/Vostok" , 0x01656E },
- { "Arctic/Longyearbyen" , 0x0165B8 },
- { "Asia/Aden" , 0x0168DE },
- { "Asia/Almaty" , 0x016927 },
- { "Asia/Amman" , 0x016A8C },
- { "Asia/Anadyr" , 0x016D40 },
- { "Asia/Aqtau" , 0x01700C },
- { "Asia/Aqtobe" , 0x0171CE },
- { "Asia/Ashgabat" , 0x01736B },
- { "Asia/Ashkhabad" , 0x01747C },
- { "Asia/Baghdad" , 0x01758D },
- { "Asia/Bahrain" , 0x0176F6 },
- { "Asia/Baku" , 0x017750 },
- { "Asia/Bangkok" , 0x017A2C },
- { "Asia/Beirut" , 0x017A75 },
- { "Asia/Bishkek" , 0x017D76 },
- { "Asia/Brunei" , 0x017F16 },
- { "Asia/Calcutta" , 0x017F6C },
- { "Asia/Choibalsan" , 0x017FD9 },
- { "Asia/Chongqing" , 0x018127 },
- { "Asia/Chungking" , 0x0181CA },
- { "Asia/Colombo" , 0x01826D },
- { "Asia/Dacca" , 0x0182FD },
- { "Asia/Damascus" , 0x018380 },
- { "Asia/Dhaka" , 0x0186C4 },
- { "Asia/Dili" , 0x018747 },
- { "Asia/Dubai" , 0x0187C4 },
- { "Asia/Dushanbe" , 0x01880D },
- { "Asia/Gaza" , 0x018904 },
- { "Asia/Harbin" , 0x018C41 },
- { "Asia/Ho_Chi_Minh" , 0x018CFB },
- { "Asia/Hong_Kong" , 0x018D67 },
- { "Asia/Hovd" , 0x018F11 },
- { "Asia/Irkutsk" , 0x019052 },
- { "Asia/Istanbul" , 0x019316 },
- { "Asia/Jakarta" , 0x0196F7 },
- { "Asia/Jayapura" , 0x019787 },
- { "Asia/Jerusalem" , 0x0197E6 },
- { "Asia/Kabul" , 0x019B09 },
- { "Asia/Kamchatka" , 0x019B4E },
- { "Asia/Karachi" , 0x019E12 },
- { "Asia/Kashgar" , 0x019EA7 },
- { "Asia/Katmandu" , 0x019F57 },
- { "Asia/Kolkata" , 0x019FB1 },
- { "Asia/Krasnoyarsk" , 0x01A01E },
- { "Asia/Kuala_Lumpur" , 0x01A2E2 },
- { "Asia/Kuching" , 0x01A380 },
- { "Asia/Kuwait" , 0x01A453 },
- { "Asia/Macao" , 0x01A49C },
- { "Asia/Macau" , 0x01A5CB },
- { "Asia/Magadan" , 0x01A6FA },
- { "Asia/Makassar" , 0x01A9BE },
- { "Asia/Manila" , 0x01AA2E },
- { "Asia/Muscat" , 0x01AAA7 },
- { "Asia/Nicosia" , 0x01AAF0 },
- { "Asia/Novosibirsk" , 0x01ADCC },
- { "Asia/Omsk" , 0x01B09D },
- { "Asia/Oral" , 0x01B361 },
- { "Asia/Phnom_Penh" , 0x01B516 },
- { "Asia/Pontianak" , 0x01B582 },
- { "Asia/Pyongyang" , 0x01B622 },
- { "Asia/Qatar" , 0x01B683 },
- { "Asia/Qyzylorda" , 0x01B6DD },
- { "Asia/Rangoon" , 0x01B887 },
- { "Asia/Riyadh" , 0x01B8F3 },
- { "Asia/Saigon" , 0x01B93C },
- { "Asia/Sakhalin" , 0x01B9A8 },
- { "Asia/Samarkand" , 0x01BC81 },
- { "Asia/Seoul" , 0x01BD9C },
- { "Asia/Shanghai" , 0x01BE34 },
- { "Asia/Singapore" , 0x01BED9 },
- { "Asia/Taipei" , 0x01BF84 },
- { "Asia/Tashkent" , 0x01C090 },
- { "Asia/Tbilisi" , 0x01C1A6 },
- { "Asia/Tehran" , 0x01C354 },
- { "Asia/Tel_Aviv" , 0x01C5B6 },
- { "Asia/Thimbu" , 0x01C8D9 },
- { "Asia/Thimphu" , 0x01C933 },
- { "Asia/Tokyo" , 0x01C98D },
- { "Asia/Ujung_Pandang" , 0x01CA0A },
- { "Asia/Ulaanbaatar" , 0x01CA7A },
- { "Asia/Ulan_Bator" , 0x01CBBB },
- { "Asia/Urumqi" , 0x01CCFC },
- { "Asia/Vientiane" , 0x01CD9F },
- { "Asia/Vladivostok" , 0x01CE0B },
- { "Asia/Yakutsk" , 0x01D0D6 },
- { "Asia/Yekaterinburg" , 0x01D39A },
- { "Asia/Yerevan" , 0x01D689 },
- { "Atlantic/Azores" , 0x01D981 },
- { "Atlantic/Bermuda" , 0x01DE72 },
- { "Atlantic/Canary" , 0x01E147 },
- { "Atlantic/Cape_Verde" , 0x01E403 },
- { "Atlantic/Faeroe" , 0x01E470 },
- { "Atlantic/Faroe" , 0x01E708 },
- { "Atlantic/Jan_Mayen" , 0x01E9A0 },
- { "Atlantic/Madeira" , 0x01ECC6 },
- { "Atlantic/Reykjavik" , 0x01F1B4 },
- { "Atlantic/South_Georgia" , 0x01F361 },
- { "Atlantic/St_Helena" , 0x01F661 },
- { "Atlantic/Stanley" , 0x01F399 },
- { "Australia/ACT" , 0x01F6AA },
- { "Australia/Adelaide" , 0x01F9BB },
- { "Australia/Brisbane" , 0x01FCCC },
- { "Australia/Broken_Hill" , 0x01FD6C },
- { "Australia/Canberra" , 0x020082 },
- { "Australia/Currie" , 0x020393 },
- { "Australia/Darwin" , 0x0206A4 },
- { "Australia/Eucla" , 0x02070C },
- { "Australia/Hobart" , 0x0207B7 },
- { "Australia/LHI" , 0x020AF0 },
- { "Australia/Lindeman" , 0x020D7F },
- { "Australia/Lord_Howe" , 0x020E38 },
- { "Australia/Melbourne" , 0x0210C7 },
- { "Australia/North" , 0x0213D8 },
- { "Australia/NSW" , 0x021440 },
- { "Australia/Perth" , 0x021751 },
- { "Australia/Queensland" , 0x0217FB },
- { "Australia/South" , 0x02189B },
- { "Australia/Sydney" , 0x021BAC },
- { "Australia/Tasmania" , 0x021EBD },
- { "Australia/Victoria" , 0x0221F6 },
- { "Australia/West" , 0x022507 },
- { "Australia/Yancowinna" , 0x0225B1 },
- { "Brazil/Acre" , 0x0228C7 },
- { "Brazil/DeNoronha" , 0x0229A9 },
- { "Brazil/East" , 0x022ABD },
- { "Brazil/West" , 0x022D8E },
- { "Canada/Atlantic" , 0x022E7A },
- { "Canada/Central" , 0x023356 },
- { "Canada/East-Saskatchewan" , 0x023C48 },
- { "Canada/Eastern" , 0x023764 },
- { "Canada/Mountain" , 0x023DC5 },
- { "Canada/Newfoundland" , 0x02412F },
- { "Canada/Pacific" , 0x02464E },
- { "Canada/Saskatchewan" , 0x024A5B },
- { "Canada/Yukon" , 0x024BD8 },
- { "CET" , 0x024ECF },
- { "Chile/Continental" , 0x0251C2 },
- { "Chile/EasterIsland" , 0x025551 },
- { "CST6CDT" , 0x025887 },
- { "Cuba" , 0x025BCC },
- { "EET" , 0x025F33 },
- { "Egypt" , 0x0261DA },
- { "Eire" , 0x026595 },
- { "EST" , 0x026A9A },
- { "EST5EDT" , 0x026AD2 },
- { "Etc/GMT" , 0x026E17 },
- { "Etc/GMT+0" , 0x026EBF },
- { "Etc/GMT+1" , 0x026F31 },
- { "Etc/GMT+10" , 0x026FA6 },
- { "Etc/GMT+11" , 0x02701C },
- { "Etc/GMT+12" , 0x027092 },
- { "Etc/GMT+2" , 0x02717D },
- { "Etc/GMT+3" , 0x0271F1 },
- { "Etc/GMT+4" , 0x027265 },
- { "Etc/GMT+5" , 0x0272D9 },
- { "Etc/GMT+6" , 0x02734D },
- { "Etc/GMT+7" , 0x0273C1 },
- { "Etc/GMT+8" , 0x027435 },
- { "Etc/GMT+9" , 0x0274A9 },
- { "Etc/GMT-0" , 0x026E87 },
- { "Etc/GMT-1" , 0x026EF7 },
- { "Etc/GMT-10" , 0x026F6B },
- { "Etc/GMT-11" , 0x026FE1 },
- { "Etc/GMT-12" , 0x027057 },
- { "Etc/GMT-13" , 0x0270CD },
- { "Etc/GMT-14" , 0x027108 },
- { "Etc/GMT-2" , 0x027143 },
- { "Etc/GMT-3" , 0x0271B7 },
- { "Etc/GMT-4" , 0x02722B },
- { "Etc/GMT-5" , 0x02729F },
- { "Etc/GMT-6" , 0x027313 },
- { "Etc/GMT-7" , 0x027387 },
- { "Etc/GMT-8" , 0x0273FB },
- { "Etc/GMT-9" , 0x02746F },
- { "Etc/GMT0" , 0x026E4F },
- { "Etc/Greenwich" , 0x0274E3 },
- { "Etc/UCT" , 0x02751B },
- { "Etc/Universal" , 0x027553 },
- { "Etc/UTC" , 0x02758B },
- { "Etc/Zulu" , 0x0275C3 },
- { "Europe/Amsterdam" , 0x0275FB },
- { "Europe/Andorra" , 0x027A2D },
- { "Europe/Athens" , 0x027C9D },
- { "Europe/Belfast" , 0x027FD4 },
- { "Europe/Belgrade" , 0x0284FF },
- { "Europe/Berlin" , 0x0287B7 },
- { "Europe/Bratislava" , 0x028AFC },
- { "Europe/Brussels" , 0x028E22 },
- { "Europe/Bucharest" , 0x02924D },
- { "Europe/Budapest" , 0x02956B },
- { "Europe/Chisinau" , 0x0298CD },
- { "Europe/Copenhagen" , 0x029C4F },
- { "Europe/Dublin" , 0x029F4D },
- { "Europe/Gibraltar" , 0x02A452 },
- { "Europe/Guernsey" , 0x02A89D },
- { "Europe/Helsinki" , 0x02ADC8 },
- { "Europe/Isle_of_Man" , 0x02B072 },
- { "Europe/Istanbul" , 0x02B59D },
- { "Europe/Jersey" , 0x02B97E },
- { "Europe/Kaliningrad" , 0x02BEA9 },
- { "Europe/Kiev" , 0x02C1E9 },
- { "Europe/Lisbon" , 0x02C4E6 },
- { "Europe/Ljubljana" , 0x02C9D6 },
- { "Europe/London" , 0x02CC8E },
- { "Europe/Luxembourg" , 0x02D1B9 },
- { "Europe/Madrid" , 0x02D603 },
- { "Europe/Malta" , 0x02D9B5 },
- { "Europe/Mariehamn" , 0x02DD62 },
- { "Europe/Minsk" , 0x02E00C },
- { "Europe/Monaco" , 0x02E30B },
- { "Europe/Moscow" , 0x02E73A },
- { "Europe/Nicosia" , 0x02EA69 },
- { "Europe/Oslo" , 0x02ED45 },
- { "Europe/Paris" , 0x02F06B },
- { "Europe/Podgorica" , 0x02F4A5 },
- { "Europe/Prague" , 0x02F75D },
- { "Europe/Riga" , 0x02FA83 },
- { "Europe/Rome" , 0x02FDBC },
- { "Europe/Samara" , 0x030173 },
- { "Europe/San_Marino" , 0x030477 },
- { "Europe/Sarajevo" , 0x03082E },
- { "Europe/Simferopol" , 0x030AE6 },
- { "Europe/Skopje" , 0x030DF7 },
- { "Europe/Sofia" , 0x0310AF },
- { "Europe/Stockholm" , 0x03139E },
- { "Europe/Tallinn" , 0x031641 },
- { "Europe/Tirane" , 0x03196F },
- { "Europe/Tiraspol" , 0x031C69 },
- { "Europe/Uzhgorod" , 0x031FEB },
- { "Europe/Vaduz" , 0x0322EE },
- { "Europe/Vatican" , 0x032575 },
- { "Europe/Vienna" , 0x03292C },
- { "Europe/Vilnius" , 0x032C4D },
- { "Europe/Volgograd" , 0x032F80 },
- { "Europe/Warsaw" , 0x033266 },
- { "Europe/Zagreb" , 0x03363B },
- { "Europe/Zaporozhye" , 0x0338F3 },
- { "Europe/Zurich" , 0x033BFA },
- { "Factory" , 0x033EA7 },
- { "GB" , 0x033F0C },
- { "GB-Eire" , 0x034437 },
- { "GMT" , 0x034962 },
- { "GMT+0" , 0x034A0A },
- { "GMT-0" , 0x0349D2 },
- { "GMT0" , 0x03499A },
- { "Greenwich" , 0x034A42 },
- { "Hongkong" , 0x034A7A },
- { "HST" , 0x034C24 },
- { "Iceland" , 0x034C5C },
- { "Indian/Antananarivo" , 0x034E09 },
- { "Indian/Chagos" , 0x034E71 },
- { "Indian/Christmas" , 0x034EC7 },
- { "Indian/Cocos" , 0x034EFF },
- { "Indian/Comoro" , 0x034F37 },
- { "Indian/Kerguelen" , 0x034F80 },
- { "Indian/Mahe" , 0x034FC9 },
- { "Indian/Maldives" , 0x035012 },
- { "Indian/Mauritius" , 0x03505B },
- { "Indian/Mayotte" , 0x0350A4 },
- { "Indian/Reunion" , 0x0350ED },
- { "Iran" , 0x035136 },
- { "Israel" , 0x035398 },
- { "Jamaica" , 0x0356BB },
- { "Japan" , 0x035774 },
- { "Kwajalein" , 0x0357F1 },
- { "Libya" , 0x035848 },
- { "MET" , 0x035936 },
- { "Mexico/BajaNorte" , 0x035C29 },
- { "Mexico/BajaSur" , 0x035F86 },
- { "Mexico/General" , 0x0361BF },
- { "MST" , 0x036411 },
- { "MST7MDT" , 0x036449 },
- { "Navajo" , 0x03678E },
- { "NZ" , 0x036AFB },
- { "NZ-CHAT" , 0x036E6D },
- { "Pacific/Apia" , 0x037149 },
- { "Pacific/Auckland" , 0x0371A4 },
- { "Pacific/Chatham" , 0x037516 },
- { "Pacific/Easter" , 0x0377F2 },
- { "Pacific/Efate" , 0x037B28 },
- { "Pacific/Enderbury" , 0x037BE2 },
- { "Pacific/Fakaofo" , 0x037C35 },
- { "Pacific/Fiji" , 0x037C6D },
- { "Pacific/Funafuti" , 0x037CD7 },
- { "Pacific/Galapagos" , 0x037D0F },
- { "Pacific/Gambier" , 0x037D6A },
- { "Pacific/Guadalcanal" , 0x037DB4 },
- { "Pacific/Guam" , 0x037DFD },
- { "Pacific/Honolulu" , 0x037E47 },
- { "Pacific/Johnston" , 0x037EC9 },
- { "Pacific/Kiritimati" , 0x037F01 },
- { "Pacific/Kosrae" , 0x037F54 },
- { "Pacific/Kwajalein" , 0x037F9F },
- { "Pacific/Majuro" , 0x037FF6 },
- { "Pacific/Marquesas" , 0x03803B },
- { "Pacific/Midway" , 0x038085 },
- { "Pacific/Nauru" , 0x0380F5 },
- { "Pacific/Niue" , 0x038161 },
- { "Pacific/Norfolk" , 0x0381B3 },
- { "Pacific/Noumea" , 0x0381FC },
- { "Pacific/Pago_Pago" , 0x038280 },
- { "Pacific/Palau" , 0x0382FD },
- { "Pacific/Pitcairn" , 0x038335 },
- { "Pacific/Ponape" , 0x03837E },
- { "Pacific/Port_Moresby" , 0x0383B7 },
- { "Pacific/Rarotonga" , 0x0383EF },
- { "Pacific/Saipan" , 0x0384BF },
- { "Pacific/Samoa" , 0x038516 },
- { "Pacific/Tahiti" , 0x038593 },
- { "Pacific/Tarawa" , 0x0385DD },
- { "Pacific/Tongatapu" , 0x038616 },
- { "Pacific/Truk" , 0x038696 },
- { "Pacific/Wake" , 0x0386CF },
- { "Pacific/Wallis" , 0x038708 },
- { "Pacific/Yap" , 0x038740 },
- { "Poland" , 0x038779 },
- { "Portugal" , 0x038B4E },
- { "PRC" , 0x03903E },
- { "PST8PDT" , 0x0390E3 },
- { "ROC" , 0x039428 },
- { "ROK" , 0x039534 },
- { "Singapore" , 0x0395CC },
- { "Turkey" , 0x039677 },
- { "UCT" , 0x039A58 },
- { "Universal" , 0x039A90 },
- { "US/Alaska" , 0x039AC8 },
- { "US/Aleutian" , 0x039E25 },
- { "US/Arizona" , 0x03A17F },
- { "US/Central" , 0x03A201 },
- { "US/East-Indiana" , 0x03ABF3 },
- { "US/Eastern" , 0x03A700 },
- { "US/Hawaii" , 0x03AE51 },
- { "US/Indiana-Starke" , 0x03AED3 },
- { "US/Michigan" , 0x03B238 },
- { "US/Mountain" , 0x03B563 },
- { "US/Pacific" , 0x03B8D0 },
- { "US/Pacific-New" , 0x03BCC9 },
- { "US/Samoa" , 0x03C0C2 },
- { "UTC" , 0x03C13F },
- { "W-SU" , 0x03C41E },
- { "WET" , 0x03C177 },
- { "Zulu" , 0x03C74D },
+ { "America/Godthab" , 0x008F21 },
+ { "America/Goose_Bay" , 0x0091E5 },
+ { "America/Grand_Turk" , 0x0096A2 },
+ { "America/Grenada" , 0x009951 },
+ { "America/Guadeloupe" , 0x0099A6 },
+ { "America/Guatemala" , 0x0099FB },
+ { "America/Guayaquil" , 0x009A84 },
+ { "America/Guyana" , 0x009AE1 },
+ { "America/Halifax" , 0x009B62 },
+ { "America/Havana" , 0x00A078 },
+ { "America/Hermosillo" , 0x00A3EB },
+ { "America/Indiana/Indianapolis" , 0x00A4C9 },
+ { "America/Indiana/Knox" , 0x00A75A },
+ { "America/Indiana/Marengo" , 0x00AAF1 },
+ { "America/Indiana/Petersburg" , 0x00AD97 },
+ { "America/Indiana/Tell_City" , 0x00B2E4 },
+ { "America/Indiana/Vevay" , 0x00B57D },
+ { "America/Indiana/Vincennes" , 0x00B7B8 },
+ { "America/Indiana/Winamac" , 0x00BA6C },
+ { "America/Indianapolis" , 0x00B07A },
+ { "America/Inuvik" , 0x00BD25 },
+ { "America/Iqaluit" , 0x00C01C },
+ { "America/Jamaica" , 0x00C33E },
+ { "America/Jujuy" , 0x00C403 },
+ { "America/Juneau" , 0x00C5AD },
+ { "America/Kentucky/Louisville" , 0x00C92B },
+ { "America/Kentucky/Monticello" , 0x00CD49 },
+ { "America/Knox_IN" , 0x00D0CE },
+ { "America/La_Paz" , 0x00D43F },
+ { "America/Lima" , 0x00D4A6 },
+ { "America/Los_Angeles" , 0x00D54E },
+ { "America/Louisville" , 0x00D95F },
+ { "America/Maceio" , 0x00DD54 },
+ { "America/Managua" , 0x00DE8E },
+ { "America/Manaus" , 0x00DF41 },
+ { "America/Marigot" , 0x00E043 },
+ { "America/Martinique" , 0x00E098 },
+ { "America/Mazatlan" , 0x00E104 },
+ { "America/Mendoza" , 0x00E371 },
+ { "America/Menominee" , 0x00E525 },
+ { "America/Merida" , 0x00E8A6 },
+ { "America/Mexico_City" , 0x00EAE1 },
+ { "America/Miquelon" , 0x00ED5C },
+ { "America/Moncton" , 0x00EFCE },
+ { "America/Monterrey" , 0x00F465 },
+ { "America/Montevideo" , 0x00F6AC },
+ { "America/Montreal" , 0x00F9BE },
+ { "America/Montserrat" , 0x00FED4 },
+ { "America/Nassau" , 0x00FF29 },
+ { "America/New_York" , 0x01026E },
+ { "America/Nipigon" , 0x010779 },
+ { "America/Nome" , 0x010ACA },
+ { "America/Noronha" , 0x010E48 },
+ { "America/North_Dakota/Center" , 0x010F78 },
+ { "America/North_Dakota/New_Salem" , 0x01130C },
+ { "America/Panama" , 0x0116B5 },
+ { "America/Pangnirtung" , 0x01170A },
+ { "America/Paramaribo" , 0x011A40 },
+ { "America/Phoenix" , 0x011AD2 },
+ { "America/Port-au-Prince" , 0x011B80 },
+ { "America/Port_of_Spain" , 0x011D9B },
+ { "America/Porto_Acre" , 0x011C9C },
+ { "America/Porto_Velho" , 0x011DF0 },
+ { "America/Puerto_Rico" , 0x011EE6 },
+ { "America/Rainy_River" , 0x011F51 },
+ { "America/Rankin_Inlet" , 0x012289 },
+ { "America/Recife" , 0x01256F },
+ { "America/Regina" , 0x012699 },
+ { "America/Resolute" , 0x012857 },
+ { "America/Rio_Branco" , 0x012B50 },
+ { "America/Rosario" , 0x012C53 },
+ { "America/Santarem" , 0x012F16 },
+ { "America/Santiago" , 0x01301B },
+ { "America/Santo_Domingo" , 0x0133C4 },
+ { "America/Sao_Paulo" , 0x01348A },
+ { "America/Scoresbysund" , 0x013799 },
+ { "America/Shiprock" , 0x013A87 },
+ { "America/St_Barthelemy" , 0x013E16 },
+ { "America/St_Johns" , 0x013E6B },
+ { "America/St_Kitts" , 0x0143BE },
+ { "America/St_Lucia" , 0x014413 },
+ { "America/St_Thomas" , 0x014468 },
+ { "America/St_Vincent" , 0x0144BD },
+ { "America/Swift_Current" , 0x014512 },
+ { "America/Tegucigalpa" , 0x014633 },
+ { "America/Thule" , 0x0146B2 },
+ { "America/Thunder_Bay" , 0x0148F9 },
+ { "America/Tijuana" , 0x014C42 },
+ { "America/Toronto" , 0x014FB7 },
+ { "America/Tortola" , 0x0154CE },
+ { "America/Vancouver" , 0x015523 },
+ { "America/Virgin" , 0x015960 },
+ { "America/Whitehorse" , 0x0159B5 },
+ { "America/Winnipeg" , 0x015CD2 },
+ { "America/Yakutat" , 0x016112 },
+ { "America/Yellowknife" , 0x01647D },
+ { "Antarctica/Casey" , 0x01678D },
+ { "Antarctica/Davis" , 0x016801 },
+ { "Antarctica/DumontDUrville" , 0x01687E },
+ { "Antarctica/Mawson" , 0x016910 },
+ { "Antarctica/McMurdo" , 0x01697F },
+ { "Antarctica/Palmer" , 0x016C81 },
+ { "Antarctica/Rothera" , 0x016F9D },
+ { "Antarctica/South_Pole" , 0x017013 },
+ { "Antarctica/Syowa" , 0x01731B },
+ { "Antarctica/Vostok" , 0x017389 },
+ { "Arctic/Longyearbyen" , 0x0173FE },
+ { "Asia/Aden" , 0x017730 },
+ { "Asia/Almaty" , 0x017785 },
+ { "Asia/Amman" , 0x017904 },
+ { "Asia/Anadyr" , 0x017BC4 },
+ { "Asia/Aqtau" , 0x017EB2 },
+ { "Asia/Aqtobe" , 0x0180B1 },
+ { "Asia/Ashgabat" , 0x018269 },
+ { "Asia/Ashkhabad" , 0x018386 },
+ { "Asia/Baghdad" , 0x0184A3 },
+ { "Asia/Bahrain" , 0x018618 },
+ { "Asia/Baku" , 0x01867E },
+ { "Asia/Bangkok" , 0x018966 },
+ { "Asia/Beirut" , 0x0189BB },
+ { "Asia/Bishkek" , 0x018CC8 },
+ { "Asia/Brunei" , 0x018E74 },
+ { "Asia/Calcutta" , 0x018ED6 },
+ { "Asia/Choibalsan" , 0x018F4F },
+ { "Asia/Chongqing" , 0x0190C8 },
+ { "Asia/Chungking" , 0x0191B7 },
+ { "Asia/Colombo" , 0x019266 },
+ { "Asia/Dacca" , 0x019302 },
+ { "Asia/Damascus" , 0x019391 },
+ { "Asia/Dhaka" , 0x0196E1 },
+ { "Asia/Dili" , 0x019770 },
+ { "Asia/Dubai" , 0x0197F9 },
+ { "Asia/Dushanbe" , 0x01984E },
+ { "Asia/Gaza" , 0x019951 },
+ { "Asia/Harbin" , 0x019C9A },
+ { "Asia/Ho_Chi_Minh" , 0x019D81 },
+ { "Asia/Hong_Kong" , 0x019DF9 },
+ { "Asia/Hovd" , 0x019FAF },
+ { "Asia/Irkutsk" , 0x01A127 },
+ { "Asia/Istanbul" , 0x01A40E },
+ { "Asia/Jakarta" , 0x01A7FB },
+ { "Asia/Jayapura" , 0x01A8A5 },
+ { "Asia/Jerusalem" , 0x01A929 },
+ { "Asia/Kabul" , 0x01AC58 },
+ { "Asia/Kamchatka" , 0x01ACA9 },
+ { "Asia/Karachi" , 0x01AF8E },
+ { "Asia/Kashgar" , 0x01B039 },
+ { "Asia/Kathmandu" , 0x01B10A },
+ { "Asia/Katmandu" , 0x01B170 },
+ { "Asia/Kolkata" , 0x01B1D6 },
+ { "Asia/Krasnoyarsk" , 0x01B24F },
+ { "Asia/Kuala_Lumpur" , 0x01B538 },
+ { "Asia/Kuching" , 0x01B5F5 },
+ { "Asia/Kuwait" , 0x01B6E3 },
+ { "Asia/Macao" , 0x01B738 },
+ { "Asia/Macau" , 0x01B873 },
+ { "Asia/Magadan" , 0x01B9AE },
+ { "Asia/Makassar" , 0x01BC91 },
+ { "Asia/Manila" , 0x01BD4A },
+ { "Asia/Muscat" , 0x01BDCF },
+ { "Asia/Nicosia" , 0x01BE24 },
+ { "Asia/Novosibirsk" , 0x01C10C },
+ { "Asia/Omsk" , 0x01C400 },
+ { "Asia/Oral" , 0x01C6E8 },
+ { "Asia/Phnom_Penh" , 0x01C8B8 },
+ { "Asia/Pontianak" , 0x01C930 },
+ { "Asia/Pyongyang" , 0x01C9F1 },
+ { "Asia/Qatar" , 0x01CA5E },
+ { "Asia/Qyzylorda" , 0x01CAC4 },
+ { "Asia/Rangoon" , 0x01CC9A },
+ { "Asia/Riyadh" , 0x01CD12 },
+ { "Asia/Saigon" , 0x01CD67 },
+ { "Asia/Sakhalin" , 0x01CDDF },
+ { "Asia/Samarkand" , 0x01D0DF },
+ { "Asia/Seoul" , 0x01D215 },
+ { "Asia/Shanghai" , 0x01D2B9 },
+ { "Asia/Singapore" , 0x01D399 },
+ { "Asia/Taipei" , 0x01D450 },
+ { "Asia/Tashkent" , 0x01D568 },
+ { "Asia/Tbilisi" , 0x01D699 },
+ { "Asia/Tehran" , 0x01D853 },
+ { "Asia/Tel_Aviv" , 0x01DAC1 },
+ { "Asia/Thimbu" , 0x01DDF0 },
+ { "Asia/Thimphu" , 0x01DE56 },
+ { "Asia/Tokyo" , 0x01DEBC },
+ { "Asia/Ujung_Pandang" , 0x01DF45 },
+ { "Asia/Ulaanbaatar" , 0x01DFC1 },
+ { "Asia/Ulan_Bator" , 0x01E11C },
+ { "Asia/Urumqi" , 0x01E269 },
+ { "Asia/Vientiane" , 0x01E330 },
+ { "Asia/Vladivostok" , 0x01E3A8 },
+ { "Asia/Yakutsk" , 0x01E695 },
+ { "Asia/Yekaterinburg" , 0x01E97B },
+ { "Asia/Yerevan" , 0x01EC87 },
+ { "Atlantic/Azores" , 0x01EF8B },
+ { "Atlantic/Bermuda" , 0x01F48E },
+ { "Atlantic/Canary" , 0x01F76F },
+ { "Atlantic/Cape_Verde" , 0x01FA45 },
+ { "Atlantic/Faeroe" , 0x01FABE },
+ { "Atlantic/Faroe" , 0x01FD62 },
+ { "Atlantic/Jan_Mayen" , 0x020006 },
+ { "Atlantic/Madeira" , 0x020338 },
+ { "Atlantic/Reykjavik" , 0x020841 },
+ { "Atlantic/South_Georgia" , 0x0209FA },
+ { "Atlantic/St_Helena" , 0x020D12 },
+ { "Atlantic/Stanley" , 0x020A3E },
+ { "Australia/ACT" , 0x020D67 },
+ { "Australia/Adelaide" , 0x021084 },
+ { "Australia/Brisbane" , 0x0213B0 },
+ { "Australia/Broken_Hill" , 0x021477 },
+ { "Australia/Canberra" , 0x0217B5 },
+ { "Australia/Currie" , 0x021AD2 },
+ { "Australia/Darwin" , 0x021E05 },
+ { "Australia/Eucla" , 0x021E8B },
+ { "Australia/Hobart" , 0x021F60 },
+ { "Australia/LHI" , 0x0222BE },
+ { "Australia/Lindeman" , 0x022559 },
+ { "Australia/Lord_Howe" , 0x02263A },
+ { "Australia/Melbourne" , 0x0228E5 },
+ { "Australia/North" , 0x022C0A },
+ { "Australia/NSW" , 0x022C7E },
+ { "Australia/Perth" , 0x022F9B },
+ { "Australia/Queensland" , 0x023073 },
+ { "Australia/South" , 0x02311F },
+ { "Australia/Sydney" , 0x02343C },
+ { "Australia/Tasmania" , 0x023779 },
+ { "Australia/Victoria" , 0x023ABE },
+ { "Australia/West" , 0x023DDB },
+ { "Australia/Yancowinna" , 0x023E91 },
+ { "Brazil/Acre" , 0x0241B3 },
+ { "Brazil/DeNoronha" , 0x0242B2 },
+ { "Brazil/East" , 0x0243D2 },
+ { "Brazil/West" , 0x0246AF },
+ { "Canada/Atlantic" , 0x0247A7 },
+ { "Canada/Central" , 0x024C8F },
+ { "Canada/East-Saskatchewan" , 0x025599 },
+ { "Canada/Eastern" , 0x0250A9 },
+ { "Canada/Mountain" , 0x025722 },
+ { "Canada/Newfoundland" , 0x025A98 },
+ { "Canada/Pacific" , 0x025FC3 },
+ { "Canada/Saskatchewan" , 0x0263DC },
+ { "Canada/Yukon" , 0x026565 },
+ { "CET" , 0x026868 },
+ { "Chile/Continental" , 0x026B71 },
+ { "Chile/EasterIsland" , 0x026F0C },
+ { "CST6CDT" , 0x02724E },
+ { "Cuba" , 0x02759F },
+ { "EET" , 0x027912 },
+ { "Egypt" , 0x027BC5 },
+ { "Eire" , 0x027F8C },
+ { "EST" , 0x02849D },
+ { "EST5EDT" , 0x0284E1 },
+ { "Etc/GMT" , 0x028832 },
+ { "Etc/GMT+0" , 0x0288FE },
+ { "Etc/GMT+1" , 0x028988 },
+ { "Etc/GMT+10" , 0x028A15 },
+ { "Etc/GMT+11" , 0x028AA3 },
+ { "Etc/GMT+12" , 0x028B31 },
+ { "Etc/GMT+2" , 0x028C4C },
+ { "Etc/GMT+3" , 0x028CD8 },
+ { "Etc/GMT+4" , 0x028D64 },
+ { "Etc/GMT+5" , 0x028DF0 },
+ { "Etc/GMT+6" , 0x028E7C },
+ { "Etc/GMT+7" , 0x028F08 },
+ { "Etc/GMT+8" , 0x028F94 },
+ { "Etc/GMT+9" , 0x029020 },
+ { "Etc/GMT-0" , 0x0288BA },
+ { "Etc/GMT-1" , 0x028942 },
+ { "Etc/GMT-10" , 0x0289CE },
+ { "Etc/GMT-11" , 0x028A5C },
+ { "Etc/GMT-12" , 0x028AEA },
+ { "Etc/GMT-13" , 0x028B78 },
+ { "Etc/GMT-14" , 0x028BBF },
+ { "Etc/GMT-2" , 0x028C06 },
+ { "Etc/GMT-3" , 0x028C92 },
+ { "Etc/GMT-4" , 0x028D1E },
+ { "Etc/GMT-5" , 0x028DAA },
+ { "Etc/GMT-6" , 0x028E36 },
+ { "Etc/GMT-7" , 0x028EC2 },
+ { "Etc/GMT-8" , 0x028F4E },
+ { "Etc/GMT-9" , 0x028FDA },
+ { "Etc/GMT0" , 0x028876 },
+ { "Etc/Greenwich" , 0x029066 },
+ { "Etc/UCT" , 0x0290AA },
+ { "Etc/Universal" , 0x0290EE },
+ { "Etc/UTC" , 0x029132 },
+ { "Etc/Zulu" , 0x029176 },
+ { "Europe/Amsterdam" , 0x0291BA },
+ { "Europe/Andorra" , 0x0295F8 },
+ { "Europe/Athens" , 0x029874 },
+ { "Europe/Belfast" , 0x029BB7 },
+ { "Europe/Belgrade" , 0x02A0EE },
+ { "Europe/Berlin" , 0x02A3B7 },
+ { "Europe/Bratislava" , 0x02A70D },
+ { "Europe/Brussels" , 0x02AA3F },
+ { "Europe/Bucharest" , 0x02AE76 },
+ { "Europe/Budapest" , 0x02B1A0 },
+ { "Europe/Chisinau" , 0x02B513 },
+ { "Europe/Copenhagen" , 0x02B8A1 },
+ { "Europe/Dublin" , 0x02BBAB },
+ { "Europe/Gibraltar" , 0x02C0BC },
+ { "Europe/Guernsey" , 0x02C513 },
+ { "Europe/Helsinki" , 0x02CA4A },
+ { "Europe/Isle_of_Man" , 0x02CD00 },
+ { "Europe/Istanbul" , 0x02D237 },
+ { "Europe/Jersey" , 0x02D624 },
+ { "Europe/Kaliningrad" , 0x02DB5B },
+ { "Europe/Kiev" , 0x02DEBE },
+ { "Europe/Lisbon" , 0x02E1D5 },
+ { "Europe/Ljubljana" , 0x02E6D9 },
+ { "Europe/London" , 0x02E9A2 },
+ { "Europe/Luxembourg" , 0x02EED9 },
+ { "Europe/Madrid" , 0x02F32F },
+ { "Europe/Malta" , 0x02F6F5 },
+ { "Europe/Mariehamn" , 0x02FAAE },
+ { "Europe/Minsk" , 0x02FD64 },
+ { "Europe/Monaco" , 0x03006F },
+ { "Europe/Moscow" , 0x0304AA },
+ { "Europe/Nicosia" , 0x0307FC },
+ { "Europe/Oslo" , 0x030AE4 },
+ { "Europe/Paris" , 0x030E16 },
+ { "Europe/Podgorica" , 0x03125C },
+ { "Europe/Prague" , 0x031525 },
+ { "Europe/Riga" , 0x031857 },
+ { "Europe/Rome" , 0x031B9C },
+ { "Europe/Samara" , 0x031F5F },
+ { "Europe/San_Marino" , 0x03228B },
+ { "Europe/Sarajevo" , 0x03264E },
+ { "Europe/Simferopol" , 0x032917 },
+ { "Europe/Skopje" , 0x032C42 },
+ { "Europe/Sofia" , 0x032F0B },
+ { "Europe/Stockholm" , 0x033213 },
+ { "Europe/Tallinn" , 0x0334C2 },
+ { "Europe/Tirane" , 0x0337FC },
+ { "Europe/Tiraspol" , 0x033B02 },
+ { "Europe/Uzhgorod" , 0x033E90 },
+ { "Europe/Vaduz" , 0x0341A7 },
+ { "Europe/Vatican" , 0x03443A },
+ { "Europe/Vienna" , 0x0347FD },
+ { "Europe/Vilnius" , 0x034B2A },
+ { "Europe/Volgograd" , 0x034E69 },
+ { "Europe/Warsaw" , 0x035172 },
+ { "Europe/Zagreb" , 0x035553 },
+ { "Europe/Zaporozhye" , 0x03581C },
+ { "Europe/Zurich" , 0x035B5D },
+ { "Factory" , 0x035E0C },
+ { "GB" , 0x035E7D },
+ { "GB-Eire" , 0x0363B4 },
+ { "GMT" , 0x0368EB },
+ { "GMT+0" , 0x0369B7 },
+ { "GMT-0" , 0x036973 },
+ { "GMT0" , 0x03692F },
+ { "Greenwich" , 0x0369FB },
+ { "Hongkong" , 0x036A3F },
+ { "HST" , 0x036BF5 },
+ { "Iceland" , 0x036C39 },
+ { "Indian/Antananarivo" , 0x036DF2 },
+ { "Indian/Chagos" , 0x036E66 },
+ { "Indian/Christmas" , 0x036EC8 },
+ { "Indian/Cocos" , 0x036F0C },
+ { "Indian/Comoro" , 0x036F50 },
+ { "Indian/Kerguelen" , 0x036FA5 },
+ { "Indian/Mahe" , 0x036FFA },
+ { "Indian/Maldives" , 0x03704F },
+ { "Indian/Mauritius" , 0x0370A4 },
+ { "Indian/Mayotte" , 0x037247 },
+ { "Indian/Reunion" , 0x03729C },
+ { "Iran" , 0x0372F1 },
+ { "Israel" , 0x03755F },
+ { "Jamaica" , 0x03788E },
+ { "Japan" , 0x037953 },
+ { "Kwajalein" , 0x0379DC },
+ { "Libya" , 0x037A3F },
+ { "MET" , 0x037B39 },
+ { "Mexico/BajaNorte" , 0x037E42 },
+ { "Mexico/BajaSur" , 0x0381AB },
+ { "Mexico/General" , 0x0383F0 },
+ { "MST" , 0x03864E },
+ { "MST7MDT" , 0x038692 },
+ { "Navajo" , 0x0389E3 },
+ { "NZ" , 0x038D5C },
+ { "NZ-CHAT" , 0x0390DA },
+ { "Pacific/Apia" , 0x0393C2 },
+ { "Pacific/Auckland" , 0x039429 },
+ { "Pacific/Chatham" , 0x0397B5 },
+ { "Pacific/Easter" , 0x039AAC },
+ { "Pacific/Efate" , 0x039E0A },
+ { "Pacific/Enderbury" , 0x039ED0 },
+ { "Pacific/Fakaofo" , 0x039F3E },
+ { "Pacific/Fiji" , 0x039F82 },
+ { "Pacific/Funafuti" , 0x039FF8 },
+ { "Pacific/Galapagos" , 0x03A03C },
+ { "Pacific/Gambier" , 0x03A0B4 },
+ { "Pacific/Guadalcanal" , 0x03A119 },
+ { "Pacific/Guam" , 0x03A16E },
+ { "Pacific/Honolulu" , 0x03A1C4 },
+ { "Pacific/Johnston" , 0x03A258 },
+ { "Pacific/Kiritimati" , 0x03A2AA },
+ { "Pacific/Kosrae" , 0x03A315 },
+ { "Pacific/Kwajalein" , 0x03A372 },
+ { "Pacific/Majuro" , 0x03A3DE },
+ { "Pacific/Marquesas" , 0x03A43D },
+ { "Pacific/Midway" , 0x03A4A4 },
+ { "Pacific/Nauru" , 0x03A52E },
+ { "Pacific/Niue" , 0x03A5A6 },
+ { "Pacific/Norfolk" , 0x03A604 },
+ { "Pacific/Noumea" , 0x03A659 },
+ { "Pacific/Pago_Pago" , 0x03A6E9 },
+ { "Pacific/Palau" , 0x03A772 },
+ { "Pacific/Pitcairn" , 0x03A7B6 },
+ { "Pacific/Ponape" , 0x03A80B },
+ { "Pacific/Port_Moresby" , 0x03A860 },
+ { "Pacific/Rarotonga" , 0x03A8A4 },
+ { "Pacific/Saipan" , 0x03A980 },
+ { "Pacific/Samoa" , 0x03A9E3 },
+ { "Pacific/Tahiti" , 0x03AA6C },
+ { "Pacific/Tarawa" , 0x03AAD1 },
+ { "Pacific/Tongatapu" , 0x03AB25 },
+ { "Pacific/Truk" , 0x03ABB1 },
+ { "Pacific/Wake" , 0x03AC0A },
+ { "Pacific/Wallis" , 0x03AC5A },
+ { "Pacific/Yap" , 0x03AC9E },
+ { "Poland" , 0x03ACE3 },
+ { "Portugal" , 0x03B0C4 },
+ { "PRC" , 0x03B5C0 },
+ { "PST8PDT" , 0x03B671 },
+ { "ROC" , 0x03B9C2 },
+ { "ROK" , 0x03BADA },
+ { "Singapore" , 0x03BB7E },
+ { "Turkey" , 0x03BC35 },
+ { "UCT" , 0x03C022 },
+ { "Universal" , 0x03C066 },
+ { "US/Alaska" , 0x03C0AA },
+ { "US/Aleutian" , 0x03C413 },
+ { "US/Arizona" , 0x03C779 },
+ { "US/Central" , 0x03C807 },
+ { "US/East-Indiana" , 0x03D211 },
+ { "US/Eastern" , 0x03CD12 },
+ { "US/Hawaii" , 0x03D47B },
+ { "US/Indiana-Starke" , 0x03D509 },
+ { "US/Michigan" , 0x03D87A },
+ { "US/Mountain" , 0x03DBB1 },
+ { "US/Pacific" , 0x03DF2A },
+ { "US/Pacific-New" , 0x03E32F },
+ { "US/Samoa" , 0x03E734 },
+ { "UTC" , 0x03E7BD },
+ { "W-SU" , 0x03EAB4 },
+ { "WET" , 0x03E801 },
+ { "Zulu" , 0x03EDEF },
};
/* This is a generated file, do not modify */
-const unsigned char timelib_timezone_db_data_builtin[247685] = {
+const unsigned char timelib_timezone_db_data_builtin[257587] = {
/* Africa/Abidjan */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x49, 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, 0x08, 0x92, 0xE6, 0x92, 0x48,
0x01, 0xFF, 0xFF, 0xFC, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Accra */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x48, 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, 0x0F, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x9E, 0x30, 0x66, 0xB4,
0xC1, 0x4C, 0xF9, 0x80, 0xC1, 0xEC, 0x7A, 0x50, 0xC3, 0x2E, 0x2D, 0x00, 0xC3, 0xCD, 0xAD, 0xD0,
@@ -578,17 +582,19 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xCC, 0x95, 0x80, 0x00, 0xCD, 0x35, 0x00, 0xD0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xFF, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x04,
0xB0, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x47, 0x48, 0x53,
-0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Addis_Ababa */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x54, 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, 0x09, 0xC0, 0xAF, 0xF2, 0x98,
0x01, 0x00, 0x00, 0x24, 0x68, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x05, 0x41, 0x44, 0x4D,
-0x54, 0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x54, 0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Algiers */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x44, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x16, 0x91, 0x60, 0x50, 0x4F,
0x9B, 0x47, 0x78, 0xF0, 0x9B, 0xD7, 0x2C, 0x70, 0x9C, 0xBC, 0x91, 0x70, 0x9D, 0xC0, 0x48, 0xF0,
@@ -605,76 +611,86 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x0D, 0x00,
0x00, 0x0E, 0x10, 0x00, 0x12, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x50, 0x4D, 0x54, 0x00, 0x57,
0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54,
-0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Asmara */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x52, 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, 0x09, 0xC0, 0xAF, 0xF2, 0x98,
0x01, 0x00, 0x00, 0x24, 0x68, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x05, 0x41, 0x44, 0x4D,
-0x54, 0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x54, 0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Asmera */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x09, 0xC0, 0xAF, 0xF2, 0x98,
0x01, 0x00, 0x00, 0x24, 0x68, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x05, 0x41, 0x44, 0x4D,
-0x54, 0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x54, 0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Bamako */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x4C, 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, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x92, 0xE6, 0x96, 0x00,
0xBC, 0x92, 0xB8, 0x80, 0xEE, 0x11, 0x87, 0x10, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xF8, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x08, 0x4C, 0x4D, 0x54,
-0x00, 0x47, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x47, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Bangui */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x46, 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, 0x08, 0x92, 0xE6, 0x7D, 0x14,
0x01, 0x00, 0x00, 0x11, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Banjul */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x4D, 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, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x92, 0xE6, 0x9E, 0x1C,
0xBE, 0x2A, 0x27, 0x9C, 0xF4, 0xB6, 0x36, 0x10, 0x01, 0x02, 0x03, 0xFF, 0xFF, 0xF0, 0x64, 0x00,
0x00, 0xFF, 0xFF, 0xF0, 0x64, 0x00, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x47,
-0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Bissau */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x57, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x91, 0xC4, 0x93, 0x1C,
0x09, 0x67, 0x61, 0x10, 0x01, 0x02, 0xFF, 0xFF, 0xF1, 0x64, 0x00, 0x00, 0xFF, 0xFF, 0xF1, 0xF0,
0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00,
-0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Blantyre */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x57, 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, 0x08, 0x82, 0x46, 0xC3, 0xB0,
0x01, 0x00, 0x00, 0x20, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Brazzaville */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x47, 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, 0x08, 0x92, 0xE6, 0x80, 0x2C,
0x01, 0x00, 0x00, 0x0E, 0x54, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Bujumbura */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20,
-0x00, 0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Africa/Cairo */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x47, 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, 0xAE, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xC8, 0x93, 0xB4, 0xE0,
0xC8, 0xFA, 0x7B, 0xD0, 0xC9, 0xFC, 0xEF, 0xE0, 0xCA, 0xC7, 0xE8, 0xD0, 0xCB, 0xCB, 0xAE, 0x60,
@@ -733,24 +749,27 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x00, 0x00,
0x2A, 0x30, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45,
-0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Casablanca */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+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, 0x13, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x96, 0x51, 0xF9, 0x9C,
+0x00, 0x00, 0x00, 0x15, 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, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
-0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 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,
+0x1A, 0xB7, 0xA6, 0x00, 0x1E, 0x18, 0x6F, 0xF0, 0x48, 0x41, 0xE6, 0x80, 0x48, 0xBB, 0x22, 0x70,
+0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
+0x02, 0x03, 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, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00,
+0x00, 0x00,
/* Africa/Ceuta */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x12, 0x9E, 0xD6, 0x75, 0x70,
0x9F, 0xA1, 0x6E, 0x60, 0xAA, 0x05, 0xEF, 0x70, 0xAA, 0xE7, 0x5F, 0xF0, 0xAD, 0xC9, 0xA7, 0xF0,
@@ -796,57 +815,64 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09,
0x00, 0x00, 0x1C, 0x20, 0x01, 0x0D, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x57, 0x45, 0x54, 0x00,
0x57, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00,
-0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x43, 0x65, 0x75, 0x74, 0x61, 0x20, 0x26, 0x20,
+0x4D, 0x65, 0x6C, 0x69, 0x6C, 0x6C, 0x61,
/* Africa/Conakry */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x4E, 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, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x92, 0xE6, 0x9B, 0x5C,
0xBC, 0x92, 0xB8, 0x80, 0xED, 0x30, 0x16, 0x90, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xF3, 0x24, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x08, 0x4C, 0x4D, 0x54,
-0x00, 0x47, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x47, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Dakar */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x4E, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x92, 0xE6, 0x9E, 0xD8,
0xCA, 0x3B, 0x10, 0x90, 0x01, 0x02, 0xFF, 0xFF, 0xEF, 0xA8, 0x00, 0x00, 0xFF, 0xFF, 0xF1, 0xF0,
0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00,
-0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Dar_es_Salaam */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x5A, 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, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0E, 0xB6, 0xA3, 0xD3, 0xAC,
0xD6, 0x9D, 0x7F, 0xD0, 0xEF, 0x12, 0x66, 0xE3, 0x01, 0x02, 0x01, 0x00, 0x00, 0x24, 0xD4, 0x00,
0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x00, 0x00, 0x26, 0x9D, 0x00, 0x08, 0x4C, 0x4D, 0x54,
0x00, 0x45, 0x41, 0x54, 0x00, 0x42, 0x45, 0x41, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00,
+0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Djibouti */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x44, 0x4A, 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, 0x08, 0x91, 0xF3, 0xD2, 0x0C,
0x01, 0x00, 0x00, 0x28, 0x74, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Douala */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x4D, 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, 0x08, 0x92, 0xE6, 0x85, 0x68,
0x01, 0x00, 0x00, 0x09, 0x18, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/El_Aaiun */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x48, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xBC, 0x48, 0xF0, 0xE0,
0x0B, 0xD1, 0xB0, 0x90, 0x01, 0x02, 0xFF, 0xFF, 0xF3, 0xA0, 0x00, 0x00, 0xFF, 0xFF, 0xF1, 0xF0,
0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00,
-0x57, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x57, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Freetown */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0x95, 0x90, 0x32, 0x6C,
0xBE, 0xF1, 0x38, 0x90, 0xBF, 0x92, 0x06, 0x30, 0xC0, 0xD3, 0xBD, 0x90, 0xC1, 0x74, 0x8B, 0x30,
@@ -862,43 +888,45 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xF1, 0xF0, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D,
0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x46, 0x4D, 0x54, 0x00, 0x53, 0x4C, 0x53, 0x54, 0x00, 0x57,
0x41, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Gaborone */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x57, 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, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xCE, 0x8E, 0x6E, 0x80,
0xCF, 0x7E, 0x51, 0x70, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30,
-0x01, 0x04, 0x43, 0x41, 0x54, 0x00, 0x43, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x04, 0x43, 0x41, 0x54, 0x00, 0x43, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Harare */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x5A, 0x57, 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, 0x08, 0x82, 0x46, 0xC7, 0x64,
0x01, 0x00, 0x00, 0x1D, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Johannesburg */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x5A, 0x41, 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, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x82, 0x46, 0xCF, 0x68,
0xCC, 0xAE, 0x8C, 0x80, 0xCD, 0x9E, 0x6F, 0x70, 0xCE, 0x8E, 0x6E, 0x80, 0xCF, 0x7E, 0x51, 0x70,
0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x15, 0x18, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01,
0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00,
+0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Kampala */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x47, 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, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0xB1, 0xEE, 0xDF, 0x1C,
0xB4, 0xC2, 0x9A, 0xD0, 0xD6, 0x9D, 0x86, 0xD8, 0xE7, 0x8C, 0x47, 0x63, 0x01, 0x02, 0x03, 0x01,
0x00, 0x00, 0x1E, 0x64, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x00, 0x00, 0x23, 0x28,
0x00, 0x08, 0x00, 0x00, 0x26, 0x9D, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x41, 0x54, 0x00,
0x42, 0x45, 0x41, 0x54, 0x00, 0x42, 0x45, 0x41, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Khartoum */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x44, 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, 0x22, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0xB6, 0xA3, 0xDA, 0x00,
0x00, 0x9E, 0x17, 0xE0, 0x01, 0x7A, 0x34, 0x50, 0x02, 0x7D, 0xF9, 0xE0, 0x03, 0x5B, 0x67, 0xD0,
@@ -914,174 +942,197 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x00, 0x00, 0x1E, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30,
0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0D, 0x4C, 0x4D,
0x54, 0x00, 0x43, 0x41, 0x53, 0x54, 0x00, 0x43, 0x41, 0x54, 0x00, 0x45, 0x41, 0x54, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x00,
/* Africa/Kigali */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x57, 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, 0x08, 0xBE, 0xF1, 0x0E, 0x50,
0x01, 0x00, 0x00, 0x1C, 0x30, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Kinshasa */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0E, 0x10,
-0x00, 0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x17, 0x77, 0x65, 0x73, 0x74, 0x20, 0x44, 0x65, 0x6D, 0x2E, 0x20, 0x52, 0x65,
+0x70, 0x2E, 0x20, 0x6F, 0x66, 0x20, 0x43, 0x6F, 0x6E, 0x67, 0x6F,
/* Africa/Lagos */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4E, 0x47, 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, 0x08, 0xA1, 0x51, 0xF3, 0x50,
0x01, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Libreville */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x41, 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, 0x08, 0x92, 0xE6, 0x85, 0xA4,
0x01, 0x00, 0x00, 0x08, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Lome */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Africa/Luanda */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x4F, 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, 0x08, 0x91, 0xC4, 0x78, 0x4C,
0x01, 0x00, 0x00, 0x0C, 0x34, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x41, 0x4F, 0x54,
-0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Lubumbashi */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20,
-0x00, 0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x17, 0x65, 0x61, 0x73, 0x74, 0x20, 0x44, 0x65, 0x6D, 0x2E, 0x20, 0x52, 0x65,
+0x70, 0x2E, 0x20, 0x6F, 0x66, 0x20, 0x43, 0x6F, 0x6E, 0x67, 0x6F,
/* Africa/Lusaka */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x5A, 0x4D, 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, 0x08, 0x82, 0x46, 0xC9, 0xFC,
0x01, 0x00, 0x00, 0x1A, 0x84, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Malabo */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x51, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x92, 0xE6, 0x86, 0x44,
0xF4, 0x9F, 0xBE, 0x80, 0x01, 0x02, 0x00, 0x00, 0x08, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00,
-0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Maputo */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x5A, 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, 0x08, 0x82, 0x46, 0xC5, 0xF4,
0x01, 0x00, 0x00, 0x1E, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Maseru */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4C, 0x53, 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, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0x82, 0x46, 0xCA, 0xB8,
0xCE, 0x8E, 0x6E, 0x80, 0xCF, 0x7E, 0x51, 0x70, 0x01, 0x02, 0x01, 0x00, 0x00, 0x19, 0xC8, 0x00,
0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Mbabane */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x5A, 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, 0x09, 0x82, 0x46, 0xC7, 0x58,
0x01, 0x00, 0x00, 0x1D, 0x28, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Mogadishu */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x4F, 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, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xB6, 0xA3, 0xCE, 0x50,
0xE7, 0x8C, 0x4A, 0xD8, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x00, 0x00, 0x00, 0x23, 0x28,
-0x00, 0x04, 0x45, 0x41, 0x54, 0x00, 0x42, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x04, 0x45, 0x41, 0x54, 0x00, 0x42, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Monrovia */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4C, 0x52, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xA0, 0x5F, 0x6C, 0x9C,
0x04, 0x61, 0xF6, 0xEE, 0x01, 0x02, 0xFF, 0xFF, 0xF5, 0xE4, 0x00, 0x00, 0xFF, 0xFF, 0xF5, 0x92,
0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x4D, 0x4D, 0x54, 0x00, 0x4C, 0x52, 0x54, 0x00,
-0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Nairobi */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4B, 0x45, 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, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0xB1, 0xEE, 0xDA, 0xFC,
0xB4, 0xC2, 0x9A, 0xD0, 0xC7, 0x91, 0x47, 0xD8, 0xED, 0x2F, 0xE1, 0xE3, 0x01, 0x02, 0x03, 0x01,
0x00, 0x00, 0x22, 0x84, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x00, 0x00, 0x23, 0x28,
0x00, 0x08, 0x00, 0x00, 0x26, 0x9D, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x41, 0x54, 0x00,
0x42, 0x45, 0x41, 0x54, 0x00, 0x42, 0x45, 0x41, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Ndjamena */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x44, 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, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x92, 0xE6, 0x80, 0x64,
0x12, 0x66, 0x71, 0x70, 0x13, 0x26, 0xDE, 0x60, 0x01, 0x02, 0x01, 0x00, 0x00, 0x0E, 0x1C, 0x00,
0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x4C, 0x4D, 0x54,
0x00, 0x57, 0x41, 0x54, 0x00, 0x57, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Niamey */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4E, 0x45, 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, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0C, 0x92, 0xE6, 0x8C, 0x84,
0xBC, 0x92, 0xC6, 0x90, 0xED, 0x30, 0x08, 0x80, 0x01, 0x02, 0x03, 0x00, 0x00, 0x01, 0xFC, 0x00,
0x00, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0E,
0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x00,
/* Africa/Nouakchott */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x52, 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, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x92, 0xE6, 0x9D, 0x74,
0xBC, 0x92, 0xB8, 0x80, 0xEE, 0xE5, 0xC8, 0x90, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xF1, 0x0C, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x08, 0x4C, 0x4D, 0x54,
-0x00, 0x47, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x47, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Ouagadougou */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x46, 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, 0x08, 0x92, 0xE6, 0x8F, 0xEC,
0x01, 0xFF, 0xFF, 0xFE, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Porto-Novo */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x92, 0xE6, 0x8C, 0x0C,
0xBC, 0x92, 0xB8, 0x80, 0x01, 0x02, 0x00, 0x00, 0x02, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00,
-0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Sao_Tome */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x54, 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, 0x08, 0x92, 0xE6, 0x97, 0x10,
0x01, 0xFF, 0xFF, 0xF7, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Timbuktu */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x92, 0xE6, 0x96, 0x00,
0xBC, 0x92, 0xB8, 0x80, 0xEE, 0x11, 0x87, 0x10, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xF8, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x08, 0x4C, 0x4D, 0x54,
-0x00, 0x47, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x47, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Tripoli */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4C, 0x59, 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, 0x1D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0xA1, 0xF2, 0xC1, 0x24,
0xDD, 0xBB, 0xB1, 0x10, 0xDE, 0x23, 0xAD, 0x60, 0xE1, 0x78, 0xD2, 0x10, 0xE1, 0xE7, 0x65, 0xE0,
@@ -1095,10 +1146,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x01, 0x03, 0x00, 0x00, 0x0C,
0x5C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x00,
0x00, 0x1C, 0x20, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45,
-0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89,
+0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Africa/Tunis */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0x91, 0x60, 0x50, 0x4F,
0xC6, 0x3A, 0x88, 0xE0, 0xC7, 0x58, 0x9E, 0x60, 0xC7, 0xDB, 0x22, 0xE0, 0xCA, 0xE2, 0x54, 0xE0,
@@ -1132,10 +1184,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x00, 0x00, 0x02, 0x31, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00,
0x00, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x01,
0x04, 0x50, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x01,
-0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Africa/Windhoek */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4E, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x13, 0x82, 0x46, 0xCF, 0x68,
0xCC, 0xAE, 0x8C, 0x80, 0xCD, 0x9E, 0x6F, 0x70, 0x26, 0x06, 0xA7, 0xE0, 0x2D, 0x9D, 0xEA, 0xE0,
@@ -1170,10 +1223,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x1C, 0x20, 0x00, 0x05, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A,
0x00, 0x00, 0x1C, 0x20, 0x01, 0x0E, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x01, 0x53, 0x57, 0x41, 0x54,
0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x43, 0x41, 0x54, 0x00, 0x57, 0x41, 0x53, 0x54, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Adak */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0xCB, 0x89, 0x44, 0xD0,
0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x50, 0x40, 0xFA, 0xD2, 0x55, 0xB0, 0xFE, 0xB8, 0x71, 0x50,
@@ -1226,10 +1280,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x19, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x1E, 0x4E, 0x53, 0x54, 0x00, 0x4E, 0x57, 0x54, 0x00, 0x4E,
0x50, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x42, 0x44, 0x54, 0x00, 0x41, 0x48, 0x53, 0x54, 0x00,
0x48, 0x41, 0x44, 0x54, 0x00, 0x48, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x10, 0x41, 0x6C, 0x65, 0x75, 0x74, 0x69, 0x61, 0x6E, 0x20, 0x49,
+0x73, 0x6C, 0x61, 0x6E, 0x64, 0x73,
/* America/Anchorage */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x26, 0xCB, 0x89, 0x36, 0xC0,
0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x42, 0x30, 0xFA, 0xD2, 0x47, 0xA0, 0xFE, 0xB8, 0x63, 0x40,
@@ -1282,25 +1338,29 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x1C, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x21, 0x43, 0x41, 0x54, 0x00, 0x43, 0x41, 0x57, 0x54, 0x00,
0x43, 0x41, 0x50, 0x54, 0x00, 0x41, 0x48, 0x53, 0x54, 0x00, 0x41, 0x48, 0x44, 0x54, 0x00, 0x59,
0x53, 0x54, 0x00, 0x41, 0x4B, 0x44, 0x54, 0x00, 0x41, 0x4B, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0B, 0x41, 0x6C, 0x61, 0x73, 0x6B, 0x61, 0x20,
+0x54, 0x69, 0x6D, 0x65,
/* America/Anguilla */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x49, 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, 0x08, 0x93, 0x37, 0x35, 0x20,
0x01, 0xFF, 0xFF, 0xC4, 0xE0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Antigua */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x47, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x93, 0x37, 0x33, 0xF0,
0xDC, 0x42, 0xDC, 0x50, 0x01, 0x02, 0xFF, 0xFF, 0xC6, 0x10, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0,
0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00,
-0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Araguaina */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x52, 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, 0x31, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x74, 0x30,
0xB8, 0x0F, 0x49, 0xE0, 0xB8, 0xFD, 0x40, 0xA0, 0xB9, 0xF1, 0x34, 0x30, 0xBA, 0xDE, 0x74, 0x20,
@@ -1320,10 +1380,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0xFF, 0xFF, 0xD2, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5,
0xD0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x52, 0x53, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00,
+0x00, 0x09, 0x54, 0x6F, 0x63, 0x61, 0x6E, 0x74, 0x69, 0x6E, 0x73,
/* America/Argentina/Buenos_Aires */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0xA2, 0x92, 0x8F, 0x30,
0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30,
@@ -1340,21 +1401,21 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30,
0x27, 0xD0, 0x58, 0xA0, 0x29, 0x00, 0xF1, 0x30, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30,
0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x47, 0x77, 0x09, 0xB0,
-0x47, 0xDC, 0x7F, 0x20, 0x48, 0xE8, 0x2D, 0xB0, 0x49, 0xBC, 0x61, 0x20, 0x4A, 0xC8, 0x0F, 0xB0,
-0x4B, 0xA5, 0x7D, 0xA0, 0x4C, 0xA7, 0xF1, 0xB0, 0x4D, 0x85, 0x5F, 0xA0, 0x4E, 0x87, 0xD3, 0xB0,
-0x4F, 0x65, 0x41, 0xA0, 0x50, 0x70, 0xF0, 0x30, 0x51, 0x45, 0x23, 0xA0, 0x52, 0x50, 0xD2, 0x30,
-0x53, 0x25, 0x05, 0xA0, 0x54, 0x30, 0xB4, 0x30, 0x55, 0x04, 0xE7, 0xA0, 0x56, 0x10, 0x96, 0x30,
-0x56, 0xEE, 0x04, 0x20, 0x57, 0xF0, 0x78, 0x30, 0x58, 0xCD, 0xE6, 0x20, 0x59, 0xD0, 0x5A, 0x30,
-0x5A, 0xAD, 0xC8, 0x20, 0x5B, 0xB9, 0x76, 0xB0, 0x5C, 0x8D, 0xAA, 0x20, 0x5D, 0x99, 0x58, 0xB0,
-0x5E, 0x6D, 0x8C, 0x20, 0x5F, 0x79, 0x3A, 0xB0, 0x60, 0x56, 0xA8, 0xA0, 0x61, 0x59, 0x1C, 0xB0,
-0x62, 0x36, 0x8A, 0xA0, 0x63, 0x38, 0xFE, 0xB0, 0x64, 0x16, 0x6C, 0xA0, 0x65, 0x18, 0xE0, 0xB0,
-0x65, 0xF6, 0x4E, 0xA0, 0x67, 0x01, 0xFD, 0x30, 0x67, 0xD6, 0x30, 0xA0, 0x68, 0xE1, 0xDF, 0x30,
-0x69, 0xB6, 0x12, 0xA0, 0x6A, 0xC1, 0xC1, 0x30, 0x6B, 0x9F, 0x2F, 0x20, 0x6C, 0xA1, 0xA3, 0x30,
-0x6D, 0x7F, 0x11, 0x20, 0x6E, 0x81, 0x85, 0x30, 0x6F, 0x5E, 0xF3, 0x20, 0x70, 0x6A, 0xA1, 0xB0,
-0x71, 0x3E, 0xD5, 0x20, 0x72, 0x4A, 0x83, 0xB0, 0x73, 0x1E, 0xB7, 0x20, 0x74, 0x2A, 0x65, 0xB0,
-0x75, 0x07, 0xD3, 0xA0, 0x76, 0x0A, 0x47, 0xB0, 0x76, 0xE7, 0xB5, 0xA0, 0x77, 0xEA, 0x29, 0xB0,
-0x78, 0xC7, 0x97, 0xA0, 0x79, 0xCA, 0x0B, 0xB0, 0x7A, 0xA7, 0x79, 0xA0, 0x7B, 0xB3, 0x28, 0x30,
-0x7C, 0x87, 0x5B, 0xA0, 0x7D, 0x93, 0x0A, 0x30, 0x7E, 0x67, 0x3D, 0xA0, 0x7F, 0x72, 0xEC, 0x30,
+0x47, 0xDC, 0x7F, 0x20, 0x48, 0xFA, 0xA2, 0xB0, 0x49, 0xBC, 0x61, 0x20, 0x4A, 0xDA, 0x84, 0xB0,
+0x4B, 0xA5, 0x7D, 0xA0, 0x4C, 0xBA, 0x66, 0xB0, 0x4D, 0x85, 0x5F, 0xA0, 0x4E, 0x9A, 0x48, 0xB0,
+0x4F, 0x65, 0x41, 0xA0, 0x50, 0x83, 0x65, 0x30, 0x51, 0x45, 0x23, 0xA0, 0x52, 0x63, 0x47, 0x30,
+0x53, 0x25, 0x05, 0xA0, 0x54, 0x43, 0x29, 0x30, 0x55, 0x04, 0xE7, 0xA0, 0x56, 0x23, 0x0B, 0x30,
+0x56, 0xEE, 0x04, 0x20, 0x58, 0x02, 0xED, 0x30, 0x58, 0xCD, 0xE6, 0x20, 0x59, 0xE2, 0xCF, 0x30,
+0x5A, 0xAD, 0xC8, 0x20, 0x5B, 0xCB, 0xEB, 0xB0, 0x5C, 0x8D, 0xAA, 0x20, 0x5D, 0xAB, 0xCD, 0xB0,
+0x5E, 0x6D, 0x8C, 0x20, 0x5F, 0x8B, 0xAF, 0xB0, 0x60, 0x56, 0xA8, 0xA0, 0x61, 0x6B, 0x91, 0xB0,
+0x62, 0x36, 0x8A, 0xA0, 0x63, 0x4B, 0x73, 0xB0, 0x64, 0x16, 0x6C, 0xA0, 0x65, 0x2B, 0x55, 0xB0,
+0x65, 0xF6, 0x4E, 0xA0, 0x67, 0x14, 0x72, 0x30, 0x67, 0xD6, 0x30, 0xA0, 0x68, 0xF4, 0x54, 0x30,
+0x69, 0xB6, 0x12, 0xA0, 0x6A, 0xD4, 0x36, 0x30, 0x6B, 0x9F, 0x2F, 0x20, 0x6C, 0xB4, 0x18, 0x30,
+0x6D, 0x7F, 0x11, 0x20, 0x6E, 0x93, 0xFA, 0x30, 0x6F, 0x5E, 0xF3, 0x20, 0x70, 0x7D, 0x16, 0xB0,
+0x71, 0x3E, 0xD5, 0x20, 0x72, 0x5C, 0xF8, 0xB0, 0x73, 0x1E, 0xB7, 0x20, 0x74, 0x3C, 0xDA, 0xB0,
+0x75, 0x07, 0xD3, 0xA0, 0x76, 0x1C, 0xBC, 0xB0, 0x76, 0xE7, 0xB5, 0xA0, 0x77, 0xFC, 0x9E, 0xB0,
+0x78, 0xC7, 0x97, 0xA0, 0x79, 0xDC, 0x80, 0xB0, 0x7A, 0xA7, 0x79, 0xA0, 0x7B, 0xC5, 0x9D, 0x30,
+0x7C, 0x87, 0x5B, 0xA0, 0x7D, 0xA5, 0x7F, 0x30, 0x7E, 0x67, 0x3D, 0xA0, 0x7F, 0x85, 0x61, 0x30,
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, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
@@ -1365,12 +1426,14 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x03, 0x04, 0x03, 0x04, 0x03, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00,
0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5,
0xD0, 0x00, 0x04, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x15, 0x42, 0x75, 0x65, 0x6E, 0x6F, 0x73, 0x20, 0x41, 0x69, 0x72,
+0x65, 0x73, 0x20, 0x28, 0x42, 0x41, 0x2C, 0x20, 0x43, 0x46, 0x29,
/* America/Argentina/Catamarca */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30,
+0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30,
0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30,
0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30,
0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0,
@@ -1385,39 +1448,23 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30,
0x27, 0xD0, 0x58, 0xA0, 0x29, 0x00, 0xFF, 0x40, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30,
0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x40, 0xBB, 0xF1, 0x30,
-0x40, 0xD5, 0x0B, 0xC0, 0x47, 0x77, 0x09, 0xB0, 0x47, 0xDC, 0x7F, 0x20, 0x48, 0xE8, 0x2D, 0xB0,
-0x49, 0xBC, 0x61, 0x20, 0x4A, 0xC8, 0x0F, 0xB0, 0x4B, 0xA5, 0x7D, 0xA0, 0x4C, 0xA7, 0xF1, 0xB0,
-0x4D, 0x85, 0x5F, 0xA0, 0x4E, 0x87, 0xD3, 0xB0, 0x4F, 0x65, 0x41, 0xA0, 0x50, 0x70, 0xF0, 0x30,
-0x51, 0x45, 0x23, 0xA0, 0x52, 0x50, 0xD2, 0x30, 0x53, 0x25, 0x05, 0xA0, 0x54, 0x30, 0xB4, 0x30,
-0x55, 0x04, 0xE7, 0xA0, 0x56, 0x10, 0x96, 0x30, 0x56, 0xEE, 0x04, 0x20, 0x57, 0xF0, 0x78, 0x30,
-0x58, 0xCD, 0xE6, 0x20, 0x59, 0xD0, 0x5A, 0x30, 0x5A, 0xAD, 0xC8, 0x20, 0x5B, 0xB9, 0x76, 0xB0,
-0x5C, 0x8D, 0xAA, 0x20, 0x5D, 0x99, 0x58, 0xB0, 0x5E, 0x6D, 0x8C, 0x20, 0x5F, 0x79, 0x3A, 0xB0,
-0x60, 0x56, 0xA8, 0xA0, 0x61, 0x59, 0x1C, 0xB0, 0x62, 0x36, 0x8A, 0xA0, 0x63, 0x38, 0xFE, 0xB0,
-0x64, 0x16, 0x6C, 0xA0, 0x65, 0x18, 0xE0, 0xB0, 0x65, 0xF6, 0x4E, 0xA0, 0x67, 0x01, 0xFD, 0x30,
-0x67, 0xD6, 0x30, 0xA0, 0x68, 0xE1, 0xDF, 0x30, 0x69, 0xB6, 0x12, 0xA0, 0x6A, 0xC1, 0xC1, 0x30,
-0x6B, 0x9F, 0x2F, 0x20, 0x6C, 0xA1, 0xA3, 0x30, 0x6D, 0x7F, 0x11, 0x20, 0x6E, 0x81, 0x85, 0x30,
-0x6F, 0x5E, 0xF3, 0x20, 0x70, 0x6A, 0xA1, 0xB0, 0x71, 0x3E, 0xD5, 0x20, 0x72, 0x4A, 0x83, 0xB0,
-0x73, 0x1E, 0xB7, 0x20, 0x74, 0x2A, 0x65, 0xB0, 0x75, 0x07, 0xD3, 0xA0, 0x76, 0x0A, 0x47, 0xB0,
-0x76, 0xE7, 0xB5, 0xA0, 0x77, 0xEA, 0x29, 0xB0, 0x78, 0xC7, 0x97, 0xA0, 0x79, 0xCA, 0x0B, 0xB0,
-0x7A, 0xA7, 0x79, 0xA0, 0x7B, 0xB3, 0x28, 0x30, 0x7C, 0x87, 0x5B, 0xA0, 0x7D, 0x93, 0x0A, 0x30,
-0x7E, 0x67, 0x3D, 0xA0, 0x7F, 0x72, 0xEC, 0x30, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02,
+0x40, 0xD5, 0x0B, 0xC0, 0x47, 0x77, 0x09, 0xB0, 0x47, 0xDC, 0x7F, 0x20, 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, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, 0x03, 0x04, 0x02, 0x04,
-0x05, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0xFF,
-0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01,
-0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7,
-0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00,
-0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00,
+0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04,
+0x03, 0x04, 0x02, 0x04, 0x05, 0x04, 0x03, 0x04, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF,
+0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08,
+0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00,
+0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x1B, 0x43, 0x61, 0x74, 0x61, 0x6D, 0x61, 0x72, 0x63, 0x61, 0x20,
+0x28, 0x43, 0x54, 0x29, 0x2C, 0x20, 0x43, 0x68, 0x75, 0x62, 0x75, 0x74, 0x20, 0x28, 0x43, 0x48,
+0x29,
/* America/Argentina/ComodRivadavia */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30,
+0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30,
0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30,
0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30,
0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0,
@@ -1432,37 +1479,19 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30,
0x27, 0xD0, 0x58, 0xA0, 0x29, 0x00, 0xFF, 0x40, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30,
0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x40, 0xBB, 0xF1, 0x30,
-0x40, 0xD5, 0x0B, 0xC0, 0x47, 0x77, 0x09, 0xB0, 0x47, 0xDC, 0x7F, 0x20, 0x48, 0xE8, 0x2D, 0xB0,
-0x49, 0xBC, 0x61, 0x20, 0x4A, 0xC8, 0x0F, 0xB0, 0x4B, 0xA5, 0x7D, 0xA0, 0x4C, 0xA7, 0xF1, 0xB0,
-0x4D, 0x85, 0x5F, 0xA0, 0x4E, 0x87, 0xD3, 0xB0, 0x4F, 0x65, 0x41, 0xA0, 0x50, 0x70, 0xF0, 0x30,
-0x51, 0x45, 0x23, 0xA0, 0x52, 0x50, 0xD2, 0x30, 0x53, 0x25, 0x05, 0xA0, 0x54, 0x30, 0xB4, 0x30,
-0x55, 0x04, 0xE7, 0xA0, 0x56, 0x10, 0x96, 0x30, 0x56, 0xEE, 0x04, 0x20, 0x57, 0xF0, 0x78, 0x30,
-0x58, 0xCD, 0xE6, 0x20, 0x59, 0xD0, 0x5A, 0x30, 0x5A, 0xAD, 0xC8, 0x20, 0x5B, 0xB9, 0x76, 0xB0,
-0x5C, 0x8D, 0xAA, 0x20, 0x5D, 0x99, 0x58, 0xB0, 0x5E, 0x6D, 0x8C, 0x20, 0x5F, 0x79, 0x3A, 0xB0,
-0x60, 0x56, 0xA8, 0xA0, 0x61, 0x59, 0x1C, 0xB0, 0x62, 0x36, 0x8A, 0xA0, 0x63, 0x38, 0xFE, 0xB0,
-0x64, 0x16, 0x6C, 0xA0, 0x65, 0x18, 0xE0, 0xB0, 0x65, 0xF6, 0x4E, 0xA0, 0x67, 0x01, 0xFD, 0x30,
-0x67, 0xD6, 0x30, 0xA0, 0x68, 0xE1, 0xDF, 0x30, 0x69, 0xB6, 0x12, 0xA0, 0x6A, 0xC1, 0xC1, 0x30,
-0x6B, 0x9F, 0x2F, 0x20, 0x6C, 0xA1, 0xA3, 0x30, 0x6D, 0x7F, 0x11, 0x20, 0x6E, 0x81, 0x85, 0x30,
-0x6F, 0x5E, 0xF3, 0x20, 0x70, 0x6A, 0xA1, 0xB0, 0x71, 0x3E, 0xD5, 0x20, 0x72, 0x4A, 0x83, 0xB0,
-0x73, 0x1E, 0xB7, 0x20, 0x74, 0x2A, 0x65, 0xB0, 0x75, 0x07, 0xD3, 0xA0, 0x76, 0x0A, 0x47, 0xB0,
-0x76, 0xE7, 0xB5, 0xA0, 0x77, 0xEA, 0x29, 0xB0, 0x78, 0xC7, 0x97, 0xA0, 0x79, 0xCA, 0x0B, 0xB0,
-0x7A, 0xA7, 0x79, 0xA0, 0x7B, 0xB3, 0x28, 0x30, 0x7C, 0x87, 0x5B, 0xA0, 0x7D, 0x93, 0x0A, 0x30,
-0x7E, 0x67, 0x3D, 0xA0, 0x7F, 0x72, 0xEC, 0x30, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02,
+0x40, 0xD5, 0x0B, 0xC0, 0x47, 0x77, 0x09, 0xB0, 0x47, 0xDC, 0x7F, 0x20, 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, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, 0x03, 0x04, 0x02, 0x04,
-0x05, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0xFF,
-0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01,
-0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7,
-0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00,
-0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00,
+0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04,
+0x03, 0x04, 0x02, 0x04, 0x05, 0x04, 0x03, 0x04, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF,
+0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08,
+0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00,
+0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Argentina/Cordoba */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30,
0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30,
@@ -1479,21 +1508,21 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30,
0x27, 0xD0, 0x58, 0xA0, 0x29, 0x00, 0xFF, 0x40, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30,
0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x47, 0x77, 0x09, 0xB0,
-0x47, 0xDC, 0x7F, 0x20, 0x48, 0xE8, 0x2D, 0xB0, 0x49, 0xBC, 0x61, 0x20, 0x4A, 0xC8, 0x0F, 0xB0,
-0x4B, 0xA5, 0x7D, 0xA0, 0x4C, 0xA7, 0xF1, 0xB0, 0x4D, 0x85, 0x5F, 0xA0, 0x4E, 0x87, 0xD3, 0xB0,
-0x4F, 0x65, 0x41, 0xA0, 0x50, 0x70, 0xF0, 0x30, 0x51, 0x45, 0x23, 0xA0, 0x52, 0x50, 0xD2, 0x30,
-0x53, 0x25, 0x05, 0xA0, 0x54, 0x30, 0xB4, 0x30, 0x55, 0x04, 0xE7, 0xA0, 0x56, 0x10, 0x96, 0x30,
-0x56, 0xEE, 0x04, 0x20, 0x57, 0xF0, 0x78, 0x30, 0x58, 0xCD, 0xE6, 0x20, 0x59, 0xD0, 0x5A, 0x30,
-0x5A, 0xAD, 0xC8, 0x20, 0x5B, 0xB9, 0x76, 0xB0, 0x5C, 0x8D, 0xAA, 0x20, 0x5D, 0x99, 0x58, 0xB0,
-0x5E, 0x6D, 0x8C, 0x20, 0x5F, 0x79, 0x3A, 0xB0, 0x60, 0x56, 0xA8, 0xA0, 0x61, 0x59, 0x1C, 0xB0,
-0x62, 0x36, 0x8A, 0xA0, 0x63, 0x38, 0xFE, 0xB0, 0x64, 0x16, 0x6C, 0xA0, 0x65, 0x18, 0xE0, 0xB0,
-0x65, 0xF6, 0x4E, 0xA0, 0x67, 0x01, 0xFD, 0x30, 0x67, 0xD6, 0x30, 0xA0, 0x68, 0xE1, 0xDF, 0x30,
-0x69, 0xB6, 0x12, 0xA0, 0x6A, 0xC1, 0xC1, 0x30, 0x6B, 0x9F, 0x2F, 0x20, 0x6C, 0xA1, 0xA3, 0x30,
-0x6D, 0x7F, 0x11, 0x20, 0x6E, 0x81, 0x85, 0x30, 0x6F, 0x5E, 0xF3, 0x20, 0x70, 0x6A, 0xA1, 0xB0,
-0x71, 0x3E, 0xD5, 0x20, 0x72, 0x4A, 0x83, 0xB0, 0x73, 0x1E, 0xB7, 0x20, 0x74, 0x2A, 0x65, 0xB0,
-0x75, 0x07, 0xD3, 0xA0, 0x76, 0x0A, 0x47, 0xB0, 0x76, 0xE7, 0xB5, 0xA0, 0x77, 0xEA, 0x29, 0xB0,
-0x78, 0xC7, 0x97, 0xA0, 0x79, 0xCA, 0x0B, 0xB0, 0x7A, 0xA7, 0x79, 0xA0, 0x7B, 0xB3, 0x28, 0x30,
-0x7C, 0x87, 0x5B, 0xA0, 0x7D, 0x93, 0x0A, 0x30, 0x7E, 0x67, 0x3D, 0xA0, 0x7F, 0x72, 0xEC, 0x30,
+0x47, 0xDC, 0x7F, 0x20, 0x48, 0xFA, 0xA2, 0xB0, 0x49, 0xBC, 0x61, 0x20, 0x4A, 0xDA, 0x84, 0xB0,
+0x4B, 0xA5, 0x7D, 0xA0, 0x4C, 0xBA, 0x66, 0xB0, 0x4D, 0x85, 0x5F, 0xA0, 0x4E, 0x9A, 0x48, 0xB0,
+0x4F, 0x65, 0x41, 0xA0, 0x50, 0x83, 0x65, 0x30, 0x51, 0x45, 0x23, 0xA0, 0x52, 0x63, 0x47, 0x30,
+0x53, 0x25, 0x05, 0xA0, 0x54, 0x43, 0x29, 0x30, 0x55, 0x04, 0xE7, 0xA0, 0x56, 0x23, 0x0B, 0x30,
+0x56, 0xEE, 0x04, 0x20, 0x58, 0x02, 0xED, 0x30, 0x58, 0xCD, 0xE6, 0x20, 0x59, 0xE2, 0xCF, 0x30,
+0x5A, 0xAD, 0xC8, 0x20, 0x5B, 0xCB, 0xEB, 0xB0, 0x5C, 0x8D, 0xAA, 0x20, 0x5D, 0xAB, 0xCD, 0xB0,
+0x5E, 0x6D, 0x8C, 0x20, 0x5F, 0x8B, 0xAF, 0xB0, 0x60, 0x56, 0xA8, 0xA0, 0x61, 0x6B, 0x91, 0xB0,
+0x62, 0x36, 0x8A, 0xA0, 0x63, 0x4B, 0x73, 0xB0, 0x64, 0x16, 0x6C, 0xA0, 0x65, 0x2B, 0x55, 0xB0,
+0x65, 0xF6, 0x4E, 0xA0, 0x67, 0x14, 0x72, 0x30, 0x67, 0xD6, 0x30, 0xA0, 0x68, 0xF4, 0x54, 0x30,
+0x69, 0xB6, 0x12, 0xA0, 0x6A, 0xD4, 0x36, 0x30, 0x6B, 0x9F, 0x2F, 0x20, 0x6C, 0xB4, 0x18, 0x30,
+0x6D, 0x7F, 0x11, 0x20, 0x6E, 0x93, 0xFA, 0x30, 0x6F, 0x5E, 0xF3, 0x20, 0x70, 0x7D, 0x16, 0xB0,
+0x71, 0x3E, 0xD5, 0x20, 0x72, 0x5C, 0xF8, 0xB0, 0x73, 0x1E, 0xB7, 0x20, 0x74, 0x3C, 0xDA, 0xB0,
+0x75, 0x07, 0xD3, 0xA0, 0x76, 0x1C, 0xBC, 0xB0, 0x76, 0xE7, 0xB5, 0xA0, 0x77, 0xFC, 0x9E, 0xB0,
+0x78, 0xC7, 0x97, 0xA0, 0x79, 0xDC, 0x80, 0xB0, 0x7A, 0xA7, 0x79, 0xA0, 0x7B, 0xC5, 0x9D, 0x30,
+0x7C, 0x87, 0x5B, 0xA0, 0x7D, 0xA5, 0x7F, 0x30, 0x7E, 0x67, 0x3D, 0xA0, 0x7F, 0x85, 0x61, 0x30,
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, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
@@ -1505,12 +1534,16 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5,
0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54,
0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x2F, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E,
+0x73, 0x20, 0x28, 0x43, 0x42, 0x2C, 0x20, 0x43, 0x43, 0x2C, 0x20, 0x43, 0x4E, 0x2C, 0x20, 0x45,
+0x52, 0x2C, 0x20, 0x46, 0x4D, 0x2C, 0x20, 0x4D, 0x4E, 0x2C, 0x20, 0x53, 0x45, 0x2C, 0x20, 0x53,
+0x46, 0x29,
/* America/Argentina/Jujuy */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x92, 0x8F, 0x30,
+0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x92, 0x8F, 0x30,
0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30,
0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30,
0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0,
@@ -1525,39 +1558,22 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x2A, 0x57, 0xC0,
0x27, 0xE2, 0xDB, 0xB0, 0x28, 0xEE, 0x8A, 0x40, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30,
0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x47, 0x77, 0x09, 0xB0,
-0x47, 0xDC, 0x7F, 0x20, 0x48, 0xE8, 0x2D, 0xB0, 0x49, 0xBC, 0x61, 0x20, 0x4A, 0xC8, 0x0F, 0xB0,
-0x4B, 0xA5, 0x7D, 0xA0, 0x4C, 0xA7, 0xF1, 0xB0, 0x4D, 0x85, 0x5F, 0xA0, 0x4E, 0x87, 0xD3, 0xB0,
-0x4F, 0x65, 0x41, 0xA0, 0x50, 0x70, 0xF0, 0x30, 0x51, 0x45, 0x23, 0xA0, 0x52, 0x50, 0xD2, 0x30,
-0x53, 0x25, 0x05, 0xA0, 0x54, 0x30, 0xB4, 0x30, 0x55, 0x04, 0xE7, 0xA0, 0x56, 0x10, 0x96, 0x30,
-0x56, 0xEE, 0x04, 0x20, 0x57, 0xF0, 0x78, 0x30, 0x58, 0xCD, 0xE6, 0x20, 0x59, 0xD0, 0x5A, 0x30,
-0x5A, 0xAD, 0xC8, 0x20, 0x5B, 0xB9, 0x76, 0xB0, 0x5C, 0x8D, 0xAA, 0x20, 0x5D, 0x99, 0x58, 0xB0,
-0x5E, 0x6D, 0x8C, 0x20, 0x5F, 0x79, 0x3A, 0xB0, 0x60, 0x56, 0xA8, 0xA0, 0x61, 0x59, 0x1C, 0xB0,
-0x62, 0x36, 0x8A, 0xA0, 0x63, 0x38, 0xFE, 0xB0, 0x64, 0x16, 0x6C, 0xA0, 0x65, 0x18, 0xE0, 0xB0,
-0x65, 0xF6, 0x4E, 0xA0, 0x67, 0x01, 0xFD, 0x30, 0x67, 0xD6, 0x30, 0xA0, 0x68, 0xE1, 0xDF, 0x30,
-0x69, 0xB6, 0x12, 0xA0, 0x6A, 0xC1, 0xC1, 0x30, 0x6B, 0x9F, 0x2F, 0x20, 0x6C, 0xA1, 0xA3, 0x30,
-0x6D, 0x7F, 0x11, 0x20, 0x6E, 0x81, 0x85, 0x30, 0x6F, 0x5E, 0xF3, 0x20, 0x70, 0x6A, 0xA1, 0xB0,
-0x71, 0x3E, 0xD5, 0x20, 0x72, 0x4A, 0x83, 0xB0, 0x73, 0x1E, 0xB7, 0x20, 0x74, 0x2A, 0x65, 0xB0,
-0x75, 0x07, 0xD3, 0xA0, 0x76, 0x0A, 0x47, 0xB0, 0x76, 0xE7, 0xB5, 0xA0, 0x77, 0xEA, 0x29, 0xB0,
-0x78, 0xC7, 0x97, 0xA0, 0x79, 0xCA, 0x0B, 0xB0, 0x7A, 0xA7, 0x79, 0xA0, 0x7B, 0xB3, 0x28, 0x30,
-0x7C, 0x87, 0x5B, 0xA0, 0x7D, 0x93, 0x0A, 0x30, 0x7E, 0x67, 0x3D, 0xA0, 0x7F, 0x72, 0xEC, 0x30,
+0x47, 0xDC, 0x7F, 0x20, 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, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05,
-0x06, 0x05, 0x03, 0x04, 0x03, 0x04, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00,
-0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5,
-0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x12, 0x43,
-0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54,
-0x00, 0x57, 0x41, 0x52, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04,
+0x03, 0x04, 0x03, 0x05, 0x06, 0x05, 0x03, 0x04, 0x03, 0x04, 0x02, 0x04, 0x03, 0x04, 0xFF, 0xFF,
+0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08,
+0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0,
+0x00, 0x0D, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x12, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00,
+0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x57, 0x41, 0x52, 0x53, 0x54, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89,
+0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0A, 0x4A, 0x75, 0x6A, 0x75, 0x79, 0x20,
+0x28, 0x4A, 0x59, 0x29,
/* America/Argentina/La_Rioja */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30,
+0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30,
0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30,
0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30,
0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0,
@@ -1573,38 +1589,21 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x27, 0xCD, 0xB5, 0xA0, 0x28, 0x26, 0x26, 0x40, 0x29, 0x00, 0xF1, 0x30, 0x29, 0xB0, 0x3A, 0xA0,
0x2A, 0xE0, 0xD3, 0x30, 0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0,
0x40, 0xBB, 0xF1, 0x30, 0x40, 0xD5, 0x0B, 0xC0, 0x47, 0x77, 0x09, 0xB0, 0x47, 0xDC, 0x7F, 0x20,
-0x48, 0xE8, 0x2D, 0xB0, 0x49, 0xBC, 0x61, 0x20, 0x4A, 0xC8, 0x0F, 0xB0, 0x4B, 0xA5, 0x7D, 0xA0,
-0x4C, 0xA7, 0xF1, 0xB0, 0x4D, 0x85, 0x5F, 0xA0, 0x4E, 0x87, 0xD3, 0xB0, 0x4F, 0x65, 0x41, 0xA0,
-0x50, 0x70, 0xF0, 0x30, 0x51, 0x45, 0x23, 0xA0, 0x52, 0x50, 0xD2, 0x30, 0x53, 0x25, 0x05, 0xA0,
-0x54, 0x30, 0xB4, 0x30, 0x55, 0x04, 0xE7, 0xA0, 0x56, 0x10, 0x96, 0x30, 0x56, 0xEE, 0x04, 0x20,
-0x57, 0xF0, 0x78, 0x30, 0x58, 0xCD, 0xE6, 0x20, 0x59, 0xD0, 0x5A, 0x30, 0x5A, 0xAD, 0xC8, 0x20,
-0x5B, 0xB9, 0x76, 0xB0, 0x5C, 0x8D, 0xAA, 0x20, 0x5D, 0x99, 0x58, 0xB0, 0x5E, 0x6D, 0x8C, 0x20,
-0x5F, 0x79, 0x3A, 0xB0, 0x60, 0x56, 0xA8, 0xA0, 0x61, 0x59, 0x1C, 0xB0, 0x62, 0x36, 0x8A, 0xA0,
-0x63, 0x38, 0xFE, 0xB0, 0x64, 0x16, 0x6C, 0xA0, 0x65, 0x18, 0xE0, 0xB0, 0x65, 0xF6, 0x4E, 0xA0,
-0x67, 0x01, 0xFD, 0x30, 0x67, 0xD6, 0x30, 0xA0, 0x68, 0xE1, 0xDF, 0x30, 0x69, 0xB6, 0x12, 0xA0,
-0x6A, 0xC1, 0xC1, 0x30, 0x6B, 0x9F, 0x2F, 0x20, 0x6C, 0xA1, 0xA3, 0x30, 0x6D, 0x7F, 0x11, 0x20,
-0x6E, 0x81, 0x85, 0x30, 0x6F, 0x5E, 0xF3, 0x20, 0x70, 0x6A, 0xA1, 0xB0, 0x71, 0x3E, 0xD5, 0x20,
-0x72, 0x4A, 0x83, 0xB0, 0x73, 0x1E, 0xB7, 0x20, 0x74, 0x2A, 0x65, 0xB0, 0x75, 0x07, 0xD3, 0xA0,
-0x76, 0x0A, 0x47, 0xB0, 0x76, 0xE7, 0xB5, 0xA0, 0x77, 0xEA, 0x29, 0xB0, 0x78, 0xC7, 0x97, 0xA0,
-0x79, 0xCA, 0x0B, 0xB0, 0x7A, 0xA7, 0x79, 0xA0, 0x7B, 0xB3, 0x28, 0x30, 0x7C, 0x87, 0x5B, 0xA0,
-0x7D, 0x93, 0x0A, 0x30, 0x7E, 0x67, 0x3D, 0xA0, 0x7F, 0x72, 0xEC, 0x30, 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, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x04, 0x03,
-0x04, 0x03, 0x04, 0x02, 0x04, 0x05, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03,
-0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03,
-0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03,
-0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03,
-0x04, 0x03, 0x04, 0x03, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04,
-0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0,
-0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00,
-0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
+0x03, 0x05, 0x04, 0x03, 0x04, 0x03, 0x04, 0x02, 0x04, 0x05, 0x04, 0x03, 0x04, 0xFF, 0xFF, 0xC3,
+0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF,
+0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00,
+0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41,
+0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0D, 0x4C, 0x61, 0x20, 0x52, 0x69,
+0x6F, 0x6A, 0x61, 0x20, 0x28, 0x4C, 0x52, 0x29,
/* America/Argentina/Mendoza */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x92, 0x8F, 0x30,
+0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x92, 0x8F, 0x30,
0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30,
0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30,
0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0,
@@ -1619,39 +1618,23 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x19, 0x34, 0x40,
0x27, 0xCD, 0xC3, 0xB0, 0x28, 0xFA, 0x67, 0xC0, 0x29, 0xB0, 0x48, 0xB0, 0x2A, 0xE0, 0xE1, 0x40,
0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x40, 0xB0, 0x13, 0xB0,
-0x41, 0x56, 0x3E, 0xC0, 0x47, 0x77, 0x09, 0xB0, 0x47, 0xDC, 0x7F, 0x20, 0x48, 0xE8, 0x2D, 0xB0,
-0x49, 0xBC, 0x61, 0x20, 0x4A, 0xC8, 0x0F, 0xB0, 0x4B, 0xA5, 0x7D, 0xA0, 0x4C, 0xA7, 0xF1, 0xB0,
-0x4D, 0x85, 0x5F, 0xA0, 0x4E, 0x87, 0xD3, 0xB0, 0x4F, 0x65, 0x41, 0xA0, 0x50, 0x70, 0xF0, 0x30,
-0x51, 0x45, 0x23, 0xA0, 0x52, 0x50, 0xD2, 0x30, 0x53, 0x25, 0x05, 0xA0, 0x54, 0x30, 0xB4, 0x30,
-0x55, 0x04, 0xE7, 0xA0, 0x56, 0x10, 0x96, 0x30, 0x56, 0xEE, 0x04, 0x20, 0x57, 0xF0, 0x78, 0x30,
-0x58, 0xCD, 0xE6, 0x20, 0x59, 0xD0, 0x5A, 0x30, 0x5A, 0xAD, 0xC8, 0x20, 0x5B, 0xB9, 0x76, 0xB0,
-0x5C, 0x8D, 0xAA, 0x20, 0x5D, 0x99, 0x58, 0xB0, 0x5E, 0x6D, 0x8C, 0x20, 0x5F, 0x79, 0x3A, 0xB0,
-0x60, 0x56, 0xA8, 0xA0, 0x61, 0x59, 0x1C, 0xB0, 0x62, 0x36, 0x8A, 0xA0, 0x63, 0x38, 0xFE, 0xB0,
-0x64, 0x16, 0x6C, 0xA0, 0x65, 0x18, 0xE0, 0xB0, 0x65, 0xF6, 0x4E, 0xA0, 0x67, 0x01, 0xFD, 0x30,
-0x67, 0xD6, 0x30, 0xA0, 0x68, 0xE1, 0xDF, 0x30, 0x69, 0xB6, 0x12, 0xA0, 0x6A, 0xC1, 0xC1, 0x30,
-0x6B, 0x9F, 0x2F, 0x20, 0x6C, 0xA1, 0xA3, 0x30, 0x6D, 0x7F, 0x11, 0x20, 0x6E, 0x81, 0x85, 0x30,
-0x6F, 0x5E, 0xF3, 0x20, 0x70, 0x6A, 0xA1, 0xB0, 0x71, 0x3E, 0xD5, 0x20, 0x72, 0x4A, 0x83, 0xB0,
-0x73, 0x1E, 0xB7, 0x20, 0x74, 0x2A, 0x65, 0xB0, 0x75, 0x07, 0xD3, 0xA0, 0x76, 0x0A, 0x47, 0xB0,
-0x76, 0xE7, 0xB5, 0xA0, 0x77, 0xEA, 0x29, 0xB0, 0x78, 0xC7, 0x97, 0xA0, 0x79, 0xCA, 0x0B, 0xB0,
-0x7A, 0xA7, 0x79, 0xA0, 0x7B, 0xB3, 0x28, 0x30, 0x7C, 0x87, 0x5B, 0xA0, 0x7D, 0x93, 0x0A, 0x30,
-0x7E, 0x67, 0x3D, 0xA0, 0x7F, 0x72, 0xEC, 0x30, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02,
+0x41, 0x56, 0x3E, 0xC0, 0x47, 0x77, 0x09, 0xB0, 0x47, 0xDC, 0x7F, 0x20, 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, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x06, 0x05, 0x06, 0x05, 0x03, 0x04, 0x02, 0x04,
-0x05, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0xFF,
-0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01,
-0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7,
-0xC0, 0x00, 0x0D, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x12, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54,
-0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x57, 0x41, 0x52, 0x53, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x06, 0x05, 0x06, 0x05,
+0x03, 0x04, 0x02, 0x04, 0x05, 0x04, 0x03, 0x04, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF,
+0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08,
+0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0xFF, 0xFF, 0xD5, 0xD0,
+0x01, 0x12, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57,
+0x41, 0x52, 0x54, 0x00, 0x57, 0x41, 0x52, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x0C, 0x4D, 0x65, 0x6E, 0x64, 0x6F, 0x7A, 0x61, 0x20, 0x28, 0x4D, 0x5A, 0x29,
+
/* America/Argentina/Rio_Gallegos */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30,
+0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30,
0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30,
0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30,
0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0,
@@ -1666,39 +1649,22 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30,
0x27, 0xD0, 0x58, 0xA0, 0x29, 0x00, 0xF1, 0x30, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30,
0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x40, 0xBB, 0xF1, 0x30,
-0x40, 0xD5, 0x0B, 0xC0, 0x47, 0x77, 0x09, 0xB0, 0x47, 0xDC, 0x7F, 0x20, 0x48, 0xE8, 0x2D, 0xB0,
-0x49, 0xBC, 0x61, 0x20, 0x4A, 0xC8, 0x0F, 0xB0, 0x4B, 0xA5, 0x7D, 0xA0, 0x4C, 0xA7, 0xF1, 0xB0,
-0x4D, 0x85, 0x5F, 0xA0, 0x4E, 0x87, 0xD3, 0xB0, 0x4F, 0x65, 0x41, 0xA0, 0x50, 0x70, 0xF0, 0x30,
-0x51, 0x45, 0x23, 0xA0, 0x52, 0x50, 0xD2, 0x30, 0x53, 0x25, 0x05, 0xA0, 0x54, 0x30, 0xB4, 0x30,
-0x55, 0x04, 0xE7, 0xA0, 0x56, 0x10, 0x96, 0x30, 0x56, 0xEE, 0x04, 0x20, 0x57, 0xF0, 0x78, 0x30,
-0x58, 0xCD, 0xE6, 0x20, 0x59, 0xD0, 0x5A, 0x30, 0x5A, 0xAD, 0xC8, 0x20, 0x5B, 0xB9, 0x76, 0xB0,
-0x5C, 0x8D, 0xAA, 0x20, 0x5D, 0x99, 0x58, 0xB0, 0x5E, 0x6D, 0x8C, 0x20, 0x5F, 0x79, 0x3A, 0xB0,
-0x60, 0x56, 0xA8, 0xA0, 0x61, 0x59, 0x1C, 0xB0, 0x62, 0x36, 0x8A, 0xA0, 0x63, 0x38, 0xFE, 0xB0,
-0x64, 0x16, 0x6C, 0xA0, 0x65, 0x18, 0xE0, 0xB0, 0x65, 0xF6, 0x4E, 0xA0, 0x67, 0x01, 0xFD, 0x30,
-0x67, 0xD6, 0x30, 0xA0, 0x68, 0xE1, 0xDF, 0x30, 0x69, 0xB6, 0x12, 0xA0, 0x6A, 0xC1, 0xC1, 0x30,
-0x6B, 0x9F, 0x2F, 0x20, 0x6C, 0xA1, 0xA3, 0x30, 0x6D, 0x7F, 0x11, 0x20, 0x6E, 0x81, 0x85, 0x30,
-0x6F, 0x5E, 0xF3, 0x20, 0x70, 0x6A, 0xA1, 0xB0, 0x71, 0x3E, 0xD5, 0x20, 0x72, 0x4A, 0x83, 0xB0,
-0x73, 0x1E, 0xB7, 0x20, 0x74, 0x2A, 0x65, 0xB0, 0x75, 0x07, 0xD3, 0xA0, 0x76, 0x0A, 0x47, 0xB0,
-0x76, 0xE7, 0xB5, 0xA0, 0x77, 0xEA, 0x29, 0xB0, 0x78, 0xC7, 0x97, 0xA0, 0x79, 0xCA, 0x0B, 0xB0,
-0x7A, 0xA7, 0x79, 0xA0, 0x7B, 0xB3, 0x28, 0x30, 0x7C, 0x87, 0x5B, 0xA0, 0x7D, 0x93, 0x0A, 0x30,
-0x7E, 0x67, 0x3D, 0xA0, 0x7F, 0x72, 0xEC, 0x30, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02,
+0x40, 0xD5, 0x0B, 0xC0, 0x47, 0x77, 0x09, 0xB0, 0x47, 0xDC, 0x7F, 0x20, 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, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x02, 0x04,
-0x05, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0xFF,
-0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01,
-0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7,
-0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00,
-0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00,
-
-/* America/Argentina/San_Juan */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
+0x03, 0x04, 0x02, 0x04, 0x05, 0x04, 0x03, 0x04, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF,
+0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08,
+0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00,
+0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x53, 0x61, 0x6E, 0x74, 0x61, 0x20, 0x43, 0x72, 0x75, 0x7A,
+0x20, 0x28, 0x53, 0x43, 0x29,
+
+/* America/Argentina/Salta */
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30,
+0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30,
0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30,
0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30,
0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0,
@@ -1711,39 +1677,21 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFB, 0xC3, 0x35, 0xC0, 0xFC, 0xBC, 0x53, 0x30, 0xFD, 0xAC, 0x52, 0x40, 0xFE, 0x9C, 0x35, 0x30,
0xFF, 0x8C, 0x34, 0x40, 0x07, 0xA3, 0x4A, 0xB0, 0x08, 0x24, 0x6F, 0xA0, 0x23, 0x94, 0xB5, 0xB0,
0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30,
-0x27, 0xCD, 0xB5, 0xA0, 0x28, 0x26, 0x26, 0x40, 0x29, 0x00, 0xF1, 0x30, 0x29, 0xB0, 0x3A, 0xA0,
-0x2A, 0xE0, 0xD3, 0x30, 0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0,
-0x40, 0xBA, 0x9F, 0xB0, 0x41, 0x03, 0x30, 0x40, 0x47, 0x77, 0x09, 0xB0, 0x47, 0xDC, 0x7F, 0x20,
-0x48, 0xE8, 0x2D, 0xB0, 0x49, 0xBC, 0x61, 0x20, 0x4A, 0xC8, 0x0F, 0xB0, 0x4B, 0xA5, 0x7D, 0xA0,
-0x4C, 0xA7, 0xF1, 0xB0, 0x4D, 0x85, 0x5F, 0xA0, 0x4E, 0x87, 0xD3, 0xB0, 0x4F, 0x65, 0x41, 0xA0,
-0x50, 0x70, 0xF0, 0x30, 0x51, 0x45, 0x23, 0xA0, 0x52, 0x50, 0xD2, 0x30, 0x53, 0x25, 0x05, 0xA0,
-0x54, 0x30, 0xB4, 0x30, 0x55, 0x04, 0xE7, 0xA0, 0x56, 0x10, 0x96, 0x30, 0x56, 0xEE, 0x04, 0x20,
-0x57, 0xF0, 0x78, 0x30, 0x58, 0xCD, 0xE6, 0x20, 0x59, 0xD0, 0x5A, 0x30, 0x5A, 0xAD, 0xC8, 0x20,
-0x5B, 0xB9, 0x76, 0xB0, 0x5C, 0x8D, 0xAA, 0x20, 0x5D, 0x99, 0x58, 0xB0, 0x5E, 0x6D, 0x8C, 0x20,
-0x5F, 0x79, 0x3A, 0xB0, 0x60, 0x56, 0xA8, 0xA0, 0x61, 0x59, 0x1C, 0xB0, 0x62, 0x36, 0x8A, 0xA0,
-0x63, 0x38, 0xFE, 0xB0, 0x64, 0x16, 0x6C, 0xA0, 0x65, 0x18, 0xE0, 0xB0, 0x65, 0xF6, 0x4E, 0xA0,
-0x67, 0x01, 0xFD, 0x30, 0x67, 0xD6, 0x30, 0xA0, 0x68, 0xE1, 0xDF, 0x30, 0x69, 0xB6, 0x12, 0xA0,
-0x6A, 0xC1, 0xC1, 0x30, 0x6B, 0x9F, 0x2F, 0x20, 0x6C, 0xA1, 0xA3, 0x30, 0x6D, 0x7F, 0x11, 0x20,
-0x6E, 0x81, 0x85, 0x30, 0x6F, 0x5E, 0xF3, 0x20, 0x70, 0x6A, 0xA1, 0xB0, 0x71, 0x3E, 0xD5, 0x20,
-0x72, 0x4A, 0x83, 0xB0, 0x73, 0x1E, 0xB7, 0x20, 0x74, 0x2A, 0x65, 0xB0, 0x75, 0x07, 0xD3, 0xA0,
-0x76, 0x0A, 0x47, 0xB0, 0x76, 0xE7, 0xB5, 0xA0, 0x77, 0xEA, 0x29, 0xB0, 0x78, 0xC7, 0x97, 0xA0,
-0x79, 0xCA, 0x0B, 0xB0, 0x7A, 0xA7, 0x79, 0xA0, 0x7B, 0xB3, 0x28, 0x30, 0x7C, 0x87, 0x5B, 0xA0,
-0x7D, 0x93, 0x0A, 0x30, 0x7E, 0x67, 0x3D, 0xA0, 0x7F, 0x72, 0xEC, 0x30, 0x01, 0x02, 0x01, 0x02,
-0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02,
+0x27, 0xD0, 0x58, 0xA0, 0x29, 0x00, 0xFF, 0x40, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30,
+0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x47, 0x77, 0x09, 0xB0,
+0x47, 0xDC, 0x7F, 0x20, 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, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x04, 0x03,
-0x04, 0x03, 0x04, 0x02, 0x04, 0x05, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03,
-0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03,
-0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03,
-0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03,
-0x04, 0x03, 0x04, 0x03, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04,
-0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0,
-0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00,
-0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04,
+0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, 0x03, 0x04, 0x02, 0x04, 0x03, 0x04, 0xFF, 0xFF,
+0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08,
+0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0,
+0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57,
+0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x10, 0x28, 0x53, 0x41, 0x2C,
+0x20, 0x4C, 0x50, 0x2C, 0x20, 0x4E, 0x51, 0x2C, 0x20, 0x52, 0x4E, 0x29,
-/* America/Argentina/San_Luis */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+/* America/Argentina/San_Juan */
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30,
0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30,
@@ -1760,7 +1708,7 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30,
0x27, 0xCD, 0xB5, 0xA0, 0x28, 0x26, 0x26, 0x40, 0x29, 0x00, 0xF1, 0x30, 0x29, 0xB0, 0x3A, 0xA0,
0x2A, 0xE0, 0xD3, 0x30, 0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0,
-0x40, 0xBA, 0x9F, 0xB0, 0x41, 0x03, 0x30, 0x40, 0x47, 0x77, 0x09, 0xB0, 0x47, 0x93, 0xFC, 0xA0,
+0x40, 0xBA, 0x9F, 0xB0, 0x41, 0x03, 0x30, 0x40, 0x47, 0x77, 0x09, 0xB0, 0x47, 0xDC, 0x7F, 0x20,
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, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
@@ -1768,10 +1716,42 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF,
0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00,
0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41,
-0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0D, 0x53, 0x61, 0x6E, 0x20, 0x4A,
+0x75, 0x61, 0x6E, 0x20, 0x28, 0x53, 0x4A, 0x29,
+
+/* America/Argentina/San_Luis */
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x92, 0x8F, 0x30,
+0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30,
+0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30,
+0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0,
+0xC1, 0x9D, 0x9D, 0x40, 0xC2, 0x3B, 0xC3, 0x30, 0xC3, 0x7E, 0xD0, 0xC0, 0xC4, 0x1C, 0xF6, 0xB0,
+0xC5, 0x60, 0x04, 0x40, 0xC5, 0xFE, 0x2A, 0x30, 0xC7, 0x41, 0x37, 0xC0, 0xC7, 0xE0, 0xAF, 0x30,
+0xC8, 0x81, 0x94, 0x40, 0xCA, 0x4D, 0xA1, 0xB0, 0xCA, 0xEE, 0x86, 0xC0, 0xCE, 0x4D, 0xFF, 0x30,
+0xCE, 0xB0, 0xED, 0xC0, 0xD3, 0x29, 0x35, 0xB0, 0xD4, 0x43, 0x64, 0xC0, 0xF4, 0x3D, 0x08, 0x30,
+0xF4, 0x9F, 0xF6, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0x32, 0x10, 0x40, 0xF6, 0xE6, 0x9F, 0xB0,
+0xF8, 0x13, 0x43, 0xC0, 0xF8, 0xC7, 0xD3, 0x30, 0xF9, 0xF4, 0x77, 0x40, 0xFA, 0xD3, 0x36, 0xB0,
+0xFB, 0xC3, 0x35, 0xC0, 0xFC, 0xBC, 0x53, 0x30, 0xFD, 0xAC, 0x52, 0x40, 0xFE, 0x9C, 0x35, 0x30,
+0xFF, 0x8C, 0x34, 0x40, 0x07, 0xA3, 0x4A, 0xB0, 0x08, 0x24, 0x6F, 0xA0, 0x23, 0x94, 0xB5, 0xB0,
+0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xFD, 0xA5, 0xA0, 0x27, 0x19, 0x34, 0x40,
+0x27, 0xCD, 0xC3, 0xB0, 0x28, 0x47, 0x1B, 0xC0, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0,
+0x40, 0xBA, 0x9F, 0xB0, 0x41, 0x03, 0x30, 0x40, 0x47, 0x77, 0x09, 0xB0, 0x47, 0x93, 0xFC, 0xA0,
+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, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05,
+0x06, 0x05, 0x04, 0x06, 0x04, 0x05, 0x04, 0x03, 0x04, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF,
+0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01,
+0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0xFF, 0xFF, 0xD5,
+0xD0, 0x01, 0x12, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00,
+0x57, 0x41, 0x52, 0x54, 0x00, 0x57, 0x41, 0x52, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x0D, 0x53, 0x61, 0x6E, 0x20, 0x4C, 0x75, 0x69, 0x73, 0x20, 0x28, 0x53,
+0x4C, 0x29,
/* America/Argentina/Tucuman */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30,
0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30,
@@ -1788,22 +1768,22 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30,
0x27, 0xD0, 0x58, 0xA0, 0x29, 0x00, 0xFF, 0x40, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30,
0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x40, 0xBB, 0xF1, 0x30,
-0x40, 0xCB, 0xD1, 0x40, 0x47, 0x77, 0x09, 0xB0, 0x47, 0xDC, 0x7F, 0x20, 0x48, 0xE8, 0x2D, 0xB0,
-0x49, 0xBC, 0x61, 0x20, 0x4A, 0xC8, 0x0F, 0xB0, 0x4B, 0xA5, 0x7D, 0xA0, 0x4C, 0xA7, 0xF1, 0xB0,
-0x4D, 0x85, 0x5F, 0xA0, 0x4E, 0x87, 0xD3, 0xB0, 0x4F, 0x65, 0x41, 0xA0, 0x50, 0x70, 0xF0, 0x30,
-0x51, 0x45, 0x23, 0xA0, 0x52, 0x50, 0xD2, 0x30, 0x53, 0x25, 0x05, 0xA0, 0x54, 0x30, 0xB4, 0x30,
-0x55, 0x04, 0xE7, 0xA0, 0x56, 0x10, 0x96, 0x30, 0x56, 0xEE, 0x04, 0x20, 0x57, 0xF0, 0x78, 0x30,
-0x58, 0xCD, 0xE6, 0x20, 0x59, 0xD0, 0x5A, 0x30, 0x5A, 0xAD, 0xC8, 0x20, 0x5B, 0xB9, 0x76, 0xB0,
-0x5C, 0x8D, 0xAA, 0x20, 0x5D, 0x99, 0x58, 0xB0, 0x5E, 0x6D, 0x8C, 0x20, 0x5F, 0x79, 0x3A, 0xB0,
-0x60, 0x56, 0xA8, 0xA0, 0x61, 0x59, 0x1C, 0xB0, 0x62, 0x36, 0x8A, 0xA0, 0x63, 0x38, 0xFE, 0xB0,
-0x64, 0x16, 0x6C, 0xA0, 0x65, 0x18, 0xE0, 0xB0, 0x65, 0xF6, 0x4E, 0xA0, 0x67, 0x01, 0xFD, 0x30,
-0x67, 0xD6, 0x30, 0xA0, 0x68, 0xE1, 0xDF, 0x30, 0x69, 0xB6, 0x12, 0xA0, 0x6A, 0xC1, 0xC1, 0x30,
-0x6B, 0x9F, 0x2F, 0x20, 0x6C, 0xA1, 0xA3, 0x30, 0x6D, 0x7F, 0x11, 0x20, 0x6E, 0x81, 0x85, 0x30,
-0x6F, 0x5E, 0xF3, 0x20, 0x70, 0x6A, 0xA1, 0xB0, 0x71, 0x3E, 0xD5, 0x20, 0x72, 0x4A, 0x83, 0xB0,
-0x73, 0x1E, 0xB7, 0x20, 0x74, 0x2A, 0x65, 0xB0, 0x75, 0x07, 0xD3, 0xA0, 0x76, 0x0A, 0x47, 0xB0,
-0x76, 0xE7, 0xB5, 0xA0, 0x77, 0xEA, 0x29, 0xB0, 0x78, 0xC7, 0x97, 0xA0, 0x79, 0xCA, 0x0B, 0xB0,
-0x7A, 0xA7, 0x79, 0xA0, 0x7B, 0xB3, 0x28, 0x30, 0x7C, 0x87, 0x5B, 0xA0, 0x7D, 0x93, 0x0A, 0x30,
-0x7E, 0x67, 0x3D, 0xA0, 0x7F, 0x72, 0xEC, 0x30, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02,
+0x40, 0xCB, 0xD1, 0x40, 0x47, 0x77, 0x09, 0xB0, 0x47, 0xDC, 0x7F, 0x20, 0x48, 0xFA, 0xA2, 0xB0,
+0x49, 0xBC, 0x61, 0x20, 0x4A, 0xDA, 0x84, 0xB0, 0x4B, 0xA5, 0x7D, 0xA0, 0x4C, 0xBA, 0x66, 0xB0,
+0x4D, 0x85, 0x5F, 0xA0, 0x4E, 0x9A, 0x48, 0xB0, 0x4F, 0x65, 0x41, 0xA0, 0x50, 0x83, 0x65, 0x30,
+0x51, 0x45, 0x23, 0xA0, 0x52, 0x63, 0x47, 0x30, 0x53, 0x25, 0x05, 0xA0, 0x54, 0x43, 0x29, 0x30,
+0x55, 0x04, 0xE7, 0xA0, 0x56, 0x23, 0x0B, 0x30, 0x56, 0xEE, 0x04, 0x20, 0x58, 0x02, 0xED, 0x30,
+0x58, 0xCD, 0xE6, 0x20, 0x59, 0xE2, 0xCF, 0x30, 0x5A, 0xAD, 0xC8, 0x20, 0x5B, 0xCB, 0xEB, 0xB0,
+0x5C, 0x8D, 0xAA, 0x20, 0x5D, 0xAB, 0xCD, 0xB0, 0x5E, 0x6D, 0x8C, 0x20, 0x5F, 0x8B, 0xAF, 0xB0,
+0x60, 0x56, 0xA8, 0xA0, 0x61, 0x6B, 0x91, 0xB0, 0x62, 0x36, 0x8A, 0xA0, 0x63, 0x4B, 0x73, 0xB0,
+0x64, 0x16, 0x6C, 0xA0, 0x65, 0x2B, 0x55, 0xB0, 0x65, 0xF6, 0x4E, 0xA0, 0x67, 0x14, 0x72, 0x30,
+0x67, 0xD6, 0x30, 0xA0, 0x68, 0xF4, 0x54, 0x30, 0x69, 0xB6, 0x12, 0xA0, 0x6A, 0xD4, 0x36, 0x30,
+0x6B, 0x9F, 0x2F, 0x20, 0x6C, 0xB4, 0x18, 0x30, 0x6D, 0x7F, 0x11, 0x20, 0x6E, 0x93, 0xFA, 0x30,
+0x6F, 0x5E, 0xF3, 0x20, 0x70, 0x7D, 0x16, 0xB0, 0x71, 0x3E, 0xD5, 0x20, 0x72, 0x5C, 0xF8, 0xB0,
+0x73, 0x1E, 0xB7, 0x20, 0x74, 0x3C, 0xDA, 0xB0, 0x75, 0x07, 0xD3, 0xA0, 0x76, 0x1C, 0xBC, 0xB0,
+0x76, 0xE7, 0xB5, 0xA0, 0x77, 0xFC, 0x9E, 0xB0, 0x78, 0xC7, 0x97, 0xA0, 0x79, 0xDC, 0x80, 0xB0,
+0x7A, 0xA7, 0x79, 0xA0, 0x7B, 0xC5, 0x9D, 0x30, 0x7C, 0x87, 0x5B, 0xA0, 0x7D, 0xA5, 0x7F, 0x30,
+0x7E, 0x67, 0x3D, 0xA0, 0x7F, 0x85, 0x61, 0x30, 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, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, 0x03, 0x04, 0x02, 0x04,
@@ -1815,12 +1795,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7,
0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00,
0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00,
+0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0C, 0x54, 0x75, 0x63,
+0x75, 0x6D, 0x61, 0x6E, 0x20, 0x28, 0x54, 0x4D, 0x29,
/* America/Argentina/Ushuaia */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30,
+0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30,
0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30,
0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30,
0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0,
@@ -1835,45 +1816,29 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30,
0x27, 0xD0, 0x58, 0xA0, 0x29, 0x00, 0xF1, 0x30, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30,
0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x40, 0xB9, 0x4E, 0x30,
-0x40, 0xD5, 0x0B, 0xC0, 0x47, 0x77, 0x09, 0xB0, 0x47, 0xDC, 0x7F, 0x20, 0x48, 0xE8, 0x2D, 0xB0,
-0x49, 0xBC, 0x61, 0x20, 0x4A, 0xC8, 0x0F, 0xB0, 0x4B, 0xA5, 0x7D, 0xA0, 0x4C, 0xA7, 0xF1, 0xB0,
-0x4D, 0x85, 0x5F, 0xA0, 0x4E, 0x87, 0xD3, 0xB0, 0x4F, 0x65, 0x41, 0xA0, 0x50, 0x70, 0xF0, 0x30,
-0x51, 0x45, 0x23, 0xA0, 0x52, 0x50, 0xD2, 0x30, 0x53, 0x25, 0x05, 0xA0, 0x54, 0x30, 0xB4, 0x30,
-0x55, 0x04, 0xE7, 0xA0, 0x56, 0x10, 0x96, 0x30, 0x56, 0xEE, 0x04, 0x20, 0x57, 0xF0, 0x78, 0x30,
-0x58, 0xCD, 0xE6, 0x20, 0x59, 0xD0, 0x5A, 0x30, 0x5A, 0xAD, 0xC8, 0x20, 0x5B, 0xB9, 0x76, 0xB0,
-0x5C, 0x8D, 0xAA, 0x20, 0x5D, 0x99, 0x58, 0xB0, 0x5E, 0x6D, 0x8C, 0x20, 0x5F, 0x79, 0x3A, 0xB0,
-0x60, 0x56, 0xA8, 0xA0, 0x61, 0x59, 0x1C, 0xB0, 0x62, 0x36, 0x8A, 0xA0, 0x63, 0x38, 0xFE, 0xB0,
-0x64, 0x16, 0x6C, 0xA0, 0x65, 0x18, 0xE0, 0xB0, 0x65, 0xF6, 0x4E, 0xA0, 0x67, 0x01, 0xFD, 0x30,
-0x67, 0xD6, 0x30, 0xA0, 0x68, 0xE1, 0xDF, 0x30, 0x69, 0xB6, 0x12, 0xA0, 0x6A, 0xC1, 0xC1, 0x30,
-0x6B, 0x9F, 0x2F, 0x20, 0x6C, 0xA1, 0xA3, 0x30, 0x6D, 0x7F, 0x11, 0x20, 0x6E, 0x81, 0x85, 0x30,
-0x6F, 0x5E, 0xF3, 0x20, 0x70, 0x6A, 0xA1, 0xB0, 0x71, 0x3E, 0xD5, 0x20, 0x72, 0x4A, 0x83, 0xB0,
-0x73, 0x1E, 0xB7, 0x20, 0x74, 0x2A, 0x65, 0xB0, 0x75, 0x07, 0xD3, 0xA0, 0x76, 0x0A, 0x47, 0xB0,
-0x76, 0xE7, 0xB5, 0xA0, 0x77, 0xEA, 0x29, 0xB0, 0x78, 0xC7, 0x97, 0xA0, 0x79, 0xCA, 0x0B, 0xB0,
-0x7A, 0xA7, 0x79, 0xA0, 0x7B, 0xB3, 0x28, 0x30, 0x7C, 0x87, 0x5B, 0xA0, 0x7D, 0x93, 0x0A, 0x30,
-0x7E, 0x67, 0x3D, 0xA0, 0x7F, 0x72, 0xEC, 0x30, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02,
+0x40, 0xD5, 0x0B, 0xC0, 0x47, 0x77, 0x09, 0xB0, 0x47, 0xDC, 0x7F, 0x20, 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, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x02, 0x04,
-0x05, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0xFF,
-0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01,
-0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7,
-0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00,
-0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00,
+0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
+0x03, 0x04, 0x02, 0x04, 0x05, 0x04, 0x03, 0x04, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF,
+0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08,
+0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00,
+0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x15, 0x54, 0x69, 0x65, 0x72, 0x72, 0x61, 0x20, 0x64, 0x65, 0x6C,
+0x20, 0x46, 0x75, 0x65, 0x67, 0x6F, 0x20, 0x28, 0x54, 0x46, 0x29,
/* America/Aruba */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x57, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x93, 0x1E, 0x2F, 0x38,
0xF6, 0x98, 0xEC, 0x48, 0x01, 0x02, 0xFF, 0xFF, 0xBE, 0x48, 0x00, 0x00, 0xFF, 0xFF, 0xC0, 0xB8,
0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x4E, 0x54, 0x00,
-0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Asuncion */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x59, 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, 0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0D, 0xB8, 0x17, 0xF5, 0x90,
0x05, 0x2B, 0xDA, 0x40, 0x07, 0xFC, 0xF0, 0xB0, 0x0A, 0xCF, 0x74, 0xC0, 0x0B, 0x97, 0xCA, 0xB0,
@@ -1918,10 +1883,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0xFF, 0xFF, 0xC9, 0xF0,
0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF,
0xD5, 0xD0, 0x01, 0x08, 0x41, 0x4D, 0x54, 0x00, 0x50, 0x59, 0x54, 0x00, 0x50, 0x59, 0x53, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Atikokan */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x9E, 0xB8, 0xA1, 0x80,
0x9F, 0xC0, 0x3F, 0x70, 0xC8, 0xF8, 0x57, 0x60, 0xCB, 0x88, 0xFE, 0x80, 0xD2, 0x23, 0xF4, 0x70,
@@ -1929,10 +1895,15 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0,
0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00,
0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00,
+0x00, 0x44, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x53, 0x74, 0x61, 0x6E, 0x64, 0x61,
+0x72, 0x64, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x41, 0x74, 0x69, 0x6B, 0x6F, 0x6B,
+0x61, 0x6E, 0x2C, 0x20, 0x4F, 0x6E, 0x74, 0x61, 0x72, 0x69, 0x6F, 0x20, 0x61, 0x6E, 0x64, 0x20,
+0x53, 0x6F, 0x75, 0x74, 0x68, 0x61, 0x6D, 0x70, 0x74, 0x6F, 0x6E, 0x20, 0x49, 0x2C, 0x20, 0x4E,
+0x75, 0x6E, 0x61, 0x76, 0x75, 0x74,
/* America/Atka */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0xCB, 0x89, 0x44, 0xD0,
0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x50, 0x40, 0xFA, 0xD2, 0x55, 0xB0, 0xFE, 0xB8, 0x71, 0x50,
@@ -1985,10 +1956,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x19, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x1E, 0x4E, 0x53, 0x54, 0x00, 0x4E, 0x57, 0x54, 0x00, 0x4E,
0x50, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x42, 0x44, 0x54, 0x00, 0x41, 0x48, 0x53, 0x54, 0x00,
0x48, 0x41, 0x44, 0x54, 0x00, 0x48, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Bahia */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x52, 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, 0x3B, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x6B, 0x1C,
0xB8, 0x0F, 0x49, 0xE0, 0xB8, 0xFD, 0x40, 0xA0, 0xB9, 0xF1, 0x34, 0x30, 0xBA, 0xDE, 0x74, 0x20,
@@ -2011,10 +1983,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0xFF, 0xFF, 0xDB, 0xE4, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF,
0xFF, 0xD5, 0xD0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x52, 0x53, 0x54, 0x00, 0x42, 0x52,
-0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x05, 0x42, 0x61, 0x68, 0x69, 0x61,
/* America/Barbados */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x42, 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, 0x0A, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0xA9, 0x79, 0x24, 0xE4,
0xB8, 0x85, 0x63, 0xE4, 0x0E, 0x00, 0xF2, 0xE0, 0x0E, 0x94, 0x8C, 0xD0, 0x0F, 0x97, 0x00, 0xE0,
@@ -2022,10 +1995,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x14, 0x30, 0x3E, 0x50, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0xFF, 0xFF,
0xC8, 0x1C, 0x00, 0x00, 0xFF, 0xFF, 0xC8, 0x1C, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08,
0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x4D, 0x54, 0x00, 0x41, 0x44,
-0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89,
+0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Belem */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x52, 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, 0x1D, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x74, 0x74,
0xB8, 0x0F, 0x49, 0xE0, 0xB8, 0xFD, 0x40, 0xA0, 0xB9, 0xF1, 0x34, 0x30, 0xBA, 0xDE, 0x74, 0x20,
@@ -2039,10 +2013,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xD2,
0x8C, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x09, 0x4C,
0x4D, 0x54, 0x00, 0x42, 0x52, 0x53, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00,
+0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0D, 0x41, 0x6D,
+0x61, 0x70, 0x61, 0x2C, 0x20, 0x45, 0x20, 0x50, 0x61, 0x72, 0x61,
/* America/Belize */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x5A, 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, 0x37, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x93, 0x5E, 0xD9, 0xB0,
0x9F, 0x9F, 0x3B, 0xE0, 0xA0, 0x45, 0x51, 0xD8, 0xA1, 0x7F, 0x1D, 0xE0, 0xA2, 0x2E, 0x6E, 0x58,
@@ -2065,20 +2040,24 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFF, 0xAD, 0x50, 0x00, 0x00, 0xFF, 0xFF, 0xB2, 0xA8, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00,
0x09, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x48, 0x44, 0x54, 0x00,
0x43, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Blanc-Sablon */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 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, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xB8, 0x85, 0x60,
0x9F, 0xC0, 0x23, 0x50, 0xCB, 0x88, 0xE2, 0x60, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xED, 0xD0,
0x00, 0x01, 0x02, 0x03, 0x01, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00,
0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x0C, 0x41, 0x44, 0x54,
0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x57, 0x54, 0x00, 0x41, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00,
-0x01, 0x00, 0x00, 0x00, 0x01,
+0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00,
+0x33, 0x41, 0x74, 0x6C, 0x61, 0x6E, 0x74, 0x69, 0x63, 0x20, 0x53, 0x74, 0x61, 0x6E, 0x64, 0x61,
+0x72, 0x64, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x51, 0x75, 0x65, 0x62, 0x65, 0x63,
+0x20, 0x2D, 0x20, 0x4C, 0x6F, 0x77, 0x65, 0x72, 0x20, 0x4E, 0x6F, 0x72, 0x74, 0x68, 0x20, 0x53,
+0x68, 0x6F, 0x72, 0x65,
/* America/Boa_Vista */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x52, 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, 0x21, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x7F, 0xE0,
0xB8, 0x0F, 0x57, 0xF0, 0xB8, 0xFD, 0x4E, 0xB0, 0xB9, 0xF1, 0x42, 0x40, 0xBA, 0xDE, 0x82, 0x30,
@@ -2093,19 +2072,20 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0xFF, 0xFF, 0xC7, 0x20, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7,
0xC0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x4D, 0x53, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00,
+0x00, 0x07, 0x52, 0x6F, 0x72, 0x61, 0x69, 0x6D, 0x61,
/* America/Bogota */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x4F, 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, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x98, 0x58, 0x55, 0x74,
0x2A, 0x03, 0x73, 0x50, 0x2B, 0xBE, 0x5D, 0x40, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xBA, 0x8C, 0x00,
0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0x42, 0x4D, 0x54,
0x00, 0x43, 0x4F, 0x53, 0x54, 0x00, 0x43, 0x4F, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Boise */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x48, 0xA0,
0x9F, 0xBB, 0x15, 0x90, 0xA0, 0x86, 0x2A, 0xA0, 0xA1, 0x9A, 0xF7, 0x90, 0xA8, 0x46, 0x4C, 0x20,
@@ -2159,10 +2139,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x0C, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x10, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x14, 0x50, 0x44,
0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x4D, 0x53,
0x54, 0x00, 0x4D, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x00, 0x00,
+0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x29, 0x4D, 0x6F,
+0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x73, 0x6F,
+0x75, 0x74, 0x68, 0x20, 0x49, 0x64, 0x61, 0x68, 0x6F, 0x20, 0x26, 0x20, 0x65, 0x61, 0x73, 0x74,
+0x20, 0x4F, 0x72, 0x65, 0x67, 0x6F, 0x6E,
/* America/Buenos_Aires */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0xA2, 0x92, 0x8F, 0x30,
0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30,
@@ -2179,21 +2162,21 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30,
0x27, 0xD0, 0x58, 0xA0, 0x29, 0x00, 0xF1, 0x30, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30,
0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x47, 0x77, 0x09, 0xB0,
-0x47, 0xDC, 0x7F, 0x20, 0x48, 0xE8, 0x2D, 0xB0, 0x49, 0xBC, 0x61, 0x20, 0x4A, 0xC8, 0x0F, 0xB0,
-0x4B, 0xA5, 0x7D, 0xA0, 0x4C, 0xA7, 0xF1, 0xB0, 0x4D, 0x85, 0x5F, 0xA0, 0x4E, 0x87, 0xD3, 0xB0,
-0x4F, 0x65, 0x41, 0xA0, 0x50, 0x70, 0xF0, 0x30, 0x51, 0x45, 0x23, 0xA0, 0x52, 0x50, 0xD2, 0x30,
-0x53, 0x25, 0x05, 0xA0, 0x54, 0x30, 0xB4, 0x30, 0x55, 0x04, 0xE7, 0xA0, 0x56, 0x10, 0x96, 0x30,
-0x56, 0xEE, 0x04, 0x20, 0x57, 0xF0, 0x78, 0x30, 0x58, 0xCD, 0xE6, 0x20, 0x59, 0xD0, 0x5A, 0x30,
-0x5A, 0xAD, 0xC8, 0x20, 0x5B, 0xB9, 0x76, 0xB0, 0x5C, 0x8D, 0xAA, 0x20, 0x5D, 0x99, 0x58, 0xB0,
-0x5E, 0x6D, 0x8C, 0x20, 0x5F, 0x79, 0x3A, 0xB0, 0x60, 0x56, 0xA8, 0xA0, 0x61, 0x59, 0x1C, 0xB0,
-0x62, 0x36, 0x8A, 0xA0, 0x63, 0x38, 0xFE, 0xB0, 0x64, 0x16, 0x6C, 0xA0, 0x65, 0x18, 0xE0, 0xB0,
-0x65, 0xF6, 0x4E, 0xA0, 0x67, 0x01, 0xFD, 0x30, 0x67, 0xD6, 0x30, 0xA0, 0x68, 0xE1, 0xDF, 0x30,
-0x69, 0xB6, 0x12, 0xA0, 0x6A, 0xC1, 0xC1, 0x30, 0x6B, 0x9F, 0x2F, 0x20, 0x6C, 0xA1, 0xA3, 0x30,
-0x6D, 0x7F, 0x11, 0x20, 0x6E, 0x81, 0x85, 0x30, 0x6F, 0x5E, 0xF3, 0x20, 0x70, 0x6A, 0xA1, 0xB0,
-0x71, 0x3E, 0xD5, 0x20, 0x72, 0x4A, 0x83, 0xB0, 0x73, 0x1E, 0xB7, 0x20, 0x74, 0x2A, 0x65, 0xB0,
-0x75, 0x07, 0xD3, 0xA0, 0x76, 0x0A, 0x47, 0xB0, 0x76, 0xE7, 0xB5, 0xA0, 0x77, 0xEA, 0x29, 0xB0,
-0x78, 0xC7, 0x97, 0xA0, 0x79, 0xCA, 0x0B, 0xB0, 0x7A, 0xA7, 0x79, 0xA0, 0x7B, 0xB3, 0x28, 0x30,
-0x7C, 0x87, 0x5B, 0xA0, 0x7D, 0x93, 0x0A, 0x30, 0x7E, 0x67, 0x3D, 0xA0, 0x7F, 0x72, 0xEC, 0x30,
+0x47, 0xDC, 0x7F, 0x20, 0x48, 0xFA, 0xA2, 0xB0, 0x49, 0xBC, 0x61, 0x20, 0x4A, 0xDA, 0x84, 0xB0,
+0x4B, 0xA5, 0x7D, 0xA0, 0x4C, 0xBA, 0x66, 0xB0, 0x4D, 0x85, 0x5F, 0xA0, 0x4E, 0x9A, 0x48, 0xB0,
+0x4F, 0x65, 0x41, 0xA0, 0x50, 0x83, 0x65, 0x30, 0x51, 0x45, 0x23, 0xA0, 0x52, 0x63, 0x47, 0x30,
+0x53, 0x25, 0x05, 0xA0, 0x54, 0x43, 0x29, 0x30, 0x55, 0x04, 0xE7, 0xA0, 0x56, 0x23, 0x0B, 0x30,
+0x56, 0xEE, 0x04, 0x20, 0x58, 0x02, 0xED, 0x30, 0x58, 0xCD, 0xE6, 0x20, 0x59, 0xE2, 0xCF, 0x30,
+0x5A, 0xAD, 0xC8, 0x20, 0x5B, 0xCB, 0xEB, 0xB0, 0x5C, 0x8D, 0xAA, 0x20, 0x5D, 0xAB, 0xCD, 0xB0,
+0x5E, 0x6D, 0x8C, 0x20, 0x5F, 0x8B, 0xAF, 0xB0, 0x60, 0x56, 0xA8, 0xA0, 0x61, 0x6B, 0x91, 0xB0,
+0x62, 0x36, 0x8A, 0xA0, 0x63, 0x4B, 0x73, 0xB0, 0x64, 0x16, 0x6C, 0xA0, 0x65, 0x2B, 0x55, 0xB0,
+0x65, 0xF6, 0x4E, 0xA0, 0x67, 0x14, 0x72, 0x30, 0x67, 0xD6, 0x30, 0xA0, 0x68, 0xF4, 0x54, 0x30,
+0x69, 0xB6, 0x12, 0xA0, 0x6A, 0xD4, 0x36, 0x30, 0x6B, 0x9F, 0x2F, 0x20, 0x6C, 0xB4, 0x18, 0x30,
+0x6D, 0x7F, 0x11, 0x20, 0x6E, 0x93, 0xFA, 0x30, 0x6F, 0x5E, 0xF3, 0x20, 0x70, 0x7D, 0x16, 0xB0,
+0x71, 0x3E, 0xD5, 0x20, 0x72, 0x5C, 0xF8, 0xB0, 0x73, 0x1E, 0xB7, 0x20, 0x74, 0x3C, 0xDA, 0xB0,
+0x75, 0x07, 0xD3, 0xA0, 0x76, 0x1C, 0xBC, 0xB0, 0x76, 0xE7, 0xB5, 0xA0, 0x77, 0xFC, 0x9E, 0xB0,
+0x78, 0xC7, 0x97, 0xA0, 0x79, 0xDC, 0x80, 0xB0, 0x7A, 0xA7, 0x79, 0xA0, 0x7B, 0xC5, 0x9D, 0x30,
+0x7C, 0x87, 0x5B, 0xA0, 0x7D, 0xA5, 0x7F, 0x30, 0x7E, 0x67, 0x3D, 0xA0, 0x7F, 0x85, 0x61, 0x30,
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, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
@@ -2204,10 +2187,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x03, 0x04, 0x03, 0x04, 0x03, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00,
0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5,
0xD0, 0x00, 0x04, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Cambridge_Bay */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x25, 0xA1, 0xF2, 0xCD, 0x80,
0xCB, 0x89, 0x0C, 0x90, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x18, 0x00, 0xF7, 0x2F, 0x5A, 0x70,
@@ -2255,10 +2239,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x4D, 0x50, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x44, 0x44, 0x54, 0x00, 0x4D, 0x44,
0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1C, 0x4D, 0x6F, 0x75, 0x6E,
+0x74, 0x61, 0x69, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x77, 0x65, 0x73, 0x74,
+0x20, 0x4E, 0x75, 0x6E, 0x61, 0x76, 0x75, 0x74,
/* America/Campo_Grande */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x52, 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, 0x80, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x7A, 0x34,
0xB8, 0x0F, 0x57, 0xF0, 0xB8, 0xFD, 0x4E, 0xB0, 0xB9, 0xF1, 0x42, 0x40, 0xBA, 0xDE, 0x82, 0x30,
@@ -2278,21 +2264,21 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x3D, 0xC4, 0x9F, 0x40, 0x3E, 0x4E, 0xFE, 0xB0, 0x3F, 0x92, 0x0C, 0x40, 0x40, 0x2E, 0xE0, 0xB0,
0x41, 0x87, 0x06, 0x40, 0x42, 0x17, 0xFD, 0x30, 0x43, 0x51, 0xD0, 0x40, 0x43, 0xF7, 0xDF, 0x30,
0x45, 0x4D, 0x61, 0xC0, 0x45, 0xE0, 0xFB, 0xB0, 0x47, 0x11, 0x94, 0x40, 0x47, 0xB7, 0xA3, 0x30,
-0x48, 0xF1, 0x76, 0x40, 0x49, 0x97, 0x85, 0x30, 0x4A, 0xD1, 0x58, 0x40, 0x4B, 0x80, 0xA1, 0xB0,
-0x4C, 0xB1, 0x3A, 0x40, 0x4D, 0x60, 0x83, 0xB0, 0x4E, 0x91, 0x1C, 0x40, 0x4F, 0x40, 0x65, 0xB0,
-0x50, 0x7A, 0x38, 0xC0, 0x51, 0x20, 0x47, 0xB0, 0x52, 0x5A, 0x1A, 0xC0, 0x53, 0x00, 0x29, 0xB0,
-0x54, 0x39, 0xFC, 0xC0, 0x54, 0xE0, 0x0B, 0xB0, 0x56, 0x19, 0xDE, 0xC0, 0x56, 0xC9, 0x28, 0x30,
-0x57, 0xF9, 0xC0, 0xC0, 0x58, 0xA9, 0x0A, 0x30, 0x59, 0xD9, 0xA2, 0xC0, 0x5A, 0x88, 0xEC, 0x30,
-0x5B, 0xC2, 0xBF, 0x40, 0x5C, 0x68, 0xCE, 0x30, 0x5D, 0xA2, 0xA1, 0x40, 0x5E, 0x48, 0xB0, 0x30,
-0x5F, 0x82, 0x83, 0x40, 0x60, 0x31, 0xCC, 0xB0, 0x61, 0x62, 0x65, 0x40, 0x62, 0x11, 0xAE, 0xB0,
-0x63, 0x42, 0x47, 0x40, 0x63, 0xF1, 0x90, 0xB0, 0x65, 0x22, 0x29, 0x40, 0x65, 0xD1, 0x72, 0xB0,
-0x67, 0x0B, 0x45, 0xC0, 0x67, 0xB1, 0x54, 0xB0, 0x68, 0xEB, 0x27, 0xC0, 0x69, 0x91, 0x36, 0xB0,
-0x6A, 0xCB, 0x09, 0xC0, 0x6B, 0x7A, 0x53, 0x30, 0x6C, 0xAA, 0xEB, 0xC0, 0x6D, 0x5A, 0x35, 0x30,
-0x6E, 0x8A, 0xCD, 0xC0, 0x6F, 0x3A, 0x17, 0x30, 0x70, 0x73, 0xEA, 0x40, 0x71, 0x19, 0xF9, 0x30,
-0x72, 0x53, 0xCC, 0x40, 0x72, 0xF9, 0xDB, 0x30, 0x74, 0x33, 0xAE, 0x40, 0x74, 0xD9, 0xBD, 0x30,
-0x76, 0x13, 0x90, 0x40, 0x76, 0xC2, 0xD9, 0xB0, 0x77, 0xF3, 0x72, 0x40, 0x78, 0xA2, 0xBB, 0xB0,
-0x79, 0xD3, 0x54, 0x40, 0x7A, 0x82, 0x9D, 0xB0, 0x7B, 0xBC, 0x70, 0xC0, 0x7C, 0x62, 0x7F, 0xB0,
-0x7D, 0x9C, 0x52, 0xC0, 0x7E, 0x42, 0x61, 0xB0, 0x7F, 0x7C, 0x34, 0xC0, 0x02, 0x01, 0x02, 0x01,
+0x48, 0xFA, 0xB0, 0xC0, 0x49, 0x97, 0x85, 0x30, 0x4A, 0xDA, 0x92, 0xC0, 0x4B, 0x80, 0xA1, 0xB0,
+0x4C, 0xBA, 0x74, 0xC0, 0x4D, 0x60, 0x83, 0xB0, 0x4E, 0x9A, 0x56, 0xC0, 0x4F, 0x49, 0xA0, 0x30,
+0x50, 0x83, 0x73, 0x40, 0x51, 0x20, 0x47, 0xB0, 0x52, 0x63, 0x55, 0x40, 0x53, 0x00, 0x29, 0xB0,
+0x54, 0x43, 0x37, 0x40, 0x54, 0xE9, 0x46, 0x30, 0x56, 0x23, 0x19, 0x40, 0x56, 0xC9, 0x28, 0x30,
+0x58, 0x02, 0xFB, 0x40, 0x58, 0xA9, 0x0A, 0x30, 0x59, 0xE2, 0xDD, 0x40, 0x5A, 0x88, 0xEC, 0x30,
+0x5B, 0xCB, 0xF9, 0xC0, 0x5C, 0x68, 0xCE, 0x30, 0x5D, 0xAB, 0xDB, 0xC0, 0x5E, 0x48, 0xB0, 0x30,
+0x5F, 0x8B, 0xBD, 0xC0, 0x60, 0x31, 0xCC, 0xB0, 0x61, 0x6B, 0x9F, 0xC0, 0x62, 0x11, 0xAE, 0xB0,
+0x63, 0x4B, 0x81, 0xC0, 0x63, 0xFA, 0xCB, 0x30, 0x65, 0x2B, 0x63, 0xC0, 0x65, 0xD1, 0x72, 0xB0,
+0x67, 0x14, 0x80, 0x40, 0x67, 0xB1, 0x54, 0xB0, 0x68, 0xF4, 0x62, 0x40, 0x69, 0x9A, 0x71, 0x30,
+0x6A, 0xD4, 0x44, 0x40, 0x6B, 0x7A, 0x53, 0x30, 0x6C, 0xB4, 0x26, 0x40, 0x6D, 0x5A, 0x35, 0x30,
+0x6E, 0x94, 0x08, 0x40, 0x6F, 0x3A, 0x17, 0x30, 0x70, 0x7D, 0x24, 0xC0, 0x71, 0x19, 0xF9, 0x30,
+0x72, 0x5D, 0x06, 0xC0, 0x72, 0xF9, 0xDB, 0x30, 0x74, 0x3C, 0xE8, 0xC0, 0x74, 0xD9, 0xBD, 0x30,
+0x76, 0x1C, 0xCA, 0xC0, 0x76, 0xC2, 0xD9, 0xB0, 0x77, 0xFC, 0xAC, 0xC0, 0x78, 0xAB, 0xF6, 0x30,
+0x79, 0xDC, 0x8E, 0xC0, 0x7A, 0x82, 0x9D, 0xB0, 0x7B, 0xC5, 0xAB, 0x40, 0x7C, 0x62, 0x7F, 0xB0,
+0x7D, 0xA5, 0x8D, 0x40, 0x7E, 0x4B, 0x9C, 0x30, 0x7F, 0x85, 0x6F, 0x40, 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,
@@ -2303,10 +2289,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xCC, 0xCC,
0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x09, 0x4C, 0x4D,
0x54, 0x00, 0x41, 0x4D, 0x53, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00,
+0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x12, 0x4D, 0x61, 0x74,
+0x6F, 0x20, 0x47, 0x72, 0x6F, 0x73, 0x73, 0x6F, 0x20, 0x64, 0x6F, 0x20, 0x53, 0x75, 0x6C,
/* America/Cancun */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0xA5, 0xB6, 0xDA, 0x60,
0x16, 0x86, 0xD5, 0x60, 0x31, 0x67, 0x67, 0xF0, 0x32, 0x72, 0xFA, 0x60, 0x33, 0x47, 0x49, 0xF0,
@@ -2339,20 +2326,24 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFF, 0xAE, 0xA8, 0x00, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x01,
0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x10, 0x4C, 0x4D, 0x54,
0x00, 0x43, 0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1B, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x54,
+0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x51, 0x75, 0x69, 0x6E, 0x74, 0x61, 0x6E, 0x61, 0x20, 0x52,
+0x6F, 0x6F,
/* America/Caracas */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x56, 0x45, 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, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x93, 0x1E, 0x2C, 0x3C,
0xF6, 0x98, 0xEC, 0x48, 0x47, 0x5B, 0x92, 0x70, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xC1, 0x44, 0x00,
0x00, 0xFF, 0xFF, 0xC0, 0xB8, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x43, 0x4D, 0x54,
-0x00, 0x56, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x56, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Catamarca */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30,
+0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30,
0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30,
0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30,
0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0,
@@ -2367,52 +2358,36 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30,
0x27, 0xD0, 0x58, 0xA0, 0x29, 0x00, 0xFF, 0x40, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30,
0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x40, 0xBB, 0xF1, 0x30,
-0x40, 0xD5, 0x0B, 0xC0, 0x47, 0x77, 0x09, 0xB0, 0x47, 0xDC, 0x7F, 0x20, 0x48, 0xE8, 0x2D, 0xB0,
-0x49, 0xBC, 0x61, 0x20, 0x4A, 0xC8, 0x0F, 0xB0, 0x4B, 0xA5, 0x7D, 0xA0, 0x4C, 0xA7, 0xF1, 0xB0,
-0x4D, 0x85, 0x5F, 0xA0, 0x4E, 0x87, 0xD3, 0xB0, 0x4F, 0x65, 0x41, 0xA0, 0x50, 0x70, 0xF0, 0x30,
-0x51, 0x45, 0x23, 0xA0, 0x52, 0x50, 0xD2, 0x30, 0x53, 0x25, 0x05, 0xA0, 0x54, 0x30, 0xB4, 0x30,
-0x55, 0x04, 0xE7, 0xA0, 0x56, 0x10, 0x96, 0x30, 0x56, 0xEE, 0x04, 0x20, 0x57, 0xF0, 0x78, 0x30,
-0x58, 0xCD, 0xE6, 0x20, 0x59, 0xD0, 0x5A, 0x30, 0x5A, 0xAD, 0xC8, 0x20, 0x5B, 0xB9, 0x76, 0xB0,
-0x5C, 0x8D, 0xAA, 0x20, 0x5D, 0x99, 0x58, 0xB0, 0x5E, 0x6D, 0x8C, 0x20, 0x5F, 0x79, 0x3A, 0xB0,
-0x60, 0x56, 0xA8, 0xA0, 0x61, 0x59, 0x1C, 0xB0, 0x62, 0x36, 0x8A, 0xA0, 0x63, 0x38, 0xFE, 0xB0,
-0x64, 0x16, 0x6C, 0xA0, 0x65, 0x18, 0xE0, 0xB0, 0x65, 0xF6, 0x4E, 0xA0, 0x67, 0x01, 0xFD, 0x30,
-0x67, 0xD6, 0x30, 0xA0, 0x68, 0xE1, 0xDF, 0x30, 0x69, 0xB6, 0x12, 0xA0, 0x6A, 0xC1, 0xC1, 0x30,
-0x6B, 0x9F, 0x2F, 0x20, 0x6C, 0xA1, 0xA3, 0x30, 0x6D, 0x7F, 0x11, 0x20, 0x6E, 0x81, 0x85, 0x30,
-0x6F, 0x5E, 0xF3, 0x20, 0x70, 0x6A, 0xA1, 0xB0, 0x71, 0x3E, 0xD5, 0x20, 0x72, 0x4A, 0x83, 0xB0,
-0x73, 0x1E, 0xB7, 0x20, 0x74, 0x2A, 0x65, 0xB0, 0x75, 0x07, 0xD3, 0xA0, 0x76, 0x0A, 0x47, 0xB0,
-0x76, 0xE7, 0xB5, 0xA0, 0x77, 0xEA, 0x29, 0xB0, 0x78, 0xC7, 0x97, 0xA0, 0x79, 0xCA, 0x0B, 0xB0,
-0x7A, 0xA7, 0x79, 0xA0, 0x7B, 0xB3, 0x28, 0x30, 0x7C, 0x87, 0x5B, 0xA0, 0x7D, 0x93, 0x0A, 0x30,
-0x7E, 0x67, 0x3D, 0xA0, 0x7F, 0x72, 0xEC, 0x30, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02,
+0x40, 0xD5, 0x0B, 0xC0, 0x47, 0x77, 0x09, 0xB0, 0x47, 0xDC, 0x7F, 0x20, 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, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, 0x03, 0x04, 0x02, 0x04,
-0x05, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0xFF,
-0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01,
-0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7,
-0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00,
-0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00,
+0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04,
+0x03, 0x04, 0x02, 0x04, 0x05, 0x04, 0x03, 0x04, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF,
+0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08,
+0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00,
+0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Cayenne */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x46, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x91, 0xF4, 0x2B, 0x90,
0xFB, 0xC3, 0x35, 0xC0, 0x01, 0x02, 0xFF, 0xFF, 0xCE, 0xF0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0,
0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x47, 0x46, 0x54, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00,
+0x00, 0x00,
/* America/Cayman */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4B, 0x59, 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, 0x08, 0x93, 0x0F, 0xB5, 0x00,
0x01, 0xFF, 0xFF, 0xB8, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0x4B, 0x4D, 0x54,
-0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Chicago */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x9E, 0xA6, 0x2C, 0x80,
0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xA2, 0xCB, 0x74, 0x00,
@@ -2491,10 +2466,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x00, 0x01, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF,
0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01,
0x10, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54,
-0x00, 0x43, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
+0x00, 0x43, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0C, 0x43, 0x65, 0x6E, 0x74, 0x72,
+0x61, 0x6C, 0x20, 0x54, 0x69, 0x6D, 0x65,
/* America/Chihuahua */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0xA5, 0xB6, 0xE8, 0x70,
0xAF, 0xF2, 0x6E, 0xE0, 0xB6, 0x66, 0x56, 0x60, 0xB7, 0x43, 0xD2, 0x60, 0xB8, 0x0C, 0x36, 0x60,
@@ -2528,10 +2505,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x9C, 0x8C, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08,
0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00,
0x4D, 0x53, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x4D, 0x44, 0x54, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x19, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x54,
+0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x43, 0x68, 0x69, 0x68, 0x75, 0x61, 0x68, 0x75, 0x61,
/* America/Coral_Harbour */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x9E, 0xB8, 0xA1, 0x80,
0x9F, 0xC0, 0x3F, 0x70, 0xC8, 0xF8, 0x57, 0x60, 0xCB, 0x88, 0xFE, 0x80, 0xD2, 0x23, 0xF4, 0x70,
@@ -2539,10 +2518,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0,
0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00,
0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00,
+0x00, 0x00,
/* America/Cordoba */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30,
0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30,
@@ -2559,21 +2539,21 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30,
0x27, 0xD0, 0x58, 0xA0, 0x29, 0x00, 0xFF, 0x40, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30,
0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x47, 0x77, 0x09, 0xB0,
-0x47, 0xDC, 0x7F, 0x20, 0x48, 0xE8, 0x2D, 0xB0, 0x49, 0xBC, 0x61, 0x20, 0x4A, 0xC8, 0x0F, 0xB0,
-0x4B, 0xA5, 0x7D, 0xA0, 0x4C, 0xA7, 0xF1, 0xB0, 0x4D, 0x85, 0x5F, 0xA0, 0x4E, 0x87, 0xD3, 0xB0,
-0x4F, 0x65, 0x41, 0xA0, 0x50, 0x70, 0xF0, 0x30, 0x51, 0x45, 0x23, 0xA0, 0x52, 0x50, 0xD2, 0x30,
-0x53, 0x25, 0x05, 0xA0, 0x54, 0x30, 0xB4, 0x30, 0x55, 0x04, 0xE7, 0xA0, 0x56, 0x10, 0x96, 0x30,
-0x56, 0xEE, 0x04, 0x20, 0x57, 0xF0, 0x78, 0x30, 0x58, 0xCD, 0xE6, 0x20, 0x59, 0xD0, 0x5A, 0x30,
-0x5A, 0xAD, 0xC8, 0x20, 0x5B, 0xB9, 0x76, 0xB0, 0x5C, 0x8D, 0xAA, 0x20, 0x5D, 0x99, 0x58, 0xB0,
-0x5E, 0x6D, 0x8C, 0x20, 0x5F, 0x79, 0x3A, 0xB0, 0x60, 0x56, 0xA8, 0xA0, 0x61, 0x59, 0x1C, 0xB0,
-0x62, 0x36, 0x8A, 0xA0, 0x63, 0x38, 0xFE, 0xB0, 0x64, 0x16, 0x6C, 0xA0, 0x65, 0x18, 0xE0, 0xB0,
-0x65, 0xF6, 0x4E, 0xA0, 0x67, 0x01, 0xFD, 0x30, 0x67, 0xD6, 0x30, 0xA0, 0x68, 0xE1, 0xDF, 0x30,
-0x69, 0xB6, 0x12, 0xA0, 0x6A, 0xC1, 0xC1, 0x30, 0x6B, 0x9F, 0x2F, 0x20, 0x6C, 0xA1, 0xA3, 0x30,
-0x6D, 0x7F, 0x11, 0x20, 0x6E, 0x81, 0x85, 0x30, 0x6F, 0x5E, 0xF3, 0x20, 0x70, 0x6A, 0xA1, 0xB0,
-0x71, 0x3E, 0xD5, 0x20, 0x72, 0x4A, 0x83, 0xB0, 0x73, 0x1E, 0xB7, 0x20, 0x74, 0x2A, 0x65, 0xB0,
-0x75, 0x07, 0xD3, 0xA0, 0x76, 0x0A, 0x47, 0xB0, 0x76, 0xE7, 0xB5, 0xA0, 0x77, 0xEA, 0x29, 0xB0,
-0x78, 0xC7, 0x97, 0xA0, 0x79, 0xCA, 0x0B, 0xB0, 0x7A, 0xA7, 0x79, 0xA0, 0x7B, 0xB3, 0x28, 0x30,
-0x7C, 0x87, 0x5B, 0xA0, 0x7D, 0x93, 0x0A, 0x30, 0x7E, 0x67, 0x3D, 0xA0, 0x7F, 0x72, 0xEC, 0x30,
+0x47, 0xDC, 0x7F, 0x20, 0x48, 0xFA, 0xA2, 0xB0, 0x49, 0xBC, 0x61, 0x20, 0x4A, 0xDA, 0x84, 0xB0,
+0x4B, 0xA5, 0x7D, 0xA0, 0x4C, 0xBA, 0x66, 0xB0, 0x4D, 0x85, 0x5F, 0xA0, 0x4E, 0x9A, 0x48, 0xB0,
+0x4F, 0x65, 0x41, 0xA0, 0x50, 0x83, 0x65, 0x30, 0x51, 0x45, 0x23, 0xA0, 0x52, 0x63, 0x47, 0x30,
+0x53, 0x25, 0x05, 0xA0, 0x54, 0x43, 0x29, 0x30, 0x55, 0x04, 0xE7, 0xA0, 0x56, 0x23, 0x0B, 0x30,
+0x56, 0xEE, 0x04, 0x20, 0x58, 0x02, 0xED, 0x30, 0x58, 0xCD, 0xE6, 0x20, 0x59, 0xE2, 0xCF, 0x30,
+0x5A, 0xAD, 0xC8, 0x20, 0x5B, 0xCB, 0xEB, 0xB0, 0x5C, 0x8D, 0xAA, 0x20, 0x5D, 0xAB, 0xCD, 0xB0,
+0x5E, 0x6D, 0x8C, 0x20, 0x5F, 0x8B, 0xAF, 0xB0, 0x60, 0x56, 0xA8, 0xA0, 0x61, 0x6B, 0x91, 0xB0,
+0x62, 0x36, 0x8A, 0xA0, 0x63, 0x4B, 0x73, 0xB0, 0x64, 0x16, 0x6C, 0xA0, 0x65, 0x2B, 0x55, 0xB0,
+0x65, 0xF6, 0x4E, 0xA0, 0x67, 0x14, 0x72, 0x30, 0x67, 0xD6, 0x30, 0xA0, 0x68, 0xF4, 0x54, 0x30,
+0x69, 0xB6, 0x12, 0xA0, 0x6A, 0xD4, 0x36, 0x30, 0x6B, 0x9F, 0x2F, 0x20, 0x6C, 0xB4, 0x18, 0x30,
+0x6D, 0x7F, 0x11, 0x20, 0x6E, 0x93, 0xFA, 0x30, 0x6F, 0x5E, 0xF3, 0x20, 0x70, 0x7D, 0x16, 0xB0,
+0x71, 0x3E, 0xD5, 0x20, 0x72, 0x5C, 0xF8, 0xB0, 0x73, 0x1E, 0xB7, 0x20, 0x74, 0x3C, 0xDA, 0xB0,
+0x75, 0x07, 0xD3, 0xA0, 0x76, 0x1C, 0xBC, 0xB0, 0x76, 0xE7, 0xB5, 0xA0, 0x77, 0xFC, 0x9E, 0xB0,
+0x78, 0xC7, 0x97, 0xA0, 0x79, 0xDC, 0x80, 0xB0, 0x7A, 0xA7, 0x79, 0xA0, 0x7B, 0xC5, 0x9D, 0x30,
+0x7C, 0x87, 0x5B, 0xA0, 0x7D, 0xA5, 0x7F, 0x30, 0x7E, 0x67, 0x3D, 0xA0, 0x7F, 0x85, 0x61, 0x30,
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, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
@@ -2585,20 +2565,22 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5,
0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54,
0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x00,
/* America/Costa_Rica */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x52, 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, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0xA3, 0xE8, 0x16, 0x54,
0x11, 0x36, 0x49, 0x60, 0x11, 0xB7, 0x6E, 0x50, 0x13, 0x16, 0x2B, 0x60, 0x13, 0x97, 0x50, 0x50,
0x27, 0x97, 0xE0, 0x60, 0x28, 0x6E, 0xB6, 0xD0, 0x29, 0x77, 0xC2, 0x60, 0x29, 0xC2, 0xD9, 0xD0,
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xB1, 0x2C, 0x00, 0x00, 0xFF,
0xFF, 0xB9, 0xB0, 0x01, 0x05, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x09, 0x53, 0x4A, 0x4D, 0x54, 0x00,
-0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89,
+0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Cuiaba */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x52, 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, 0x7E, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x7B, 0x94,
0xB8, 0x0F, 0x57, 0xF0, 0xB8, 0xFD, 0x4E, 0xB0, 0xB9, 0xF1, 0x42, 0x40, 0xBA, 0xDE, 0x82, 0x30,
@@ -2617,22 +2599,22 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x39, 0xDF, 0xF1, 0x40, 0x3A, 0x8F, 0x3A, 0xB0, 0x3B, 0xC9, 0x0D, 0xC0, 0x3C, 0x6F, 0x1C, 0xB0,
0x3D, 0xC4, 0x9F, 0x40, 0x3E, 0x4E, 0xFE, 0xB0, 0x41, 0x87, 0x06, 0x40, 0x42, 0x17, 0xFD, 0x30,
0x43, 0x51, 0xD0, 0x40, 0x43, 0xF7, 0xDF, 0x30, 0x45, 0x4D, 0x61, 0xC0, 0x45, 0xE0, 0xFB, 0xB0,
-0x47, 0x11, 0x94, 0x40, 0x47, 0xB7, 0xA3, 0x30, 0x48, 0xF1, 0x76, 0x40, 0x49, 0x97, 0x85, 0x30,
-0x4A, 0xD1, 0x58, 0x40, 0x4B, 0x80, 0xA1, 0xB0, 0x4C, 0xB1, 0x3A, 0x40, 0x4D, 0x60, 0x83, 0xB0,
-0x4E, 0x91, 0x1C, 0x40, 0x4F, 0x40, 0x65, 0xB0, 0x50, 0x7A, 0x38, 0xC0, 0x51, 0x20, 0x47, 0xB0,
-0x52, 0x5A, 0x1A, 0xC0, 0x53, 0x00, 0x29, 0xB0, 0x54, 0x39, 0xFC, 0xC0, 0x54, 0xE0, 0x0B, 0xB0,
-0x56, 0x19, 0xDE, 0xC0, 0x56, 0xC9, 0x28, 0x30, 0x57, 0xF9, 0xC0, 0xC0, 0x58, 0xA9, 0x0A, 0x30,
-0x59, 0xD9, 0xA2, 0xC0, 0x5A, 0x88, 0xEC, 0x30, 0x5B, 0xC2, 0xBF, 0x40, 0x5C, 0x68, 0xCE, 0x30,
-0x5D, 0xA2, 0xA1, 0x40, 0x5E, 0x48, 0xB0, 0x30, 0x5F, 0x82, 0x83, 0x40, 0x60, 0x31, 0xCC, 0xB0,
-0x61, 0x62, 0x65, 0x40, 0x62, 0x11, 0xAE, 0xB0, 0x63, 0x42, 0x47, 0x40, 0x63, 0xF1, 0x90, 0xB0,
-0x65, 0x22, 0x29, 0x40, 0x65, 0xD1, 0x72, 0xB0, 0x67, 0x0B, 0x45, 0xC0, 0x67, 0xB1, 0x54, 0xB0,
-0x68, 0xEB, 0x27, 0xC0, 0x69, 0x91, 0x36, 0xB0, 0x6A, 0xCB, 0x09, 0xC0, 0x6B, 0x7A, 0x53, 0x30,
-0x6C, 0xAA, 0xEB, 0xC0, 0x6D, 0x5A, 0x35, 0x30, 0x6E, 0x8A, 0xCD, 0xC0, 0x6F, 0x3A, 0x17, 0x30,
-0x70, 0x73, 0xEA, 0x40, 0x71, 0x19, 0xF9, 0x30, 0x72, 0x53, 0xCC, 0x40, 0x72, 0xF9, 0xDB, 0x30,
-0x74, 0x33, 0xAE, 0x40, 0x74, 0xD9, 0xBD, 0x30, 0x76, 0x13, 0x90, 0x40, 0x76, 0xC2, 0xD9, 0xB0,
-0x77, 0xF3, 0x72, 0x40, 0x78, 0xA2, 0xBB, 0xB0, 0x79, 0xD3, 0x54, 0x40, 0x7A, 0x82, 0x9D, 0xB0,
-0x7B, 0xBC, 0x70, 0xC0, 0x7C, 0x62, 0x7F, 0xB0, 0x7D, 0x9C, 0x52, 0xC0, 0x7E, 0x42, 0x61, 0xB0,
-0x7F, 0x7C, 0x34, 0xC0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
+0x47, 0x11, 0x94, 0x40, 0x47, 0xB7, 0xA3, 0x30, 0x48, 0xFA, 0xB0, 0xC0, 0x49, 0x97, 0x85, 0x30,
+0x4A, 0xDA, 0x92, 0xC0, 0x4B, 0x80, 0xA1, 0xB0, 0x4C, 0xBA, 0x74, 0xC0, 0x4D, 0x60, 0x83, 0xB0,
+0x4E, 0x9A, 0x56, 0xC0, 0x4F, 0x49, 0xA0, 0x30, 0x50, 0x83, 0x73, 0x40, 0x51, 0x20, 0x47, 0xB0,
+0x52, 0x63, 0x55, 0x40, 0x53, 0x00, 0x29, 0xB0, 0x54, 0x43, 0x37, 0x40, 0x54, 0xE9, 0x46, 0x30,
+0x56, 0x23, 0x19, 0x40, 0x56, 0xC9, 0x28, 0x30, 0x58, 0x02, 0xFB, 0x40, 0x58, 0xA9, 0x0A, 0x30,
+0x59, 0xE2, 0xDD, 0x40, 0x5A, 0x88, 0xEC, 0x30, 0x5B, 0xCB, 0xF9, 0xC0, 0x5C, 0x68, 0xCE, 0x30,
+0x5D, 0xAB, 0xDB, 0xC0, 0x5E, 0x48, 0xB0, 0x30, 0x5F, 0x8B, 0xBD, 0xC0, 0x60, 0x31, 0xCC, 0xB0,
+0x61, 0x6B, 0x9F, 0xC0, 0x62, 0x11, 0xAE, 0xB0, 0x63, 0x4B, 0x81, 0xC0, 0x63, 0xFA, 0xCB, 0x30,
+0x65, 0x2B, 0x63, 0xC0, 0x65, 0xD1, 0x72, 0xB0, 0x67, 0x14, 0x80, 0x40, 0x67, 0xB1, 0x54, 0xB0,
+0x68, 0xF4, 0x62, 0x40, 0x69, 0x9A, 0x71, 0x30, 0x6A, 0xD4, 0x44, 0x40, 0x6B, 0x7A, 0x53, 0x30,
+0x6C, 0xB4, 0x26, 0x40, 0x6D, 0x5A, 0x35, 0x30, 0x6E, 0x94, 0x08, 0x40, 0x6F, 0x3A, 0x17, 0x30,
+0x70, 0x7D, 0x24, 0xC0, 0x71, 0x19, 0xF9, 0x30, 0x72, 0x5D, 0x06, 0xC0, 0x72, 0xF9, 0xDB, 0x30,
+0x74, 0x3C, 0xE8, 0xC0, 0x74, 0xD9, 0xBD, 0x30, 0x76, 0x1C, 0xCA, 0xC0, 0x76, 0xC2, 0xD9, 0xB0,
+0x77, 0xFC, 0xAC, 0xC0, 0x78, 0xAB, 0xF6, 0x30, 0x79, 0xDC, 0x8E, 0xC0, 0x7A, 0x82, 0x9D, 0xB0,
+0x7B, 0xC5, 0xAB, 0x40, 0x7C, 0x62, 0x7F, 0xB0, 0x7D, 0xA5, 0x8D, 0x40, 0x7E, 0x4B, 0x9C, 0x30,
+0x7F, 0x85, 0x6F, 0x40, 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,
@@ -2642,18 +2624,20 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0xFF, 0xFF, 0xCB, 0x6C, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF,
0xC7, 0xC0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x4D, 0x53, 0x54, 0x00, 0x41, 0x4D, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x0B, 0x4D, 0x61, 0x74, 0x6F, 0x20, 0x47, 0x72, 0x6F, 0x73, 0x73, 0x6F,
/* America/Curacao */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x4E, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x93, 0x1E, 0x2E, 0x20,
0xF6, 0x98, 0xEC, 0x48, 0x01, 0x02, 0xFF, 0xFF, 0xBF, 0x60, 0x00, 0x00, 0xFF, 0xFF, 0xC0, 0xB8,
0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x4E, 0x54, 0x00,
-0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Danmarkshavn */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0x9B, 0x80, 0x49, 0x00,
0x13, 0x4D, 0x7C, 0x50, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90,
@@ -2670,10 +2654,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF,
0xE3, 0xE0, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x47,
0x54, 0x00, 0x57, 0x47, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x21, 0x65, 0x61, 0x73, 0x74, 0x20, 0x63, 0x6F, 0x61, 0x73, 0x74, 0x2C, 0x20, 0x6E,
+0x6F, 0x72, 0x74, 0x68, 0x20, 0x6F, 0x66, 0x20, 0x53, 0x63, 0x6F, 0x72, 0x65, 0x73, 0x62, 0x79,
+0x73, 0x75, 0x6E, 0x64,
/* America/Dawson */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1D, 0x9E, 0xB8, 0xCB, 0xB0,
0x9F, 0xBB, 0x23, 0xA0, 0xA0, 0xD0, 0x0C, 0xB0, 0xA1, 0xA2, 0xD2, 0x80, 0xCB, 0x89, 0x28, 0xB0,
@@ -2720,10 +2707,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x15, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x19, 0x59, 0x44, 0x54, 0x00,
0x59, 0x53, 0x54, 0x00, 0x59, 0x57, 0x54, 0x00, 0x59, 0x50, 0x54, 0x00, 0x59, 0x44, 0x44, 0x54,
0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x1A, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20,
+0x2D, 0x20, 0x6E, 0x6F, 0x72, 0x74, 0x68, 0x20, 0x59, 0x75, 0x6B, 0x6F, 0x6E,
/* America/Dawson_Creek */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x9E, 0xB8, 0xBD, 0xA0,
0x9F, 0xC0, 0x5B, 0x90, 0xCB, 0x89, 0x1A, 0xA0, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x26, 0x10,
@@ -2747,10 +2736,15 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFF, 0x8F, 0x80, 0x00, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01,
0x0C, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x10, 0x50, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50,
0x57, 0x54, 0x00, 0x50, 0x50, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00,
+0x49, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x53, 0x74, 0x61, 0x6E, 0x64, 0x61,
+0x72, 0x64, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x44, 0x61, 0x77, 0x73, 0x6F, 0x6E,
+0x20, 0x43, 0x72, 0x65, 0x65, 0x6B, 0x20, 0x26, 0x20, 0x46, 0x6F, 0x72, 0x74, 0x20, 0x53, 0x61,
+0x69, 0x6E, 0x74, 0x20, 0x4A, 0x6F, 0x68, 0x6E, 0x2C, 0x20, 0x42, 0x72, 0x69, 0x74, 0x69, 0x73,
+0x68, 0x20, 0x43, 0x6F, 0x6C, 0x75, 0x6D, 0x62, 0x69, 0x61,
/* America/Denver */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 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, 0x9D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x3A, 0x90,
0x9F, 0xBB, 0x07, 0x80, 0xA0, 0x86, 0x1C, 0x90, 0xA1, 0x9A, 0xE9, 0x80, 0xA2, 0x65, 0xFE, 0x90,
@@ -2804,10 +2798,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xAB,
0xA0, 0x01, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, 0xFF,
0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54,
-0x00, 0x4D, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+0x00, 0x4D, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0D, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69,
+0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65,
/* America/Detroit */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8B, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x85, 0xBD, 0x22, 0x5B,
0x99, 0x3C, 0x94, 0x00, 0xCB, 0x88, 0xF0, 0x70, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xFB, 0xE0,
@@ -2857,17 +2853,21 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01,
0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x45,
0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x28, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54,
+0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4D, 0x69, 0x63, 0x68, 0x69, 0x67, 0x61, 0x6E, 0x20, 0x2D,
+0x20, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73,
/* America/Dominica */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x44, 0x4D, 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, 0x08, 0x91, 0xF4, 0x34, 0x4C,
0x01, 0xFF, 0xFF, 0xC6, 0x70, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Edmonton */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x9A, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x88, 0xDE, 0xCE, 0xE0,
0x9E, 0xB8, 0xAF, 0x90, 0x9F, 0xC0, 0x4D, 0x80, 0xA0, 0x98, 0x91, 0x90, 0xA0, 0xD2, 0x85, 0x80,
@@ -2921,12 +2921,17 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x95, 0xA0, 0x00, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x08,
0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00,
0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x42, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x54,
+0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x41, 0x6C, 0x62, 0x65, 0x72, 0x74, 0x61, 0x2C, 0x20, 0x65,
+0x61, 0x73, 0x74, 0x20, 0x42, 0x72, 0x69, 0x74, 0x69, 0x73, 0x68, 0x20, 0x43, 0x6F, 0x6C, 0x75,
+0x6D, 0x62, 0x69, 0x61, 0x20, 0x26, 0x20, 0x77, 0x65, 0x73, 0x74, 0x20, 0x53, 0x61, 0x73, 0x6B,
+0x61, 0x74, 0x63, 0x68, 0x65, 0x77, 0x61, 0x6E,
/* America/Eirunepe */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 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, 0x1F, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x88, 0x80,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x52, 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, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x96, 0xAA, 0x88, 0x80,
0xB8, 0x0F, 0x66, 0x00, 0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xF1, 0x50, 0x50, 0xBA, 0xDE, 0x90, 0x40,
0xDA, 0x38, 0xCA, 0x50, 0xDA, 0xEC, 0x16, 0x50, 0xDC, 0x19, 0xFD, 0xD0, 0xDC, 0xB9, 0x75, 0x40,
0xDD, 0xFB, 0x31, 0x50, 0xDE, 0x9B, 0xFA, 0x40, 0xDF, 0xDD, 0xB6, 0x50, 0xE0, 0x54, 0x4F, 0x40,
@@ -2934,23 +2939,27 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xF8, 0x51, 0x48, 0x50, 0xF8, 0xC7, 0xE1, 0x40, 0xFA, 0x0A, 0xEE, 0xD0, 0xFA, 0xA9, 0x14, 0xC0,
0xFB, 0xEC, 0x22, 0x50, 0xFC, 0x8B, 0x99, 0xC0, 0x1D, 0xC9, 0xAA, 0x50, 0x1E, 0x78, 0xF3, 0xC0,
0x1F, 0xA0, 0x51, 0xD0, 0x20, 0x33, 0xEB, 0xC0, 0x21, 0x81, 0x85, 0x50, 0x22, 0x0B, 0xE4, 0xC0,
-0x2C, 0xC0, 0xD1, 0x50, 0x2D, 0x66, 0xE0, 0x40, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
+0x2C, 0xC0, 0xD1, 0x50, 0x2D, 0x66, 0xE0, 0x40, 0x48, 0x60, 0x7F, 0x50, 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, 0xBE, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xC7,
-0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x43, 0x53,
-0x54, 0x00, 0x41, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0xFF, 0xFF, 0xBE, 0x80,
+0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0xFF, 0xFF,
+0xC7, 0xC0, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x43, 0x53, 0x54, 0x00, 0x41, 0x43, 0x54,
+0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0A, 0x57, 0x20, 0x41, 0x6D, 0x61, 0x7A, 0x6F,
+0x6E, 0x61, 0x73,
/* America/El_Salvador */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x56, 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, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xA3, 0xD5, 0xA6, 0x20,
0x20, 0x9A, 0xDC, 0xE0, 0x21, 0x5C, 0x9B, 0x50, 0x22, 0x7A, 0xBE, 0xE0, 0x23, 0x3C, 0x7D, 0x50,
0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xAC, 0x60, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x01,
0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43,
-0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Ensenada */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0xA5, 0xB6, 0xF6, 0x80,
0xA9, 0x79, 0x4F, 0x70, 0xAF, 0xF2, 0x7C, 0xF0, 0xB6, 0x66, 0x64, 0x70, 0xB7, 0x1B, 0x10, 0x00,
@@ -3003,10 +3012,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x04, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x0C, 0xFF, 0xFF, 0x9D,
0x90, 0x01, 0x10, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54,
0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Fortaleza */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x52, 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, 0x27, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x6B, 0x18,
0xB8, 0x0F, 0x49, 0xE0, 0xB8, 0xFD, 0x40, 0xA0, 0xB9, 0xF1, 0x34, 0x30, 0xBA, 0xDE, 0x74, 0x20,
@@ -3023,10 +3033,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF,
0xFF, 0xDB, 0xE8, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00,
0x09, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x52, 0x53, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1E,
+0x4E, 0x45, 0x20, 0x42, 0x72, 0x61, 0x7A, 0x69, 0x6C, 0x20, 0x28, 0x4D, 0x41, 0x2C, 0x20, 0x50,
+0x49, 0x2C, 0x20, 0x43, 0x45, 0x2C, 0x20, 0x52, 0x4E, 0x2C, 0x20, 0x50, 0x42, 0x29,
/* America/Fort_Wayne */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80,
0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCA, 0x57, 0x22, 0x80,
@@ -3063,10 +3075,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF,
0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53,
0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44,
-0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x89,
+0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Glace_Bay */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x80, 0xF1, 0xA8, 0x34,
0x9E, 0xB8, 0x85, 0x60, 0x9F, 0xC0, 0x23, 0x50, 0xCB, 0x88, 0xE2, 0x60, 0xD2, 0x23, 0xF4, 0x70,
@@ -3116,10 +3129,15 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x0C,
0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x41, 0x53,
0x54, 0x00, 0x41, 0x57, 0x54, 0x00, 0x41, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
-0x00, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x47,
+0x41, 0x74, 0x6C, 0x61, 0x6E, 0x74, 0x69, 0x63, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20,
+0x4E, 0x6F, 0x76, 0x61, 0x20, 0x53, 0x63, 0x6F, 0x74, 0x69, 0x61, 0x20, 0x2D, 0x20, 0x70, 0x6C,
+0x61, 0x63, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x64, 0x69, 0x64, 0x20, 0x6E, 0x6F,
+0x74, 0x20, 0x6F, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x20, 0x44, 0x53, 0x54, 0x20, 0x31, 0x39,
+0x36, 0x36, 0x2D, 0x31, 0x39, 0x37, 0x31,
/* America/Godthab */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0x9B, 0x80, 0x68, 0x00,
0x13, 0x4D, 0x7C, 0x50, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90,
@@ -3161,10 +3179,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x02, 0x03, 0x02, 0xFF, 0xFF, 0xCF, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x00,
0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xE3,
0xE0, 0x01, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x47, 0x54, 0x00, 0x57, 0x47, 0x53, 0x54, 0x00,
-0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
+0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x0E, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74,
+0x69, 0x6F, 0x6E, 0x73,
/* America/Goose_Bay */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1D, 0x9E, 0xB8, 0x7E, 0x8C,
0x9F, 0xC0, 0x1C, 0x7C, 0xBE, 0x9E, 0x4D, 0x6C, 0xC0, 0xB8, 0x31, 0x38, 0xC1, 0x79, 0xEF, 0xA8,
@@ -3236,10 +3256,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xC0, 0x00, 0x14, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x18, 0x4E, 0x53, 0x54, 0x00, 0x4E, 0x44, 0x54,
0x00, 0x4E, 0x50, 0x54, 0x00, 0x4E, 0x57, 0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x41, 0x53, 0x54,
0x00, 0x41, 0x44, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x29, 0x41, 0x74, 0x6C, 0x61, 0x6E, 0x74, 0x69, 0x63, 0x20, 0x54, 0x69, 0x6D,
+0x65, 0x20, 0x2D, 0x20, 0x4C, 0x61, 0x62, 0x72, 0x61, 0x64, 0x6F, 0x72, 0x20, 0x2D, 0x20, 0x6D,
+0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73,
/* America/Grand_Turk */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x43, 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, 0x77, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x93, 0x0F, 0xB5, 0x00,
0x11, 0x89, 0x65, 0xF0, 0x12, 0x79, 0x48, 0xE0, 0x13, 0x69, 0x47, 0xF0, 0x14, 0x59, 0x2A, 0xE0,
@@ -3281,51 +3304,56 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF,
0xFF, 0xB8, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00,
0x08, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Grenada */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x44, 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, 0x08, 0x91, 0xF4, 0x34, 0x64,
0x01, 0xFF, 0xFF, 0xC6, 0x1C, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Guadeloupe */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x50, 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, 0x08, 0x91, 0xD5, 0xE1, 0xB0,
0x01, 0xFF, 0xFF, 0xC6, 0x50, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Guatemala */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x54, 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, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x9F, 0x9D, 0xEA, 0xDC,
0x07, 0x55, 0xAC, 0x60, 0x07, 0xCD, 0x96, 0xD0, 0x19, 0x2C, 0x78, 0x60, 0x19, 0xCF, 0xE4, 0x50,
0x27, 0xEA, 0xEE, 0xE0, 0x28, 0xC8, 0x5C, 0xD0, 0x44, 0x54, 0x52, 0x60, 0x45, 0x1F, 0x4B, 0x50,
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xAB, 0x24, 0x00, 0x00, 0xFF,
0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43,
-0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Guayaquil */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x43, 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, 0x08, 0xB6, 0xA4, 0x42, 0x18,
0x01, 0xFF, 0xFF, 0xB6, 0x68, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0x51, 0x4D, 0x54,
-0x00, 0x45, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x45, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x08, 0x6D, 0x61, 0x69, 0x6E, 0x6C, 0x61, 0x6E, 0x64,
/* America/Guyana */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0x98, 0xD9, 0x79, 0x88,
0xF9, 0x39, 0x3E, 0xBC, 0x0A, 0x7D, 0xB4, 0x3C, 0x27, 0x7F, 0xFB, 0x30, 0x01, 0x02, 0x03, 0x04,
0xFF, 0xFF, 0xC9, 0x78, 0x00, 0x00, 0xFF, 0xFF, 0xCB, 0x44, 0x00, 0x04, 0xFF, 0xFF, 0xCB, 0x44,
0x00, 0x09, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x09, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x09, 0x4C, 0x4D,
0x54, 0x00, 0x47, 0x42, 0x47, 0x54, 0x00, 0x47, 0x59, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00,
+0x00,
/* America/Halifax */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xE4, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x80, 0xF1, 0xAB, 0xA0,
0x9A, 0xE4, 0xDE, 0xC0, 0x9B, 0xD6, 0x13, 0x30, 0x9E, 0xB8, 0x85, 0x60, 0x9F, 0xC0, 0x23, 0x50,
@@ -3402,10 +3430,14 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFF, 0xFF, 0xC4, 0x60, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0,
0x00, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0x4C, 0x4D,
0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x57, 0x54, 0x00, 0x41, 0x50,
-0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
+0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x2E, 0x41, 0x74, 0x6C, 0x61, 0x6E, 0x74, 0x69, 0x63,
+0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4E, 0x6F, 0x76, 0x61, 0x20, 0x53, 0x63, 0x6F,
+0x74, 0x69, 0x61, 0x20, 0x28, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x70, 0x6C, 0x61, 0x63, 0x65, 0x73,
+0x29, 0x2C, 0x20, 0x50, 0x45, 0x49,
/* America/Havana */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0C, 0xAC, 0x62, 0xC2, 0x80,
0xB1, 0xD3, 0x94, 0x50, 0xB2, 0x74, 0x5D, 0x40, 0xC8, 0x5B, 0x66, 0xD0, 0xC8, 0xD3, 0x51, 0x40,
@@ -3459,10 +3491,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x03, 0x04, 0x03, 0xFF, 0xFF, 0xB2, 0xC0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF,
0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01,
0x04, 0x48, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00,
-0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x00,
/* America/Hermosillo */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0xA5, 0xB6, 0xE8, 0x70,
0xAF, 0xF2, 0x6E, 0xE0, 0xB6, 0x66, 0x56, 0x60, 0xB7, 0x43, 0xD2, 0x60, 0xB8, 0x0C, 0x36, 0x60,
@@ -3473,10 +3506,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x0C, 0xFF,
0xFF, 0xAB, 0xA0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x43, 0x53, 0x54,
0x00, 0x50, 0x53, 0x54, 0x00, 0x4D, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1F, 0x4D,
+0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x53, 0x74, 0x61, 0x6E, 0x64, 0x61, 0x72, 0x64,
+0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x53, 0x6F, 0x6E, 0x6F, 0x72, 0x61,
/* America/Indiana/Indianapolis */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80,
0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCA, 0x57, 0x22, 0x80,
@@ -3513,10 +3548,14 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF,
0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53,
0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44,
-0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x89,
+0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x27, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72,
+0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x49, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x61,
+0x20, 0x2D, 0x20, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E,
+0x73,
/* America/Indiana/Knox */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x9E, 0xA6, 0x2C, 0x80,
0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCB, 0x88, 0xFE, 0x80,
@@ -3570,10 +3609,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01,
0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43,
0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00,
+0x26, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20,
+0x49, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x61, 0x20, 0x2D, 0x20, 0x53, 0x74, 0x61, 0x72, 0x6B, 0x65,
+0x20, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x79,
/* America/Indiana/Marengo */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80,
0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCB, 0x88, 0xFE, 0x80,
@@ -3612,10 +3654,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x43, 0x44,
0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53,
0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x00, 0x00,
+0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x28, 0x45, 0x61,
+0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x49, 0x6E, 0x64,
+0x69, 0x61, 0x6E, 0x61, 0x20, 0x2D, 0x20, 0x43, 0x72, 0x61, 0x77, 0x66, 0x6F, 0x72, 0x64, 0x20,
+0x43, 0x6F, 0x75, 0x6E, 0x74, 0x79,
/* America/Indiana/Petersburg */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80,
0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCB, 0x88, 0xFE, 0x80,
@@ -3658,10 +3703,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x43,
0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45,
0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x01, 0x00, 0x00,
+0x01, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x24, 0x45,
+0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x49, 0x6E,
+0x64, 0x69, 0x61, 0x6E, 0x61, 0x20, 0x2D, 0x20, 0x50, 0x69, 0x6B, 0x65, 0x20, 0x43, 0x6F, 0x75,
+0x6E, 0x74, 0x79,
/* America/Indianapolis */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80,
0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCA, 0x57, 0x22, 0x80,
@@ -3698,10 +3746,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF,
0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53,
0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44,
-0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x89,
+0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Indiana/Tell_City */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80,
0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCB, 0x88, 0xFE, 0x80,
@@ -3739,10 +3788,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF,
0xC7, 0xC0, 0x01, 0x14, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00,
0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x25, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x54, 0x69, 0x6D, 0x65,
+0x20, 0x2D, 0x20, 0x49, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x61, 0x20, 0x2D, 0x20, 0x50, 0x65, 0x72,
+0x72, 0x79, 0x20, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x79,
/* America/Indiana/Vevay */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80,
0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCB, 0x88, 0xFE, 0x80,
@@ -3774,10 +3826,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x14,
0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00,
0x45, 0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x01, 0x00, 0x00,
+0x00, 0x01, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x2B,
+0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x49,
+0x6E, 0x64, 0x69, 0x61, 0x6E, 0x61, 0x20, 0x2D, 0x20, 0x53, 0x77, 0x69, 0x74, 0x7A, 0x65, 0x72,
+0x6C, 0x61, 0x6E, 0x64, 0x20, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x79,
/* America/Indiana/Vincennes */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80,
0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCB, 0x88, 0xFE, 0x80,
@@ -3815,10 +3870,15 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF,
0xC7, 0xC0, 0x01, 0x14, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00,
0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x40, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65,
+0x20, 0x2D, 0x20, 0x49, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x61, 0x20, 0x2D, 0x20, 0x44, 0x61, 0x76,
+0x69, 0x65, 0x73, 0x73, 0x2C, 0x20, 0x44, 0x75, 0x62, 0x6F, 0x69, 0x73, 0x2C, 0x20, 0x4B, 0x6E,
+0x6F, 0x78, 0x20, 0x26, 0x20, 0x4D, 0x61, 0x72, 0x74, 0x69, 0x6E, 0x20, 0x43, 0x6F, 0x75, 0x6E,
+0x74, 0x69, 0x65, 0x73,
/* America/Indiana/Winamac */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80,
0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCB, 0x88, 0xFE, 0x80,
@@ -3858,10 +3918,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF, 0xC7, 0xC0,
0x01, 0x14, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50,
0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00,
+0x00, 0x27, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D,
+0x20, 0x49, 0x6E, 0x64, 0x69, 0x61, 0x6E, 0x61, 0x20, 0x2D, 0x20, 0x50, 0x75, 0x6C, 0x61, 0x73,
+0x6B, 0x69, 0x20, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x79,
/* America/Inuvik */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0xE0, 0x06, 0x4E, 0x80,
0xF7, 0x2F, 0x68, 0x80, 0xF8, 0x28, 0x94, 0x00, 0x11, 0x89, 0x90, 0x20, 0x13, 0x69, 0x64, 0x10,
@@ -3905,10 +3968,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x09, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x0D, 0xFF, 0xFF, 0xAB, 0xA0,
0x01, 0x11, 0x7A, 0x7A, 0x7A, 0x00, 0x50, 0x44, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x4D,
0x53, 0x54, 0x00, 0x4D, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00,
+0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x2A, 0x4D, 0x6F, 0x75,
+0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x77, 0x65, 0x73,
+0x74, 0x20, 0x4E, 0x6F, 0x72, 0x74, 0x68, 0x77, 0x65, 0x73, 0x74, 0x20, 0x54, 0x65, 0x72, 0x72,
+0x69, 0x74, 0x6F, 0x72, 0x69, 0x65, 0x73,
/* America/Iqaluit */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0xCC, 0x6C, 0xA1, 0x80,
0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xFB, 0xE0, 0xF7, 0x2F, 0x3E, 0x50, 0xF8, 0x28, 0x69, 0xD0,
@@ -3954,10 +4020,14 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xA0, 0x00, 0x19, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x1D, 0x7A, 0x7A, 0x7A, 0x00, 0x45, 0x50, 0x54,
0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, 0x44, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x45, 0x57,
0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x2C, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69,
+0x6D, 0x65, 0x20, 0x2D, 0x20, 0x65, 0x61, 0x73, 0x74, 0x20, 0x4E, 0x75, 0x6E, 0x61, 0x76, 0x75,
+0x74, 0x20, 0x2D, 0x20, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F,
+0x6E, 0x73,
/* America/Jamaica */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4A, 0x4D, 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, 0x15, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x93, 0x0F, 0xB5, 0x00,
0x08, 0x20, 0xC1, 0x70, 0x09, 0x10, 0xA4, 0x60, 0x09, 0xAD, 0x94, 0xF0, 0x0A, 0xF0, 0x86, 0x60,
@@ -3968,12 +4038,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02,
0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xB8, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00,
0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45,
-0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Jujuy */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x92, 0x8F, 0x30,
+0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x92, 0x8F, 0x30,
0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30,
0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30,
0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0,
@@ -3988,37 +4059,19 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x2A, 0x57, 0xC0,
0x27, 0xE2, 0xDB, 0xB0, 0x28, 0xEE, 0x8A, 0x40, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30,
0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x47, 0x77, 0x09, 0xB0,
-0x47, 0xDC, 0x7F, 0x20, 0x48, 0xE8, 0x2D, 0xB0, 0x49, 0xBC, 0x61, 0x20, 0x4A, 0xC8, 0x0F, 0xB0,
-0x4B, 0xA5, 0x7D, 0xA0, 0x4C, 0xA7, 0xF1, 0xB0, 0x4D, 0x85, 0x5F, 0xA0, 0x4E, 0x87, 0xD3, 0xB0,
-0x4F, 0x65, 0x41, 0xA0, 0x50, 0x70, 0xF0, 0x30, 0x51, 0x45, 0x23, 0xA0, 0x52, 0x50, 0xD2, 0x30,
-0x53, 0x25, 0x05, 0xA0, 0x54, 0x30, 0xB4, 0x30, 0x55, 0x04, 0xE7, 0xA0, 0x56, 0x10, 0x96, 0x30,
-0x56, 0xEE, 0x04, 0x20, 0x57, 0xF0, 0x78, 0x30, 0x58, 0xCD, 0xE6, 0x20, 0x59, 0xD0, 0x5A, 0x30,
-0x5A, 0xAD, 0xC8, 0x20, 0x5B, 0xB9, 0x76, 0xB0, 0x5C, 0x8D, 0xAA, 0x20, 0x5D, 0x99, 0x58, 0xB0,
-0x5E, 0x6D, 0x8C, 0x20, 0x5F, 0x79, 0x3A, 0xB0, 0x60, 0x56, 0xA8, 0xA0, 0x61, 0x59, 0x1C, 0xB0,
-0x62, 0x36, 0x8A, 0xA0, 0x63, 0x38, 0xFE, 0xB0, 0x64, 0x16, 0x6C, 0xA0, 0x65, 0x18, 0xE0, 0xB0,
-0x65, 0xF6, 0x4E, 0xA0, 0x67, 0x01, 0xFD, 0x30, 0x67, 0xD6, 0x30, 0xA0, 0x68, 0xE1, 0xDF, 0x30,
-0x69, 0xB6, 0x12, 0xA0, 0x6A, 0xC1, 0xC1, 0x30, 0x6B, 0x9F, 0x2F, 0x20, 0x6C, 0xA1, 0xA3, 0x30,
-0x6D, 0x7F, 0x11, 0x20, 0x6E, 0x81, 0x85, 0x30, 0x6F, 0x5E, 0xF3, 0x20, 0x70, 0x6A, 0xA1, 0xB0,
-0x71, 0x3E, 0xD5, 0x20, 0x72, 0x4A, 0x83, 0xB0, 0x73, 0x1E, 0xB7, 0x20, 0x74, 0x2A, 0x65, 0xB0,
-0x75, 0x07, 0xD3, 0xA0, 0x76, 0x0A, 0x47, 0xB0, 0x76, 0xE7, 0xB5, 0xA0, 0x77, 0xEA, 0x29, 0xB0,
-0x78, 0xC7, 0x97, 0xA0, 0x79, 0xCA, 0x0B, 0xB0, 0x7A, 0xA7, 0x79, 0xA0, 0x7B, 0xB3, 0x28, 0x30,
-0x7C, 0x87, 0x5B, 0xA0, 0x7D, 0x93, 0x0A, 0x30, 0x7E, 0x67, 0x3D, 0xA0, 0x7F, 0x72, 0xEC, 0x30,
+0x47, 0xDC, 0x7F, 0x20, 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, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05,
-0x06, 0x05, 0x03, 0x04, 0x03, 0x04, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00,
-0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5,
-0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x12, 0x43,
-0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54,
-0x00, 0x57, 0x41, 0x52, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04,
+0x03, 0x04, 0x03, 0x05, 0x06, 0x05, 0x03, 0x04, 0x03, 0x04, 0x02, 0x04, 0x03, 0x04, 0xFF, 0xFF,
+0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08,
+0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0,
+0x00, 0x0D, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x12, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00,
+0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x57, 0x41, 0x52, 0x53, 0x54, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89,
+0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Juneau */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x22, 0xCB, 0x89, 0x1A, 0xA0,
0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x26, 0x10, 0xFE, 0xB8, 0x47, 0x20, 0xFF, 0xA8, 0x2A, 0x10,
@@ -4071,10 +4124,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x1D, 0x50, 0x53, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54, 0x00, 0x50, 0x44,
0x54, 0x00, 0x59, 0x53, 0x54, 0x00, 0x59, 0x44, 0x54, 0x00, 0x41, 0x4B, 0x44, 0x54, 0x00, 0x41,
0x4B, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
-0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1E,
+0x41, 0x6C, 0x61, 0x73, 0x6B, 0x61, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x41, 0x6C,
+0x61, 0x73, 0x6B, 0x61, 0x20, 0x70, 0x61, 0x6E, 0x68, 0x61, 0x6E, 0x64, 0x6C, 0x65,
/* America/Kentucky/Louisville */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xB1, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80,
0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xA4, 0x73, 0xF7, 0x00,
@@ -4136,10 +4191,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0xFF,
0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54,
0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00,
-0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x29, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 0x6D,
+0x65, 0x20, 0x2D, 0x20, 0x4B, 0x65, 0x6E, 0x74, 0x75, 0x63, 0x6B, 0x79, 0x20, 0x2D, 0x20, 0x4C,
+0x6F, 0x75, 0x69, 0x73, 0x76, 0x69, 0x6C, 0x6C, 0x65, 0x20, 0x61, 0x72, 0x65, 0x61,
/* America/Kentucky/Monticello */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80,
0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCB, 0x88, 0xFE, 0x80,
@@ -4192,10 +4250,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x10, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x14, 0x43,
0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45,
0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x01, 0x00, 0x00,
+0x01, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x26, 0x45,
+0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4B, 0x65,
+0x6E, 0x74, 0x75, 0x63, 0x6B, 0x79, 0x20, 0x2D, 0x20, 0x57, 0x61, 0x79, 0x6E, 0x65, 0x20, 0x43,
+0x6F, 0x75, 0x6E, 0x74, 0x79,
/* America/Knox_IN */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x9E, 0xA6, 0x2C, 0x80,
0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCB, 0x88, 0xFE, 0x80,
@@ -4249,18 +4310,20 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01,
0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43,
0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00,
+0x00,
/* America/La_Paz */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x4F, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0xB8, 0x1E, 0x96, 0xE4,
0xB8, 0xEE, 0xD5, 0xD4, 0x01, 0x02, 0xFF, 0xFF, 0xC0, 0x1C, 0x00, 0x00, 0xFF, 0xFF, 0xCE, 0x2C,
0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x09, 0x43, 0x4D, 0x54, 0x00, 0x42, 0x4F, 0x53, 0x54,
-0x00, 0x42, 0x4F, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x42, 0x4F, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Lima */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x45, 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, 0x0F, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x8C, 0x74, 0x40, 0xD4,
0xC3, 0xCF, 0x4A, 0x50, 0xC4, 0x45, 0xE3, 0x40, 0xC5, 0x2F, 0x4A, 0xD0, 0xC6, 0x1F, 0x2D, 0xC0,
@@ -4269,10 +4332,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x2D, 0x25, 0x03, 0x50, 0x2D, 0x9B, 0x9C, 0x40, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xB7, 0xAC, 0x00, 0x00, 0xFF, 0xFF, 0xC7,
0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x50, 0x45, 0x53,
-0x54, 0x00, 0x50, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x54, 0x00, 0x50, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Los_Angeles */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 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, 0xB9, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x48, 0xA0,
0x9F, 0xBB, 0x15, 0x90, 0xA0, 0x86, 0x2A, 0xA0, 0xA1, 0x9A, 0xF7, 0x90, 0xCB, 0x89, 0x1A, 0xA0,
@@ -4335,10 +4399,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x00, 0xFF,
0xFF, 0x8F, 0x80, 0x00, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01,
0x0C, 0x50, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x0C, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x54, 0x69, 0x6D,
+0x65,
/* America/Louisville */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xB1, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80,
0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xA4, 0x73, 0xF7, 0x00,
@@ -4400,10 +4466,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0xFF,
0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54,
0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00,
-0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Maceio */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x52, 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, 0x29, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x68, 0x7C,
0xB8, 0x0F, 0x49, 0xE0, 0xB8, 0xFD, 0x40, 0xA0, 0xB9, 0xF1, 0x34, 0x30, 0xBA, 0xDE, 0x74, 0x20,
@@ -4420,10 +4487,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
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, 0xDE, 0x84, 0x00, 0x00, 0xFF,
0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x42,
-0x52, 0x53, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x52, 0x53, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89,
+0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x10, 0x41, 0x6C, 0x61, 0x67, 0x6F, 0x61,
+0x73, 0x2C, 0x20, 0x53, 0x65, 0x72, 0x67, 0x69, 0x70, 0x65,
/* America/Managua */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4E, 0x49, 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, 0x0F, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0xBD, 0x2D, 0x48, 0xE8,
0x06, 0x43, 0x74, 0x60, 0x09, 0xA4, 0x3E, 0x50, 0x11, 0x51, 0xF8, 0xE0, 0x11, 0xD4, 0x6F, 0x50,
@@ -4433,10 +4502,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x02, 0x01, 0x03, 0x01, 0x03, 0x01, 0xFF, 0xFF, 0xAF, 0x18, 0x00, 0x00, 0xFF, 0xFF, 0xAB,
0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0x4D,
0x4D, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x00,
/* America/Manaus */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x52, 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, 0x1F, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x7F, 0x44,
0xB8, 0x0F, 0x57, 0xF0, 0xB8, 0xFD, 0x4E, 0xB0, 0xB9, 0xF1, 0x42, 0x40, 0xBA, 0xDE, 0x82, 0x30,
@@ -4450,26 +4520,29 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
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, 0xC7, 0xBC, 0x00, 0x00, 0xFF, 0xFF, 0xD5,
0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x4D, 0x53,
-0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0A, 0x45, 0x20, 0x41, 0x6D, 0x61, 0x7A, 0x6F, 0x6E,
+0x61, 0x73,
/* America/Marigot */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x46, 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, 0x08, 0x91, 0xD5, 0xE1, 0xB0,
0x01, 0xFF, 0xFF, 0xC6, 0x50, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Martinique */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x51, 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, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x91, 0xA3, 0xC8, 0x44,
0x13, 0x4D, 0x6E, 0x40, 0x14, 0x34, 0x16, 0xB0, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xC6, 0xBC, 0x00,
0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x05, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x09, 0x46, 0x46, 0x4D,
0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Mazatlan */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0xA5, 0xB6, 0xE8, 0x70,
0xAF, 0xF2, 0x6E, 0xE0, 0xB6, 0x66, 0x56, 0x60, 0xB7, 0x43, 0xD2, 0x60, 0xB8, 0x0C, 0x36, 0x60,
@@ -4504,12 +4577,15 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x3C, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF,
0xFF, 0x8F, 0x80, 0x00, 0x0C, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x4D,
0x53, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x4D, 0x44, 0x54, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x28, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x54, 0x69,
+0x6D, 0x65, 0x20, 0x2D, 0x20, 0x53, 0x20, 0x42, 0x61, 0x6A, 0x61, 0x2C, 0x20, 0x4E, 0x61, 0x79,
+0x61, 0x72, 0x69, 0x74, 0x2C, 0x20, 0x53, 0x69, 0x6E, 0x61, 0x6C, 0x6F, 0x61,
/* America/Mendoza */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x92, 0x8F, 0x30,
+0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x92, 0x8F, 0x30,
0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30,
0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30,
0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0,
@@ -4524,37 +4600,20 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x19, 0x34, 0x40,
0x27, 0xCD, 0xC3, 0xB0, 0x28, 0xFA, 0x67, 0xC0, 0x29, 0xB0, 0x48, 0xB0, 0x2A, 0xE0, 0xE1, 0x40,
0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x40, 0xB0, 0x13, 0xB0,
-0x41, 0x56, 0x3E, 0xC0, 0x47, 0x77, 0x09, 0xB0, 0x47, 0xDC, 0x7F, 0x20, 0x48, 0xE8, 0x2D, 0xB0,
-0x49, 0xBC, 0x61, 0x20, 0x4A, 0xC8, 0x0F, 0xB0, 0x4B, 0xA5, 0x7D, 0xA0, 0x4C, 0xA7, 0xF1, 0xB0,
-0x4D, 0x85, 0x5F, 0xA0, 0x4E, 0x87, 0xD3, 0xB0, 0x4F, 0x65, 0x41, 0xA0, 0x50, 0x70, 0xF0, 0x30,
-0x51, 0x45, 0x23, 0xA0, 0x52, 0x50, 0xD2, 0x30, 0x53, 0x25, 0x05, 0xA0, 0x54, 0x30, 0xB4, 0x30,
-0x55, 0x04, 0xE7, 0xA0, 0x56, 0x10, 0x96, 0x30, 0x56, 0xEE, 0x04, 0x20, 0x57, 0xF0, 0x78, 0x30,
-0x58, 0xCD, 0xE6, 0x20, 0x59, 0xD0, 0x5A, 0x30, 0x5A, 0xAD, 0xC8, 0x20, 0x5B, 0xB9, 0x76, 0xB0,
-0x5C, 0x8D, 0xAA, 0x20, 0x5D, 0x99, 0x58, 0xB0, 0x5E, 0x6D, 0x8C, 0x20, 0x5F, 0x79, 0x3A, 0xB0,
-0x60, 0x56, 0xA8, 0xA0, 0x61, 0x59, 0x1C, 0xB0, 0x62, 0x36, 0x8A, 0xA0, 0x63, 0x38, 0xFE, 0xB0,
-0x64, 0x16, 0x6C, 0xA0, 0x65, 0x18, 0xE0, 0xB0, 0x65, 0xF6, 0x4E, 0xA0, 0x67, 0x01, 0xFD, 0x30,
-0x67, 0xD6, 0x30, 0xA0, 0x68, 0xE1, 0xDF, 0x30, 0x69, 0xB6, 0x12, 0xA0, 0x6A, 0xC1, 0xC1, 0x30,
-0x6B, 0x9F, 0x2F, 0x20, 0x6C, 0xA1, 0xA3, 0x30, 0x6D, 0x7F, 0x11, 0x20, 0x6E, 0x81, 0x85, 0x30,
-0x6F, 0x5E, 0xF3, 0x20, 0x70, 0x6A, 0xA1, 0xB0, 0x71, 0x3E, 0xD5, 0x20, 0x72, 0x4A, 0x83, 0xB0,
-0x73, 0x1E, 0xB7, 0x20, 0x74, 0x2A, 0x65, 0xB0, 0x75, 0x07, 0xD3, 0xA0, 0x76, 0x0A, 0x47, 0xB0,
-0x76, 0xE7, 0xB5, 0xA0, 0x77, 0xEA, 0x29, 0xB0, 0x78, 0xC7, 0x97, 0xA0, 0x79, 0xCA, 0x0B, 0xB0,
-0x7A, 0xA7, 0x79, 0xA0, 0x7B, 0xB3, 0x28, 0x30, 0x7C, 0x87, 0x5B, 0xA0, 0x7D, 0x93, 0x0A, 0x30,
-0x7E, 0x67, 0x3D, 0xA0, 0x7F, 0x72, 0xEC, 0x30, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02,
+0x41, 0x56, 0x3E, 0xC0, 0x47, 0x77, 0x09, 0xB0, 0x47, 0xDC, 0x7F, 0x20, 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, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x06, 0x05, 0x06, 0x05, 0x03, 0x04, 0x02, 0x04,
-0x05, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
-0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0xFF,
-0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01,
-0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7,
-0xC0, 0x00, 0x0D, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x12, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54,
-0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x57, 0x41, 0x52, 0x53, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x06, 0x05, 0x06, 0x05,
+0x03, 0x04, 0x02, 0x04, 0x05, 0x04, 0x03, 0x04, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF,
+0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08,
+0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0xFF, 0xFF, 0xD5, 0xD0,
+0x01, 0x12, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57,
+0x41, 0x52, 0x54, 0x00, 0x57, 0x41, 0x52, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* America/Menominee */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x9E, 0xA6, 0x2C, 0x80,
0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCB, 0x88, 0xFE, 0x80,
@@ -4604,10 +4663,16 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x01, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF,
0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10,
0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00,
-0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x89,
+0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x47, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61,
+0x6C, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4D, 0x69, 0x63, 0x68, 0x69, 0x67, 0x61,
+0x6E, 0x20, 0x2D, 0x20, 0x44, 0x69, 0x63, 0x6B, 0x69, 0x6E, 0x73, 0x6F, 0x6E, 0x2C, 0x20, 0x47,
+0x6F, 0x67, 0x65, 0x62, 0x69, 0x63, 0x2C, 0x20, 0x49, 0x72, 0x6F, 0x6E, 0x20, 0x26, 0x20, 0x4D,
+0x65, 0x6E, 0x6F, 0x6D, 0x69, 0x6E, 0x65, 0x65, 0x20, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x69, 0x65,
+0x73,
/* America/Merida */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x58, 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, 0x57, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0xA5, 0xB6, 0xDA, 0x60,
0x16, 0x86, 0xD5, 0x60, 0x18, 0x4C, 0x4B, 0x50, 0x31, 0x67, 0x76, 0x00, 0x32, 0x73, 0x08, 0x70,
@@ -4639,10 +4704,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0xFF,
0xFF, 0xAB, 0xFC, 0x00, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00,
0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x45,
-0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x20, 0x43, 0x65, 0x6E, 0x74, 0x72,
+0x61, 0x6C, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x43, 0x61, 0x6D, 0x70, 0x65, 0x63,
+0x68, 0x65, 0x2C, 0x20, 0x59, 0x75, 0x63, 0x61, 0x74, 0x61, 0x6E,
/* America/Mexico_City */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0xA5, 0xB6, 0xE8, 0x70,
0xAF, 0xF2, 0x6E, 0xE0, 0xB6, 0x66, 0x56, 0x60, 0xB7, 0x43, 0xD2, 0x60, 0xB8, 0x0C, 0x36, 0x60,
@@ -4679,10 +4747,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF,
0xB9, 0xB0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00,
0x43, 0x44, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00,
+0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1D, 0x43, 0x65,
+0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x6D, 0x6F, 0x73,
+0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73,
/* America/Miquelon */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x4D, 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, 0x68, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x12, 0x91, 0xB6, 0x38, 0xA8,
0x13, 0x6E, 0x63, 0xC0, 0x20, 0x75, 0xE4, 0xD0, 0x21, 0x81, 0x77, 0x40, 0x22, 0x55, 0xC6, 0xD0,
@@ -4720,10 +4790,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x03, 0x02, 0x03, 0x02, 0xFF, 0xFF, 0xCB, 0x58, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04,
0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x0D, 0x4C, 0x4D, 0x54, 0x00,
0x41, 0x53, 0x54, 0x00, 0x50, 0x4D, 0x53, 0x54, 0x00, 0x50, 0x4D, 0x44, 0x54, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00,
+0x00, 0x00,
/* America/Moncton */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x80, 0xF1, 0xB6, 0x50,
0x9E, 0xB8, 0x85, 0x60, 0x9F, 0xC0, 0x23, 0x50, 0xBB, 0x3C, 0x38, 0xD0, 0xBB, 0xB4, 0x23, 0x40,
@@ -4793,10 +4864,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x02, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF,
0xC7, 0xC0, 0x00, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10,
0x45, 0x53, 0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x57, 0x54, 0x00,
-0x41, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
+0x41, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89,
+0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1D, 0x41, 0x74, 0x6C, 0x61, 0x6E, 0x74,
+0x69, 0x63, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4E, 0x65, 0x77, 0x20, 0x42, 0x72,
+0x75, 0x6E, 0x73, 0x77, 0x69, 0x63, 0x6B,
/* America/Monterrey */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x58, 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, 0x57, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xA5, 0xB6, 0xDA, 0x60,
0x22, 0x55, 0xF1, 0x00, 0x23, 0x6A, 0xBD, 0xF0, 0x31, 0x67, 0x76, 0x00, 0x32, 0x73, 0x08, 0x70,
@@ -4828,10 +4902,14 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFF,
0xFF, 0xA1, 0xF4, 0x00, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01,
0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x38, 0x43,
+0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x43, 0x6F,
+0x61, 0x68, 0x75, 0x69, 0x6C, 0x61, 0x2C, 0x20, 0x44, 0x75, 0x72, 0x61, 0x6E, 0x67, 0x6F, 0x2C,
+0x20, 0x4E, 0x75, 0x65, 0x76, 0x6F, 0x20, 0x4C, 0x65, 0x6F, 0x6E, 0x2C, 0x20, 0x54, 0x61, 0x6D,
+0x61, 0x75, 0x6C, 0x69, 0x70, 0x61, 0x73,
/* America/Montevideo */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0xA2, 0x92, 0x87, 0xAC,
0xA9, 0x01, 0x25, 0xB8, 0xA9, 0xF1, 0x0F, 0xB0, 0xAA, 0xE2, 0x59, 0x38, 0xAB, 0xD2, 0x43, 0x30,
@@ -4879,10 +4957,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xC8, 0x00, 0x0A, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x0A, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x0E, 0xFF,
0xFF, 0xDC, 0xD8, 0x01, 0x04, 0x4D, 0x4D, 0x54, 0x00, 0x55, 0x59, 0x48, 0x53, 0x54, 0x00, 0x55,
0x59, 0x54, 0x00, 0x55, 0x59, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00,
+0x00, 0x00,
/* America/Montreal */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 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, 0xE8, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9C, 0xBD, 0x01, 0xF0,
0x9C, 0xE4, 0x64, 0xC0, 0x9E, 0xB8, 0x93, 0x70, 0x9F, 0xC0, 0x31, 0x60, 0xA0, 0x87, 0x58, 0xF8,
@@ -4960,17 +5039,21 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04,
0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0x45, 0x44, 0x54, 0x00,
0x45, 0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x00, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x26,
+0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x51,
+0x75, 0x65, 0x62, 0x65, 0x63, 0x20, 0x2D, 0x20, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63,
+0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73,
/* America/Montserrat */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x53, 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, 0x08, 0x91, 0xF4, 0x35, 0x10,
0x01, 0xFF, 0xFF, 0xC5, 0xAC, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Nassau */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x53, 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, 0x95, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x93, 0x37, 0x42, 0x84,
0xF5, 0x4F, 0x78, 0x70, 0xF6, 0x3F, 0x5B, 0x60, 0xF7, 0x2F, 0x5A, 0x70, 0xF8, 0x28, 0x77, 0xE0,
@@ -5021,10 +5104,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xB7, 0x7C, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01,
0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x45,
-0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* America/New_York */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 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, 0xEB, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x1E, 0x70,
0x9F, 0xBA, 0xEB, 0x60, 0xA0, 0x86, 0x00, 0x70, 0xA1, 0x9A, 0xCD, 0x60, 0xA2, 0x65, 0xE2, 0x70,
@@ -5103,10 +5187,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x00, 0x01, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0xFF,
0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0x45, 0x44, 0x54, 0x00, 0x45,
0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
-0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0C, 0x45,
+0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65,
/* America/Nipigon */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 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, 0x86, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xB8, 0x93, 0x70,
0x9F, 0xC0, 0x31, 0x60, 0xC8, 0xF8, 0x49, 0x50, 0xCB, 0x88, 0xF0, 0x70, 0xD2, 0x23, 0xF4, 0x70,
@@ -5153,10 +5238,16 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x00,
0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0,
0x01, 0x0C, 0x45, 0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50,
-0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x4B, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69,
+0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4F, 0x6E, 0x74, 0x61, 0x72, 0x69, 0x6F, 0x20, 0x26, 0x20, 0x51,
+0x75, 0x65, 0x62, 0x65, 0x63, 0x20, 0x2D, 0x20, 0x70, 0x6C, 0x61, 0x63, 0x65, 0x73, 0x20, 0x74,
+0x68, 0x61, 0x74, 0x20, 0x64, 0x69, 0x64, 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x6F, 0x62, 0x73, 0x65,
+0x72, 0x76, 0x65, 0x20, 0x44, 0x53, 0x54, 0x20, 0x31, 0x39, 0x36, 0x37, 0x2D, 0x31, 0x39, 0x37,
+0x33,
/* America/Nome */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x22, 0xCB, 0x89, 0x44, 0xD0,
0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x50, 0x40, 0xFA, 0xD2, 0x55, 0xB0, 0xFE, 0xB8, 0x71, 0x50,
@@ -5209,10 +5300,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x18, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x1D, 0x4E, 0x53, 0x54, 0x00, 0x4E, 0x57, 0x54, 0x00, 0x4E,
0x50, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x42, 0x44, 0x54, 0x00, 0x59, 0x53, 0x54, 0x00, 0x41,
0x4B, 0x44, 0x54, 0x00, 0x41, 0x4B, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x19, 0x41, 0x6C, 0x61, 0x73, 0x6B, 0x61, 0x20, 0x54, 0x69, 0x6D, 0x65,
+0x20, 0x2D, 0x20, 0x77, 0x65, 0x73, 0x74, 0x20, 0x41, 0x6C, 0x61, 0x73, 0x6B, 0x61,
/* America/Noronha */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x52, 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, 0x27, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x65, 0x64,
0xB8, 0x0F, 0x3B, 0xD0, 0xB8, 0xFD, 0x32, 0x90, 0xB9, 0xF1, 0x26, 0x20, 0xBA, 0xDE, 0x66, 0x10,
@@ -5229,10 +5322,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF,
0xFF, 0xE1, 0x9C, 0x00, 0x00, 0xFF, 0xFF, 0xF1, 0xF0, 0x01, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, 0x00,
0x09, 0x4C, 0x4D, 0x54, 0x00, 0x46, 0x4E, 0x53, 0x54, 0x00, 0x46, 0x4E, 0x54, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x10,
+0x41, 0x74, 0x6C, 0x61, 0x6E, 0x74, 0x69, 0x63, 0x20, 0x69, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x73,
+
/* America/North_Dakota/Center */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x3A, 0x90,
0x9F, 0xBB, 0x07, 0x80, 0xA0, 0x86, 0x1C, 0x90, 0xA1, 0x9A, 0xE9, 0x80, 0xCB, 0x89, 0x0C, 0x90,
@@ -5285,10 +5380,14 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9,
0xB0, 0x01, 0x10, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x14, 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54,
0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x2B, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C,
+0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4E, 0x6F, 0x72, 0x74, 0x68, 0x20, 0x44, 0x61,
+0x6B, 0x6F, 0x74, 0x61, 0x20, 0x2D, 0x20, 0x4F, 0x6C, 0x69, 0x76, 0x65, 0x72, 0x20, 0x43, 0x6F,
+0x75, 0x6E, 0x74, 0x79,
/* America/North_Dakota/New_Salem */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x3A, 0x90,
0x9F, 0xBB, 0x07, 0x80, 0xA0, 0x86, 0x1C, 0x90, 0xA1, 0x9A, 0xE9, 0x80, 0xCB, 0x89, 0x0C, 0x90,
@@ -5341,17 +5440,23 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9,
0xB0, 0x01, 0x10, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x14, 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54,
0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x40, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C,
+0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4E, 0x6F, 0x72, 0x74, 0x68, 0x20, 0x44, 0x61,
+0x6B, 0x6F, 0x74, 0x61, 0x20, 0x2D, 0x20, 0x4D, 0x6F, 0x72, 0x74, 0x6F, 0x6E, 0x20, 0x43, 0x6F,
+0x75, 0x6E, 0x74, 0x79, 0x20, 0x28, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x4D, 0x61, 0x6E,
+0x64, 0x61, 0x6E, 0x20, 0x61, 0x72, 0x65, 0x61, 0x29,
/* America/Panama */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x41, 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, 0x08, 0x8B, 0xF4, 0x61, 0xE8,
0x01, 0xFF, 0xFF, 0xB5, 0x18, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0x43, 0x4D, 0x54,
-0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Pangnirtung */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x29, 0xA3, 0xD5, 0x52, 0x80,
0xCB, 0x88, 0xE2, 0x60, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xED, 0xD0, 0xF7, 0x2F, 0x30, 0x40,
@@ -5399,10 +5504,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x54, 0x00, 0x41, 0x50, 0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x44, 0x44, 0x54, 0x00, 0x41,
0x44, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43,
0x44, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x23, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20,
+0x2D, 0x20, 0x50, 0x61, 0x6E, 0x67, 0x6E, 0x69, 0x72, 0x74, 0x75, 0x6E, 0x67, 0x2C, 0x20, 0x4E,
+0x75, 0x6E, 0x61, 0x76, 0x75, 0x74,
/* America/Paramaribo */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0x91, 0x05, 0x8E, 0xB8,
0xBE, 0x2A, 0x4B, 0xC4, 0xD2, 0x62, 0x2C, 0xB4, 0x0B, 0x11, 0x58, 0xB8, 0x1B, 0xBE, 0x31, 0xB8,
@@ -5410,10 +5518,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x04, 0xFF, 0xFF, 0xCC, 0x4C, 0x00, 0x04, 0xFF, 0xFF, 0xCE, 0xC8, 0x00, 0x08, 0xFF, 0xFF, 0xCE,
0xC8, 0x00, 0x0D, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x50, 0x4D, 0x54,
0x00, 0x4E, 0x45, 0x47, 0x54, 0x00, 0x53, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00,
+0x00, 0x00,
/* America/Phoenix */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 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, 0x0A, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x9E, 0xA6, 0x3A, 0x90,
0x9F, 0xBB, 0x07, 0x80, 0xA0, 0x86, 0x1C, 0x90, 0xA1, 0x9A, 0xE9, 0x80, 0xCB, 0x89, 0x0C, 0x90,
@@ -5421,10 +5530,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFB, 0xE8, 0x58, 0x00, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x01, 0xFF, 0xFF,
0xAB, 0xA0, 0x01, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08,
0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00,
+0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x20, 0x4D, 0x6F,
+0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x53, 0x74, 0x61, 0x6E, 0x64, 0x61, 0x72, 0x64, 0x20,
+0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x41, 0x72, 0x69, 0x7A, 0x6F, 0x6E, 0x61,
/* America/Port-au-Prince */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x48, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0x9C, 0x6E, 0x71, 0xFC,
0x19, 0x1B, 0x46, 0xD0, 0x1A, 0x01, 0xEF, 0x40, 0x1A, 0xF1, 0xEE, 0x50, 0x1B, 0xE1, 0xD1, 0x40,
@@ -5441,12 +5552,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x05, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0xFF, 0xFF, 0xC7,
0xC0, 0x01, 0x05, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0x50, 0x50, 0x4D, 0x54, 0x00, 0x45, 0x44,
0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Porto_Acre */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 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, 0x1D, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x86, 0x90,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x1E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x96, 0xAA, 0x86, 0x90,
0xB8, 0x0F, 0x66, 0x00, 0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xF1, 0x50, 0x50, 0xBA, 0xDE, 0x90, 0x40,
0xDA, 0x38, 0xCA, 0x50, 0xDA, 0xEC, 0x16, 0x50, 0xDC, 0x19, 0xFD, 0xD0, 0xDC, 0xB9, 0x75, 0x40,
0xDD, 0xFB, 0x31, 0x50, 0xDE, 0x9B, 0xFA, 0x40, 0xDF, 0xDD, 0xB6, 0x50, 0xE0, 0x54, 0x4F, 0x40,
@@ -5454,21 +5565,23 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xF8, 0x51, 0x48, 0x50, 0xF8, 0xC7, 0xE1, 0x40, 0xFA, 0x0A, 0xEE, 0xD0, 0xFA, 0xA9, 0x14, 0xC0,
0xFB, 0xEC, 0x22, 0x50, 0xFC, 0x8B, 0x99, 0xC0, 0x1D, 0xC9, 0xAA, 0x50, 0x1E, 0x78, 0xF3, 0xC0,
0x1F, 0xA0, 0x51, 0xD0, 0x20, 0x33, 0xEB, 0xC0, 0x21, 0x81, 0x85, 0x50, 0x22, 0x0B, 0xE4, 0xC0,
+0x48, 0x60, 0x7F, 0x50, 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, 0xC0,
-0x70, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0x4C,
-0x4D, 0x54, 0x00, 0x41, 0x43, 0x53, 0x54, 0x00, 0x41, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00,
+0x02, 0x03, 0xFF, 0xFF, 0xC0, 0x70, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF,
+0xB9, 0xB0, 0x00, 0x09, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x43,
+0x53, 0x54, 0x00, 0x41, 0x43, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Port_of_Spain */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x54, 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, 0x08, 0x93, 0x37, 0x33, 0xAC,
0x01, 0xFF, 0xFF, 0xC6, 0x54, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Porto_Velho */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x52, 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, 0x1D, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x82, 0xE8,
0xB8, 0x0F, 0x57, 0xF0, 0xB8, 0xFD, 0x4E, 0xB0, 0xB9, 0xF1, 0x42, 0x40, 0xBA, 0xDE, 0x82, 0x30,
@@ -5482,18 +5595,20 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xC4,
0x18, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x09, 0x4C,
0x4D, 0x54, 0x00, 0x41, 0x4D, 0x53, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00,
+0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x08, 0x52, 0x6F,
+0x6E, 0x64, 0x6F, 0x6E, 0x69, 0x61,
/* America/Puerto_Rico */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x52, 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, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xCB, 0xF6, 0x32, 0xC0,
0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xED, 0xD0, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00,
0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0x41, 0x53, 0x54,
-0x00, 0x41, 0x50, 0x54, 0x00, 0x41, 0x57, 0x54, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00,
+0x00, 0x41, 0x50, 0x54, 0x00, 0x41, 0x57, 0x54, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Rainy_River */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 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, 0x86, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xB8, 0xA1, 0x80,
0x9F, 0xC0, 0x3F, 0x70, 0xC8, 0xF8, 0x57, 0x60, 0xCB, 0x88, 0xFE, 0x80, 0xD2, 0x23, 0xF4, 0x70,
@@ -5540,10 +5655,14 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00,
0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0,
0x01, 0x0C, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50,
-0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x32, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x54, 0x69,
+0x6D, 0x65, 0x20, 0x2D, 0x20, 0x52, 0x61, 0x69, 0x6E, 0x79, 0x20, 0x52, 0x69, 0x76, 0x65, 0x72,
+0x20, 0x26, 0x20, 0x46, 0x6F, 0x72, 0x74, 0x20, 0x46, 0x72, 0x61, 0x6E, 0x63, 0x65, 0x73, 0x2C,
+0x20, 0x4F, 0x6E, 0x74, 0x61, 0x72, 0x69, 0x6F,
/* America/Rankin_Inlet */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0xE7, 0x8C, 0x6E, 0x00,
0xF7, 0x2F, 0x4C, 0x60, 0xF8, 0x28, 0x77, 0xE0, 0x13, 0x69, 0x56, 0x00, 0x14, 0x59, 0x38, 0xF0,
@@ -5586,10 +5705,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00,
0x09, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0D, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x11, 0x7A, 0x7A, 0x7A,
0x00, 0x43, 0x44, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x45, 0x53,
-0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1E, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20,
+0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x63, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x4E,
+0x75, 0x6E, 0x61, 0x76, 0x75, 0x74,
/* America/Recife */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x52, 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, 0x27, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x67, 0xB8,
0xB8, 0x0F, 0x49, 0xE0, 0xB8, 0xFD, 0x40, 0xA0, 0xB9, 0xF1, 0x34, 0x30, 0xBA, 0xDE, 0x74, 0x20,
@@ -5606,10 +5728,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF,
0xFF, 0xDF, 0x48, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00,
0x09, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x52, 0x53, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0A,
+0x50, 0x65, 0x72, 0x6E, 0x61, 0x6D, 0x62, 0x75, 0x63, 0x6F,
/* America/Regina */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x86, 0xFD, 0x93, 0x1C,
0x9E, 0xB8, 0xAF, 0x90, 0x9F, 0xC0, 0x4D, 0x80, 0xB5, 0x65, 0x4F, 0xF0, 0xB6, 0x30, 0x48, 0xE0,
@@ -5632,12 +5755,16 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x08, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xAB,
0xA0, 0x01, 0x10, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x44, 0x54,
0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x43, 0x53, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x35, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C,
+0x20, 0x53, 0x74, 0x61, 0x6E, 0x64, 0x61, 0x72, 0x64, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D,
+0x20, 0x53, 0x61, 0x73, 0x6B, 0x61, 0x74, 0x63, 0x68, 0x65, 0x77, 0x61, 0x6E, 0x20, 0x2D, 0x20,
+0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73,
/* America/Resolute */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0xD5, 0xFB, 0x81, 0x80,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0xD5, 0xFB, 0x81, 0x80,
0xF7, 0x2F, 0x4C, 0x60, 0xF8, 0x28, 0x77, 0xE0, 0x13, 0x69, 0x56, 0x00, 0x14, 0x59, 0x38, 0xF0,
0x15, 0x49, 0x38, 0x00, 0x16, 0x39, 0x1A, 0xF0, 0x17, 0x29, 0x1A, 0x00, 0x18, 0x22, 0x37, 0x70,
0x19, 0x08, 0xFC, 0x00, 0x1A, 0x02, 0x19, 0x70, 0x1A, 0xF2, 0x18, 0x80, 0x1B, 0xE1, 0xFB, 0x70,
@@ -5652,19 +5779,42 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x3A, 0xC6, 0xE0, 0x00, 0x3B, 0xDB, 0xAC, 0xF0, 0x3C, 0xAF, 0xFC, 0x80, 0x3D, 0xBB, 0x8E, 0xF0,
0x3E, 0x8F, 0xDE, 0x80, 0x3F, 0x9B, 0x70, 0xF0, 0x40, 0x6F, 0xC0, 0x80, 0x41, 0x84, 0x8D, 0x70,
0x42, 0x4F, 0xA2, 0x80, 0x43, 0x64, 0x6F, 0x70, 0x44, 0x2F, 0x84, 0x80, 0x45, 0x44, 0x51, 0x70,
-0x02, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
+0x45, 0xF3, 0xA8, 0xF0, 0x47, 0x2D, 0x6D, 0xF0, 0x47, 0xD3, 0x8A, 0xF0, 0x49, 0x0D, 0x4F, 0xF0,
+0x49, 0xB3, 0x6C, 0xF0, 0x4A, 0xED, 0x31, 0xF0, 0x4B, 0x9C, 0x89, 0x70, 0x4C, 0xD6, 0x4E, 0x70,
+0x4D, 0x7C, 0x6B, 0x70, 0x4E, 0xB6, 0x30, 0x70, 0x4F, 0x5C, 0x4D, 0x70, 0x50, 0x96, 0x12, 0x70,
+0x51, 0x3C, 0x2F, 0x70, 0x52, 0x75, 0xF4, 0x70, 0x53, 0x1C, 0x11, 0x70, 0x54, 0x55, 0xD6, 0x70,
+0x54, 0xFB, 0xF3, 0x70, 0x56, 0x35, 0xB8, 0x70, 0x56, 0xE5, 0x0F, 0xF0, 0x58, 0x1E, 0xD4, 0xF0,
+0x58, 0xC4, 0xF1, 0xF0, 0x59, 0xFE, 0xB6, 0xF0, 0x5A, 0xA4, 0xD3, 0xF0, 0x5B, 0xDE, 0x98, 0xF0,
+0x5C, 0x84, 0xB5, 0xF0, 0x5D, 0xBE, 0x7A, 0xF0, 0x5E, 0x64, 0x97, 0xF0, 0x5F, 0x9E, 0x5C, 0xF0,
+0x60, 0x4D, 0xB4, 0x70, 0x61, 0x87, 0x79, 0x70, 0x62, 0x2D, 0x96, 0x70, 0x63, 0x67, 0x5B, 0x70,
+0x64, 0x0D, 0x78, 0x70, 0x65, 0x47, 0x3D, 0x70, 0x65, 0xED, 0x5A, 0x70, 0x67, 0x27, 0x1F, 0x70,
+0x67, 0xCD, 0x3C, 0x70, 0x69, 0x07, 0x01, 0x70, 0x69, 0xAD, 0x1E, 0x70, 0x6A, 0xE6, 0xE3, 0x70,
+0x6B, 0x96, 0x3A, 0xF0, 0x6C, 0xCF, 0xFF, 0xF0, 0x6D, 0x76, 0x1C, 0xF0, 0x6E, 0xAF, 0xE1, 0xF0,
+0x6F, 0x55, 0xFE, 0xF0, 0x70, 0x8F, 0xC3, 0xF0, 0x71, 0x35, 0xE0, 0xF0, 0x72, 0x6F, 0xA5, 0xF0,
+0x73, 0x15, 0xC2, 0xF0, 0x74, 0x4F, 0x87, 0xF0, 0x74, 0xFE, 0xDF, 0x70, 0x76, 0x38, 0xA4, 0x70,
+0x76, 0xDE, 0xC1, 0x70, 0x78, 0x18, 0x86, 0x70, 0x78, 0xBE, 0xA3, 0x70, 0x79, 0xF8, 0x68, 0x70,
+0x7A, 0x9E, 0x85, 0x70, 0x7B, 0xD8, 0x4A, 0x70, 0x7C, 0x7E, 0x67, 0x70, 0x7D, 0xB8, 0x2C, 0x70,
+0x7E, 0x5E, 0x49, 0x70, 0x7F, 0x98, 0x0E, 0x70, 0x02, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
-0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x04, 0x03, 0x02, 0x03,
-0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
-0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x09, 0xFF, 0xFF, 0xB9, 0xB0, 0x01,
-0x0D, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x11, 0x7A, 0x7A, 0x7A, 0x00, 0x43, 0x44, 0x44, 0x54, 0x00,
-0x43, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
+0x02, 0x03, 0x02, 0x03, 0x04, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00,
+0x09, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0D, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x11, 0xFF, 0xFF, 0xB9,
+0xB0, 0x00, 0x0D, 0x7A, 0x7A, 0x7A, 0x00, 0x43, 0x44, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00,
+0x43, 0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x29,
+0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x53, 0x74, 0x61, 0x6E, 0x64, 0x61, 0x72, 0x64,
+0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x52, 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x65,
+0x2C, 0x20, 0x4E, 0x75, 0x6E, 0x61, 0x76, 0x75, 0x74,
/* America/Rio_Branco */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 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, 0x1D, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x86, 0x90,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x52, 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, 0x1E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x96, 0xAA, 0x86, 0x90,
0xB8, 0x0F, 0x66, 0x00, 0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xF1, 0x50, 0x50, 0xBA, 0xDE, 0x90, 0x40,
0xDA, 0x38, 0xCA, 0x50, 0xDA, 0xEC, 0x16, 0x50, 0xDC, 0x19, 0xFD, 0xD0, 0xDC, 0xB9, 0x75, 0x40,
0xDD, 0xFB, 0x31, 0x50, 0xDE, 0x9B, 0xFA, 0x40, 0xDF, 0xDD, 0xB6, 0x50, 0xE0, 0x54, 0x4F, 0x40,
@@ -5672,14 +5822,16 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xF8, 0x51, 0x48, 0x50, 0xF8, 0xC7, 0xE1, 0x40, 0xFA, 0x0A, 0xEE, 0xD0, 0xFA, 0xA9, 0x14, 0xC0,
0xFB, 0xEC, 0x22, 0x50, 0xFC, 0x8B, 0x99, 0xC0, 0x1D, 0xC9, 0xAA, 0x50, 0x1E, 0x78, 0xF3, 0xC0,
0x1F, 0xA0, 0x51, 0xD0, 0x20, 0x33, 0xEB, 0xC0, 0x21, 0x81, 0x85, 0x50, 0x22, 0x0B, 0xE4, 0xC0,
+0x48, 0x60, 0x7F, 0x50, 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, 0xC0,
-0x70, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0x4C,
-0x4D, 0x54, 0x00, 0x41, 0x43, 0x53, 0x54, 0x00, 0x41, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00,
+0x02, 0x03, 0xFF, 0xFF, 0xC0, 0x70, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF,
+0xB9, 0xB0, 0x00, 0x09, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x43,
+0x53, 0x54, 0x00, 0x41, 0x43, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x04, 0x41,
+0x63, 0x72, 0x65,
/* America/Rosario */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30,
0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30,
@@ -5696,21 +5848,21 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30,
0x27, 0xD0, 0x58, 0xA0, 0x29, 0x00, 0xFF, 0x40, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30,
0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x47, 0x77, 0x09, 0xB0,
-0x47, 0xDC, 0x7F, 0x20, 0x48, 0xE8, 0x2D, 0xB0, 0x49, 0xBC, 0x61, 0x20, 0x4A, 0xC8, 0x0F, 0xB0,
-0x4B, 0xA5, 0x7D, 0xA0, 0x4C, 0xA7, 0xF1, 0xB0, 0x4D, 0x85, 0x5F, 0xA0, 0x4E, 0x87, 0xD3, 0xB0,
-0x4F, 0x65, 0x41, 0xA0, 0x50, 0x70, 0xF0, 0x30, 0x51, 0x45, 0x23, 0xA0, 0x52, 0x50, 0xD2, 0x30,
-0x53, 0x25, 0x05, 0xA0, 0x54, 0x30, 0xB4, 0x30, 0x55, 0x04, 0xE7, 0xA0, 0x56, 0x10, 0x96, 0x30,
-0x56, 0xEE, 0x04, 0x20, 0x57, 0xF0, 0x78, 0x30, 0x58, 0xCD, 0xE6, 0x20, 0x59, 0xD0, 0x5A, 0x30,
-0x5A, 0xAD, 0xC8, 0x20, 0x5B, 0xB9, 0x76, 0xB0, 0x5C, 0x8D, 0xAA, 0x20, 0x5D, 0x99, 0x58, 0xB0,
-0x5E, 0x6D, 0x8C, 0x20, 0x5F, 0x79, 0x3A, 0xB0, 0x60, 0x56, 0xA8, 0xA0, 0x61, 0x59, 0x1C, 0xB0,
-0x62, 0x36, 0x8A, 0xA0, 0x63, 0x38, 0xFE, 0xB0, 0x64, 0x16, 0x6C, 0xA0, 0x65, 0x18, 0xE0, 0xB0,
-0x65, 0xF6, 0x4E, 0xA0, 0x67, 0x01, 0xFD, 0x30, 0x67, 0xD6, 0x30, 0xA0, 0x68, 0xE1, 0xDF, 0x30,
-0x69, 0xB6, 0x12, 0xA0, 0x6A, 0xC1, 0xC1, 0x30, 0x6B, 0x9F, 0x2F, 0x20, 0x6C, 0xA1, 0xA3, 0x30,
-0x6D, 0x7F, 0x11, 0x20, 0x6E, 0x81, 0x85, 0x30, 0x6F, 0x5E, 0xF3, 0x20, 0x70, 0x6A, 0xA1, 0xB0,
-0x71, 0x3E, 0xD5, 0x20, 0x72, 0x4A, 0x83, 0xB0, 0x73, 0x1E, 0xB7, 0x20, 0x74, 0x2A, 0x65, 0xB0,
-0x75, 0x07, 0xD3, 0xA0, 0x76, 0x0A, 0x47, 0xB0, 0x76, 0xE7, 0xB5, 0xA0, 0x77, 0xEA, 0x29, 0xB0,
-0x78, 0xC7, 0x97, 0xA0, 0x79, 0xCA, 0x0B, 0xB0, 0x7A, 0xA7, 0x79, 0xA0, 0x7B, 0xB3, 0x28, 0x30,
-0x7C, 0x87, 0x5B, 0xA0, 0x7D, 0x93, 0x0A, 0x30, 0x7E, 0x67, 0x3D, 0xA0, 0x7F, 0x72, 0xEC, 0x30,
+0x47, 0xDC, 0x7F, 0x20, 0x48, 0xFA, 0xA2, 0xB0, 0x49, 0xBC, 0x61, 0x20, 0x4A, 0xDA, 0x84, 0xB0,
+0x4B, 0xA5, 0x7D, 0xA0, 0x4C, 0xBA, 0x66, 0xB0, 0x4D, 0x85, 0x5F, 0xA0, 0x4E, 0x9A, 0x48, 0xB0,
+0x4F, 0x65, 0x41, 0xA0, 0x50, 0x83, 0x65, 0x30, 0x51, 0x45, 0x23, 0xA0, 0x52, 0x63, 0x47, 0x30,
+0x53, 0x25, 0x05, 0xA0, 0x54, 0x43, 0x29, 0x30, 0x55, 0x04, 0xE7, 0xA0, 0x56, 0x23, 0x0B, 0x30,
+0x56, 0xEE, 0x04, 0x20, 0x58, 0x02, 0xED, 0x30, 0x58, 0xCD, 0xE6, 0x20, 0x59, 0xE2, 0xCF, 0x30,
+0x5A, 0xAD, 0xC8, 0x20, 0x5B, 0xCB, 0xEB, 0xB0, 0x5C, 0x8D, 0xAA, 0x20, 0x5D, 0xAB, 0xCD, 0xB0,
+0x5E, 0x6D, 0x8C, 0x20, 0x5F, 0x8B, 0xAF, 0xB0, 0x60, 0x56, 0xA8, 0xA0, 0x61, 0x6B, 0x91, 0xB0,
+0x62, 0x36, 0x8A, 0xA0, 0x63, 0x4B, 0x73, 0xB0, 0x64, 0x16, 0x6C, 0xA0, 0x65, 0x2B, 0x55, 0xB0,
+0x65, 0xF6, 0x4E, 0xA0, 0x67, 0x14, 0x72, 0x30, 0x67, 0xD6, 0x30, 0xA0, 0x68, 0xF4, 0x54, 0x30,
+0x69, 0xB6, 0x12, 0xA0, 0x6A, 0xD4, 0x36, 0x30, 0x6B, 0x9F, 0x2F, 0x20, 0x6C, 0xB4, 0x18, 0x30,
+0x6D, 0x7F, 0x11, 0x20, 0x6E, 0x93, 0xFA, 0x30, 0x6F, 0x5E, 0xF3, 0x20, 0x70, 0x7D, 0x16, 0xB0,
+0x71, 0x3E, 0xD5, 0x20, 0x72, 0x5C, 0xF8, 0xB0, 0x73, 0x1E, 0xB7, 0x20, 0x74, 0x3C, 0xDA, 0xB0,
+0x75, 0x07, 0xD3, 0xA0, 0x76, 0x1C, 0xBC, 0xB0, 0x76, 0xE7, 0xB5, 0xA0, 0x77, 0xFC, 0x9E, 0xB0,
+0x78, 0xC7, 0x97, 0xA0, 0x79, 0xDC, 0x80, 0xB0, 0x7A, 0xA7, 0x79, 0xA0, 0x7B, 0xC5, 0x9D, 0x30,
+0x7C, 0x87, 0x5B, 0xA0, 0x7D, 0xA5, 0x7F, 0x30, 0x7E, 0x67, 0x3D, 0xA0, 0x7F, 0x85, 0x61, 0x30,
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, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
@@ -5722,10 +5874,30 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5,
0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54,
0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x00,
+
+/* America/Santarem */
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x52, 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, 0x1E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x96, 0xAA, 0x7A, 0x48,
+0xB8, 0x0F, 0x57, 0xF0, 0xB8, 0xFD, 0x4E, 0xB0, 0xB9, 0xF1, 0x42, 0x40, 0xBA, 0xDE, 0x82, 0x30,
+0xDA, 0x38, 0xBC, 0x40, 0xDA, 0xEC, 0x08, 0x40, 0xDC, 0x19, 0xEF, 0xC0, 0xDC, 0xB9, 0x67, 0x30,
+0xDD, 0xFB, 0x23, 0x40, 0xDE, 0x9B, 0xEC, 0x30, 0xDF, 0xDD, 0xA8, 0x40, 0xE0, 0x54, 0x41, 0x30,
+0xF4, 0x98, 0x0D, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0xC0, 0x72, 0x40, 0xF7, 0x0E, 0x2C, 0xB0,
+0xF8, 0x51, 0x3A, 0x40, 0xF8, 0xC7, 0xD3, 0x30, 0xFA, 0x0A, 0xE0, 0xC0, 0xFA, 0xA9, 0x06, 0xB0,
+0xFB, 0xEC, 0x14, 0x40, 0xFC, 0x8B, 0x8B, 0xB0, 0x1D, 0xC9, 0x9C, 0x40, 0x1E, 0x78, 0xE5, 0xB0,
+0x1F, 0xA0, 0x43, 0xC0, 0x20, 0x33, 0xDD, 0xB0, 0x21, 0x81, 0x77, 0x40, 0x22, 0x0B, 0xD6, 0xB0,
+0x48, 0x60, 0x71, 0x40, 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, 0x03, 0xFF, 0xFF, 0xCC, 0xB8, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF,
+0xC7, 0xC0, 0x00, 0x09, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x4D,
+0x53, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x06, 0x57,
+0x20, 0x50, 0x61, 0x72, 0x61,
/* America/Santiago */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x9E, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0D, 0x8F, 0x24, 0x69, 0xC6,
0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x71, 0x05, 0x46, 0xA1, 0x00, 0x71, 0xC0, 0xB0, 0x5E, 0x77, 0xC6,
@@ -5781,10 +5953,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04,
0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0,
0x00, 0x04, 0x53, 0x4D, 0x54, 0x00, 0x43, 0x4C, 0x54, 0x00, 0x43, 0x4C, 0x53, 0x54, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
+0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0E, 0x6D, 0x6F, 0x73, 0x74, 0x20,
+0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73,
/* America/Santo_Domingo */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x44, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x16, 0xBA, 0xDF, 0x42, 0x60,
0xFA, 0x08, 0x4B, 0xD0, 0xFA, 0xA7, 0xC3, 0x40, 0xFF, 0xA7, 0xF1, 0xD0, 0x00, 0x43, 0x7B, 0xC8,
@@ -5795,10 +5969,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x05, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0xFF, 0xFF,
0xC0, 0xB8, 0x01, 0x0D, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x12, 0x53, 0x44, 0x4D, 0x54, 0x00, 0x45,
0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x48, 0x44, 0x54, 0x00, 0x41, 0x53, 0x54, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Sao_Paulo */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x52, 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, 0x80, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x72, 0xB4,
0xB8, 0x0F, 0x49, 0xE0, 0xB8, 0xFD, 0x40, 0xA0, 0xB9, 0xF1, 0x34, 0x30, 0xBA, 0xDE, 0x74, 0x20,
@@ -5818,21 +5993,21 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x3D, 0xC4, 0x91, 0x30, 0x3E, 0x4E, 0xF0, 0xA0, 0x3F, 0x91, 0xFE, 0x30, 0x40, 0x2E, 0xD2, 0xA0,
0x41, 0x86, 0xF8, 0x30, 0x42, 0x17, 0xEF, 0x20, 0x43, 0x51, 0xC2, 0x30, 0x43, 0xF7, 0xD1, 0x20,
0x45, 0x4D, 0x53, 0xB0, 0x45, 0xE0, 0xED, 0xA0, 0x47, 0x11, 0x86, 0x30, 0x47, 0xB7, 0x95, 0x20,
-0x48, 0xF1, 0x68, 0x30, 0x49, 0x97, 0x77, 0x20, 0x4A, 0xD1, 0x4A, 0x30, 0x4B, 0x80, 0x93, 0xA0,
-0x4C, 0xB1, 0x2C, 0x30, 0x4D, 0x60, 0x75, 0xA0, 0x4E, 0x91, 0x0E, 0x30, 0x4F, 0x40, 0x57, 0xA0,
-0x50, 0x7A, 0x2A, 0xB0, 0x51, 0x20, 0x39, 0xA0, 0x52, 0x5A, 0x0C, 0xB0, 0x53, 0x00, 0x1B, 0xA0,
-0x54, 0x39, 0xEE, 0xB0, 0x54, 0xDF, 0xFD, 0xA0, 0x56, 0x19, 0xD0, 0xB0, 0x56, 0xC9, 0x1A, 0x20,
-0x57, 0xF9, 0xB2, 0xB0, 0x58, 0xA8, 0xFC, 0x20, 0x59, 0xD9, 0x94, 0xB0, 0x5A, 0x88, 0xDE, 0x20,
-0x5B, 0xC2, 0xB1, 0x30, 0x5C, 0x68, 0xC0, 0x20, 0x5D, 0xA2, 0x93, 0x30, 0x5E, 0x48, 0xA2, 0x20,
-0x5F, 0x82, 0x75, 0x30, 0x60, 0x31, 0xBE, 0xA0, 0x61, 0x62, 0x57, 0x30, 0x62, 0x11, 0xA0, 0xA0,
-0x63, 0x42, 0x39, 0x30, 0x63, 0xF1, 0x82, 0xA0, 0x65, 0x22, 0x1B, 0x30, 0x65, 0xD1, 0x64, 0xA0,
-0x67, 0x0B, 0x37, 0xB0, 0x67, 0xB1, 0x46, 0xA0, 0x68, 0xEB, 0x19, 0xB0, 0x69, 0x91, 0x28, 0xA0,
-0x6A, 0xCA, 0xFB, 0xB0, 0x6B, 0x7A, 0x45, 0x20, 0x6C, 0xAA, 0xDD, 0xB0, 0x6D, 0x5A, 0x27, 0x20,
-0x6E, 0x8A, 0xBF, 0xB0, 0x6F, 0x3A, 0x09, 0x20, 0x70, 0x73, 0xDC, 0x30, 0x71, 0x19, 0xEB, 0x20,
-0x72, 0x53, 0xBE, 0x30, 0x72, 0xF9, 0xCD, 0x20, 0x74, 0x33, 0xA0, 0x30, 0x74, 0xD9, 0xAF, 0x20,
-0x76, 0x13, 0x82, 0x30, 0x76, 0xC2, 0xCB, 0xA0, 0x77, 0xF3, 0x64, 0x30, 0x78, 0xA2, 0xAD, 0xA0,
-0x79, 0xD3, 0x46, 0x30, 0x7A, 0x82, 0x8F, 0xA0, 0x7B, 0xBC, 0x62, 0xB0, 0x7C, 0x62, 0x71, 0xA0,
-0x7D, 0x9C, 0x44, 0xB0, 0x7E, 0x42, 0x53, 0xA0, 0x7F, 0x7C, 0x26, 0xB0, 0x02, 0x01, 0x02, 0x01,
+0x48, 0xFA, 0xA2, 0xB0, 0x49, 0x97, 0x77, 0x20, 0x4A, 0xDA, 0x84, 0xB0, 0x4B, 0x80, 0x93, 0xA0,
+0x4C, 0xBA, 0x66, 0xB0, 0x4D, 0x60, 0x75, 0xA0, 0x4E, 0x9A, 0x48, 0xB0, 0x4F, 0x49, 0x92, 0x20,
+0x50, 0x83, 0x65, 0x30, 0x51, 0x20, 0x39, 0xA0, 0x52, 0x63, 0x47, 0x30, 0x53, 0x00, 0x1B, 0xA0,
+0x54, 0x43, 0x29, 0x30, 0x54, 0xE9, 0x38, 0x20, 0x56, 0x23, 0x0B, 0x30, 0x56, 0xC9, 0x1A, 0x20,
+0x58, 0x02, 0xED, 0x30, 0x58, 0xA8, 0xFC, 0x20, 0x59, 0xE2, 0xCF, 0x30, 0x5A, 0x88, 0xDE, 0x20,
+0x5B, 0xCB, 0xEB, 0xB0, 0x5C, 0x68, 0xC0, 0x20, 0x5D, 0xAB, 0xCD, 0xB0, 0x5E, 0x48, 0xA2, 0x20,
+0x5F, 0x8B, 0xAF, 0xB0, 0x60, 0x31, 0xBE, 0xA0, 0x61, 0x6B, 0x91, 0xB0, 0x62, 0x11, 0xA0, 0xA0,
+0x63, 0x4B, 0x73, 0xB0, 0x63, 0xFA, 0xBD, 0x20, 0x65, 0x2B, 0x55, 0xB0, 0x65, 0xD1, 0x64, 0xA0,
+0x67, 0x14, 0x72, 0x30, 0x67, 0xB1, 0x46, 0xA0, 0x68, 0xF4, 0x54, 0x30, 0x69, 0x9A, 0x63, 0x20,
+0x6A, 0xD4, 0x36, 0x30, 0x6B, 0x7A, 0x45, 0x20, 0x6C, 0xB4, 0x18, 0x30, 0x6D, 0x5A, 0x27, 0x20,
+0x6E, 0x93, 0xFA, 0x30, 0x6F, 0x3A, 0x09, 0x20, 0x70, 0x7D, 0x16, 0xB0, 0x71, 0x19, 0xEB, 0x20,
+0x72, 0x5C, 0xF8, 0xB0, 0x72, 0xF9, 0xCD, 0x20, 0x74, 0x3C, 0xDA, 0xB0, 0x74, 0xD9, 0xAF, 0x20,
+0x76, 0x1C, 0xBC, 0xB0, 0x76, 0xC2, 0xCB, 0xA0, 0x77, 0xFC, 0x9E, 0xB0, 0x78, 0xAB, 0xE8, 0x20,
+0x79, 0xDC, 0x80, 0xB0, 0x7A, 0x82, 0x8F, 0xA0, 0x7B, 0xC5, 0x9D, 0x30, 0x7C, 0x62, 0x71, 0xA0,
+0x7D, 0xA5, 0x7F, 0x30, 0x7E, 0x4B, 0x8E, 0x20, 0x7F, 0x85, 0x61, 0x30, 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,
@@ -5843,10 +6018,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xD4, 0x4C,
0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x09, 0x4C, 0x4D,
0x54, 0x00, 0x42, 0x52, 0x53, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00,
+0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x32, 0x53, 0x20, 0x26,
+0x20, 0x53, 0x45, 0x20, 0x42, 0x72, 0x61, 0x7A, 0x69, 0x6C, 0x20, 0x28, 0x47, 0x4F, 0x2C, 0x20,
+0x44, 0x46, 0x2C, 0x20, 0x4D, 0x47, 0x2C, 0x20, 0x45, 0x53, 0x2C, 0x20, 0x52, 0x4A, 0x2C, 0x20,
+0x53, 0x50, 0x2C, 0x20, 0x50, 0x52, 0x2C, 0x20, 0x53, 0x43, 0x2C, 0x20, 0x52, 0x53, 0x29,
/* America/Scoresbysund */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x16, 0x9B, 0x80, 0x4C, 0x18,
0x13, 0x4D, 0x6E, 0x40, 0x14, 0x34, 0x24, 0xC0, 0x15, 0x23, 0xF9, 0xA0, 0x16, 0x13, 0xDC, 0x90,
@@ -5890,10 +6068,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xF0, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x4C,
0x4D, 0x54, 0x00, 0x43, 0x47, 0x54, 0x00, 0x43, 0x47, 0x53, 0x54, 0x00, 0x45, 0x47, 0x54, 0x00,
0x45, 0x47, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x01, 0x01, 0x00,
+0x01, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1F, 0x53,
+0x63, 0x6F, 0x72, 0x65, 0x73, 0x62, 0x79, 0x73, 0x75, 0x6E, 0x64, 0x20, 0x2F, 0x20, 0x49, 0x74,
+0x74, 0x6F, 0x71, 0x71, 0x6F, 0x72, 0x74, 0x6F, 0x6F, 0x72, 0x6D, 0x69, 0x69, 0x74,
/* America/Shiprock */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 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, 0x9D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x3A, 0x90,
0x9F, 0xBB, 0x07, 0x80, 0xA0, 0x86, 0x1C, 0x90, 0xA1, 0x9A, 0xE9, 0x80, 0xA2, 0x65, 0xFE, 0x90,
@@ -5947,17 +6127,20 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xAB,
0xA0, 0x01, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, 0xFF,
0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54,
-0x00, 0x4D, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+0x00, 0x4D, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x16, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69,
+0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4E, 0x61, 0x76, 0x61, 0x6A, 0x6F,
/* America/St_Barthelemy */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x4C, 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, 0x08, 0x91, 0xD5, 0xE1, 0xB0,
0x01, 0xFF, 0xFF, 0xC6, 0x50, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* America/St_Johns */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xEE, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x15, 0x9C, 0xCF, 0x62, 0x0C,
0x9D, 0xA4, 0xE6, 0xFC, 0x9E, 0xB8, 0x7E, 0x8C, 0x9F, 0xC0, 0x1C, 0x7C, 0xA0, 0xB6, 0x88, 0xDC,
@@ -6038,38 +6221,46 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xDC, 0xD8, 0x01, 0x00, 0xFF, 0xFF, 0xCE, 0xC8, 0x00, 0x04, 0xFF, 0xFF, 0xDC, 0xD8, 0x01, 0x08,
0xFF, 0xFF, 0xDC, 0xD8, 0x01, 0x0C, 0xFF, 0xFF, 0xEA, 0xE8, 0x01, 0x10, 0x4E, 0x44, 0x54, 0x00,
0x4E, 0x53, 0x54, 0x00, 0x4E, 0x50, 0x54, 0x00, 0x4E, 0x57, 0x54, 0x00, 0x4E, 0x44, 0x44, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x28, 0x4E, 0x65, 0x77, 0x66, 0x6F,
+0x75, 0x6E, 0x64, 0x6C, 0x61, 0x6E, 0x64, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x2C, 0x20, 0x69, 0x6E,
+0x63, 0x6C, 0x75, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x53, 0x45, 0x20, 0x4C, 0x61, 0x62, 0x72, 0x61,
+0x64, 0x6F, 0x72,
/* America/St_Kitts */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4B, 0x4E, 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, 0x08, 0x93, 0x37, 0x34, 0xCC,
0x01, 0xFF, 0xFF, 0xC5, 0x34, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* America/St_Lucia */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4C, 0x43, 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, 0x08, 0x92, 0xE6, 0xC7, 0xB0,
0x01, 0xFF, 0xFF, 0xC6, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x43, 0x4D, 0x54,
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* America/St_Thomas */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x56, 0x49, 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, 0x08, 0x91, 0xF4, 0x37, 0x60,
0x01, 0xFF, 0xFF, 0xC3, 0x20, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* America/St_Vincent */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x56, 0x43, 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, 0x08, 0x92, 0xE6, 0xC7, 0xE8,
0x01, 0xFF, 0xFF, 0xC6, 0x98, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4B, 0x4D, 0x54,
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Swift_Current */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x86, 0xFD, 0x96, 0x18,
0x9E, 0xB8, 0xAF, 0x90, 0x9F, 0xC0, 0x4D, 0x80, 0xCB, 0x89, 0x0C, 0x90, 0xD2, 0x23, 0xF4, 0x70,
@@ -6083,20 +6274,24 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x08, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x10, 0xFF, 0xFF, 0xAB,
0xA0, 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D,
0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x2E, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x53, 0x74, 0x61, 0x6E, 0x64,
+0x61, 0x72, 0x64, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x53, 0x61, 0x73, 0x6B, 0x61,
+0x74, 0x63, 0x68, 0x65, 0x77, 0x61, 0x6E, 0x20, 0x2D, 0x20, 0x6D, 0x69, 0x64, 0x77, 0x65, 0x73,
+0x74,
/* America/Tegucigalpa */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x48, 0x4E, 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, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xA4, 0x4C, 0x4B, 0x44,
0x20, 0x9A, 0xDC, 0xE0, 0x21, 0x5C, 0x9B, 0x50, 0x22, 0x7A, 0xBE, 0xE0, 0x23, 0x3C, 0x7D, 0x50,
0x44, 0x5D, 0x8C, 0xE0, 0x44, 0xD6, 0xC8, 0xD0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF,
0xFF, 0xAE, 0x3C, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00,
0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Thule */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x4C, 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, 0x5F, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x9B, 0x80, 0x77, 0xFC,
0x27, 0xF5, 0x7A, 0xE0, 0x28, 0xE5, 0x5D, 0xD0, 0x29, 0xD5, 0x5C, 0xE0, 0x2A, 0xC5, 0x3F, 0xD0,
@@ -6130,10 +6325,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
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, 0xBF, 0x84, 0x00, 0x00, 0xFF, 0xFF, 0xD5,
0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x44, 0x54,
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x10, 0x54, 0x68, 0x75, 0x6C, 0x65, 0x20, 0x2F, 0x20, 0x50,
+0x69, 0x74, 0x75, 0x66, 0x66, 0x69, 0x6B,
/* America/Thunder_Bay */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x8F, 0x24, 0x7B, 0xE0,
0xCB, 0x88, 0xF0, 0x70, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xFB, 0xE0, 0x00, 0x97, 0xFE, 0xF0,
@@ -6182,10 +6379,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xAB, 0xA0, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08,
0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x10, 0x43, 0x53, 0x54, 0x00,
0x45, 0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x23, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69,
+0x6D, 0x65, 0x20, 0x2D, 0x20, 0x54, 0x68, 0x75, 0x6E, 0x64, 0x65, 0x72, 0x20, 0x42, 0x61, 0x79,
+0x2C, 0x20, 0x4F, 0x6E, 0x74, 0x61, 0x72, 0x69, 0x6F,
/* America/Tijuana */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0xA5, 0xB6, 0xF6, 0x80,
0xA9, 0x79, 0x4F, 0x70, 0xAF, 0xF2, 0x7C, 0xF0, 0xB6, 0x66, 0x64, 0x70, 0xB7, 0x1B, 0x10, 0x00,
@@ -6238,10 +6438,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x04, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x0C, 0xFF, 0xFF, 0x9D,
0x90, 0x01, 0x10, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54,
0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0C, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63,
+0x20, 0x54, 0x69, 0x6D, 0x65,
/* America/Toronto */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 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, 0xE8, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xB8, 0x93, 0x70,
0x9F, 0xC0, 0x31, 0x60, 0xA0, 0x87, 0x2E, 0xC8, 0xA1, 0x9A, 0xB1, 0x40, 0xA2, 0x94, 0x06, 0xF0,
@@ -6319,17 +6521,21 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04,
0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0x45, 0x44, 0x54, 0x00,
0x45, 0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x00, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x27,
+0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4F,
+0x6E, 0x74, 0x61, 0x72, 0x69, 0x6F, 0x20, 0x2D, 0x20, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F,
+0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73,
/* America/Tortola */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x56, 0x47, 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, 0x08, 0x91, 0xF4, 0x37, 0x14,
0x01, 0xFF, 0xFF, 0xC3, 0x6C, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Vancouver */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 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, 0xBD, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xB8, 0xBD, 0xA0,
0x9F, 0xC0, 0x5B, 0x90, 0xCB, 0x89, 0x1A, 0xA0, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x26, 0x10,
@@ -6393,17 +6599,21 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0x9D,
0x90, 0x01, 0x00, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x08, 0xFF,
0xFF, 0x9D, 0x90, 0x01, 0x0C, 0x50, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x57, 0x54,
-0x00, 0x50, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+0x00, 0x50, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x24, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63,
+0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x77, 0x65, 0x73, 0x74, 0x20, 0x42, 0x72, 0x69,
+0x74, 0x69, 0x73, 0x68, 0x20, 0x43, 0x6F, 0x6C, 0x75, 0x6D, 0x62, 0x69, 0x61,
/* America/Virgin */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x08, 0x91, 0xF4, 0x37, 0x60,
0x01, 0xFF, 0xFF, 0xC3, 0x20, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* America/Whitehorse */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1D, 0x9E, 0xB8, 0xCB, 0xB0,
0x9F, 0xBB, 0x23, 0xA0, 0xA0, 0xD0, 0x0C, 0xB0, 0xA1, 0xA2, 0xD2, 0x80, 0xCB, 0x89, 0x28, 0xB0,
@@ -6450,10 +6660,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x15, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x19, 0x59, 0x44, 0x54, 0x00,
0x59, 0x53, 0x54, 0x00, 0x59, 0x57, 0x54, 0x00, 0x59, 0x50, 0x54, 0x00, 0x59, 0x44, 0x44, 0x54,
0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x1A, 0x50, 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20,
+0x2D, 0x20, 0x73, 0x6F, 0x75, 0x74, 0x68, 0x20, 0x59, 0x75, 0x6B, 0x6F, 0x6E,
/* America/Winnipeg */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xBA, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x10, 0x9B, 0x01, 0xFB, 0xE0,
0x9B, 0xC3, 0xBA, 0x50, 0x9E, 0xB8, 0xA1, 0x80, 0x9F, 0xC0, 0x3F, 0x70, 0xC2, 0xA0, 0x3B, 0x80,
@@ -6517,10 +6729,14 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08,
0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0,
0x00, 0x04, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50,
-0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x89,
+0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x26, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61,
+0x6C, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x4D, 0x61, 0x6E, 0x69, 0x74, 0x6F, 0x62,
+0x61, 0x20, 0x26, 0x20, 0x77, 0x65, 0x73, 0x74, 0x20, 0x4F, 0x6E, 0x74, 0x61, 0x72, 0x69, 0x6F,
+
/* America/Yakutat */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1A, 0xCB, 0x89, 0x28, 0xB0,
0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x34, 0x20, 0xFE, 0xB8, 0x55, 0x30, 0xFF, 0xA8, 0x38, 0x20,
@@ -6571,10 +6787,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x8F, 0x80, 0x01, 0x08, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x0C, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x10,
0xFF, 0xFF, 0x81, 0x70, 0x00, 0x15, 0x59, 0x53, 0x54, 0x00, 0x59, 0x57, 0x54, 0x00, 0x59, 0x50,
0x54, 0x00, 0x59, 0x44, 0x54, 0x00, 0x41, 0x4B, 0x44, 0x54, 0x00, 0x41, 0x4B, 0x53, 0x54, 0x00,
-0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x23, 0x41, 0x6C, 0x61, 0x73, 0x6B, 0x61, 0x20, 0x54,
+0x69, 0x6D, 0x65, 0x20, 0x2D, 0x20, 0x41, 0x6C, 0x61, 0x73, 0x6B, 0x61, 0x20, 0x70, 0x61, 0x6E,
+0x68, 0x61, 0x6E, 0x64, 0x6C, 0x65, 0x20, 0x6E, 0x65, 0x63, 0x6B,
/* America/Yellowknife */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x19, 0xBE, 0x2A, 0x18, 0x00,
0xCB, 0x89, 0x0C, 0x90, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x18, 0x00, 0xF7, 0x2F, 0x5A, 0x70,
@@ -6619,41 +6838,55 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x10, 0xFF, 0xFF, 0xAB, 0xA0,
0x01, 0x15, 0x7A, 0x7A, 0x7A, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x4D, 0x53,
0x54, 0x00, 0x4D, 0x44, 0x44, 0x54, 0x00, 0x4D, 0x44, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x2D, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x54, 0x69, 0x6D, 0x65,
+0x20, 0x2D, 0x20, 0x63, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x4E, 0x6F, 0x72, 0x74, 0x68,
+0x77, 0x65, 0x73, 0x74, 0x20, 0x54, 0x65, 0x72, 0x72, 0x69, 0x74, 0x6F, 0x72, 0x69, 0x65, 0x73,
+
/* Antarctica/Casey */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x51, 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, 0x08, 0xFE, 0x1E, 0xCC, 0x80,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x7A, 0x7A, 0x7A,
-0x00, 0x57, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x57, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x1F, 0x43, 0x61, 0x73, 0x65, 0x79, 0x20, 0x53, 0x74, 0x61, 0x74, 0x69,
+0x6F, 0x6E, 0x2C, 0x20, 0x42, 0x61, 0x69, 0x6C, 0x65, 0x79, 0x20, 0x50, 0x65, 0x6E, 0x69, 0x6E,
+0x73, 0x75, 0x6C, 0x61,
/* Antarctica/Davis */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x51, 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, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xE7, 0x9C, 0x40, 0x00,
0xF6, 0x47, 0xDF, 0x10, 0xFE, 0x47, 0xAB, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x7A, 0x7A, 0x7A, 0x00, 0x44, 0x41, 0x56, 0x54, 0x00,
-0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1D,
+0x44, 0x61, 0x76, 0x69, 0x73, 0x20, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x56,
+0x65, 0x73, 0x74, 0x66, 0x6F, 0x6C, 0x64, 0x20, 0x48, 0x69, 0x6C, 0x6C, 0x73,
/* Antarctica/DumontDUrville */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x51, 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, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0xD4, 0xBC, 0x76, 0x80,
0xDE, 0x34, 0x60, 0x60, 0xE7, 0x3C, 0x02, 0x80, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x04, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x08, 0x7A, 0x7A, 0x7A,
0x00, 0x50, 0x4D, 0x54, 0x00, 0x44, 0x44, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x26, 0x44, 0x75, 0x6D, 0x6F,
+0x6E, 0x74, 0x2D, 0x64, 0x27, 0x55, 0x72, 0x76, 0x69, 0x6C, 0x6C, 0x65, 0x20, 0x53, 0x74, 0x61,
+0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x54, 0x65, 0x72, 0x72, 0x65, 0x20, 0x41, 0x64, 0x65, 0x6C,
+0x69, 0x65,
/* Antarctica/Mawson */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x51, 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, 0x09, 0xE2, 0x20, 0x32, 0x80,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x7A, 0x7A, 0x7A,
-0x00, 0x4D, 0x41, 0x57, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x4D, 0x41, 0x57, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x19, 0x4D, 0x61, 0x77, 0x73, 0x6F, 0x6E, 0x20, 0x53, 0x74, 0x61,
+0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x48, 0x6F, 0x6C, 0x6D, 0x65, 0x20, 0x42, 0x61, 0x79,
/* Antarctica/McMurdo */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x51, 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, 0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0xE5, 0xA9, 0xE9, 0x00,
0x09, 0x18, 0xFD, 0xE0, 0x09, 0xAC, 0xA5, 0xE0, 0x0A, 0xEF, 0xA5, 0x60, 0x0B, 0x9E, 0xFC, 0xE0,
@@ -6698,10 +6931,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xB6, 0xD0, 0x01, 0x04, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x09, 0x00, 0x00,
0xA8, 0xC0, 0x00, 0x09, 0x7A, 0x7A, 0x7A, 0x00, 0x4E, 0x5A, 0x44, 0x54, 0x00, 0x4E, 0x5A, 0x53,
-0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x1C, 0x4D, 0x63, 0x4D, 0x75, 0x72, 0x64, 0x6F, 0x20, 0x53, 0x74,
+0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x52, 0x6F, 0x73, 0x73, 0x20, 0x49, 0x73, 0x6C, 0x61,
+0x6E, 0x64,
/* Antarctica/Palmer */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0xF6, 0x98, 0xAD, 0x00,
0xF6, 0xE6, 0x9F, 0xB0, 0xF8, 0x13, 0x43, 0xC0, 0xF8, 0xC7, 0xD3, 0x30, 0xF9, 0xF4, 0x77, 0x40,
@@ -6748,17 +6984,22 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x0D, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x12, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x12, 0x7A, 0x7A, 0x7A,
0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x43, 0x4C, 0x53, 0x54, 0x00, 0x43,
0x4C, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x01, 0x01, 0x00,
+0x01, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1D, 0x50,
+0x61, 0x6C, 0x6D, 0x65, 0x72, 0x20, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x41,
+0x6E, 0x76, 0x65, 0x72, 0x73, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64,
/* Antarctica/Rothera */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x51, 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, 0x09, 0x0D, 0x02, 0x2D, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0x7A, 0x7A, 0x7A,
-0x00, 0x52, 0x4F, 0x54, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x52, 0x4F, 0x54, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x20, 0x52, 0x6F, 0x74, 0x68, 0x65, 0x72, 0x61, 0x20, 0x53, 0x74,
+0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x41, 0x64, 0x65, 0x6C, 0x61, 0x69, 0x64, 0x65, 0x20,
+0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64,
/* Antarctica/South_Pole */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x51, 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, 0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0xE5, 0xA9, 0xE9, 0x00,
0x09, 0x18, 0xFD, 0xE0, 0x09, 0xAC, 0xA5, 0xE0, 0x0A, 0xEF, 0xA5, 0x60, 0x0B, 0x9E, 0xFC, 0xE0,
@@ -6803,24 +7044,32 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xB6, 0xD0, 0x01, 0x04, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x09, 0x00, 0x00,
0xA8, 0xC0, 0x00, 0x09, 0x7A, 0x7A, 0x7A, 0x00, 0x4E, 0x5A, 0x44, 0x54, 0x00, 0x4E, 0x5A, 0x53,
-0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x22, 0x41, 0x6D, 0x75, 0x6E, 0x64, 0x73, 0x65, 0x6E, 0x2D, 0x53,
+0x63, 0x6F, 0x74, 0x74, 0x20, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x53, 0x6F,
+0x75, 0x74, 0x68, 0x20, 0x50, 0x6F, 0x6C, 0x65,
/* Antarctica/Syowa */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x51, 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, 0x09, 0xE7, 0xB1, 0x58, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x7A, 0x7A, 0x7A,
-0x00, 0x53, 0x59, 0x4F, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x53, 0x59, 0x4F, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x18, 0x53, 0x79, 0x6F, 0x77, 0x61, 0x20, 0x53, 0x74, 0x61, 0x74,
+0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x45, 0x20, 0x4F, 0x6E, 0x67, 0x75, 0x6C, 0x20, 0x49,
/* Antarctica/Vostok */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x51, 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, 0x09, 0xE9, 0x58, 0x89, 0x80,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x7A, 0x7A, 0x7A,
-0x00, 0x56, 0x4F, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x56, 0x4F, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x1F, 0x56, 0x6F, 0x73, 0x74, 0x6F, 0x6B, 0x20, 0x53, 0x74, 0x61,
+0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x53, 0x20, 0x4D, 0x61, 0x67, 0x6E, 0x65, 0x74, 0x69, 0x63,
+0x20, 0x50, 0x6F, 0x6C, 0x65,
/* Arctic/Longyearbyen */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x27, 0xE3, 0x00,
0x9B, 0xD4, 0x7B, 0x60, 0xC8, 0xB7, 0x4D, 0x60, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90,
@@ -6870,17 +7119,19 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00,
0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00,
0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00,
+0x00, 0x00,
/* Asia/Aden */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x59, 0x45, 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, 0x08, 0xDA, 0x61, 0x38, 0x20,
0x01, 0x00, 0x00, 0x2A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Almaty */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4B, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0F, 0xAA, 0x19, 0x7B, 0xDC,
0xB5, 0xA3, 0xEF, 0x30, 0x15, 0x27, 0x7D, 0xA0, 0x16, 0x18, 0xB2, 0x10, 0x17, 0x08, 0xB1, 0x20,
@@ -6902,10 +7153,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x00, 0x00,
0x54, 0x60, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 0x01, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x4C,
0x4D, 0x54, 0x00, 0x41, 0x4C, 0x4D, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00,
+0x0E, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73,
/* Asia/Amman */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4A, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0xB6, 0xA3, 0xD6, 0xD0,
0x06, 0x72, 0x79, 0xE0, 0x07, 0x0C, 0xAB, 0x50, 0x08, 0x24, 0x37, 0x60, 0x08, 0xED, 0xDE, 0xD0,
@@ -6948,10 +7200,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x21, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00,
0x09, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x4C, 0x4D, 0x54,
0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
-0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
+
/* Asia/Anadyr */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0F, 0xAA, 0x19, 0x1D, 0x9C,
0xB5, 0xA3, 0x8C, 0xC0, 0x15, 0x27, 0x1B, 0x30, 0x16, 0x18, 0x4F, 0xA0, 0x17, 0x08, 0x4E, 0xB0,
@@ -6995,10 +7248,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xD0, 0x01, 0x09, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x04, 0x00, 0x00, 0xB6, 0xD0, 0x01, 0x09, 0x00,
0x00, 0xA8, 0xC0, 0x01, 0x09, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x41,
0x4E, 0x41, 0x54, 0x00, 0x41, 0x4E, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x16, 0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x31,
+0x30, 0x20, 0x2D, 0x20, 0x42, 0x65, 0x72, 0x69, 0x6E, 0x67, 0x20, 0x53, 0x65, 0x61,
/* Asia/Aqtau */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4B, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x1F, 0xAA, 0x19, 0x94, 0xE0,
0xB5, 0xA3, 0xFD, 0x40, 0xF2, 0xD4, 0xAE, 0x30, 0x16, 0x18, 0xCE, 0x30, 0x17, 0x08, 0xB1, 0x20,
@@ -7026,10 +7281,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x45, 0x54, 0x00, 0x53, 0x48, 0x45, 0x53, 0x54, 0x00, 0x41, 0x51, 0x54, 0x53, 0x54, 0x00, 0x41,
0x51, 0x54, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01,
0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00,
+0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x31, 0x41, 0x74,
+0x79, 0x72, 0x61, 0x75, 0x20, 0x28, 0x41, 0x74, 0x69, 0x72, 0x61, 0x75, 0x2C, 0x20, 0x47, 0x75,
+0x72, 0x27, 0x79, 0x65, 0x76, 0x29, 0x2C, 0x20, 0x4D, 0x61, 0x6E, 0x67, 0x67, 0x68, 0x79, 0x73,
+0x74, 0x61, 0x75, 0x20, 0x28, 0x4D, 0x61, 0x6E, 0x6B, 0x69, 0x73, 0x74, 0x61, 0x75, 0x29,
/* Asia/Aqtobe */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4B, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x1A, 0xAA, 0x19, 0x8E, 0x68,
0xB5, 0xA3, 0xFD, 0x40, 0x15, 0x27, 0x8B, 0xB0, 0x16, 0x18, 0xC0, 0x20, 0x17, 0x08, 0xB1, 0x20,
@@ -7054,10 +7312,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x15, 0x00, 0x00, 0x54, 0x60, 0x01, 0x0F, 0x00, 0x00, 0x46, 0x50, 0x00, 0x15, 0x4C, 0x4D, 0x54,
0x00, 0x41, 0x4B, 0x54, 0x54, 0x00, 0x41, 0x4B, 0x54, 0x53, 0x54, 0x00, 0x41, 0x51, 0x54, 0x53,
0x54, 0x00, 0x41, 0x51, 0x54, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
-0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x41, 0x71, 0x74, 0x6F, 0x62, 0x65, 0x20,
+0x28, 0x41, 0x6B, 0x74, 0x6F, 0x62, 0x65, 0x29,
/* Asia/Ashgabat */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x13, 0xAA, 0x19, 0x8D, 0x44,
0xB5, 0xA3, 0xFD, 0x40, 0x15, 0x27, 0x8B, 0xB0, 0x16, 0x18, 0xC0, 0x20, 0x17, 0x08, 0xBF, 0x30,
@@ -7074,10 +7334,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x38, 0x40, 0x00, 0x0F, 0x00, 0x00, 0x46, 0x50, 0x00, 0x0F, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x53,
0x48, 0x54, 0x00, 0x41, 0x53, 0x48, 0x53, 0x54, 0x00, 0x54, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00,
+0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Ashkhabad */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x13, 0xAA, 0x19, 0x8D, 0x44,
0xB5, 0xA3, 0xFD, 0x40, 0x15, 0x27, 0x8B, 0xB0, 0x16, 0x18, 0xC0, 0x20, 0x17, 0x08, 0xBF, 0x30,
@@ -7094,10 +7354,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x38, 0x40, 0x00, 0x0F, 0x00, 0x00, 0x46, 0x50, 0x00, 0x0F, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x53,
0x48, 0x54, 0x00, 0x41, 0x53, 0x48, 0x53, 0x54, 0x00, 0x54, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00,
+0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Baghdad */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x49, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0C, 0x9E, 0x30, 0x3C, 0xE0,
0x17, 0x30, 0x68, 0x50, 0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xE8, 0xBD, 0x50, 0x19, 0xDB, 0x43, 0x40,
@@ -7119,18 +7379,20 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x03, 0x04, 0x03, 0x04, 0x03, 0x00, 0x00, 0x29, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00,
0x04, 0x00, 0x00, 0x38, 0x40, 0x01, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x00, 0x00, 0x38,
0x40, 0x01, 0x08, 0x42, 0x4D, 0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x00,
-0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Bahrain */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x48, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xA1, 0xF2, 0x9E, 0x14,
0x04, 0x8A, 0x92, 0xC0, 0x01, 0x02, 0x00, 0x00, 0x2F, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40,
0x00, 0x04, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x47, 0x53, 0x54, 0x00,
-0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Baku */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x18, 0xAA, 0x19, 0x95, 0x44,
0xE7, 0xDA, 0x0C, 0x50, 0x15, 0x27, 0x99, 0xC0, 0x16, 0x18, 0xCE, 0x30, 0x17, 0x08, 0xCD, 0x40,
@@ -7175,17 +7437,19 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x38, 0x40, 0x00, 0x0F, 0x00, 0x00, 0x46, 0x50, 0x01, 0x13, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x41,
0x4B, 0x54, 0x00, 0x42, 0x41, 0x4B, 0x53, 0x54, 0x00, 0x41, 0x5A, 0x54, 0x00, 0x41, 0x5A, 0x53,
0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Bangkok */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x48, 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, 0x08, 0xA2, 0x6A, 0x67, 0xC4,
0x01, 0x00, 0x00, 0x5E, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x42, 0x4D, 0x54,
-0x00, 0x49, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x49, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Beirut */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4C, 0x42, 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, 0x8C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xA2, 0x65, 0x63, 0xE0,
0xA3, 0x7B, 0x82, 0x50, 0xA4, 0x4E, 0x80, 0x60, 0xA5, 0x3F, 0xB4, 0xD0, 0xA6, 0x25, 0x27, 0xE0,
@@ -7233,10 +7497,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, 0x00, 0x00,
0x1C, 0x20, 0x00, 0x05, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00,
-0x00,
+0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Bishkek */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4B, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x18, 0xAA, 0x19, 0x7E, 0x10,
0xB5, 0xA3, 0xEF, 0x30, 0x15, 0x27, 0x7D, 0xA0, 0x16, 0x18, 0xB2, 0x10, 0x17, 0x08, 0xB1, 0x20,
@@ -7262,29 +7526,31 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x46, 0x52, 0x55, 0x54, 0x00, 0x46, 0x52, 0x55, 0x53, 0x54,
0x00, 0x4B, 0x47, 0x53, 0x54, 0x00, 0x4B, 0x47, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Brunei */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x4E, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0xAD, 0x8A, 0x02, 0x44,
0xBA, 0x67, 0x47, 0x88, 0x01, 0x02, 0x00, 0x00, 0x6B, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x69, 0x78,
0x00, 0x04, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x4E, 0x54, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00,
+0x00, 0x00,
/* Asia/Calcutta */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0D, 0xCA, 0xDB, 0x86, 0xB0,
0xCC, 0x05, 0x71, 0x18, 0xCC, 0x95, 0x32, 0xA8, 0xD2, 0x74, 0x12, 0x98, 0x01, 0x02, 0x03, 0x02,
0x00, 0x00, 0x52, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x68, 0x00, 0x04, 0x00, 0x00, 0x4D, 0x58,
0x00, 0x09, 0x00, 0x00, 0x5B, 0x68, 0x01, 0x09, 0x48, 0x4D, 0x54, 0x00, 0x42, 0x55, 0x52, 0x54,
-0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Choibalsan */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x86, 0xD3, 0xE7, 0x28,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x14, 0x86, 0xD3, 0xE7, 0x28,
0x0F, 0x0B, 0xDC, 0x90, 0x18, 0xE9, 0xC8, 0x80, 0x19, 0xDA, 0xEE, 0xE0, 0x1A, 0xCC, 0x3F, 0x70,
0x1B, 0xBC, 0x22, 0x60, 0x1C, 0xAC, 0x21, 0x70, 0x1D, 0x9C, 0x04, 0x60, 0x1E, 0x8C, 0x03, 0x70,
0x1F, 0x7B, 0xE6, 0x60, 0x20, 0x6B, 0xE5, 0x70, 0x21, 0x5B, 0xC8, 0x60, 0x22, 0x4B, 0xC7, 0x70,
@@ -7296,16 +7562,19 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x36, 0x0C, 0xF3, 0x60, 0x3A, 0xE9, 0xA5, 0x90, 0x3B, 0xB4, 0x9E, 0x80, 0x3C, 0xA4, 0x9D, 0x90,
0x3D, 0x94, 0x80, 0x80, 0x3E, 0x84, 0x7F, 0x90, 0x3F, 0x74, 0x62, 0x80, 0x40, 0x64, 0x61, 0x90,
0x41, 0x54, 0x44, 0x80, 0x42, 0x44, 0x43, 0x90, 0x43, 0x34, 0x26, 0x80, 0x44, 0x24, 0x25, 0x90,
-0x45, 0x1D, 0x43, 0x00, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03,
+0x45, 0x1D, 0x43, 0x00, 0x47, 0xEF, 0xAA, 0xF0, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03,
0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03,
0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03,
-0x04, 0x03, 0x00, 0x00, 0x6B, 0x58, 0x00, 0x00, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x00, 0x00,
-0x70, 0x80, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x09, 0x00, 0x00, 0x8C, 0xA0, 0x01, 0x0E,
-0x4C, 0x4D, 0x54, 0x00, 0x55, 0x4C, 0x41, 0x54, 0x00, 0x43, 0x48, 0x4F, 0x54, 0x00, 0x43, 0x48,
-0x4F, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x00, 0x00, 0x6B, 0x58, 0x00, 0x00, 0x00, 0x00, 0x62,
+0x70, 0x00, 0x04, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x09, 0x00,
+0x00, 0x8C, 0xA0, 0x01, 0x0E, 0x00, 0x00, 0x70, 0x80, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x55,
+0x4C, 0x41, 0x54, 0x00, 0x43, 0x48, 0x4F, 0x54, 0x00, 0x43, 0x48, 0x4F, 0x53, 0x54, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x12, 0x44, 0x6F, 0x72, 0x6E, 0x6F, 0x64, 0x2C, 0x20, 0x53,
+0x75, 0x6B, 0x68, 0x62, 0x61, 0x61, 0x74, 0x61, 0x72,
/* Asia/Chongqing */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x4E, 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, 0x0E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0xB0, 0xFE, 0xA8, 0x94,
0x13, 0x6D, 0xC9, 0x10, 0x1E, 0xBA, 0x36, 0x00, 0x1F, 0x69, 0x7F, 0x70, 0x20, 0x7E, 0x68, 0x80,
@@ -7315,10 +7584,14 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x00, 0x00, 0x63, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x00, 0x00,
0x7E, 0x90, 0x01, 0x09, 0x00, 0x00, 0x70, 0x80, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x4C, 0x4F,
0x4E, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x40, 0x63,
+0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x43, 0x68, 0x69, 0x6E, 0x61, 0x20, 0x2D, 0x20, 0x53,
+0x69, 0x63, 0x68, 0x75, 0x61, 0x6E, 0x2C, 0x20, 0x59, 0x75, 0x6E, 0x6E, 0x61, 0x6E, 0x2C, 0x20,
+0x47, 0x75, 0x61, 0x6E, 0x67, 0x78, 0x69, 0x2C, 0x20, 0x53, 0x68, 0x61, 0x61, 0x6E, 0x78, 0x69,
+0x2C, 0x20, 0x47, 0x75, 0x69, 0x7A, 0x68, 0x6F, 0x75, 0x2C, 0x20, 0x65, 0x74, 0x63, 0x2E,
/* Asia/Chungking */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x0E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0xB0, 0xFE, 0xA8, 0x94,
0x13, 0x6D, 0xC9, 0x10, 0x1E, 0xBA, 0x36, 0x00, 0x1F, 0x69, 0x7F, 0x70, 0x20, 0x7E, 0x68, 0x80,
@@ -7328,10 +7601,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x00, 0x00, 0x63, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x00, 0x00,
0x7E, 0x90, 0x01, 0x09, 0x00, 0x00, 0x70, 0x80, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x4C, 0x4F,
0x4E, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Colombo */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4C, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0x87, 0x9D, 0xBD, 0x1C,
0xCB, 0x5A, 0x1C, 0x28, 0xCC, 0x95, 0x2B, 0xA0, 0xD2, 0x75, 0x80, 0x38, 0x31, 0xA6, 0x00, 0x28,
@@ -7340,10 +7613,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x08, 0x00, 0x00, 0x5B, 0x68, 0x01, 0x04, 0x00, 0x00, 0x5B, 0x68, 0x00, 0x0D, 0x00, 0x00, 0x54,
0x60, 0x00, 0x0D, 0x4D, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x49, 0x48, 0x53, 0x54, 0x00,
0x4C, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Dacca */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x16, 0xCA, 0xDB, 0x86, 0xB0,
0xCC, 0x05, 0x71, 0x18, 0xCC, 0x95, 0x32, 0xA8, 0xDD, 0xA8, 0xD2, 0x98, 0x02, 0x4F, 0x9D, 0x20,
@@ -7351,10 +7624,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x04, 0x00, 0x00, 0x4D, 0x58, 0x00, 0x09, 0x00, 0x00, 0x54, 0x60, 0x00, 0x0D, 0x00, 0x00, 0x54,
0x60, 0x00, 0x12, 0x48, 0x4D, 0x54, 0x00, 0x42, 0x55, 0x52, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00,
0x44, 0x41, 0x43, 0x54, 0x00, 0x42, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Damascus */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x59, 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, 0x97, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0xA1, 0xF2, 0xAB, 0x78,
0xA2, 0x81, 0x2F, 0x80, 0xA3, 0x5E, 0x9D, 0x70, 0xA4, 0x61, 0x11, 0x80, 0xA5, 0x3E, 0x7F, 0x70,
@@ -7379,22 +7652,22 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x3A, 0xC6, 0x53, 0x60, 0x3B, 0xB7, 0x87, 0xD0, 0x3C, 0xA7, 0x86, 0xE0, 0x3D, 0x98, 0xBB, 0x50,
0x3E, 0x88, 0xBA, 0x60, 0x3F, 0x79, 0xEE, 0xD0, 0x40, 0x6B, 0x3F, 0x60, 0x41, 0x5C, 0x73, 0xD0,
0x42, 0x4C, 0x72, 0xE0, 0x43, 0x3D, 0xA7, 0x50, 0x44, 0x2D, 0xA6, 0x60, 0x45, 0x12, 0xFD, 0x50,
-0x46, 0x0C, 0x36, 0xE0, 0x47, 0x2A, 0x3E, 0x50, 0x47, 0xF5, 0x53, 0x60, 0x48, 0xE2, 0x93, 0x50,
-0x49, 0xD5, 0x35, 0x60, 0x4A, 0xC3, 0xC6, 0xD0, 0x4B, 0xB5, 0x17, 0x60, 0x4C, 0xA4, 0xFA, 0x50,
-0x4D, 0x94, 0xF9, 0x60, 0x4E, 0x86, 0x2D, 0xD0, 0x4F, 0x7E, 0x15, 0xE0, 0x50, 0x68, 0xB2, 0xD0,
-0x51, 0x5D, 0xF7, 0xE0, 0x52, 0x49, 0xE6, 0x50, 0x53, 0x3D, 0xD9, 0xE0, 0x54, 0x2B, 0x19, 0xD0,
-0x55, 0x1D, 0xBB, 0xE0, 0x56, 0x0C, 0x4D, 0x50, 0x56, 0xFD, 0x9D, 0xE0, 0x57, 0xEE, 0xD2, 0x50,
-0x58, 0xE6, 0xBA, 0x60, 0x59, 0xD0, 0x05, 0xD0, 0x5A, 0xC6, 0x9C, 0x60, 0x5B, 0xB1, 0x39, 0x50,
-0x5C, 0xA6, 0x7E, 0x60, 0x5D, 0x92, 0x6C, 0xD0, 0x5E, 0x86, 0x60, 0x60, 0x5F, 0x74, 0xF1, 0xD0,
-0x60, 0x66, 0x42, 0x60, 0x61, 0x56, 0x25, 0x50, 0x62, 0x46, 0x24, 0x60, 0x63, 0x37, 0x58, 0xD0,
-0x64, 0x2F, 0x40, 0xE0, 0x65, 0x18, 0x8C, 0x50, 0x66, 0x0F, 0x22, 0xE0, 0x66, 0xFB, 0x11, 0x50,
-0x67, 0xEF, 0x04, 0xE0, 0x68, 0xDC, 0x44, 0xD0, 0x69, 0xCE, 0xE6, 0xE0, 0x6A, 0xBD, 0x78, 0x50,
-0x6B, 0xAE, 0xC8, 0xE0, 0x6C, 0x9E, 0xAB, 0xD0, 0x6D, 0x97, 0xE5, 0x60, 0x6E, 0x81, 0x30, 0xD0,
-0x6F, 0x77, 0xC7, 0x60, 0x70, 0x62, 0x64, 0x50, 0x71, 0x57, 0xA9, 0x60, 0x72, 0x43, 0x97, 0xD0,
-0x73, 0x37, 0x8B, 0x60, 0x74, 0x24, 0xCB, 0x50, 0x75, 0x17, 0x6D, 0x60, 0x76, 0x07, 0x50, 0x50,
-0x76, 0xF7, 0x4F, 0x60, 0x77, 0xE8, 0x83, 0xD0, 0x78, 0xE0, 0x6B, 0xE0, 0x79, 0xC9, 0xB7, 0x50,
-0x7A, 0xC0, 0x4D, 0xE0, 0x7B, 0xAA, 0xEA, 0xD0, 0x7C, 0xA0, 0x2F, 0xE0, 0x7D, 0x8D, 0x6F, 0xD0,
-0x7E, 0x80, 0x11, 0xE0, 0x7F, 0x6E, 0xA3, 0x50, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
+0x46, 0x0C, 0x36, 0xE0, 0x47, 0x2A, 0x3E, 0x50, 0x47, 0xF5, 0x53, 0x60, 0x49, 0x0B, 0x71, 0xD0,
+0x49, 0xD5, 0x35, 0x60, 0x4A, 0xEC, 0xA5, 0x50, 0x4B, 0xB5, 0x17, 0x60, 0x4C, 0xCD, 0xD8, 0xD0,
+0x4D, 0x94, 0xF9, 0x60, 0x4E, 0xAF, 0x0C, 0x50, 0x4F, 0x7E, 0x15, 0xE0, 0x50, 0x91, 0x91, 0x50,
+0x51, 0x5D, 0xF7, 0xE0, 0x52, 0x72, 0xC4, 0xD0, 0x53, 0x3D, 0xD9, 0xE0, 0x54, 0x53, 0xF8, 0x50,
+0x55, 0x1D, 0xBB, 0xE0, 0x56, 0x35, 0x2B, 0xD0, 0x56, 0xFD, 0x9D, 0xE0, 0x58, 0x17, 0xB0, 0xD0,
+0x58, 0xE6, 0xBA, 0x60, 0x59, 0xF8, 0xE4, 0x50, 0x5A, 0xC6, 0x9C, 0x60, 0x5B, 0xDA, 0x17, 0xD0,
+0x5C, 0xA6, 0x7E, 0x60, 0x5D, 0xBB, 0x4B, 0x50, 0x5E, 0x86, 0x60, 0x60, 0x5F, 0x9D, 0xD0, 0x50,
+0x60, 0x66, 0x42, 0x60, 0x61, 0x7F, 0x03, 0xD0, 0x62, 0x46, 0x24, 0x60, 0x63, 0x60, 0x37, 0x50,
+0x64, 0x2F, 0x40, 0xE0, 0x65, 0x41, 0x6A, 0xD0, 0x66, 0x0F, 0x22, 0xE0, 0x67, 0x23, 0xEF, 0xD0,
+0x67, 0xEF, 0x04, 0xE0, 0x69, 0x05, 0x23, 0x50, 0x69, 0xCE, 0xE6, 0xE0, 0x6A, 0xE6, 0x56, 0xD0,
+0x6B, 0xAE, 0xC8, 0xE0, 0x6C, 0xC7, 0x8A, 0x50, 0x6D, 0x97, 0xE5, 0x60, 0x6E, 0xAA, 0x0F, 0x50,
+0x6F, 0x77, 0xC7, 0x60, 0x70, 0x8B, 0x42, 0xD0, 0x71, 0x57, 0xA9, 0x60, 0x72, 0x6C, 0x76, 0x50,
+0x73, 0x37, 0x8B, 0x60, 0x74, 0x4D, 0xA9, 0xD0, 0x75, 0x17, 0x6D, 0x60, 0x76, 0x30, 0x2E, 0xD0,
+0x76, 0xF7, 0x4F, 0x60, 0x78, 0x11, 0x62, 0x50, 0x78, 0xE0, 0x6B, 0xE0, 0x79, 0xF2, 0x95, 0xD0,
+0x7A, 0xC0, 0x4D, 0xE0, 0x7B, 0xD3, 0xC9, 0x50, 0x7C, 0xA0, 0x2F, 0xE0, 0x7D, 0xB6, 0x4E, 0x50,
+0x7E, 0x80, 0x11, 0xE0, 0x7F, 0x97, 0x81, 0xD0, 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,
@@ -7406,10 +7679,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00,
0x00, 0x22, 0x08, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00,
0x09, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
+
/* Asia/Dhaka */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x16, 0xCA, 0xDB, 0x86, 0xB0,
0xCC, 0x05, 0x71, 0x18, 0xCC, 0x95, 0x32, 0xA8, 0xDD, 0xA8, 0xD2, 0x98, 0x02, 0x4F, 0x9D, 0x20,
@@ -7417,27 +7691,29 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x04, 0x00, 0x00, 0x4D, 0x58, 0x00, 0x09, 0x00, 0x00, 0x54, 0x60, 0x00, 0x0D, 0x00, 0x00, 0x54,
0x60, 0x00, 0x12, 0x48, 0x4D, 0x54, 0x00, 0x42, 0x55, 0x52, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00,
0x44, 0x41, 0x43, 0x54, 0x00, 0x42, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Dili */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x10, 0x92, 0xE6, 0x18, 0xC4,
0xCB, 0x99, 0x32, 0xF0, 0xD2, 0x56, 0xEE, 0x70, 0x0B, 0xEA, 0x30, 0x70, 0x39, 0xC3, 0x99, 0x00,
0x01, 0x02, 0x03, 0x04, 0x03, 0x00, 0x00, 0x75, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00,
0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x08, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x04, 0x00, 0x00, 0x70,
0x80, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x54, 0x4C, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x43,
-0x49, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x49, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Dubai */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x45, 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, 0x08, 0xA1, 0xF2, 0x99, 0xA8,
0x01, 0x00, 0x00, 0x33, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x47, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x47, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Dushanbe */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x13, 0xAA, 0x19, 0x83, 0x80,
0xB5, 0xA3, 0xEF, 0x30, 0x15, 0x27, 0x7D, 0xA0, 0x16, 0x18, 0xB2, 0x10, 0x17, 0x08, 0xB1, 0x20,
@@ -7452,10 +7728,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x01, 0x09, 0x00, 0x00,
0x46, 0x50, 0x00, 0x0F, 0x4C, 0x4D, 0x54, 0x00, 0x44, 0x55, 0x53, 0x54, 0x00, 0x44, 0x55, 0x53,
0x53, 0x54, 0x00, 0x54, 0x4A, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x00,
/* Asia/Gaza */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0xC8, 0x59, 0xB2, 0xE0,
0xCC, 0xE5, 0xC1, 0x50, 0xCD, 0xAC, 0xFE, 0x00, 0xCE, 0xC6, 0xF4, 0xD0, 0xCF, 0x8F, 0x66, 0xE0,
@@ -7479,21 +7756,21 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x3D, 0xAF, 0x24, 0xD0, 0x3E, 0x9F, 0x23, 0xE0, 0x3F, 0x8F, 0x06, 0xD0, 0x40, 0x7F, 0x05, 0xE0,
0x41, 0x5C, 0x81, 0xE0, 0x42, 0x5E, 0xE7, 0xE0, 0x43, 0x41, 0xB7, 0xF0, 0x44, 0x2D, 0xA6, 0x60,
0x45, 0x12, 0xFD, 0x50, 0x46, 0x0E, 0xD9, 0xE0, 0x46, 0xE8, 0x6F, 0x70, 0x47, 0xF1, 0x5E, 0xE0,
-0x48, 0xC8, 0x51, 0x70, 0x49, 0xD2, 0x92, 0x60, 0x4A, 0xA8, 0x33, 0x70, 0x4B, 0xB3, 0xC5, 0xE0,
-0x4C, 0x88, 0x15, 0x70, 0x4D, 0x94, 0xF9, 0x60, 0x4E, 0x67, 0xF7, 0x70, 0x4F, 0x77, 0x7E, 0x60,
-0x50, 0x51, 0x13, 0xF0, 0x51, 0x58, 0xB1, 0xE0, 0x52, 0x30, 0xF5, 0xF0, 0x53, 0x39, 0xE5, 0x60,
-0x54, 0x10, 0xD7, 0xF0, 0x55, 0x1B, 0x18, 0xE0, 0x55, 0xF0, 0xB9, 0xF0, 0x56, 0xFD, 0x9D, 0xE0,
-0x57, 0xD0, 0x9B, 0xF0, 0x58, 0xDE, 0xD1, 0x60, 0x59, 0xB9, 0xB8, 0x70, 0x5A, 0xC0, 0x04, 0xE0,
-0x5B, 0x99, 0x9A, 0x70, 0x5C, 0xA1, 0x38, 0x60, 0x5D, 0x79, 0x7C, 0x70, 0x5E, 0x83, 0xBD, 0x60,
-0x5F, 0x59, 0x5E, 0x70, 0x60, 0x64, 0xF0, 0xE0, 0x61, 0x39, 0x40, 0x70, 0x62, 0x46, 0x24, 0x60,
-0x63, 0x19, 0x22, 0x70, 0x64, 0x27, 0x57, 0xE0, 0x65, 0x02, 0x3E, 0xF0, 0x66, 0x09, 0xDC, 0xE0,
-0x66, 0xE2, 0x20, 0xF0, 0x67, 0xEB, 0x10, 0x60, 0x68, 0xC2, 0x02, 0xF0, 0x69, 0xCC, 0x43, 0xE0,
-0x6A, 0xA1, 0xE4, 0xF0, 0x6B, 0xAD, 0x77, 0x60, 0x6C, 0x81, 0xC6, 0xF0, 0x6D, 0x8F, 0xFC, 0x60,
-0x6E, 0x6A, 0xE3, 0x70, 0x6F, 0x71, 0x2F, 0xE0, 0x70, 0x4A, 0xC5, 0x70, 0x71, 0x52, 0x63, 0x60,
-0x72, 0x2A, 0xA7, 0x70, 0x73, 0x33, 0x96, 0xE0, 0x74, 0x0A, 0x89, 0x70, 0x75, 0x16, 0x1B, 0xE0,
-0x75, 0xEA, 0x6B, 0x70, 0x76, 0xF7, 0x4F, 0x60, 0x77, 0xCA, 0x4D, 0x70, 0x78, 0xD8, 0x82, 0xE0,
-0x79, 0xB3, 0x69, 0xF0, 0x7A, 0xB9, 0xB6, 0x60, 0x7B, 0x93, 0x4B, 0xF0, 0x7C, 0x9C, 0x3B, 0x60,
-0x7D, 0x73, 0x2D, 0xF0, 0x7E, 0x7D, 0x6E, 0xE0, 0x7F, 0x53, 0x0F, 0xF0, 0x00, 0x01, 0x00, 0x01,
+0x48, 0xB5, 0xDC, 0x70, 0x49, 0xD2, 0x92, 0x60, 0x4A, 0x95, 0xBE, 0x70, 0x4B, 0xB3, 0xC5, 0xE0,
+0x4C, 0x75, 0xA0, 0x70, 0x4D, 0x94, 0xF9, 0x60, 0x4E, 0x55, 0x82, 0x70, 0x4F, 0x77, 0x7E, 0x60,
+0x50, 0x3E, 0x9E, 0xF0, 0x51, 0x58, 0xB1, 0xE0, 0x52, 0x1E, 0x80, 0xF0, 0x53, 0x39, 0xE5, 0x60,
+0x53, 0xFE, 0x62, 0xF0, 0x55, 0x1B, 0x18, 0xE0, 0x55, 0xDE, 0x44, 0xF0, 0x56, 0xFD, 0x9D, 0xE0,
+0x57, 0xBE, 0x26, 0xF0, 0x58, 0xDE, 0xD1, 0x60, 0x59, 0xA7, 0x43, 0x70, 0x5A, 0xC0, 0x04, 0xE0,
+0x5B, 0x87, 0x25, 0x70, 0x5C, 0xA1, 0x38, 0x60, 0x5D, 0x67, 0x07, 0x70, 0x5E, 0x83, 0xBD, 0x60,
+0x5F, 0x46, 0xE9, 0x70, 0x60, 0x64, 0xF0, 0xE0, 0x61, 0x26, 0xCB, 0x70, 0x62, 0x46, 0x24, 0x60,
+0x63, 0x06, 0xAD, 0x70, 0x64, 0x27, 0x57, 0xE0, 0x64, 0xEF, 0xC9, 0xF0, 0x66, 0x09, 0xDC, 0xE0,
+0x66, 0xCF, 0xAB, 0xF0, 0x67, 0xEB, 0x10, 0x60, 0x68, 0xAF, 0x8D, 0xF0, 0x69, 0xCC, 0x43, 0xE0,
+0x6A, 0x8F, 0x6F, 0xF0, 0x6B, 0xAD, 0x77, 0x60, 0x6C, 0x6F, 0x51, 0xF0, 0x6D, 0x8F, 0xFC, 0x60,
+0x6E, 0x58, 0x6E, 0x70, 0x6F, 0x71, 0x2F, 0xE0, 0x70, 0x38, 0x50, 0x70, 0x71, 0x52, 0x63, 0x60,
+0x72, 0x18, 0x32, 0x70, 0x73, 0x33, 0x96, 0xE0, 0x73, 0xF8, 0x14, 0x70, 0x75, 0x16, 0x1B, 0xE0,
+0x75, 0xD7, 0xF6, 0x70, 0x76, 0xF7, 0x4F, 0x60, 0x77, 0xB7, 0xD8, 0x70, 0x78, 0xD8, 0x82, 0xE0,
+0x79, 0xA0, 0xF4, 0xF0, 0x7A, 0xB9, 0xB6, 0x60, 0x7B, 0x80, 0xD6, 0xF0, 0x7C, 0x9C, 0x3B, 0x60,
+0x7D, 0x60, 0xB8, 0xF0, 0x7E, 0x7D, 0x6E, 0xE0, 0x7F, 0x40, 0x9A, 0xF0, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04,
0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04,
@@ -7506,10 +7783,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00,
0x2A, 0x30, 0x01, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00,
0x45, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Harbin */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x11, 0xB0, 0xFE, 0x95, 0xBC,
0xB8, 0xD3, 0xCE, 0x78, 0xC7, 0x90, 0xFA, 0x80, 0xF9, 0x17, 0x95, 0xF0, 0x13, 0x6D, 0xB3, 0xF8,
@@ -7520,19 +7798,23 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x00, 0x00, 0x76, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x77, 0x88, 0x00, 0x04, 0x00, 0x00, 0x70,
0x80, 0x00, 0x09, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x0D, 0x4C,
0x4D, 0x54, 0x00, 0x43, 0x48, 0x41, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x21, 0x48, 0x65, 0x69, 0x6C, 0x6F, 0x6E, 0x67, 0x6A, 0x69, 0x61,
+0x6E, 0x67, 0x20, 0x28, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x4D, 0x6F, 0x68, 0x65, 0x29,
+0x2C, 0x20, 0x4A, 0x69, 0x6C, 0x69, 0x6E,
/* Asia/Ho_Chi_Minh */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x56, 0x4E, 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, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0C, 0x88, 0x6F, 0x42, 0x80,
0x91, 0x5F, 0xEE, 0xD0, 0x93, 0x85, 0xB1, 0x90, 0xB7, 0x41, 0xBC, 0x00, 0x01, 0x02, 0x03, 0x02,
0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0xEC, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70,
0x00, 0x08, 0x00, 0x00, 0x70, 0x80, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00,
-0x49, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x49, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Hong_Kong */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x48, 0x4B, 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, 0x45, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x85, 0x69, 0x5A, 0xFC,
0xD3, 0x6A, 0xB7, 0x38, 0xD4, 0x93, 0x4A, 0xA8, 0xD5, 0x42, 0xB0, 0x38, 0xD6, 0x9A, 0xB9, 0xA8,
@@ -7558,10 +7840,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x6B, 0x04, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01,
0x04, 0x00, 0x00, 0x70, 0x80, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x48, 0x4B, 0x53, 0x54, 0x00,
-0x48, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x48, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Hovd */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x4E, 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, 0x2E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0F, 0x86, 0xD3, 0xFC, 0x94,
0x0F, 0x0B, 0xEA, 0xA0, 0x18, 0xE9, 0xD6, 0x90, 0x19, 0xDB, 0x0B, 0x00, 0x1A, 0xCC, 0x5B, 0x90,
@@ -7581,10 +7864,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x00, 0x00, 0x55, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x00, 0x00,
0x70, 0x80, 0x01, 0x09, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x48, 0x4F,
0x56, 0x54, 0x00, 0x48, 0x4F, 0x56, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00,
+0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x2B, 0x42, 0x61, 0x79,
+0x61, 0x6E, 0x2D, 0x4F, 0x6C, 0x67, 0x69, 0x79, 0x2C, 0x20, 0x47, 0x6F, 0x76, 0x69, 0x2D, 0x41,
+0x6C, 0x74, 0x61, 0x69, 0x2C, 0x20, 0x48, 0x6F, 0x76, 0x64, 0x2C, 0x20, 0x55, 0x76, 0x73, 0x2C,
+0x20, 0x5A, 0x61, 0x76, 0x6B, 0x68, 0x61, 0x6E,
/* Asia/Irkutsk */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0F, 0xA2, 0x12, 0x0F, 0xB0,
0xB5, 0xA3, 0xD3, 0x10, 0x15, 0x27, 0x61, 0x80, 0x16, 0x18, 0x95, 0xF0, 0x17, 0x08, 0x95, 0x00,
@@ -7628,10 +7914,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x80, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x09, 0x00, 0x00, 0x70, 0x80, 0x01, 0x09, 0x00,
0x00, 0x62, 0x70, 0x00, 0x04, 0x49, 0x4D, 0x54, 0x00, 0x49, 0x52, 0x4B, 0x54, 0x00, 0x49, 0x52,
0x4B, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x17,
+0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x35, 0x20, 0x2D, 0x20, 0x4C, 0x61, 0x6B, 0x65,
+0x20, 0x42, 0x61, 0x69, 0x6B, 0x61, 0x6C,
/* Asia/Istanbul */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xAB, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x16, 0x90, 0x8B, 0xF5, 0x98,
0x9B, 0x0C, 0x17, 0x60, 0x9B, 0xD5, 0xBE, 0xD0, 0xA2, 0x65, 0x63, 0xE0, 0xA3, 0x7B, 0x82, 0x50,
@@ -7693,10 +7981,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x49, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53,
0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x54, 0x52, 0x53, 0x54, 0x00, 0x54, 0x52, 0x54, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x01,
+0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Jakarta */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x49, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0xA9, 0x78, 0x85, 0xE0,
0xBA, 0x16, 0xDE, 0x60, 0xCB, 0xBF, 0x83, 0x88, 0xD2, 0x56, 0xEE, 0x70, 0xD7, 0x3C, 0xC6, 0x08,
@@ -7705,18 +7993,22 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x09, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x0D, 0x00, 0x00, 0x70, 0x80, 0x00, 0x09, 0x00, 0x00, 0x62,
0x70, 0x00, 0x09, 0x4A, 0x4D, 0x54, 0x00, 0x4A, 0x41, 0x56, 0x54, 0x00, 0x57, 0x49, 0x54, 0x00,
0x4A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0E, 0x4A, 0x61, 0x76, 0x61,
+0x20, 0x26, 0x20, 0x53, 0x75, 0x6D, 0x61, 0x74, 0x72, 0x61,
/* Asia/Jayapura */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x49, 0x44, 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, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xBA, 0x16, 0xC1, 0x98,
0xD0, 0x58, 0xB9, 0xF0, 0xF4, 0xB5, 0xA2, 0x68, 0x01, 0x02, 0x01, 0x00, 0x00, 0x83, 0xE8, 0x00,
0x00, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x04, 0x00, 0x00, 0x85, 0x98, 0x00, 0x08, 0x4C, 0x4D, 0x54,
-0x00, 0x45, 0x49, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x45, 0x49, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x19, 0x49, 0x72, 0x69, 0x61, 0x6E,
+0x20, 0x4A, 0x61, 0x79, 0x61, 0x20, 0x26, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4D, 0x6F, 0x6C, 0x75,
+0x63, 0x63, 0x61, 0x73,
/* Asia/Jerusalem */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x49, 0x4C, 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, 0x8E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x9E, 0x30, 0x45, 0x88,
0xC8, 0x59, 0xB2, 0xE0, 0xCC, 0xE5, 0xC1, 0x50, 0xCD, 0xAC, 0xFE, 0x00, 0xCE, 0xC6, 0xF4, 0xD0,
@@ -7766,17 +8058,18 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x02, 0x00, 0x00, 0x20, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00,
0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0C, 0x4A, 0x4D, 0x54, 0x00, 0x49, 0x44,
0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x49, 0x44, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Kabul */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x46, 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, 0xD0, 0xF9, 0xD7, 0x40,
0x01, 0x00, 0x00, 0x38, 0x40, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x48, 0x00, 0x00, 0x41, 0x46, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00,
+0x00,
/* Asia/Kamchatka */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0F, 0xA7, 0x52, 0x96, 0xC4,
0xB5, 0xA3, 0x9A, 0xD0, 0x15, 0x27, 0x29, 0x40, 0x16, 0x18, 0x5D, 0xB0, 0x17, 0x08, 0x5C, 0xC0,
@@ -7820,22 +8113,25 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xC0, 0x00, 0x04, 0x00, 0x00, 0xB6, 0xD0, 0x01, 0x09, 0x00, 0x00, 0xA8, 0xC0, 0x01, 0x09, 0x00,
0x00, 0x9A, 0xB0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x50, 0x45, 0x54, 0x54, 0x00, 0x50, 0x45,
0x54, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x15,
+0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x39, 0x20, 0x2D, 0x20, 0x4B, 0x61, 0x6D, 0x63,
+0x68, 0x61, 0x74, 0x6B, 0x61,
/* Asia/Karachi */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x16, 0x89, 0x7E, 0xFC, 0xA4,
+0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x16, 0x89, 0x7E, 0xFC, 0xA4,
0xCC, 0x95, 0x32, 0xA8, 0xD2, 0x74, 0x12, 0x98, 0xDD, 0xA8, 0xE0, 0xA8, 0x02, 0x4F, 0xAB, 0x30,
-0x3C, 0xAF, 0x45, 0xEC, 0x3D, 0x9F, 0x28, 0xDC, 0x01, 0x02, 0x01, 0x03, 0x05, 0x04, 0x05, 0x00,
-0x00, 0x3E, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x58, 0x00, 0x04, 0x00, 0x00, 0x5B, 0x68, 0x01,
-0x04, 0x00, 0x00, 0x46, 0x50, 0x00, 0x08, 0x00, 0x00, 0x54, 0x60, 0x01, 0x0D, 0x00, 0x00, 0x46,
-0x50, 0x00, 0x12, 0x4C, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x4B, 0x41, 0x52, 0x54, 0x00,
-0x50, 0x4B, 0x53, 0x54, 0x00, 0x50, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00,
+0x3C, 0xAF, 0x45, 0xEC, 0x3D, 0x9F, 0x28, 0xDC, 0x48, 0x41, 0xA0, 0x30, 0x49, 0x0B, 0x47, 0xA0,
+0x01, 0x02, 0x01, 0x03, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x3E, 0xDC, 0x00, 0x00, 0x00,
+0x00, 0x4D, 0x58, 0x00, 0x04, 0x00, 0x00, 0x5B, 0x68, 0x01, 0x04, 0x00, 0x00, 0x46, 0x50, 0x00,
+0x08, 0x00, 0x00, 0x54, 0x60, 0x01, 0x0D, 0x00, 0x00, 0x46, 0x50, 0x00, 0x12, 0x4C, 0x4D, 0x54,
+0x00, 0x49, 0x53, 0x54, 0x00, 0x4B, 0x41, 0x52, 0x54, 0x00, 0x50, 0x4B, 0x53, 0x54, 0x00, 0x50,
+0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Kashgar */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x11, 0xB0, 0xFE, 0xC5, 0x44,
0xC7, 0x91, 0x1D, 0xA8, 0x13, 0x6D, 0xE5, 0x30, 0x1E, 0xBA, 0x36, 0x00, 0x1F, 0x69, 0x7F, 0x70,
@@ -7846,27 +8142,40 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x58, 0x00, 0x04, 0x00, 0x00, 0x46, 0x50, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x09, 0x00,
0x00, 0x70, 0x80, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x41, 0x53, 0x54, 0x00, 0x43, 0x44,
0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x15, 0x77, 0x65, 0x73, 0x74,
+0x20, 0x54, 0x69, 0x62, 0x65, 0x74, 0x20, 0x26, 0x20, 0x58, 0x69, 0x6E, 0x6A, 0x69, 0x61, 0x6E,
+0x67,
+/* Asia/Kathmandu */
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4E, 0x50, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xA1, 0xF2, 0x7D, 0x84,
+0x1E, 0x18, 0x30, 0xA8, 0x01, 0x02, 0x00, 0x00, 0x4F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x58,
+0x00, 0x04, 0x00, 0x00, 0x50, 0xDC, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00,
+0x4E, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Katmandu */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xA1, 0xF2, 0x7D, 0x84,
0x1E, 0x18, 0x30, 0xA8, 0x01, 0x02, 0x00, 0x00, 0x4F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x58,
0x00, 0x04, 0x00, 0x00, 0x50, 0xDC, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00,
-0x4E, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x4E, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Kolkata */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x49, 0x4E, 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, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0D, 0xCA, 0xDB, 0x86, 0xB0,
0xCC, 0x05, 0x71, 0x18, 0xCC, 0x95, 0x32, 0xA8, 0xD2, 0x74, 0x12, 0x98, 0x01, 0x02, 0x03, 0x02,
0x00, 0x00, 0x52, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x68, 0x00, 0x04, 0x00, 0x00, 0x4D, 0x58,
0x00, 0x09, 0x00, 0x00, 0x5B, 0x68, 0x01, 0x09, 0x48, 0x4D, 0x54, 0x00, 0x42, 0x55, 0x52, 0x54,
-0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Krasnoyarsk */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0F, 0xA1, 0xF9, 0x0D, 0xF8,
0xB5, 0xA3, 0xE1, 0x20, 0x15, 0x27, 0x6F, 0x90, 0x16, 0x18, 0xA4, 0x00, 0x17, 0x08, 0xA3, 0x10,
@@ -7910,10 +8219,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x70, 0x00, 0x04, 0x00, 0x00, 0x70, 0x80, 0x01, 0x09, 0x00, 0x00, 0x62, 0x70, 0x01, 0x09, 0x00,
0x00, 0x54, 0x60, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x52, 0x41, 0x54, 0x00, 0x4B, 0x52,
0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x19,
+0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x34, 0x20, 0x2D, 0x20, 0x59, 0x65, 0x6E, 0x69,
+0x73, 0x65, 0x69, 0x20, 0x52, 0x69, 0x76, 0x65, 0x72,
/* Asia/Kuala_Lumpur */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x17, 0x86, 0x83, 0x85, 0xA3,
0xBA, 0x67, 0x4E, 0x90, 0xC0, 0x0A, 0xE4, 0x60, 0xCA, 0xB3, 0xE5, 0x60, 0xCB, 0x91, 0x5F, 0x08,
@@ -7922,10 +8233,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x09, 0x00, 0x00, 0x67, 0x20, 0x00, 0x04, 0x00, 0x00, 0x69, 0x78, 0x00, 0x04, 0x00, 0x00, 0x7E,
0x90, 0x00, 0x0F, 0x00, 0x00, 0x70, 0x80, 0x00, 0x13, 0x53, 0x4D, 0x54, 0x00, 0x4D, 0x41, 0x4C,
0x54, 0x00, 0x4D, 0x41, 0x4C, 0x53, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x4D, 0x59, 0x54, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89,
+0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x13, 0x70, 0x65, 0x6E, 0x69, 0x6E, 0x73,
+0x75, 0x6C, 0x61, 0x72, 0x20, 0x4D, 0x61, 0x6C, 0x61, 0x79, 0x73, 0x69, 0x61,
/* Asia/Kuching */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0xAD, 0x8A, 0x06, 0x90,
0xBA, 0x67, 0x47, 0x88, 0xBF, 0x7B, 0x27, 0x80, 0xBF, 0xF3, 0x1B, 0x50, 0xC1, 0x5D, 0xAC, 0x80,
@@ -7938,17 +8251,19 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x80, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x10, 0x00, 0x00, 0x70, 0x80, 0x00, 0x14, 0x4C,
0x4D, 0x54, 0x00, 0x42, 0x4F, 0x52, 0x54, 0x00, 0x42, 0x4F, 0x52, 0x54, 0x53, 0x54, 0x00, 0x4A,
0x53, 0x54, 0x00, 0x4D, 0x59, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x53,
+0x61, 0x62, 0x61, 0x68, 0x20, 0x26, 0x20, 0x53, 0x61, 0x72, 0x61, 0x77, 0x61, 0x6B,
/* Asia/Kuwait */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4B, 0x57, 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, 0x08, 0xDA, 0x61, 0x35, 0x84,
0x01, 0x00, 0x00, 0x2C, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Macao */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x2A, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x92, 0xE6, 0x24, 0x04,
0xEF, 0x77, 0xD1, 0xB8, 0xF0, 0xA8, 0x4E, 0x28, 0xF1, 0x57, 0xB3, 0xB8, 0xF2, 0x88, 0x30, 0x28,
@@ -7966,10 +8281,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x00, 0x00,
0x6A, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x04, 0x00, 0x00, 0x70, 0x80, 0x00, 0x09,
0x00, 0x00, 0x70, 0x80, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x4F, 0x53, 0x54, 0x00, 0x4D,
-0x4F, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x4F, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Macau */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x4F, 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, 0x2A, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x92, 0xE6, 0x24, 0x04,
0xEF, 0x77, 0xD1, 0xB8, 0xF0, 0xA8, 0x4E, 0x28, 0xF1, 0x57, 0xB3, 0xB8, 0xF2, 0x88, 0x30, 0x28,
@@ -7987,10 +8303,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x00, 0x00,
0x6A, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x04, 0x00, 0x00, 0x70, 0x80, 0x00, 0x09,
0x00, 0x00, 0x70, 0x80, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x4F, 0x53, 0x54, 0x00, 0x4D,
-0x4F, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x4F, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Magadan */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0F, 0xAA, 0x19, 0x36, 0xA0,
0xB5, 0xA3, 0xA8, 0xE0, 0x15, 0x27, 0x37, 0x50, 0x16, 0x18, 0x6B, 0xC0, 0x17, 0x08, 0x6A, 0xD0,
@@ -8034,37 +8351,45 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xB0, 0x00, 0x04, 0x00, 0x00, 0xA8, 0xC0, 0x01, 0x09, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x09, 0x00,
0x00, 0x8C, 0xA0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x41, 0x47, 0x54, 0x00, 0x4D, 0x41,
0x47, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x13,
+0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x38, 0x20, 0x2D, 0x20, 0x4D, 0x61, 0x67, 0x61,
+0x64, 0x61, 0x6E,
/* Asia/Makassar */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x49, 0x44, 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, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0xA1, 0xF2, 0x5D, 0x90,
0xBA, 0x16, 0xD5, 0x90, 0xCB, 0x88, 0x1D, 0x80, 0xD2, 0x56, 0xEE, 0x70, 0x01, 0x02, 0x03, 0x02,
0x00, 0x00, 0x6F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6F, 0xF0, 0x00, 0x04, 0x00, 0x00, 0x70, 0x80,
0x00, 0x08, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x4D, 0x54, 0x00,
0x43, 0x49, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x3D, 0x65, 0x61, 0x73, 0x74,
+0x20, 0x26, 0x20, 0x73, 0x6F, 0x75, 0x74, 0x68, 0x20, 0x42, 0x6F, 0x72, 0x6E, 0x65, 0x6F, 0x2C,
+0x20, 0x43, 0x65, 0x6C, 0x65, 0x62, 0x65, 0x73, 0x2C, 0x20, 0x42, 0x61, 0x6C, 0x69, 0x2C, 0x20,
+0x4E, 0x75, 0x73, 0x61, 0x20, 0x54, 0x65, 0x6E, 0x67, 0x61, 0x72, 0x72, 0x61, 0x2C, 0x20, 0x77,
+0x65, 0x73, 0x74, 0x20, 0x54, 0x69, 0x6D, 0x6F, 0x72,
/* Asia/Manila */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x48, 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, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0xC1, 0x9C, 0xF4, 0x80,
0xC2, 0x16, 0x30, 0x70, 0xCB, 0xF2, 0xE7, 0x00, 0xD0, 0xA9, 0x25, 0x70, 0xE2, 0x6C, 0x39, 0x00,
0xE2, 0xD5, 0xA2, 0xF0, 0x0F, 0x75, 0x46, 0x80, 0x10, 0x66, 0x7A, 0xF0, 0x00, 0x01, 0x02, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x05,
0x00, 0x00, 0x7E, 0x90, 0x00, 0x09, 0x50, 0x48, 0x53, 0x54, 0x00, 0x50, 0x48, 0x54, 0x00, 0x4A,
-0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Muscat */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4F, 0x4D, 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, 0x08, 0xA1, 0xF2, 0x96, 0x94,
0x01, 0x00, 0x00, 0x36, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x47, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x47, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Nicosia */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0xA5, 0x77, 0x1E, 0xB8,
0x09, 0xED, 0xAF, 0xE0, 0x0A, 0xDD, 0x92, 0xD0, 0x0B, 0xFA, 0x64, 0xE0, 0x0C, 0xBE, 0xC6, 0x50,
@@ -8109,10 +8434,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x00, 0x00, 0x1F, 0x48, 0x00, 0x00, 0x00, 0x00, 0x2A,
0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00,
0x00, 0x2A, 0x30, 0x01, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45,
-0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Novosibirsk */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0F, 0xA1, 0xDB, 0x19, 0x24,
0xB5, 0xA3, 0xE1, 0x20, 0x15, 0x27, 0x6F, 0x90, 0x16, 0x18, 0xA4, 0x00, 0x17, 0x08, 0xA3, 0x10,
@@ -8157,10 +8483,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x62, 0x70, 0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 0x01, 0x09,
0x4C, 0x4D, 0x54, 0x00, 0x4E, 0x4F, 0x56, 0x54, 0x00, 0x4E, 0x4F, 0x56, 0x53, 0x54, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00,
+0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x17, 0x4D, 0x6F, 0x73,
+0x63, 0x6F, 0x77, 0x2B, 0x30, 0x33, 0x20, 0x2D, 0x20, 0x4E, 0x6F, 0x76, 0x6F, 0x73, 0x69, 0x62,
+0x69, 0x72, 0x73, 0x6B,
/* Asia/Omsk */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0F, 0xA1, 0xB3, 0x40, 0xB0,
0xB5, 0xA3, 0xEF, 0x30, 0x15, 0x27, 0x7D, 0xA0, 0x16, 0x18, 0xB2, 0x10, 0x17, 0x08, 0xB1, 0x20,
@@ -8204,10 +8532,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x60, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x01, 0x09, 0x00,
0x00, 0x46, 0x50, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x4F, 0x4D, 0x53, 0x54, 0x00, 0x4F, 0x4D,
0x53, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x18,
+0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x33, 0x20, 0x2D, 0x20, 0x77, 0x65, 0x73, 0x74,
+0x20, 0x53, 0x69, 0x62, 0x65, 0x72, 0x69, 0x61,
/* Asia/Oral */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4B, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x1A, 0xAA, 0x19, 0x93, 0xDC,
0xB5, 0xA3, 0xFD, 0x40, 0x15, 0x27, 0x8B, 0xB0, 0x16, 0x18, 0xC0, 0x20, 0x17, 0x08, 0xB1, 0x20,
@@ -8234,19 +8564,22 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x4D, 0x54, 0x00, 0x55, 0x52, 0x41, 0x54, 0x00, 0x55, 0x52, 0x41, 0x53, 0x54, 0x00, 0x4F, 0x52,
0x41, 0x53, 0x54, 0x00, 0x4F, 0x52, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00,
+0x0F, 0x57, 0x65, 0x73, 0x74, 0x20, 0x4B, 0x61, 0x7A, 0x61, 0x6B, 0x68, 0x73, 0x74, 0x61, 0x6E,
+
/* Asia/Phnom_Penh */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4B, 0x48, 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, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0C, 0x88, 0x6F, 0x44, 0x24,
0x91, 0x5F, 0xEE, 0xD0, 0x93, 0x85, 0xB1, 0x90, 0xB7, 0x41, 0xBC, 0x00, 0x01, 0x02, 0x03, 0x02,
0x00, 0x00, 0x62, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x63, 0xEC, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70,
0x00, 0x08, 0x00, 0x00, 0x70, 0x80, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00,
-0x49, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x49, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Pontianak */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x49, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x14, 0x8B, 0xFF, 0x8E, 0x00,
0xBA, 0x16, 0xDF, 0x00, 0xCB, 0x79, 0xA4, 0x08, 0xD2, 0x56, 0xEE, 0x70, 0xD7, 0x3C, 0xC6, 0x08,
@@ -8256,27 +8589,30 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x08, 0x00, 0x00, 0x70, 0x80, 0x00, 0x10, 0x00, 0x00, 0x62, 0x70, 0x00, 0x08, 0x4C, 0x4D,
0x54, 0x00, 0x50, 0x4D, 0x54, 0x00, 0x57, 0x49, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x43, 0x49,
0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x15, 0x77, 0x65, 0x73, 0x74,
+0x20, 0x26, 0x20, 0x63, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x42, 0x6F, 0x72, 0x6E, 0x65,
+0x6F,
/* Asia/Pyongyang */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4B, 0x50, 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, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x85, 0x93, 0x7E, 0x78,
0xB0, 0xFE, 0x8D, 0xF0, 0xB8, 0x84, 0xB4, 0x78, 0xE2, 0x4F, 0x29, 0xF0, 0xF0, 0x35, 0x78, 0x80,
0x01, 0x00, 0x01, 0x02, 0x01, 0x00, 0x00, 0x77, 0x88, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x00,
0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x00, 0x4B, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00,
+0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Qatar */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x51, 0x41, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xA1, 0xF2, 0x9D, 0x30,
0x04, 0x8A, 0x92, 0xC0, 0x01, 0x02, 0x00, 0x00, 0x30, 0x50, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40,
0x00, 0x04, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x47, 0x53, 0x54, 0x00,
-0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Qyzylorda */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4B, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1A, 0xAA, 0x19, 0x86, 0xA0,
0xB5, 0xA3, 0xFD, 0x40, 0x15, 0x27, 0x8B, 0xB0, 0x16, 0x18, 0xC0, 0x20, 0x17, 0x08, 0xB1, 0x20,
@@ -8302,35 +8638,41 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x14, 0x00, 0x00, 0x54, 0x60, 0x00, 0x0F, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x49, 0x5A, 0x54,
0x00, 0x4B, 0x49, 0x5A, 0x53, 0x54, 0x00, 0x51, 0x59, 0x5A, 0x54, 0x00, 0x51, 0x59, 0x5A, 0x53,
0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x20, 0x51, 0x79, 0x7A, 0x79, 0x6C, 0x6F, 0x72, 0x64, 0x61, 0x20,
+0x28, 0x4B, 0x79, 0x7A, 0x79, 0x6C, 0x6F, 0x72, 0x64, 0x61, 0x2C, 0x20, 0x4B, 0x7A, 0x79, 0x6C,
+0x2D, 0x4F, 0x72, 0x64, 0x61, 0x29,
/* Asia/Rangoon */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x4D, 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, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0xA1, 0xF2, 0x73, 0x5C,
0xCB, 0xF2, 0xFC, 0x18, 0xD1, 0x9A, 0x67, 0xF0, 0x01, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x24, 0x00,
0x00, 0x00, 0x00, 0x5B, 0x68, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x09, 0x00, 0x00, 0x5B,
0x68, 0x00, 0x0D, 0x52, 0x4D, 0x54, 0x00, 0x42, 0x55, 0x52, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00,
-0x4D, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x4D, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Riyadh */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x41, 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, 0x08, 0xDA, 0x61, 0x36, 0xB4,
0x01, 0x00, 0x00, 0x2B, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Saigon */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0C, 0x88, 0x6F, 0x42, 0x80,
0x91, 0x5F, 0xEE, 0xD0, 0x93, 0x85, 0xB1, 0x90, 0xB7, 0x41, 0xBC, 0x00, 0x01, 0x02, 0x03, 0x02,
0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0xEC, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70,
0x00, 0x08, 0x00, 0x00, 0x70, 0x80, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00,
-0x49, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x49, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Sakhalin */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x17, 0x86, 0xF0, 0xCD, 0xB8,
0xC3, 0xCE, 0x85, 0x70, 0xD2, 0x30, 0xB2, 0xF0, 0x15, 0x27, 0x37, 0x50, 0x16, 0x18, 0x6B, 0xC0,
@@ -8375,10 +8717,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xA8, 0xC0, 0x01, 0x0C, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x0C, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x12,
0x4C, 0x4D, 0x54, 0x00, 0x43, 0x4A, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x53, 0x41, 0x4B, 0x53,
0x54, 0x00, 0x53, 0x41, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x1B, 0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x37, 0x20, 0x2D,
+0x20, 0x53, 0x61, 0x6B, 0x68, 0x61, 0x6C, 0x69, 0x6E, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64,
+
/* Asia/Samarkand */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x1D, 0xAA, 0x19, 0x85, 0x60,
0xB5, 0xA3, 0xFD, 0x40, 0x15, 0x27, 0x8B, 0xB0, 0x16, 0x18, 0xC0, 0x20, 0x17, 0x08, 0xB1, 0x20,
@@ -8395,10 +8740,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x54, 0x60, 0x01, 0x18, 0x00, 0x00, 0x46, 0x50, 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x41,
0x4D, 0x54, 0x00, 0x53, 0x41, 0x4D, 0x53, 0x54, 0x00, 0x54, 0x41, 0x53, 0x54, 0x00, 0x55, 0x5A,
0x54, 0x00, 0x55, 0x5A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x77, 0x65, 0x73, 0x74, 0x20, 0x55, 0x7A, 0x62, 0x65,
+0x6B, 0x69, 0x73, 0x74, 0x61, 0x6E,
/* Asia/Seoul */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4B, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x08, 0x85, 0x93, 0x7E, 0x78,
0xB0, 0xFE, 0x8D, 0xF0, 0xB8, 0x84, 0xB4, 0x78, 0xE2, 0x4F, 0x29, 0xF0, 0xED, 0xE1, 0x92, 0x80,
@@ -8407,10 +8754,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x00, 0x01, 0x04, 0x01, 0x04, 0x01, 0x00, 0x00, 0x77, 0x88, 0x00, 0x00, 0x00, 0x00,
0x7E, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x04, 0x00, 0x00, 0x70, 0x80, 0x00, 0x00,
0x00, 0x00, 0x8C, 0xA0, 0x01, 0x04, 0x4B, 0x53, 0x54, 0x00, 0x4B, 0x44, 0x54, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Asia/Shanghai */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x4E, 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, 0x11, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xB0, 0xFE, 0x9A, 0xA0,
0xC8, 0x5C, 0x01, 0x80, 0xC8, 0xFA, 0x27, 0x70, 0xC9, 0xD5, 0x0E, 0x80, 0xCA, 0xDB, 0x5A, 0xF0,
@@ -8420,10 +8768,14 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0x00, 0x00, 0x71, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x04, 0x00, 0x00, 0x70,
0x80, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00,
+0x2F, 0x65, 0x61, 0x73, 0x74, 0x20, 0x43, 0x68, 0x69, 0x6E, 0x61, 0x20, 0x2D, 0x20, 0x42, 0x65,
+0x69, 0x6A, 0x69, 0x6E, 0x67, 0x2C, 0x20, 0x47, 0x75, 0x61, 0x6E, 0x67, 0x64, 0x6F, 0x6E, 0x67,
+0x2C, 0x20, 0x53, 0x68, 0x61, 0x6E, 0x67, 0x68, 0x61, 0x69, 0x2C, 0x20, 0x65, 0x74, 0x63, 0x2E,
+
/* Asia/Singapore */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x17, 0x86, 0x83, 0x85, 0xA3,
0xBA, 0x67, 0x4E, 0x90, 0xC0, 0x0A, 0xE4, 0x60, 0xCA, 0xB3, 0xE5, 0x60, 0xCB, 0x91, 0x5F, 0x08,
@@ -8433,10 +8785,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x0F, 0x00, 0x00, 0x69, 0x78, 0x00, 0x13, 0x00, 0x00,
0x70, 0x80, 0x00, 0x13, 0x53, 0x4D, 0x54, 0x00, 0x4D, 0x41, 0x4C, 0x54, 0x00, 0x4D, 0x41, 0x4C,
0x53, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x53, 0x47, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Taipei */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x57, 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, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xD1, 0x97, 0xD3, 0x00,
0xD2, 0x61, 0x7A, 0x70, 0xD3, 0x79, 0x06, 0x80, 0xD4, 0x42, 0xAD, 0xF0, 0xD5, 0x5A, 0x3A, 0x00,
@@ -8452,10 +8805,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04,
-0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Tashkent */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x18, 0xAA, 0x19, 0x83, 0x08,
0xB5, 0xA3, 0xEF, 0x30, 0x15, 0x27, 0x7D, 0xA0, 0x16, 0x18, 0xB2, 0x10, 0x17, 0x08, 0xB1, 0x20,
@@ -8472,10 +8826,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x54, 0x60, 0x01, 0x13, 0x00, 0x00, 0x46, 0x50, 0x00, 0x0F, 0x4C, 0x4D, 0x54, 0x00, 0x54, 0x41,
0x53, 0x54, 0x00, 0x54, 0x41, 0x53, 0x53, 0x54, 0x00, 0x55, 0x5A, 0x54, 0x00, 0x55, 0x5A, 0x53,
0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00,
+0x00, 0x0F, 0x65, 0x61, 0x73, 0x74, 0x20, 0x55, 0x7A, 0x62, 0x65, 0x6B, 0x69, 0x73, 0x74, 0x61,
+0x6E,
/* Asia/Tbilisi */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x19, 0xAA, 0x19, 0x99, 0xFC,
0xE7, 0xDA, 0x0C, 0x50, 0x15, 0x27, 0x99, 0xC0, 0x16, 0x18, 0xCE, 0x30, 0x17, 0x08, 0xCD, 0x40,
@@ -8501,10 +8857,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x10, 0x00, 0x00, 0x46, 0x50, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x00, 0x10, 0x54, 0x42, 0x4D,
0x54, 0x00, 0x54, 0x42, 0x49, 0x54, 0x00, 0x54, 0x42, 0x49, 0x53, 0x54, 0x00, 0x47, 0x45, 0x54,
0x00, 0x47, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89,
+0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Tehran */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x49, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0x9A, 0x6C, 0x7D, 0xC8,
0xD2, 0xDB, 0x12, 0xC8, 0x0E, 0xBB, 0xA2, 0x48, 0x0F, 0x74, 0x2D, 0x40, 0x10, 0x8E, 0x40, 0x30,
@@ -8542,10 +8899,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x08, 0x00, 0x00, 0x46, 0x50, 0x01, 0x0D, 0x00, 0x00, 0x38, 0x40, 0x00, 0x08, 0x00, 0x00,
0x3F, 0x48, 0x01, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x54, 0x4D, 0x54, 0x00, 0x49, 0x52, 0x53, 0x54,
0x00, 0x49, 0x52, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00,
+0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Tel_Aviv */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x8E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x9E, 0x30, 0x45, 0x88,
0xC8, 0x59, 0xB2, 0xE0, 0xCC, 0xE5, 0xC1, 0x50, 0xCD, 0xAC, 0xFE, 0x00, 0xCE, 0xC6, 0xF4, 0xD0,
@@ -8595,46 +8952,49 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x02, 0x00, 0x00, 0x20, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00,
0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0C, 0x4A, 0x4D, 0x54, 0x00, 0x49, 0x44,
0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x49, 0x44, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Thimbu */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xD5, 0xE6, 0x15, 0x74,
0x21, 0x61, 0x4D, 0xA8, 0x01, 0x02, 0x00, 0x00, 0x54, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x58,
0x00, 0x04, 0x00, 0x00, 0x54, 0x60, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00,
-0x42, 0x54, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x42, 0x54, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Thimphu */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x54, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xD5, 0xE6, 0x15, 0x74,
0x21, 0x61, 0x4D, 0xA8, 0x01, 0x02, 0x00, 0x00, 0x54, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x58,
0x00, 0x04, 0x00, 0x00, 0x54, 0x60, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00,
-0x42, 0x54, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x42, 0x54, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Tokyo */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4A, 0x50, 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, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xC3, 0xCE, 0x85, 0x70,
0xD7, 0x3E, 0x1E, 0x90, 0xD7, 0xEC, 0x16, 0x80, 0xD8, 0xF9, 0x16, 0x90, 0xD9, 0xCB, 0xF8, 0x80,
0xDB, 0x07, 0x1D, 0x10, 0xDB, 0xAB, 0xDA, 0x80, 0xDC, 0xE6, 0xFF, 0x10, 0xDD, 0x8B, 0xBC, 0x80,
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x00, 0x00,
0x00, 0x8C, 0xA0, 0x01, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x08, 0x43, 0x4A, 0x54, 0x00, 0x4A,
-0x44, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x44, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Ujung_Pandang */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0xA1, 0xF2, 0x5D, 0x90,
0xBA, 0x16, 0xD5, 0x90, 0xCB, 0x88, 0x1D, 0x80, 0xD2, 0x56, 0xEE, 0x70, 0x01, 0x02, 0x03, 0x02,
0x00, 0x00, 0x6F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6F, 0xF0, 0x00, 0x04, 0x00, 0x00, 0x70, 0x80,
0x00, 0x08, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x4D, 0x54, 0x00,
0x43, 0x49, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Ulaanbaatar */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x4E, 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, 0x2E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0F, 0x86, 0xD3, 0xEE, 0x4C,
0x0F, 0x0B, 0xDC, 0x90, 0x18, 0xE9, 0xC8, 0x80, 0x19, 0xDA, 0xFC, 0xF0, 0x1A, 0xCC, 0x4D, 0x80,
@@ -8654,10 +9014,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x00, 0x00, 0x64, 0x34, 0x00, 0x00, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x00, 0x00,
0x7E, 0x90, 0x01, 0x09, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x55, 0x4C,
0x41, 0x54, 0x00, 0x55, 0x4C, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00,
+0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0E, 0x6D, 0x6F, 0x73,
+0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73,
/* Asia/Ulan_Bator */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x2E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0F, 0x86, 0xD3, 0xEE, 0x4C,
0x0F, 0x0B, 0xDC, 0x90, 0x18, 0xE9, 0xC8, 0x80, 0x19, 0xDA, 0xFC, 0xF0, 0x1A, 0xCC, 0x4D, 0x80,
@@ -8677,10 +9038,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x00, 0x00, 0x64, 0x34, 0x00, 0x00, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x00, 0x00,
0x7E, 0x90, 0x01, 0x09, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x55, 0x4C,
0x41, 0x54, 0x00, 0x55, 0x4C, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00,
+0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Urumqi */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x4E, 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, 0x0E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0xB0, 0xFE, 0xBA, 0x64,
0x13, 0x6D, 0xD7, 0x20, 0x1E, 0xBA, 0x36, 0x00, 0x1F, 0x69, 0x7F, 0x70, 0x20, 0x7E, 0x68, 0x80,
@@ -8690,19 +9051,22 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x00, 0x00, 0x52, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x00, 0x00,
0x7E, 0x90, 0x01, 0x09, 0x00, 0x00, 0x70, 0x80, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x55, 0x52,
0x55, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x18, 0x6D,
+0x6F, 0x73, 0x74, 0x20, 0x6F, 0x66, 0x20, 0x54, 0x69, 0x62, 0x65, 0x74, 0x20, 0x26, 0x20, 0x58,
+0x69, 0x6E, 0x6A, 0x69, 0x61, 0x6E, 0x67,
/* Asia/Vientiane */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4C, 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, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0C, 0x88, 0x6F, 0x46, 0x50,
0x91, 0x5F, 0xEE, 0xD0, 0x93, 0x85, 0xB1, 0x90, 0xB7, 0x41, 0xBC, 0x00, 0x01, 0x02, 0x03, 0x02,
0x00, 0x00, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x63, 0xEC, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70,
0x00, 0x08, 0x00, 0x00, 0x70, 0x80, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00,
-0x49, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x49, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Asia/Vladivostok */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0xA7, 0x59, 0x47, 0x50,
0xB5, 0xA3, 0xB6, 0xF0, 0x15, 0x27, 0x45, 0x60, 0x16, 0x18, 0x79, 0xD0, 0x17, 0x08, 0x78, 0xE0,
@@ -8746,10 +9110,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xA0, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x09, 0x00, 0x00, 0x8C, 0xA0, 0x01, 0x0F, 0x00,
0x00, 0x7E, 0x90, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x56, 0x4C, 0x41, 0x54, 0x00, 0x56, 0x4C,
0x41, 0x53, 0x54, 0x00, 0x56, 0x4C, 0x41, 0x53, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x16, 0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x37,
+0x20, 0x2D, 0x20, 0x41, 0x6D, 0x75, 0x72, 0x20, 0x52, 0x69, 0x76, 0x65, 0x72,
/* Asia/Yakutsk */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0F, 0xA1, 0xDB, 0xEA, 0x70,
0xB5, 0xA3, 0xC5, 0x00, 0x15, 0x27, 0x53, 0x70, 0x16, 0x18, 0x87, 0xE0, 0x17, 0x08, 0x86, 0xF0,
@@ -8793,10 +9159,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x90, 0x00, 0x04, 0x00, 0x00, 0x8C, 0xA0, 0x01, 0x09, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x09, 0x00,
0x00, 0x70, 0x80, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x59, 0x41, 0x4B, 0x54, 0x00, 0x59, 0x41,
0x4B, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x16,
+0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x36, 0x20, 0x2D, 0x20, 0x4C, 0x65, 0x6E, 0x61,
+0x20, 0x52, 0x69, 0x76, 0x65, 0x72,
/* Asia/Yekaterinburg */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1A, 0xA1, 0x12, 0xAD, 0xF0,
0xB5, 0xA3, 0xFD, 0x40, 0x15, 0x27, 0x8B, 0xB0, 0x16, 0x18, 0xC0, 0x20, 0x17, 0x08, 0xBF, 0x30,
@@ -8842,10 +9210,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x15, 0x00, 0x00, 0x54, 0x60, 0x01, 0x0F, 0x00, 0x00, 0x46, 0x50, 0x00, 0x15, 0x4C, 0x4D, 0x54,
0x00, 0x53, 0x56, 0x45, 0x54, 0x00, 0x53, 0x56, 0x45, 0x53, 0x54, 0x00, 0x59, 0x45, 0x4B, 0x53,
0x54, 0x00, 0x59, 0x45, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00,
-0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x11, 0x4D, 0x6F, 0x73, 0x63, 0x6F,
+0x77, 0x2B, 0x30, 0x32, 0x20, 0x2D, 0x20, 0x55, 0x72, 0x61, 0x6C, 0x73,
/* Asia/Yerevan */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x18, 0xAA, 0x19, 0x9A, 0x48,
0xE7, 0xDA, 0x0C, 0x50, 0x15, 0x27, 0x99, 0xC0, 0x16, 0x18, 0xCE, 0x30, 0x17, 0x08, 0xCD, 0x40,
@@ -8892,10 +9262,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x38, 0x40, 0x00, 0x0F, 0x4C, 0x4D, 0x54, 0x00, 0x59, 0x45, 0x52, 0x54, 0x00, 0x59, 0x45, 0x52,
0x53, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x41, 0x4D, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Atlantic/Azores */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xDC, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x19, 0x91, 0xC1, 0xFC, 0x58,
0x9B, 0x4B, 0x89, 0x90, 0x9B, 0xFE, 0xE3, 0xA0, 0x9C, 0x9D, 0x09, 0x90, 0x9D, 0xC9, 0x9F, 0x90,
@@ -8974,10 +9345,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x48, 0x4D, 0x54, 0x00, 0x41, 0x5A, 0x4F, 0x53, 0x54, 0x00, 0x41, 0x5A, 0x4F, 0x54, 0x00, 0x41,
0x5A, 0x4F, 0x4D, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x01,
+0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x06, 0x41, 0x7A, 0x6F,
+0x72, 0x65, 0x73,
/* Atlantic/Bermuda */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x4D, 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, 0x81, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xB4, 0xC3, 0x1D, 0xD8,
0x08, 0x20, 0xB3, 0x60, 0x09, 0x10, 0x96, 0x50, 0x0A, 0x00, 0x95, 0x60, 0x0A, 0xF0, 0x78, 0x50,
@@ -9022,10 +9394,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02,
0x01, 0xFF, 0xFF, 0xC3, 0x48, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5,
0xD0, 0x01, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00,
+0x00,
/* Atlantic/Canary */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA6, 0x04, 0x5C, 0xF0,
0xD4, 0x41, 0xF7, 0x20, 0x13, 0x4D, 0x36, 0x00, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90,
@@ -9068,19 +9441,22 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10,
0x01, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x0D, 0x4C, 0x4D,
0x54, 0x00, 0x43, 0x41, 0x4E, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0E, 0x43, 0x61, 0x6E, 0x61, 0x72, 0x79, 0x20, 0x49,
+0x73, 0x6C, 0x61, 0x6E, 0x64, 0x73,
/* Atlantic/Cape_Verde */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x56, 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, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0D, 0x89, 0x7F, 0x51, 0x8C,
0xCC, 0x95, 0x9C, 0x20, 0xD2, 0x74, 0x7C, 0x10, 0x0B, 0x17, 0xF7, 0x40, 0x01, 0x02, 0x01, 0x03,
0xFF, 0xFF, 0xE9, 0xF4, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x04, 0xFF, 0xFF, 0xF1, 0xF0,
0x01, 0x08, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x56, 0x54, 0x00,
-0x43, 0x56, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x43, 0x56, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Atlantic/Faeroe */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x73, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0D, 0x8B, 0x6D, 0xA4, 0x58,
0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90,
@@ -9121,10 +9497,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0xFF, 0xFF, 0xF9, 0xA8, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00,
-0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Atlantic/Faroe */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x46, 0x4F, 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, 0x73, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0D, 0x8B, 0x6D, 0xA4, 0x58,
0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90,
@@ -9165,10 +9542,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0xFF, 0xFF, 0xF9, 0xA8, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00,
-0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Atlantic/Jan_Mayen */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x27, 0xE3, 0x00,
0x9B, 0xD4, 0x7B, 0x60, 0xC8, 0xB7, 0x4D, 0x60, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90,
@@ -9218,10 +9596,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00,
0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00,
0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00,
+0x00, 0x00,
/* Atlantic/Madeira */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xDC, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x1E, 0x91, 0xC1, 0xF1, 0x58,
0x9B, 0x4B, 0x7B, 0x80, 0x9B, 0xFE, 0xD5, 0x90, 0x9C, 0x9C, 0xFB, 0x80, 0x9D, 0xC9, 0x91, 0x80,
@@ -9299,10 +9678,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x15, 0x46, 0x4D, 0x54, 0x00, 0x4D, 0x41,
0x44, 0x53, 0x54, 0x00, 0x4D, 0x41, 0x44, 0x54, 0x00, 0x4D, 0x41, 0x44, 0x4D, 0x54, 0x00, 0x57,
0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01,
-0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89,
+0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x4D, 0x61, 0x64, 0x65, 0x69, 0x72,
+0x61, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x73,
/* Atlantic/Reykjavik */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x49, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0x8B, 0x60, 0x83, 0x94,
0x9C, 0x91, 0x1E, 0x00, 0x9D, 0xD1, 0x88, 0x90, 0x9E, 0x72, 0x51, 0x80, 0x9F, 0xD5, 0x03, 0x10,
@@ -9328,16 +9709,18 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x09, 0x00, 0x00,
0x00, 0x00, 0x01, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D,
0x52, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x53, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Atlantic/South_Georgia */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0xE3, 0xE0,
-0x00, 0x00, 0x47, 0x53, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Atlantic/Stanley */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x46, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0x93, 0x44, 0x5F, 0x3C,
0xC3, 0x4F, 0x5A, 0xC0, 0xC4, 0x36, 0x03, 0x30, 0xC5, 0x2F, 0x3C, 0xC0, 0xC6, 0x15, 0xE5, 0x30,
@@ -9381,17 +9764,19 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x02, 0x01, 0xFF, 0xFF, 0xC9, 0xC4, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF,
0xFF, 0xC7, 0xC0, 0x00, 0x09, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00,
0x09, 0x53, 0x4D, 0x54, 0x00, 0x46, 0x4B, 0x53, 0x54, 0x00, 0x46, 0x4B, 0x54, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Atlantic/St_Helena */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x48, 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, 0x08, 0xDC, 0x42, 0x9B, 0x58,
0x01, 0xFF, 0xFF, 0xFA, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x4A, 0x4D, 0x54,
-0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Australia/ACT */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x8D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xA6, 0x9C,
0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80,
@@ -9440,10 +9825,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x9A,
0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00,
0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
-0x00,
+0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Australia/Adelaide */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x55, 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, 0x8D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xAD, 0xA4,
0x9C, 0xBC, 0x27, 0xF8, 0xCB, 0x54, 0xBA, 0x08, 0xCB, 0xC7, 0x5E, 0x78, 0xCC, 0xB7, 0x5D, 0x88,
@@ -9492,10 +9877,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x93,
0xA8, 0x01, 0x00, 0x00, 0x00, 0x85, 0x98, 0x00, 0x00, 0x00, 0x00, 0x93, 0xA8, 0x01, 0x00, 0x00,
0x00, 0x85, 0x98, 0x00, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
-0x00,
+0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x53, 0x6F, 0x75,
+0x74, 0x68, 0x20, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61, 0x6C, 0x69, 0x61,
/* Australia/Brisbane */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x55, 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, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xA6, 0x9C,
0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80,
@@ -9505,10 +9891,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x9A, 0xB0,
0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 0x00,
0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
-
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1B, 0x51, 0x75, 0x65, 0x65,
+0x6E, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x20, 0x2D, 0x20, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F,
+0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73,
/* Australia/Broken_Hill */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x55, 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, 0x8E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xAD, 0xA4,
0x9C, 0xBC, 0x27, 0xF8, 0xCB, 0x54, 0xBA, 0x08, 0xCB, 0xC7, 0x5E, 0x78, 0xCC, 0xB7, 0x5D, 0x88,
@@ -9557,10 +9945,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02,
0x03, 0x02, 0x00, 0x00, 0x93, 0xA8, 0x01, 0x00, 0x00, 0x00, 0x85, 0x98, 0x00, 0x00, 0x00, 0x00,
0x93, 0xA8, 0x01, 0x00, 0x00, 0x00, 0x85, 0x98, 0x00, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00,
-0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00,
+0x00, 0x1C, 0x4E, 0x65, 0x77, 0x20, 0x53, 0x6F, 0x75, 0x74, 0x68, 0x20, 0x57, 0x61, 0x6C, 0x65,
+0x73, 0x20, 0x2D, 0x20, 0x59, 0x61, 0x6E, 0x63, 0x6F, 0x77, 0x69, 0x6E, 0x6E, 0x61,
/* Australia/Canberra */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x8D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xA6, 0x9C,
0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80,
@@ -9609,10 +9999,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x9A,
0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00,
0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
-0x00,
+0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Australia/Currie */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x55, 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, 0x8D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9B, 0xD5, 0x78, 0x80,
0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80,
@@ -9661,19 +10051,23 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x8C,
0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00,
0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
-0x00,
+0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x16, 0x54, 0x61, 0x73,
+0x6D, 0x61, 0x6E, 0x69, 0x61, 0x20, 0x2D, 0x20, 0x4B, 0x69, 0x6E, 0x67, 0x20, 0x49, 0x73, 0x6C,
+0x61, 0x6E, 0x64,
/* Australia/Darwin */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x55, 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, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xAD, 0xA4,
0x9C, 0xBC, 0x27, 0xF8, 0xCB, 0x54, 0xBA, 0x08, 0xCB, 0xC7, 0x5E, 0x78, 0xCC, 0xB7, 0x5D, 0x88,
0xCD, 0xA7, 0x40, 0x78, 0xCE, 0xA0, 0x7A, 0x08, 0xCF, 0x87, 0x22, 0x78, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x93, 0xA8, 0x01, 0x00, 0x00, 0x00, 0x85, 0x98, 0x00, 0x00,
-0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x12, 0x4E, 0x6F, 0x72, 0x74, 0x68, 0x65, 0x72, 0x6E, 0x20, 0x54, 0x65, 0x72,
+0x72, 0x69, 0x74, 0x6F, 0x72, 0x79,
/* Australia/Eucla */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x55, 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, 0x12, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x9C, 0x4E, 0xB8, 0x30,
0x9C, 0xBC, 0x32, 0x84, 0xCB, 0x54, 0xC4, 0x94, 0xCB, 0xC7, 0x69, 0x04, 0xCC, 0xB7, 0x68, 0x14,
@@ -9683,10 +10077,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x49, 0xCE, 0x5B, 0x14, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x89, 0x1C, 0x01, 0x00, 0x00, 0x00, 0x7B, 0x0C,
0x00, 0x00, 0x00, 0x00, 0x89, 0x1C, 0x01, 0x00, 0x00, 0x00, 0x7B, 0x0C, 0x00, 0x00, 0x43, 0x57,
-0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1E, 0x57, 0x65, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x41,
+0x75, 0x73, 0x74, 0x72, 0x61, 0x6C, 0x69, 0x61, 0x20, 0x2D, 0x20, 0x45, 0x75, 0x63, 0x6C, 0x61,
+0x20, 0x61, 0x72, 0x65, 0x61,
/* Australia/Hobart */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x55, 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, 0x95, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9B, 0xD5, 0x78, 0x80,
0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80,
@@ -9737,10 +10134,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01,
0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54,
-0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x19, 0x54, 0x61, 0x73, 0x6D, 0x61, 0x6E, 0x69, 0x61, 0x20, 0x2D, 0x20,
+0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73,
/* Australia/LHI */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x72, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0x14, 0xFE, 0x66, 0xE0,
0x16, 0x38, 0x40, 0xF8, 0x16, 0xE7, 0x8A, 0x68, 0x18, 0x21, 0x5D, 0x78, 0x18, 0xC7, 0x6C, 0x68,
@@ -9780,10 +10179,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xB8,
0x01, 0x04, 0x00, 0x00, 0x93, 0xA8, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x04, 0x45, 0x53,
-0x54, 0x00, 0x4C, 0x48, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x54, 0x00, 0x4C, 0x48, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Australia/Lindeman */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x55, 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, 0x15, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xA6, 0x9C,
0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80,
@@ -9794,10 +10194,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x01, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00,
0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54,
-0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x1C, 0x51, 0x75, 0x65, 0x65, 0x6E, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x20,
+0x2D, 0x20, 0x48, 0x6F, 0x6C, 0x69, 0x64, 0x61, 0x79, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64,
+0x73,
/* Australia/Lord_Howe */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x55, 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, 0x72, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0x14, 0xFE, 0x66, 0xE0,
0x16, 0x38, 0x40, 0xF8, 0x16, 0xE7, 0x8A, 0x68, 0x18, 0x21, 0x5D, 0x78, 0x18, 0xC7, 0x6C, 0x68,
@@ -9837,10 +10240,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xB8,
0x01, 0x04, 0x00, 0x00, 0x93, 0xA8, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x04, 0x45, 0x53,
-0x54, 0x00, 0x4C, 0x48, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x54, 0x00, 0x4C, 0x48, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x10, 0x4C, 0x6F, 0x72, 0x64, 0x20,
+0x48, 0x6F, 0x77, 0x65, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64,
/* Australia/Melbourne */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x55, 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, 0x8D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xA6, 0x9C,
0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80,
@@ -9889,19 +10294,21 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x9A,
0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00,
0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
-0x00,
+0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x08, 0x56, 0x69, 0x63,
+0x74, 0x6F, 0x72, 0x69, 0x61,
/* Australia/North */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xAD, 0xA4,
0x9C, 0xBC, 0x27, 0xF8, 0xCB, 0x54, 0xBA, 0x08, 0xCB, 0xC7, 0x5E, 0x78, 0xCC, 0xB7, 0x5D, 0x88,
0xCD, 0xA7, 0x40, 0x78, 0xCE, 0xA0, 0x7A, 0x08, 0xCF, 0x87, 0x22, 0x78, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x93, 0xA8, 0x01, 0x00, 0x00, 0x00, 0x85, 0x98, 0x00, 0x00,
-0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Australia/NSW */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x8D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xA6, 0x9C,
0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80,
@@ -9950,10 +10357,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x9A,
0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00,
0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
-0x00,
+0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Australia/Perth */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x55, 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, 0x12, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xC2, 0xBC,
0x9C, 0xBC, 0x3D, 0x10, 0xCB, 0x54, 0xCF, 0x20, 0xCB, 0xC7, 0x73, 0x90, 0xCC, 0xB7, 0x72, 0xA0,
@@ -9963,10 +10370,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x49, 0xCE, 0x65, 0xA0, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x00, 0x00, 0x00, 0x70, 0x80,
0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x00, 0x57, 0x53,
-0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x22, 0x57, 0x65, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x41, 0x75,
+0x73, 0x74, 0x72, 0x61, 0x6C, 0x69, 0x61, 0x20, 0x2D, 0x20, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C,
+0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73,
/* Australia/Queensland */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xA6, 0x9C,
0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80,
@@ -9976,10 +10386,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x9A, 0xB0,
0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 0x00,
0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
-
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Australia/South */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x8D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xAD, 0xA4,
0x9C, 0xBC, 0x27, 0xF8, 0xCB, 0x54, 0xBA, 0x08, 0xCB, 0xC7, 0x5E, 0x78, 0xCC, 0xB7, 0x5D, 0x88,
@@ -10028,10 +10438,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x93,
0xA8, 0x01, 0x00, 0x00, 0x00, 0x85, 0x98, 0x00, 0x00, 0x00, 0x00, 0x93, 0xA8, 0x01, 0x00, 0x00,
0x00, 0x85, 0x98, 0x00, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
-0x00,
+0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Australia/Sydney */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x55, 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, 0x8D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xA6, 0x9C,
0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80,
@@ -10080,10 +10490,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x9A,
0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00,
0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
-0x00,
+0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x20, 0x4E, 0x65, 0x77,
+0x20, 0x53, 0x6F, 0x75, 0x74, 0x68, 0x20, 0x57, 0x61, 0x6C, 0x65, 0x73, 0x20, 0x2D, 0x20, 0x6D,
+0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73,
/* Australia/Tasmania */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x95, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9B, 0xD5, 0x78, 0x80,
0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80,
@@ -10134,10 +10546,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01,
0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54,
-0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Australia/Victoria */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x8D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xA6, 0x9C,
0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80,
@@ -10186,10 +10599,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x9A,
0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00,
0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
-0x00,
+0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Australia/West */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x12, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xC2, 0xBC,
0x9C, 0xBC, 0x3D, 0x10, 0xCB, 0x54, 0xCF, 0x20, 0xCB, 0xC7, 0x73, 0x90, 0xCC, 0xB7, 0x72, 0xA0,
@@ -10199,10 +10612,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x49, 0xCE, 0x65, 0xA0, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x00, 0x00, 0x00, 0x70, 0x80,
0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x00, 0x57, 0x53,
-0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Australia/Yancowinna */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x8E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xAD, 0xA4,
0x9C, 0xBC, 0x27, 0xF8, 0xCB, 0x54, 0xBA, 0x08, 0xCB, 0xC7, 0x5E, 0x78, 0xCC, 0xB7, 0x5D, 0x88,
@@ -10251,12 +10665,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02,
0x03, 0x02, 0x00, 0x00, 0x93, 0xA8, 0x01, 0x00, 0x00, 0x00, 0x85, 0x98, 0x00, 0x00, 0x00, 0x00,
0x93, 0xA8, 0x01, 0x00, 0x00, 0x00, 0x85, 0x98, 0x00, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00,
-0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00,
+0x00, 0x00,
/* Brazil/Acre */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 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, 0x1D, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x86, 0x90,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x1E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x96, 0xAA, 0x86, 0x90,
0xB8, 0x0F, 0x66, 0x00, 0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xF1, 0x50, 0x50, 0xBA, 0xDE, 0x90, 0x40,
0xDA, 0x38, 0xCA, 0x50, 0xDA, 0xEC, 0x16, 0x50, 0xDC, 0x19, 0xFD, 0xD0, 0xDC, 0xB9, 0x75, 0x40,
0xDD, 0xFB, 0x31, 0x50, 0xDE, 0x9B, 0xFA, 0x40, 0xDF, 0xDD, 0xB6, 0x50, 0xE0, 0x54, 0x4F, 0x40,
@@ -10264,14 +10679,15 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xF8, 0x51, 0x48, 0x50, 0xF8, 0xC7, 0xE1, 0x40, 0xFA, 0x0A, 0xEE, 0xD0, 0xFA, 0xA9, 0x14, 0xC0,
0xFB, 0xEC, 0x22, 0x50, 0xFC, 0x8B, 0x99, 0xC0, 0x1D, 0xC9, 0xAA, 0x50, 0x1E, 0x78, 0xF3, 0xC0,
0x1F, 0xA0, 0x51, 0xD0, 0x20, 0x33, 0xEB, 0xC0, 0x21, 0x81, 0x85, 0x50, 0x22, 0x0B, 0xE4, 0xC0,
+0x48, 0x60, 0x7F, 0x50, 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, 0xC0,
-0x70, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0x4C,
-0x4D, 0x54, 0x00, 0x41, 0x43, 0x53, 0x54, 0x00, 0x41, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00,
+0x02, 0x03, 0xFF, 0xFF, 0xC0, 0x70, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF,
+0xB9, 0xB0, 0x00, 0x09, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x43,
+0x53, 0x54, 0x00, 0x41, 0x43, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Brazil/DeNoronha */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x27, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x65, 0x64,
0xB8, 0x0F, 0x3B, 0xD0, 0xB8, 0xFD, 0x32, 0x90, 0xB9, 0xF1, 0x26, 0x20, 0xBA, 0xDE, 0x66, 0x10,
@@ -10288,10 +10704,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF,
0xFF, 0xE1, 0x9C, 0x00, 0x00, 0xFF, 0xFF, 0xF1, 0xF0, 0x01, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, 0x00,
0x09, 0x4C, 0x4D, 0x54, 0x00, 0x46, 0x4E, 0x53, 0x54, 0x00, 0x46, 0x4E, 0x54, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
+
/* Brazil/East */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x80, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x72, 0xB4,
0xB8, 0x0F, 0x49, 0xE0, 0xB8, 0xFD, 0x40, 0xA0, 0xB9, 0xF1, 0x34, 0x30, 0xBA, 0xDE, 0x74, 0x20,
@@ -10311,21 +10728,21 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x3D, 0xC4, 0x91, 0x30, 0x3E, 0x4E, 0xF0, 0xA0, 0x3F, 0x91, 0xFE, 0x30, 0x40, 0x2E, 0xD2, 0xA0,
0x41, 0x86, 0xF8, 0x30, 0x42, 0x17, 0xEF, 0x20, 0x43, 0x51, 0xC2, 0x30, 0x43, 0xF7, 0xD1, 0x20,
0x45, 0x4D, 0x53, 0xB0, 0x45, 0xE0, 0xED, 0xA0, 0x47, 0x11, 0x86, 0x30, 0x47, 0xB7, 0x95, 0x20,
-0x48, 0xF1, 0x68, 0x30, 0x49, 0x97, 0x77, 0x20, 0x4A, 0xD1, 0x4A, 0x30, 0x4B, 0x80, 0x93, 0xA0,
-0x4C, 0xB1, 0x2C, 0x30, 0x4D, 0x60, 0x75, 0xA0, 0x4E, 0x91, 0x0E, 0x30, 0x4F, 0x40, 0x57, 0xA0,
-0x50, 0x7A, 0x2A, 0xB0, 0x51, 0x20, 0x39, 0xA0, 0x52, 0x5A, 0x0C, 0xB0, 0x53, 0x00, 0x1B, 0xA0,
-0x54, 0x39, 0xEE, 0xB0, 0x54, 0xDF, 0xFD, 0xA0, 0x56, 0x19, 0xD0, 0xB0, 0x56, 0xC9, 0x1A, 0x20,
-0x57, 0xF9, 0xB2, 0xB0, 0x58, 0xA8, 0xFC, 0x20, 0x59, 0xD9, 0x94, 0xB0, 0x5A, 0x88, 0xDE, 0x20,
-0x5B, 0xC2, 0xB1, 0x30, 0x5C, 0x68, 0xC0, 0x20, 0x5D, 0xA2, 0x93, 0x30, 0x5E, 0x48, 0xA2, 0x20,
-0x5F, 0x82, 0x75, 0x30, 0x60, 0x31, 0xBE, 0xA0, 0x61, 0x62, 0x57, 0x30, 0x62, 0x11, 0xA0, 0xA0,
-0x63, 0x42, 0x39, 0x30, 0x63, 0xF1, 0x82, 0xA0, 0x65, 0x22, 0x1B, 0x30, 0x65, 0xD1, 0x64, 0xA0,
-0x67, 0x0B, 0x37, 0xB0, 0x67, 0xB1, 0x46, 0xA0, 0x68, 0xEB, 0x19, 0xB0, 0x69, 0x91, 0x28, 0xA0,
-0x6A, 0xCA, 0xFB, 0xB0, 0x6B, 0x7A, 0x45, 0x20, 0x6C, 0xAA, 0xDD, 0xB0, 0x6D, 0x5A, 0x27, 0x20,
-0x6E, 0x8A, 0xBF, 0xB0, 0x6F, 0x3A, 0x09, 0x20, 0x70, 0x73, 0xDC, 0x30, 0x71, 0x19, 0xEB, 0x20,
-0x72, 0x53, 0xBE, 0x30, 0x72, 0xF9, 0xCD, 0x20, 0x74, 0x33, 0xA0, 0x30, 0x74, 0xD9, 0xAF, 0x20,
-0x76, 0x13, 0x82, 0x30, 0x76, 0xC2, 0xCB, 0xA0, 0x77, 0xF3, 0x64, 0x30, 0x78, 0xA2, 0xAD, 0xA0,
-0x79, 0xD3, 0x46, 0x30, 0x7A, 0x82, 0x8F, 0xA0, 0x7B, 0xBC, 0x62, 0xB0, 0x7C, 0x62, 0x71, 0xA0,
-0x7D, 0x9C, 0x44, 0xB0, 0x7E, 0x42, 0x53, 0xA0, 0x7F, 0x7C, 0x26, 0xB0, 0x02, 0x01, 0x02, 0x01,
+0x48, 0xFA, 0xA2, 0xB0, 0x49, 0x97, 0x77, 0x20, 0x4A, 0xDA, 0x84, 0xB0, 0x4B, 0x80, 0x93, 0xA0,
+0x4C, 0xBA, 0x66, 0xB0, 0x4D, 0x60, 0x75, 0xA0, 0x4E, 0x9A, 0x48, 0xB0, 0x4F, 0x49, 0x92, 0x20,
+0x50, 0x83, 0x65, 0x30, 0x51, 0x20, 0x39, 0xA0, 0x52, 0x63, 0x47, 0x30, 0x53, 0x00, 0x1B, 0xA0,
+0x54, 0x43, 0x29, 0x30, 0x54, 0xE9, 0x38, 0x20, 0x56, 0x23, 0x0B, 0x30, 0x56, 0xC9, 0x1A, 0x20,
+0x58, 0x02, 0xED, 0x30, 0x58, 0xA8, 0xFC, 0x20, 0x59, 0xE2, 0xCF, 0x30, 0x5A, 0x88, 0xDE, 0x20,
+0x5B, 0xCB, 0xEB, 0xB0, 0x5C, 0x68, 0xC0, 0x20, 0x5D, 0xAB, 0xCD, 0xB0, 0x5E, 0x48, 0xA2, 0x20,
+0x5F, 0x8B, 0xAF, 0xB0, 0x60, 0x31, 0xBE, 0xA0, 0x61, 0x6B, 0x91, 0xB0, 0x62, 0x11, 0xA0, 0xA0,
+0x63, 0x4B, 0x73, 0xB0, 0x63, 0xFA, 0xBD, 0x20, 0x65, 0x2B, 0x55, 0xB0, 0x65, 0xD1, 0x64, 0xA0,
+0x67, 0x14, 0x72, 0x30, 0x67, 0xB1, 0x46, 0xA0, 0x68, 0xF4, 0x54, 0x30, 0x69, 0x9A, 0x63, 0x20,
+0x6A, 0xD4, 0x36, 0x30, 0x6B, 0x7A, 0x45, 0x20, 0x6C, 0xB4, 0x18, 0x30, 0x6D, 0x5A, 0x27, 0x20,
+0x6E, 0x93, 0xFA, 0x30, 0x6F, 0x3A, 0x09, 0x20, 0x70, 0x7D, 0x16, 0xB0, 0x71, 0x19, 0xEB, 0x20,
+0x72, 0x5C, 0xF8, 0xB0, 0x72, 0xF9, 0xCD, 0x20, 0x74, 0x3C, 0xDA, 0xB0, 0x74, 0xD9, 0xAF, 0x20,
+0x76, 0x1C, 0xBC, 0xB0, 0x76, 0xC2, 0xCB, 0xA0, 0x77, 0xFC, 0x9E, 0xB0, 0x78, 0xAB, 0xE8, 0x20,
+0x79, 0xDC, 0x80, 0xB0, 0x7A, 0x82, 0x8F, 0xA0, 0x7B, 0xC5, 0x9D, 0x30, 0x7C, 0x62, 0x71, 0xA0,
+0x7D, 0xA5, 0x7F, 0x30, 0x7E, 0x4B, 0x8E, 0x20, 0x7F, 0x85, 0x61, 0x30, 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,
@@ -10336,10 +10753,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xD4, 0x4C,
0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x09, 0x4C, 0x4D,
0x54, 0x00, 0x42, 0x52, 0x53, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00,
+0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Brazil/West */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x1F, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x7F, 0x44,
0xB8, 0x0F, 0x57, 0xF0, 0xB8, 0xFD, 0x4E, 0xB0, 0xB9, 0xF1, 0x42, 0x40, 0xBA, 0xDE, 0x82, 0x30,
@@ -10353,10 +10770,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
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, 0xC7, 0xBC, 0x00, 0x00, 0xFF, 0xFF, 0xD5,
0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x4D, 0x53,
-0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Canada/Atlantic */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xE4, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x80, 0xF1, 0xAB, 0xA0,
0x9A, 0xE4, 0xDE, 0xC0, 0x9B, 0xD6, 0x13, 0x30, 0x9E, 0xB8, 0x85, 0x60, 0x9F, 0xC0, 0x23, 0x50,
@@ -10433,10 +10851,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFF, 0xFF, 0xC4, 0x60, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0,
0x00, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0x4C, 0x4D,
0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x57, 0x54, 0x00, 0x41, 0x50,
-0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
+0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Canada/Central */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xBA, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x10, 0x9B, 0x01, 0xFB, 0xE0,
0x9B, 0xC3, 0xBA, 0x50, 0x9E, 0xB8, 0xA1, 0x80, 0x9F, 0xC0, 0x3F, 0x70, 0xC2, 0xA0, 0x3B, 0x80,
@@ -10500,10 +10919,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08,
0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0,
0x00, 0x04, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50,
-0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x89,
+0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Canada/Eastern */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0xE8, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xB8, 0x93, 0x70,
0x9F, 0xC0, 0x31, 0x60, 0xA0, 0x87, 0x2E, 0xC8, 0xA1, 0x9A, 0xB1, 0x40, 0xA2, 0x94, 0x06, 0xF0,
@@ -10581,10 +11001,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04,
0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0x45, 0x44, 0x54, 0x00,
0x45, 0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x00, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
+
/* Canada/East-Saskatchewan */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x86, 0xFD, 0x93, 0x1C,
0x9E, 0xB8, 0xAF, 0x90, 0x9F, 0xC0, 0x4D, 0x80, 0xB5, 0x65, 0x4F, 0xF0, 0xB6, 0x30, 0x48, 0xE0,
@@ -10607,10 +11028,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x08, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xAB,
0xA0, 0x01, 0x10, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x44, 0x54,
0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x43, 0x53, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Canada/Mountain */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x9A, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x88, 0xDE, 0xCE, 0xE0,
0x9E, 0xB8, 0xAF, 0x90, 0x9F, 0xC0, 0x4D, 0x80, 0xA0, 0x98, 0x91, 0x90, 0xA0, 0xD2, 0x85, 0x80,
@@ -10664,10 +11086,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x95, 0xA0, 0x00, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x08,
0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00,
0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Canada/Newfoundland */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xEE, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x15, 0x9C, 0xCF, 0x62, 0x0C,
0x9D, 0xA4, 0xE6, 0xFC, 0x9E, 0xB8, 0x7E, 0x8C, 0x9F, 0xC0, 0x1C, 0x7C, 0xA0, 0xB6, 0x88, 0xDC,
@@ -10748,10 +11171,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xDC, 0xD8, 0x01, 0x00, 0xFF, 0xFF, 0xCE, 0xC8, 0x00, 0x04, 0xFF, 0xFF, 0xDC, 0xD8, 0x01, 0x08,
0xFF, 0xFF, 0xDC, 0xD8, 0x01, 0x0C, 0xFF, 0xFF, 0xEA, 0xE8, 0x01, 0x10, 0x4E, 0x44, 0x54, 0x00,
0x4E, 0x53, 0x54, 0x00, 0x4E, 0x50, 0x54, 0x00, 0x4E, 0x57, 0x54, 0x00, 0x4E, 0x44, 0x44, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Canada/Pacific */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0xBD, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xB8, 0xBD, 0xA0,
0x9F, 0xC0, 0x5B, 0x90, 0xCB, 0x89, 0x1A, 0xA0, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x26, 0x10,
@@ -10815,10 +11239,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0x9D,
0x90, 0x01, 0x00, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x08, 0xFF,
0xFF, 0x9D, 0x90, 0x01, 0x0C, 0x50, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x57, 0x54,
-0x00, 0x50, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+0x00, 0x50, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Canada/Saskatchewan */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x86, 0xFD, 0x93, 0x1C,
0x9E, 0xB8, 0xAF, 0x90, 0x9F, 0xC0, 0x4D, 0x80, 0xB5, 0x65, 0x4F, 0xF0, 0xB6, 0x30, 0x48, 0xE0,
@@ -10841,10 +11266,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x08, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xAB,
0xA0, 0x01, 0x10, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x44, 0x54,
0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x43, 0x53, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Canada/Yukon */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1D, 0x9E, 0xB8, 0xCB, 0xB0,
0x9F, 0xBB, 0x23, 0xA0, 0xA0, 0xD0, 0x0C, 0xB0, 0xA1, 0xA2, 0xD2, 0x80, 0xCB, 0x89, 0x28, 0xB0,
@@ -10891,46 +11317,47 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x15, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x19, 0x59, 0x44, 0x54, 0x00,
0x59, 0x53, 0x54, 0x00, 0x59, 0x57, 0x54, 0x00, 0x59, 0x50, 0x54, 0x00, 0x59, 0x44, 0x44, 0x54,
0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x00,
/* CET */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x86, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x0C, 0x17, 0x60,
+0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x0C, 0x17, 0x60,
0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xD9, 0xAE, 0x90, 0x9D, 0xA4, 0xB5, 0x90, 0x9E, 0xB9, 0x90, 0x90,
0x9F, 0x84, 0x97, 0x90, 0xC8, 0x09, 0x71, 0x90, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90,
-0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x82, 0x25, 0x10, 0x0D, 0xA4, 0x63, 0x90,
-0x0E, 0x8B, 0x1A, 0x10, 0x0F, 0x84, 0x45, 0x90, 0x10, 0x74, 0x36, 0x90, 0x11, 0x64, 0x27, 0x90,
-0x12, 0x54, 0x18, 0x90, 0x13, 0x4D, 0x44, 0x10, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90,
-0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90,
-0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10,
-0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10,
-0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10,
-0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90,
-0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90,
-0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90,
-0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10,
-0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10,
-0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10,
-0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90,
-0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90,
-0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90,
-0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10,
-0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10,
-0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90,
-0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90,
-0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90,
-0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10,
-0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10,
-0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10,
-0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90,
-0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90,
-0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90,
-0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10,
-0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10,
-0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10,
-0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90,
-0x7F, 0x8E, 0x7F, 0x90, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
+0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x82, 0x25, 0x10, 0xD1, 0x72, 0x16, 0x10,
+0xD2, 0x4E, 0x40, 0x90, 0x0D, 0xA4, 0x63, 0x90, 0x0E, 0x8B, 0x1A, 0x10, 0x0F, 0x84, 0x45, 0x90,
+0x10, 0x74, 0x36, 0x90, 0x11, 0x64, 0x27, 0x90, 0x12, 0x54, 0x18, 0x90, 0x13, 0x4D, 0x44, 0x10,
+0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90,
+0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90,
+0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10,
+0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10,
+0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10,
+0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90,
+0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90,
+0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10,
+0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10,
+0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10,
+0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90,
+0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90,
+0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90,
+0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10,
+0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10,
+0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10,
+0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90,
+0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90,
+0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90,
+0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10,
+0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10,
+0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90,
+0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90,
+0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90,
+0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10,
+0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10,
+0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10,
+0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90,
+0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x00, 0x01, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
@@ -10938,13 +11365,14 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
-0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00,
-0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10,
-0x00, 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
-0x00, 0x00, 0x00,
+0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
+0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05,
+0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x43, 0x45, 0x53, 0x54,
+0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Chile/Continental */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x9E, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0D, 0x8F, 0x24, 0x69, 0xC6,
0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x71, 0x05, 0x46, 0xA1, 0x00, 0x71, 0xC0, 0xB0, 0x5E, 0x77, 0xC6,
@@ -11000,10 +11428,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04,
0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0,
0x00, 0x04, 0x53, 0x4D, 0x54, 0x00, 0x43, 0x4C, 0x54, 0x00, 0x43, 0x4C, 0x53, 0x54, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
+0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Chile/EasterIsland */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0F, 0xB9, 0xC7, 0x40, 0x88,
0xCC, 0x1C, 0x6E, 0x40, 0xCC, 0x6C, 0xE7, 0xD0, 0xD4, 0x1B, 0xC9, 0xB0, 0xFD, 0xD1, 0x3C, 0x40,
@@ -11054,10 +11483,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x09, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x09, 0xFF,
0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x09, 0x45, 0x4D, 0x54, 0x00, 0x45,
0x41, 0x53, 0x54, 0x00, 0x45, 0x41, 0x53, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01,
-0x00, 0x01, 0x01, 0x00, 0x01, 0x01,
+0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00,
+0x00, 0x00,
/* CST6CDT */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x95, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x2C, 0x80,
0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCB, 0x88, 0xFE, 0x80,
@@ -11109,10 +11539,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00,
0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0x43, 0x44, 0x54,
0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00,
-0x01, 0x00, 0x00, 0x00, 0x01,
+0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00,
+0x00,
/* Cuba */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0C, 0xAC, 0x62, 0xC2, 0x80,
0xB1, 0xD3, 0x94, 0x50, 0xB2, 0x74, 0x5D, 0x40, 0xC8, 0x5B, 0x66, 0xD0, 0xC8, 0xD3, 0x51, 0x40,
@@ -11166,10 +11597,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x03, 0x04, 0x03, 0xFF, 0xFF, 0xB2, 0xC0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF,
0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01,
0x04, 0x48, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00,
-0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x00,
/* EET */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x7A, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x0D, 0xA4, 0x63, 0x90,
0x0E, 0x8B, 0x1A, 0x10, 0x0F, 0x84, 0x45, 0x90, 0x10, 0x74, 0x36, 0x90, 0x11, 0x64, 0x27, 0x90,
@@ -11211,10 +11643,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00,
0x2A, 0x30, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45,
-0x45, 0x54, 0x00, 0x01, 0x01, 0x01, 0x01,
+0x45, 0x54, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x00,
/* Egypt */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0xAE, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xC8, 0x93, 0xB4, 0xE0,
0xC8, 0xFA, 0x7B, 0xD0, 0xC9, 0xFC, 0xEF, 0xE0, 0xCA, 0xC7, 0xE8, 0xD0, 0xCB, 0xCB, 0xAE, 0x60,
@@ -11273,10 +11706,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x00, 0x00,
0x2A, 0x30, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45,
-0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Eire */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xE5, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x10, 0x9B, 0x26, 0xB3, 0x91,
0x9B, 0xD6, 0x0B, 0x11, 0x9C, 0xCF, 0x30, 0xA0, 0x9D, 0xA4, 0xC3, 0xA0, 0x9E, 0x9C, 0x9D, 0xA0,
@@ -11356,16 +11790,18 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0C, 0x44, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54,
0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00,
+0x00,
/* EST */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0,
-0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* EST5EDT */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x95, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x1E, 0x70,
0x9F, 0xBA, 0xEB, 0x60, 0xA0, 0x86, 0x00, 0x70, 0xA1, 0x9A, 0xCD, 0x60, 0xCB, 0x88, 0xF0, 0x70,
@@ -11417,220 +11853,256 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00,
0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0x45, 0x44, 0x54,
0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00,
-0x01, 0x00, 0x00, 0x00, 0x01,
+0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00,
+0x00,
/* Etc/GMT */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Etc/GMT0 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Etc/GMT-0 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Etc/GMT+0 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Etc/GMT-1 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0E, 0x10,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x31, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x31, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT+1 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0xF1, 0xF0,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x31, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x31, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT-10 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x8C, 0xA0,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x31, 0x30, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x31, 0x30, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT+10 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0x73, 0x60,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x31, 0x30, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x31, 0x30, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT-11 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x9A, 0xB0,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x31, 0x31, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x31, 0x31, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT+11 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0x65, 0x50,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x31, 0x31, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x31, 0x31, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT-12 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0xA8, 0xC0,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x31, 0x32, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x31, 0x32, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT+12 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0x57, 0x40,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x31, 0x32, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x31, 0x32, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT-13 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0xB6, 0xD0,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x31, 0x33, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x31, 0x33, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT-14 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0xC4, 0xE0,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x31, 0x34, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x31, 0x34, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT-2 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x1C, 0x20,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x32, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x32, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT+2 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0xE3, 0xE0,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x32, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x32, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT-3 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x2A, 0x30,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x33, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x33, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT+3 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0xD5, 0xD0,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x33, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x33, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT-4 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x38, 0x40,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x34, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x34, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT+4 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0xC7, 0xC0,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x34, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x34, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT-5 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x46, 0x50,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x35, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x35, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT+5 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0xB9, 0xB0,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x35, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x35, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT-6 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x54, 0x60,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x36, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x36, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT+6 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0xAB, 0xA0,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x36, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x36, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT-7 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x62, 0x70,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x37, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x37, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT+7 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0x9D, 0x90,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x37, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x37, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT-8 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x70, 0x80,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x38, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x38, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT+8 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0x8F, 0x80,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x38, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x38, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT-9 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x7E, 0x90,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x39, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x39, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/GMT+9 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0x81, 0x70,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x39, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x39, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Etc/Greenwich */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Etc/UCT */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x55, 0x43, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x55, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Etc/Universal */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Etc/UTC */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Etc/Zulu */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Europe/Amsterdam */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4E, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x1A, 0x9B, 0x0C, 0x2E, 0xEC,
0x9B, 0xD5, 0xD6, 0x5C, 0x9C, 0xD9, 0xB8, 0x0C, 0x9D, 0xA4, 0xBF, 0x0C, 0x9E, 0xA7, 0x25, 0x0C,
@@ -11697,10 +12169,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x4E, 0x45, 0x54, 0x00, 0x4E, 0x45, 0x53, 0x54, 0x00, 0x43,
0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01,
0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x01, 0x00,
+0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Andorra */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x44, 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, 0x6B, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0D, 0xD4, 0x41, 0xDB, 0x00,
0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10,
@@ -11739,10 +12211,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x03, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00,
0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x57, 0x45, 0x54, 0x00, 0x43,
0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01,
-
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Athens */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x16, 0x9B, 0x80, 0x21, 0x80,
0xB9, 0x7C, 0xE9, 0xE0, 0xB9, 0xC6, 0xAF, 0xD0, 0xC9, 0xF2, 0x63, 0xE0, 0xCA, 0x10, 0xA8, 0x50,
@@ -11793,10 +12265,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x41,
0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00,
0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x00,
/* Europe/Belfast */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF2, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0D, 0x9B, 0x26, 0xAD, 0xA0,
0x9B, 0xD6, 0x05, 0x20, 0x9C, 0xCF, 0x30, 0xA0, 0x9D, 0xA4, 0xC3, 0xA0, 0x9E, 0x9C, 0x9D, 0xA0,
@@ -11878,111 +12351,114 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00,
0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x01, 0x01, 0x01,
-0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
+0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Belgrade */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0xCA, 0x02, 0x35, 0xE0,
+0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0xCA, 0x02, 0x35, 0xE0,
0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10,
-0xD0, 0x82, 0x25, 0x10, 0xD1, 0xA1, 0x8C, 0x10, 0xD2, 0x4E, 0x40, 0x90, 0x18, 0x45, 0x5F, 0x70,
-0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10,
-0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10,
-0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10,
-0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90,
-0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90,
-0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90,
-0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10,
-0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10,
-0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90,
-0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90,
-0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10,
-0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10,
-0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10,
-0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90,
-0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90,
-0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90,
-0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10,
-0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10,
-0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10,
-0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90,
-0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90,
-0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90,
-0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10,
-0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10,
-0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90,
-0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90,
-0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90,
-0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
-0x00, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00,
-0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01,
-0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E,
-0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00,
-0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0xD0, 0x82, 0x25, 0x10, 0xD0, 0xFA, 0x01, 0x70, 0xD1, 0xA1, 0x8C, 0x10, 0xD2, 0x4E, 0x40, 0x90,
+0x18, 0x45, 0x5F, 0x70, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90,
+0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10,
+0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10,
+0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10,
+0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90,
+0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90,
+0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10,
+0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10,
+0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10,
+0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90,
+0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90,
+0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90,
+0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10,
+0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10,
+0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10,
+0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90,
+0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90,
+0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90,
+0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10,
+0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10,
+0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90,
+0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90,
+0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90,
+0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10,
+0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10,
+0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10,
+0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90,
+0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x03, 0x01, 0x02, 0x01,
+0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00,
+0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20,
+0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54,
+0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Berlin */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x44, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0E, 0x9B, 0x0C, 0x17, 0x60,
+0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0E, 0x9B, 0x0C, 0x17, 0x60,
0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xD9, 0xAE, 0x90, 0x9D, 0xA4, 0xB5, 0x90, 0x9E, 0xB9, 0x90, 0x90,
0x9F, 0x84, 0x97, 0x90, 0xC8, 0x09, 0x71, 0x90, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90,
0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x82, 0x25, 0x10, 0xD1, 0x72, 0x16, 0x10,
-0xD1, 0xB6, 0x96, 0x00, 0xD2, 0x58, 0xBE, 0x80, 0xD2, 0xA1, 0x4F, 0x10, 0xD3, 0x63, 0x1B, 0x90,
-0xD4, 0x4B, 0x23, 0x90, 0xD5, 0x39, 0xC3, 0x10, 0xD5, 0x67, 0xE7, 0x90, 0xD5, 0xA8, 0x73, 0x00,
-0xD6, 0x29, 0xB4, 0x10, 0xD7, 0x2C, 0x1A, 0x10, 0xD8, 0x09, 0x96, 0x10, 0xD9, 0x02, 0xC1, 0x90,
-0xD9, 0xE9, 0x78, 0x10, 0x12, 0xCE, 0x97, 0xF0, 0x13, 0x4D, 0x44, 0x10, 0x14, 0x33, 0xFA, 0x90,
-0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90,
-0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10,
-0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10,
-0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10,
-0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90,
-0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90,
-0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90,
-0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10,
-0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10,
-0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90,
-0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90,
-0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10,
-0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10,
-0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10,
-0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90,
-0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90,
-0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90,
-0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10,
-0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10,
-0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10,
-0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90,
-0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90,
-0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90,
-0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10,
-0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10,
-0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90,
-0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90,
-0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90,
-0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
-0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x00, 0x03, 0x02, 0x03, 0x02, 0x05, 0x00, 0x03, 0x02, 0x03,
-0x02, 0x03, 0x01, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06,
-0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06,
-0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06,
-0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06,
-0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06,
-0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06,
-0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06,
-0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E,
-0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00,
-0x00, 0x2A, 0x30, 0x01, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x01,
-0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00,
-0x43, 0x45, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x01,
+0xD1, 0xB6, 0x96, 0x00, 0xD2, 0x58, 0xBE, 0x80, 0xD2, 0xA1, 0x4F, 0x10, 0xD2, 0xDB, 0x34, 0xF0,
+0xD3, 0x63, 0x1B, 0x90, 0xD4, 0x4B, 0x23, 0x90, 0xD5, 0x39, 0xD1, 0x20, 0xD5, 0x67, 0xE7, 0x90,
+0xD5, 0xA8, 0x73, 0x00, 0xD6, 0x29, 0xB4, 0x10, 0xD7, 0x2C, 0x1A, 0x10, 0xD8, 0x09, 0x96, 0x10,
+0xD9, 0x02, 0xC1, 0x90, 0xD9, 0xE9, 0x78, 0x10, 0x12, 0xCE, 0x97, 0xF0, 0x13, 0x4D, 0x44, 0x10,
+0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90,
+0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90,
+0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10,
+0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10,
+0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10,
+0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90,
+0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90,
+0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10,
+0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10,
+0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10,
+0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90,
+0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90,
+0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90,
+0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10,
+0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10,
+0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10,
+0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90,
+0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90,
+0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90,
+0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10,
+0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10,
+0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90,
+0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90,
+0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90,
+0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10,
+0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10,
+0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10,
+0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90,
+0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x00, 0x01, 0x02, 0x03,
+0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x00, 0x03, 0x01, 0x02, 0x03, 0x02,
+0x05, 0x00, 0x03, 0x02, 0x03, 0x02, 0x03, 0x01, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07,
+0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07,
+0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07,
+0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07,
+0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07,
+0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07,
+0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07,
+0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x00, 0x00, 0x1C, 0x20,
+0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00,
+0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x09,
+0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x43, 0x45, 0x53, 0x54,
+0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01,
+0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Bratislava */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x0C, 0x17, 0x60,
0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xD9, 0xAE, 0x90, 0x9D, 0xA4, 0xB5, 0x90, 0x9E, 0xB9, 0x90, 0x90,
@@ -12032,10 +12508,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00,
0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00,
0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00,
+0x00, 0x00,
/* Europe/Brussels */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xB9, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x12, 0x98, 0x44, 0x49, 0x80,
0x9B, 0x0C, 0x25, 0x70, 0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xD9, 0xAE, 0x90, 0x9D, 0xA4, 0xB5, 0x90,
@@ -12101,10 +12578,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00,
0x00, 0x0E, 0x10, 0x00, 0x04, 0x57, 0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53,
0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Bucharest */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0D, 0xB7, 0xB0, 0xD2, 0x08,
0xB9, 0x3E, 0xF3, 0x60, 0xB9, 0xEF, 0x9C, 0x60, 0xBA, 0xDF, 0x8D, 0x60, 0xBB, 0xCF, 0x7E, 0x60,
@@ -12153,67 +12631,69 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01,
0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C,
0x20, 0x00, 0x09, 0x42, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00,
-0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89,
+0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Budapest */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x48, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x0C, 0x17, 0x60,
+0x00, 0x00, 0x00, 0x9A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x0C, 0x17, 0x60,
0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xD9, 0xAE, 0x90, 0x9D, 0xA4, 0xB5, 0x90, 0x9E, 0x30, 0x58, 0x70,
0x9E, 0xA7, 0x29, 0xA0, 0x9F, 0x95, 0xBB, 0x10, 0xA0, 0x9A, 0xD2, 0x20, 0xA1, 0x64, 0x79, 0x90,
0xA2, 0x70, 0x28, 0x20, 0xA3, 0x5A, 0xC5, 0x10, 0xC9, 0xF1, 0x3C, 0x90, 0xCC, 0xE7, 0x4B, 0x10,
0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x82, 0x25, 0x10,
-0xD1, 0x99, 0x78, 0xE0, 0xD2, 0x8D, 0x5E, 0x60, 0xD3, 0x50, 0xA6, 0x90, 0xD4, 0x49, 0xD2, 0x10,
-0xD5, 0x39, 0xC3, 0x10, 0xD6, 0x29, 0xB4, 0x10, 0xD7, 0x19, 0xA5, 0x10, 0xD8, 0x09, 0x96, 0x10,
-0xD9, 0x02, 0xC1, 0x90, 0xD9, 0xE9, 0x78, 0x10, 0xDA, 0xED, 0x2F, 0x90, 0xDB, 0xE6, 0x5B, 0x10,
-0xE2, 0xA2, 0xA8, 0xF0, 0xE3, 0x51, 0xF2, 0x60, 0xE4, 0x83, 0xDC, 0x70, 0xE5, 0x33, 0x25, 0xE0,
-0xE6, 0x74, 0xE1, 0xF0, 0xE7, 0x11, 0xB6, 0x60, 0xE8, 0x54, 0xD2, 0x00, 0xE8, 0xF1, 0xC2, 0x90,
-0x13, 0x4D, 0x36, 0x00, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90,
-0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90,
-0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10,
-0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10,
-0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10,
-0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90,
-0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90,
-0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90,
-0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10,
-0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90,
-0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90,
-0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90,
-0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10,
-0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10,
-0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10,
-0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90,
-0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90,
-0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90,
-0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10,
-0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10,
-0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90,
-0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90,
-0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90,
-0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10,
-0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10,
-0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10,
-0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90,
-0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90,
-0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90,
-0x00, 0x01, 0x02, 0x03, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x03, 0x02, 0x03, 0x02,
-0x03, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x01, 0x00,
-0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
-0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
-0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
-0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
-0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
-0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
-0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
-0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00,
-0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00,
-0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x43, 0x45, 0x53,
-0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
-0x01, 0x01,
+0xD0, 0xFA, 0x01, 0x70, 0xD1, 0x99, 0x78, 0xE0, 0xD2, 0x8D, 0x5E, 0x60, 0xD3, 0x50, 0xA6, 0x90,
+0xD4, 0x49, 0xD2, 0x10, 0xD5, 0x39, 0xC3, 0x10, 0xD6, 0x29, 0xB4, 0x10, 0xD7, 0x19, 0xA5, 0x10,
+0xD8, 0x09, 0x96, 0x10, 0xD9, 0x02, 0xC1, 0x90, 0xD9, 0xE9, 0x78, 0x10, 0xDA, 0xED, 0x2F, 0x90,
+0xDB, 0xE6, 0x5B, 0x10, 0xE2, 0xA2, 0xA8, 0xF0, 0xE3, 0x51, 0xF2, 0x60, 0xE4, 0x83, 0xDC, 0x70,
+0xE5, 0x33, 0x25, 0xE0, 0xE6, 0x74, 0xE1, 0xF0, 0xE7, 0x11, 0xB6, 0x60, 0xE8, 0x54, 0xD2, 0x00,
+0xE8, 0xF1, 0xC2, 0x90, 0x13, 0x4D, 0x36, 0x00, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90,
+0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90,
+0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10,
+0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10,
+0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10,
+0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90,
+0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90,
+0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90,
+0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10,
+0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10,
+0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10,
+0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90,
+0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90,
+0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90,
+0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10,
+0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10,
+0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90,
+0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90,
+0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90,
+0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10,
+0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10,
+0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10,
+0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90,
+0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90,
+0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90,
+0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10,
+0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10,
+0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10,
+0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90,
+0x7F, 0x8E, 0x7F, 0x90, 0x00, 0x01, 0x02, 0x03, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
+0x03, 0x02, 0x03, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
+0x02, 0x03, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x04, 0x05, 0x04, 0x05, 0x04,
+0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
+0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
+0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
+0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
+0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
+0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
+0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x00, 0x00,
+0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00,
+0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20,
+0x01, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x00,
/* Europe/Chisinau */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x22, 0x9E, 0x6B, 0x9F, 0x0C,
0xB7, 0xB0, 0xD2, 0x08, 0xB9, 0x3E, 0xF3, 0x60, 0xB9, 0xEF, 0x9C, 0x60, 0xBA, 0xDF, 0x8D, 0x60,
@@ -12269,10 +12749,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00,
0x4D, 0x53, 0x4B, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01,
0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x01, 0x01,
+0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Copenhagen */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x44, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x1E, 0x8C, 0x60,
0x9B, 0xD5, 0xBE, 0xD0, 0xC8, 0x43, 0x57, 0x70, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90,
@@ -12319,10 +12799,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x05, 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00,
0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x1C,
0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45,
-0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89,
+0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Dublin */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x49, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xE5, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x10, 0x9B, 0x26, 0xB3, 0x91,
0x9B, 0xD6, 0x0B, 0x11, 0x9C, 0xCF, 0x30, 0xA0, 0x9D, 0xA4, 0xC3, 0xA0, 0x9E, 0x9C, 0x9D, 0xA0,
@@ -12402,10 +12883,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0C, 0x44, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54,
0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00,
+0x00,
/* Europe/Gibraltar */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xC5, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x16, 0x9B, 0x26, 0xAD, 0xA0,
0x9B, 0xD6, 0x05, 0x20, 0x9C, 0xCF, 0x30, 0xA0, 0x9D, 0xA4, 0xC3, 0xA0, 0x9E, 0x9C, 0x9D, 0xA0,
@@ -12473,10 +12955,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0D, 0x00, 0x00, 0x1C,
0x20, 0x01, 0x11, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0D, 0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54,
0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x01,
-0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Guernsey */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF2, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0D, 0x9B, 0x26, 0xAD, 0xA0,
0x9B, 0xD6, 0x05, 0x20, 0x9C, 0xCF, 0x30, 0xA0, 0x9D, 0xA4, 0xC3, 0xA0, 0x9E, 0x9C, 0x9D, 0xA0,
@@ -12558,10 +13041,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00,
0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x01, 0x01, 0x01,
-0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
+0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Helsinki */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x46, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0xA4, 0x73, 0x6F, 0x18,
0xCB, 0xCE, 0x51, 0x60, 0xCC, 0xBF, 0x85, 0xD0, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90,
@@ -12603,10 +13087,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x04, 0x03, 0x04, 0x03, 0x04, 0x00, 0x00, 0x17, 0x68, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01,
0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C,
0x20, 0x00, 0x09, 0x48, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Isle_of_Man */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x49, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF2, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0D, 0x9B, 0x26, 0xAD, 0xA0,
0x9B, 0xD6, 0x05, 0x20, 0x9C, 0xCF, 0x30, 0xA0, 0x9D, 0xA4, 0xC3, 0xA0, 0x9E, 0x9C, 0x9D, 0xA0,
@@ -12688,10 +13173,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00,
0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x01, 0x01, 0x01,
-0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
+0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Istanbul */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xAB, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x16, 0x90, 0x8B, 0xF5, 0x98,
0x9B, 0x0C, 0x17, 0x60, 0x9B, 0xD5, 0xBE, 0xD0, 0xA2, 0x65, 0x63, 0xE0, 0xA3, 0x7B, 0x82, 0x50,
@@ -12753,10 +13239,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x49, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53,
0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x54, 0x52, 0x53, 0x54, 0x00, 0x54, 0x52, 0x54, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x01,
+0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Jersey */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4A, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF2, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0D, 0x9B, 0x26, 0xAD, 0xA0,
0x9B, 0xD6, 0x05, 0x20, 0x9C, 0xCF, 0x30, 0xA0, 0x9D, 0xA4, 0xC3, 0xA0, 0x9E, 0x9C, 0x9D, 0xA0,
@@ -12838,10 +13324,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00,
0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x01, 0x01, 0x01,
-0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
+0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Kaliningrad */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x1A, 0x9B, 0x0C, 0x17, 0x60,
0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xD9, 0xAE, 0x90, 0x9D, 0xA4, 0xB5, 0x90, 0x9E, 0xB9, 0x90, 0x90,
@@ -12893,10 +13380,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x45, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00,
0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x17, 0x4D, 0x6F, 0x73, 0x63,
+0x6F, 0x77, 0x2D, 0x30, 0x31, 0x20, 0x2D, 0x20, 0x4B, 0x61, 0x6C, 0x69, 0x6E, 0x69, 0x6E, 0x67,
+0x72, 0x61, 0x64,
/* Europe/Kiev */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1E, 0xAA, 0x19, 0xA7, 0x64,
0xB5, 0xA4, 0x19, 0x60, 0xCA, 0xCD, 0x2E, 0xD0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90,
@@ -12943,10 +13432,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x19, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D,
0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00,
0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01,
-0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0E, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F,
+0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73,
/* Europe/Lisbon */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xDD, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x1B, 0x92, 0xE6, 0x97, 0x10,
0x9B, 0x4B, 0x6D, 0x70, 0x9B, 0xFE, 0xC7, 0x80, 0x9C, 0x9C, 0xED, 0x70, 0x9D, 0xC9, 0x83, 0x70,
@@ -13025,56 +13516,58 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x4D, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x57, 0x45, 0x4D, 0x54,
0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
-
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x08, 0x6D, 0x61, 0x69, 0x6E,
+0x6C, 0x61, 0x6E, 0x64,
/* Europe/Ljubljana */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0xCA, 0x02, 0x35, 0xE0,
+0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0xCA, 0x02, 0x35, 0xE0,
0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10,
-0xD0, 0x82, 0x25, 0x10, 0xD1, 0xA1, 0x8C, 0x10, 0xD2, 0x4E, 0x40, 0x90, 0x18, 0x45, 0x5F, 0x70,
-0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10,
-0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10,
-0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10,
-0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90,
-0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90,
-0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90,
-0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10,
-0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10,
-0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90,
-0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90,
-0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10,
-0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10,
-0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10,
-0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90,
-0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90,
-0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90,
-0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10,
-0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10,
-0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10,
-0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90,
-0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90,
-0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90,
-0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10,
-0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10,
-0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90,
-0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90,
-0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90,
-0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
-0x00, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00,
-0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01,
-0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E,
-0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00,
-0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0xD0, 0x82, 0x25, 0x10, 0xD0, 0xFA, 0x01, 0x70, 0xD1, 0xA1, 0x8C, 0x10, 0xD2, 0x4E, 0x40, 0x90,
+0x18, 0x45, 0x5F, 0x70, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90,
+0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10,
+0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10,
+0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10,
+0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90,
+0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90,
+0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10,
+0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10,
+0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10,
+0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90,
+0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90,
+0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90,
+0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10,
+0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10,
+0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10,
+0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90,
+0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90,
+0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90,
+0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10,
+0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10,
+0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90,
+0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90,
+0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90,
+0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10,
+0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10,
+0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10,
+0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90,
+0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x03, 0x01, 0x02, 0x01,
+0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00,
+0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20,
+0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54,
+0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/London */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF2, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0D, 0x9B, 0x26, 0xAD, 0xA0,
0x9B, 0xD6, 0x05, 0x20, 0x9C, 0xCF, 0x30, 0xA0, 0x9D, 0xA4, 0xC3, 0xA0, 0x9E, 0x9C, 0x9D, 0xA0,
@@ -13156,10 +13649,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00,
0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x01, 0x01, 0x01,
-0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
+0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Luxembourg */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4C, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xB8, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x16, 0x84, 0xA2, 0xAD, 0xBC,
0x9B, 0x1E, 0x8C, 0x60, 0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xEA, 0xA7, 0xE0, 0x9D, 0xA4, 0x99, 0x70,
@@ -13227,10 +13721,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54,
0x00, 0x43, 0x45, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x00, 0x00,
0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Madrid */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xA3, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x17, 0x9C, 0xF3, 0xF0, 0x70,
0x9D, 0xBE, 0xF7, 0x70, 0x9E, 0xBA, 0xC5, 0xF0, 0x9F, 0xA0, 0x2A, 0xF0, 0xA0, 0x8E, 0xCA, 0x70,
@@ -13289,10 +13784,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x1C, 0x20, 0x01, 0x0E, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x13, 0x57, 0x45, 0x53, 0x54, 0x00,
0x57, 0x45, 0x54, 0x00, 0x57, 0x45, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45,
0x54, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x01, 0x01,
+0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x08, 0x6D, 0x61,
+0x69, 0x6E, 0x6C, 0x61, 0x6E, 0x64,
/* Europe/Malta */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xA8, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x37, 0xA6, 0xF0,
0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xC5, 0xCB, 0xF0, 0x9D, 0xB5, 0xBC, 0xF0, 0x9E, 0x89, 0xFE, 0x70,
@@ -13350,10 +13846,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05,
0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20,
0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54,
-0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Mariehamn */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0xA4, 0x73, 0x6F, 0x18,
0xCB, 0xCE, 0x51, 0x60, 0xCC, 0xBF, 0x85, 0xD0, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90,
@@ -13395,10 +13892,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x04, 0x03, 0x04, 0x03, 0x04, 0x00, 0x00, 0x17, 0x68, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01,
0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C,
0x20, 0x00, 0x09, 0x48, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Minsk */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x1E, 0xAA, 0x19, 0xAA, 0x38,
0xB5, 0xA4, 0x19, 0x60, 0xCA, 0x5E, 0x70, 0xD0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90,
@@ -13445,10 +13943,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x2A, 0x30, 0x01, 0x19, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4D, 0x4D, 0x54, 0x00, 0x45,
0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00,
0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
-0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Monaco */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xB8, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x1B, 0x91, 0x60, 0x50, 0x4F,
0x9B, 0x47, 0x78, 0xF0, 0x9B, 0xD7, 0x2C, 0x70, 0x9C, 0xBC, 0x91, 0x70, 0x9D, 0xC0, 0x48, 0xF0,
@@ -13514,10 +14013,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x0E, 0x10, 0x00, 0x17, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x12, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x17,
0x50, 0x4D, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x57, 0x45, 0x4D,
0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Moscow */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1E, 0x9B, 0x5F, 0x1E, 0xD8,
0x9D, 0x3E, 0xF2, 0x98, 0x9E, 0x2A, 0xEF, 0x18, 0x9E, 0xF7, 0x39, 0x88, 0x9F, 0x84, 0x58, 0x18,
@@ -13567,10 +14067,13 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x30, 0x01, 0x19, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x4D, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54,
0x00, 0x4D, 0x44, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45,
0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x17, 0x4D, 0x6F, 0x73, 0x63, 0x6F,
+0x77, 0x2B, 0x30, 0x30, 0x20, 0x2D, 0x20, 0x77, 0x65, 0x73, 0x74, 0x20, 0x52, 0x75, 0x73, 0x73,
+0x69, 0x61,
/* Europe/Nicosia */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0xA5, 0x77, 0x1E, 0xB8,
0x09, 0xED, 0xAF, 0xE0, 0x0A, 0xDD, 0x92, 0xD0, 0x0B, 0xFA, 0x64, 0xE0, 0x0C, 0xBE, 0xC6, 0x50,
@@ -13615,10 +14118,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x00, 0x00, 0x1F, 0x48, 0x00, 0x00, 0x00, 0x00, 0x2A,
0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00,
0x00, 0x2A, 0x30, 0x01, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45,
-0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Oslo */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4E, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x27, 0xE3, 0x00,
0x9B, 0xD4, 0x7B, 0x60, 0xC8, 0xB7, 0x4D, 0x60, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90,
@@ -13668,10 +14172,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00,
0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00,
0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00,
+0x00, 0x00,
/* Europe/Paris */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x46, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xB7, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1B, 0x91, 0x60, 0x50, 0x8B,
0x9B, 0x47, 0x78, 0xF0, 0x9B, 0xD7, 0x2C, 0x70, 0x9C, 0xBC, 0x91, 0x70, 0x9D, 0xC0, 0x48, 0xF0,
@@ -13738,56 +14243,58 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x11, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0D, 0x50, 0x4D, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00,
0x57, 0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x4D,
0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Podgorica */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0xCA, 0x02, 0x35, 0xE0,
+0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0xCA, 0x02, 0x35, 0xE0,
0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10,
-0xD0, 0x82, 0x25, 0x10, 0xD1, 0xA1, 0x8C, 0x10, 0xD2, 0x4E, 0x40, 0x90, 0x18, 0x45, 0x5F, 0x70,
-0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10,
-0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10,
-0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10,
-0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90,
-0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90,
-0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90,
-0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10,
-0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10,
-0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90,
-0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90,
-0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10,
-0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10,
-0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10,
-0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90,
-0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90,
-0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90,
-0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10,
-0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10,
-0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10,
-0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90,
-0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90,
-0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90,
-0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10,
-0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10,
-0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90,
-0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90,
-0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90,
-0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
-0x00, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00,
-0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01,
-0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E,
-0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00,
-0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0xD0, 0x82, 0x25, 0x10, 0xD0, 0xFA, 0x01, 0x70, 0xD1, 0xA1, 0x8C, 0x10, 0xD2, 0x4E, 0x40, 0x90,
+0x18, 0x45, 0x5F, 0x70, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90,
+0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10,
+0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10,
+0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10,
+0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90,
+0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90,
+0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10,
+0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10,
+0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10,
+0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90,
+0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90,
+0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90,
+0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10,
+0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10,
+0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10,
+0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90,
+0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90,
+0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90,
+0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10,
+0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10,
+0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90,
+0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90,
+0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90,
+0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10,
+0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10,
+0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10,
+0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90,
+0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x03, 0x01, 0x02, 0x01,
+0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00,
+0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20,
+0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54,
+0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Prague */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x0C, 0x17, 0x60,
0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xD9, 0xAE, 0x90, 0x9D, 0xA4, 0xB5, 0x90, 0x9E, 0xB9, 0x90, 0x90,
@@ -13837,10 +14344,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00,
0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00,
0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00,
+0x00, 0x00,
/* Europe/Riga */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4C, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x22, 0x9E, 0xB9, 0x88, 0x08,
0x9F, 0x84, 0x8F, 0x08, 0xA0, 0x88, 0x46, 0x88, 0xA0, 0xCB, 0x83, 0x08, 0xAD, 0xE7, 0xF1, 0xE8,
@@ -13891,10 +14399,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43,
0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Rome */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x49, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x37, 0xA6, 0xF0,
0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xC5, 0xCB, 0xF0, 0x9D, 0xB5, 0xBC, 0xF0, 0x9E, 0x89, 0xFE, 0x70,
@@ -13953,10 +14462,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00,
0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10,
0x00, 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01,
-0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x00,
/* Europe/Samara */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x1A, 0xA1, 0x00, 0x26, 0x9C,
0xB5, 0xA4, 0x0B, 0x50, 0xBE, 0x4C, 0x26, 0xC0, 0x15, 0x27, 0x99, 0xC0, 0x16, 0x18, 0xCE, 0x30,
@@ -14004,10 +14514,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x54, 0x00, 0x53, 0x41, 0x4D, 0x54, 0x00, 0x4B, 0x55, 0x59, 0x53, 0x54, 0x00, 0x4B, 0x55, 0x59,
0x54, 0x00, 0x53, 0x41, 0x4D, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x1C,
+0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x31, 0x20, 0x2D, 0x20, 0x53, 0x61, 0x6D, 0x61,
+0x72, 0x61, 0x2C, 0x20, 0x55, 0x64, 0x6D, 0x75, 0x72, 0x74, 0x69, 0x61,
/* Europe/San_Marino */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x37, 0xA6, 0xF0,
0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xC5, 0xCB, 0xF0, 0x9D, 0xB5, 0xBC, 0xF0, 0x9E, 0x89, 0xFE, 0x70,
@@ -14066,56 +14578,58 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00,
0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10,
0x00, 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01,
-0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x00,
/* Europe/Sarajevo */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0xCA, 0x02, 0x35, 0xE0,
+0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0xCA, 0x02, 0x35, 0xE0,
0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10,
-0xD0, 0x82, 0x25, 0x10, 0xD1, 0xA1, 0x8C, 0x10, 0xD2, 0x4E, 0x40, 0x90, 0x18, 0x45, 0x5F, 0x70,
-0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10,
-0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10,
-0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10,
-0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90,
-0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90,
-0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90,
-0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10,
-0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10,
-0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90,
-0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90,
-0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10,
-0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10,
-0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10,
-0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90,
-0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90,
-0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90,
-0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10,
-0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10,
-0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10,
-0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90,
-0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90,
-0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90,
-0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10,
-0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10,
-0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90,
-0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90,
-0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90,
-0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
-0x00, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00,
-0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01,
-0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E,
-0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00,
-0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0xD0, 0x82, 0x25, 0x10, 0xD0, 0xFA, 0x01, 0x70, 0xD1, 0xA1, 0x8C, 0x10, 0xD2, 0x4E, 0x40, 0x90,
+0x18, 0x45, 0x5F, 0x70, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90,
+0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10,
+0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10,
+0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10,
+0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90,
+0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90,
+0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10,
+0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10,
+0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10,
+0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90,
+0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90,
+0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90,
+0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10,
+0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10,
+0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10,
+0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90,
+0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90,
+0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90,
+0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10,
+0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10,
+0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90,
+0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90,
+0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90,
+0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10,
+0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10,
+0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10,
+0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90,
+0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x03, 0x01, 0x02, 0x01,
+0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00,
+0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20,
+0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54,
+0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Simferopol */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1E, 0xAA, 0x19, 0xA4, 0x20,
0xB5, 0xA4, 0x19, 0x60, 0xCB, 0x04, 0x8D, 0xD0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90,
@@ -14164,105 +14678,109 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00,
0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x01,
+0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0E, 0x63, 0x65, 0x6E,
+0x74, 0x72, 0x61, 0x6C, 0x20, 0x43, 0x72, 0x69, 0x6D, 0x65, 0x61,
/* Europe/Skopje */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0xCA, 0x02, 0x35, 0xE0,
+0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0xCA, 0x02, 0x35, 0xE0,
0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10,
-0xD0, 0x82, 0x25, 0x10, 0xD1, 0xA1, 0x8C, 0x10, 0xD2, 0x4E, 0x40, 0x90, 0x18, 0x45, 0x5F, 0x70,
-0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10,
-0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10,
-0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10,
-0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90,
-0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90,
-0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90,
-0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10,
-0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10,
-0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90,
-0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90,
-0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10,
-0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10,
-0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10,
-0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90,
-0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90,
-0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90,
-0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10,
-0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10,
-0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10,
-0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90,
-0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90,
-0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90,
-0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10,
-0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10,
-0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90,
-0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90,
-0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90,
-0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
-0x00, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00,
-0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01,
-0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E,
-0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00,
-0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0xD0, 0x82, 0x25, 0x10, 0xD0, 0xFA, 0x01, 0x70, 0xD1, 0xA1, 0x8C, 0x10, 0xD2, 0x4E, 0x40, 0x90,
+0x18, 0x45, 0x5F, 0x70, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90,
+0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10,
+0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10,
+0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10,
+0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90,
+0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90,
+0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10,
+0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10,
+0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10,
+0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90,
+0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90,
+0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90,
+0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10,
+0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10,
+0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10,
+0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90,
+0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90,
+0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90,
+0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10,
+0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10,
+0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90,
+0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90,
+0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90,
+0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10,
+0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10,
+0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10,
+0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90,
+0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x03, 0x01, 0x02, 0x01,
+0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00,
+0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20,
+0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54,
+0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Sofia */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x12, 0xCC, 0xE7, 0x4B, 0x10,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x42, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x12, 0xCC, 0xE7, 0x4B, 0x10,
0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x82, 0x25, 0x10,
-0xD1, 0x72, 0x24, 0x20, 0x11, 0x63, 0xEF, 0x50, 0x12, 0x55, 0x3F, 0xE0, 0x13, 0x4D, 0x0B, 0xD0,
-0x14, 0x35, 0x21, 0xE0, 0x15, 0x2C, 0xED, 0xD0, 0x16, 0x13, 0xC0, 0x70, 0x17, 0x0C, 0xCF, 0xD0,
-0x17, 0xF3, 0xB0, 0x80, 0x18, 0xE3, 0xA1, 0x80, 0x19, 0xD3, 0x92, 0x80, 0x1A, 0xC3, 0x83, 0x80,
-0x1B, 0xBC, 0xAF, 0x00, 0x1C, 0xAC, 0xA0, 0x00, 0x1D, 0x9C, 0x91, 0x00, 0x1E, 0x8C, 0x82, 0x00,
-0x1F, 0x7C, 0x73, 0x00, 0x20, 0x6C, 0x64, 0x00, 0x21, 0x5C, 0x55, 0x00, 0x22, 0x4C, 0x46, 0x00,
-0x23, 0x3C, 0x37, 0x00, 0x24, 0x2C, 0x28, 0x00, 0x25, 0x1C, 0x19, 0x00, 0x26, 0x0C, 0x0A, 0x00,
-0x27, 0x05, 0x35, 0x80, 0x27, 0x7F, 0xB4, 0xE0, 0x27, 0xF5, 0x0A, 0x60, 0x28, 0xE4, 0xED, 0x50,
-0x29, 0xD4, 0xEC, 0x60, 0x2A, 0xC4, 0xCF, 0x50, 0x2B, 0xB4, 0xCE, 0x60, 0x2C, 0xA4, 0xB1, 0x50,
-0x2D, 0x94, 0xB0, 0x60, 0x2E, 0x84, 0x93, 0x50, 0x2F, 0x74, 0x92, 0x60, 0x30, 0x64, 0x75, 0x50,
-0x31, 0x5D, 0xAE, 0xE0, 0x32, 0x72, 0x7B, 0xD0, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10,
-0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90,
-0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90,
-0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90,
-0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10,
-0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10,
-0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10,
-0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90,
-0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90,
-0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90,
-0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10,
-0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10,
-0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90,
-0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90,
-0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90,
-0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10,
-0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10,
-0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10,
-0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90,
-0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90,
-0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90,
-0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x00, 0x03,
-0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x06, 0x07, 0x06, 0x07, 0x06,
-0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06,
-0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06,
-0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06,
-0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06,
-0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x00, 0x00, 0x1C,
-0x20, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00,
-0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01,
-0x0D, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x45, 0x45, 0x54,
-0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00,
-0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0xD0, 0xFA, 0x01, 0x70, 0xD1, 0x72, 0x24, 0x20, 0x11, 0x63, 0xEF, 0x50, 0x12, 0x55, 0x3F, 0xE0,
+0x13, 0x4D, 0x0B, 0xD0, 0x14, 0x35, 0x21, 0xE0, 0x15, 0x2C, 0xED, 0xD0, 0x16, 0x13, 0xC0, 0x70,
+0x17, 0x0C, 0xCF, 0xD0, 0x17, 0xF3, 0xB0, 0x80, 0x18, 0xE3, 0xA1, 0x80, 0x19, 0xD3, 0x92, 0x80,
+0x1A, 0xC3, 0x83, 0x80, 0x1B, 0xBC, 0xAF, 0x00, 0x1C, 0xAC, 0xA0, 0x00, 0x1D, 0x9C, 0x91, 0x00,
+0x1E, 0x8C, 0x82, 0x00, 0x1F, 0x7C, 0x73, 0x00, 0x20, 0x6C, 0x64, 0x00, 0x21, 0x5C, 0x55, 0x00,
+0x22, 0x4C, 0x46, 0x00, 0x23, 0x3C, 0x37, 0x00, 0x24, 0x2C, 0x28, 0x00, 0x25, 0x1C, 0x19, 0x00,
+0x26, 0x0C, 0x0A, 0x00, 0x27, 0x05, 0x35, 0x80, 0x27, 0x7F, 0xB4, 0xE0, 0x27, 0xF5, 0x0A, 0x60,
+0x28, 0xE4, 0xED, 0x50, 0x29, 0xD4, 0xEC, 0x60, 0x2A, 0xC4, 0xCF, 0x50, 0x2B, 0xB4, 0xCE, 0x60,
+0x2C, 0xA4, 0xB1, 0x50, 0x2D, 0x94, 0xB0, 0x60, 0x2E, 0x84, 0x93, 0x50, 0x2F, 0x74, 0x92, 0x60,
+0x30, 0x64, 0x75, 0x50, 0x31, 0x5D, 0xAE, 0xE0, 0x32, 0x72, 0x7B, 0xD0, 0x33, 0x3D, 0xBB, 0x10,
+0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10,
+0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10,
+0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90,
+0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90,
+0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90,
+0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10,
+0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10,
+0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90,
+0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90,
+0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90,
+0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10,
+0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10,
+0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10,
+0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90,
+0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90,
+0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90,
+0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10,
+0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10,
+0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10,
+0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90,
+0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04,
+0x00, 0x04, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06,
+0x05, 0x06, 0x05, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00,
+0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08,
+0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08,
+0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08,
+0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08,
+0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08,
+0x07, 0x08, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00,
+0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D,
+0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x2A, 0x30,
+0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x45, 0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00,
+0x43, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01,
+0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Stockholm */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x45, 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, 0x76, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x1E, 0x8C, 0x60,
0x9B, 0xD5, 0xDA, 0xF0, 0x13, 0x4D, 0x44, 0x10, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90,
@@ -14304,10 +14822,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00,
0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10,
0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
-0x00, 0x01, 0x01,
+0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Tallinn */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x1E, 0x9E, 0x59, 0x2D, 0xCC,
0x9E, 0xB9, 0x90, 0x90, 0x9F, 0x84, 0x97, 0x90, 0xA1, 0x00, 0x2B, 0x70, 0xA4, 0x73, 0x6F, 0x4C,
@@ -14357,10 +14875,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x19, 0x54, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x45,
0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00,
0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x89,
+0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Tirane */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x34, 0x68,
0xC8, 0x6D, 0x87, 0x70, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCD, 0xB8, 0xE9, 0x90,
@@ -14407,10 +14926,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x03, 0x04, 0x03, 0x04, 0x03, 0x00, 0x00, 0x12, 0x98, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00,
0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x1C,
0x20, 0x01, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Tiraspol */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x22, 0x9E, 0x6B, 0x9F, 0x0C,
0xB7, 0xB0, 0xD2, 0x08, 0xB9, 0x3E, 0xF3, 0x60, 0xB9, 0xEF, 0x9C, 0x60, 0xBA, 0xDF, 0x8D, 0x60,
@@ -14466,10 +14986,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00,
0x4D, 0x53, 0x4B, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01,
0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x01, 0x01,
+0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Uzhgorod */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1A, 0xC8, 0x09, 0x71, 0x90,
0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10,
@@ -14517,10 +15037,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x11, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x4D, 0x53,
0x4B, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x01, 0x01,
+0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x08, 0x52,
+0x75, 0x74, 0x68, 0x65, 0x6E, 0x69, 0x61,
/* Europe/Vaduz */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4C, 0x49, 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, 0x72, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0x15, 0x23, 0xEB, 0x90,
0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90,
@@ -14560,10 +15081,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02,
0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20,
0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54,
-0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01,
+0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x00,
/* Europe/Vatican */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x56, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x37, 0xA6, 0xF0,
0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xC5, 0xCB, 0xF0, 0x9D, 0xB5, 0xBC, 0xF0, 0x9E, 0x89, 0xFE, 0x70,
@@ -14622,10 +15144,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00,
0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10,
0x00, 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01,
-0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x00,
/* Europe/Vienna */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x0C, 0x17, 0x60,
0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xD9, 0xAE, 0x90, 0x9D, 0xA4, 0xB5, 0x90, 0x9E, 0xB9, 0x90, 0x90,
@@ -14675,10 +15198,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05,
0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x43, 0x45, 0x53, 0x54,
0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x01,
+0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Vilnius */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4C, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x22, 0x9C, 0x4F, 0x1F, 0x50,
0xA1, 0x85, 0x4A, 0x98, 0xA2, 0xF1, 0x30, 0xF0, 0xA3, 0x66, 0x78, 0x60, 0xC8, 0xAC, 0xCF, 0x70,
@@ -14729,10 +15252,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x53, 0x4B, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x01, 0x01, 0x01,
+0x01, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Volgograd */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x19, 0xA1, 0xF5, 0x46, 0xDC,
0xAB, 0xD8, 0x86, 0x50, 0xB5, 0xA4, 0x0B, 0x50, 0xF0, 0xB0, 0x4C, 0x40, 0x15, 0x27, 0x99, 0xC0,
@@ -14778,10 +15301,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x14, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x54, 0x53, 0x41, 0x54, 0x00,
0x53, 0x54, 0x41, 0x54, 0x00, 0x56, 0x4F, 0x4C, 0x53, 0x54, 0x00, 0x56, 0x4F, 0x4C, 0x54, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00,
+0x00, 0x17, 0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x30, 0x20, 0x2D, 0x20, 0x43, 0x61,
+0x73, 0x70, 0x69, 0x61, 0x6E, 0x20, 0x53, 0x65, 0x61,
/* Europe/Warsaw */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xA7, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x16, 0x99, 0xA8, 0x2A, 0xD0,
0x9B, 0x0C, 0x17, 0x60, 0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xD9, 0xAE, 0x90, 0x9D, 0xA4, 0xB5, 0x90,
@@ -14842,56 +15367,58 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x57, 0x4D, 0x54, 0x00, 0x43,
0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54,
0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00,
+0x00,
/* Europe/Zagreb */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x48, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0xCA, 0x02, 0x35, 0xE0,
+0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0xCA, 0x02, 0x35, 0xE0,
0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10,
-0xD0, 0x82, 0x25, 0x10, 0xD1, 0xA1, 0x8C, 0x10, 0xD2, 0x4E, 0x40, 0x90, 0x18, 0x45, 0x5F, 0x70,
-0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10,
-0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10,
-0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10,
-0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90,
-0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90,
-0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90,
-0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10,
-0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10,
-0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90,
-0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90,
-0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10,
-0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10,
-0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10,
-0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90,
-0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90,
-0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90,
-0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10,
-0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10,
-0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10,
-0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90,
-0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90,
-0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90,
-0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10,
-0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10,
-0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90,
-0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90,
-0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90,
-0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
-0x00, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04,
-0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00,
-0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01,
-0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E,
-0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00,
-0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0xD0, 0x82, 0x25, 0x10, 0xD0, 0xFA, 0x01, 0x70, 0xD1, 0xA1, 0x8C, 0x10, 0xD2, 0x4E, 0x40, 0x90,
+0x18, 0x45, 0x5F, 0x70, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90,
+0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10,
+0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10,
+0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10,
+0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90,
+0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90,
+0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10,
+0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10,
+0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10,
+0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90,
+0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90,
+0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90,
+0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10,
+0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10,
+0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10,
+0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90,
+0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90,
+0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90,
+0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10,
+0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10,
+0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90,
+0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90,
+0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90,
+0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10,
+0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10,
+0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10,
+0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90,
+0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x03, 0x01, 0x02, 0x01,
+0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05,
+0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00,
+0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20,
+0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54,
+0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Europe/Zaporozhye */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1E, 0xAA, 0x19, 0xA3, 0x30,
0xB5, 0xA4, 0x19, 0x60, 0xCA, 0xAA, 0xE7, 0xD0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90,
@@ -14939,64 +15466,69 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x04, 0x43, 0x55, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54,
0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x2E, 0x5A, 0x61, 0x70, 0x6F, 0x72, 0x6F, 0x7A, 0x68, 0x27, 0x79, 0x65, 0x2C, 0x20,
+0x45, 0x20, 0x4C, 0x75, 0x67, 0x61, 0x6E, 0x73, 0x6B, 0x20, 0x2F, 0x20, 0x5A, 0x61, 0x70, 0x6F,
+0x72, 0x69, 0x7A, 0x68, 0x69, 0x61, 0x2C, 0x20, 0x45, 0x20, 0x4C, 0x75, 0x68, 0x61, 0x6E, 0x73,
+0x6B,
/* Europe/Zurich */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x48, 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, 0x78, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xC9, 0x24, 0xC7, 0xF0,
-0xC9, 0x72, 0x82, 0x60, 0xCA, 0x16, 0x26, 0x90, 0xCA, 0xE1, 0x03, 0x60, 0xCB, 0xF6, 0x08, 0x90,
-0xCC, 0xC0, 0xE5, 0x60, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90,
-0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90,
-0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10,
-0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10,
-0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10,
-0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90,
-0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90,
-0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10,
-0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10,
-0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10,
-0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90,
-0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90,
-0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90,
-0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10,
-0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10,
-0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10,
-0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90,
-0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90,
-0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90,
-0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10,
-0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10,
-0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90,
-0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90,
-0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90,
-0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10,
-0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10,
-0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10,
-0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90,
-0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x00, 0x01, 0x00, 0x01,
-0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
+0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xCA, 0x17, 0x6A, 0x00,
+0xCA, 0xE2, 0x71, 0x00, 0xCB, 0xF7, 0x4C, 0x00, 0xCC, 0xC2, 0x53, 0x00, 0x15, 0x23, 0xEB, 0x90,
+0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90,
+0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10,
+0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10,
+0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10,
+0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90,
+0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90,
+0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90,
+0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10,
+0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10,
+0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10,
+0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90,
+0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90,
+0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90,
+0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10,
+0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10,
+0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90,
+0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90,
+0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90,
+0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10,
+0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10,
+0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10,
+0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90,
+0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90,
+0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90,
+0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10,
+0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10,
+0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10,
+0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90,
+0x7F, 0x8E, 0x7F, 0x90, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
-0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05,
-0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x43, 0x45, 0x53, 0x54,
-0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01,
+0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00,
+0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10,
+0x00, 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
+0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Factory */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x4C, 0x6F, 0x63, 0x61, 0x6C, 0x20, 0x74, 0x69, 0x6D, 0x65, 0x20, 0x7A, 0x6F, 0x6E,
0x65, 0x20, 0x6D, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x74, 0x2D, 0x2D, 0x73,
0x65, 0x65, 0x20, 0x7A, 0x69, 0x63, 0x20, 0x6D, 0x61, 0x6E, 0x75, 0x61, 0x6C, 0x20, 0x70, 0x61,
-0x67, 0x65, 0x00, 0x00, 0x00,
+0x67, 0x65, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00,
+0x00,
/* GB */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF2, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0D, 0x9B, 0x26, 0xAD, 0xA0,
0x9B, 0xD6, 0x05, 0x20, 0x9C, 0xCF, 0x30, 0xA0, 0x9D, 0xA4, 0xC3, 0xA0, 0x9E, 0x9C, 0x9D, 0xA0,
@@ -15078,10 +15610,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00,
0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x01, 0x01, 0x01,
-0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
+0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* GB-Eire */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF2, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0D, 0x9B, 0x26, 0xAD, 0xA0,
0x9B, 0xD6, 0x05, 0x20, 0x9C, 0xCF, 0x30, 0xA0, 0x9D, 0xA4, 0xC3, 0xA0, 0x9E, 0x9C, 0x9D, 0xA0,
@@ -15163,40 +15696,46 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00,
0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x01, 0x01, 0x01,
-0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
+0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* GMT */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* GMT0 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* GMT-0 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* GMT+0 */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Greenwich */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Hongkong */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x45, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x85, 0x69, 0x5A, 0xFC,
0xD3, 0x6A, 0xB7, 0x38, 0xD4, 0x93, 0x4A, 0xA8, 0xD5, 0x42, 0xB0, 0x38, 0xD6, 0x9A, 0xB9, 0xA8,
@@ -15222,16 +15761,18 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x6B, 0x04, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01,
0x04, 0x00, 0x00, 0x70, 0x80, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x48, 0x4B, 0x53, 0x54, 0x00,
-0x48, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x48, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* HST */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0x73, 0x60,
-0x00, 0x00, 0x48, 0x53, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x48, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Iceland */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0x8B, 0x60, 0x83, 0x94,
0x9C, 0x91, 0x1E, 0x00, 0x9D, 0xD1, 0x88, 0x90, 0x9E, 0x72, 0x51, 0x80, 0x9F, 0xD5, 0x03, 0x10,
@@ -15257,88 +15798,121 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x09, 0x00, 0x00,
0x00, 0x00, 0x01, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D,
0x52, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x53, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Indian/Antananarivo */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x47, 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, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0D, 0x91, 0xF3, 0xCD, 0xF4,
0xE2, 0x33, 0xC0, 0xC0, 0xE2, 0xAB, 0xB9, 0x40, 0x01, 0x02, 0x03, 0x00, 0x00, 0x2C, 0x8C, 0x00,
0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x00, 0x00, 0x38, 0x40, 0x01, 0x08, 0x00, 0x00, 0x2A,
0x30, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x41, 0x54, 0x00, 0x45, 0x41, 0x53, 0x54, 0x00,
-0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Indian/Chagos */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x49, 0x4F, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x89, 0x7E, 0xF7, 0x9C,
0x30, 0xE6, 0xDD, 0xB0, 0x01, 0x02, 0x00, 0x00, 0x43, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x46, 0x50,
0x00, 0x04, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x49, 0x4F, 0x54, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00,
+0x00, 0x00,
/* Indian/Christmas */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70,
-0x00, 0x00, 0x43, 0x58, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x43, 0x58, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Indian/Cocos */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x5B, 0x68,
-0x00, 0x00, 0x43, 0x43, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x43, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Indian/Comoro */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4B, 0x4D, 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, 0x08, 0x91, 0xF3, 0xD1, 0xF0,
0x01, 0x00, 0x00, 0x28, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Indian/Kerguelen */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x46, 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, 0x08, 0xDA, 0x61, 0x62, 0x80,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x50, 0x00, 0x04, 0x7A, 0x7A, 0x7A,
-0x00, 0x54, 0x46, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x54, 0x46, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Indian/Mahe */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x43, 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, 0x08, 0x88, 0x64, 0xE6, 0x84,
0x01, 0x00, 0x00, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x53, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x53, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Indian/Maldives */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x56, 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, 0x08, 0xED, 0x2F, 0xC3, 0x98,
0x01, 0x00, 0x00, 0x44, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x46, 0x50, 0x00, 0x04, 0x4D, 0x4D, 0x54,
-0x00, 0x4D, 0x56, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x4D, 0x56, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Indian/Mauritius */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 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, 0x08, 0x89, 0x7F, 0x05, 0x98,
-0x01, 0x00, 0x00, 0x35, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x4D, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0x89, 0x7F, 0x05, 0x98,
+0x18, 0x05, 0xED, 0x40, 0x18, 0xDB, 0x72, 0x30, 0x49, 0x03, 0x96, 0xE0, 0x49, 0xCE, 0x9D, 0xE0,
+0x4A, 0xE3, 0x78, 0xE0, 0x4B, 0xAE, 0x7F, 0xE0, 0x4C, 0xCC, 0x95, 0x60, 0x4D, 0x8E, 0x61, 0xE0,
+0x4E, 0xAC, 0x77, 0x60, 0x4F, 0x6E, 0x43, 0xE0, 0x50, 0x8C, 0x59, 0x60, 0x51, 0x57, 0x60, 0x60,
+0x52, 0x6C, 0x3B, 0x60, 0x53, 0x37, 0x42, 0x60, 0x54, 0x4C, 0x1D, 0x60, 0x55, 0x17, 0x24, 0x60,
+0x56, 0x2B, 0xFF, 0x60, 0x56, 0xF7, 0x06, 0x60, 0x58, 0x15, 0x1B, 0xE0, 0x58, 0xD6, 0xE8, 0x60,
+0x59, 0xF4, 0xFD, 0xE0, 0x5A, 0xB6, 0xCA, 0x60, 0x5B, 0xD4, 0xDF, 0xE0, 0x5C, 0x9F, 0xE6, 0xE0,
+0x5D, 0xB4, 0xC1, 0xE0, 0x5E, 0x7F, 0xC8, 0xE0, 0x5F, 0x94, 0xA3, 0xE0, 0x60, 0x5F, 0xAA, 0xE0,
+0x61, 0x7D, 0xC0, 0x60, 0x62, 0x3F, 0x8C, 0xE0, 0x63, 0x5D, 0xA2, 0x60, 0x64, 0x1F, 0x6E, 0xE0,
+0x65, 0x3D, 0x84, 0x60, 0x66, 0x08, 0x8B, 0x60, 0x67, 0x1D, 0x66, 0x60, 0x67, 0xE8, 0x6D, 0x60,
+0x68, 0xFD, 0x48, 0x60, 0x69, 0xC8, 0x4F, 0x60, 0x6A, 0xDD, 0x2A, 0x60, 0x6B, 0xA8, 0x31, 0x60,
+0x6C, 0xC6, 0x46, 0xE0, 0x6D, 0x88, 0x13, 0x60, 0x6E, 0xA6, 0x28, 0xE0, 0x6F, 0x67, 0xF5, 0x60,
+0x70, 0x86, 0x0A, 0xE0, 0x71, 0x51, 0x11, 0xE0, 0x72, 0x65, 0xEC, 0xE0, 0x73, 0x30, 0xF3, 0xE0,
+0x74, 0x45, 0xCE, 0xE0, 0x75, 0x10, 0xD5, 0xE0, 0x76, 0x2E, 0xEB, 0x60, 0x76, 0xF0, 0xB7, 0xE0,
+0x78, 0x0E, 0xCD, 0x60, 0x78, 0xD0, 0x99, 0xE0, 0x79, 0xEE, 0xAF, 0x60, 0x7A, 0xB0, 0x7B, 0xE0,
+0x7B, 0xCE, 0x91, 0x60, 0x7C, 0x99, 0x98, 0x60, 0x7D, 0xAE, 0x73, 0x60, 0x7E, 0x79, 0x7A, 0x60,
+0x7F, 0x8E, 0x55, 0x60, 0x02, 0x01, 0x02, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03,
+0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03,
+0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03,
+0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03,
+0x04, 0x03, 0x00, 0x00, 0x35, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x46, 0x50, 0x01, 0x04, 0x00, 0x00,
+0x38, 0x40, 0x00, 0x09, 0x00, 0x00, 0x46, 0x50, 0x01, 0x04, 0x00, 0x00, 0x38, 0x40, 0x00, 0x09,
+0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x55, 0x53, 0x54, 0x00, 0x4D, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x00,
/* Indian/Mayotte */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x59, 0x54, 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, 0x08, 0x91, 0xF3, 0xD0, 0x18,
0x01, 0x00, 0x00, 0x2A, 0x68, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Indian/Reunion */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x45, 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, 0x08, 0x91, 0xCC, 0x39, 0x80,
0x01, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x52, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x52, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Iran */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0x9A, 0x6C, 0x7D, 0xC8,
0xD2, 0xDB, 0x12, 0xC8, 0x0E, 0xBB, 0xA2, 0x48, 0x0F, 0x74, 0x2D, 0x40, 0x10, 0x8E, 0x40, 0x30,
@@ -15376,10 +15950,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x08, 0x00, 0x00, 0x46, 0x50, 0x01, 0x0D, 0x00, 0x00, 0x38, 0x40, 0x00, 0x08, 0x00, 0x00,
0x3F, 0x48, 0x01, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x54, 0x4D, 0x54, 0x00, 0x49, 0x52, 0x53, 0x54,
0x00, 0x49, 0x52, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00,
+0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Israel */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x8E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x9E, 0x30, 0x45, 0x88,
0xC8, 0x59, 0xB2, 0xE0, 0xCC, 0xE5, 0xC1, 0x50, 0xCD, 0xAC, 0xFE, 0x00, 0xCE, 0xC6, 0xF4, 0xD0,
@@ -15429,10 +16003,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x02, 0x00, 0x00, 0x20, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00,
0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0C, 0x4A, 0x4D, 0x54, 0x00, 0x49, 0x44,
0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x49, 0x44, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Jamaica */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x15, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x93, 0x0F, 0xB5, 0x00,
0x08, 0x20, 0xC1, 0x70, 0x09, 0x10, 0xA4, 0x60, 0x09, 0xAD, 0x94, 0xF0, 0x0A, 0xF0, 0x86, 0x60,
@@ -15443,28 +16017,31 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02,
0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xB8, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00,
0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45,
-0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Japan */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xC3, 0xCE, 0x85, 0x70,
0xD7, 0x3E, 0x1E, 0x90, 0xD7, 0xEC, 0x16, 0x80, 0xD8, 0xF9, 0x16, 0x90, 0xD9, 0xCB, 0xF8, 0x80,
0xDB, 0x07, 0x1D, 0x10, 0xDB, 0xAB, 0xDA, 0x80, 0xDC, 0xE6, 0xFF, 0x10, 0xDD, 0x8B, 0xBC, 0x80,
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x00, 0x00,
0x00, 0x8C, 0xA0, 0x01, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x08, 0x43, 0x4A, 0x54, 0x00, 0x4A,
-0x44, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x44, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Kwajalein */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0xFF, 0x86, 0x1B, 0x50,
0x2C, 0x74, 0xBC, 0xC0, 0x01, 0x02, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x00, 0xFF, 0xFF, 0x57, 0x40,
0x00, 0x04, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x00, 0x4D, 0x48, 0x54, 0x00, 0x4B, 0x57, 0x41, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x00,
/* Libya */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x1D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0xA1, 0xF2, 0xC1, 0x24,
0xDD, 0xBB, 0xB1, 0x10, 0xDE, 0x23, 0xAD, 0x60, 0xE1, 0x78, 0xD2, 0x10, 0xE1, 0xE7, 0x65, 0xE0,
@@ -15478,46 +16055,47 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x01, 0x03, 0x00, 0x00, 0x0C,
0x5C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x00,
0x00, 0x1C, 0x20, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45,
-0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89,
+0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* MET */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x86, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x0C, 0x17, 0x60,
+0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x0C, 0x17, 0x60,
0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xD9, 0xAE, 0x90, 0x9D, 0xA4, 0xB5, 0x90, 0x9E, 0xB9, 0x90, 0x90,
0x9F, 0x84, 0x97, 0x90, 0xC8, 0x09, 0x71, 0x90, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90,
-0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x82, 0x25, 0x10, 0x0D, 0xA4, 0x63, 0x90,
-0x0E, 0x8B, 0x1A, 0x10, 0x0F, 0x84, 0x45, 0x90, 0x10, 0x74, 0x36, 0x90, 0x11, 0x64, 0x27, 0x90,
-0x12, 0x54, 0x18, 0x90, 0x13, 0x4D, 0x44, 0x10, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90,
-0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90,
-0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10,
-0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10,
-0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10,
-0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90,
-0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90,
-0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90,
-0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10,
-0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10,
-0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10,
-0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90,
-0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90,
-0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90,
-0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10,
-0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10,
-0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90,
-0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90,
-0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90,
-0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10,
-0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10,
-0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10,
-0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90,
-0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90,
-0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90,
-0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10,
-0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10,
-0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10,
-0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90,
-0x7F, 0x8E, 0x7F, 0x90, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
+0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x82, 0x25, 0x10, 0xD1, 0x72, 0x16, 0x10,
+0xD2, 0x4E, 0x40, 0x90, 0x0D, 0xA4, 0x63, 0x90, 0x0E, 0x8B, 0x1A, 0x10, 0x0F, 0x84, 0x45, 0x90,
+0x10, 0x74, 0x36, 0x90, 0x11, 0x64, 0x27, 0x90, 0x12, 0x54, 0x18, 0x90, 0x13, 0x4D, 0x44, 0x10,
+0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90,
+0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90,
+0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10,
+0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10,
+0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10,
+0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90,
+0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90,
+0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10,
+0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10,
+0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10,
+0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90,
+0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90,
+0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90,
+0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10,
+0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10,
+0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10,
+0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90,
+0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90,
+0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90,
+0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10,
+0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10,
+0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90,
+0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90,
+0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90,
+0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10,
+0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10,
+0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10,
+0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90,
+0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x00, 0x01, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
@@ -15525,13 +16103,14 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
-0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00,
-0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10,
-0x00, 0x05, 0x4D, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
-0x00, 0x00, 0x00,
+0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
+0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05,
+0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x4D, 0x45, 0x53, 0x54,
+0x00, 0x4D, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Mexico/BajaNorte */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0xA5, 0xB6, 0xF6, 0x80,
0xA9, 0x79, 0x4F, 0x70, 0xAF, 0xF2, 0x7C, 0xF0, 0xB6, 0x66, 0x64, 0x70, 0xB7, 0x1B, 0x10, 0x00,
@@ -15584,10 +16163,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x04, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x0C, 0xFF, 0xFF, 0x9D,
0x90, 0x01, 0x10, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54,
0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Mexico/BajaSur */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0xA5, 0xB6, 0xE8, 0x70,
0xAF, 0xF2, 0x6E, 0xE0, 0xB6, 0x66, 0x56, 0x60, 0xB7, 0x43, 0xD2, 0x60, 0xB8, 0x0C, 0x36, 0x60,
@@ -15622,10 +16202,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x3C, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF,
0xFF, 0x8F, 0x80, 0x00, 0x0C, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x4D,
0x53, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x4D, 0x44, 0x54, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Mexico/General */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0xA5, 0xB6, 0xE8, 0x70,
0xAF, 0xF2, 0x6E, 0xE0, 0xB6, 0x66, 0x56, 0x60, 0xB7, 0x43, 0xD2, 0x60, 0xB8, 0x0C, 0x36, 0x60,
@@ -15662,16 +16243,17 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF,
0xB9, 0xB0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00,
0x43, 0x44, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00,
+0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* MST */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0x9D, 0x90,
-0x00, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* MST7MDT */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x95, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x3A, 0x90,
0x9F, 0xBB, 0x07, 0x80, 0xA0, 0x86, 0x1C, 0x90, 0xA1, 0x9A, 0xE9, 0x80, 0xCB, 0x89, 0x0C, 0x90,
@@ -15723,10 +16305,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00,
0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0x4D, 0x44, 0x54,
0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00,
-0x01, 0x00, 0x00, 0x00, 0x01,
+0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00,
+0x00,
/* Navajo */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x9D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x3A, 0x90,
0x9F, 0xBB, 0x07, 0x80, 0xA0, 0x86, 0x1C, 0x90, 0xA1, 0x9A, 0xE9, 0x80, 0xA2, 0x65, 0xFE, 0x90,
@@ -15780,10 +16363,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xAB,
0xA0, 0x01, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, 0xFF,
0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54,
-0x00, 0x4D, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+0x00, 0x4D, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* NZ */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0F, 0xB0, 0xB4, 0xB2, 0xE8,
0xB1, 0x51, 0x87, 0x58, 0xB2, 0x78, 0xE5, 0x68, 0xB3, 0x43, 0xE5, 0x60, 0xB4, 0x58, 0xC7, 0x68,
@@ -15838,10 +16422,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0xA8, 0xC0, 0x01, 0x00, 0x00, 0x00, 0xB6, 0xD0, 0x01, 0x0A, 0x00, 0x00, 0xA8, 0xC0, 0x00,
0x00, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x00, 0x4E, 0x5A, 0x53, 0x54, 0x00, 0x4E, 0x5A, 0x4D, 0x54,
0x00, 0x4E, 0x5A, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00,
+0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* NZ-CHAT */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0xE7, 0x8B, 0xC2, 0x04,
0x09, 0x18, 0xFD, 0xE0, 0x09, 0xAC, 0xA5, 0xE0, 0x0A, 0xEF, 0xA5, 0x60, 0x0B, 0x9E, 0xFC, 0xE0,
@@ -15886,18 +16470,20 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0xAB, 0xFC,
0x00, 0x00, 0x00, 0x00, 0xC1, 0x5C, 0x01, 0x04, 0x00, 0x00, 0xB3, 0x4C, 0x00, 0x0A, 0x00, 0x00,
0xB3, 0x4C, 0x00, 0x0A, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x48, 0x41, 0x44, 0x54, 0x00, 0x43, 0x48,
-0x41, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x41, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Pacific/Apia */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x57, 0x53, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x91, 0x05, 0xFC, 0x00,
0xDA, 0x62, 0x04, 0x38, 0x01, 0x02, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x5E, 0x48,
0x00, 0x04, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x41, 0x4D, 0x54,
-0x00, 0x57, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x57, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Pacific/Auckland */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4E, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0F, 0xB0, 0xB4, 0xB2, 0xE8,
0xB1, 0x51, 0x87, 0x58, 0xB2, 0x78, 0xE5, 0x68, 0xB3, 0x43, 0xE5, 0x60, 0xB4, 0x58, 0xC7, 0x68,
@@ -15952,10 +16538,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0xA8, 0xC0, 0x01, 0x00, 0x00, 0x00, 0xB6, 0xD0, 0x01, 0x0A, 0x00, 0x00, 0xA8, 0xC0, 0x00,
0x00, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x00, 0x4E, 0x5A, 0x53, 0x54, 0x00, 0x4E, 0x5A, 0x4D, 0x54,
0x00, 0x4E, 0x5A, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00,
+0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0E, 0x6D, 0x6F,
+0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73,
/* Pacific/Chatham */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4E, 0x5A, 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, 0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0xE7, 0x8B, 0xC2, 0x04,
0x09, 0x18, 0xFD, 0xE0, 0x09, 0xAC, 0xA5, 0xE0, 0x0A, 0xEF, 0xA5, 0x60, 0x0B, 0x9E, 0xFC, 0xE0,
@@ -16000,10 +16587,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0xAB, 0xFC,
0x00, 0x00, 0x00, 0x00, 0xC1, 0x5C, 0x01, 0x04, 0x00, 0x00, 0xB3, 0x4C, 0x00, 0x0A, 0x00, 0x00,
0xB3, 0x4C, 0x00, 0x0A, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x48, 0x41, 0x44, 0x54, 0x00, 0x43, 0x48,
-0x41, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x41, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x43, 0x68, 0x61, 0x74, 0x68, 0x61, 0x6D, 0x20,
+0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x73,
/* Pacific/Easter */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0F, 0xB9, 0xC7, 0x40, 0x88,
0xCC, 0x1C, 0x6E, 0x40, 0xCC, 0x6C, 0xE7, 0xD0, 0xD4, 0x1B, 0xC9, 0xB0, 0xFD, 0xD1, 0x3C, 0x40,
@@ -16054,10 +16643,12 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x09, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x09, 0xFF,
0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x09, 0x45, 0x4D, 0x54, 0x00, 0x45,
0x41, 0x53, 0x54, 0x00, 0x45, 0x41, 0x53, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01,
-0x00, 0x01, 0x01, 0x00, 0x01, 0x01,
+0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00,
+0x00, 0x1C, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x20,
+0x26, 0x20, 0x53, 0x61, 0x6C, 0x61, 0x20, 0x79, 0x20, 0x47, 0x6F, 0x6D, 0x65, 0x7A,
/* Pacific/Efate */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x56, 0x55, 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, 0x15, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x92, 0xF5, 0xC2, 0xB4,
0x19, 0xD2, 0xF7, 0xD0, 0x1A, 0xC2, 0xDA, 0xC0, 0x1B, 0xDA, 0x66, 0xD0, 0x1C, 0xA2, 0xBC, 0xC0,
@@ -16068,68 +16659,79 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x9D, 0xCC, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xC0, 0x01,
0x04, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x56, 0x55, 0x53, 0x54, 0x00,
-0x56, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x56, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Pacific/Enderbury */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4B, 0x49, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x12, 0x56, 0x04, 0xC0,
0x2F, 0x06, 0x8B, 0x30, 0x01, 0x02, 0xFF, 0xFF, 0x57, 0x40, 0x00, 0x00, 0xFF, 0xFF, 0x65, 0x50,
0x00, 0x00, 0x00, 0x00, 0xB6, 0xD0, 0x00, 0x00, 0x50, 0x48, 0x4F, 0x54, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x50,
+0x68, 0x6F, 0x65, 0x6E, 0x69, 0x78, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x73,
/* Pacific/Fakaofo */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0x73, 0x60,
-0x00, 0x00, 0x54, 0x4B, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x54, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Pacific/Fiji */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+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, 0x05, 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,
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,
+0x46, 0x4A, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Pacific/Funafuti */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xA8, 0xC0,
-0x00, 0x00, 0x54, 0x56, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x54, 0x56, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Pacific/Galapagos */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x43, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0xB6, 0xA4, 0x4C, 0x80,
0x1E, 0x18, 0xC4, 0x50, 0x01, 0x02, 0xFF, 0xFF, 0xAC, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0,
0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x43, 0x54, 0x00,
-0x47, 0x41, 0x4C, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x47, 0x41, 0x4C, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x11, 0x47, 0x61, 0x6C, 0x61, 0x70, 0x61, 0x67, 0x6F, 0x73,
+0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x73,
/* Pacific/Gambier */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x46, 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, 0x09, 0x94, 0x50, 0x48, 0x04,
0x01, 0xFF, 0xFF, 0x81, 0x7C, 0x00, 0x00, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x47, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x47, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x47, 0x61, 0x6D, 0x62, 0x69, 0x65, 0x72, 0x20, 0x49, 0x73,
+0x6C, 0x61, 0x6E, 0x64, 0x73,
/* Pacific/Guadalcanal */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x53, 0x42, 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, 0x08, 0x94, 0x4F, 0x33, 0x8C,
0x01, 0x00, 0x00, 0x95, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x53, 0x42, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x53, 0x42, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Pacific/Guam */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x47, 0x55, 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, 0x09, 0x3A, 0x43, 0x5E, 0x60,
0x01, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x04, 0x47, 0x53, 0x54,
-0x00, 0x43, 0x68, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x43, 0x68, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Pacific/Honolulu */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x10, 0xBB, 0x05, 0x43, 0x48,
0xBB, 0x20, 0xE4, 0xB8, 0xCB, 0x89, 0x3D, 0xC8, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x49, 0x38,
@@ -16137,87 +16739,99 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFF, 0xFF, 0x7A, 0x68, 0x01, 0x04, 0xFF, 0xFF, 0x7A, 0x68, 0x01, 0x08, 0xFF, 0xFF, 0x7A, 0x68,
0x01, 0x0C, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x00, 0x48, 0x53, 0x54, 0x00, 0x48, 0x44, 0x54, 0x00,
0x48, 0x57, 0x54, 0x00, 0x48, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
-0x01, 0x00,
+0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x06, 0x48, 0x61,
+0x77, 0x61, 0x69, 0x69,
/* Pacific/Johnston */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0x73, 0x60,
-0x00, 0x00, 0x48, 0x53, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x48, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x0E, 0x4A, 0x6F, 0x68, 0x6E, 0x73, 0x74, 0x6F, 0x6E, 0x20, 0x41, 0x74, 0x6F,
+0x6C, 0x6C,
/* Pacific/Kiritimati */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4B, 0x49, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x12, 0x55, 0xF2, 0x00,
0x2F, 0x06, 0x7D, 0x20, 0x01, 0x02, 0xFF, 0xFF, 0x6A, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x73, 0x60,
0x00, 0x00, 0x00, 0x00, 0xC4, 0xE0, 0x00, 0x00, 0x4C, 0x49, 0x4E, 0x54, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0C, 0x4C,
+0x69, 0x6E, 0x65, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x73,
/* Pacific/Kosrae */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x46, 0x4D, 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, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0xFF, 0x86, 0x1B, 0x50,
0x36, 0x8B, 0x67, 0x40, 0x01, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xC0,
-0x00, 0x00, 0x4B, 0x4F, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x4B, 0x4F, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x06, 0x4B, 0x6F, 0x73, 0x72, 0x61, 0x65,
/* Pacific/Kwajalein */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x48, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0xFF, 0x86, 0x1B, 0x50,
0x2C, 0x74, 0xBC, 0xC0, 0x01, 0x02, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x00, 0xFF, 0xFF, 0x57, 0x40,
0x00, 0x04, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x00, 0x4D, 0x48, 0x54, 0x00, 0x4B, 0x57, 0x41, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x09, 0x4B, 0x77, 0x61, 0x6A, 0x61, 0x6C, 0x65, 0x69, 0x6E,
/* Pacific/Majuro */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x48, 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, 0xFF, 0x86, 0x1B, 0x50,
0x01, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x00, 0x4D, 0x48, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00,
+0x0E, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x73,
/* Pacific/Marquesas */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x46, 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, 0x09, 0x94, 0x50, 0x4C, 0x48,
0x01, 0xFF, 0xFF, 0x7D, 0x38, 0x00, 0x00, 0xFF, 0xFF, 0x7A, 0x68, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x4D, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x4D, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x11, 0x4D, 0x61, 0x72, 0x71, 0x75, 0x65, 0x73, 0x61, 0x73, 0x20,
+0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x73,
/* Pacific/Midway */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x4D, 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, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0xE6, 0x75, 0x8A, 0xB0,
0xE6, 0xED, 0x75, 0x20, 0xFA, 0xD2, 0x55, 0xB0, 0x1A, 0x2B, 0x30, 0x30, 0x01, 0x00, 0x02, 0x03,
0xFF, 0xFF, 0x65, 0x50, 0x00, 0x00, 0xFF, 0xFF, 0x73, 0x60, 0x01, 0x04, 0xFF, 0xFF, 0x65, 0x50,
0x00, 0x08, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x0C, 0x4E, 0x53, 0x54, 0x00, 0x4E, 0x44, 0x54, 0x00,
0x42, 0x53, 0x54, 0x00, 0x53, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x0E, 0x4D, 0x69, 0x64, 0x77,
+0x61, 0x79, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, 0x73,
/* Pacific/Nauru */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4E, 0x52, 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, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0C, 0xA3, 0xE7, 0x2B, 0x04,
0xCB, 0xB4, 0xBF, 0x48, 0xD0, 0x42, 0x50, 0x70, 0x11, 0x8B, 0x04, 0xC8, 0x01, 0x02, 0x01, 0x03,
0x00, 0x00, 0x9C, 0x7C, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xB8, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90,
0x00, 0x08, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x4E, 0x52, 0x54, 0x00,
-0x4A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x4A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Pacific/Niue */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4E, 0x55, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0xDC, 0x43, 0x35, 0x60,
0x10, 0x74, 0xCA, 0x38, 0x01, 0x02, 0xFF, 0xFF, 0x60, 0xA0, 0x00, 0x00, 0xFF, 0xFF, 0x5E, 0x48,
0x00, 0x00, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x00, 0x4E, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00,
+0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Pacific/Norfolk */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4E, 0x46, 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, 0x08, 0xDC, 0x41, 0xF8, 0x80,
0x01, 0x00, 0x00, 0x9D, 0x80, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xB8, 0x00, 0x04, 0x4E, 0x4D, 0x54,
-0x00, 0x4E, 0x46, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x4E, 0x46, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Pacific/Noumea */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4E, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0x92, 0xF5, 0xC4, 0x74,
0x0E, 0xE6, 0xBA, 0x50, 0x0F, 0x56, 0xBB, 0xC0, 0x10, 0xC6, 0x9C, 0x50, 0x11, 0x37, 0xEF, 0x40,
@@ -16225,45 +16839,52 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x9C, 0x0C, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xC0, 0x01, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x00,
0x09, 0x00, 0x00, 0xA8, 0xC0, 0x01, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x09, 0x4C, 0x4D, 0x54,
0x00, 0x4E, 0x43, 0x53, 0x54, 0x00, 0x4E, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
-0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
+
/* Pacific/Pago_Pago */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x41, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0x91, 0x05, 0xFB, 0x08,
0xDA, 0x62, 0x04, 0x38, 0xFA, 0xD2, 0x55, 0xB0, 0x1A, 0x2B, 0x30, 0x30, 0x01, 0x02, 0x03, 0x04,
0xFF, 0xFF, 0x5F, 0xF8, 0x00, 0x00, 0xFF, 0xFF, 0x5E, 0x48, 0x00, 0x04, 0xFF, 0xFF, 0x65, 0x50,
0x00, 0x09, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x0D, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x11, 0x4C, 0x4D,
0x54, 0x00, 0x53, 0x41, 0x4D, 0x54, 0x00, 0x4E, 0x53, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x53,
-0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Pacific/Palau */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90,
-0x00, 0x00, 0x50, 0x57, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x50, 0x57, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Pacific/Pitcairn */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x4E, 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, 0x08, 0x35, 0x44, 0x42, 0x08,
0x01, 0xFF, 0xFF, 0x88, 0x78, 0x00, 0x00, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x04, 0x50, 0x4E, 0x54,
-0x00, 0x50, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x50, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Pacific/Ponape */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x46, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x9A, 0xB0,
-0x00, 0x00, 0x50, 0x4F, 0x4E, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x50, 0x4F, 0x4E, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x10, 0x50, 0x6F, 0x6E, 0x61, 0x70, 0x65, 0x20, 0x28, 0x50, 0x6F, 0x68,
+0x6E, 0x70, 0x65, 0x69, 0x29,
/* Pacific/Port_Moresby */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x8C, 0xA0,
-0x00, 0x00, 0x50, 0x47, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x50, 0x47, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Pacific/Rarotonga */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x43, 0x4B, 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, 0x1A, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0A, 0x10, 0xAC, 0x1B, 0x28,
0x11, 0x3F, 0xB5, 0x18, 0x12, 0x79, 0x81, 0x20, 0x13, 0x1F, 0x97, 0x18, 0x14, 0x59, 0x63, 0x20,
@@ -16276,41 +16897,47 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF,
0x6C, 0x58, 0x00, 0x00, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x00, 0xFF, 0xFF, 0x7A, 0x68, 0x01, 0x04,
0x43, 0x4B, 0x54, 0x00, 0x43, 0x4B, 0x48, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Pacific/Saipan */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x50, 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, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0xFF, 0x86, 0x37, 0x70,
0x3A, 0x43, 0x5E, 0x60, 0x01, 0x02, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x00, 0x00, 0x00, 0x8C, 0xA0,
0x00, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x04, 0x4D, 0x50, 0x54, 0x00, 0x43, 0x68, 0x53, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x00,
/* Pacific/Samoa */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0x91, 0x05, 0xFB, 0x08,
0xDA, 0x62, 0x04, 0x38, 0xFA, 0xD2, 0x55, 0xB0, 0x1A, 0x2B, 0x30, 0x30, 0x01, 0x02, 0x03, 0x04,
0xFF, 0xFF, 0x5F, 0xF8, 0x00, 0x00, 0xFF, 0xFF, 0x5E, 0x48, 0x00, 0x04, 0xFF, 0xFF, 0x65, 0x50,
0x00, 0x09, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x0D, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x11, 0x4C, 0x4D,
0x54, 0x00, 0x53, 0x41, 0x4D, 0x54, 0x00, 0x4E, 0x53, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x53,
-0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Pacific/Tahiti */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x50, 0x46, 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, 0x09, 0x94, 0x50, 0x55, 0xB8,
0x01, 0xFF, 0xFF, 0x73, 0xC8, 0x00, 0x00, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x04, 0x4C, 0x4D, 0x54,
-0x00, 0x54, 0x41, 0x48, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x54, 0x41, 0x48, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x53, 0x6F, 0x63, 0x69, 0x65, 0x74, 0x79, 0x20, 0x49, 0x73,
+0x6C, 0x61, 0x6E, 0x64, 0x73,
/* Pacific/Tarawa */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x4B, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0xA8, 0xC0,
-0x00, 0x00, 0x47, 0x49, 0x4C, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x47, 0x49, 0x4C, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x0F, 0x47, 0x69, 0x6C, 0x62, 0x65, 0x72, 0x74, 0x20, 0x49, 0x73, 0x6C,
+0x61, 0x6E, 0x64, 0x73,
/* Pacific/Tongatapu */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x09, 0xC9, 0x73, 0x42, 0x90,
0x37, 0xFB, 0x47, 0xD0, 0x38, 0xD3, 0x7D, 0xD0, 0x3A, 0x04, 0x08, 0x50, 0x3A, 0x72, 0xB8, 0x40,
@@ -16318,34 +16945,40 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0xAD, 0x70, 0x00, 0x00, 0x00, 0x00, 0xB6, 0xD0, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xE0, 0x01,
0x04, 0x00, 0x00, 0xB6, 0xD0, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xE0, 0x01, 0x04, 0x54, 0x4F, 0x54,
0x00, 0x54, 0x4F, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Pacific/Truk */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x46, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x8C, 0xA0,
-0x00, 0x00, 0x54, 0x52, 0x55, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x54, 0x52, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x14, 0x54, 0x72, 0x75, 0x6B, 0x20, 0x28, 0x43, 0x68, 0x75, 0x75, 0x6B,
+0x29, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x59, 0x61, 0x70,
/* Pacific/Wake */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x55, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0xA8, 0xC0,
-0x00, 0x00, 0x57, 0x41, 0x4B, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x57, 0x41, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x0B, 0x57, 0x61, 0x6B, 0x65, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64,
+
/* Pacific/Wallis */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x57, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xA8, 0xC0,
-0x00, 0x00, 0x57, 0x46, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x57, 0x46, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Pacific/Yap */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x8C, 0xA0,
-0x00, 0x00, 0x54, 0x52, 0x55, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x54, 0x52, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* Poland */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xA7, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x16, 0x99, 0xA8, 0x2A, 0xD0,
0x9B, 0x0C, 0x17, 0x60, 0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xD9, 0xAE, 0x90, 0x9D, 0xA4, 0xB5, 0x90,
@@ -16406,10 +17039,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x57, 0x4D, 0x54, 0x00, 0x43,
0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54,
0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x01,
+0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00,
+0x00,
/* Portugal */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xDD, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x1B, 0x92, 0xE6, 0x97, 0x10,
0x9B, 0x4B, 0x6D, 0x70, 0x9B, 0xFE, 0xC7, 0x80, 0x9C, 0x9C, 0xED, 0x70, 0x9D, 0xC9, 0x83, 0x70,
@@ -16488,10 +17122,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x4D, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x57, 0x45, 0x4D, 0x54,
0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
-
+0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* PRC */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x11, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xB0, 0xFE, 0x9A, 0xA0,
0xC8, 0x5C, 0x01, 0x80, 0xC8, 0xFA, 0x27, 0x70, 0xC9, 0xD5, 0x0E, 0x80, 0xCA, 0xDB, 0x5A, 0xF0,
@@ -16501,10 +17135,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
0x02, 0x00, 0x00, 0x71, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x04, 0x00, 0x00, 0x70,
0x80, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00,
+0x00,
/* PST8PDT */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x95, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x48, 0xA0,
0x9F, 0xBB, 0x15, 0x90, 0xA0, 0x86, 0x2A, 0xA0, 0xA1, 0x9A, 0xF7, 0x90, 0xCB, 0x89, 0x1A, 0xA0,
@@ -16556,10 +17191,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x00, 0xFF, 0xFF, 0x8F, 0x80, 0x00,
0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x0C, 0x50, 0x44, 0x54,
0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00,
-0x01, 0x00, 0x00, 0x00, 0x01,
+0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00,
+0x00,
/* ROC */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xD1, 0x97, 0xD3, 0x00,
0xD2, 0x61, 0x7A, 0x70, 0xD3, 0x79, 0x06, 0x80, 0xD4, 0x42, 0xAD, 0xF0, 0xD5, 0x5A, 0x3A, 0x00,
@@ -16575,10 +17211,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04,
-0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40,
+0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* ROK */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x08, 0x85, 0x93, 0x7E, 0x78,
0xB0, 0xFE, 0x8D, 0xF0, 0xB8, 0x84, 0xB4, 0x78, 0xE2, 0x4F, 0x29, 0xF0, 0xED, 0xE1, 0x92, 0x80,
@@ -16587,10 +17224,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x02, 0x03, 0x00, 0x01, 0x04, 0x01, 0x04, 0x01, 0x00, 0x00, 0x77, 0x88, 0x00, 0x00, 0x00, 0x00,
0x7E, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x04, 0x00, 0x00, 0x70, 0x80, 0x00, 0x00,
0x00, 0x00, 0x8C, 0xA0, 0x01, 0x04, 0x4B, 0x53, 0x54, 0x00, 0x4B, 0x44, 0x54, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Singapore */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x17, 0x86, 0x83, 0x85, 0xA3,
0xBA, 0x67, 0x4E, 0x90, 0xC0, 0x0A, 0xE4, 0x60, 0xCA, 0xB3, 0xE5, 0x60, 0xCB, 0x91, 0x5F, 0x08,
@@ -16600,10 +17238,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x0F, 0x00, 0x00, 0x69, 0x78, 0x00, 0x13, 0x00, 0x00,
0x70, 0x80, 0x00, 0x13, 0x53, 0x4D, 0x54, 0x00, 0x4D, 0x41, 0x4C, 0x54, 0x00, 0x4D, 0x41, 0x4C,
0x53, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x53, 0x47, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Turkey */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xAB, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x16, 0x90, 0x8B, 0xF5, 0x98,
0x9B, 0x0C, 0x17, 0x60, 0x9B, 0xD5, 0xBE, 0xD0, 0xA2, 0x65, 0x63, 0xE0, 0xA3, 0x7B, 0x82, 0x50,
@@ -16665,22 +17304,24 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x49, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53,
0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x54, 0x52, 0x53, 0x54, 0x00, 0x54, 0x52, 0x54, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x01,
+0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* UCT */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x55, 0x43, 0x54, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x55, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* Universal */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* US/Alaska */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x26, 0xCB, 0x89, 0x36, 0xC0,
0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x42, 0x30, 0xFA, 0xD2, 0x47, 0xA0, 0xFE, 0xB8, 0x63, 0x40,
@@ -16733,10 +17374,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x1C, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x21, 0x43, 0x41, 0x54, 0x00, 0x43, 0x41, 0x57, 0x54, 0x00,
0x43, 0x41, 0x50, 0x54, 0x00, 0x41, 0x48, 0x53, 0x54, 0x00, 0x41, 0x48, 0x44, 0x54, 0x00, 0x59,
0x53, 0x54, 0x00, 0x41, 0x4B, 0x44, 0x54, 0x00, 0x41, 0x4B, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* US/Aleutian */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0xCB, 0x89, 0x44, 0xD0,
0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x50, 0x40, 0xFA, 0xD2, 0x55, 0xB0, 0xFE, 0xB8, 0x71, 0x50,
@@ -16789,10 +17431,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x19, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x1E, 0x4E, 0x53, 0x54, 0x00, 0x4E, 0x57, 0x54, 0x00, 0x4E,
0x50, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x42, 0x44, 0x54, 0x00, 0x41, 0x48, 0x53, 0x54, 0x00,
0x48, 0x41, 0x44, 0x54, 0x00, 0x48, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12,
+0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* US/Arizona */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x0A, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x9E, 0xA6, 0x3A, 0x90,
0x9F, 0xBB, 0x07, 0x80, 0xA0, 0x86, 0x1C, 0x90, 0xA1, 0x9A, 0xE9, 0x80, 0xCB, 0x89, 0x0C, 0x90,
@@ -16800,10 +17443,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFB, 0xE8, 0x58, 0x00, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x01, 0xFF, 0xFF,
0xAB, 0xA0, 0x01, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08,
0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00,
+0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* US/Central */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x9E, 0xA6, 0x2C, 0x80,
0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xA2, 0xCB, 0x74, 0x00,
@@ -16882,10 +17525,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x00, 0x01, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF,
0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01,
0x10, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54,
-0x00, 0x43, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
+0x00, 0x43, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* US/Eastern */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0xEB, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x1E, 0x70,
0x9F, 0xBA, 0xEB, 0x60, 0xA0, 0x86, 0x00, 0x70, 0xA1, 0x9A, 0xCD, 0x60, 0xA2, 0x65, 0xE2, 0x70,
@@ -16964,10 +17608,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x00, 0x01, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0xFF,
0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0x45, 0x44, 0x54, 0x00, 0x45,
0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
-0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* US/East-Indiana */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80,
0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCA, 0x57, 0x22, 0x80,
@@ -17004,10 +17648,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF,
0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53,
0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44,
-0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x89,
+0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* US/Hawaii */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x10, 0xBB, 0x05, 0x43, 0x48,
0xBB, 0x20, 0xE4, 0xB8, 0xCB, 0x89, 0x3D, 0xC8, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x49, 0x38,
@@ -17015,10 +17660,10 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFF, 0xFF, 0x7A, 0x68, 0x01, 0x04, 0xFF, 0xFF, 0x7A, 0x68, 0x01, 0x08, 0xFF, 0xFF, 0x7A, 0x68,
0x01, 0x0C, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x00, 0x48, 0x53, 0x54, 0x00, 0x48, 0x44, 0x54, 0x00,
0x48, 0x57, 0x54, 0x00, 0x48, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
-0x01, 0x00,
+0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* US/Indiana-Starke */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x9E, 0xA6, 0x2C, 0x80,
0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCB, 0x88, 0xFE, 0x80,
@@ -17072,10 +17717,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01,
0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43,
0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00,
+0x00,
/* US/Michigan */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x8B, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x85, 0xBD, 0x22, 0x5B,
0x99, 0x3C, 0x94, 0x00, 0xCB, 0x88, 0xF0, 0x70, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xFB, 0xE0,
@@ -17125,10 +17771,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01,
0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x45,
0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* US/Mountain */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x9D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x3A, 0x90,
0x9F, 0xBB, 0x07, 0x80, 0xA0, 0x86, 0x1C, 0x90, 0xA1, 0x9A, 0xE9, 0x80, 0xA2, 0x65, 0xFE, 0x90,
@@ -17182,10 +17829,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xAB,
0xA0, 0x01, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, 0xFF,
0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54,
-0x00, 0x4D, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+0x00, 0x4D, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* US/Pacific */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0xB9, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x48, 0xA0,
0x9F, 0xBB, 0x15, 0x90, 0xA0, 0x86, 0x2A, 0xA0, 0xA1, 0x9A, 0xF7, 0x90, 0xCB, 0x89, 0x1A, 0xA0,
@@ -17248,10 +17896,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x00, 0xFF,
0xFF, 0x8F, 0x80, 0x00, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01,
0x0C, 0x50, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* US/Pacific-New */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0xB9, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x48, 0xA0,
0x9F, 0xBB, 0x15, 0x90, 0xA0, 0x86, 0x2A, 0xA0, 0xA1, 0x9A, 0xF7, 0x90, 0xCB, 0x89, 0x1A, 0xA0,
@@ -17314,26 +17963,29 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x00, 0xFF,
0xFF, 0x8F, 0x80, 0x00, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01,
0x0C, 0x50, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8,
+0x80, 0x00, 0x00, 0x00, 0x00,
/* US/Samoa */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0x91, 0x05, 0xFB, 0x08,
0xDA, 0x62, 0x04, 0x38, 0xFA, 0xD2, 0x55, 0xB0, 0x1A, 0x2B, 0x30, 0x30, 0x01, 0x02, 0x03, 0x04,
0xFF, 0xFF, 0x5F, 0xF8, 0x00, 0x00, 0xFF, 0xFF, 0x5E, 0x48, 0x00, 0x04, 0xFF, 0xFF, 0x65, 0x50,
0x00, 0x09, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x0D, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x11, 0x4C, 0x4D,
0x54, 0x00, 0x53, 0x41, 0x4D, 0x54, 0x00, 0x4E, 0x53, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x53,
-0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54,
+0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* UTC */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x01, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
+0x00, 0x00, 0x00, 0x00,
/* WET */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0x7A, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x0D, 0xA4, 0x63, 0x90,
0x0E, 0x8B, 0x1A, 0x10, 0x0F, 0x84, 0x45, 0x90, 0x10, 0x74, 0x36, 0x90, 0x11, 0x64, 0x27, 0x90,
@@ -17375,10 +18027,11 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00,
0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57,
-0x45, 0x54, 0x00, 0x01, 0x01, 0x01, 0x01,
+0x45, 0x54, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00,
+0x00, 0x00, 0x00,
/* W-SU */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1E, 0x9B, 0x5F, 0x1E, 0xD8,
0x9D, 0x3E, 0xF2, 0x98, 0x9E, 0x2A, 0xEF, 0x18, 0x9E, 0xF7, 0x39, 0x88, 0x9F, 0x84, 0x58, 0x18,
@@ -17428,12 +18081,14 @@ const unsigned char timelib_timezone_db_data_builtin[247685] = {
0x30, 0x01, 0x19, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x4D, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54,
0x00, 0x4D, 0x44, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45,
0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Zulu */
-0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00, };
+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 = { "2008.2", 557, timezonedb_idx_builtin, timelib_timezone_db_data_builtin };
+const timelib_tzdb timezonedb_builtin = { "2009.1", 560, timezonedb_idx_builtin, timelib_timezone_db_data_builtin };
diff --git a/ext/date/lib/tm2unixtime.c b/ext/date/lib/tm2unixtime.c
index a4e6996b2..2a0f53a81 100644
--- a/ext/date/lib/tm2unixtime.c
+++ b/ext/date/lib/tm2unixtime.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: tm2unixtime.c,v 1.13.2.3.2.4 2008/01/26 16:26:47 derick Exp $ */
+/* $Id: tm2unixtime.c,v 1.13.2.3.2.7 2008/12/31 11:17:36 sebastian Exp $ */
#include "timelib.h"
@@ -136,35 +136,55 @@ static void do_adjust_relative(timelib_time* time)
static void do_adjust_special_weekday(timelib_time* time)
{
- timelib_sll current_dow, this_weekday = 0, count;
+ timelib_sll current_dow, count;
- current_dow = timelib_day_of_week(time->y, time->m, time->d);
count = time->special.amount;
+
+ current_dow = timelib_day_of_week(time->y, time->m, time->d);
if (count == 0) {
+ /* skip over saturday and sunday */
if (current_dow == 6) {
- this_weekday = 2;
+ time->d += 2;
}
+ /* skip over sunday */
if (current_dow == 0) {
- this_weekday = 1;
+ time->d += 1;
}
- time->d += this_weekday;
- return;
} else if (count > 0) {
+ /* skip over saturday and sunday */
if (current_dow == 5) {
- this_weekday = 2;
+ time->d += 2;
}
+ /* skip over sunday */
if (current_dow == 6) {
- this_weekday = 1;
+ time->d += 1;
}
- } else if (count < 0) {
- if (current_dow == 0) {
- this_weekday = -1;
+ /* add increments of 5 weekdays as a week */
+ time->d += (count / 5) * 7;
+ /* if current DOW plus the remainder > 5, add two days */
+ current_dow = timelib_day_of_week(time->y, time->m, time->d);
+ time->d += (count % 5);
+ if ((count % 5) + current_dow > 5) {
+ time->d += 2;
}
+ } else if (count < 0) {
+ /* skip over sunday and saturday */
if (current_dow == 1) {
- this_weekday = -2;
+ time->d -= 2;
+ }
+ /* skip over satruday */
+ if (current_dow == 0 ) {
+ time->d -= 1;
+ }
+ /* subtract increments of 5 weekdays as a week */
+ time->d += (count / 5) * 7;
+ /* if current DOW minus the remainder < 0, subtract two days */
+ current_dow = timelib_day_of_week(time->y, time->m, time->d);
+ time->d += (count % 5);
+ if ((count % 5) + current_dow < 1) {
+ time->d -= 2;
}
}
- time->d += this_weekday + ((count / 5) * 7) + (count % 5);
}
static void do_adjust_special(timelib_time* time)
@@ -178,6 +198,7 @@ static void do_adjust_special(timelib_time* time)
}
do_normalize(time);
memset(&(time->special), 0, sizeof(time->special));
+ time->have_relative = 0;
}
static timelib_sll do_years(timelib_sll year)
@@ -186,10 +207,10 @@ static timelib_sll do_years(timelib_sll year)
timelib_sll res = 0;
timelib_sll eras;
- eras = (year - 1970) / 400;
+ eras = (year - 1970) / 40000;
if (eras != 0) {
- year = year - (eras * 400);
- res += (SECS_PER_ERA * eras);
+ year = year - (eras * 40000);
+ res += (SECS_PER_ERA * eras * 100);
}
if (year >= 1970) {
diff --git a/ext/date/lib/unixtime2tm.c b/ext/date/lib/unixtime2tm.c
index 4b36e9c94..b5178e3f8 100644
--- a/ext/date/lib/unixtime2tm.c
+++ b/ext/date/lib/unixtime2tm.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: unixtime2tm.c,v 1.12.2.4.2.4 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: unixtime2tm.c,v 1.12.2.4.2.6 2008/12/31 11:17:36 sebastian Exp $ */
#include "timelib.h"
@@ -76,12 +76,18 @@ void timelib_unixtime2gmt(timelib_time* tm, timelib_sll ts)
*/
while (tmp_days <= 0) {
- cur_year--;
- DEBUG(printf("tmp_days=%lld, year=%lld\n", tmp_days, cur_year););
- if (timelib_is_leap(cur_year)) {
- tmp_days += DAYS_PER_LYEAR;
+ if (tmp_days < -1460970) {
+ cur_year -= 4000;
+ DEBUG(printf("tmp_days=%lld, year=%lld\n", tmp_days, cur_year););
+ tmp_days += 1460970;
} else {
- tmp_days += DAYS_PER_YEAR;
+ cur_year--;
+ DEBUG(printf("tmp_days=%lld, year=%lld\n", tmp_days, cur_year););
+ if (timelib_is_leap(cur_year)) {
+ tmp_days += DAYS_PER_LYEAR;
+ } else {
+ tmp_days += DAYS_PER_YEAR;
+ }
}
}
remainder += SECS_PER_DAY;
diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index 25189b5c6..840bd703c 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_date.c,v 1.43.2.45.2.58 2008/04/16 17:21:46 derick Exp $ */
+/* $Id: php_date.c,v 1.43.2.45.2.64 2008/12/31 11:17:36 sebastian Exp $ */
#include "php.h"
#include "php_streams.h"
@@ -269,9 +269,9 @@ struct _php_timezone_obj {
int initialized;
int type;
union {
- timelib_tzinfo *tz; // TIMELIB_ZONETYPE_ID;
- timelib_sll utc_offset; // TIMELIB_ZONETYPE_OFFSET
- struct // TIMELIB_ZONETYPE_ABBR
+ timelib_tzinfo *tz; /* TIMELIB_ZONETYPE_ID; */
+ timelib_sll utc_offset; /* TIMELIB_ZONETYPE_OFFSET */
+ struct /* TIMELIB_ZONETYPE_ABBR */
{
timelib_sll utc_offset;
char *abbr;
@@ -731,7 +731,7 @@ static char *date_format(char *format, int format_len, timelib_time *t, int loca
char buffer[33];
timelib_time_offset *offset = NULL;
timelib_sll isoweek, isoyear;
- int rfc_colon = 0;
+ int rfc_colon;
if (!format_len) {
return estrdup("");
@@ -761,6 +761,7 @@ static char *date_format(char *format, int format_len, timelib_time *t, int loca
timelib_isoweek_from_date(t->y, t->m, t->d, &isoweek, &isoyear);
for (i = 0; i < format_len; i++) {
+ rfc_colon = 0;
switch (format[i]) {
/* day */
case 'd': length = slprintf(buffer, 32, "%02d", (int) t->d); break;
@@ -1142,18 +1143,10 @@ PHP_FUNCTION(strtotime)
t = timelib_strtotime(times, time_len, &error, DATE_TIMEZONEDB);
error1 = error->error_count;
timelib_error_container_dtor(error);
- timelib_fill_holes(t, now, 0);
+ timelib_fill_holes(t, now, TIMELIB_NO_CLONE);
timelib_update_ts(t, tzi);
ts = timelib_date_to_int(t, &error2);
- /* if tz_info is not a copy, avoid double free */
- if (now->tz_info != tzi && now->tz_info) {
- timelib_tzinfo_dtor(now->tz_info);
- }
- if (t->tz_info != tzi) {
- timelib_tzinfo_dtor(t->tz_info);
- }
-
timelib_time_dtor(now);
timelib_time_dtor(t);
@@ -1195,7 +1188,7 @@ PHPAPI void php_mktime(INTERNAL_FUNCTION_PARAMETERS, int gmt)
case 6:
if (yea >= 0 && yea < 70) {
yea += 2000;
- } else if (yea >= 70 && yea <= 110) {
+ } else if (yea >= 70 && yea <= 100) {
yea += 1900;
}
now->y = yea;
@@ -1560,7 +1553,7 @@ static zend_object_value date_object_clone_date(zval *this_ptr TSRMLS_DC)
new_obj->time->tz_abbr = strdup(old_obj->time->tz_abbr);
}
if (old_obj->time->tz_info) {
- new_obj->time->tz_info = timelib_tzinfo_clone(old_obj->time->tz_info);
+ new_obj->time->tz_info = old_obj->time->tz_info;
}
return new_ov;
@@ -1644,9 +1637,6 @@ static void date_object_free_storage_date(void *object TSRMLS_DC)
php_date_obj *intern = (php_date_obj *)object;
if (intern->time) {
- if (intern->time->tz_info) {
- timelib_tzinfo_dtor(intern->time->tz_info);
- }
timelib_time_dtor(intern->time);
}
@@ -1684,14 +1674,11 @@ static int date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, int
timelib_time *now;
timelib_tzinfo *tzi;
timelib_error_container *err = NULL;
- int free_tzi = 0, type = TIMELIB_ZONETYPE_ID, new_dst, errors_found = 0;
+ int type = TIMELIB_ZONETYPE_ID, new_dst, errors_found = 0;
char *new_abbr;
timelib_sll new_offset;
if (dateobj->time) {
- if (dateobj->time->tz_info) {
- timelib_tzinfo_dtor(dateobj->time->tz_info);
- }
timelib_time_dtor(dateobj->time);
}
dateobj->time = timelib_strtotime(time_str_len ? time_str : "now", time_str_len ? time_str_len : sizeof("now") -1, &err, DATE_TIMEZONEDB);
@@ -1715,8 +1702,7 @@ static int date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, int
tzobj = (php_timezone_obj *) zend_object_store_get_object(timezone_object TSRMLS_CC);
switch (tzobj->type) {
case TIMELIB_ZONETYPE_ID:
- tzi = timelib_tzinfo_clone(tzobj->tzi.tz);
- free_tzi = 1;
+ tzi = tzobj->tzi.tz;
break;
case TIMELIB_ZONETYPE_OFFSET:
new_offset = tzobj->tzi.utc_offset;
@@ -1729,8 +1715,7 @@ static int date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, int
}
type = tzobj->type;
} else if (dateobj->time->tz_info) {
- tzi = timelib_tzinfo_clone(dateobj->time->tz_info);
- free_tzi = 1;
+ tzi = dateobj->time->tz_info;
} else {
tzi = get_timezone_info(TSRMLS_C);
}
@@ -1757,12 +1742,6 @@ static int date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, int
dateobj->time->have_weekday_relative = dateobj->time->have_relative = 0;
- if (type == TIMELIB_ZONETYPE_ID && now->tz_info != tzi) {
- timelib_tzinfo_dtor(now->tz_info);
- }
- if (free_tzi) {
- timelib_tzinfo_dtor(tzi);
- }
timelib_time_dtor(now);
return 1;
@@ -1941,13 +1920,7 @@ PHP_FUNCTION(date_modify)
DATE_CHECK_INITIALIZED(dateobj->time, DateTime);
tmp_time = timelib_strtotime(modify, modify_len, NULL, DATE_TIMEZONEDB);
- dateobj->time->relative.y = tmp_time->relative.y;
- dateobj->time->relative.m = tmp_time->relative.m;
- dateobj->time->relative.d = tmp_time->relative.d;
- dateobj->time->relative.h = tmp_time->relative.h;
- dateobj->time->relative.i = tmp_time->relative.i;
- dateobj->time->relative.s = tmp_time->relative.s;
- dateobj->time->relative.weekday = tmp_time->relative.weekday;
+ memcpy(&dateobj->time->relative, &tmp_time->relative, sizeof(struct timelib_rel_time));
dateobj->time->have_relative = tmp_time->have_relative;
dateobj->time->have_weekday_relative = tmp_time->have_weekday_relative;
dateobj->time->sse_uptodate = 0;
@@ -2014,11 +1987,9 @@ PHP_FUNCTION(date_timezone_set)
tzobj = (php_timezone_obj *) zend_object_store_get_object(timezone_object TSRMLS_CC);
if (tzobj->type != TIMELIB_ZONETYPE_ID) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can only do this for zones with ID for now");
+ return;
}
- if (dateobj->time->tz_info) {
- timelib_tzinfo_dtor(dateobj->time->tz_info);
- }
- timelib_set_timezone(dateobj->time, timelib_tzinfo_clone(tzobj->tzi.tz));
+ timelib_set_timezone(dateobj->time, tzobj->tzi.tz);
timelib_unixtime2local(dateobj->time, dateobj->time->sse);
}
/* }}} */
diff --git a/ext/date/php_date.h b/ext/date/php_date.h
index 79e2785dc..4e07c8f86 100644
--- a/ext/date/php_date.h
+++ b/ext/date/php_date.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_date.h,v 1.17.2.11.2.4 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: php_date.h,v 1.17.2.11.2.5 2008/12/31 11:17:36 sebastian Exp $ */
#ifndef PHP_DATE_H
#define PHP_DATE_H
diff --git a/ext/date/tests/bug43452.phpt b/ext/date/tests/bug43452.phpt
new file mode 100644
index 000000000..25b4f0161
--- /dev/null
+++ b/ext/date/tests/bug43452.phpt
@@ -0,0 +1,71 @@
+--TEST--
+Bug #43452 ("weekday" is not equivalent to "1 weekday" of the current weekday is "weekday")
+--INI--
+date.timezone=Europe/Oslo
+--FILE--
+<?php
+// <day> is equivalent to 1 <day> and will *not* forward if the current day
+// (November 1st) is the same day of week.
+$day = strtotime( "Thursday Nov 2007" );
+echo date( DateTime::ISO8601, $day ), "\n";
+$day = strtotime( "1 Thursday Nov 2007" );
+echo date( DateTime::ISO8601, $day ), "\n";
+$day = strtotime( "2 Thursday Nov 2007" );
+echo date( DateTime::ISO8601, $day ), "\n";
+$day = strtotime( "3 Thursday Nov 2007" );
+echo date( DateTime::ISO8601, $day ), "\n\n";
+
+// forward one week, then behaves like above for week days
+$day = strtotime( "Thursday Nov 2007" );
+echo date( DateTime::ISO8601, $day ), "\n";
+$day = strtotime( "+1 week Thursday Nov 2007" );
+echo date( DateTime::ISO8601, $day ), "\n";
+$day = strtotime( "+2 week Thursday Nov 2007" );
+echo date( DateTime::ISO8601, $day ), "\n";
+$day = strtotime( "+3 week Thursday Nov 2007" );
+echo date( DateTime::ISO8601, $day ), "\n\n";
+
+// First, second, etc skip to the first/second weekday *after* the current day.
+// This makes "first thursday" equivalent to "+1 week thursday" - but only
+// if the current day-of-week is the one mentioned in the phrase.
+$day = strtotime( "Thursday Nov 2007" );
+echo date( DateTime::ISO8601, $day ), "\n";
+$day = strtotime( "first Thursday Nov 2007" );
+echo date( DateTime::ISO8601, $day ), "\n";
+$day = strtotime( "second Thursday Nov 2007" );
+echo date( DateTime::ISO8601, $day ), "\n";
+$day = strtotime( "third Thursday Nov 2007" );
+echo date( DateTime::ISO8601, $day ), "\n\n";
+
+// Now the same where the current day-of-week does not match the one in the
+// phrase.
+$day = strtotime( "Friday Nov 2007" );
+echo date( DateTime::ISO8601, $day ), "\n";
+$day = strtotime( "first Friday Nov 2007" );
+echo date( DateTime::ISO8601, $day ), "\n";
+$day = strtotime( "second Friday Nov 2007" );
+echo date( DateTime::ISO8601, $day ), "\n";
+$day = strtotime( "third Friday Nov 2007" );
+echo date( DateTime::ISO8601, $day ), "\n\n";
+
+?>
+--EXPECT--
+2007-11-01T00:00:00+0100
+2007-11-01T00:00:00+0100
+2007-11-08T00:00:00+0100
+2007-11-15T00:00:00+0100
+
+2007-11-01T00:00:00+0100
+2007-11-08T00:00:00+0100
+2007-11-15T00:00:00+0100
+2007-11-22T00:00:00+0100
+
+2007-11-01T00:00:00+0100
+2007-11-08T00:00:00+0100
+2007-11-15T00:00:00+0100
+2007-11-22T00:00:00+0100
+
+2007-11-02T00:00:00+0100
+2007-11-02T00:00:00+0100
+2007-11-09T00:00:00+0100
+2007-11-16T00:00:00+0100
diff --git a/ext/date/tests/bug46268.phpt b/ext/date/tests/bug46268.phpt
new file mode 100644
index 000000000..dd2d4a3ca
--- /dev/null
+++ b/ext/date/tests/bug46268.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Bug #46268 (When call DateTime#setTime, it seems to be called the last modify method too)
+--FILE--
+<?php
+date_default_timezone_set('Asia/Tokyo');
+
+$now = new DateTime('2008-10-10 01:02:03');
+echo $now->format("Y-m-d H:i:s") . PHP_EOL;
+
+$now->modify("1 day after");
+echo $now->format("Y-m-d H:i:s") . PHP_EOL;
+
+$now->modify("1 hour after");
+echo $now->format("Y-m-d H:i:s") . PHP_EOL;
+
+$now->setTime(0, 0, 0);
+//date_time_set($now, 0, 0, 0);
+echo $now->format("Y-m-d H:i:s") . PHP_EOL;
+--EXPECT--
+2008-10-10 01:02:03
+2008-10-11 01:02:03
+2008-10-11 02:02:03
+2008-10-11 00:00:00
diff --git a/ext/date/tests/date_default_timezone_get_error.phpt b/ext/date/tests/date_default_timezone_get_error.phpt
new file mode 100644
index 000000000..bf8bc8ef6
--- /dev/null
+++ b/ext/date/tests/date_default_timezone_get_error.phpt
@@ -0,0 +1,27 @@
+--TEST--
+Test date_default_timezone_get() function : error conditions
+--FILE--
+<?php
+/* Prototype : string date_default_timezone_get ( void )
+ * Description: Gets the default timezone used by all date/time functions in a script.
+ * Source code: ext/standard/data/php_date.c
+ */
+
+date_default_timezone_set("UTC");
+
+echo "*** Testing date_default_timezone_get() : error conditions ***\n";
+
+echo "\n-- Testing date_create() function with more than expected no. of arguments --\n";
+$extra_arg = 99;
+var_dump( date_default_timezone_get($extra_arg));
+
+?>
+
+===Done===
+--EXPECTF--
+*** Testing date_default_timezone_get() : error conditions ***
+
+-- Testing date_create() function with more than expected no. of arguments --
+string(3) "UTC"
+
+===Done=== \ No newline at end of file
diff --git a/ext/date/tests/date_default_timezone_set_error.phpt b/ext/date/tests/date_default_timezone_set_error.phpt
new file mode 100644
index 000000000..15c6aa6fe
--- /dev/null
+++ b/ext/date/tests/date_default_timezone_set_error.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Test date_default_timezone_set() function : error variations
+--FILE--
+<?php
+/* Prototype : bool date_default_timezone_set ( string $timezone_identifier )
+ * Description: Sets the default timezone used by all date/time functions in a script.
+ * Source code: ext/standard/data/php_date.c
+ */
+
+echo "*** Testing date_default_timezone_set() : error variations ***\n";
+
+echo "\n-- Testing date_default_timezone_set() function with less than expected no. of arguments --\n";
+var_dump( date_default_timezone_set() );
+
+echo "\n-- Testing date_default_timezone_set() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( date_default_timezone_set("GMT", $extra_arg) );
+
+echo "\n-- Testing date_default_timezone_set() function with invalid timezone identifier --\n";
+var_dump( date_default_timezone_set("foo") );
+
+?>
+===Done===
+--EXPECTF--
+*** Testing date_default_timezone_set() : error variations ***
+
+-- Testing date_default_timezone_set() function with less than expected no. of arguments --
+
+Warning: date_default_timezone_set() expects exactly 1 parameter, 0 given in %s on line %d
+bool(false)
+
+-- Testing date_default_timezone_set() function with more than expected no. of arguments --
+
+Warning: date_default_timezone_set() expects exactly 1 parameter, 2 given in %s on line %d
+bool(false)
+
+-- Testing date_default_timezone_set() function with invalid timezone identifier --
+
+Notice: date_default_timezone_set(): Timezone ID 'foo' is invalid in %s on line %d
+bool(false)
+===Done===
diff --git a/ext/date/tests/date_default_timezone_set_variation1.phpt b/ext/date/tests/date_default_timezone_set_variation1.phpt
new file mode 100644
index 000000000..22f4c22de
--- /dev/null
+++ b/ext/date/tests/date_default_timezone_set_variation1.phpt
@@ -0,0 +1,200 @@
+--TEST--
+Test date_default_timezone_set() function : usage variations - Passing unexpected values for time_zone identifier
+--FILE--
+<?php
+/* Prototype : bool date_default_timezone_set ( string $timezone_identifier )
+ * Description: Sets the default timezone used by all date/time functions in a script.
+ * Source code: ext/standard/data/php_date.c
+ */
+
+echo "*** Testing date_default_timezone_set() : usage variations ***\n";
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // undefined data
+/*22*/ @$undefined_var,
+
+ // unset data
+/*23*/ @$unset_var,
+
+ // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of date_default_timezone_set()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(date_default_timezone_set($input));
+ $iterator++;
+};
+?>
+===Done===
+--EXPECTF--
+*** Testing date_default_timezone_set() : usage variations ***
+
+-- Iteration 1 --
+
+Notice: date_default_timezone_set(): Timezone ID '0' is invalid in %s on line %d
+bool(false)
+
+-- Iteration 2 --
+
+Notice: date_default_timezone_set(): Timezone ID '1' is invalid in %s on line %d
+bool(false)
+
+-- Iteration 3 --
+
+Notice: date_default_timezone_set(): Timezone ID '12345' is invalid in %s on line %d
+bool(false)
+
+-- Iteration 4 --
+
+Notice: date_default_timezone_set(): Timezone ID '-2345' is invalid in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+
+Notice: date_default_timezone_set(): Timezone ID '10.5' is invalid in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Notice: date_default_timezone_set(): Timezone ID '-10.5' is invalid in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+
+Notice: date_default_timezone_set(): Timezone ID '123456789000' is invalid in %s on line %d
+bool(false)
+
+-- Iteration 8 --
+
+Notice: date_default_timezone_set(): Timezone ID '1.23456789E-9' is invalid in %s on line %d
+bool(false)
+
+-- Iteration 9 --
+
+Notice: date_default_timezone_set(): Timezone ID '0.5' is invalid in %s on line %d
+bool(false)
+
+-- Iteration 10 --
+
+Notice: date_default_timezone_set(): Timezone ID '' is invalid in %s on line %d
+bool(false)
+
+-- Iteration 11 --
+
+Notice: date_default_timezone_set(): Timezone ID '' is invalid in %s on line %d
+bool(false)
+
+-- Iteration 12 --
+
+Notice: date_default_timezone_set(): Timezone ID '1' is invalid in %s on line %d
+bool(false)
+
+-- Iteration 13 --
+
+Notice: date_default_timezone_set(): Timezone ID '' is invalid in %s on line %d
+bool(false)
+
+-- Iteration 14 --
+
+Notice: date_default_timezone_set(): Timezone ID '1' is invalid in %s on line %d
+bool(false)
+
+-- Iteration 15 --
+
+Notice: date_default_timezone_set(): Timezone ID '' is invalid in %s on line %d
+bool(false)
+
+-- Iteration 16 --
+
+Notice: date_default_timezone_set(): Timezone ID '' is invalid in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Notice: date_default_timezone_set(): Timezone ID '' is invalid in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+
+Warning: date_default_timezone_set() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+-- Iteration 19 --
+
+Notice: date_default_timezone_set(): Timezone ID 'abcxyz' is invalid in %s on line %d
+bool(false)
+
+-- Iteration 20 --
+
+Notice: date_default_timezone_set(): Timezone ID 'abcxyz' is invalid in %s on line %d
+bool(false)
+
+-- Iteration 21 --
+
+Notice: date_default_timezone_set(): Timezone ID 'abc
+xyz' is invalid in %s on line %d
+bool(false)
+
+-- Iteration 22 --
+
+Notice: date_default_timezone_set(): Timezone ID '' is invalid in %s on line %d
+bool(false)
+
+-- Iteration 23 --
+
+Notice: date_default_timezone_set(): Timezone ID '' is invalid in %s on line %d
+bool(false)
+
+-- Iteration 24 --
+
+Warning: date_default_timezone_set() expects parameter 1 to be string, resource given in %s on line %d
+bool(false)
+===Done===
diff --git a/ext/date/tests/date_parse_001.phpt b/ext/date/tests/date_parse_001.phpt
index 205380fc9..542161016 100644
--- a/ext/date/tests/date_parse_001.phpt
+++ b/ext/date/tests/date_parse_001.phpt
@@ -79,7 +79,7 @@ array(15) {
["month"]=>
int(12)
["day"]=>
- bool(false)
+ int(1)
["hour"]=>
bool(false)
["minute"]=>
@@ -171,7 +171,7 @@ array(12) {
["month"]=>
int(3)
["day"]=>
- bool(false)
+ int(1)
["hour"]=>
bool(false)
["minute"]=>
diff --git a/ext/date/tests/date_sun_info_error.phpt b/ext/date/tests/date_sun_info_error.phpt
new file mode 100644
index 000000000..8d572479f
--- /dev/null
+++ b/ext/date/tests/date_sun_info_error.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test date_sun_info() function : error variations
+--FILE--
+<?php
+/* Prototype : array date_sun_info ( int $time , float $latitude , float $longitude )
+ * Description: Returns an array with information about sunset/sunrise and twilight begin/end.
+ * Source code: ext/standard/data/php_date.c
+ */
+
+echo "*** Testing date_sun_info() : usage variations ***\n";
+
+$time = "2006-12-12";
+$latitude=31.7667;
+$longitude=35.2333;
+
+echo "\n-- Testing date_sun_info() function with less than expected no. of arguments --\n";
+var_dump( date_sun_info() );
+var_dump( date_sun_info($time) );
+var_dump( date_sun_info($time, $latitude) );
+
+
+echo "\n-- Testing date_sun_info() function with more than expected no. of arguments --\n";
+$extra_arg = 99;
+var_dump( date_create($time, $latitude, $longitude, $extra_arg) );
+
+?>
+===Done===
+--EXPECTF--
+*** Testing date_sun_info() : usage variations ***
+
+-- Testing date_sun_info() function with less than expected no. of arguments --
+
+Warning: date_sun_info() expects exactly 3 parameters, 0 given in %s on line %d
+bool(false)
+
+Warning: date_sun_info() expects exactly 3 parameters, 1 given in %s on line %d
+bool(false)
+
+Warning: date_sun_info() expects exactly 3 parameters, 2 given in %s on line %d
+bool(false)
+
+-- Testing date_sun_info() function with more than expected no. of arguments --
+
+Warning: date_create() expects at most 2 parameters, 4 given in %s on line %d
+bool(false)
+===Done=== \ No newline at end of file
diff --git a/ext/date/tests/date_sun_info_variation1.phpt b/ext/date/tests/date_sun_info_variation1.phpt
new file mode 100644
index 000000000..4df94c8b8
--- /dev/null
+++ b/ext/date/tests/date_sun_info_variation1.phpt
@@ -0,0 +1,491 @@
+--TEST--
+Test date_sun_info() function : error variations - Pass unexpected values for time argument
+--FILE--
+<?php
+/* Prototype : array date_sun_info ( int $time , float $latitude , float $longitude )
+ * Description: Returns an array with information about sunset/sunrise and twilight begin/end.
+ * Source code: ext/standard/data/php_date.c
+ */
+date_default_timezone_set("UTC");
+
+echo "*** Testing date_sun_info() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e5,
+ 12.3456789000E-5,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // undefined data
+/*22*/ @$undefined_var,
+
+ // unset data
+/*23*/ @$unset_var,
+
+ // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of date_sun_info()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(date_sun_info($input, 31.7667, 35.2333));
+ $iterator++;
+};
+
+?>
+===Done===
+--EXPECTF--
+*** Testing date_sun_info() : usage variations ***
+
+-- Iteration 1 --
+array(9) {
+ ["sunrise"]=>
+ int(16748)
+ ["sunset"]=>
+ int(53182)
+ ["transit"]=>
+ int(34965)
+ ["civil_twilight_begin"]=>
+ int(15145)
+ ["civil_twilight_end"]=>
+ int(54786)
+ ["nautical_twilight_begin"]=>
+ int(13324)
+ ["nautical_twilight_end"]=>
+ int(56607)
+ ["astronomical_twilight_begin"]=>
+ int(11542)
+ ["astronomical_twilight_end"]=>
+ int(58389)
+}
+
+-- Iteration 2 --
+array(9) {
+ ["sunrise"]=>
+ int(16748)
+ ["sunset"]=>
+ int(53182)
+ ["transit"]=>
+ int(34965)
+ ["civil_twilight_begin"]=>
+ int(15145)
+ ["civil_twilight_end"]=>
+ int(54786)
+ ["nautical_twilight_begin"]=>
+ int(13324)
+ ["nautical_twilight_end"]=>
+ int(56607)
+ ["astronomical_twilight_begin"]=>
+ int(11542)
+ ["astronomical_twilight_end"]=>
+ int(58389)
+}
+
+-- Iteration 3 --
+array(9) {
+ ["sunrise"]=>
+ int(16748)
+ ["sunset"]=>
+ int(53182)
+ ["transit"]=>
+ int(34965)
+ ["civil_twilight_begin"]=>
+ int(15145)
+ ["civil_twilight_end"]=>
+ int(54786)
+ ["nautical_twilight_begin"]=>
+ int(13324)
+ ["nautical_twilight_end"]=>
+ int(56607)
+ ["astronomical_twilight_begin"]=>
+ int(11542)
+ ["astronomical_twilight_end"]=>
+ int(58389)
+}
+
+-- Iteration 4 --
+array(9) {
+ ["sunrise"]=>
+ int(-69665)
+ ["sunset"]=>
+ int(-33260)
+ ["transit"]=>
+ int(-51462)
+ ["civil_twilight_begin"]=>
+ int(-71269)
+ ["civil_twilight_end"]=>
+ int(-31655)
+ ["nautical_twilight_begin"]=>
+ int(-73092)
+ ["nautical_twilight_end"]=>
+ int(-29832)
+ ["astronomical_twilight_begin"]=>
+ int(-74874)
+ ["astronomical_twilight_end"]=>
+ int(-28050)
+}
+
+-- Iteration 5 --
+array(9) {
+ ["sunrise"]=>
+ int(16748)
+ ["sunset"]=>
+ int(53182)
+ ["transit"]=>
+ int(34965)
+ ["civil_twilight_begin"]=>
+ int(15145)
+ ["civil_twilight_end"]=>
+ int(54786)
+ ["nautical_twilight_begin"]=>
+ int(13324)
+ ["nautical_twilight_end"]=>
+ int(56607)
+ ["astronomical_twilight_begin"]=>
+ int(11542)
+ ["astronomical_twilight_end"]=>
+ int(58389)
+}
+
+-- Iteration 6 --
+array(9) {
+ ["sunrise"]=>
+ int(-69665)
+ ["sunset"]=>
+ int(-33260)
+ ["transit"]=>
+ int(-51462)
+ ["civil_twilight_begin"]=>
+ int(-71269)
+ ["civil_twilight_end"]=>
+ int(-31655)
+ ["nautical_twilight_begin"]=>
+ int(-73092)
+ ["nautical_twilight_end"]=>
+ int(-29832)
+ ["astronomical_twilight_begin"]=>
+ int(-74874)
+ ["astronomical_twilight_end"]=>
+ int(-28050)
+}
+
+-- Iteration 7 --
+array(9) {
+ ["sunrise"]=>
+ int(1226363)
+ ["sunset"]=>
+ int(1263468)
+ ["transit"]=>
+ int(1244916)
+ ["civil_twilight_begin"]=>
+ int(1224788)
+ ["civil_twilight_end"]=>
+ int(1265044)
+ ["nautical_twilight_begin"]=>
+ int(1222993)
+ ["nautical_twilight_end"]=>
+ int(1266839)
+ ["astronomical_twilight_begin"]=>
+ int(1221233)
+ ["astronomical_twilight_end"]=>
+ int(1268599)
+}
+
+-- Iteration 8 --
+array(9) {
+ ["sunrise"]=>
+ int(16748)
+ ["sunset"]=>
+ int(53182)
+ ["transit"]=>
+ int(34965)
+ ["civil_twilight_begin"]=>
+ int(15145)
+ ["civil_twilight_end"]=>
+ int(54786)
+ ["nautical_twilight_begin"]=>
+ int(13324)
+ ["nautical_twilight_end"]=>
+ int(56607)
+ ["astronomical_twilight_begin"]=>
+ int(11542)
+ ["astronomical_twilight_end"]=>
+ int(58389)
+}
+
+-- Iteration 9 --
+array(9) {
+ ["sunrise"]=>
+ int(16748)
+ ["sunset"]=>
+ int(53182)
+ ["transit"]=>
+ int(34965)
+ ["civil_twilight_begin"]=>
+ int(15145)
+ ["civil_twilight_end"]=>
+ int(54786)
+ ["nautical_twilight_begin"]=>
+ int(13324)
+ ["nautical_twilight_end"]=>
+ int(56607)
+ ["astronomical_twilight_begin"]=>
+ int(11542)
+ ["astronomical_twilight_end"]=>
+ int(58389)
+}
+
+-- Iteration 10 --
+array(9) {
+ ["sunrise"]=>
+ int(16748)
+ ["sunset"]=>
+ int(53182)
+ ["transit"]=>
+ int(34965)
+ ["civil_twilight_begin"]=>
+ int(15145)
+ ["civil_twilight_end"]=>
+ int(54786)
+ ["nautical_twilight_begin"]=>
+ int(13324)
+ ["nautical_twilight_end"]=>
+ int(56607)
+ ["astronomical_twilight_begin"]=>
+ int(11542)
+ ["astronomical_twilight_end"]=>
+ int(58389)
+}
+
+-- Iteration 11 --
+array(9) {
+ ["sunrise"]=>
+ int(16748)
+ ["sunset"]=>
+ int(53182)
+ ["transit"]=>
+ int(34965)
+ ["civil_twilight_begin"]=>
+ int(15145)
+ ["civil_twilight_end"]=>
+ int(54786)
+ ["nautical_twilight_begin"]=>
+ int(13324)
+ ["nautical_twilight_end"]=>
+ int(56607)
+ ["astronomical_twilight_begin"]=>
+ int(11542)
+ ["astronomical_twilight_end"]=>
+ int(58389)
+}
+
+-- Iteration 12 --
+array(9) {
+ ["sunrise"]=>
+ int(16748)
+ ["sunset"]=>
+ int(53182)
+ ["transit"]=>
+ int(34965)
+ ["civil_twilight_begin"]=>
+ int(15145)
+ ["civil_twilight_end"]=>
+ int(54786)
+ ["nautical_twilight_begin"]=>
+ int(13324)
+ ["nautical_twilight_end"]=>
+ int(56607)
+ ["astronomical_twilight_begin"]=>
+ int(11542)
+ ["astronomical_twilight_end"]=>
+ int(58389)
+}
+
+-- Iteration 13 --
+array(9) {
+ ["sunrise"]=>
+ int(16748)
+ ["sunset"]=>
+ int(53182)
+ ["transit"]=>
+ int(34965)
+ ["civil_twilight_begin"]=>
+ int(15145)
+ ["civil_twilight_end"]=>
+ int(54786)
+ ["nautical_twilight_begin"]=>
+ int(13324)
+ ["nautical_twilight_end"]=>
+ int(56607)
+ ["astronomical_twilight_begin"]=>
+ int(11542)
+ ["astronomical_twilight_end"]=>
+ int(58389)
+}
+
+-- Iteration 14 --
+array(9) {
+ ["sunrise"]=>
+ int(16748)
+ ["sunset"]=>
+ int(53182)
+ ["transit"]=>
+ int(34965)
+ ["civil_twilight_begin"]=>
+ int(15145)
+ ["civil_twilight_end"]=>
+ int(54786)
+ ["nautical_twilight_begin"]=>
+ int(13324)
+ ["nautical_twilight_end"]=>
+ int(56607)
+ ["astronomical_twilight_begin"]=>
+ int(11542)
+ ["astronomical_twilight_end"]=>
+ int(58389)
+}
+
+-- Iteration 15 --
+array(9) {
+ ["sunrise"]=>
+ int(16748)
+ ["sunset"]=>
+ int(53182)
+ ["transit"]=>
+ int(34965)
+ ["civil_twilight_begin"]=>
+ int(15145)
+ ["civil_twilight_end"]=>
+ int(54786)
+ ["nautical_twilight_begin"]=>
+ int(13324)
+ ["nautical_twilight_end"]=>
+ int(56607)
+ ["astronomical_twilight_begin"]=>
+ int(11542)
+ ["astronomical_twilight_end"]=>
+ int(58389)
+}
+
+-- Iteration 16 --
+
+Warning: date_sun_info() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Warning: date_sun_info() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+
+Warning: date_sun_info() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+-- Iteration 19 --
+
+Warning: date_sun_info() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 20 --
+
+Warning: date_sun_info() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 21 --
+
+Warning: date_sun_info() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 22 --
+array(9) {
+ ["sunrise"]=>
+ int(16748)
+ ["sunset"]=>
+ int(53182)
+ ["transit"]=>
+ int(34965)
+ ["civil_twilight_begin"]=>
+ int(15145)
+ ["civil_twilight_end"]=>
+ int(54786)
+ ["nautical_twilight_begin"]=>
+ int(13324)
+ ["nautical_twilight_end"]=>
+ int(56607)
+ ["astronomical_twilight_begin"]=>
+ int(11542)
+ ["astronomical_twilight_end"]=>
+ int(58389)
+}
+
+-- Iteration 23 --
+array(9) {
+ ["sunrise"]=>
+ int(16748)
+ ["sunset"]=>
+ int(53182)
+ ["transit"]=>
+ int(34965)
+ ["civil_twilight_begin"]=>
+ int(15145)
+ ["civil_twilight_end"]=>
+ int(54786)
+ ["nautical_twilight_begin"]=>
+ int(13324)
+ ["nautical_twilight_end"]=>
+ int(56607)
+ ["astronomical_twilight_begin"]=>
+ int(11542)
+ ["astronomical_twilight_end"]=>
+ int(58389)
+}
+
+-- Iteration 24 --
+
+Warning: date_sun_info() expects parameter 1 to be long, resource given in %s on line %d
+bool(false)
+===Done=== \ No newline at end of file
diff --git a/ext/date/tests/date_sun_info_variation2.phpt b/ext/date/tests/date_sun_info_variation2.phpt
new file mode 100644
index 000000000..fb5ed317f
--- /dev/null
+++ b/ext/date/tests/date_sun_info_variation2.phpt
@@ -0,0 +1,492 @@
+--TEST--
+Test date_sun_info() function : error variations - Pass unexpected values for latitude argument
+--FILE--
+<?php
+/* Prototype : array date_sun_info ( int $time , float $latitude , float $longitude )
+ * Description: Returns an array with information about sunset/sunrise and twilight begin/end.
+ * Source code: ext/standard/data/php_date.c
+ */
+
+date_default_timezone_set("UTC");
+
+echo "*** Testing date_sun_info() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // undefined data
+/*22*/ @$undefined_var,
+
+ // unset data
+/*23*/ @$unset_var,
+
+ // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of date_sun_info()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(date_sun_info(strtotime("2006-12-12"), $input, 35.2333));
+ $iterator++;
+};
+
+?>
+===Done===
+--EXPECTF--
+*** Testing date_sun_info() : usage variations ***
+
+-- Iteration 1 --
+array(9) {
+ ["sunrise"]=>
+ int(1165894152)
+ ["sunset"]=>
+ int(1165937798)
+ ["transit"]=>
+ int(1165915975)
+ ["civil_twilight_begin"]=>
+ int(1165892809)
+ ["civil_twilight_end"]=>
+ int(1165939141)
+ ["nautical_twilight_begin"]=>
+ int(1165891239)
+ ["nautical_twilight_end"]=>
+ int(1165940710)
+ ["astronomical_twilight_begin"]=>
+ int(1165889663)
+ ["astronomical_twilight_end"]=>
+ int(1165942287)
+}
+
+-- Iteration 2 --
+array(9) {
+ ["sunrise"]=>
+ int(1165894254)
+ ["sunset"]=>
+ int(1165937695)
+ ["transit"]=>
+ int(1165915975)
+ ["civil_twilight_begin"]=>
+ int(1165892911)
+ ["civil_twilight_end"]=>
+ int(1165939038)
+ ["nautical_twilight_begin"]=>
+ int(1165891344)
+ ["nautical_twilight_end"]=>
+ int(1165940606)
+ ["astronomical_twilight_begin"]=>
+ int(1165889771)
+ ["astronomical_twilight_end"]=>
+ int(1165942179)
+}
+
+-- Iteration 3 --
+array(9) {
+ ["sunrise"]=>
+ bool(true)
+ ["sunset"]=>
+ bool(true)
+ ["transit"]=>
+ int(1165915975)
+ ["civil_twilight_begin"]=>
+ bool(true)
+ ["civil_twilight_end"]=>
+ bool(true)
+ ["nautical_twilight_begin"]=>
+ int(1165883331)
+ ["nautical_twilight_end"]=>
+ int(1165948619)
+ ["astronomical_twilight_begin"]=>
+ int(1165890260)
+ ["astronomical_twilight_end"]=>
+ int(1165941690)
+}
+
+-- Iteration 4 --
+array(9) {
+ ["sunrise"]=>
+ int(1165894085)
+ ["sunset"]=>
+ int(1165937865)
+ ["transit"]=>
+ int(1165915975)
+ ["civil_twilight_begin"]=>
+ int(1165895431)
+ ["civil_twilight_end"]=>
+ int(1165936519)
+ ["nautical_twilight_begin"]=>
+ int(1165896998)
+ ["nautical_twilight_end"]=>
+ int(1165934952)
+ ["astronomical_twilight_begin"]=>
+ int(1165898564)
+ ["astronomical_twilight_end"]=>
+ int(1165933386)
+}
+
+-- Iteration 5 --
+array(9) {
+ ["sunrise"]=>
+ int(1165895237)
+ ["sunset"]=>
+ int(1165936713)
+ ["transit"]=>
+ int(1165915975)
+ ["civil_twilight_begin"]=>
+ int(1165893873)
+ ["civil_twilight_end"]=>
+ int(1165938077)
+ ["nautical_twilight_begin"]=>
+ int(1165892293)
+ ["nautical_twilight_end"]=>
+ int(1165939656)
+ ["astronomical_twilight_begin"]=>
+ int(1165890721)
+ ["astronomical_twilight_end"]=>
+ int(1165941229)
+}
+
+-- Iteration 6 --
+array(9) {
+ ["sunrise"]=>
+ int(1165893058)
+ ["sunset"]=>
+ int(1165938891)
+ ["transit"]=>
+ int(1165915975)
+ ["civil_twilight_begin"]=>
+ int(1165891680)
+ ["civil_twilight_end"]=>
+ int(1165940269)
+ ["nautical_twilight_begin"]=>
+ int(1165890055)
+ ["nautical_twilight_end"]=>
+ int(1165941895)
+ ["astronomical_twilight_begin"]=>
+ int(1165888402)
+ ["astronomical_twilight_end"]=>
+ int(1165943548)
+}
+
+-- Iteration 7 --
+array(9) {
+ ["sunrise"]=>
+ int(1165894152)
+ ["sunset"]=>
+ int(1165937798)
+ ["transit"]=>
+ int(1165915975)
+ ["civil_twilight_begin"]=>
+ int(1165892809)
+ ["civil_twilight_end"]=>
+ int(1165939141)
+ ["nautical_twilight_begin"]=>
+ int(1165891239)
+ ["nautical_twilight_end"]=>
+ int(1165940710)
+ ["astronomical_twilight_begin"]=>
+ int(1165889663)
+ ["astronomical_twilight_end"]=>
+ int(1165942287)
+}
+
+-- Iteration 8 --
+array(9) {
+ ["sunrise"]=>
+ int(1165894152)
+ ["sunset"]=>
+ int(1165937798)
+ ["transit"]=>
+ int(1165915975)
+ ["civil_twilight_begin"]=>
+ int(1165892809)
+ ["civil_twilight_end"]=>
+ int(1165939141)
+ ["nautical_twilight_begin"]=>
+ int(1165891239)
+ ["nautical_twilight_end"]=>
+ int(1165940710)
+ ["astronomical_twilight_begin"]=>
+ int(1165889663)
+ ["astronomical_twilight_end"]=>
+ int(1165942287)
+}
+
+-- Iteration 9 --
+array(9) {
+ ["sunrise"]=>
+ int(1165894203)
+ ["sunset"]=>
+ int(1165937747)
+ ["transit"]=>
+ int(1165915975)
+ ["civil_twilight_begin"]=>
+ int(1165892860)
+ ["civil_twilight_end"]=>
+ int(1165939090)
+ ["nautical_twilight_begin"]=>
+ int(1165891292)
+ ["nautical_twilight_end"]=>
+ int(1165940658)
+ ["astronomical_twilight_begin"]=>
+ int(1165889717)
+ ["astronomical_twilight_end"]=>
+ int(1165942233)
+}
+
+-- Iteration 10 --
+array(9) {
+ ["sunrise"]=>
+ int(1165894152)
+ ["sunset"]=>
+ int(1165937798)
+ ["transit"]=>
+ int(1165915975)
+ ["civil_twilight_begin"]=>
+ int(1165892809)
+ ["civil_twilight_end"]=>
+ int(1165939141)
+ ["nautical_twilight_begin"]=>
+ int(1165891239)
+ ["nautical_twilight_end"]=>
+ int(1165940710)
+ ["astronomical_twilight_begin"]=>
+ int(1165889663)
+ ["astronomical_twilight_end"]=>
+ int(1165942287)
+}
+
+-- Iteration 11 --
+array(9) {
+ ["sunrise"]=>
+ int(1165894152)
+ ["sunset"]=>
+ int(1165937798)
+ ["transit"]=>
+ int(1165915975)
+ ["civil_twilight_begin"]=>
+ int(1165892809)
+ ["civil_twilight_end"]=>
+ int(1165939141)
+ ["nautical_twilight_begin"]=>
+ int(1165891239)
+ ["nautical_twilight_end"]=>
+ int(1165940710)
+ ["astronomical_twilight_begin"]=>
+ int(1165889663)
+ ["astronomical_twilight_end"]=>
+ int(1165942287)
+}
+
+-- Iteration 12 --
+array(9) {
+ ["sunrise"]=>
+ int(1165894254)
+ ["sunset"]=>
+ int(1165937695)
+ ["transit"]=>
+ int(1165915975)
+ ["civil_twilight_begin"]=>
+ int(1165892911)
+ ["civil_twilight_end"]=>
+ int(1165939038)
+ ["nautical_twilight_begin"]=>
+ int(1165891344)
+ ["nautical_twilight_end"]=>
+ int(1165940606)
+ ["astronomical_twilight_begin"]=>
+ int(1165889771)
+ ["astronomical_twilight_end"]=>
+ int(1165942179)
+}
+
+-- Iteration 13 --
+array(9) {
+ ["sunrise"]=>
+ int(1165894152)
+ ["sunset"]=>
+ int(1165937798)
+ ["transit"]=>
+ int(1165915975)
+ ["civil_twilight_begin"]=>
+ int(1165892809)
+ ["civil_twilight_end"]=>
+ int(1165939141)
+ ["nautical_twilight_begin"]=>
+ int(1165891239)
+ ["nautical_twilight_end"]=>
+ int(1165940710)
+ ["astronomical_twilight_begin"]=>
+ int(1165889663)
+ ["astronomical_twilight_end"]=>
+ int(1165942287)
+}
+
+-- Iteration 14 --
+array(9) {
+ ["sunrise"]=>
+ int(1165894254)
+ ["sunset"]=>
+ int(1165937695)
+ ["transit"]=>
+ int(1165915975)
+ ["civil_twilight_begin"]=>
+ int(1165892911)
+ ["civil_twilight_end"]=>
+ int(1165939038)
+ ["nautical_twilight_begin"]=>
+ int(1165891344)
+ ["nautical_twilight_end"]=>
+ int(1165940606)
+ ["astronomical_twilight_begin"]=>
+ int(1165889771)
+ ["astronomical_twilight_end"]=>
+ int(1165942179)
+}
+
+-- Iteration 15 --
+array(9) {
+ ["sunrise"]=>
+ int(1165894152)
+ ["sunset"]=>
+ int(1165937798)
+ ["transit"]=>
+ int(1165915975)
+ ["civil_twilight_begin"]=>
+ int(1165892809)
+ ["civil_twilight_end"]=>
+ int(1165939141)
+ ["nautical_twilight_begin"]=>
+ int(1165891239)
+ ["nautical_twilight_end"]=>
+ int(1165940710)
+ ["astronomical_twilight_begin"]=>
+ int(1165889663)
+ ["astronomical_twilight_end"]=>
+ int(1165942287)
+}
+
+-- Iteration 16 --
+
+Warning: date_sun_info() expects parameter 2 to be double, string given in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Warning: date_sun_info() expects parameter 2 to be double, string given in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+
+Warning: date_sun_info() expects parameter 2 to be double, array given in %s on line %d
+bool(false)
+
+-- Iteration 19 --
+
+Warning: date_sun_info() expects parameter 2 to be double, string given in %s on line %d
+bool(false)
+
+-- Iteration 20 --
+
+Warning: date_sun_info() expects parameter 2 to be double, string given in %s on line %d
+bool(false)
+
+-- Iteration 21 --
+
+Warning: date_sun_info() expects parameter 2 to be double, string given in %s on line %d
+bool(false)
+
+-- Iteration 22 --
+array(9) {
+ ["sunrise"]=>
+ int(1165894152)
+ ["sunset"]=>
+ int(1165937798)
+ ["transit"]=>
+ int(1165915975)
+ ["civil_twilight_begin"]=>
+ int(1165892809)
+ ["civil_twilight_end"]=>
+ int(1165939141)
+ ["nautical_twilight_begin"]=>
+ int(1165891239)
+ ["nautical_twilight_end"]=>
+ int(1165940710)
+ ["astronomical_twilight_begin"]=>
+ int(1165889663)
+ ["astronomical_twilight_end"]=>
+ int(1165942287)
+}
+
+-- Iteration 23 --
+array(9) {
+ ["sunrise"]=>
+ int(1165894152)
+ ["sunset"]=>
+ int(1165937798)
+ ["transit"]=>
+ int(1165915975)
+ ["civil_twilight_begin"]=>
+ int(1165892809)
+ ["civil_twilight_end"]=>
+ int(1165939141)
+ ["nautical_twilight_begin"]=>
+ int(1165891239)
+ ["nautical_twilight_end"]=>
+ int(1165940710)
+ ["astronomical_twilight_begin"]=>
+ int(1165889663)
+ ["astronomical_twilight_end"]=>
+ int(1165942287)
+}
+
+-- Iteration 24 --
+
+Warning: date_sun_info() expects parameter 2 to be double, resource given in %s on line %d
+bool(false)
+===Done===
diff --git a/ext/date/tests/date_sun_info_variation3.phpt b/ext/date/tests/date_sun_info_variation3.phpt
new file mode 100644
index 000000000..207d205d9
--- /dev/null
+++ b/ext/date/tests/date_sun_info_variation3.phpt
@@ -0,0 +1,493 @@
+--TEST--
+Test date_sun_info() function : usage variations - Pass unexpected values for longitude argument
+--FILE--
+<?php
+/* Prototype : array date_sun_info ( int $time , float $latitude , float $longitude )
+ * Description: Returns an array with information about sunset/sunrise and twilight begin/end.
+ * Source code: ext/standard/data/php_date.c
+ */
+
+date_default_timezone_set("UTC");
+
+echo "*** Testing date_sun_info() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // undefined data
+/*22*/ @$undefined_var,
+
+ // unset data
+/*23*/ @$unset_var,
+
+ // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of date_sun_info()
+$iterator = 1;
+
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(date_sun_info(strtotime("2006-12-12"), 31.7667, $input));
+ $iterator++;
+};
+
+?>
+===Done===
+--EXPECTF--
+*** Testing date_sun_info() : usage variations ***
+
+-- Iteration 1 --
+array(9) {
+ ["sunrise"]=>
+ int(1165906242)
+ ["sunset"]=>
+ int(1165942625)
+ ["transit"]=>
+ int(1165924434)
+ ["civil_twilight_begin"]=>
+ int(1165904636)
+ ["civil_twilight_end"]=>
+ int(1165944231)
+ ["nautical_twilight_begin"]=>
+ int(1165902813)
+ ["nautical_twilight_end"]=>
+ int(1165946054)
+ ["astronomical_twilight_begin"]=>
+ int(1165901030)
+ ["astronomical_twilight_end"]=>
+ int(1165947838)
+}
+
+-- Iteration 2 --
+array(9) {
+ ["sunrise"]=>
+ int(1165906002)
+ ["sunset"]=>
+ int(1165942385)
+ ["transit"]=>
+ int(1165924194)
+ ["civil_twilight_begin"]=>
+ int(1165904396)
+ ["civil_twilight_end"]=>
+ int(1165943991)
+ ["nautical_twilight_begin"]=>
+ int(1165902573)
+ ["nautical_twilight_end"]=>
+ int(1165945814)
+ ["astronomical_twilight_begin"]=>
+ int(1165900789)
+ ["astronomical_twilight_end"]=>
+ int(1165947598)
+}
+
+-- Iteration 3 --
+array(9) {
+ ["sunrise"]=>
+ int(1165879335)
+ ["sunset"]=>
+ int(1165917916)
+ ["transit"]=>
+ int(1165898625)
+ ["civil_twilight_begin"]=>
+ int(1165877811)
+ ["civil_twilight_end"]=>
+ int(1165919440)
+ ["nautical_twilight_begin"]=>
+ int(1165876064)
+ ["nautical_twilight_end"]=>
+ int(1165921187)
+ ["astronomical_twilight_begin"]=>
+ int(1165874341)
+ ["astronomical_twilight_end"]=>
+ int(1165922910)
+}
+
+-- Iteration 4 --
+array(9) {
+ ["sunrise"]=>
+ int(1165864483)
+ ["sunset"]=>
+ int(1165900762)
+ ["transit"]=>
+ int(1165882623)
+ ["civil_twilight_begin"]=>
+ int(1165862873)
+ ["civil_twilight_end"]=>
+ int(1165902372)
+ ["nautical_twilight_begin"]=>
+ int(1165861045)
+ ["nautical_twilight_end"]=>
+ int(1165904200)
+ ["astronomical_twilight_begin"]=>
+ int(1165859259)
+ ["astronomical_twilight_end"]=>
+ int(1165905987)
+}
+
+-- Iteration 5 --
+array(9) {
+ ["sunrise"]=>
+ int(1165903721)
+ ["sunset"]=>
+ int(1165940105)
+ ["transit"]=>
+ int(1165921913)
+ ["civil_twilight_begin"]=>
+ int(1165902115)
+ ["civil_twilight_end"]=>
+ int(1165941711)
+ ["nautical_twilight_begin"]=>
+ int(1165900292)
+ ["nautical_twilight_end"]=>
+ int(1165943534)
+ ["astronomical_twilight_begin"]=>
+ int(1165898508)
+ ["astronomical_twilight_end"]=>
+ int(1165945317)
+}
+
+-- Iteration 6 --
+array(9) {
+ ["sunrise"]=>
+ int(1165908763)
+ ["sunset"]=>
+ int(1165945146)
+ ["transit"]=>
+ int(1165926954)
+ ["civil_twilight_begin"]=>
+ int(1165907157)
+ ["civil_twilight_end"]=>
+ int(1165946752)
+ ["nautical_twilight_begin"]=>
+ int(1165905334)
+ ["nautical_twilight_end"]=>
+ int(1165948575)
+ ["astronomical_twilight_begin"]=>
+ int(1165903551)
+ ["astronomical_twilight_end"]=>
+ int(1165950358)
+}
+
+-- Iteration 7 --
+array(9) {
+ ["sunrise"]=>
+ int(1165919856)
+ ["sunset"]=>
+ int(1165969985)
+ ["transit"]=>
+ int(1165944920)
+ ["civil_twilight_begin"]=>
+ int(1165918203)
+ ["civil_twilight_end"]=>
+ int(1165971638)
+ ["nautical_twilight_begin"]=>
+ int(1165916223)
+ ["nautical_twilight_end"]=>
+ int(1165973617)
+ ["astronomical_twilight_begin"]=>
+ int(1165914116)
+ ["astronomical_twilight_end"]=>
+ int(1165975725)
+}
+
+-- Iteration 8 --
+array(9) {
+ ["sunrise"]=>
+ int(1165906242)
+ ["sunset"]=>
+ int(1165942625)
+ ["transit"]=>
+ int(1165924434)
+ ["civil_twilight_begin"]=>
+ int(1165904636)
+ ["civil_twilight_end"]=>
+ int(1165944231)
+ ["nautical_twilight_begin"]=>
+ int(1165902813)
+ ["nautical_twilight_end"]=>
+ int(1165946054)
+ ["astronomical_twilight_begin"]=>
+ int(1165901030)
+ ["astronomical_twilight_end"]=>
+ int(1165947838)
+}
+
+-- Iteration 9 --
+array(9) {
+ ["sunrise"]=>
+ int(1165906122)
+ ["sunset"]=>
+ int(1165942505)
+ ["transit"]=>
+ int(1165924314)
+ ["civil_twilight_begin"]=>
+ int(1165904516)
+ ["civil_twilight_end"]=>
+ int(1165944111)
+ ["nautical_twilight_begin"]=>
+ int(1165902693)
+ ["nautical_twilight_end"]=>
+ int(1165945934)
+ ["astronomical_twilight_begin"]=>
+ int(1165900910)
+ ["astronomical_twilight_end"]=>
+ int(1165947718)
+}
+
+-- Iteration 10 --
+array(9) {
+ ["sunrise"]=>
+ int(1165906242)
+ ["sunset"]=>
+ int(1165942625)
+ ["transit"]=>
+ int(1165924434)
+ ["civil_twilight_begin"]=>
+ int(1165904636)
+ ["civil_twilight_end"]=>
+ int(1165944231)
+ ["nautical_twilight_begin"]=>
+ int(1165902813)
+ ["nautical_twilight_end"]=>
+ int(1165946054)
+ ["astronomical_twilight_begin"]=>
+ int(1165901030)
+ ["astronomical_twilight_end"]=>
+ int(1165947838)
+}
+
+-- Iteration 11 --
+array(9) {
+ ["sunrise"]=>
+ int(1165906242)
+ ["sunset"]=>
+ int(1165942625)
+ ["transit"]=>
+ int(1165924434)
+ ["civil_twilight_begin"]=>
+ int(1165904636)
+ ["civil_twilight_end"]=>
+ int(1165944231)
+ ["nautical_twilight_begin"]=>
+ int(1165902813)
+ ["nautical_twilight_end"]=>
+ int(1165946054)
+ ["astronomical_twilight_begin"]=>
+ int(1165901030)
+ ["astronomical_twilight_end"]=>
+ int(1165947838)
+}
+
+-- Iteration 12 --
+array(9) {
+ ["sunrise"]=>
+ int(1165906002)
+ ["sunset"]=>
+ int(1165942385)
+ ["transit"]=>
+ int(1165924194)
+ ["civil_twilight_begin"]=>
+ int(1165904396)
+ ["civil_twilight_end"]=>
+ int(1165943991)
+ ["nautical_twilight_begin"]=>
+ int(1165902573)
+ ["nautical_twilight_end"]=>
+ int(1165945814)
+ ["astronomical_twilight_begin"]=>
+ int(1165900789)
+ ["astronomical_twilight_end"]=>
+ int(1165947598)
+}
+
+-- Iteration 13 --
+array(9) {
+ ["sunrise"]=>
+ int(1165906242)
+ ["sunset"]=>
+ int(1165942625)
+ ["transit"]=>
+ int(1165924434)
+ ["civil_twilight_begin"]=>
+ int(1165904636)
+ ["civil_twilight_end"]=>
+ int(1165944231)
+ ["nautical_twilight_begin"]=>
+ int(1165902813)
+ ["nautical_twilight_end"]=>
+ int(1165946054)
+ ["astronomical_twilight_begin"]=>
+ int(1165901030)
+ ["astronomical_twilight_end"]=>
+ int(1165947838)
+}
+
+-- Iteration 14 --
+array(9) {
+ ["sunrise"]=>
+ int(1165906002)
+ ["sunset"]=>
+ int(1165942385)
+ ["transit"]=>
+ int(1165924194)
+ ["civil_twilight_begin"]=>
+ int(1165904396)
+ ["civil_twilight_end"]=>
+ int(1165943991)
+ ["nautical_twilight_begin"]=>
+ int(1165902573)
+ ["nautical_twilight_end"]=>
+ int(1165945814)
+ ["astronomical_twilight_begin"]=>
+ int(1165900789)
+ ["astronomical_twilight_end"]=>
+ int(1165947598)
+}
+
+-- Iteration 15 --
+array(9) {
+ ["sunrise"]=>
+ int(1165906242)
+ ["sunset"]=>
+ int(1165942625)
+ ["transit"]=>
+ int(1165924434)
+ ["civil_twilight_begin"]=>
+ int(1165904636)
+ ["civil_twilight_end"]=>
+ int(1165944231)
+ ["nautical_twilight_begin"]=>
+ int(1165902813)
+ ["nautical_twilight_end"]=>
+ int(1165946054)
+ ["astronomical_twilight_begin"]=>
+ int(1165901030)
+ ["astronomical_twilight_end"]=>
+ int(1165947838)
+}
+
+-- Iteration 16 --
+
+Warning: date_sun_info() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Warning: date_sun_info() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+
+Warning: date_sun_info() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+-- Iteration 19 --
+
+Warning: date_sun_info() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+-- Iteration 20 --
+
+Warning: date_sun_info() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+-- Iteration 21 --
+
+Warning: date_sun_info() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+-- Iteration 22 --
+array(9) {
+ ["sunrise"]=>
+ int(1165906242)
+ ["sunset"]=>
+ int(1165942625)
+ ["transit"]=>
+ int(1165924434)
+ ["civil_twilight_begin"]=>
+ int(1165904636)
+ ["civil_twilight_end"]=>
+ int(1165944231)
+ ["nautical_twilight_begin"]=>
+ int(1165902813)
+ ["nautical_twilight_end"]=>
+ int(1165946054)
+ ["astronomical_twilight_begin"]=>
+ int(1165901030)
+ ["astronomical_twilight_end"]=>
+ int(1165947838)
+}
+
+-- Iteration 23 --
+array(9) {
+ ["sunrise"]=>
+ int(1165906242)
+ ["sunset"]=>
+ int(1165942625)
+ ["transit"]=>
+ int(1165924434)
+ ["civil_twilight_begin"]=>
+ int(1165904636)
+ ["civil_twilight_end"]=>
+ int(1165944231)
+ ["nautical_twilight_begin"]=>
+ int(1165902813)
+ ["nautical_twilight_end"]=>
+ int(1165946054)
+ ["astronomical_twilight_begin"]=>
+ int(1165901030)
+ ["astronomical_twilight_end"]=>
+ int(1165947838)
+}
+
+-- Iteration 24 --
+
+Warning: date_sun_info() expects parameter 3 to be double, resource given in %s on line %d
+bool(false)
+===Done=== \ No newline at end of file
diff --git a/ext/date/tests/date_sunrise_and_sunset_basic.phpt b/ext/date/tests/date_sunrise_and_sunset_basic.phpt
new file mode 100644
index 000000000..ed68267ec
--- /dev/null
+++ b/ext/date/tests/date_sunrise_and_sunset_basic.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Basic test for date_sunrise and date_sunset based on example in PHP manual
+--FILE--
+<?php
+
+date_default_timezone_set('UTC');
+/* calculate the sunrise time for Lisbon, Portugal
+Latitude: 38.4 North
+Longitude: 9 West
+Zenith ~= 90
+offset: +1 GMT
+*/
+
+echo "Basic test for date_sunrise() and date_sunset()\n";
+
+// supress date() function strict msgs
+error_reporting(E_ALL & ~E_STRICT);
+
+echo date("D M d Y") . ', sunrise time : ' . date_sunrise(time(), SUNFUNCS_RET_STRING, 38.4, -9, 90, 1) . "\n";
+echo date("D M d Y") . ', sunset time : ' . date_sunset(time(), SUNFUNCS_RET_STRING, 38.4, -9, 90, 1) . "\n";
+
+?>
+===Done===
+--EXPECTF--
+Basic test for date_sunrise() and date_sunset()
+%s %s %d %d, sunrise time : %d:%d
+%s %s %d %d, sunset time : %d:%d
+===Done===
diff --git a/ext/date/tests/date_sunrise_error.phpt b/ext/date/tests/date_sunrise_error.phpt
new file mode 100644
index 000000000..f57b7ed1c
--- /dev/null
+++ b/ext/date/tests/date_sunrise_error.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Test date_sunrise() function : error conditions
+--FILE--
+<?php
+/* Prototype : mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])
+ * Description: Returns time of sunrise for a given day and location
+ * Source code: ext/date/php_date.c
+ */
+
+echo "*** Testing date_sunrise() : error conditions ***\n";
+
+//Initialise the variables
+$time = time();
+$latitude = 38.4;
+$longitude = -9;
+$zenith = 90;
+$gmt_offset = 1;
+$extra_arg = 10;
+
+// Zero arguments
+echo "\n-- Testing date_sunrise() function with Zero arguments --\n";
+var_dump( date_sunrise() );
+
+//Test date_sunrise with one more than the expected number of arguments
+echo "\n-- Testing date_sunrise() function with more than expected no. of arguments --\n";
+var_dump( date_sunrise($time, SUNFUNCS_RET_STRING, $latitude, $longitude, $zenith, $gmt_offset, $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_sunrise() : error conditions ***
+
+-- Testing date_sunrise() function with Zero arguments --
+
+Warning: date_sunrise() expects at least 1 parameter, 0 given in %s on line %d
+bool(false)
+
+-- Testing date_sunrise() function with more than expected no. of arguments --
+
+Warning: date_sunrise() expects at most 6 parameters, 7 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_sunrise_variation1.phpt b/ext/date/tests/date_sunrise_variation1.phpt
new file mode 100644
index 000000000..bf6b17ede
--- /dev/null
+++ b/ext/date/tests/date_sunrise_variation1.phpt
@@ -0,0 +1,315 @@
+--TEST--
+Test date_sunrise() function : usage variation - Passing unexpected values to first argument time.
+--FILE--
+<?php
+/* Prototype : mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])
+ * Description: Returns time of sunrise for a given day and location
+ * Source code: ext/date/php_date.c
+ */
+
+echo "*** Testing date_sunrise() : usage variation ***\n";
+
+//Initialise the variables
+$latitude = 38.4;
+$longitude = -9;
+$zenith = 90;
+$gmt_offset = 1;
+date_default_timezone_set("Asia/Calcutta");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for time
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( date_sunrise($value, SUNFUNCS_RET_STRING, $latitude, $longitude, $zenith, $gmt_offset) );
+ var_dump( date_sunrise($value, SUNFUNCS_RET_DOUBLE, $latitude, $longitude, $zenith, $gmt_offset) );
+ var_dump( date_sunrise($value, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $zenith, $gmt_offset) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_sunrise() : usage variation ***
+
+--int 0--
+string(5) "08:56"
+float(8.944%d)
+int(28599)
+
+--int 1--
+string(5) "08:56"
+float(8.944%d)
+int(28599)
+
+--int 12345--
+string(5) "08:56"
+float(8.944%d)
+int(28599)
+
+--int -12345--
+string(5) "08:56"
+float(8.944%d)
+int(28599)
+
+--float 10.5--
+string(5) "08:56"
+float(8.944%d)
+int(28599)
+
+--float -10.5--
+string(5) "08:56"
+float(8.944%d)
+int(28599)
+
+--float .5--
+string(5) "08:56"
+float(8.944%d)
+int(28599)
+
+--empty array--
+
+Warning: date_sunrise() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: date_sunrise() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: date_sunrise() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: date_sunrise() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+string(5) "08:56"
+float(8.944%d)
+int(28599)
+
+--lowercase null--
+string(5) "08:56"
+float(8.944%d)
+int(28599)
+
+--lowercase true--
+string(5) "08:56"
+float(8.944%d)
+int(28599)
+
+--lowercase false--
+string(5) "08:56"
+float(8.944%d)
+int(28599)
+
+--uppercase TRUE--
+string(5) "08:56"
+float(8.944%d)
+int(28599)
+
+--uppercase FALSE--
+string(5) "08:56"
+float(8.944%d)
+int(28599)
+
+--empty string DQ--
+
+Warning: date_sunrise() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: date_sunrise() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: date_sunrise() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: date_sunrise() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: date_sunrise() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: date_sunrise() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: date_sunrise() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: date_sunrise() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+--undefined var--
+string(5) "08:56"
+float(8.944%d)
+int(28599)
+
+--unset var--
+string(5) "08:56"
+float(8.944%d)
+int(28599)
+===DONE===
diff --git a/ext/date/tests/date_sunrise_variation2.phpt b/ext/date/tests/date_sunrise_variation2.phpt
new file mode 100644
index 000000000..915b790bc
--- /dev/null
+++ b/ext/date/tests/date_sunrise_variation2.phpt
@@ -0,0 +1,212 @@
+--TEST--
+Test date_sunrise() function : usage variation - Passing unexpected values to second argument format.
+--FILE--
+<?php
+/* Prototype : mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])
+ * Description: Returns time of sunrise for a given day and location
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing date_sunrise() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+date_default_timezone_set("Asia/Calcutta");
+$time = mktime(8, 8, 8, 8, 8, 2008);
+$latitude = 38.4;
+$longitude = -9;
+$zenith = 90;
+$gmt_offset = 1;
+
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for format
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( date_sunrise($time, $value, $latitude, $longitude, $zenith, $gmt_offset) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_sunrise() : usage variation ***
+
+--float 10.5--
+
+Warning: date_sunrise(): Wrong return format given, pick one of SUNFUNCS_RET_TIMESTAMP, SUNFUNCS_RET_STRING or SUNFUNCS_RET_DOUBLE in %s on line %d
+bool(false)
+
+--float -10.5--
+
+Warning: date_sunrise(): Wrong return format given, pick one of SUNFUNCS_RET_TIMESTAMP, SUNFUNCS_RET_STRING or SUNFUNCS_RET_DOUBLE in %s on line %d
+bool(false)
+
+--float 12.3456789000e10--
+
+Warning: date_sunrise(): Wrong return format given, pick one of SUNFUNCS_RET_TIMESTAMP, SUNFUNCS_RET_STRING or SUNFUNCS_RET_DOUBLE in %s on line %d
+bool(false)
+
+--float -12.3456789000e10--
+
+Warning: date_sunrise(): Wrong return format given, pick one of SUNFUNCS_RET_TIMESTAMP, SUNFUNCS_RET_STRING or SUNFUNCS_RET_DOUBLE in %s on line %d
+bool(false)
+
+--float .5--
+int(1218174483)
+
+--empty array--
+
+Warning: date_sunrise() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: date_sunrise() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: date_sunrise() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: date_sunrise() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+int(1218174483)
+
+--lowercase null--
+int(1218174483)
+
+--lowercase true--
+string(5) "06:48"
+
+--lowercase false--
+int(1218174483)
+
+--uppercase TRUE--
+string(5) "06:48"
+
+--uppercase FALSE--
+int(1218174483)
+
+--empty string DQ--
+
+Warning: date_sunrise() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: date_sunrise() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: date_sunrise() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: date_sunrise() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: date_sunrise() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: date_sunrise() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: date_sunrise() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: date_sunrise() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+--undefined var--
+int(1218174483)
+
+--unset var--
+int(1218174483)
+===DONE===
diff --git a/ext/date/tests/date_sunrise_variation3.phpt b/ext/date/tests/date_sunrise_variation3.phpt
new file mode 100644
index 000000000..46c5783c1
--- /dev/null
+++ b/ext/date/tests/date_sunrise_variation3.phpt
@@ -0,0 +1,294 @@
+--TEST--
+Test date_sunrise() function : usage variation - Passing unexpected values to third argument latitude.
+--FILE--
+<?php
+/* Prototype : mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])
+ * Description: Returns time of sunrise for a given day and location
+ * Source code: ext/date/php_date.c
+ */
+
+echo "*** Testing date_sunrise() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+date_default_timezone_set("Asia/Calcutta");
+$time = mktime(8, 8, 8, 8, 8, 2008);
+$longitude = -9;
+$zenith = 90;
+$gmt_offset = -5.5;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for latitude
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( date_sunrise($time, SUNFUNCS_RET_STRING, $value, $longitude, $zenith, $gmt_offset) );
+ var_dump( date_sunrise($time, SUNFUNCS_RET_DOUBLE, $value, $longitude, $zenith, $gmt_offset) );
+ var_dump( date_sunrise($time, SUNFUNCS_RET_TIMESTAMP, $value, $longitude, $zenith, $gmt_offset) );
+};
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_sunrise() : usage variation ***
+
+--int 0--
+string(5) "01:10"
+float(1.174%d)
+int(1218177627)
+
+--int 1--
+string(5) "01:09"
+float(1.155%d)
+int(1218177558)
+
+--int 12345--
+bool(false)
+bool(false)
+bool(false)
+
+--int -12345--
+bool(false)
+bool(false)
+bool(false)
+
+--empty array--
+
+Warning: date_sunrise() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: date_sunrise() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: date_sunrise() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: date_sunrise() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+string(5) "01:10"
+float(1.174%d)
+int(1218177627)
+
+--lowercase null--
+string(5) "01:10"
+float(1.174%d)
+int(1218177627)
+
+--lowercase true--
+string(5) "01:09"
+float(1.155%d)
+int(1218177558)
+
+--lowercase false--
+string(5) "01:10"
+float(1.174%d)
+int(1218177627)
+
+--uppercase TRUE--
+string(5) "01:09"
+float(1.155%d)
+int(1218177558)
+
+--uppercase FALSE--
+string(5) "01:10"
+float(1.174%d)
+int(1218177627)
+
+--empty string DQ--
+
+Warning: date_sunrise() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: date_sunrise() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: date_sunrise() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: date_sunrise() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: date_sunrise() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: date_sunrise() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: date_sunrise() expects parameter 3 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: date_sunrise() expects parameter 3 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 3 to be double, object given in %s on line %d
+bool(false)
+
+--undefined var--
+string(5) "01:10"
+float(1.174%d)
+int(1218177627)
+
+--unset var--
+string(5) "01:10"
+float(1.1742%d)
+int(1218177627)
+===DONE===
diff --git a/ext/date/tests/date_sunrise_variation4.phpt b/ext/date/tests/date_sunrise_variation4.phpt
new file mode 100644
index 000000000..c48f53831
--- /dev/null
+++ b/ext/date/tests/date_sunrise_variation4.phpt
@@ -0,0 +1,296 @@
+--TEST--
+Test date_sunrise() function : usage variation - Passing unexpected values to fourth argument longitude.
+--FILE--
+<?php
+/* Prototype : mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])
+ * Description: Returns time of sunrise for a given day and location
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing date_sunrise() : usage variation ***\n";
+
+//Initialise the variables
+date_default_timezone_set("Asia/Calcutta");
+$time = mktime(8, 8, 8, 8, 8, 2008);
+$latitude = 38.4;
+$zenith = 90;
+$gmt_offset = 0;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for longitude
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( date_sunrise($time, SUNFUNCS_RET_STRING, $latitude, $value, $zenith, $gmt_offset) );
+ var_dump( date_sunrise($time, SUNFUNCS_RET_DOUBLE, $latitude, $value, $zenith, $gmt_offset) );
+ var_dump( date_sunrise($time, SUNFUNCS_RET_TIMESTAMP, $latitude, $value, $zenith, $gmt_offset) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_sunrise() : usage variation ***
+
+--int 0--
+string(5) "05:12"
+float(5.200%d)
+int(1218172321)
+
+--int 1--
+string(5) "05:08"
+float(5.133%d)
+int(1218172081)
+
+--int 12345--
+string(5) "21:45"
+float(21.759%d)
+int(1218145534)
+
+--int -12345--
+string(5) "12:41"
+float(12.698%d)
+int(1218199315)
+
+--empty array--
+
+Warning: date_sunrise() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: date_sunrise() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: date_sunrise() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: date_sunrise() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+string(5) "05:12"
+float(5.200%d)
+int(1218172321)
+
+--lowercase null--
+string(5) "05:12"
+float(5.200%d)
+int(1218172321)
+
+--lowercase true--
+string(5) "05:08"
+float(5.133%d)
+int(1218172081)
+
+--lowercase false--
+string(5) "05:12"
+float(5.200%d)
+int(1218172321)
+
+--uppercase TRUE--
+string(5) "05:08"
+float(5.133%d)
+int(1218172081)
+
+--uppercase FALSE--
+string(5) "05:12"
+float(5.200%d)
+int(1218172321)
+
+--empty string DQ--
+
+Warning: date_sunrise() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: date_sunrise() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: date_sunrise() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: date_sunrise() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: date_sunrise() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: date_sunrise() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: date_sunrise() expects parameter 4 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: date_sunrise() expects parameter 4 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 4 to be double, object given in %s on line %d
+bool(false)
+
+--undefined var--
+string(5) "05:12"
+float(5.200%d)
+int(1218172321)
+
+--unset var--
+string(5) "05:12"
+float(5.200%d)
+int(1218172321)
+===DONE===
diff --git a/ext/date/tests/date_sunrise_variation5.phpt b/ext/date/tests/date_sunrise_variation5.phpt
new file mode 100644
index 000000000..e697836d1
--- /dev/null
+++ b/ext/date/tests/date_sunrise_variation5.phpt
@@ -0,0 +1,296 @@
+--TEST--
+Test date_sunrise() function : usage variation - Passing unexpected values to fifth argument zenith
+--FILE--
+<?php
+/* Prototype : mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])
+ * Description: Returns time of sunrise for a given day and location
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing date_sunrise() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+date_default_timezone_set("Asia/Calcutta");
+$time = mktime(8, 8, 8, 8, 8, 2008);
+$latitude = 38.4;
+$longitude = -9;
+$gmt_offset = 5.5;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for zenith
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( date_sunrise($time, SUNFUNCS_RET_STRING, $latitude, $longitude, $value, $gmt_offset) );
+ var_dump( date_sunrise($time, SUNFUNCS_RET_DOUBLE, $latitude, $longitude, $value, $gmt_offset) );
+ var_dump( date_sunrise($time, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $value, $gmt_offset) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_sunrise() : usage variation ***
+
+--int 0--
+bool(false)
+bool(false)
+bool(false)
+
+--int 1--
+bool(false)
+bool(false)
+bool(false)
+
+--int 12345--
+string(5) "09:52"
+float(9.882%d)
+int(1218169377)
+
+--int -12345--
+string(5) "09:54"
+float(9.909%d)
+int(1218169475)
+
+--empty array--
+
+Warning: date_sunrise() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: date_sunrise() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: date_sunrise() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: date_sunrise() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+bool(false)
+bool(false)
+bool(false)
+
+--lowercase null--
+bool(false)
+bool(false)
+bool(false)
+
+--lowercase true--
+bool(false)
+bool(false)
+bool(false)
+
+--lowercase false--
+bool(false)
+bool(false)
+bool(false)
+
+--uppercase TRUE--
+bool(false)
+bool(false)
+bool(false)
+
+--uppercase FALSE--
+bool(false)
+bool(false)
+bool(false)
+
+--empty string DQ--
+
+Warning: date_sunrise() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: date_sunrise() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: date_sunrise() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: date_sunrise() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: date_sunrise() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: date_sunrise() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: date_sunrise() expects parameter 5 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: date_sunrise() expects parameter 5 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 5 to be double, object given in %s on line %d
+bool(false)
+
+--undefined var--
+bool(false)
+bool(false)
+bool(false)
+
+--unset var--
+bool(false)
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_sunrise_variation6.phpt b/ext/date/tests/date_sunrise_variation6.phpt
new file mode 100644
index 000000000..a96b95f56
--- /dev/null
+++ b/ext/date/tests/date_sunrise_variation6.phpt
@@ -0,0 +1,295 @@
+--TEST--
+Test date_sunrise() function : usage variation - Passing unexpected values to sixth argument gmt_offset.
+--FILE--
+<?php
+/* Prototype : mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])
+ * Description: Returns time of sunrise for a given day and location
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing date_sunrise() : usage variation ***\n";
+// Initialise function arguments not being substituted (if any)
+date_default_timezone_set("Asia/Calcutta");
+$time = mktime(8, 8, 8, 8, 8, 2008);
+$latitude = 38.4;
+$longitude = -9;
+$zenith = 90;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for gmt_offset
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( date_sunrise($time, SUNFUNCS_RET_STRING, $latitude, $longitude, $zenith, $value) );
+ var_dump( date_sunrise($time, SUNFUNCS_RET_DOUBLE, $latitude, $longitude, $zenith, $value) );
+ var_dump( date_sunrise($time, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $zenith, $value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_sunrise() : usage variation ***
+
+--int 0--
+string(5) "05:48"
+float(5.800%d)
+int(1218174483)
+
+--int 1--
+string(5) "06:48"
+float(6.800%d)
+int(1218174483)
+
+--int 12345--
+string(5) "14:48"
+float(14.800%d)
+int(1218174483)
+
+--int -12345--
+string(5) "12:48"
+float(12.800%d)
+int(1218174483)
+
+--empty array--
+
+Warning: date_sunrise() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: date_sunrise() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: date_sunrise() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: date_sunrise() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+string(5) "05:48"
+float(5.800%d)
+int(1218174483)
+
+--lowercase null--
+string(5) "05:48"
+float(5.800%d)
+int(1218174483)
+
+--lowercase true--
+string(5) "06:48"
+float(6.800%d)
+int(1218174483)
+
+--lowercase false--
+string(5) "05:48"
+float(5.800%d)
+int(1218174483)
+
+--uppercase TRUE--
+string(5) "06:48"
+float(6.800%d)
+int(1218174483)
+
+--uppercase FALSE--
+string(5) "05:48"
+float(5.800%d)
+int(1218174483)
+
+--empty string DQ--
+
+Warning: date_sunrise() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: date_sunrise() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: date_sunrise() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: date_sunrise() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: date_sunrise() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: date_sunrise() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: date_sunrise() expects parameter 6 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: date_sunrise() expects parameter 6 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunrise() expects parameter 6 to be double, object given in %s on line %d
+bool(false)
+
+--undefined var--
+string(5) "05:48"
+float(5.800%d)
+int(1218174483)
+
+--unset var--
+string(5) "05:48"
+float(5.800%d)
+int(1218174483)
+===DONE===
diff --git a/ext/date/tests/date_sunrise_variation7.phpt b/ext/date/tests/date_sunrise_variation7.phpt
new file mode 100644
index 000000000..fa5f363a5
--- /dev/null
+++ b/ext/date/tests/date_sunrise_variation7.phpt
@@ -0,0 +1,57 @@
+--TEST--
+Test date_sunrise() function : usage variation - Checking sunrise for consecutive days in specific timezone
+--FILE--
+<?php
+/* Prototype : mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])
+ * Description: Returns time of sunrise for a given day and location
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing date_sunrise() : usage variation ***\n";
+
+//Timezones with required data for date_sunrise
+$inputs = array (
+ //Timezone with Latitude, Longitude and GMT offset
+ "Pacific/Samoa" => array ("Latitude" => -14.24, "Longitude" => -170.72, "GMT" => -11),
+ "US/Alaska" => array ("Latitude" => 61, "Longitude" => -150 , "GMT" => -9),
+ "America/Chicago" => array ("Latitude" => 41.85, "Longitude" => -87.65 , "GMT" => -5),
+ "America/Montevideo" => array ("Latitude" => -34.88, "Longitude" => -56.18 , "GMT" => -3),
+ "Africa/Casablanca" => array ("Latitude" => 33.65, "Longitude" => -7.58, "GMT" => 0),
+ "Europe/Moscow" => array ("Latitude" => 55.75, "Longitude" => 37.58, "GMT" => 4),
+ "Asia/Hong_Kong" => array ("Latitude" => 22.28, "Longitude" => 114.15 , "GMT" => 8),
+ "Australia/Brisbane" => array ("Latitude" => -27.46, "Longitude" => 153.2 , "GMT" => 10),
+ "Pacific/Wallis" => array ("Latitude" => -13.3, "Longitude" => -176.16, "GMT" => 12),
+);
+
+foreach($inputs as $timezone => $value) {
+ date_default_timezone_set($timezone);
+ $time = mktime(8, 8, 8, 8, 11, 2008);
+ var_dump( date_sunrise($time, SUNFUNCS_RET_STRING, $value["Latitude"], $value["Longitude"], 90, $value["GMT"] ));
+ $time = mktime(8, 8, 8, 8, 12, 2008);
+ var_dump( date_sunrise($time, SUNFUNCS_RET_STRING, $value["Latitude"], $value["Longitude"], 90, $value["GMT"]) );
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_sunrise() : usage variation ***
+string(5) "06:41"
+string(5) "06:41"
+string(5) "05:09"
+string(5) "05:11"
+string(5) "05:59"
+string(5) "06:00"
+string(5) "07:30"
+string(5) "07:29"
+string(5) "05:53"
+string(5) "05:53"
+string(5) "05:59"
+string(5) "06:01"
+string(5) "06:01"
+string(5) "06:02"
+string(5) "06:23"
+string(5) "06:22"
+string(5) "06:03"
+string(5) "06:02"
+===DONE===
diff --git a/ext/date/tests/date_sunrise_variation8.phpt b/ext/date/tests/date_sunrise_variation8.phpt
new file mode 100644
index 000000000..1d22be8c8
--- /dev/null
+++ b/ext/date/tests/date_sunrise_variation8.phpt
@@ -0,0 +1,73 @@
+--TEST--
+Test date_sunrise() function : usage variation - Checking with North and South poles when Sun is up and down all day
+--FILE--
+<?php
+/* Prototype : mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])
+ * Description: Returns time of sunrise for a given day and location
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing date_sunrise() : usage variation ***\n";
+
+// GMT is zero for the timezone
+date_default_timezone_set("Africa/Casablanca");
+$time_date = array (
+
+ //Date at which Sun is up all day at North Pole
+ "12 Aug 2008" => mktime(8, 8, 8, 8, 12, 2008),
+ "13 Aug 2008" => mktime(8, 8, 8, 8, 13, 2008),
+
+ //Date at which Sun is up all day at South Pole
+ "12 Nov 2008" => mktime(8, 8, 8, 11, 12, 2008),
+ "13 Nov 2008" => mktime(8, 8, 8, 11, 13, 2008),
+);
+
+//Iterate over different date and time
+foreach( $time_date as $date => $time ){
+ echo "\n--$date--\n";
+ var_dump( date_sunrise($time, SUNFUNCS_RET_STRING, 90, 0 ) );
+ var_dump( date_sunrise($time, SUNFUNCS_RET_DOUBLE, 90, 0 ) );
+ var_dump( date_sunrise($time, SUNFUNCS_RET_TIMESTAMP, 90, 0 ) );
+ var_dump( date_sunrise($time, SUNFUNCS_RET_STRING, -90, 0 ) );
+ var_dump( date_sunrise($time, SUNFUNCS_RET_DOUBLE, -90, 0 ) );
+ var_dump( date_sunrise($time, SUNFUNCS_RET_TIMESTAMP, -90, 0 ) );
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_sunrise() : usage variation ***
+
+--12 Aug 2008--
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+
+--13 Aug 2008--
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+
+--12 Nov 2008--
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+
+--13 Nov 2008--
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_sunrise_variation9.phpt b/ext/date/tests/date_sunrise_variation9.phpt
new file mode 100644
index 000000000..49af06d52
--- /dev/null
+++ b/ext/date/tests/date_sunrise_variation9.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test date_sunrise() function : usage variation - Passing high positive and negative float values to time argument.
+--FILE--
+<?php
+/* Prototype : mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])
+ * Description: Returns time of sunrise for a given day and location
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing date_sunrise() : usage variation ***\n";
+
+// GMT is zero for the timezone
+date_default_timezone_set("Asia/Calcutta");
+//Initialise the variables
+$latitude = 38.4;
+$longitude = -9;
+$zenith = 90;
+$gmt_offset = 1;
+
+echo "\n-- Testing date_sunrise() function by passing float 12.3456789000e10 value to time --\n";
+$time = 12.3456789000e10;
+var_dump( date_sunrise($time, SUNFUNCS_RET_STRING, $latitude, $longitude, $zenith, $gmt_offset) );
+var_dump( date_sunrise($time, SUNFUNCS_RET_DOUBLE, $latitude, $longitude, $zenith, $gmt_offset) );
+var_dump( date_sunrise($time, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $zenith, $gmt_offset) );
+
+echo "\n-- Testing date_sunrise() function by passing float -12.3456789000e10 value to time --\n";
+$time = -12.3456789000e10;
+var_dump( date_sunrise($time, SUNFUNCS_RET_STRING, $latitude, $longitude, $zenith, $gmt_offset) );
+var_dump( date_sunrise($time, SUNFUNCS_RET_DOUBLE, $latitude, $longitude, $zenith, $gmt_offset) );
+var_dump( date_sunrise($time, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $zenith, $gmt_offset) );
+
+?>
+===DONE===
+--EXPECTREGEX--
+\*\*\* Testing date_sunrise\(\) : usage variation \*\*\*
+
+-- Testing date_sunrise\(\) function by passing float 12.3456789000e10 value to time --
+string\(5\) "(07:34|07:49)"
+float\((7.566[0-9]*|7.821[0-9]*)\)
+int\((-1097256359|123456811756)\)
+
+-- Testing date_sunrise\(\) function by passing float -12.3456789000e10 value to time --
+string\(5\) "(07:42|08:48|08:04)"
+float\((7.713[0-9]*|8.810[0-9]*|8.074[0-9]*)\)
+int\((1097304168|-2147443882|-123456761731)\)
+===DONE===
diff --git a/ext/date/tests/date_sunset_error.phpt b/ext/date/tests/date_sunset_error.phpt
new file mode 100644
index 000000000..a5e75b649
--- /dev/null
+++ b/ext/date/tests/date_sunset_error.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test date_sunset() function : error conditions
+--FILE--
+<?php
+/* Prototype : mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])
+ * Description: Returns time of sunset for a given day and location
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing date_sunset() : error conditions ***\n";
+
+//Initialise the variables
+$time = time();
+$latitude = 38.4;
+$longitude = -9;
+$zenith = 90;
+$gmt_offset = 1;
+$extra_arg = 10;
+
+// Zero arguments
+echo "\n-- Testing date_sunset() function with Zero arguments --\n";
+var_dump( date_sunset() );
+
+//Test date_sunset with one more than the expected number of arguments
+echo "\n-- Testing date_sunset() function with more than expected no. of arguments --\n";
+var_dump( date_sunset($time, SUNFUNCS_RET_STRING, $latitude, $longitude, $zenith, $gmt_offset, $extra_arg) );
+var_dump( date_sunset($time, SUNFUNCS_RET_DOUBLE, $latitude, $longitude, $zenith, $gmt_offset, $extra_arg) );
+var_dump( date_sunset($time, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $zenith, $gmt_offset, $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_sunset() : error conditions ***
+
+-- Testing date_sunset() function with Zero arguments --
+
+Warning: date_sunset() expects at least 1 parameter, 0 given in %s on line %d
+bool(false)
+
+-- Testing date_sunset() function with more than expected no. of arguments --
+
+Warning: date_sunset() expects at most 6 parameters, 7 given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects at most 6 parameters, 7 given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects at most 6 parameters, 7 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_sunset_variation1.phpt b/ext/date/tests/date_sunset_variation1.phpt
new file mode 100644
index 000000000..c2e119571
--- /dev/null
+++ b/ext/date/tests/date_sunset_variation1.phpt
@@ -0,0 +1,316 @@
+--TEST--
+Test date_sunset() function : usage variation - Passing unexpected values to first argument time.
+--FILE--
+<?php
+/* Prototype : mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])
+ * Description: Returns time of sunset for a given day and location
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing date_sunset() : usage variation ***\n";
+
+//Initialise the variables
+$latitude = 38.4;
+$longitude = -9;
+$zenith = 90;
+$gmt_offset = 1;
+date_default_timezone_set("Asia/Calcutta");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for time
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( date_sunset($value, SUNFUNCS_RET_STRING, $latitude, $longitude, $zenith, $gmt_offset) );
+ var_dump( date_sunset($value, SUNFUNCS_RET_DOUBLE, $latitude, $longitude, $zenith, $gmt_offset) );
+ var_dump( date_sunset($value, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $zenith, $gmt_offset) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_sunset() : usage variation ***
+
+--int 0--
+string(5) "18:22"
+float(18.377%d)
+int(62558)
+
+--int 1--
+string(5) "18:22"
+float(18.377%d)
+int(62558)
+
+--int 12345--
+string(5) "18:22"
+float(18.377%d)
+int(62558)
+
+--int -12345--
+string(5) "18:22"
+float(18.377%d)
+int(62558)
+
+--float 10.5--
+string(5) "18:22"
+float(18.377%d)
+int(62558)
+
+--float -10.5--
+string(5) "18:22"
+float(18.377%d)
+int(62558)
+
+--float .5--
+string(5) "18:22"
+float(18.377%d)
+int(62558)
+
+--empty array--
+
+Warning: date_sunset() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: date_sunset() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: date_sunset() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: date_sunset() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+string(5) "18:22"
+float(18.377%d)
+int(62558)
+
+--lowercase null--
+string(5) "18:22"
+float(18.377%d)
+int(62558)
+
+--lowercase true--
+string(5) "18:22"
+float(18.377%d)
+int(62558)
+
+--lowercase false--
+string(5) "18:22"
+float(18.377%d)
+int(62558)
+
+--uppercase TRUE--
+string(5) "18:22"
+float(18.377%d)
+int(62558)
+
+--uppercase FALSE--
+string(5) "18:22"
+float(18.377%d)
+int(62558)
+
+--empty string DQ--
+
+Warning: date_sunset() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: date_sunset() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: date_sunset() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: date_sunset() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: date_sunset() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: date_sunset() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: date_sunset() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: date_sunset() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+--undefined var--
+string(5) "18:22"
+float(18.377%d)
+int(62558)
+
+--unset var--
+string(5) "18:22"
+float(18.377%d)
+int(62558)
+===DONE===
diff --git a/ext/date/tests/date_sunset_variation2.phpt b/ext/date/tests/date_sunset_variation2.phpt
new file mode 100644
index 000000000..575b64a22
--- /dev/null
+++ b/ext/date/tests/date_sunset_variation2.phpt
@@ -0,0 +1,211 @@
+--TEST--
+Test date_sunset() function : usage variation - Passing unexpected values to second argument format.
+--FILE--
+<?php
+/* Prototype : mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])
+ * Description: Returns time of sunset for a given day and location
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing date_sunset() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+date_default_timezone_set("Asia/Calcutta");
+$time = mktime(8, 8, 8, 8, 8, 2008);
+$latitude = 22.34;
+$longitude = 88.21;
+$zenith = 90;
+$gmt_offset = 5.5;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for format
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( date_sunset($time, $value, $latitude, $longitude, $zenith, $gmt_offset) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_sunset() : usage variation ***
+
+--float 10.5--
+
+Warning: date_sunset(): Wrong return format given, pick one of SUNFUNCS_RET_TIMESTAMP, SUNFUNCS_RET_STRING or SUNFUNCS_RET_DOUBLE in %s on line %d
+bool(false)
+
+--float -10.5--
+
+Warning: date_sunset(): Wrong return format given, pick one of SUNFUNCS_RET_TIMESTAMP, SUNFUNCS_RET_STRING or SUNFUNCS_RET_DOUBLE in %s on line %d
+bool(false)
+
+--float 12.3456789000e10--
+
+Warning: date_sunset(): Wrong return format given, pick one of SUNFUNCS_RET_TIMESTAMP, SUNFUNCS_RET_STRING or SUNFUNCS_RET_DOUBLE in %s on line %d
+bool(false)
+
+--float -12.3456789000e10--
+
+Warning: date_sunset(): Wrong return format given, pick one of SUNFUNCS_RET_TIMESTAMP, SUNFUNCS_RET_STRING or SUNFUNCS_RET_DOUBLE in %s on line %d
+bool(false)
+
+--float .5--
+int(1218199253)
+
+--empty array--
+
+Warning: date_sunset() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: date_sunset() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: date_sunset() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: date_sunset() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+int(1218199253)
+
+--lowercase null--
+int(1218199253)
+
+--lowercase true--
+string(5) "18:10"
+
+--lowercase false--
+int(1218199253)
+
+--uppercase TRUE--
+string(5) "18:10"
+
+--uppercase FALSE--
+int(1218199253)
+
+--empty string DQ--
+
+Warning: date_sunset() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: date_sunset() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: date_sunset() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: date_sunset() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: date_sunset() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: date_sunset() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: date_sunset() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: date_sunset() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+--undefined var--
+int(1218199253)
+
+--unset var--
+int(1218199253)
+===DONE===
diff --git a/ext/date/tests/date_sunset_variation3.phpt b/ext/date/tests/date_sunset_variation3.phpt
new file mode 100644
index 000000000..142cb9d0b
--- /dev/null
+++ b/ext/date/tests/date_sunset_variation3.phpt
@@ -0,0 +1,297 @@
+--TEST--
+Test date_sunset() function : usage variation - Passing unexpected values to third argument latitude.
+--FILE--
+<?php
+/* Prototype : mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])
+ * Description: Returns time of sunset for a given day and location
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing date_sunset() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+date_default_timezone_set("Asia/Calcutta");
+$time = mktime(8, 8, 8, 8, 8, 2008);
+$longitude = 88.21;
+$zenith = 90;
+$gmt_offset = 5.5;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for latitude
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( date_sunset($time, SUNFUNCS_RET_STRING, $value, $longitude, $zenith, $gmt_offset) );
+ var_dump( date_sunset($time, SUNFUNCS_RET_DOUBLE, $value, $longitude, $zenith, $gmt_offset) );
+ var_dump( date_sunset($time, SUNFUNCS_RET_TIMESTAMP, $value, $longitude, $zenith, $gmt_offset) );
+
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_sunset() : usage variation ***
+
+--int 0--
+string(5) "17:43"
+float(17.730%d)
+int(1218197630)
+
+--int 1--
+string(5) "17:44"
+float(17.7496%d)
+int(1218197698)
+
+--int 12345--
+bool(false)
+bool(false)
+bool(false)
+
+--int -12345--
+string(5) "17:35"
+float(17.598%d)
+int(1218197155)
+
+--empty array--
+
+Warning: date_sunset() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: date_sunset() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: date_sunset() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: date_sunset() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+string(5) "17:43"
+float(17.730%d)
+int(1218197630)
+
+--lowercase null--
+string(5) "17:43"
+float(17.730%d)
+int(1218197630)
+
+--lowercase true--
+string(5) "17:44"
+float(17.7496%d)
+int(1218197698)
+
+--lowercase false--
+string(5) "17:43"
+float(17.730%d)
+int(1218197630)
+
+--uppercase TRUE--
+string(5) "17:44"
+float(17.7496%d)
+int(1218197698)
+
+--uppercase FALSE--
+string(5) "17:43"
+float(17.730%d)
+int(1218197630)
+
+--empty string DQ--
+
+Warning: date_sunset() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: date_sunset() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: date_sunset() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: date_sunset() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: date_sunset() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: date_sunset() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: date_sunset() expects parameter 3 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: date_sunset() expects parameter 3 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 3 to be double, object given in %s on line %d
+bool(false)
+
+--undefined var--
+string(5) "17:43"
+float(17.730%d)
+int(1218197630)
+
+--unset var--
+string(5) "17:43"
+float(17.730%d)
+int(1218197630)
+===DONE===
diff --git a/ext/date/tests/date_sunset_variation4.phpt b/ext/date/tests/date_sunset_variation4.phpt
new file mode 100644
index 000000000..7840f8f8f
--- /dev/null
+++ b/ext/date/tests/date_sunset_variation4.phpt
@@ -0,0 +1,296 @@
+--TEST--
+Test date_sunset() function : usage variation - Passing unexpected values to fourth argument longitude.
+--FILE--
+<?php
+/* Prototype : mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])
+ * Description: Returns time of sunset for a given day and location
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing date_sunset() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+date_default_timezone_set("Asia/Calcutta");
+$time = mktime(8, 8, 8, 8, 8, 2008);
+$latitude = 22.34;
+$zenith = 90;
+$gmt_offset = 5.5;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for longitude
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( date_sunset($time, SUNFUNCS_RET_STRING, $latitude, $value, $zenith, $gmt_offset) );
+ var_dump( date_sunset($time, SUNFUNCS_RET_DOUBLE, $latitude, $value, $zenith, $gmt_offset) );
+ var_dump( date_sunset($time, SUNFUNCS_RET_TIMESTAMP, $latitude, $value, $zenith, $gmt_offset) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_sunset() : usage variation ***
+
+--int 0--
+string(5) "00:03"
+float(0.059%d)
+int(1218220414)
+
+--int 1--
+string(5) "23:59"
+float(23.992%d)
+int(1218220174)
+
+--int 12345--
+string(5) "17:15"
+float(17.259%d)
+int(1218195932)
+
+--int -12345--
+string(5) "12:18"
+float(12.316%d)
+int(1218178138)
+
+--empty array--
+
+Warning: date_sunset() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: date_sunset() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: date_sunset() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: date_sunset() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+string(5) "00:03"
+float(0.059%d)
+int(1218220414)
+
+--lowercase null--
+string(5) "00:03"
+float(0.059%d)
+int(1218220414)
+
+--lowercase true--
+string(5) "23:59"
+float(23.992%d)
+int(1218220174)
+
+--lowercase false--
+string(5) "00:03"
+float(0.059%d)
+int(1218220414)
+
+--uppercase TRUE--
+string(5) "23:59"
+float(23.992%d)
+int(1218220174)
+
+--uppercase FALSE--
+string(5) "00:03"
+float(0.059%d)
+int(1218220414)
+
+--empty string DQ--
+
+Warning: date_sunset() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: date_sunset() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: date_sunset() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: date_sunset() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: date_sunset() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: date_sunset() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: date_sunset() expects parameter 4 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: date_sunset() expects parameter 4 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 4 to be double, object given in %s on line %d
+bool(false)
+
+--undefined var--
+string(5) "00:03"
+float(0.059%d)
+int(1218220414)
+
+--unset var--
+string(5) "00:03"
+float(0.059%d)
+int(1218220414)
+===DONE===
diff --git a/ext/date/tests/date_sunset_variation5.phpt b/ext/date/tests/date_sunset_variation5.phpt
new file mode 100644
index 000000000..26bf4ccc9
--- /dev/null
+++ b/ext/date/tests/date_sunset_variation5.phpt
@@ -0,0 +1,296 @@
+--TEST--
+Test date_sunset() function : usage variation - Passing unexpected values to fifth argument zenith.
+--FILE--
+<?php
+/* Prototype : mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])
+ * Description: Returns time of sunset for a given day and location
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing date_sunset() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+date_default_timezone_set("Asia/Calcutta");
+$time = mktime(8, 8, 8, 8, 8, 2008);
+$longitude = 88.21;
+$latitude = 22.34;
+$gmt_offset = 5.5;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for zenith
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( date_sunset($time, SUNFUNCS_RET_STRING, $latitude, $longitude, $value, $gmt_offset) );
+ var_dump( date_sunset($time, SUNFUNCS_RET_DOUBLE, $latitude, $longitude, $value, $gmt_offset) );
+ var_dump( date_sunset($time, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $value, $gmt_offset) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_sunset() : usage variation ***
+
+--int 0--
+bool(false)
+bool(false)
+bool(false)
+
+--int 1--
+bool(false)
+bool(false)
+bool(false)
+
+--int 12345--
+string(5) "19:19"
+float(19.319%d)
+int(1218203349)
+
+--int -12345--
+bool(false)
+bool(false)
+bool(false)
+
+--empty array--
+
+Warning: date_sunset() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: date_sunset() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: date_sunset() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: date_sunset() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+bool(false)
+bool(false)
+bool(false)
+
+--lowercase null--
+bool(false)
+bool(false)
+bool(false)
+
+--lowercase true--
+bool(false)
+bool(false)
+bool(false)
+
+--lowercase false--
+bool(false)
+bool(false)
+bool(false)
+
+--uppercase TRUE--
+bool(false)
+bool(false)
+bool(false)
+
+--uppercase FALSE--
+bool(false)
+bool(false)
+bool(false)
+
+--empty string DQ--
+
+Warning: date_sunset() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: date_sunset() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: date_sunset() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: date_sunset() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: date_sunset() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: date_sunset() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: date_sunset() expects parameter 5 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: date_sunset() expects parameter 5 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 5 to be double, object given in %s on line %d
+bool(false)
+
+--undefined var--
+bool(false)
+bool(false)
+bool(false)
+
+--unset var--
+bool(false)
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_sunset_variation6.phpt b/ext/date/tests/date_sunset_variation6.phpt
new file mode 100644
index 000000000..a434de871
--- /dev/null
+++ b/ext/date/tests/date_sunset_variation6.phpt
@@ -0,0 +1,296 @@
+--TEST--
+Test date_sunset() function : usage variation - Passing unexpected values to sixth argument gmt_offset.
+--FILE--
+<?php
+/* Prototype : mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])
+ * Description: Returns time of sunset for a given day and location
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing date_sunset() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+date_default_timezone_set("Asia/Calcutta");
+$time = mktime(8, 8, 8, 8, 8, 2008);
+$longitude = 88.21;
+$latitude = 22.34;
+$zenith = 90;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for gmt_offset
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( date_sunset($time, SUNFUNCS_RET_STRING, $latitude, $longitude, $zenith, $value) );
+ var_dump( date_sunset($time, SUNFUNCS_RET_DOUBLE, $latitude, $longitude, $zenith, $value) );
+ var_dump( date_sunset($time, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $zenith, $value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_sunset() : usage variation ***
+
+--int 0--
+string(5) "12:40"
+float(12.681%d)
+int(1218199253)
+
+--int 1--
+string(5) "13:40"
+float(13.681%d)
+int(1218199253)
+
+--int 12345--
+string(5) "21:40"
+float(21.681%d)
+int(1218199253)
+
+--int -12345--
+string(5) "19:40"
+float(19.681%d)
+int(1218199253)
+
+--empty array--
+
+Warning: date_sunset() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: date_sunset() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: date_sunset() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: date_sunset() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+string(5) "12:40"
+float(12.681%d)
+int(1218199253)
+
+--lowercase null--
+string(5) "12:40"
+float(12.681%d)
+int(1218199253)
+
+--lowercase true--
+string(5) "13:40"
+float(13.681%d)
+int(1218199253)
+
+--lowercase false--
+string(5) "12:40"
+float(12.681%d)
+int(1218199253)
+
+--uppercase TRUE--
+string(5) "13:40"
+float(13.681%d)
+int(1218199253)
+
+--uppercase FALSE--
+string(5) "12:40"
+float(12.681%d)
+int(1218199253)
+
+--empty string DQ--
+
+Warning: date_sunset() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: date_sunset() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: date_sunset() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: date_sunset() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: date_sunset() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: date_sunset() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: date_sunset() expects parameter 6 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: date_sunset() expects parameter 6 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, object given in %s on line %d
+bool(false)
+
+Warning: date_sunset() expects parameter 6 to be double, object given in %s on line %d
+bool(false)
+
+--undefined var--
+string(5) "12:40"
+float(12.681%d)
+int(1218199253)
+
+--unset var--
+string(5) "12:40"
+float(12.681%d)
+int(1218199253)
+===DONE===
diff --git a/ext/date/tests/date_sunset_variation7.phpt b/ext/date/tests/date_sunset_variation7.phpt
new file mode 100644
index 000000000..0c64d969e
--- /dev/null
+++ b/ext/date/tests/date_sunset_variation7.phpt
@@ -0,0 +1,75 @@
+--TEST--
+Test date_sunset() function : usage variation - Checking sunrise for consecutive days in specific timezone
+--FILE--
+<?php
+/* Prototype : mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])
+ * Description: Returns time of sunrise for a given day and location
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing date_sunset() : usage variation ***\n";
+
+//Timezones with required data for date_sunrise
+$inputs = array (
+ //Timezone with Latitude, Longitude and GMT offset
+ "Pacific/Samoa" => array ("Latitude" => -14.24, "Longitude" => -170.72, "GMT" => -11),
+ "US/Alaska" => array ("Latitude" => 61, "Longitude" => -150 , "GMT" => -9),
+ "America/Chicago" => array ("Latitude" => 41.85, "Longitude" => -87.65 , "GMT" => -5),
+ "America/Montevideo" => array ("Latitude" => -34.88, "Longitude" => -56.18 , "GMT" => -3),
+ "Africa/Casablanca" => array ("Latitude" => 33.65, "Longitude" => "-7.58", "GMT" => 0),
+ "Europe/Moscow" => array ("Latitude" => 55.75, "Longitude" => 37.58, "GMT" => 4),
+ "Asia/Hong_Kong" => array ("Latitude" => 22.28, "Longitude" => 114.15 , "GMT" => 8),
+ "Australia/Brisbane" => array ("Latitude" => -27.46, "Longitude" => 153.2 , "GMT" => 10),
+ "Pacific/Wallis" => array ("Latitude" => -13.3, "Longitude" => -176.16, "GMT" => 12),
+);
+
+foreach($inputs as $timezone => $value) {
+ echo "\n--$timezone--\n";
+ date_default_timezone_set($timezone);
+ $time = mktime(8, 8, 8, 8, 11, 2008);
+ var_dump( date_sunset($time, SUNFUNCS_RET_STRING, $value["Latitude"], $value["Longitude"], 90, $value["GMT"] ));
+ $time = mktime(8, 8, 8, 8, 12, 2008);
+ var_dump( date_sunset($time, SUNFUNCS_RET_STRING, $value["Latitude"], $value["Longitude"], 90, $value["GMT"]) );
+}
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_sunset() : usage variation ***
+
+--Pacific/Samoa--
+string(5) "18:13"
+string(5) "18:13"
+
+--US/Alaska--
+string(5) "21:00"
+string(5) "20:57"
+
+--America/Chicago--
+string(5) "19:51"
+string(5) "19:50"
+
+--America/Montevideo--
+string(5) "18:08"
+string(5) "18:09"
+
+--Africa/Casablanca--
+string(5) "19:17"
+string(5) "19:16"
+
+--Europe/Moscow--
+string(5) "21:09"
+string(5) "21:07"
+
+--Asia/Hong_Kong--
+string(5) "18:55"
+string(5) "18:54"
+
+--Australia/Brisbane--
+string(5) "17:21"
+string(5) "17:21"
+
+--Pacific/Wallis--
+string(5) "17:36"
+string(5) "17:36"
+===DONE===
diff --git a/ext/date/tests/date_sunset_variation8.phpt b/ext/date/tests/date_sunset_variation8.phpt
new file mode 100644
index 000000000..9114e3bfa
--- /dev/null
+++ b/ext/date/tests/date_sunset_variation8.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Test date_sunset() function : usage variation - Checking with North and South poles when Sun is up and down all day
+--FILE--
+<?php
+/* Prototype : mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])
+ * Description: Returns time of sunrise for a given day and location
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing date_sunset() : usage variation ***\n";
+
+// GMT is zero for the timezone
+date_default_timezone_set("Africa/Casablanca");
+$time_date = array (
+
+ //Date at which Sun is up all day at North Pole
+ "12 Aug 2008" => mktime(8, 8, 8, 8, 12, 2008),
+
+ //Date at which Sun is up all day at South Pole
+ "12 Nov 2008" => mktime(8, 8, 8, 11, 12, 2008),
+);
+
+//Iterate over different date and time
+foreach( $time_date as $date => $time ){
+ echo "\n--$date--\n";
+ var_dump( date_sunset($time, SUNFUNCS_RET_STRING, 90, 0 ) );
+ var_dump( date_sunset($time, SUNFUNCS_RET_DOUBLE, 90, 0 ) );
+ var_dump( date_sunset($time, SUNFUNCS_RET_TIMESTAMP, 90, 0 ) );
+ var_dump( date_sunset($time, SUNFUNCS_RET_STRING, -90, 0 ) );
+ var_dump( date_sunset($time, SUNFUNCS_RET_DOUBLE, -90, 0 ) );
+ var_dump( date_sunset($time, SUNFUNCS_RET_TIMESTAMP, -90, 0 ) );
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing date_sunset() : usage variation ***
+
+--12 Aug 2008--
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+
+--12 Nov 2008--
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/date/tests/date_sunset_variation9.phpt b/ext/date/tests/date_sunset_variation9.phpt
new file mode 100644
index 000000000..59a4b584a
--- /dev/null
+++ b/ext/date/tests/date_sunset_variation9.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test date_sunset() function : usage variation - Passing high positive and negative float values to time argument.
+--FILE--
+<?php
+/* Prototype : mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])
+ * Description: Returns time of sunset for a given day and location
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing date_sunset() : usage variation ***\n";
+
+// GMT is zero for the timezone
+date_default_timezone_set("Asia/Calcutta");
+//Initialise the variables
+$latitude = 38.4;
+$longitude = -9;
+$zenith = 90;
+$gmt_offset = 1;
+
+echo "\n-- Testing date_sunset() function by passing float 12.3456789000e10 value to time --\n";
+$time = 12.3456789000e10;
+var_dump( date_sunset($time, SUNFUNCS_RET_STRING, $latitude, $longitude, $zenith, $gmt_offset) );
+var_dump( date_sunset($time, SUNFUNCS_RET_DOUBLE, $latitude, $longitude, $zenith, $gmt_offset) );
+var_dump( date_sunset($time, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $zenith, $gmt_offset) );
+
+echo "\n-- Testing date_sunset() function by passing float -12.3456789000e10 value to time --\n";
+$time = -12.3456789000e10;
+var_dump( date_sunset($time, SUNFUNCS_RET_STRING, $latitude, $longitude, $zenith, $gmt_offset) );
+var_dump( date_sunset($time, SUNFUNCS_RET_DOUBLE, $latitude, $longitude, $zenith, $gmt_offset) );
+var_dump( date_sunset($time, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $zenith, $gmt_offset) );
+
+?>
+===DONE===
+--EXPECTREGEX--
+\*\*\* Testing date_sunset\(\) : usage variation \*\*\*
+
+-- Testing date_sunset\(\) function by passing float 12.3456789000e10 value to time --
+string\(5\) "(19:49|19:28)"
+float\((19.830[0-9]*|19.830[0-9]*|19.480[0-9]*)\)
+int\((-1097212211|123456853728)\)
+
+-- Testing date_sunset\(\) function by passing float -12.3456789000e10 value to time --
+string\(5\) "(19:03|18:12|18:48)"
+float\((19.056[0-9]*|18.213[0-9]*|18.808[0-9]*)\)
+int\((1097345002|-2147410031|-123456723090)\)
+===DONE===
diff --git a/ext/date/tests/getdate_basic.phpt b/ext/date/tests/getdate_basic.phpt
new file mode 100644
index 000000000..5d6cc815d
--- /dev/null
+++ b/ext/date/tests/getdate_basic.phpt
@@ -0,0 +1,76 @@
+--TEST--
+Test getdate() function : basic functionality
+--FILE--
+<?php
+/* Prototype : array getdate([int timestamp])
+ * Description: Get date/time information
+ * Source code: ext/date/php_date.c
+ */
+
+echo "*** Testing getdate() : basic functionality ***\n";
+
+//Set the default time zone
+date_default_timezone_set("Asia/Calcutta");
+
+// Initialise all required variables
+$timestamp = 10;
+
+// Calling getdate() with all possible arguments
+var_dump( getdate($timestamp) );
+
+// Calling getdate() with mandatory arguments
+var_dump( getdate() );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing getdate() : basic functionality ***
+array(11) {
+ ["seconds"]=>
+ int(10)
+ ["minutes"]=>
+ int(30)
+ ["hours"]=>
+ int(5)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(10)
+}
+array(11) {
+ ["seconds"]=>
+ int(%d)
+ ["minutes"]=>
+ int(%d)
+ ["hours"]=>
+ int(%d)
+ ["mday"]=>
+ int(%d)
+ ["wday"]=>
+ int(%d)
+ ["mon"]=>
+ int(%d)
+ ["year"]=>
+ int(%d)
+ ["yday"]=>
+ int(%d)
+ ["weekday"]=>
+ string(%d) %s
+ ["month"]=>
+ string(%d) %s
+ [0]=>
+ int(%d)
+}
+===DONE===
diff --git a/ext/date/tests/getdate_error.phpt b/ext/date/tests/getdate_error.phpt
new file mode 100644
index 000000000..149d06695
--- /dev/null
+++ b/ext/date/tests/getdate_error.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Test getdate() function : error conditions
+--FILE--
+<?php
+/* Prototype : array getdate([int timestamp])
+ * Description: Get date/time information
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing getdate() : error conditions ***\n";
+
+//Set the default time zone
+date_default_timezone_set("America/Chicago");
+
+//Test getdate with one more than the expected number of arguments
+echo "\n-- Testing getdate() function with more than expected no. of arguments --\n";
+$timestamp = 10;
+$extra_arg = 10;
+var_dump( getdate($timestamp, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing getdate() : error conditions ***
+
+-- Testing getdate() function with more than expected no. of arguments --
+
+Warning: getdate() expects at most 1 parameter, 2 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/getdate_variation1.phpt b/ext/date/tests/getdate_variation1.phpt
new file mode 100644
index 000000000..4935dfe8e
--- /dev/null
+++ b/ext/date/tests/getdate_variation1.phpt
@@ -0,0 +1,444 @@
+--TEST--
+Test getdate() function : usage variation - Passing unexpected values to first argument timestamp.
+--FILE--
+<?php
+/* Prototype : array getdate([int timestamp])
+ * Description: Get date/time information
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing getdate() : usage variation ***\n";
+
+//Set the default time zone
+date_default_timezone_set("Asia/Calcutta");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( getdate($value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+
+*** Testing getdate() : usage variation ***
+
+--float 10.5--
+array(11) {
+ ["seconds"]=>
+ int(10)
+ ["minutes"]=>
+ int(30)
+ ["hours"]=>
+ int(5)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(10)
+}
+
+--float -10.5--
+array(11) {
+ ["seconds"]=>
+ int(50)
+ ["minutes"]=>
+ int(29)
+ ["hours"]=>
+ int(5)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(-10)
+}
+
+--float .5--
+array(11) {
+ ["seconds"]=>
+ int(0)
+ ["minutes"]=>
+ int(30)
+ ["hours"]=>
+ int(5)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(0)
+}
+
+--empty array--
+
+Warning: getdate() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: getdate() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: getdate() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: getdate() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+array(11) {
+ ["seconds"]=>
+ int(0)
+ ["minutes"]=>
+ int(30)
+ ["hours"]=>
+ int(5)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(0)
+}
+
+--lowercase null--
+array(11) {
+ ["seconds"]=>
+ int(0)
+ ["minutes"]=>
+ int(30)
+ ["hours"]=>
+ int(5)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(0)
+}
+
+--lowercase true--
+array(11) {
+ ["seconds"]=>
+ int(1)
+ ["minutes"]=>
+ int(30)
+ ["hours"]=>
+ int(5)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(1)
+}
+
+--lowercase false--
+array(11) {
+ ["seconds"]=>
+ int(0)
+ ["minutes"]=>
+ int(30)
+ ["hours"]=>
+ int(5)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(0)
+}
+
+--uppercase TRUE--
+array(11) {
+ ["seconds"]=>
+ int(1)
+ ["minutes"]=>
+ int(30)
+ ["hours"]=>
+ int(5)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(1)
+}
+
+--uppercase FALSE--
+array(11) {
+ ["seconds"]=>
+ int(0)
+ ["minutes"]=>
+ int(30)
+ ["hours"]=>
+ int(5)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(0)
+}
+
+--empty string DQ--
+
+Warning: getdate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: getdate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: getdate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: getdate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: getdate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: getdate() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: getdate() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: getdate() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+--undefined var--
+array(11) {
+ ["seconds"]=>
+ int(0)
+ ["minutes"]=>
+ int(30)
+ ["hours"]=>
+ int(5)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(0)
+}
+
+--unset var--
+array(11) {
+ ["seconds"]=>
+ int(0)
+ ["minutes"]=>
+ int(30)
+ ["hours"]=>
+ int(5)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(0)
+}
+===DONE===
diff --git a/ext/date/tests/getdate_variation2.phpt b/ext/date/tests/getdate_variation2.phpt
new file mode 100644
index 000000000..f987d2134
--- /dev/null
+++ b/ext/date/tests/getdate_variation2.phpt
@@ -0,0 +1,114 @@
+--TEST--
+Test getdate() function : usage variation - Passing octal timestamp values
+--FILE--
+<?php
+/* Prototype : array getdate([int timestamp])
+ * Description: Get date/time information
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing getdate() : usage variation ***\n";
+
+//Set the default time zone
+date_default_timezone_set("Asia/Calcutta");
+
+//array of values to iterate over
+$inputs = array(
+
+ //octal values
+ 'octal 05' => 05,
+ 'octal 010' => 010,
+ 'octal -010' => -010,
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( getdate($value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing getdate() : usage variation ***
+
+--octal 05--
+array(11) {
+ ["seconds"]=>
+ int(5)
+ ["minutes"]=>
+ int(30)
+ ["hours"]=>
+ int(5)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(5)
+}
+
+--octal 010--
+array(11) {
+ ["seconds"]=>
+ int(8)
+ ["minutes"]=>
+ int(30)
+ ["hours"]=>
+ int(5)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(8)
+}
+
+--octal -010--
+array(11) {
+ ["seconds"]=>
+ int(52)
+ ["minutes"]=>
+ int(29)
+ ["hours"]=>
+ int(5)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(-8)
+}
+===DONE===
diff --git a/ext/date/tests/getdate_variation3.phpt b/ext/date/tests/getdate_variation3.phpt
new file mode 100644
index 000000000..f7d686320
--- /dev/null
+++ b/ext/date/tests/getdate_variation3.phpt
@@ -0,0 +1,114 @@
+--TEST--
+Test getdate() function : usage variation - Passing hexadcimal timestamp values
+--FILE--
+<?php
+/* Prototype : array getdate([int timestamp])
+ * Description: Get date/time information
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing getdate() : usage variation ***\n";
+
+//Set the default time zone
+date_default_timezone_set("Asia/Calcutta");
+
+//array of values to iterate over
+$inputs = array(
+
+ //octal values
+ 'hexadcimal 0x5' => 0x5,
+ 'hexadcimal 0xCAFE' => 0xCAFE,
+ 'octal -0xCAFE' => -0xCAFE,
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( getdate($value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing getdate() : usage variation ***
+
+--hexadcimal 0x5--
+array(11) {
+ ["seconds"]=>
+ int(5)
+ ["minutes"]=>
+ int(30)
+ ["hours"]=>
+ int(5)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(5)
+}
+
+--hexadcimal 0xCAFE--
+array(11) {
+ ["seconds"]=>
+ int(6)
+ ["minutes"]=>
+ int(56)
+ ["hours"]=>
+ int(19)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(51966)
+}
+
+--octal -0xCAFE--
+array(11) {
+ ["seconds"]=>
+ int(54)
+ ["minutes"]=>
+ int(3)
+ ["hours"]=>
+ int(15)
+ ["mday"]=>
+ int(31)
+ ["wday"]=>
+ int(3)
+ ["mon"]=>
+ int(12)
+ ["year"]=>
+ int(1969)
+ ["yday"]=>
+ int(364)
+ ["weekday"]=>
+ string(9) "Wednesday"
+ ["month"]=>
+ string(8) "December"
+ [0]=>
+ int(-51966)
+}
+===DONE===
diff --git a/ext/date/tests/getdate_variation4.phpt b/ext/date/tests/getdate_variation4.phpt
new file mode 100644
index 000000000..92719ac65
--- /dev/null
+++ b/ext/date/tests/getdate_variation4.phpt
@@ -0,0 +1,141 @@
+--TEST--
+Test getdate() function : usage variation - Verifyig by supplying year-wise sample time stamps since Unix epoch time
+--FILE--
+<?php
+/* Prototype : array getdate([int timestamp])
+ * Description: Get date/time information
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing getdate() : usage variation ***\n";
+
+//Set the default time zone
+date_default_timezone_set("Asia/Calcutta");
+
+//array of values to iterate over
+$inputs = array(
+
+ //Year wise time stamps
+ '01 Jan 1970' => 0,
+ '01 Jan 1971' => 31536000,
+ '01 Jan 1972' => 63072000,
+ '01 Jan 1973' => 94694400,
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( getdate($value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing getdate() : usage variation ***
+
+--01 Jan 1970--
+array(11) {
+ ["seconds"]=>
+ int(0)
+ ["minutes"]=>
+ int(30)
+ ["hours"]=>
+ int(5)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(0)
+}
+
+--01 Jan 1971--
+array(11) {
+ ["seconds"]=>
+ int(0)
+ ["minutes"]=>
+ int(30)
+ ["hours"]=>
+ int(5)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(5)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1971)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(6) "Friday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(31536000)
+}
+
+--01 Jan 1972--
+array(11) {
+ ["seconds"]=>
+ int(0)
+ ["minutes"]=>
+ int(30)
+ ["hours"]=>
+ int(5)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(6)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1972)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Saturday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(63072000)
+}
+
+--01 Jan 1973--
+array(11) {
+ ["seconds"]=>
+ int(0)
+ ["minutes"]=>
+ int(30)
+ ["hours"]=>
+ int(5)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(1)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1973)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(6) "Monday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(94694400)
+}
+===DONE===
diff --git a/ext/date/tests/getdate_variation5.phpt b/ext/date/tests/getdate_variation5.phpt
new file mode 100644
index 000000000..e4524a865
--- /dev/null
+++ b/ext/date/tests/getdate_variation5.phpt
@@ -0,0 +1,223 @@
+--TEST--
+Test getdate() function : usage variation - Verifyig with different timezones on Unix epoch timestamp
+--FILE--
+<?php
+/* Prototype : array getdate([int timestamp])
+ * Description: Get date/time information
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing getdate() : usage variation ***\n";
+
+//Timezones with required data for date_sunrise
+$inputs = array (
+ //GMT-11
+ "Pacific/Samoa",
+ //GMT-9
+ "US/Alaska",
+ //GMT-0
+ "Africa/Casablanca",
+ //GMT+4
+ "Europe/Moscow",
+ //GMT+8
+ "Asia/Hong_Kong",
+ //GMT+10
+ "Australia/Brisbane",
+ //GMT+12
+ "Pacific/Wallis",
+);
+
+// loop through each element of the array for timestamp
+foreach($inputs as $timezone) {
+ echo "\n--$timezone--\n";
+ date_default_timezone_set($timezone);
+ var_dump( getdate(0) );
+};
+?>
+===DONE===
+--EXPECTF--
+*** Testing getdate() : usage variation ***
+
+--Pacific/Samoa--
+array(11) {
+ ["seconds"]=>
+ int(0)
+ ["minutes"]=>
+ int(0)
+ ["hours"]=>
+ int(13)
+ ["mday"]=>
+ int(31)
+ ["wday"]=>
+ int(3)
+ ["mon"]=>
+ int(12)
+ ["year"]=>
+ int(1969)
+ ["yday"]=>
+ int(364)
+ ["weekday"]=>
+ string(9) "Wednesday"
+ ["month"]=>
+ string(8) "December"
+ [0]=>
+ int(0)
+}
+
+--US/Alaska--
+array(11) {
+ ["seconds"]=>
+ int(0)
+ ["minutes"]=>
+ int(0)
+ ["hours"]=>
+ int(14)
+ ["mday"]=>
+ int(31)
+ ["wday"]=>
+ int(3)
+ ["mon"]=>
+ int(12)
+ ["year"]=>
+ int(1969)
+ ["yday"]=>
+ int(364)
+ ["weekday"]=>
+ string(9) "Wednesday"
+ ["month"]=>
+ string(8) "December"
+ [0]=>
+ int(0)
+}
+
+--Africa/Casablanca--
+array(11) {
+ ["seconds"]=>
+ int(0)
+ ["minutes"]=>
+ int(0)
+ ["hours"]=>
+ int(0)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(0)
+}
+
+--Europe/Moscow--
+array(11) {
+ ["seconds"]=>
+ int(0)
+ ["minutes"]=>
+ int(0)
+ ["hours"]=>
+ int(3)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(0)
+}
+
+--Asia/Hong_Kong--
+array(11) {
+ ["seconds"]=>
+ int(0)
+ ["minutes"]=>
+ int(0)
+ ["hours"]=>
+ int(8)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(0)
+}
+
+--Australia/Brisbane--
+array(11) {
+ ["seconds"]=>
+ int(0)
+ ["minutes"]=>
+ int(0)
+ ["hours"]=>
+ int(10)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(0)
+}
+
+--Pacific/Wallis--
+array(11) {
+ ["seconds"]=>
+ int(0)
+ ["minutes"]=>
+ int(0)
+ ["hours"]=>
+ int(12)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(0)
+}
+===DONE===
diff --git a/ext/date/tests/getdate_variation6.phpt b/ext/date/tests/getdate_variation6.phpt
new file mode 100644
index 000000000..5c03a3bb7
--- /dev/null
+++ b/ext/date/tests/getdate_variation6.phpt
@@ -0,0 +1,109 @@
+--TEST--
+Test getdate() function : usage variation - Passing strings containing numbers
+--FILE--
+<?php
+/* Prototype : array getdate([int timestamp])
+ * Description: Get date/time information
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing getdate() : usage variation ***\n";
+
+date_default_timezone_set("Asia/Calcutta");
+
+//Timezones with required data for date_sunrise
+$inputs = array (
+ 'String 0' => '0',
+ 'String 10.5' => "10.5",
+ 'String -10.5' => '-10.5',
+);
+
+// loop through each element of the array for timestamp
+foreach($inputs as $key => $value) {
+ echo "\n--$key--\n";
+ var_dump( getdate($value) );
+};
+?>
+===DONE===
+--EXPECTF--
+*** Testing getdate() : usage variation ***
+
+--String 0--
+array(11) {
+ ["seconds"]=>
+ int(0)
+ ["minutes"]=>
+ int(30)
+ ["hours"]=>
+ int(5)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(0)
+}
+
+--String 10.5--
+array(11) {
+ ["seconds"]=>
+ int(10)
+ ["minutes"]=>
+ int(30)
+ ["hours"]=>
+ int(5)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(10)
+}
+
+--String -10.5--
+array(11) {
+ ["seconds"]=>
+ int(50)
+ ["minutes"]=>
+ int(29)
+ ["hours"]=>
+ int(5)
+ ["mday"]=>
+ int(1)
+ ["wday"]=>
+ int(4)
+ ["mon"]=>
+ int(1)
+ ["year"]=>
+ int(1970)
+ ["yday"]=>
+ int(0)
+ ["weekday"]=>
+ string(8) "Thursday"
+ ["month"]=>
+ string(7) "January"
+ [0]=>
+ int(-10)
+}
+===DONE===
diff --git a/ext/date/tests/getdate_variation7.phpt b/ext/date/tests/getdate_variation7.phpt
new file mode 100644
index 000000000..5af2dd53f
--- /dev/null
+++ b/ext/date/tests/getdate_variation7.phpt
@@ -0,0 +1,78 @@
+--TEST--
+Test getdate() function : usage variation - Passing high positive and negative float values to timestamp.
+--FILE--
+<?php
+/* Prototype : array getdate([int timestamp])
+ * Description: Get date/time information
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing getdate() : usage variation ***\n";
+date_default_timezone_set("Asia/Calcutta");
+
+echo "\n-- Testing getdate() function by passing float 12.3456789000e10 value to timestamp --\n";
+$timestamp = 12.3456789000e10;
+var_dump( getdate($timestamp) );
+
+echo "\n-- Testing getdate() function by passing float -12.3456789000e10 value to timestamp --\n";
+$timestamp = -12.3456789000e10;
+var_dump( getdate($timestamp) );
+?>
+===DONE===
+--EXPECTREGEX--
+
+\*\*\* Testing getdate\(\) : usage variation \*\*\*
+
+-- Testing getdate\(\) function by passing float 12.3456789000e10 value to timestamp --
+array\(11\) {
+ \["seconds"\]=>
+ int\((36|0)\)
+ \["minutes"\]=>
+ int\((43|0)\)
+ \["hours"\]=>
+ int\((10|6)\)
+ \["mday"\]=>
+ int\((26|11)\)
+ \["wday"\]=>
+ int\((2|6)\)
+ \["mon"\]=>
+ int\(3\)
+ \["year"\]=>
+ int\((1935|5882)\)
+ \["yday"\]=>
+ int\((84|69)\)
+ \["weekday"\]=>
+ string\((7|8)\) "(Tuesday|Saturday)"
+ \["month"\]=>
+ string\(5\) "March"
+ \[0\]=>
+ int\((-1097262584|123456789000)\)
+}
+
+-- Testing getdate\(\) function by passing float -12.3456789000e10 value to timestamp --
+array\(11\) {
+ \["seconds"\]=>
+ int\((44|12|20)\)
+ \["minutes"\]=>
+ int\((39|23)\)
+ \["hours"\]=>
+ int\((0|2|5)\)
+ \["mday"\]=>
+ int\((9|14|23)\)
+ \["wday"\]=>
+ int\((6|-4)\)
+ \["mon"\]=>
+ int\((10|12)\)
+ \["year"\]=>
+ int\((2004|1901|-1943)\)
+ \["yday"\]=>
+ int\((282|347|295)\)
+ \["weekday"\]=>
+ string\((8|7)\) "(Saturday|Unknown)"
+ \["month"\]=>
+ string\((7|8)\) "(October|December)"
+ \[0\]=>
+ int\((1097262584|-2147483648|-123456789000)\)
+}
+===DONE===
diff --git a/ext/date/tests/gettimeofday_basic.phpt b/ext/date/tests/gettimeofday_basic.phpt
new file mode 100644
index 000000000..fe04f015e
--- /dev/null
+++ b/ext/date/tests/gettimeofday_basic.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Test gettimeofday() function : basic functionality
+--FILE--
+<?php
+/* Prototype : array gettimeofday([bool get_as_float])
+ * Description: Returns the current time as array
+ * Source code: ext/standard/microtime.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gettimeofday() : basic functionality ***\n";
+
+date_default_timezone_set("Asia/Calcutta");
+
+// Initialise all required variables
+$get_as_float = true;
+
+// Calling gettimeofday() with all possible arguments
+var_dump( gettimeofday($get_as_float) );
+
+// Calling gettimeofday() with mandatory arguments
+var_dump( gettimeofday() );
+
+// Initialise all required variables
+$get_as_float = false;
+
+// Calling gettimeofday() with all possible arguments
+var_dump( gettimeofday($get_as_float) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gettimeofday() : basic functionality ***
+float(%f)
+array(4) {
+ ["sec"]=>
+ int(%d)
+ ["usec"]=>
+ int(%d)
+ ["minuteswest"]=>
+ int(-330)
+ ["dsttime"]=>
+ int(0)
+}
+array(4) {
+ ["sec"]=>
+ int(%d)
+ ["usec"]=>
+ int(%d)
+ ["minuteswest"]=>
+ int(-330)
+ ["dsttime"]=>
+ int(0)
+}
+===DONE===
diff --git a/ext/date/tests/gettimeofday_error.phpt b/ext/date/tests/gettimeofday_error.phpt
new file mode 100644
index 000000000..558a381fe
--- /dev/null
+++ b/ext/date/tests/gettimeofday_error.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Test gettimeofday() function : error conditions
+--FILE--
+<?php
+/* Prototype : array gettimeofday([bool get_as_float])
+ * Description: Returns the current time as array
+ * Source code: ext/standard/microtime.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gettimeofday() : error conditions ***\n";
+
+
+//Test gettimeofday with one more than the expected number of arguments
+echo "\n-- Testing gettimeofday() function with more than expected no. of arguments --\n";
+$get_as_float = true;
+$extra_arg = 10;
+var_dump( gettimeofday($get_as_float, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gettimeofday() : error conditions ***
+
+-- Testing gettimeofday() function with more than expected no. of arguments --
+
+Warning: gettimeofday() expects at most 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
diff --git a/ext/date/tests/gettimeofday_variation1.phpt b/ext/date/tests/gettimeofday_variation1.phpt
new file mode 100644
index 000000000..f494a25b5
--- /dev/null
+++ b/ext/date/tests/gettimeofday_variation1.phpt
@@ -0,0 +1,284 @@
+--TEST--
+Test gettimeofday() function : usage variation - Passing unexpected values to get_as_float argument
+--FILE--
+<?php
+/* Prototype : array gettimeofday([bool get_as_float])
+ * Description: Returns the current time as array
+ * Source code: ext/standard/microtime.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gettimeofday() : usage variation ***\n";
+
+date_default_timezone_set("Asia/Calcutta");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for get_as_float
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gettimeofday($value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gettimeofday() : usage variation ***
+
+--int 0--
+array(4) {
+ ["sec"]=>
+ int(%d)
+ ["usec"]=>
+ int(%d)
+ ["minuteswest"]=>
+ int(-330)
+ ["dsttime"]=>
+ int(0)
+}
+
+--int 1--
+float(%f)
+
+--int 12345--
+float(%f)
+
+--int -12345--
+float(%f)
+
+--float 10.5--
+float(%f)
+
+--float -10.5--
+float(%f)
+
+--float 12.3456789000e10--
+float(%f)
+
+--float -12.3456789000e10--
+float(%f)
+
+--float .5--
+float(%f)
+
+--empty array--
+
+Warning: gettimeofday() expects parameter 1 to be boolean, array given in %s on line %d
+NULL
+
+--int indexed array--
+
+Warning: gettimeofday() expects parameter 1 to be boolean, array given in %s on line %d
+NULL
+
+--associative array--
+
+Warning: gettimeofday() expects parameter 1 to be boolean, array given in %s on line %d
+NULL
+
+--nested arrays--
+
+Warning: gettimeofday() expects parameter 1 to be boolean, array given in %s on line %d
+NULL
+
+--uppercase NULL--
+array(4) {
+ ["sec"]=>
+ int(%d)
+ ["usec"]=>
+ int(%d)
+ ["minuteswest"]=>
+ int(-330)
+ ["dsttime"]=>
+ int(0)
+}
+
+--lowercase null--
+array(4) {
+ ["sec"]=>
+ int(%d)
+ ["usec"]=>
+ int(%d)
+ ["minuteswest"]=>
+ int(-330)
+ ["dsttime"]=>
+ int(0)
+}
+
+--lowercase true--
+float(%f)
+
+--lowercase false--
+array(4) {
+ ["sec"]=>
+ int(%d)
+ ["usec"]=>
+ int(%d)
+ ["minuteswest"]=>
+ int(-330)
+ ["dsttime"]=>
+ int(0)
+}
+
+--uppercase TRUE--
+float(%f)
+
+--uppercase FALSE--
+array(4) {
+ ["sec"]=>
+ int(%d)
+ ["usec"]=>
+ int(%d)
+ ["minuteswest"]=>
+ int(-330)
+ ["dsttime"]=>
+ int(0)
+}
+
+--empty string DQ--
+array(4) {
+ ["sec"]=>
+ int(%d)
+ ["usec"]=>
+ int(%d)
+ ["minuteswest"]=>
+ int(-330)
+ ["dsttime"]=>
+ int(0)
+}
+
+--empty string SQ--
+array(4) {
+ ["sec"]=>
+ int(%d)
+ ["usec"]=>
+ int(%d)
+ ["minuteswest"]=>
+ int(-330)
+ ["dsttime"]=>
+ int(0)
+}
+
+--string DQ--
+float(%f)
+
+--string SQ--
+float(%f)
+
+--mixed case string--
+float(%f)
+
+--heredoc--
+float(%f)
+
+--instance of classWithToString--
+
+Warning: gettimeofday() expects parameter 1 to be boolean, object given in %s on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: gettimeofday() expects parameter 1 to be boolean, object given in %s on line %d
+NULL
+
+--undefined var--
+array(4) {
+ ["sec"]=>
+ int(%d)
+ ["usec"]=>
+ int(%d)
+ ["minuteswest"]=>
+ int(-330)
+ ["dsttime"]=>
+ int(0)
+}
+
+--unset var--
+array(4) {
+ ["sec"]=>
+ int(%d)
+ ["usec"]=>
+ int(%d)
+ ["minuteswest"]=>
+ int(-330)
+ ["dsttime"]=>
+ int(0)
+}
+===DONE===
diff --git a/ext/date/tests/gmdate_basic.phpt b/ext/date/tests/gmdate_basic.phpt
new file mode 100644
index 000000000..ae036cacb
--- /dev/null
+++ b/ext/date/tests/gmdate_basic.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Test gmdate() function : basic functionality
+--FILE--
+<?php
+/* Prototype : string gmdate(string format [, long timestamp])
+ * Description: Format a GMT date/time
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmdate() : basic functionality ***\n";
+
+// Initialise all required variables
+date_default_timezone_set('UTC');
+$format = DATE_ISO8601;
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+// Calling gmdate() with all possible arguments
+var_dump( gmdate($format, $timestamp) );
+
+// Calling gmdate() with mandatory arguments
+var_dump( gmdate($format) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmdate() : basic functionality ***
+string(24) "2008-08-08T08:08:08+0000"
+string(%d) "%s"
+===DONE===
diff --git a/ext/date/tests/gmdate_error.phpt b/ext/date/tests/gmdate_error.phpt
new file mode 100644
index 000000000..fbee07126
--- /dev/null
+++ b/ext/date/tests/gmdate_error.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Test gmdate() function : error conditions
+--FILE--
+<?php
+/* Prototype : string gmdate(string format [, long timestamp])
+ * Description: Format a GMT date/time
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmdate() : error conditions ***\n";
+
+// Initialise all required variables
+date_default_timezone_set('UTC');
+$format = DATE_ISO8601;
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+// Zero arguments
+echo "\n-- Testing gmdate() function with Zero arguments --\n";
+var_dump( gmdate() );
+
+//Test gmdate with one more than the expected number of arguments
+echo "\n-- Testing gmdate() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( gmdate($format, $timestamp, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmdate() : error conditions ***
+
+-- Testing gmdate() function with Zero arguments --
+
+Warning: gmdate() expects at least 1 parameter, 0 given in %s on line %d
+bool(false)
+
+-- Testing gmdate() function with more than expected no. of arguments --
+
+Warning: gmdate() expects at most 2 parameters, 3 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/gmdate_variation1.phpt b/ext/date/tests/gmdate_variation1.phpt
new file mode 100644
index 000000000..f6850ccd2
--- /dev/null
+++ b/ext/date/tests/gmdate_variation1.phpt
@@ -0,0 +1,221 @@
+--TEST--
+Test gmdate() function : usage variation - Passing unexpected values to format argument.
+--FILE--
+<?php
+/* Prototype : string gmdate(string format [, long timestamp])
+ * Description: Format a GMT date/time
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmdate() : usage variation ***\n";
+
+// Initialise all required variables
+date_default_timezone_set('UTC');
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for format
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmdate($value, $timestamp) );
+ var_dump( gmdate($value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmdate() : usage variation ***
+
+--int 0--
+string(1) "0"
+string(1) "0"
+
+--int 1--
+string(1) "1"
+string(1) "1"
+
+--int 12345--
+string(5) "12345"
+string(5) "12345"
+
+--int -12345--
+string(6) "-12345"
+string(6) "-12345"
+
+--float 10.5--
+string(4) "10.5"
+string(4) "10.5"
+
+--float -10.5--
+string(5) "-10.5"
+string(5) "-10.5"
+
+--float 12.3456789000e10--
+string(12) "123456789000"
+string(12) "123456789000"
+
+--float -12.3456789000e10--
+string(13) "-123456789000"
+string(13) "-123456789000"
+
+--float .5--
+string(3) "0.5"
+string(3) "0.5"
+
+--empty array--
+
+Warning: gmdate() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Warning: gmdate() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: gmdate() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Warning: gmdate() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: gmdate() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Warning: gmdate() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: gmdate() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Warning: gmdate() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+string(0) ""
+string(0) ""
+
+--lowercase null--
+string(0) ""
+string(0) ""
+
+--lowercase true--
+string(1) "1"
+string(1) "1"
+
+--lowercase false--
+string(0) ""
+string(0) ""
+
+--uppercase TRUE--
+string(1) "1"
+string(1) "1"
+
+--uppercase FALSE--
+string(0) ""
+string(0) ""
+
+--empty string DQ--
+string(0) ""
+string(0) ""
+
+--empty string SQ--
+string(0) ""
+string(0) ""
+
+--instance of classWithToString--
+string(53) "CFridayam0808 AM 2008b8UTC2008-08-08T08:08:08+00:0031"
+string(%d) "%s"
+
+--instance of classWithoutToString--
+
+Warning: gmdate() expects parameter 1 to be string, object given in %s on line %d
+bool(false)
+
+Warning: gmdate() expects parameter 1 to be string, object given in %s on line %d
+bool(false)
+
+--undefined var--
+string(0) ""
+string(0) ""
+
+--unset var--
+string(0) ""
+string(0) ""
+===DONE===
diff --git a/ext/date/tests/gmdate_variation10.phpt b/ext/date/tests/gmdate_variation10.phpt
new file mode 100644
index 000000000..d5298368d
--- /dev/null
+++ b/ext/date/tests/gmdate_variation10.phpt
@@ -0,0 +1,69 @@
+--TEST--
+Test gmdate() function : usage variation - Passing Timezone format options to format argument.
+--FILE--
+<?php
+/* Prototype : string gmdate(string format [, long timestamp])
+ * Description: Format a GMT date/time
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmdate() : usage variation ***\n";
+
+// Initialise all required variables
+date_default_timezone_set('Asia/Calcutta');
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+echo "\n-- Testing gmdate() function with Timezone identifier format --\n";
+var_dump( gmdate('e') );
+var_dump( gmdate('e', $timestamp) );
+
+echo "\n-- Testing gmdate() function with checking whether date is in daylight saving time format --\n";
+var_dump( gmdate('I') );
+var_dump( gmdate('I', $timestamp) );
+
+echo "\n-- Testing gmdate() function with difference to GMT in hours format --\n";
+var_dump( gmdate('O') );
+var_dump( gmdate('O', $timestamp) );
+
+echo "\n-- Testing gmdate() function with Difference to GMT in hours using colon as separator format --\n";
+var_dump( gmdate('P') );
+var_dump( gmdate('P', $timestamp) );
+
+echo "\n-- Testing gmdate() function with timezone abbreviation format --\n";
+var_dump( gmdate('T') );
+var_dump( gmdate('T', $timestamp) );
+
+echo "\n-- Testing gmdate() function with timezone offset format --\n";
+var_dump( gmdate('T') );
+var_dump( gmdate('T', $timestamp) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmdate() : usage variation ***
+
+-- Testing gmdate() function with Timezone identifier format --
+string(3) "UTC"
+string(3) "UTC"
+
+-- Testing gmdate() function with checking whether date is in daylight saving time format --
+string(1) "%d"
+string(1) "%d"
+
+-- Testing gmdate() function with difference to GMT in hours format --
+string(5) "+0000"
+string(5) "+0000"
+
+-- Testing gmdate() function with Difference to GMT in hours using colon as separator format --
+string(6) "+00:00"
+string(6) "+00:00"
+
+-- Testing gmdate() function with timezone abbreviation format --
+string(3) "GMT"
+string(3) "GMT"
+
+-- Testing gmdate() function with timezone offset format --
+string(3) "GMT"
+string(3) "GMT"
+===DONE===
diff --git a/ext/date/tests/gmdate_variation11.phpt b/ext/date/tests/gmdate_variation11.phpt
new file mode 100644
index 000000000..a9520907c
--- /dev/null
+++ b/ext/date/tests/gmdate_variation11.phpt
@@ -0,0 +1,45 @@
+--TEST--
+Test gmdate() function : usage variation - Passing Full Date/Time format options to format argument.
+--FILE--
+<?php
+/* Prototype : string gmdate(string format [, long timestamp])
+ * Description: Format a GMT date/time
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmdate() : usage variation ***\n";
+
+// Initialise all required variables
+date_default_timezone_set('UTC');
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+echo "\n-- Testing gmdate() function with ISO 8601 date format --\n";
+var_dump( gmdate('c') );
+var_dump( gmdate('c', $timestamp) );
+
+echo "\n-- Testing gmdate() function with RFC 2822 date format --\n";
+var_dump( gmdate('r') );
+var_dump( gmdate('r', $timestamp) );
+
+echo "\n-- Testing gmdate() function with seconds since Unix Epoch format --\n";
+var_dump( gmdate('U') );
+var_dump( gmdate('U', $timestamp) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmdate() : usage variation ***
+
+-- Testing gmdate() function with ISO 8601 date format --
+string(%d) "%s"
+string(25) "2008-08-08T08:08:08+00:00"
+
+-- Testing gmdate() function with RFC 2822 date format --
+string(%d) "%s"
+string(31) "Fri, 08 Aug 2008 08:08:08 +0000"
+
+-- Testing gmdate() function with seconds since Unix Epoch format --
+string(%d) "%d"
+string(10) "1218182888"
+===DONE===
diff --git a/ext/date/tests/gmdate_variation12.phpt b/ext/date/tests/gmdate_variation12.phpt
new file mode 100644
index 000000000..8f0146f38
--- /dev/null
+++ b/ext/date/tests/gmdate_variation12.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Test gmdate() function : usage variation - Valid and invalid range of timestamp.
+--FILE--
+<?php
+/* Prototype : string gmdate(string format [, long timestamp])
+ * Description: Format a GMT date/time
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmdate() : usage variation ***\n";
+
+// Initialise all required variables
+date_default_timezone_set('UTC');
+
+$timestamp = mktime(20, 45, 54, 12, 13, 1901);
+echo "\n-- Testing gmdate() function with minimum range of timestamp --\n";
+var_dump( gmdate(DATE_ISO8601, $timestamp) );
+
+$timestamp = mktime(20, 45, 50, 12, 13, 1901);
+echo "\n-- Testing gmdate() function with less than the range of timestamp --\n";
+var_dump( gmdate(DATE_ISO8601, $timestamp) );
+
+echo "\n-- Testing gmdate() function with maximum range of timestamp --\n";
+$timestamp = mktime(03, 14, 07, 1, 19, 2038);
+var_dump( gmdate(DATE_ISO8601, $timestamp) );
+
+echo "\n-- Testing gmdate() function with greater than the range of timestamp --\n";
+$timestamp = mktime(03, 14, 10, 1, 19, 2038);
+var_dump( gmdate(DATE_ISO8601, $timestamp) );
+
+?>
+===DONE===
+--EXPECTREGEX--
+\*\*\* Testing gmdate\(\) : usage variation \*\*\*
+
+-- Testing gmdate\(\) function with minimum range of timestamp --
+string\(24\) "1901-12-13T20:45:54\+0000"
+
+-- Testing gmdate\(\) function with less than the range of timestamp --
+string\(24\) "(1970-01-01T00:00:00\+0000|1901-12-13T20:45:50\+0000)"
+
+-- Testing gmdate\(\) function with maximum range of timestamp --
+string\(24\) "2038-01-19T03:14:07\+0000"
+
+-- Testing gmdate\(\) function with greater than the range of timestamp --
+string\(24\) "(1970-01-01T00:00:00\+0000|2038-01-19T03:14:10\+0000)"
+===DONE===
diff --git a/ext/date/tests/gmdate_variation13.phpt b/ext/date/tests/gmdate_variation13.phpt
new file mode 100644
index 000000000..adc03919e
--- /dev/null
+++ b/ext/date/tests/gmdate_variation13.phpt
@@ -0,0 +1,82 @@
+--TEST--
+Test gmdate() function : usage variation - Passing predefined constants to format argument.
+--FILE--
+<?php
+/* Prototype : string gmdate(string format [, long timestamp])
+ * Description: Format a GMT date/time
+ * Source code: ext/date/php_date.c
+ */
+
+echo "*** Testing gmdate() : usage variation ***\n";
+
+// Initialise all required variables
+date_default_timezone_set('UTC');
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+//array of values to iterate over
+$inputs = array(
+ // Predefined Date constants
+ 'DATE_ATOM Constant' => DATE_ATOM,
+ 'DATE_COOKIE Constant' => DATE_COOKIE,
+ 'DATE_RFC822 Constant' => DATE_RFC822,
+ 'DATE_RFC850 Constant' => DATE_RFC850,
+ 'DATE_RFC1036 Constant' => DATE_RFC1036,
+ 'DATE_RFC1123 Constant' => DATE_RFC1123,
+ 'DATE_RFC2822 Constant' => DATE_RFC2822,
+ 'DATE_RFC3339 Constant' => DATE_RFC3339,
+ 'DATE_RSS Constant' => DATE_RSS,
+ 'DATE_W3C Constant' => DATE_W3C,
+);
+
+// loop through each element of the array for format
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmdate($value, $timestamp) );
+ var_dump( gmdate($value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmdate() : usage variation ***
+
+--DATE_ATOM Constant--
+string(25) "2008-08-08T08:08:08+00:00"
+string(%d) "%s"
+
+--DATE_COOKIE Constant--
+string(30) "Friday, 08-Aug-08 08:08:08 GMT"
+string(%d) "%s"
+
+--DATE_RFC822 Constant--
+string(29) "Fri, 08 Aug 08 08:08:08 +0000"
+string(%d) "%s"
+
+--DATE_RFC850 Constant--
+string(30) "Friday, 08-Aug-08 08:08:08 GMT"
+string(%d) "%s"
+
+--DATE_RFC1036 Constant--
+string(29) "Fri, 08 Aug 08 08:08:08 +0000"
+string(%d) "%s"
+
+--DATE_RFC1123 Constant--
+string(31) "Fri, 08 Aug 2008 08:08:08 +0000"
+string(%d) "%s"
+
+--DATE_RFC2822 Constant--
+string(31) "Fri, 08 Aug 2008 08:08:08 +0000"
+string(%d) "%s"
+
+--DATE_RFC3339 Constant--
+string(25) "2008-08-08T08:08:08+00:00"
+string(%d) "%s"
+
+--DATE_RSS Constant--
+string(31) "Fri, 08 Aug 2008 08:08:08 +0000"
+string(%d) "%s"
+
+--DATE_W3C Constant--
+string(25) "2008-08-08T08:08:08+00:00"
+string(%d) "%s"
+===DONE===
diff --git a/ext/date/tests/gmdate_variation14.phpt b/ext/date/tests/gmdate_variation14.phpt
new file mode 100644
index 000000000..dfea054c6
--- /dev/null
+++ b/ext/date/tests/gmdate_variation14.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test gmdate() function : usage variation - Passing high positive and negetive float values to timestamp.
+--FILE--
+<?php
+/* Prototype : string gmdate(string format [, long timestamp])
+ * Description: Format a GMT date/time
+ * Source code: ext/date/php_date.c
+ */
+
+echo "*** Testing gmdate() : usage variation ***\n";
+
+// Initialise all required variables
+date_default_timezone_set('UTC');
+$format = DATE_ISO8601;
+
+echo "\n-- Testing gmdate() function with float 12.3456789000e10 to timestamp --\n";
+$timestamp = 12.3456789000e10;
+var_dump( gmdate($format, $timestamp) );
+
+echo "\n-- Testing gmdate() function with float -12.3456789000e10 to timestamp --\n";
+$timestamp = -12.3456789000e10;
+var_dump( gmdate($format, $timestamp) );
+
+?>
+===DONE===
+--EXPECTREGEX--
+\*\*\* Testing gmdate\(\) : usage variation \*\*\*
+
+-- Testing gmdate\(\) function with float 12.3456789000e10 to timestamp --
+string\((24|25)\) "(1935-03-26T04:50:16\+0000|5882-03-11T00:30:00\+0000)"
+
+-- Testing gmdate\(\) function with float -12.3456789000e10 to timestamp --
+string\((24|25)\) "(2004-10-08T19:09:44\+0000|1901-12-13T20:45:52\+0000|-1943-10-22T23:30:00\+0000)"
+===DONE===
diff --git a/ext/date/tests/gmdate_variation2.phpt b/ext/date/tests/gmdate_variation2.phpt
new file mode 100644
index 000000000..c52de9da7
--- /dev/null
+++ b/ext/date/tests/gmdate_variation2.phpt
@@ -0,0 +1,210 @@
+--TEST--
+Test gmdate() function : usage variation - Passing unexpected values to timestamp argument.
+--FILE--
+<?php
+/* Prototype : string gmdate(string format [, long timestamp])
+ * Description: Format a GMT date/time
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmdate() : usage variation ***\n";
+
+
+// Initialise all required variables
+date_default_timezone_set('UTC');
+$format = DATE_ISO8601;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmdate($format, $value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmdate() : usage variation ***
+
+--int 0--
+string(24) "1970-01-01T00:00:00+0000"
+
+--int 1--
+string(24) "1970-01-01T00:00:01+0000"
+
+--int 12345--
+string(24) "1970-01-01T03:25:45+0000"
+
+--int -12345--
+string(24) "1969-12-31T20:34:15+0000"
+
+--float 10.5--
+string(24) "1970-01-01T00:00:10+0000"
+
+--float -10.5--
+string(24) "1969-12-31T23:59:50+0000"
+
+--float .5--
+string(24) "1970-01-01T00:00:00+0000"
+
+--empty array--
+
+Warning: gmdate() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: gmdate() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: gmdate() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: gmdate() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+string(24) "1970-01-01T00:00:00+0000"
+
+--lowercase null--
+string(24) "1970-01-01T00:00:00+0000"
+
+--lowercase true--
+string(24) "1970-01-01T00:00:01+0000"
+
+--lowercase false--
+string(24) "1970-01-01T00:00:00+0000"
+
+--uppercase TRUE--
+string(24) "1970-01-01T00:00:01+0000"
+
+--uppercase FALSE--
+string(24) "1970-01-01T00:00:00+0000"
+
+--empty string DQ--
+
+Warning: gmdate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: gmdate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: gmdate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: gmdate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: gmdate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: gmdate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: gmdate() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: gmdate() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+--undefined var--
+string(24) "1970-01-01T00:00:00+0000"
+
+--unset var--
+string(24) "1970-01-01T00:00:00+0000"
+===DONE===
diff --git a/ext/date/tests/gmdate_variation3.phpt b/ext/date/tests/gmdate_variation3.phpt
new file mode 100644
index 000000000..a93d6e923
--- /dev/null
+++ b/ext/date/tests/gmdate_variation3.phpt
@@ -0,0 +1,59 @@
+--TEST--
+Test gmdate() function : usage variation - Passing numeric representation of day formats.
+--FILE--
+<?php
+/* Prototype : string gmdate(string format [, long timestamp])
+ * Description: Format a GMT date/time
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmdate() : usage variation ***\n";
+
+// Initialise all required variables
+date_default_timezone_set('UTC');
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+//array of values to iterate over
+$inputs = array(
+
+ 'Day with leading zeros' => 'd',
+ 'Day without leading zeros' => 'j',
+ 'ISO representation' => 'N',
+ 'Numeric representation of day' => 'w',
+ 'Day of the year' => 'z'
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmdate($value) );
+ var_dump( gmdate($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmdate() : usage variation ***
+
+--Day with leading zeros--
+string(%d) "%d"
+string(2) "08"
+
+--Day without leading zeros--
+string(%d) "%d"
+string(1) "8"
+
+--ISO representation--
+string(%d) "%d"
+string(1) "5"
+
+--Numeric representation of day--
+string(%d) "%d"
+string(1) "5"
+
+--Day of the year--
+string(%d) "%d"
+string(3) "220"
+===DONE===
diff --git a/ext/date/tests/gmdate_variation4.phpt b/ext/date/tests/gmdate_variation4.phpt
new file mode 100644
index 000000000..bb97b567c
--- /dev/null
+++ b/ext/date/tests/gmdate_variation4.phpt
@@ -0,0 +1,45 @@
+--TEST--
+Test gmdate() function : usage variation - Passing textual representation of day formats.
+--FILE--
+<?php
+/* Prototype : string gmdate(string format [, long timestamp])
+ * Description: Format a GMT date/time
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmdate() : usage variation ***\n";
+
+// Initialise all required variables
+date_default_timezone_set('UTC');
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+echo "\n-- Testing gmdate() function with partial textual representation of day --\n";
+var_dump( gmdate('D') );
+var_dump( gmdate('D', $timestamp) );
+
+echo "\n-- Testing gmdate() function with full textual representation of day --\n";
+var_dump( gmdate('l') );
+var_dump( gmdate('l', $timestamp) );
+
+echo "\n-- Testing gmdate() function with English ordinal suffix --\n";
+var_dump( gmdate('S') );
+var_dump( gmdate('S', $timestamp) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmdate() : usage variation ***
+
+-- Testing gmdate() function with partial textual representation of day --
+string(%d) "%s"
+string(3) "Fri"
+
+-- Testing gmdate() function with full textual representation of day --
+string(%d) "%s"
+string(6) "Friday"
+
+-- Testing gmdate() function with English ordinal suffix --
+string(%d) "%s"
+string(2) "th"
+===DONE===
diff --git a/ext/date/tests/gmdate_variation5.phpt b/ext/date/tests/gmdate_variation5.phpt
new file mode 100644
index 000000000..d40488a69
--- /dev/null
+++ b/ext/date/tests/gmdate_variation5.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Test gmdate() function : usage variation - Passing Week representation to format.
+--FILE--
+<?php
+/* Prototype : string gmdate(string format [, long timestamp])
+ * Description: Format a GMT date/time
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmdate() : usage variation ***\n";
+
+// Initialise all required variables
+date_default_timezone_set('UTC');
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+echo "\n-- Testing gmdate() function with ISO-8601 week number of year format --\n";
+var_dump( gmdate('W') );
+var_dump( gmdate('W', $timestamp) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmdate() : usage variation ***
+
+-- Testing gmdate() function with ISO-8601 week number of year format --
+string(%d) "%d"
+string(2) "32"
+===DONE===
diff --git a/ext/date/tests/gmdate_variation6.phpt b/ext/date/tests/gmdate_variation6.phpt
new file mode 100644
index 000000000..f5b63a5b3
--- /dev/null
+++ b/ext/date/tests/gmdate_variation6.phpt
@@ -0,0 +1,61 @@
+--TEST--
+Test gmdate() function : usage variation - Passing Month format options to format argument.
+--FILE--
+<?php
+/* Prototype : string gmdate(string format [, long timestamp])
+ * Description: Format a GMT date/time
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmdate() : usage variation ***\n";
+
+// Initialise all required variables
+date_default_timezone_set('UTC');
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+echo "\n-- Testing gmdate() function with full textual representation of month format --\n";
+var_dump( gmdate('F') );
+var_dump( gmdate('F', $timestamp) );
+
+echo "\n-- Testing gmdate() function with numeric representation of month format --\n";
+var_dump( gmdate('m') );
+var_dump( gmdate('m', $timestamp) );
+
+echo "\n-- Testing gmdate() function with short textual representation of month format --\n";
+var_dump( gmdate('M') );
+var_dump( gmdate('M', $timestamp) );
+
+echo "\n-- Testing gmdate() function with numeric representation of month without leading zeros format --\n";
+var_dump( gmdate('n') );
+var_dump( gmdate('n', $timestamp) );
+
+echo "\n-- Testing gmdate() function with number of days in a month format --\n";
+var_dump( gmdate('t') );
+var_dump( gmdate('t', $timestamp) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmdate() : usage variation ***
+
+-- Testing gmdate() function with full textual representation of month format --
+string(%d) "%s"
+string(6) "August"
+
+-- Testing gmdate() function with numeric representation of month format --
+string(%d) "%d"
+string(2) "08"
+
+-- Testing gmdate() function with short textual representation of month format --
+string(%d) "%s"
+string(3) "Aug"
+
+-- Testing gmdate() function with numeric representation of month without leading zeros format --
+string(%d) "%d"
+string(1) "8"
+
+-- Testing gmdate() function with number of days in a month format --
+string(%d) "%d"
+string(2) "31"
+===DONE===
diff --git a/ext/date/tests/gmdate_variation7.phpt b/ext/date/tests/gmdate_variation7.phpt
new file mode 100644
index 000000000..8d9c1b0b9
--- /dev/null
+++ b/ext/date/tests/gmdate_variation7.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test gmdate() function : usage variation - Passing Year format options to format argument.
+--FILE--
+<?php
+/* Prototype : string gmdate(string format [, long timestamp])
+ * Description: Format a GMT date/time
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmdate() : usage variation ***\n";
+
+// Initialise all required variables
+date_default_timezone_set('UTC');
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+$timestamp_non_leap_year = mktime(8, 8, 8, 8, 8, 2007);
+
+echo "\n-- Testing gmdate() function with checking non leap year using Leap Year format --\n";
+var_dump( gmdate('L', $timestamp_non_leap_year) );
+
+echo "\n-- Testing gmdate() function with checking leap year using Leap Year format --\n";
+var_dump( gmdate('L') );
+var_dump( gmdate('L', $timestamp) );
+
+echo "\n-- Testing gmdate() function with ISO-8601 year number format --\n";
+var_dump( gmdate('o') );
+var_dump( gmdate('o', $timestamp) );
+
+echo "\n-- Testing gmdate() function with full numeric representation of year format --\n";
+var_dump( gmdate('Y') );
+var_dump( gmdate('Y', $timestamp) );
+
+echo "\n-- Testing gmdate() function with 2 digit representation year format --\n";
+var_dump( gmdate('y') );
+var_dump( gmdate('y', $timestamp) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmdate() : usage variation ***
+
+-- Testing gmdate() function with checking non leap year using Leap Year format --
+string(1) "0"
+
+-- Testing gmdate() function with checking leap year using Leap Year format --
+string(1) "%d"
+string(1) "1"
+
+-- Testing gmdate() function with ISO-8601 year number format --
+string(4) "%d"
+string(4) "2008"
+
+-- Testing gmdate() function with full numeric representation of year format --
+string(4) "%d"
+string(4) "2008"
+
+-- Testing gmdate() function with 2 digit representation year format --
+string(2) "%d"
+string(2) "08"
+===DONE===
diff --git a/ext/date/tests/gmdate_variation8.phpt b/ext/date/tests/gmdate_variation8.phpt
new file mode 100644
index 000000000..8d9c1b0b9
--- /dev/null
+++ b/ext/date/tests/gmdate_variation8.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test gmdate() function : usage variation - Passing Year format options to format argument.
+--FILE--
+<?php
+/* Prototype : string gmdate(string format [, long timestamp])
+ * Description: Format a GMT date/time
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmdate() : usage variation ***\n";
+
+// Initialise all required variables
+date_default_timezone_set('UTC');
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+$timestamp_non_leap_year = mktime(8, 8, 8, 8, 8, 2007);
+
+echo "\n-- Testing gmdate() function with checking non leap year using Leap Year format --\n";
+var_dump( gmdate('L', $timestamp_non_leap_year) );
+
+echo "\n-- Testing gmdate() function with checking leap year using Leap Year format --\n";
+var_dump( gmdate('L') );
+var_dump( gmdate('L', $timestamp) );
+
+echo "\n-- Testing gmdate() function with ISO-8601 year number format --\n";
+var_dump( gmdate('o') );
+var_dump( gmdate('o', $timestamp) );
+
+echo "\n-- Testing gmdate() function with full numeric representation of year format --\n";
+var_dump( gmdate('Y') );
+var_dump( gmdate('Y', $timestamp) );
+
+echo "\n-- Testing gmdate() function with 2 digit representation year format --\n";
+var_dump( gmdate('y') );
+var_dump( gmdate('y', $timestamp) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmdate() : usage variation ***
+
+-- Testing gmdate() function with checking non leap year using Leap Year format --
+string(1) "0"
+
+-- Testing gmdate() function with checking leap year using Leap Year format --
+string(1) "%d"
+string(1) "1"
+
+-- Testing gmdate() function with ISO-8601 year number format --
+string(4) "%d"
+string(4) "2008"
+
+-- Testing gmdate() function with full numeric representation of year format --
+string(4) "%d"
+string(4) "2008"
+
+-- Testing gmdate() function with 2 digit representation year format --
+string(2) "%d"
+string(2) "08"
+===DONE===
diff --git a/ext/date/tests/gmdate_variation9.phpt b/ext/date/tests/gmdate_variation9.phpt
new file mode 100644
index 000000000..e210557ac
--- /dev/null
+++ b/ext/date/tests/gmdate_variation9.phpt
@@ -0,0 +1,81 @@
+--TEST--
+Test gmdate() function : usage variation - Passing Time format options to format argument.
+--FILE--
+<?php
+/* Prototype : string gmdate(string format [, long timestamp])
+ * Description: Format a GMT date/time
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmdate() : usage variation ***\n";
+
+// Initialise all required variables
+date_default_timezone_set('UTC');
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+$time_formats = array(
+
+ 'Lowercase Ante meridiem and post meridiem' => 'a',
+ 'Uppercase Ante meridiem and post meridiem' => 'a',
+ 'Swatch Internet time' => 'B',
+ '12-hour format without leading zeros' => 'g',
+ '24-hour format without leading zeros' => 'G',
+ '12-hour format with leading zeros' => 'h',
+ '24-hour format with leading zeros' => 'H',
+ 'Minutes with leading zeros' => 'i',
+ 'Seconds with leading zeros' => 's',
+ 'Milliseconds' => 'u',
+);
+
+foreach($time_formats as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmdate($value) );
+ var_dump( gmdate($value, $timestamp) );
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmdate() : usage variation ***
+
+--Lowercase Ante meridiem and post meridiem--
+string(2) "%s"
+string(2) "am"
+
+--Uppercase Ante meridiem and post meridiem--
+string(2) "%s"
+string(2) "am"
+
+--Swatch Internet time--
+string(%d) "%d"
+string(3) "380"
+
+--12-hour format without leading zeros--
+string(%d) "%d"
+string(1) "8"
+
+--24-hour format without leading zeros--
+string(%d) "%d"
+string(1) "8"
+
+--12-hour format with leading zeros--
+string(%d) "%d"
+string(2) "08"
+
+--24-hour format with leading zeros--
+string(2) "%d"
+string(2) "08"
+
+--Minutes with leading zeros--
+string(2) "%d"
+string(2) "08"
+
+--Seconds with leading zeros--
+string(2) "%d"
+string(2) "08"
+
+--Milliseconds--
+string(%d) "%d"
+string(6) "000000"
+===DONE===
diff --git a/ext/date/tests/gmmktime_basic.phpt b/ext/date/tests/gmmktime_basic.phpt
new file mode 100644
index 000000000..81abb5f2b
--- /dev/null
+++ b/ext/date/tests/gmmktime_basic.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test gmmktime() function : basic functionality
+--FILE--
+<?php
+/* Prototype : int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])
+ * Description: Get UNIX timestamp for a GMT date
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmmktime() : basic functionality ***\n";
+
+// Initialise all required variables
+$hour = 8;
+$min = 8;
+$sec = 8;
+$mon = 8;
+$day = 8;
+$year = 2008;
+
+// Calling gmmktime() with all possible arguments
+var_dump( gmmktime($hour, $min, $sec, $mon, $day, $year) );
+
+// Calling gmmktime() with mandatory arguments
+var_dump( gmmktime() );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmmktime() : basic functionality ***
+int(1218182888)
+
+Strict Standards: gmmktime(): You should be using the time() function instead in %s on line %d
+int(%d)
+===DONE===
diff --git a/ext/date/tests/gmmktime_error.phpt b/ext/date/tests/gmmktime_error.phpt
new file mode 100644
index 000000000..5fca888d1
--- /dev/null
+++ b/ext/date/tests/gmmktime_error.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test gmmktime() function : error conditions
+--FILE--
+<?php
+/* Prototype : int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])
+ * Description: Get UNIX timestamp for a GMT date
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmmktime() : error conditions ***\n";
+
+//Test gmmktime with one more than the expected number of arguments
+echo "\n-- Testing gmmktime() function with more than expected no. of arguments --\n";
+$hour = 8;
+$min = 8;
+$sec = 8;
+$mon = 8;
+$day = 8;
+$year = 2008;
+$extra_arg1 = 10;
+$extra_arg2 = 10;
+
+var_dump( gmmktime($hour, $min, $sec, $mon, $day, $year, $extra_arg1) );
+
+var_dump( gmmktime($hour, $min, $sec, $mon, $day, $year, $extra_arg1, $extra_arg2) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmmktime() : error conditions ***
+
+-- Testing gmmktime() function with more than expected no. of arguments --
+
+Strict Standards: gmmktime(): The is_dst parameter is deprecated in %s on line %d
+int(1218182888)
+
+Warning: gmmktime() expects at most 7 parameters, 8 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/gmmktime_variation1.phpt b/ext/date/tests/gmmktime_variation1.phpt
new file mode 100644
index 000000000..f84d99b9c
--- /dev/null
+++ b/ext/date/tests/gmmktime_variation1.phpt
@@ -0,0 +1,194 @@
+--TEST--
+Test gmmktime() function : usage variation - Passing unexpected values to first argument hour.
+--FILE--
+<?php
+/* Prototype : int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])
+ * Description: Get UNIX timestamp for a GMT date
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmmktime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$min = 8;
+$sec = 8;
+$mon = 8;
+$day = 8;
+$year = 2008;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for hour
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmmktime($value, $min, $sec, $mon, $day, $year) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmmktime() : usage variation ***
+
+--float 10.5--
+int(1218190088)
+
+--float -10.5--
+int(1218118088)
+
+--float .5--
+int(1218154088)
+
+--empty array--
+
+Warning: gmmktime() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: gmmktime() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: gmmktime() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: gmmktime() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+int(1218154088)
+
+--lowercase null--
+int(1218154088)
+
+--lowercase true--
+int(1218157688)
+
+--lowercase false--
+int(1218154088)
+
+--uppercase TRUE--
+int(1218157688)
+
+--uppercase FALSE--
+int(1218154088)
+
+--empty string DQ--
+
+Warning: gmmktime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: gmmktime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: gmmktime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: gmmktime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: gmmktime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: gmmktime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: gmmktime() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: gmmktime() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+--undefined var--
+int(1218154088)
+
+--unset var--
+int(1218154088)
+===DONE===
diff --git a/ext/date/tests/gmmktime_variation2.phpt b/ext/date/tests/gmmktime_variation2.phpt
new file mode 100644
index 000000000..e74af392f
--- /dev/null
+++ b/ext/date/tests/gmmktime_variation2.phpt
@@ -0,0 +1,194 @@
+--TEST--
+Test gmmktime() function : usage variation - Passing unexpected values to second argument minute.
+--FILE--
+<?php
+/* Prototype : int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])
+ * Description: Get UNIX timestamp for a GMT date
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmmktime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$hour = 8;
+$sec = 8;
+$mon = 8;
+$day = 8;
+$year = 2008;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for min
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmmktime($hour, $value, $sec, $mon, $day, $year) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmmktime() : usage variation ***
+
+--float 10.5--
+int(1218183008)
+
+--float -10.5--
+int(1218181808)
+
+--float .5--
+int(1218182408)
+
+--empty array--
+
+Warning: gmmktime() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: gmmktime() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: gmmktime() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: gmmktime() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+int(1218182408)
+
+--lowercase null--
+int(1218182408)
+
+--lowercase true--
+int(1218182468)
+
+--lowercase false--
+int(1218182408)
+
+--uppercase TRUE--
+int(1218182468)
+
+--uppercase FALSE--
+int(1218182408)
+
+--empty string DQ--
+
+Warning: gmmktime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: gmmktime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: gmmktime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: gmmktime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: gmmktime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: gmmktime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: gmmktime() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: gmmktime() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+--undefined var--
+int(1218182408)
+
+--unset var--
+int(1218182408)
+===DONE===
diff --git a/ext/date/tests/gmmktime_variation3.phpt b/ext/date/tests/gmmktime_variation3.phpt
new file mode 100644
index 000000000..d180e829a
--- /dev/null
+++ b/ext/date/tests/gmmktime_variation3.phpt
@@ -0,0 +1,194 @@
+--TEST--
+Test gmmktime() function : usage variation - Passing unexpected values to third argument seconds.
+--FILE--
+<?php
+/* Prototype : int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])
+ * Description: Get UNIX timestamp for a GMT date
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmmktime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$hour = 8;
+$min = 8;
+$mon = 8;
+$day = 8;
+$year = 2008;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for sec
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmmktime($hour, $min, $value, $mon, $day, $year) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmmktime() : usage variation ***
+
+--float 10.5--
+int(1218182890)
+
+--float -10.5--
+int(1218182870)
+
+--float .5--
+int(1218182880)
+
+--empty array--
+
+Warning: gmmktime() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: gmmktime() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: gmmktime() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: gmmktime() expects parameter 3 to be long, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+int(1218182880)
+
+--lowercase null--
+int(1218182880)
+
+--lowercase true--
+int(1218182881)
+
+--lowercase false--
+int(1218182880)
+
+--uppercase TRUE--
+int(1218182881)
+
+--uppercase FALSE--
+int(1218182880)
+
+--empty string DQ--
+
+Warning: gmmktime() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: gmmktime() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: gmmktime() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: gmmktime() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: gmmktime() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: gmmktime() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: gmmktime() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: gmmktime() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+--undefined var--
+int(1218182880)
+
+--unset var--
+int(1218182880)
+===DONE===
diff --git a/ext/date/tests/gmmktime_variation4.phpt b/ext/date/tests/gmmktime_variation4.phpt
new file mode 100644
index 000000000..909311928
--- /dev/null
+++ b/ext/date/tests/gmmktime_variation4.phpt
@@ -0,0 +1,194 @@
+--TEST--
+Test gmmktime() function : usage variation - Passing unexpected values to fourth argument month.
+--FILE--
+<?php
+/* Prototype : int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])
+ * Description: Get UNIX timestamp for a GMT date
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmmktime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$hour = 8;
+$min = 8;
+$sec = 8;
+$day = 8;
+$year = 2008;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for mon
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmmktime($hour, $min, $sec, $value, $day, $year) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmmktime() : usage variation ***
+
+--float 10.5--
+int(1223453288)
+
+--float -10.5--
+int(1170922088)
+
+--float .5--
+int(1197101288)
+
+--empty array--
+
+Warning: gmmktime() expects parameter 4 to be long, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: gmmktime() expects parameter 4 to be long, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: gmmktime() expects parameter 4 to be long, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: gmmktime() expects parameter 4 to be long, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+int(1197101288)
+
+--lowercase null--
+int(1197101288)
+
+--lowercase true--
+int(1199779688)
+
+--lowercase false--
+int(1197101288)
+
+--uppercase TRUE--
+int(1199779688)
+
+--uppercase FALSE--
+int(1197101288)
+
+--empty string DQ--
+
+Warning: gmmktime() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: gmmktime() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: gmmktime() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: gmmktime() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: gmmktime() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: gmmktime() expects parameter 4 to be long, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: gmmktime() expects parameter 4 to be long, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: gmmktime() expects parameter 4 to be long, object given in %s on line %d
+bool(false)
+
+--undefined var--
+int(1197101288)
+
+--unset var--
+int(1197101288)
+===DONE===
diff --git a/ext/date/tests/gmmktime_variation5.phpt b/ext/date/tests/gmmktime_variation5.phpt
new file mode 100644
index 000000000..dd1ca3e9c
--- /dev/null
+++ b/ext/date/tests/gmmktime_variation5.phpt
@@ -0,0 +1,194 @@
+--TEST--
+Test gmmktime() function : usage variation - Passing unexpected values to fifth argument day.
+--FILE--
+<?php
+/* Prototype : int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])
+ * Description: Get UNIX timestamp for a GMT date
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmmktime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$hour = 8;
+$min = 8;
+$sec = 8;
+$mon = 8;
+$year = 2008;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for day
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmmktime($hour, $min, $sec, $mon, $value, $year) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmmktime() : usage variation ***
+
+--float 10.5--
+int(1218355688)
+
+--float -10.5--
+int(1216627688)
+
+--float .5--
+int(1217491688)
+
+--empty array--
+
+Warning: gmmktime() expects parameter 5 to be long, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: gmmktime() expects parameter 5 to be long, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: gmmktime() expects parameter 5 to be long, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: gmmktime() expects parameter 5 to be long, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+int(1217491688)
+
+--lowercase null--
+int(1217491688)
+
+--lowercase true--
+int(1217578088)
+
+--lowercase false--
+int(1217491688)
+
+--uppercase TRUE--
+int(1217578088)
+
+--uppercase FALSE--
+int(1217491688)
+
+--empty string DQ--
+
+Warning: gmmktime() expects parameter 5 to be long, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: gmmktime() expects parameter 5 to be long, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: gmmktime() expects parameter 5 to be long, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: gmmktime() expects parameter 5 to be long, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: gmmktime() expects parameter 5 to be long, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: gmmktime() expects parameter 5 to be long, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: gmmktime() expects parameter 5 to be long, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: gmmktime() expects parameter 5 to be long, object given in %s on line %d
+bool(false)
+
+--undefined var--
+int(1217491688)
+
+--unset var--
+int(1217491688)
+===DONE===
diff --git a/ext/date/tests/gmmktime_variation6.phpt b/ext/date/tests/gmmktime_variation6.phpt
new file mode 100644
index 000000000..4877556b7
--- /dev/null
+++ b/ext/date/tests/gmmktime_variation6.phpt
@@ -0,0 +1,190 @@
+--TEST--
+Test gmmktime() function : usage variation - Passing unexpected values to sixth argument year.
+--FILE--
+<?php
+/* Prototype : int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])
+ * Description: Get UNIX timestamp for a GMT date
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmmktime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$hour = 8;
+$min = 8;
+$sec = 8;
+$mon = 8;
+$day = 8;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for year
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmmktime($hour, $min, $sec, $mon, $day, $value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmmktime() : usage variation ***
+
+--float 10.5--
+int(1281254888)
+
+--float .5--
+int(965722088)
+
+--empty array--
+
+Warning: gmmktime() expects parameter 6 to be long, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: gmmktime() expects parameter 6 to be long, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: gmmktime() expects parameter 6 to be long, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: gmmktime() expects parameter 6 to be long, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+int(965722088)
+
+--lowercase null--
+int(965722088)
+
+--lowercase true--
+int(997258088)
+
+--lowercase false--
+int(965722088)
+
+--uppercase TRUE--
+int(997258088)
+
+--uppercase FALSE--
+int(965722088)
+
+--empty string DQ--
+
+Warning: gmmktime() expects parameter 6 to be long, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: gmmktime() expects parameter 6 to be long, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: gmmktime() expects parameter 6 to be long, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: gmmktime() expects parameter 6 to be long, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: gmmktime() expects parameter 6 to be long, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: gmmktime() expects parameter 6 to be long, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: gmmktime() expects parameter 6 to be long, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: gmmktime() expects parameter 6 to be long, object given in %s on line %d
+bool(false)
+
+--undefined var--
+int(965722088)
+
+--unset var--
+int(965722088)
+===DONE===
diff --git a/ext/date/tests/gmmktime_variation7.phpt b/ext/date/tests/gmmktime_variation7.phpt
new file mode 100644
index 000000000..3d0d25a00
--- /dev/null
+++ b/ext/date/tests/gmmktime_variation7.phpt
@@ -0,0 +1,54 @@
+--TEST--
+Test gmmktime() function : usage variation - Checking with few optional arguments.
+--FILE--
+<?php
+/* Prototype : int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])
+ * Description: Get UNIX timestamp for a GMT date
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmmktime() : usage variation ***\n";
+
+// Initialise all required variables
+$hour = 8;
+$min = 8;
+$sec = 8;
+$mon = 8;
+$day = 8;
+
+echo "\n-- Testing gmmktime() function with one optional argument --\n";
+var_dump( gmmktime($hour) );
+
+echo "\n-- Testing gmmktime() function with two optional argument --\n";
+var_dump( gmmktime($hour, $min) );
+
+echo "\n-- Testing gmmktime() function with three optional argument --\n";
+var_dump( gmmktime($hour, $min, $sec) );
+
+echo "\n-- Testing gmmktime() function with four optional argument --\n";
+var_dump( gmmktime($hour, $min, $sec, $mon) );
+
+echo "\n-- Testing gmmktime() function with five optional argument --\n";
+var_dump( gmmktime($hour, $min, $sec, $mon, $day) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmmktime() : usage variation ***
+
+-- Testing gmmktime() function with one optional argument --
+int(%d)
+
+-- Testing gmmktime() function with two optional argument --
+int(%d)
+
+-- Testing gmmktime() function with three optional argument --
+int(%d)
+
+-- Testing gmmktime() function with four optional argument --
+int(%d)
+
+-- Testing gmmktime() function with five optional argument --
+int(%d)
+===DONE===
diff --git a/ext/date/tests/gmmktime_variation8.phpt b/ext/date/tests/gmmktime_variation8.phpt
new file mode 100644
index 000000000..b0c56a127
--- /dev/null
+++ b/ext/date/tests/gmmktime_variation8.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test gmmktime() function : usage variation - Passing octal and hexadecimal values to arguments.
+--FILE--
+<?php
+/* Prototype : int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])
+ * Description: Get UNIX timestamp for a GMT date
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmmktime() : usage variation ***\n";
+
+// Initialise all required variables
+$hour = 010;
+$min = 010;
+$sec = 010;
+$mon = 010;
+$day = 010;
+$year = 03730;
+
+echo "\n-- Testing gmmktime() function with supplying octal values to arguments --\n";
+var_dump( gmmktime($hour, $min, $sec, $mon, $day, $year) );
+
+// Initialise all required variables
+$hour = 0x8;
+$min = 0x8;
+$sec = 0x8;
+$mon = 0x8;
+$day = 0x8;
+$year = 0x7D8;
+
+echo "\n-- Testing gmmktime() function with supplying hexa decimal values to arguments --\n";
+var_dump( gmmktime($hour, $min, $sec, $mon, $day, $year) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmmktime() : usage variation ***
+
+-- Testing gmmktime() function with supplying octal values to arguments --
+int(1218182888)
+
+-- Testing gmmktime() function with supplying hexa decimal values to arguments --
+int(1218182888)
+===DONE===
diff --git a/ext/date/tests/gmmktime_variation9.phpt b/ext/date/tests/gmmktime_variation9.phpt
new file mode 100644
index 000000000..fa463e0d6
--- /dev/null
+++ b/ext/date/tests/gmmktime_variation9.phpt
@@ -0,0 +1,62 @@
+--TEST--
+Test gmmktime() function : usage variation - Passing positive and negative float values to arguments.
+--FILE--
+<?php
+/* Prototype : int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])
+ * Description: Get UNIX timestamp for a GMT date
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmmktime() : usage variation ***\n";
+
+//Initialise variables
+$hour = 8;
+$min = 8;
+$sec = 8;
+$mon = 8;
+$day = 8;
+$year = 2008;
+
+$inputs = array(
+
+ 'float 123456' => 123456,
+ 'float -123456' => -123456,
+ 'float -10.5' => -10.5,
+);
+
+// loop through each element of the array for min
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmmktime($value, $min, $sec, $mon, $day, $year) );
+ var_dump( gmmktime($hour, $value, $sec, $mon, $day, $year) );
+ var_dump( gmmktime($hour, $min, $value, $mon, $day, $year) );
+ var_dump( gmmktime($hour, $min, $sec, $value, $day, $year) );
+ var_dump( gmmktime($hour, $min, $sec, $mon, $value, $value) );
+}
+?>
+===DONE===
+--EXPECTREGEX--
+\*\*\* Testing gmmktime\(\) : usage variation \*\*\*
+
+--float 123456--
+int\(1662595688\)
+int\(1225589768\)
+int\(1218306336\)
+(bool|int)\((false|325855037288)\)
+(bool|int)\((false|3844412784488)\)
+
+--float -123456--
+int\(773712488\)
+int\(1210775048\)
+int\(1218059424\)
+(bool|int)\((false|-323460834712)\)
+(bool|int)\((false|-3968710530712)\)
+
+--float -10.5--
+int\(1218118088\)
+int\(1218181808\)
+int\(1218182870\)
+int\(1170922088\)
+(bool|int)\((false|-62465356312)\)
+===DONE===
diff --git a/ext/date/tests/gmstrftime_basic.phpt b/ext/date/tests/gmstrftime_basic.phpt
new file mode 100644
index 000000000..17bad69d0
--- /dev/null
+++ b/ext/date/tests/gmstrftime_basic.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Test gmstrftime() function : basic functionality
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : basic functionality ***\n";
+
+// Initialise all required variables
+$format = '%b %d %Y %H:%M:%S';
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+
+// Calling gmstrftime() with all possible arguments
+var_dump( gmstrftime($format, $timestamp) );
+
+// Calling gmstrftime() with mandatory arguments
+var_dump( gmstrftime($format) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmstrftime() : basic functionality ***
+string(20) "Aug 08 2008 08:08:08"
+string(%d) "%s %d %d %d:%d:%d"
+===DONE===
diff --git a/ext/date/tests/gmstrftime_error.phpt b/ext/date/tests/gmstrftime_error.phpt
new file mode 100644
index 000000000..d28780fe0
--- /dev/null
+++ b/ext/date/tests/gmstrftime_error.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Test gmstrftime() function : error conditions
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing gmstrftime() function with Zero arguments --\n";
+var_dump( gmstrftime() );
+
+//Test gmstrftime with one more than the expected number of arguments
+echo "\n-- Testing gmstrftime() function with more than expected no. of arguments --\n";
+$format = '%b %d %Y %H:%M:%S';
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+$extra_arg = 10;
+var_dump( gmstrftime($format, $timestamp, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmstrftime() : error conditions ***
+
+-- Testing gmstrftime() function with Zero arguments --
+
+Warning: gmstrftime() expects at least 1 parameter, 0 given in %s on line %d
+bool(false)
+
+-- Testing gmstrftime() function with more than expected no. of arguments --
+
+Warning: gmstrftime() expects at most 2 parameters, 3 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/gmstrftime_variation1.phpt b/ext/date/tests/gmstrftime_variation1.phpt
new file mode 100644
index 000000000..d123fb254
--- /dev/null
+++ b/ext/date/tests/gmstrftime_variation1.phpt
@@ -0,0 +1,220 @@
+--TEST--
+Test gmstrftime() function : usage variation - Passing unexpected values to first argument 'format'.
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for format
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmstrftime($value) );
+ var_dump( gmstrftime($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmstrftime() : usage variation ***
+
+--int 0--
+string(1) "0"
+string(1) "0"
+
+--int 1--
+string(1) "1"
+string(1) "1"
+
+--int 12345--
+string(5) "12345"
+string(5) "12345"
+
+--int -12345--
+string(6) "-12345"
+string(6) "-12345"
+
+--float 10.5--
+string(4) "10.5"
+string(4) "10.5"
+
+--float -10.5--
+string(5) "-10.5"
+string(5) "-10.5"
+
+--float 12.3456789000e10--
+string(12) "123456789000"
+string(12) "123456789000"
+
+--float -12.3456789000e10--
+string(13) "-123456789000"
+string(13) "-123456789000"
+
+--float .5--
+string(3) "0.5"
+string(3) "0.5"
+
+--empty array--
+
+Warning: gmstrftime() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Warning: gmstrftime() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: gmstrftime() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Warning: gmstrftime() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: gmstrftime() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Warning: gmstrftime() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: gmstrftime() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Warning: gmstrftime() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+bool(false)
+bool(false)
+
+--lowercase null--
+bool(false)
+bool(false)
+
+--lowercase true--
+string(1) "1"
+string(1) "1"
+
+--lowercase false--
+bool(false)
+bool(false)
+
+--uppercase TRUE--
+string(1) "1"
+string(1) "1"
+
+--uppercase FALSE--
+bool(false)
+bool(false)
+
+--empty string DQ--
+bool(false)
+bool(false)
+
+--empty string SQ--
+bool(false)
+bool(false)
+
+--instance of classWithToString--
+string(14) "Class A object"
+string(14) "Class A object"
+
+--instance of classWithoutToString--
+
+Warning: gmstrftime() expects parameter 1 to be string, object given in %s on line %d
+bool(false)
+
+Warning: gmstrftime() expects parameter 1 to be string, object given in %s on line %d
+bool(false)
+
+--undefined var--
+bool(false)
+bool(false)
+
+--unset var--
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/date/tests/gmstrftime_variation10.phpt b/ext/date/tests/gmstrftime_variation10.phpt
new file mode 100644
index 000000000..0e54d846e
--- /dev/null
+++ b/ext/date/tests/gmstrftime_variation10.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test gmstrftime() function : usage variation - Checking week related formats which are supported other than on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
+ die("skip Test is not valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+
+//array of values to iterate over
+$inputs = array(
+ 'The ISO 8601:1988 week number' => "%V",
+ 'Weekday as decimal' => "%u",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmstrftime($value) );
+ var_dump( gmstrftime($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmstrftime() : usage variation ***
+
+--The ISO 8601:1988 week number--
+string(%d) "%d"
+string(2) "32"
+
+--Weekday as decimal--
+string(%d) "%d"
+string(1) "5"
+===DONE===
diff --git a/ext/date/tests/gmstrftime_variation11.phpt b/ext/date/tests/gmstrftime_variation11.phpt
new file mode 100644
index 000000000..482ff6d2d
--- /dev/null
+++ b/ext/date/tests/gmstrftime_variation11.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test gmstrftime() function : usage variation - Checking month related formats which are not supported on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') {
+ die("skip Test is valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+
+echo "\n-- Testing gmstrftime() function with Abbreviated month name format %h --\n";
+$format = "%h";
+var_dump( gmstrftime($format) );
+var_dump( gmstrftime($format, $timestamp) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmstrftime() : usage variation ***
+
+-- Testing gmstrftime() function with Abbreviated month name format %h --
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/date/tests/gmstrftime_variation12.phpt b/ext/date/tests/gmstrftime_variation12.phpt
new file mode 100644
index 000000000..2c25af6e2
--- /dev/null
+++ b/ext/date/tests/gmstrftime_variation12.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test gmstrftime() function : usage variation - Checking month related formats which are supported other than on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
+ die("skip Test is not valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+
+echo "\n-- Testing gmstrftime() function with Abbreviated month name format %h --\n";
+$format = "%h";
+var_dump( gmstrftime($format) );
+var_dump( gmstrftime($format, $timestamp) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmstrftime() : usage variation ***
+
+-- Testing gmstrftime() function with Abbreviated month name format %h --
+string(%d) "%s"
+string(3) "Aug"
+===DONE===
diff --git a/ext/date/tests/gmstrftime_variation13.phpt b/ext/date/tests/gmstrftime_variation13.phpt
new file mode 100644
index 000000000..42f33f01e
--- /dev/null
+++ b/ext/date/tests/gmstrftime_variation13.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test gmstrftime() function : usage variation - Checking date related formats which are not supported on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') {
+ die("skip Test is valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+
+//array of values to iterate over
+$inputs = array(
+ 'Century number' => "%C",
+ 'Month Date Year' => "%D",
+ 'Year with century' => "%G",
+ 'Year without century' => "%g",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmstrftime($value) );
+ var_dump( gmstrftime($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmstrftime() : usage variation ***
+
+--Century number--
+bool(false)
+bool(false)
+
+--Month Date Year--
+bool(false)
+bool(false)
+
+--Year with century--
+bool(false)
+bool(false)
+
+--Year without century--
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/date/tests/gmstrftime_variation14.phpt b/ext/date/tests/gmstrftime_variation14.phpt
new file mode 100644
index 000000000..880b4330c
--- /dev/null
+++ b/ext/date/tests/gmstrftime_variation14.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test gmstrftime() function : usage variation - Checking date related formats which are supported other than on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
+ die("skip Test is not valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+
+//array of values to iterate over
+$inputs = array(
+ 'Century number' => "%C",
+ 'Month Date Year' => "%D",
+ 'Year with century' => "%G",
+ 'Year without century' => "%g",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmstrftime($value) );
+ var_dump( gmstrftime($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmstrftime() : usage variation ***
+
+--Century number--
+string(%d) "%d"
+string(2) "20"
+
+--Month Date Year--
+string(%d) "%d/%d/%d"
+string(8) "08/08/08"
+
+--Year with century--
+string(%d) "%d"
+string(4) "2008"
+
+--Year without century--
+string(%d) "%d"
+string(2) "08"
+===DONE===
diff --git a/ext/date/tests/gmstrftime_variation15.phpt b/ext/date/tests/gmstrftime_variation15.phpt
new file mode 100644
index 000000000..c0df36478
--- /dev/null
+++ b/ext/date/tests/gmstrftime_variation15.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Test gmstrftime() function : usage variation - Checking time related formats which are not supported on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') {
+ die("skip Test is valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+
+//array of values to iterate over
+$inputs = array(
+ 'Time in a.m/p.m notation' => "%r",
+ 'Time in 24 hour notation' => "%R",
+ 'Current time %H:%M:%S format' => "%T",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmstrftime($value) );
+ var_dump( gmstrftime($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmstrftime() : usage variation ***
+
+--Time in a.m/p.m notation--
+bool(false)
+bool(false)
+
+--Time in 24 hour notation--
+bool(false)
+bool(false)
+
+--Current time %H:%M:%S format--
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/date/tests/gmstrftime_variation16.phpt b/ext/date/tests/gmstrftime_variation16.phpt
new file mode 100644
index 000000000..fd9f809ea
--- /dev/null
+++ b/ext/date/tests/gmstrftime_variation16.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Test gmstrftime() function : usage variation - Checking time related formats which are supported other than on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
+ die("skip Test is not valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$timestamp = gmmktime(14, 8, 8, 8, 8, 2008);
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+
+//array of values to iterate over
+$inputs = array(
+ 'Time in a.m/p.m notation' => "%r",
+ 'Time in 24 hour notation' => "%R",
+ 'Current time %H:%M:%S format' => "%T",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmstrftime($value) );
+ var_dump( gmstrftime($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmstrftime() : usage variation ***
+
+--Time in a.m/p.m notation--
+string(%d) "%d:%d:%d %s"
+string(11) "02:08:08 PM"
+
+--Time in 24 hour notation--
+string(%d) "%d:%d"
+string(5) "14:08"
+
+--Current time %H:%M:%S format--
+string(%d) "%d:%d:%d"
+string(8) "14:08:08"
+===DONE===
diff --git a/ext/date/tests/gmstrftime_variation17.phpt b/ext/date/tests/gmstrftime_variation17.phpt
new file mode 100644
index 000000000..e3070a514
--- /dev/null
+++ b/ext/date/tests/gmstrftime_variation17.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test gmstrftime() function : usage variation - Checking day related formats which are not supported on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') {
+ die("skip Test is valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+
+echo "\n-- Testing gmstrftime() function with Day of the month as decimal single digit format --\n";
+$format = "%e";
+var_dump( gmstrftime($format) );
+var_dump( gmstrftime($format, $timestamp) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmstrftime() : usage variation ***
+
+-- Testing gmstrftime() function with Day of the month as decimal single digit format --
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/date/tests/gmstrftime_variation18.phpt b/ext/date/tests/gmstrftime_variation18.phpt
new file mode 100644
index 000000000..b8563dcd2
--- /dev/null
+++ b/ext/date/tests/gmstrftime_variation18.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test gmstrftime() function : usage variation - Checking day related formats which are supported other than on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
+ die("skip Test is not valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+
+echo "\n-- Testing gmstrftime() function with Day of the month as decimal single digit format --\n";
+$format = "%e";
+var_dump( gmstrftime($format) );
+var_dump( gmstrftime($format, $timestamp) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmstrftime() : usage variation ***
+
+-- Testing gmstrftime() function with Day of the month as decimal single digit format --
+string(2) "%s"
+string(2) " 8"
+===DONE===
diff --git a/ext/date/tests/gmstrftime_variation19.phpt b/ext/date/tests/gmstrftime_variation19.phpt
new file mode 100644
index 000000000..3131e01ca
--- /dev/null
+++ b/ext/date/tests/gmstrftime_variation19.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test gmstrftime() function : usage variation - Checking newline and tab formats which are not supported on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') {
+ die("skip Test is valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+
+//array of values to iterate over
+$inputs = array(
+ 'Newline character' => "%n",
+ 'Tab character' => "%t"
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmstrftime($value) );
+ var_dump( gmstrftime($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmstrftime() : usage variation ***
+
+--Newline character--
+bool(false)
+bool(false)
+
+--Tab character--
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/date/tests/gmstrftime_variation2.phpt b/ext/date/tests/gmstrftime_variation2.phpt
new file mode 100644
index 000000000..ee2cecb46
--- /dev/null
+++ b/ext/date/tests/gmstrftime_variation2.phpt
@@ -0,0 +1,202 @@
+--TEST--
+Test gmstrftime() function : usage variation - Passing unexpected values to second argument 'timestamp'.
+--SKIPIF--
+<?php
+if(PHP_INT_SIZE != 4 ) {
+ die("skip Test is not valid for 64-bit");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : usage variation ***\n";
+
+date_default_timezone_set("Asia/Calcutta");
+
+// Initialise function arguments not being substituted (if any)
+$format = '%b %d %Y %H:%M:%S';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmstrftime($format, $value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmstrftime() : usage variation ***
+
+--float 10.5--
+string(20) "Jan 01 1970 00:00:10"
+
+--float -10.5--
+string(20) "Dec 31 1969 23:59:50"
+
+--float 12.3456789000e10--
+string(20) "Mar 26 1935 04:50:16"
+
+--float .5--
+string(20) "Jan 01 1970 00:00:00"
+
+--empty array--
+
+Warning: gmstrftime() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: gmstrftime() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: gmstrftime() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: gmstrftime() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+string(20) "Jan 01 1970 00:00:00"
+
+--lowercase null--
+string(20) "Jan 01 1970 00:00:00"
+
+--lowercase true--
+string(20) "Jan 01 1970 00:00:01"
+
+--lowercase false--
+string(20) "Jan 01 1970 00:00:00"
+
+--uppercase TRUE--
+string(20) "Jan 01 1970 00:00:01"
+
+--uppercase FALSE--
+string(20) "Jan 01 1970 00:00:00"
+
+--empty string DQ--
+
+Warning: gmstrftime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: gmstrftime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: gmstrftime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: gmstrftime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: gmstrftime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: gmstrftime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: gmstrftime() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: gmstrftime() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+--undefined var--
+string(20) "Jan 01 1970 00:00:00"
+
+--unset var--
+string(20) "Jan 01 1970 00:00:00"
+===DONE===
diff --git a/ext/date/tests/gmstrftime_variation20.phpt b/ext/date/tests/gmstrftime_variation20.phpt
new file mode 100644
index 000000000..a8898d8ec
--- /dev/null
+++ b/ext/date/tests/gmstrftime_variation20.phpt
@@ -0,0 +1,52 @@
+--TEST--
+Test gmstrftime() function : usage variation - Checking newline and tab formats which are supported other than on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
+ die("skip Test is not valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+
+//array of values to iterate over
+$inputs = array(
+ 'Newline character' => "%n",
+ 'Tab character' => "%t"
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmstrftime($value) );
+ var_dump( gmstrftime($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTREGEX--
+\*\*\* Testing gmstrftime\(\) : usage variation \*\*\*
+
+--Newline character--
+string\(1\) "
+"
+string\(1\) "
+"
+
+--Tab character--
+string\(1\) "\s"
+string\(1\) "\s"
+===DONE===
diff --git a/ext/date/tests/gmstrftime_variation21.phpt b/ext/date/tests/gmstrftime_variation21.phpt
new file mode 100644
index 000000000..fb53cb695
--- /dev/null
+++ b/ext/date/tests/gmstrftime_variation21.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Test gmstrftime() function : usage variation - Checking Preferred date and time representation on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') {
+ die("skip Test is only valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+
+//array of values to iterate over
+$inputs = array(
+ 'Preferred date and time representation' => "%c",
+ 'Preferred date representation' => "%x",
+ 'Preferred time representation' => "%X",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmstrftime($value) );
+ var_dump( gmstrftime($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmstrftime() : usage variation ***
+
+--Preferred date and time representation--
+string(%d) "%d/%d/%d %d:%d:%d"
+string(17) "08/08/08 08:08:08"
+
+--Preferred date representation--
+string(%d) "%d/%d/%d"
+string(8) "08/08/08"
+
+--Preferred time representation--
+string(%d) "%d:%d:%d"
+string(8) "08:08:08"
+===DONE===
diff --git a/ext/date/tests/gmstrftime_variation22.phpt b/ext/date/tests/gmstrftime_variation22.phpt
new file mode 100644
index 000000000..213fa5c74
--- /dev/null
+++ b/ext/date/tests/gmstrftime_variation22.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Test gmstrftime() function : usage variation - Checking Preferred date and time representation other than on Windows
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
+ die("skip Test is not valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+
+//array of values to iterate over
+$inputs = array(
+ 'Preferred date and time representation' => "%c",
+ 'Preferred date representation' => "%x",
+ 'Preferred time representation' => "%X",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmstrftime($value) );
+ var_dump( gmstrftime($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmstrftime() : usage variation ***
+
+--Preferred date and time representation--
+string(%d) "%s %d %s %d %d:%d:%d %s GMT"
+string(31) "Fri 08 Aug 2008 08:08:08 AM GMT"
+
+--Preferred date representation--
+string(%d) "%d/%d/%d"
+string(10) "08/08/2008"
+
+--Preferred time representation--
+string(%d) "%d:%d:%d %s"
+string(11) "08:08:08 AM"
+===DONE===
diff --git a/ext/date/tests/gmstrftime_variation3.phpt b/ext/date/tests/gmstrftime_variation3.phpt
new file mode 100644
index 000000000..bc05c7b4c
--- /dev/null
+++ b/ext/date/tests/gmstrftime_variation3.phpt
@@ -0,0 +1,52 @@
+--TEST--
+Test gmstrftime() function : usage variation - Passing week related format strings to format argument.
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+
+//array of values to iterate over
+$inputs = array(
+ 'Abbreviated weekday name' => "%a",
+ 'Full weekday name' => "%A",
+ 'Week number of the year' => "%U",
+ 'Week number of the year in decimal number' => "%W",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmstrftime($value) );
+ var_dump( gmstrftime($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmstrftime() : usage variation ***
+
+--Abbreviated weekday name--
+string(%d) "%s"
+string(3) "Fri"
+
+--Full weekday name--
+string(%d) "%s"
+string(6) "Friday"
+
+--Week number of the year--
+string(%d) "%d"
+string(2) "31"
+
+--Week number of the year in decimal number--
+string(%d) "%d"
+string(2) "31"
+===DONE===
diff --git a/ext/date/tests/gmstrftime_variation4.phpt b/ext/date/tests/gmstrftime_variation4.phpt
new file mode 100644
index 000000000..619e633a9
--- /dev/null
+++ b/ext/date/tests/gmstrftime_variation4.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test gmstrftime() function : usage variation - Passing month related format strings to format argument.
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+
+//array of values to iterate over
+$inputs = array(
+ 'Abbreviated month name' => "%b",
+ 'Full month name' => "%B",
+ 'Month as decimal' => "%m",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmstrftime($value) );
+ var_dump( gmstrftime($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmstrftime() : usage variation ***
+
+--Abbreviated month name--
+string(%d) "%s"
+string(3) "Aug"
+
+--Full month name--
+string(%d) "%s"
+string(6) "August"
+
+--Month as decimal--
+string(%d) "%d"
+string(2) "08"
+===DONE===
diff --git a/ext/date/tests/gmstrftime_variation5.phpt b/ext/date/tests/gmstrftime_variation5.phpt
new file mode 100644
index 000000000..95e3bd239
--- /dev/null
+++ b/ext/date/tests/gmstrftime_variation5.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test gmstrftime() function : usage variation - Passing date related format strings to format argument.
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+
+
+//array of values to iterate over
+$inputs = array(
+ 'Year as decimal number without a century' => "%y",
+ 'Year as decimal number including the century' => "%Y",
+ 'Time zone offset' => "%Z",
+ 'Time zone offset' => "%z",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmstrftime($value) );
+ var_dump( gmstrftime($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmstrftime() : usage variation ***
+
+--Year as decimal number without a century--
+string(%d) "%d"
+string(2) "08"
+
+--Year as decimal number including the century--
+string(%d) "%d"
+string(4) "2008"
+
+--Time zone offset--
+string(%s) "%s"
+string(%s) "%s"
+===DONE===
diff --git a/ext/date/tests/gmstrftime_variation6.phpt b/ext/date/tests/gmstrftime_variation6.phpt
new file mode 100644
index 000000000..92dd1ede3
--- /dev/null
+++ b/ext/date/tests/gmstrftime_variation6.phpt
@@ -0,0 +1,59 @@
+--TEST--
+Test gmstrftime() function : usage variation - Passing time related format strings to format argument.
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+
+//array of values to iterate over
+$inputs = array(
+ 'Hour as decimal by 24-hour format' => "%H",
+ 'Hour as decimal by 12-hour format' => "%I",
+ 'Minute as decimal number' => "%M",
+ 'AM/PM format for a time' => "%p",
+ 'Second as decimal number' => "%S",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmstrftime($value) );
+ var_dump( gmstrftime($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmstrftime() : usage variation ***
+
+--Hour as decimal by 24-hour format--
+string(2) "%d"
+string(2) "08"
+
+--Hour as decimal by 12-hour format--
+string(2) "%d"
+string(2) "08"
+
+--Minute as decimal number--
+string(%d) "%d"
+string(2) "08"
+
+--AM/PM format for a time--
+string(2) "%s"
+string(2) "AM"
+
+--Second as decimal number--
+string(%d) "%d"
+string(2) "08"
+===DONE===
diff --git a/ext/date/tests/gmstrftime_variation7.phpt b/ext/date/tests/gmstrftime_variation7.phpt
new file mode 100644
index 000000000..dd0584b70
--- /dev/null
+++ b/ext/date/tests/gmstrftime_variation7.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Test gmstrftime() function : usage variation - Passing day related format strings to format argument.
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+
+//array of values to iterate over
+$inputs = array(
+ 'Day of the month as a decimal number' => "%d",
+ 'Day of the year as a decimal number' => "%j",
+ 'Day of the week as a decimal number' => "%w"
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmstrftime($value) );
+ var_dump( gmstrftime($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmstrftime() : usage variation ***
+
+--Day of the month as a decimal number--
+string(%d) "%d"
+string(2) "08"
+
+--Day of the year as a decimal number--
+string(%d) "%d"
+string(3) "221"
+
+--Day of the week as a decimal number--
+string(%d) "%d"
+string(1) "5"
+===DONE===
diff --git a/ext/date/tests/gmstrftime_variation8.phpt b/ext/date/tests/gmstrftime_variation8.phpt
new file mode 100644
index 000000000..59057aa17
--- /dev/null
+++ b/ext/date/tests/gmstrftime_variation8.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test gmstrftime() function : usage variation - Passing literal related strings to format argument.
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+
+//array of values to iterate over
+$inputs = array(
+ 'A literal % character' => "%%",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmstrftime($value) );
+ var_dump( gmstrftime($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmstrftime() : usage variation ***
+
+--A literal % character--
+string(1) "%"
+string(1) "%"
+===DONE===
diff --git a/ext/date/tests/gmstrftime_variation9.phpt b/ext/date/tests/gmstrftime_variation9.phpt
new file mode 100644
index 000000000..c9c93fc10
--- /dev/null
+++ b/ext/date/tests/gmstrftime_variation9.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test gmstrftime() function : usage variation - Checking week related formats which are not supported on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') {
+ die("skip Test is valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gmstrftime(string format [, int timestamp])
+ * Description: Format a GMT/UCT time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gmstrftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$timestamp = gmmktime(8, 8, 8, 8, 8, 2008);
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+
+//array of values to iterate over
+$inputs = array(
+ 'The ISO 8601:1988 week number' => "%V",
+ 'Weekday as decimal' => "%u",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gmstrftime($value) );
+ var_dump( gmstrftime($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gmstrftime() : usage variation ***
+
+--The ISO 8601:1988 week number--
+bool(false)
+bool(false)
+
+--Weekday as decimal--
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/date/tests/idate_basic.phpt b/ext/date/tests/idate_basic.phpt
new file mode 100644
index 000000000..944f29f5b
--- /dev/null
+++ b/ext/date/tests/idate_basic.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Test idate() function : basic functionality
+--FILE--
+<?php
+/* Prototype : int idate(string format [, int timestamp])
+ * Description: Format a local time/date as integer
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing idate() : basic functionality ***\n";
+
+// Initialise all required variables
+$format = 'Y';
+
+// Calling idate() with mandatory arguments
+date_default_timezone_set("Asia/Calcutta");
+var_dump( idate($format) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing idate() : basic functionality ***
+int(%d)
+===DONE===
diff --git a/ext/date/tests/idate_variation1.phpt b/ext/date/tests/idate_variation1.phpt
new file mode 100644
index 000000000..c0231a6c0
--- /dev/null
+++ b/ext/date/tests/idate_variation1.phpt
@@ -0,0 +1,301 @@
+--TEST--
+Test idate() function : usage variation - Passing unexpected values to first argument 'format'.
+--FILE--
+<?php
+/* Prototype : int idate(string format [, int timestamp])
+ * Description: Format a local time/date as integer
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing idate() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+date_default_timezone_set("Asia/Calcutta");
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for format
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( idate($value) );
+ var_dump( idate($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing idate() : usage variation ***
+
+--int 0--
+
+Warning: idate(): Unrecognized date format token. in %s on line %d
+bool(false)
+
+Warning: idate(): Unrecognized date format token. in %s on line %d
+bool(false)
+
+--int 1--
+
+Warning: idate(): Unrecognized date format token. in %s on line %d
+bool(false)
+
+Warning: idate(): Unrecognized date format token. in %s on line %d
+bool(false)
+
+--int 12345--
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+--int -12345--
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+--float 10.5--
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+--float -10.5--
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+--float 12.3456789000e10--
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+--float -12.3456789000e10--
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+--float .5--
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+--empty array--
+
+Warning: idate() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Warning: idate() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: idate() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Warning: idate() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: idate() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Warning: idate() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: idate() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Warning: idate() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+--lowercase null--
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+--lowercase true--
+
+Warning: idate(): Unrecognized date format token. in %s on line %d
+bool(false)
+
+Warning: idate(): Unrecognized date format token. in %s on line %d
+bool(false)
+
+--lowercase false--
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+--uppercase TRUE--
+
+Warning: idate(): Unrecognized date format token. in %s on line %d
+bool(false)
+
+Warning: idate(): Unrecognized date format token. in %s on line %d
+bool(false)
+
+--uppercase FALSE--
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+--empty string DQ--
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: idate() expects parameter 1 to be string, object given in %s on line %d
+bool(false)
+
+Warning: idate() expects parameter 1 to be string, object given in %s on line %d
+bool(false)
+
+--undefined var--
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+--unset var--
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+
+Warning: idate(): idate format is one char in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/idate_variation2.phpt b/ext/date/tests/idate_variation2.phpt
new file mode 100644
index 000000000..7dd761d51
--- /dev/null
+++ b/ext/date/tests/idate_variation2.phpt
@@ -0,0 +1,191 @@
+--TEST--
+Test idate() function : usage variation - Passing unexpected values to second optional argument 'timestamp'.
+--FILE--
+<?php
+/* Prototype : int idate(string format [, int timestamp])
+ * Description: Format a local time/date as integer
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing idate() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$format = 'Y';
+date_default_timezone_set("Asia/Calcutta");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( idate($format, $value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing idate() : usage variation ***
+
+--float 10.5--
+int(1970)
+
+--float -10.5--
+int(1970)
+
+--float .5--
+int(1970)
+
+--empty array--
+
+Warning: idate() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: idate() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: idate() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: idate() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+int(1970)
+
+--lowercase null--
+int(1970)
+
+--lowercase true--
+int(1970)
+
+--lowercase false--
+int(1970)
+
+--uppercase TRUE--
+int(1970)
+
+--uppercase FALSE--
+int(1970)
+
+--empty string DQ--
+
+Warning: idate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: idate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: idate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: idate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: idate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: idate() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: idate() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: idate() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+--undefined var--
+int(1970)
+
+--unset var--
+int(1970)
+===DONE===
diff --git a/ext/date/tests/idate_variation3.phpt b/ext/date/tests/idate_variation3.phpt
new file mode 100644
index 000000000..1a2ee1ffd
--- /dev/null
+++ b/ext/date/tests/idate_variation3.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test idate() function : usage variation - Passing higher positive and negetive float values to timestamp.
+--FILE--
+<?php
+/* Prototype : int idate(string format [, int timestamp])
+ * Description: Format a local time/date as integer
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing idate() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$format = 'Y';
+date_default_timezone_set("Asia/Calcutta");
+
+echo "\n-- Testing idate() function with float 12.3456789000e10 to timestamp --\n";
+$timestamp = 12.3456789000e10;
+var_dump( idate($format, $timestamp) );
+
+echo "\n-- Testing idate() function with float -12.3456789000e10 to timestamp --\n";
+$timestamp = -12.3456789000e10;
+var_dump( idate($format, $timestamp) );
+
+?>
+===DONE===
+--EXPECTREGEX--
+\*\*\* Testing idate\(\) : usage variation \*\*\*
+
+-- Testing idate\(\) function with float 12.3456789000e10 to timestamp --
+int\((1935|5882)\)
+
+-- Testing idate\(\) function with float -12.3456789000e10 to timestamp --
+int\((2004|1901|-1943)\)
+===DONE===
diff --git a/ext/date/tests/idate_variation4.phpt b/ext/date/tests/idate_variation4.phpt
new file mode 100644
index 000000000..6aa1735df
--- /dev/null
+++ b/ext/date/tests/idate_variation4.phpt
@@ -0,0 +1,66 @@
+--TEST--
+Test idate() function : usage variation - Passing supported Date format characters to format argument.
+--FILE--
+<?php
+/* Prototype : int idate(string format [, int timestamp])
+ * Description: Format a local time/date as integer
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing idate() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+date_default_timezone_set("Asia/Calcutta");
+
+//array of values to iterate over
+$inputs = array(
+
+ 'Day of the month' => 'd',
+ 'Leap Year' =>'L',
+ 'Month number' => 'm',
+ 'Days in the month' => 't',
+ 'Day of the week' => 'w',
+ 'ISO-8601 week number' => 'W',
+ 'Year (1 or 2 digits)' => 'y',
+ 'Year 4 digits' => 'Y',
+ 'Day of the year' => 'z',
+);
+
+// loop through each element of the array for timestamp
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( idate($value) );
+};
+?>
+===DONE===
+--EXPECTF--
+*** Testing idate() : usage variation ***
+
+--Day of the month--
+int(%d)
+
+--Leap Year--
+int(%d)
+
+--Month number--
+int(%d)
+
+--Days in the month--
+int(%d)
+
+--Day of the week--
+int(%d)
+
+--ISO-8601 week number--
+int(%d)
+
+--Year (1 or 2 digits)--
+int(%d)
+
+--Year 4 digits--
+int(%d)
+
+--Day of the year--
+int(%d)
+===DONE===
diff --git a/ext/date/tests/idate_variation5.phpt b/ext/date/tests/idate_variation5.phpt
new file mode 100644
index 000000000..e70509c59
--- /dev/null
+++ b/ext/date/tests/idate_variation5.phpt
@@ -0,0 +1,62 @@
+--TEST--
+Test idate() function : usage variation - Passing supported Time format characters to format argument.
+--FILE--
+<?php
+/* Prototype : int idate(string format [, int timestamp])
+ * Description: Format a local time/date as integer
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing idate() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+date_default_timezone_set("Asia/Calcutta");
+
+//array of values to iterate over
+$inputs = array(
+
+ 'Internet Time' => 'B',
+ '12 hour format' => 'h',
+ '24 hour format' => 'H',
+ 'Minutes' => 'i',
+ 'DST Activated' => 'I',
+ 'Seconds' => 's',
+ 'Seconds since Unix Epoch' => 'U',
+ 'Time zone offset' => 'Z'
+);
+
+// loop through each element of the array for timestamp
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( idate($value) );
+};
+?>
+===DONE===
+--EXPECTF--
+*** Testing idate() : usage variation ***
+
+--Internet Time--
+int(%d)
+
+--12 hour format--
+int(%d)
+
+--24 hour format--
+int(%d)
+
+--Minutes--
+int(%d)
+
+--DST Activated--
+int(%d)
+
+--Seconds--
+int(%d)
+
+--Seconds since Unix Epoch--
+int(%d)
+
+--Time zone offset--
+int(%d)
+===DONE===
diff --git a/ext/date/tests/idate_variation6.phpt b/ext/date/tests/idate_variation6.phpt
new file mode 100644
index 000000000..161a80d51
--- /dev/null
+++ b/ext/date/tests/idate_variation6.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test idate() function : usage variation - Checking return of year(1 or 2 digits) format starting with zero and nonzero.
+--FILE--
+<?php
+/* Prototype : int idate(string format [, int timestamp])
+ * Description: Format a local time/date as integer
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing idate() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+date_default_timezone_set("Asia/Calcutta");
+$format = 'y';
+
+echo "\n-- Testing idate() function for 2 digit year having no zero as starting number --\n";
+$timestamp = mktime(8, 8, 8, 8, 8, 1970);
+var_dump( idate($format, $timestamp) );
+
+echo "\n-- Testing idate() function for 2 digit year having zero as starting number --\n";
+$timestamp = mktime(8, 8, 8, 8, 8, 2001);
+var_dump( idate($format, $timestamp) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing idate() : usage variation ***
+
+-- Testing idate() function for 2 digit year having no zero as starting number --
+int(70)
+
+-- Testing idate() function for 2 digit year having zero as starting number --
+int(1)
+===DONE===
diff --git a/ext/date/tests/localtime_basic.phpt b/ext/date/tests/localtime_basic.phpt
new file mode 100644
index 000000000..fcfd636fb
--- /dev/null
+++ b/ext/date/tests/localtime_basic.phpt
@@ -0,0 +1,93 @@
+--TEST--
+Test localtime() function : basic functionality
+--FILE--
+<?php
+/* Prototype : array localtime([int timestamp [, bool associative_array]])
+ * Description: Returns the results of the C system call localtime as an associative array
+ * if the associative_array argument is set to 1 other wise it is a regular array
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing localtime() : basic functionality ***\n";
+
+date_default_timezone_set("UTC");
+
+// Initialise all required variables
+$timestamp = 10;
+$associative_array = true;
+
+// Calling localtime() with all possible arguments
+var_dump( localtime($timestamp, $associative_array) );
+
+// Calling localtime() with possible optional arguments
+var_dump( localtime($timestamp) );
+
+// Calling localtime() with mandatory arguments
+var_dump( localtime() );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing localtime() : basic functionality ***
+array(9) {
+ ["tm_sec"]=>
+ int(10)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+array(9) {
+ [0]=>
+ int(10)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+array(9) {
+ [0]=>
+ int(%d)
+ [1]=>
+ int(%d)
+ [2]=>
+ int(%d)
+ [3]=>
+ int(%d)
+ [4]=>
+ int(%d)
+ [5]=>
+ int(%d)
+ [6]=>
+ int(%d)
+ [7]=>
+ int(%d)
+ [8]=>
+ int(%d)
+}
+===DONE===
diff --git a/ext/date/tests/localtime_variation1.phpt b/ext/date/tests/localtime_variation1.phpt
new file mode 100644
index 000000000..472b32b60
--- /dev/null
+++ b/ext/date/tests/localtime_variation1.phpt
@@ -0,0 +1,658 @@
+--TEST--
+Test localtime() function : usage variation - Passing unexpected values to first argument 'timestamp'.
+--FILE--
+<?php
+/* Prototype : array localtime([int timestamp [, bool associative_array]])
+ * Description: Returns the results of the C system call localtime as an associative array
+ * if the associative_array argument is set to 1 other wise it is a regular array
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing localtime() : usage variation ***\n";
+
+date_default_timezone_set("UTC");
+// Initialise function arguments not being substituted (if any)
+$is_associative = true;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( localtime($value) );
+ var_dump( localtime($value, $is_associative) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing localtime() : usage variation ***
+
+--float 10.5--
+array(9) {
+ [0]=>
+ int(10)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+array(9) {
+ ["tm_sec"]=>
+ int(10)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--float -10.5--
+array(9) {
+ [0]=>
+ int(50)
+ [1]=>
+ int(59)
+ [2]=>
+ int(23)
+ [3]=>
+ int(31)
+ [4]=>
+ int(11)
+ [5]=>
+ int(69)
+ [6]=>
+ int(3)
+ [7]=>
+ int(364)
+ [8]=>
+ int(0)
+}
+array(9) {
+ ["tm_sec"]=>
+ int(50)
+ ["tm_min"]=>
+ int(59)
+ ["tm_hour"]=>
+ int(23)
+ ["tm_mday"]=>
+ int(31)
+ ["tm_mon"]=>
+ int(11)
+ ["tm_year"]=>
+ int(69)
+ ["tm_wday"]=>
+ int(3)
+ ["tm_yday"]=>
+ int(364)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--float .5--
+array(9) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+array(9) {
+ ["tm_sec"]=>
+ int(0)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--empty array--
+
+Warning: localtime() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: localtime() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: localtime() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: localtime() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: localtime() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: localtime() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: localtime() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: localtime() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+array(9) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+array(9) {
+ ["tm_sec"]=>
+ int(0)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--lowercase null--
+array(9) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+array(9) {
+ ["tm_sec"]=>
+ int(0)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--lowercase true--
+array(9) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+array(9) {
+ ["tm_sec"]=>
+ int(1)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--lowercase false--
+array(9) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+array(9) {
+ ["tm_sec"]=>
+ int(0)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--uppercase TRUE--
+array(9) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+array(9) {
+ ["tm_sec"]=>
+ int(1)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--uppercase FALSE--
+array(9) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+array(9) {
+ ["tm_sec"]=>
+ int(0)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--empty string DQ--
+
+Warning: localtime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: localtime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: localtime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: localtime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: localtime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: localtime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: localtime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: localtime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: localtime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: localtime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: localtime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+Warning: localtime() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: localtime() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+Warning: localtime() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: localtime() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+Warning: localtime() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+
+--undefined var--
+array(9) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+array(9) {
+ ["tm_sec"]=>
+ int(0)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--unset var--
+array(9) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+array(9) {
+ ["tm_sec"]=>
+ int(0)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+===DONE===
diff --git a/ext/date/tests/localtime_variation2.phpt b/ext/date/tests/localtime_variation2.phpt
new file mode 100644
index 000000000..a2048206a
--- /dev/null
+++ b/ext/date/tests/localtime_variation2.phpt
@@ -0,0 +1,643 @@
+--TEST--
+Test localtime() function : usage variation - Passing unexpected values to second argument 'associative_array'.
+--FILE--
+<?php
+/* Prototype : array localtime([int timestamp [, bool associative_array]])
+ * Description: Returns the results of the C system call localtime as an associative array
+ * if the associative_array argument is set to 1 other wise it is a regular array
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing localtime() : usage variation ***\n";
+
+date_default_timezone_set("UTC");
+// Initialise function arguments not being substituted (if any)
+$timestamp = 10;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for associative_array
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( localtime($timestamp, $value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing localtime() : usage variation ***
+
+--int 0--
+array(9) {
+ [0]=>
+ int(10)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+
+--int 1--
+array(9) {
+ ["tm_sec"]=>
+ int(10)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--int 12345--
+array(9) {
+ ["tm_sec"]=>
+ int(10)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--int -12345--
+array(9) {
+ ["tm_sec"]=>
+ int(10)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--float 10.5--
+array(9) {
+ ["tm_sec"]=>
+ int(10)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--float -10.5--
+array(9) {
+ ["tm_sec"]=>
+ int(10)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--float 12.3456789000e10--
+array(9) {
+ ["tm_sec"]=>
+ int(10)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--float -12.3456789000e10--
+array(9) {
+ ["tm_sec"]=>
+ int(10)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--float .5--
+array(9) {
+ ["tm_sec"]=>
+ int(10)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--empty array--
+
+Warning: localtime() expects parameter 2 to be boolean, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: localtime() expects parameter 2 to be boolean, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: localtime() expects parameter 2 to be boolean, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: localtime() expects parameter 2 to be boolean, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+array(9) {
+ [0]=>
+ int(10)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+
+--lowercase null--
+array(9) {
+ [0]=>
+ int(10)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+
+--lowercase true--
+array(9) {
+ ["tm_sec"]=>
+ int(10)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--lowercase false--
+array(9) {
+ [0]=>
+ int(10)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+
+--uppercase TRUE--
+array(9) {
+ ["tm_sec"]=>
+ int(10)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--uppercase FALSE--
+array(9) {
+ [0]=>
+ int(10)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+
+--empty string DQ--
+array(9) {
+ [0]=>
+ int(10)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+
+--empty string SQ--
+array(9) {
+ [0]=>
+ int(10)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+
+--string DQ--
+array(9) {
+ ["tm_sec"]=>
+ int(10)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--string SQ--
+array(9) {
+ ["tm_sec"]=>
+ int(10)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--mixed case string--
+array(9) {
+ ["tm_sec"]=>
+ int(10)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--heredoc--
+array(9) {
+ ["tm_sec"]=>
+ int(10)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--instance of classWithToString--
+
+Warning: localtime() expects parameter 2 to be boolean, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: localtime() expects parameter 2 to be boolean, object given in %s on line %d
+bool(false)
+
+--undefined var--
+array(9) {
+ [0]=>
+ int(10)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+
+--unset var--
+array(9) {
+ [0]=>
+ int(10)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+===DONE===
diff --git a/ext/date/tests/localtime_variation3.phpt b/ext/date/tests/localtime_variation3.phpt
new file mode 100644
index 000000000..d941e3891
--- /dev/null
+++ b/ext/date/tests/localtime_variation3.phpt
@@ -0,0 +1,116 @@
+--TEST--
+Test localtime() function : usage variation - Passing higher positive and negetive float values to timestamp.
+--FILE--
+<?php
+/* Prototype : array localtime([int timestamp [, bool associative_array]])
+ * Description: Returns the results of the C system call localtime as an associative array
+ * if the associative_array argument is set to 1 other wise it is a regular array
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing localtime() : usage variation ***\n";
+
+date_default_timezone_set("UTC");
+// Initialise function arguments not being substituted (if any)
+$is_associative = true;
+
+echo "\n-- Testing localtime() function with 'float 12.3456789000e10' to timestamp --\n";
+$timestamp = 12.3456789000e10;
+var_dump( localtime($timestamp) );
+var_dump( localtime($timestamp, $is_associative) );
+
+echo "\n-- Testing localtime() function with 'float -12.3456789000e10' to timestamp --\n";
+$timestamp = -12.3456789000e10;
+var_dump( localtime($timestamp) );
+var_dump( localtime($timestamp, $is_associative) );
+
+?>
+===DONE===
+--EXPECTREGEX--
+\*\*\* Testing localtime\(\) : usage variation \*\*\*
+
+-- Testing localtime\(\) function with 'float 12.3456789000e10' to timestamp --
+array\(9\) {
+ \[0\]=>
+ int\((16|0)\)
+ \[1\]=>
+ int\((50|30)\)
+ \[2\]=>
+ int\((4|0)\)
+ \[3\]=>
+ int\((26|11)\)
+ \[4\]=>
+ int\(2\)
+ \[5\]=>
+ int\((35|3982)\)
+ \[6\]=>
+ int\((2|6)\)
+ \[7\]=>
+ int\((84|69)\)
+ \[8\]=>
+ int\(0\)
+}
+array\(9\) {
+ \["tm_sec"\]=>
+ int\((16|0)\)
+ \["tm_min"\]=>
+ int\((50|30)\)
+ \["tm_hour"\]=>
+ int\((4|0)\)
+ \["tm_mday"\]=>
+ int\((26|11)\)
+ \["tm_mon"\]=>
+ int\(2\)
+ \["tm_year"\]=>
+ int\((35|3982)\)
+ \["tm_wday"\]=>
+ int\((2|6)\)
+ \["tm_yday"\]=>
+ int\((84|69)\)
+ \["tm_isdst"\]=>
+ int\(0\)
+}
+
+-- Testing localtime\(\) function with 'float -12.3456789000e10' to timestamp --
+array\(9\) {
+ \[0\]=>
+ int\((44|52|0)\)
+ \[1\]=>
+ int\((9|45|30)\)
+ \[2\]=>
+ int\((19|20|23)\)
+ \[3\]=>
+ int\((8|13|22)\)
+ \[4\]=>
+ int\((9|11)\)
+ \[5\]=>
+ int\((104|1|-3843)\)
+ \[6\]=>
+ int\((5|-5)\)
+ \[7\]=>
+ int\((281|346|294)\)
+ \[8\]=>
+ int\(0\)
+}
+array\(9\) {
+ \["tm_sec"\]=>
+ int\((44|52|0)\)
+ \["tm_min"\]=>
+ int\((9|45|30)\)
+ \["tm_hour"\]=>
+ int\((19|20|23)\)
+ \["tm_mday"\]=>
+ int\((8|13|22)\)
+ \["tm_mon"\]=>
+ int\((9|11)\)
+ \["tm_year"\]=>
+ int\((104|1|-3843)\)
+ \["tm_wday"\]=>
+ int\((5|-5)\)
+ \["tm_yday"\]=>
+ int\((281|346|294)\)
+ \["tm_isdst"\]=>
+ int\(0\)
+}
+===DONE===
diff --git a/ext/date/tests/localtime_variation4.phpt b/ext/date/tests/localtime_variation4.phpt
new file mode 100644
index 000000000..2796c22d5
--- /dev/null
+++ b/ext/date/tests/localtime_variation4.phpt
@@ -0,0 +1,162 @@
+--TEST--
+Test localtime() function : usage variation - Passing octal values to timestamp.
+--FILE--
+<?php
+/* Prototype : array localtime([int timestamp [, bool associative_array]])
+ * Description: Returns the results of the C system call localtime as an associative array
+ * if the associative_array argument is set to 1 other wise it is a regular array
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing localtime() : usage variation ***\n";
+
+date_default_timezone_set("UTC");
+// Initialise function arguments not being substituted (if any)
+$is_associative = true;
+
+//array of values to iterate over
+$inputs = array(
+
+ 'Octal 0' => 00,
+ 'Octal 10' => 012,
+ 'Octal -10' => -012
+);
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( localtime($value) );
+ var_dump( localtime($value, $is_associative) );
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing localtime() : usage variation ***
+
+--Octal 0--
+array(9) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+array(9) {
+ ["tm_sec"]=>
+ int(0)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--Octal 10--
+array(9) {
+ [0]=>
+ int(10)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+array(9) {
+ ["tm_sec"]=>
+ int(10)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--Octal -10--
+array(9) {
+ [0]=>
+ int(50)
+ [1]=>
+ int(59)
+ [2]=>
+ int(23)
+ [3]=>
+ int(31)
+ [4]=>
+ int(11)
+ [5]=>
+ int(69)
+ [6]=>
+ int(3)
+ [7]=>
+ int(364)
+ [8]=>
+ int(0)
+}
+array(9) {
+ ["tm_sec"]=>
+ int(50)
+ ["tm_min"]=>
+ int(59)
+ ["tm_hour"]=>
+ int(23)
+ ["tm_mday"]=>
+ int(31)
+ ["tm_mon"]=>
+ int(11)
+ ["tm_year"]=>
+ int(69)
+ ["tm_wday"]=>
+ int(3)
+ ["tm_yday"]=>
+ int(364)
+ ["tm_isdst"]=>
+ int(0)
+}
+===DONE===
diff --git a/ext/date/tests/localtime_variation5.phpt b/ext/date/tests/localtime_variation5.phpt
new file mode 100644
index 000000000..883e34887
--- /dev/null
+++ b/ext/date/tests/localtime_variation5.phpt
@@ -0,0 +1,162 @@
+--TEST--
+Test localtime() function : usage variation - Passing hexa decimal values to timestamp.
+--FILE--
+<?php
+/* Prototype : array localtime([int timestamp [, bool associative_array]])
+ * Description: Returns the results of the C system call localtime as an associative array
+ * if the associative_array argument is set to 1 other wise it is a regular array
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing localtime() : usage variation ***\n";
+
+date_default_timezone_set("UTC");
+// Initialise function arguments not being substituted (if any)
+$is_associative = true;
+
+//array of values to iterate over
+$inputs = array(
+
+ 'Hexa-decimal 0' => 0x0,
+ 'Hexa-decimal 10' => 0xA,
+ 'Hexa-decimal -10' => -0XA
+);
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( localtime($value) );
+ var_dump( localtime($value, $is_associative) );
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing localtime() : usage variation ***
+
+--Hexa-decimal 0--
+array(9) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+array(9) {
+ ["tm_sec"]=>
+ int(0)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--Hexa-decimal 10--
+array(9) {
+ [0]=>
+ int(10)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(0)
+ [5]=>
+ int(70)
+ [6]=>
+ int(4)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+}
+array(9) {
+ ["tm_sec"]=>
+ int(10)
+ ["tm_min"]=>
+ int(0)
+ ["tm_hour"]=>
+ int(0)
+ ["tm_mday"]=>
+ int(1)
+ ["tm_mon"]=>
+ int(0)
+ ["tm_year"]=>
+ int(70)
+ ["tm_wday"]=>
+ int(4)
+ ["tm_yday"]=>
+ int(0)
+ ["tm_isdst"]=>
+ int(0)
+}
+
+--Hexa-decimal -10--
+array(9) {
+ [0]=>
+ int(50)
+ [1]=>
+ int(59)
+ [2]=>
+ int(23)
+ [3]=>
+ int(31)
+ [4]=>
+ int(11)
+ [5]=>
+ int(69)
+ [6]=>
+ int(3)
+ [7]=>
+ int(364)
+ [8]=>
+ int(0)
+}
+array(9) {
+ ["tm_sec"]=>
+ int(50)
+ ["tm_min"]=>
+ int(59)
+ ["tm_hour"]=>
+ int(23)
+ ["tm_mday"]=>
+ int(31)
+ ["tm_mon"]=>
+ int(11)
+ ["tm_year"]=>
+ int(69)
+ ["tm_wday"]=>
+ int(3)
+ ["tm_yday"]=>
+ int(364)
+ ["tm_isdst"]=>
+ int(0)
+}
+===DONE===
diff --git a/ext/date/tests/microtime_basic.phpt b/ext/date/tests/microtime_basic.phpt
new file mode 100644
index 000000000..88c495229
--- /dev/null
+++ b/ext/date/tests/microtime_basic.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Test return type and value for expected input microtime()
+--FILE--
+<?php
+/*
+ * proto mixed microtime([bool get_as_float])
+ * Function is implemented in ext/standard/microtime.c
+*/
+
+var_dump(microtime());
+var_dump(microtime(true));
+var_dump(microtime(false));
+
+?>
+===DONE===
+--EXPECTF--
+string(%d) "%s %s"
+float(%s)
+string(%d) "%s %s"
+===DONE===
diff --git a/ext/date/tests/microtime_error.phpt b/ext/date/tests/microtime_error.phpt
new file mode 100644
index 000000000..400df6177
--- /dev/null
+++ b/ext/date/tests/microtime_error.phpt
@@ -0,0 +1,72 @@
+--TEST--
+Test wrong number of arguments for microtime()
+--FILE--
+<?php
+/*
+ * proto mixed microtime([bool get_as_float])
+ * Function is implemented in ext/standard/microtime.c
+*/
+
+$opt_arg_0 = true;
+$extra_arg = 1;
+
+echo "\n-- Too many arguments --\n";
+var_dump(microtime($opt_arg_0, $extra_arg));
+
+
+echo "\n-- Bad Arg types --\n";
+
+$bad_args = array(null,
+ 1.5,
+ "hello",
+ array('k'=>'v', array(0)),
+ new stdClass,
+ 1);
+foreach ($bad_args as $bad_arg) {
+ echo "\n--> bad arg: ";
+ var_dump($bad_arg);
+ var_dump(microtime($bad_arg));
+}
+
+?>
+===DONE===
+--EXPECTF--
+
+-- Too many arguments --
+
+Warning: microtime() expects at most 1 parameter, 2 given in %s on line 11
+NULL
+
+-- Bad Arg types --
+
+--> bad arg: NULL
+string(%d) "%s %s"
+
+--> bad arg: float(1.5)
+float(%s)
+
+--> bad arg: string(5) "hello"
+float(%s)
+
+--> bad arg: array(2) {
+ ["k"]=>
+ string(1) "v"
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+}
+
+Warning: microtime() expects parameter 1 to be boolean, array given in %s on line 25
+NULL
+
+--> bad arg: object(stdClass)#%d (0) {
+}
+
+Warning: microtime() expects parameter 1 to be boolean, object given in %s on line 25
+NULL
+
+--> bad arg: int(1)
+float(%s)
+===DONE===
diff --git a/ext/date/tests/mktime-3-64bit.phpt b/ext/date/tests/mktime-3-64bit.phpt
index bb3fb2df7..a3649cd14 100644
--- a/ext/date/tests/mktime-3-64bit.phpt
+++ b/ext/date/tests/mktime-3-64bit.phpt
@@ -7,7 +7,7 @@ error_reporting=2047
--FILE--
<?php
$tzs = array("America/Toronto", "Europe/Oslo");
-$years = array(0, 69, 70, 71, 99, 100, 105, 1900, 1901, 1902, 1999, 2000, 2001);
+$years = array(0, 69, 70, 71, 99, 100, 101, 105, 110, 1900, 1901, 1902, 1999, 2000, 2001);
foreach ($tzs as $tz) {
echo $tz, "\n";
@@ -32,7 +32,9 @@ Y: 70 - January 1970-01-01T01:01:01-0500
Y: 71 - January 1971-01-01T01:01:01-0500
Y: 99 - January 1999-01-01T01:01:01-0500
Y: 100 - January 2000-01-01T01:01:01-0500
-Y: 105 - January 2005-01-01T01:01:01-0500
+Y: 101 - January 0101-01-01T01:01:01-0500
+Y: 105 - January 0105-01-01T01:01:01-0500
+Y: 110 - January 0110-01-01T01:01:01-0500
Y: 1900 - January 1900-01-01T01:01:01-0500
Y: 1901 - January 1901-01-01T01:01:01-0500
Y: 1902 - January 1902-01-01T01:01:01-0500
@@ -47,7 +49,9 @@ Y: 70 - January 1970-01-01T01:01:01+0100
Y: 71 - January 1971-01-01T01:01:01+0100
Y: 99 - January 1999-01-01T01:01:01+0100
Y: 100 - January 2000-01-01T01:01:01+0100
-Y: 105 - January 2005-01-01T01:01:01+0100
+Y: 101 - January 0101-01-01T01:01:01+0100
+Y: 105 - January 0105-01-01T01:01:01+0100
+Y: 110 - January 0110-01-01T01:01:01+0100
Y: 1900 - January 1900-01-01T01:01:01+0100
Y: 1901 - January 1901-01-01T01:01:01+0100
Y: 1902 - January 1902-01-01T01:01:01+0100
diff --git a/ext/date/tests/mktime-3.phpt b/ext/date/tests/mktime-3.phpt
index 3201def6c..4347826aa 100644
--- a/ext/date/tests/mktime-3.phpt
+++ b/ext/date/tests/mktime-3.phpt
@@ -24,6 +24,7 @@ foreach ($tzs as $tz) {
echo "\n";
}
?>
+===Done===
--EXPECT--
America/Toronto
Y: 0 - January 2000-01-01T01:01:01-0500
@@ -32,7 +33,7 @@ Y: 70 - January 1970-01-01T01:01:01-0500
Y: 71 - January 1971-01-01T01:01:01-0500
Y: 99 - January 1999-01-01T01:01:01-0500
Y: 100 - January 2000-01-01T01:01:01-0500
-Y: 105 - January 2005-01-01T01:01:01-0500
+Y: 105 - out of range
Y: 1900 - out of range
Y: 1901 - out of range
Y: 1902 - January 1902-01-01T01:01:01-0500
@@ -47,10 +48,12 @@ Y: 70 - January 1970-01-01T01:01:01+0100
Y: 71 - January 1971-01-01T01:01:01+0100
Y: 99 - January 1999-01-01T01:01:01+0100
Y: 100 - January 2000-01-01T01:01:01+0100
-Y: 105 - January 2005-01-01T01:01:01+0100
+Y: 105 - out of range
Y: 1900 - out of range
Y: 1901 - out of range
Y: 1902 - January 1902-01-01T01:01:01+0100
Y: 1999 - January 1999-01-01T01:01:01+0100
Y: 2000 - January 2000-01-01T01:01:01+0100
Y: 2001 - January 2001-01-01T01:01:01+0100
+
+===Done=== \ No newline at end of file
diff --git a/ext/date/tests/strftime_basic.phpt b/ext/date/tests/strftime_basic.phpt
new file mode 100644
index 000000000..07f22af82
--- /dev/null
+++ b/ext/date/tests/strftime_basic.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Test strftime() function : basic functionality
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : basic functionality ***\n";
+
+date_default_timezone_set("Asia/Calcutta");
+// Initialise all required variables
+$format = '%b %d %Y %H:%M:%S';
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+// Calling strftime() with all possible arguments
+var_dump( strftime($format, $timestamp) );
+
+// Calling strftime() with mandatory arguments
+var_dump( strftime($format) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strftime() : basic functionality ***
+string(20) "Aug 08 2008 08:08:08"
+string(%d) "%s %d %d %d:%d:%d"
+===DONE===
diff --git a/ext/date/tests/strftime_error.phpt b/ext/date/tests/strftime_error.phpt
new file mode 100644
index 000000000..19663798e
--- /dev/null
+++ b/ext/date/tests/strftime_error.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Test strftime() function : error conditions
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : error conditions ***\n";
+
+date_default_timezone_set("Asia/Calcutta");
+//Test strftime with one more than the expected number of arguments
+echo "\n-- Testing strftime() function with more than expected no. of arguments --\n";
+$format = '%b %d %Y %H:%M:%S';
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+$extra_arg = 10;
+var_dump( strftime($format, $timestamp, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strftime() : error conditions ***
+
+-- Testing strftime() function with more than expected no. of arguments --
+
+Warning: strftime() expects at most 2 parameters, 3 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/date/tests/strftime_variation1.phpt b/ext/date/tests/strftime_variation1.phpt
new file mode 100644
index 000000000..4e2b21730
--- /dev/null
+++ b/ext/date/tests/strftime_variation1.phpt
@@ -0,0 +1,222 @@
+--TEST--
+Test strftime() function : usage variation - Passing unexpected values to first argument 'format'.
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : usage variation ***\n";
+
+date_default_timezone_set("Asia/Calcutta");
+
+// Initialise function arguments not being substituted (if any)
+$timestamp = 10;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for format
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( strftime($value) );
+ var_dump( strftime($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strftime() : usage variation ***
+
+--int 0--
+string(1) "0"
+string(1) "0"
+
+--int 1--
+string(1) "1"
+string(1) "1"
+
+--int 12345--
+string(5) "12345"
+string(5) "12345"
+
+--int -12345--
+string(6) "-12345"
+string(6) "-12345"
+
+--float 10.5--
+string(4) "10.5"
+string(4) "10.5"
+
+--float -10.5--
+string(5) "-10.5"
+string(5) "-10.5"
+
+--float 12.3456789000e10--
+string(12) "123456789000"
+string(12) "123456789000"
+
+--float -12.3456789000e10--
+string(13) "-123456789000"
+string(13) "-123456789000"
+
+--float .5--
+string(3) "0.5"
+string(3) "0.5"
+
+--empty array--
+
+Warning: strftime() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Warning: strftime() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: strftime() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Warning: strftime() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: strftime() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Warning: strftime() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: strftime() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Warning: strftime() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+bool(false)
+bool(false)
+
+--lowercase null--
+bool(false)
+bool(false)
+
+--lowercase true--
+string(1) "1"
+string(1) "1"
+
+--lowercase false--
+bool(false)
+bool(false)
+
+--uppercase TRUE--
+string(1) "1"
+string(1) "1"
+
+--uppercase FALSE--
+bool(false)
+bool(false)
+
+--empty string DQ--
+bool(false)
+bool(false)
+
+--empty string SQ--
+bool(false)
+bool(false)
+
+--instance of classWithToString--
+string(14) "Class A object"
+string(14) "Class A object"
+
+--instance of classWithoutToString--
+
+Warning: strftime() expects parameter 1 to be string, object given in %s on line %d
+bool(false)
+
+Warning: strftime() expects parameter 1 to be string, object given in %s on line %d
+bool(false)
+
+--undefined var--
+bool(false)
+bool(false)
+
+--unset var--
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/date/tests/strftime_variation10.phpt b/ext/date/tests/strftime_variation10.phpt
new file mode 100644
index 000000000..7d2a1b8fc
--- /dev/null
+++ b/ext/date/tests/strftime_variation10.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test strftime() function : usage variation - Checking week related formats which are supported other than on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
+ die("skip Test is not valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+//array of values to iterate over
+$inputs = array(
+ 'The ISO 8601:1988 week number' => "%V",
+ 'Weekday as decimal' => "%u",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( strftime($value) );
+ var_dump( strftime($value, $timestamp) );
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strftime() : usage variation ***
+
+--The ISO 8601:1988 week number--
+string(%d) "%d"
+string(2) "32"
+
+--Weekday as decimal--
+string(%d) "%d"
+string(1) "5"
+===DONE===
diff --git a/ext/date/tests/strftime_variation11.phpt b/ext/date/tests/strftime_variation11.phpt
new file mode 100644
index 000000000..a063f0ad2
--- /dev/null
+++ b/ext/date/tests/strftime_variation11.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test strftime() function : usage variation - Checking month related formats which are not supported on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') {
+ die("skip Test is valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+echo "\n-- Testing strftime() function with Abbreviated month name format %h --\n";
+$format = "%h";
+var_dump( strftime($format) );
+var_dump( strftime($format, $timestamp) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strftime() : usage variation ***
+
+-- Testing strftime() function with Abbreviated month name format %h --
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/date/tests/strftime_variation12.phpt b/ext/date/tests/strftime_variation12.phpt
new file mode 100644
index 000000000..b798f428f
--- /dev/null
+++ b/ext/date/tests/strftime_variation12.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test strftime() function : usage variation - Checking month related formats which are supported other than on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
+ die("skip Test is not valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+echo "\n-- Testing strftime() function with Abbreviated month name format %h --\n";
+$format = "%h";
+var_dump( strftime($format) );
+var_dump( strftime($format, $timestamp) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strftime() : usage variation ***
+
+-- Testing strftime() function with Abbreviated month name format %h --
+string(%d) "%s"
+string(3) "Aug"
+===DONE===
diff --git a/ext/date/tests/strftime_variation13.phpt b/ext/date/tests/strftime_variation13.phpt
new file mode 100644
index 000000000..58ad283ff
--- /dev/null
+++ b/ext/date/tests/strftime_variation13.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test strftime() function : usage variation - Checking date related formats which are not supported on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') {
+ die("skip Test is valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+//array of values to iterate over
+$inputs = array(
+ 'Century number' => "%C",
+ 'Month Date Year' => "%D",
+ 'Year with century' => "%G",
+ 'Year without century' => "%g",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( strftime($value) );
+ var_dump( strftime($value, $timestamp) );
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strftime() : usage variation ***
+
+--Century number--
+bool(false)
+bool(false)
+
+--Month Date Year--
+bool(false)
+bool(false)
+
+--Year with century--
+bool(false)
+bool(false)
+
+--Year without century--
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/date/tests/strftime_variation14.phpt b/ext/date/tests/strftime_variation14.phpt
new file mode 100644
index 000000000..7ccb7d283
--- /dev/null
+++ b/ext/date/tests/strftime_variation14.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test strftime() function : usage variation - Checking date related formats which are supported other than on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
+ die("skip Test is not valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+//array of values to iterate over
+$inputs = array(
+ 'Century number' => "%C",
+ 'Month Date Year' => "%D",
+ 'Year with century' => "%G",
+ 'Year without century' => "%g",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( strftime($value) );
+ var_dump( strftime($value, $timestamp) );
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strftime() : usage variation ***
+
+--Century number--
+string(%d) "%d"
+string(2) "20"
+
+--Month Date Year--
+string(%d) "%d/%d/%d"
+string(8) "08/08/08"
+
+--Year with century--
+string(%d) "%d"
+string(4) "2008"
+
+--Year without century--
+string(%d) "%d"
+string(2) "08"
+===DONE===
diff --git a/ext/date/tests/strftime_variation15.phpt b/ext/date/tests/strftime_variation15.phpt
new file mode 100644
index 000000000..5b2946bf5
--- /dev/null
+++ b/ext/date/tests/strftime_variation15.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Test strftime() function : usage variation - Checking time related formats which are not supported on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') {
+ die("skip Test is valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+//array of values to iterate over
+$inputs = array(
+ 'Time in a.m/p.m notation' => "%r",
+ 'Time in 24 hour notation' => "%R",
+ 'Current time %H:%M:%S format' => "%T",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( strftime($value) );
+ var_dump( strftime($value, $timestamp) );
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strftime() : usage variation ***
+
+--Time in a.m/p.m notation--
+bool(false)
+bool(false)
+
+--Time in 24 hour notation--
+bool(false)
+bool(false)
+
+--Current time %H:%M:%S format--
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/date/tests/strftime_variation16.phpt b/ext/date/tests/strftime_variation16.phpt
new file mode 100644
index 000000000..5103b3add
--- /dev/null
+++ b/ext/date/tests/strftime_variation16.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Test strftime() function : usage variation - Checking time related formats which are supported other than on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
+ die("skip Test is not valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+//array of values to iterate over
+$inputs = array(
+ 'Time in a.m/p.m notation' => "%r",
+ 'Time in 24 hour notation' => "%R",
+ 'Current time %H:%M:%S format' => "%T",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( strftime($value) );
+ var_dump( strftime($value, $timestamp) );
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strftime() : usage variation ***
+
+--Time in a.m/p.m notation--
+string(%d) "%d:%d:%d %s"
+string(11) "08:08:08 AM"
+
+--Time in 24 hour notation--
+string(%d) "%d:%d"
+string(5) "08:08"
+
+--Current time %H:%M:%S format--
+string(%d) "%d:%d:%d"
+string(8) "08:08:08"
+===DONE===
diff --git a/ext/date/tests/strftime_variation17.phpt b/ext/date/tests/strftime_variation17.phpt
new file mode 100644
index 000000000..90b3269e8
--- /dev/null
+++ b/ext/date/tests/strftime_variation17.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test strftime() function : usage variation - Checking day related formats which are not supported on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') {
+ die("skip Test is valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+echo "\n-- Testing strftime() function with Day of the month as decimal single digit format --\n";
+$format = "%e";
+var_dump( strftime($format) );
+var_dump( strftime($format, $timestamp) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing strftime() : usage variation ***
+
+-- Testing strftime() function with Day of the month as decimal single digit format --
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/date/tests/strftime_variation18.phpt b/ext/date/tests/strftime_variation18.phpt
new file mode 100644
index 000000000..4340325df
--- /dev/null
+++ b/ext/date/tests/strftime_variation18.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test strftime() function : usage variation - Checking day related formats which are supported other than on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
+ die("skip Test is not valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+echo "\n-- Testing strftime() function with Day of the month as decimal single digit format --\n";
+$format = "%e";
+var_dump( strftime($format) );
+var_dump( strftime($format, $timestamp) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing strftime() : usage variation ***
+
+-- Testing strftime() function with Day of the month as decimal single digit format --
+string(%d) "%s"
+string(2) " 8"
+===DONE===
diff --git a/ext/date/tests/strftime_variation19.phpt b/ext/date/tests/strftime_variation19.phpt
new file mode 100644
index 000000000..b41607719
--- /dev/null
+++ b/ext/date/tests/strftime_variation19.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test strftime() function : usage variation - Checking newline and tab formats which are not supported on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') {
+ die("skip Test is valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+//array of values to iterate over
+$inputs = array(
+ 'Newline character' => "%n",
+ 'Tab character' => "%t"
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( strftime($value) );
+ var_dump( strftime($value, $timestamp) );
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strftime() : usage variation ***
+
+--Newline character--
+bool(false)
+bool(false)
+
+--Tab character--
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/date/tests/strftime_variation2.phpt b/ext/date/tests/strftime_variation2.phpt
new file mode 100644
index 000000000..b02423495
--- /dev/null
+++ b/ext/date/tests/strftime_variation2.phpt
@@ -0,0 +1,191 @@
+--TEST--
+Test strftime() function : usage variation - Passing unexpected values to second argument 'timestamp'.
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : usage variation ***\n";
+
+date_default_timezone_set("Asia/Calcutta");
+// Initialise all required variables
+$format = '%b %d %Y %H:%M:%S';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( strftime($format, $value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strftime() : usage variation ***
+
+--float 10.5--
+string(20) "Jan 01 1970 05:30:10"
+
+--float -10.5--
+string(20) "Jan 01 1970 05:29:50"
+
+--float .5--
+string(20) "Jan 01 1970 05:30:00"
+
+--empty array--
+
+Warning: strftime() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: strftime() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: strftime() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: strftime() expects parameter 2 to be long, array given in %s on line %d
+bool(false)
+
+--uppercase NULL--
+string(20) "Jan 01 1970 05:30:00"
+
+--lowercase null--
+string(20) "Jan 01 1970 05:30:00"
+
+--lowercase true--
+string(20) "Jan 01 1970 05:30:01"
+
+--lowercase false--
+string(20) "Jan 01 1970 05:30:00"
+
+--uppercase TRUE--
+string(20) "Jan 01 1970 05:30:01"
+
+--uppercase FALSE--
+string(20) "Jan 01 1970 05:30:00"
+
+--empty string DQ--
+
+Warning: strftime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: strftime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: strftime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: strftime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: strftime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: strftime() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: strftime() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: strftime() expects parameter 2 to be long, object given in %s on line %d
+bool(false)
+
+--undefined var--
+string(20) "Jan 01 1970 05:30:00"
+
+--unset var--
+string(20) "Jan 01 1970 05:30:00"
+===DONE===
diff --git a/ext/date/tests/strftime_variation20.phpt b/ext/date/tests/strftime_variation20.phpt
new file mode 100644
index 000000000..336c6d2af
--- /dev/null
+++ b/ext/date/tests/strftime_variation20.phpt
@@ -0,0 +1,52 @@
+--TEST--
+Test strftime() function : usage variation - Checking newline and tab formats which are supported other than on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
+ die("skip Test is not valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+//array of values to iterate over
+$inputs = array(
+ 'Newline character' => "%n",
+ 'Tab character' => "%t"
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( strftime($value) );
+ var_dump( strftime($value, $timestamp) );
+}
+
+?>
+===DONE===
+--EXPECTREGEX--
+\*\*\* Testing strftime\(\) : usage variation \*\*\*
+
+--Newline character--
+string\(1\) "
+"
+string\(1\) "
+"
+
+--Tab character--
+string\(1\) "\s"
+string\(1\) "\s"
+===DONE===
diff --git a/ext/date/tests/strftime_variation21.phpt b/ext/date/tests/strftime_variation21.phpt
new file mode 100644
index 000000000..f6aed15ef
--- /dev/null
+++ b/ext/date/tests/strftime_variation21.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Test strftime() function : usage variation - Checking Preferred date and time representation on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') {
+ die("skip Test is valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+//array of values to iterate over
+$inputs = array(
+ 'Preferred date and time representation' => "%c",
+ 'Preferred date representation' => "%x",
+ 'Preferred time representation' => "%X",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( strftime($value) );
+ var_dump( strftime($value, $timestamp) );
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strftime() : usage variation ***
+
+--Preferred date and time representation--
+string(%d) "%d/%d/%d %d:%d:%d"
+string(17) "08/08/08 08:08:08"
+
+--Preferred date representation--
+string(%d) "%d/%d/%d"
+string(8) "08/08/08"
+
+--Preferred time representation--
+string(%d) "%d:%d:%d"
+string(8) "08:08:08"
+===DONE===
diff --git a/ext/date/tests/strftime_variation22.phpt b/ext/date/tests/strftime_variation22.phpt
new file mode 100644
index 000000000..8ea259caf
--- /dev/null
+++ b/ext/date/tests/strftime_variation22.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Test strftime() function : usage variation - Checking Preferred date and time representation other than on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
+ die("skip Test is not valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+//array of values to iterate over
+$inputs = array(
+ 'Preferred date and time representation' => "%c",
+ 'Preferred date representation' => "%x",
+ 'Preferred time representation' => "%X",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( strftime($value) );
+ var_dump( strftime($value, $timestamp) );
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strftime() : usage variation ***
+
+--Preferred date and time representation--
+string(%d) "%s %d %s %d %d:%d:%d %s %s"
+string(31) "Fri 08 Aug 2008 08:08:08 AM IST"
+
+--Preferred date representation--
+string(%d) "%d/%d/%d"
+string(10) "08/08/2008"
+
+--Preferred time representation--
+string(%d) "%d:%d:%d %s"
+string(11) "08:08:08 AM"
+===DONE===
diff --git a/ext/date/tests/strftime_variation23.phpt b/ext/date/tests/strftime_variation23.phpt
new file mode 100644
index 000000000..b7cf8d788
--- /dev/null
+++ b/ext/date/tests/strftime_variation23.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test strftime() function : usage variation - Checking large positive and negative float values to timestamp.
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("UTC");
+$format = '%b %d %Y %H:%M:%S';
+
+echo "\n-- Testing strftime() function with float 12.3456789000e10 to timestamp --\n";
+$timestamp = 12.3456789000e10;
+var_dump( strftime($format, $timestamp) );
+
+echo "\n-- Testing strftime() function with float -12.3456789000e10 to timestamp --\n";
+$timestamp = -12.3456789000e10;
+var_dump( strftime($format, $timestamp) );
+
+?>
+===DONE===
+--EXPECTREGEX--
+\*\*\* Testing strftime\(\) : usage variation \*\*\*
+
+-- Testing strftime\(\) function with float 12.3456789000e10 to timestamp --
+string\(\d*\)\s"Mar\s(26|11)\s(1935|5882)\s(04|00):(50|30):(16|00)"
+
+-- Testing strftime\(\) function with float -12.3456789000e10 to timestamp --
+string\(\d*\)\s"(Oct|Dec)\s(08|13|22)\s(2004|1901|-1943)\s(19|20|23):(09|45|30):(44|52|00)"
+===DONE===
diff --git a/ext/date/tests/strftime_variation3.phpt b/ext/date/tests/strftime_variation3.phpt
new file mode 100644
index 000000000..342cb7692
--- /dev/null
+++ b/ext/date/tests/strftime_variation3.phpt
@@ -0,0 +1,52 @@
+--TEST--
+Test strftime() function : usage variation - Passing week related format strings to format argument.
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : usage variation ***\n";
+
+date_default_timezone_set("Asia/Calcutta");
+// Initialise function arguments not being substituted (if any)
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+//array of values to iterate over
+$inputs = array(
+ 'Abbreviated weekday name' => "%a",
+ 'Full weekday name' => "%A",
+ 'Week number of the year' => "%U",
+ 'Week number of the year in decimal number' => "%W",
+);
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( strftime($value) );
+ var_dump( strftime($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strftime() : usage variation ***
+
+--Abbreviated weekday name--
+string(%d) "%s"
+string(3) "Fri"
+
+--Full weekday name--
+string(%d) "%s"
+string(6) "Friday"
+
+--Week number of the year--
+string(%d) "%d"
+string(2) "31"
+
+--Week number of the year in decimal number--
+string(%d) "%d"
+string(2) "31"
+===DONE===
diff --git a/ext/date/tests/strftime_variation4.phpt b/ext/date/tests/strftime_variation4.phpt
new file mode 100644
index 000000000..6236dd9e7
--- /dev/null
+++ b/ext/date/tests/strftime_variation4.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Test strftime() function : usage variation - Passing month related format strings to format argument.
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : usage variation ***\n";
+
+date_default_timezone_set("Asia/Calcutta");
+// Initialise function arguments not being substituted (if any)
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+//array of values to iterate over
+$inputs = array(
+ 'Abbreviated month name' => "%b",
+ 'Full month name' => "%B",
+ 'Month as decimal' => "%m",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( strftime($value) );
+ var_dump( strftime($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strftime() : usage variation ***
+
+--Abbreviated month name--
+string(%d) "%s"
+string(3) "Aug"
+
+--Full month name--
+string(%d) "%s"
+string(6) "August"
+
+--Month as decimal--
+string(%d) "%d"
+string(2) "08"
+===DONE===
diff --git a/ext/date/tests/strftime_variation5.phpt b/ext/date/tests/strftime_variation5.phpt
new file mode 100644
index 000000000..90f4e37ba
--- /dev/null
+++ b/ext/date/tests/strftime_variation5.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test strftime() function : usage variation - Passing date related format strings to format argument.
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+//array of values to iterate over
+$inputs = array(
+ 'Year as decimal number without a century' => "%y",
+ 'Year as decimal number including the century' => "%Y",
+ 'Time zone offset' => "%Z",
+ 'Time zone offset' => "%z",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( strftime($value) );
+ var_dump( strftime($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strftime() : usage variation ***
+
+--Year as decimal number without a century--
+string(%d) "%d"
+string(2) "08"
+
+--Year as decimal number including the century--
+string(%d) "%d"
+string(4) "2008"
+
+--Time zone offset--
+string(%d) "%s"
+string(%d) "%s"
+===DONE===
diff --git a/ext/date/tests/strftime_variation6.phpt b/ext/date/tests/strftime_variation6.phpt
new file mode 100644
index 000000000..6713a198e
--- /dev/null
+++ b/ext/date/tests/strftime_variation6.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test strftime() function : usage variation - Passing time related format strings to format argument.
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+$timestamp = mktime(18, 8, 8, 8, 8, 2008);
+
+
+//array of values to iterate over
+$inputs = array(
+ 'Hour as decimal by 24-hour format' => "%H",
+ 'Hour as decimal by 12-hour format' => "%I",
+ 'Minute as decimal number' => "%M",
+ 'AM/PM format for a time' => "%p",
+ 'Second as decimal number' => "%S",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( strftime($value) );
+ var_dump( strftime($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strftime() : usage variation ***
+
+--Hour as decimal by 24-hour format--
+string(%d) "%d"
+string(2) "18"
+
+--Hour as decimal by 12-hour format--
+string(%d) "%d"
+string(2) "06"
+
+--Minute as decimal number--
+string(%d) "%d"
+string(2) "08"
+
+--AM/PM format for a time--
+string(%d) "%s"
+string(2) "PM"
+
+--Second as decimal number--
+string(%d) "%d"
+string(2) "08"
+===DONE===
diff --git a/ext/date/tests/strftime_variation7.phpt b/ext/date/tests/strftime_variation7.phpt
new file mode 100644
index 000000000..67fd416ac
--- /dev/null
+++ b/ext/date/tests/strftime_variation7.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test strftime() function : usage variation - Passing day related format strings to format argument.
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+$timestamp = mktime(18, 8, 8, 8, 8, 2008);
+
+
+//array of values to iterate over
+$inputs = array(
+ 'Day of the month as a decimal number' => "%d",
+ 'Day of the year as a decimal number' => "%j",
+ 'Day of the week as a decimal number' => "%w"
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( strftime($value) );
+ var_dump( strftime($value, $timestamp) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strftime() : usage variation ***
+
+--Day of the month as a decimal number--
+string(%d) "%d"
+string(2) "08"
+
+--Day of the year as a decimal number--
+string(%d) "%d"
+string(3) "221"
+
+--Day of the week as a decimal number--
+string(%d) "%d"
+string(1) "5"
+===DONE===
diff --git a/ext/date/tests/strftime_variation8.phpt b/ext/date/tests/strftime_variation8.phpt
new file mode 100644
index 000000000..af8089f98
--- /dev/null
+++ b/ext/date/tests/strftime_variation8.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Test strftime() function : usage variation - Passing literal related strings to format argument.
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+$format = "%%";
+
+echo "\n-- Testing strftime() function with a literal % character to format --\n";
+var_dump( strftime($format) );
+var_dump( strftime($format, $timestamp) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strftime() : usage variation ***
+
+-- Testing strftime() function with a literal % character to format --
+string(1) "%"
+string(1) "%"
+===DONE===
diff --git a/ext/date/tests/strftime_variation9.phpt b/ext/date/tests/strftime_variation9.phpt
new file mode 100644
index 000000000..23aa92d98
--- /dev/null
+++ b/ext/date/tests/strftime_variation9.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test strftime() function : usage variation - Checking week related formats which are not supported on Windows.
+--SKIPIF--
+<?php
+if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') {
+ die("skip Test is valid for Windows");
+}
+?>
+--FILE--
+<?php
+/* Prototype : string strftime(string format [, int timestamp])
+ * Description: Format a local time/date according to locale settings
+ * Source code: ext/date/php_date.c
+ * Alias to functions:
+ */
+
+echo "*** Testing strftime() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+setlocale(LC_ALL, "en_US");
+date_default_timezone_set("Asia/Calcutta");
+$timestamp = mktime(8, 8, 8, 8, 8, 2008);
+
+//array of values to iterate over
+$inputs = array(
+ 'The ISO 8601:1988 week number' => "%V",
+ 'Weekday as decimal' => "%u",
+);
+
+// loop through each element of the array for timestamp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( strftime($value) );
+ var_dump( strftime($value, $timestamp) );
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strftime() : usage variation ***
+
+--The ISO 8601:1988 week number--
+bool(false)
+bool(false)
+
+--Weekday as decimal--
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/date/tests/strtotime_basic.phpt b/ext/date/tests/strtotime_basic.phpt
new file mode 100644
index 000000000..15caa2f53
--- /dev/null
+++ b/ext/date/tests/strtotime_basic.phpt
@@ -0,0 +1,47 @@
+--TEST--
+strtotime() function - a test to show the difference in behaviour between 'first' and '1', "second" and "2"...
+--INI--
+date.timezone="UTC"
+--SKIPIF--
+<?php if (!function_exists('strtotime')) echo "SKIP"; ?>
+--FILE--
+<?php
+/*
+ * The first of December 2008 is a Monday.
+ * The term "Monday December 2008" will be parsed as the first Monday in December 2008.
+ */
+
+/*
+ * This is parsed as the "first following Monday OR the current day if it is a Monday"
+ */
+var_dump(date('Y-m-d', strtotime('1 Monday December 2008')));
+/*
+ * This is parsed as the "second following Monday OR the first following
+ * Monday if the current day is a Monday"
+ */
+var_dump(date('Y-m-d', strtotime('2 Monday December 2008')));
+/*
+ * This is parsed as the "third following Monday OR the second following
+ * Monday if the current day is a Monday"
+ */
+var_dump(date('Y-m-d', strtotime('3 Monday December 2008')));
+/*
+ * This is parsed as the "first following Monday after the first Monday in December"
+ */
+var_dump(date('Y-m-d', strtotime('first Monday December 2008')));
+/*
+ * This is parsed as the "second following Monday after the first Monday in December"
+ */
+var_dump(date('Y-m-d', strtotime('second Monday December 2008')));
+/*
+ * This is parsed as the "third following Monday after the first Monday in December"
+ */
+var_dump(date('Y-m-d', strtotime('third Monday December 2008')));
+?>
+--EXPECTF--
+string(10) "2008-12-01"
+string(10) "2008-12-08"
+string(10) "2008-12-15"
+string(10) "2008-12-08"
+string(10) "2008-12-15"
+string(10) "2008-12-22"
diff --git a/ext/date/tests/time_basic.phpt b/ext/date/tests/time_basic.phpt
new file mode 100644
index 000000000..ad788f907
--- /dev/null
+++ b/ext/date/tests/time_basic.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Test return type and value for expected input time()
+--FILE--
+<?php
+/*
+ * proto int time(void)
+ * Function is implemented in ext/date/php_date.c
+*/
+
+var_dump(time());
+
+?>
+===DONE===
+--EXPECTF--
+int(%d)
+===DONE===
diff --git a/ext/date/tests/time_error.phpt b/ext/date/tests/time_error.phpt
new file mode 100644
index 000000000..3792570cf
--- /dev/null
+++ b/ext/date/tests/time_error.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Test wrong number of arguments for time()
+--FILE--
+<?php
+/*
+ * proto int time(void)
+ * Function is implemented in ext/date/php_date.c
+*/
+
+// Extra arguments are ignored
+$extra_arg = 1;
+echo "\n-- Too many arguments --\n";
+var_dump (time($extra_arg));
+?>
+===DONE===
+--EXPECTF--
+
+-- Too many arguments --
+int(%d)
+===DONE===
diff --git a/ext/dba/dba.c b/ext/dba/dba.c
index ec3bf5e71..e33d7f9f5 100644
--- a/ext/dba/dba.c
+++ b/ext/dba/dba.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dba.c,v 1.111.2.4.2.6 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: dba.c,v 1.111.2.4.2.8 2008/12/31 11:17:36 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -360,7 +360,7 @@ static dba_handler handler[] = {
DBA_HND(db3, DBA_LOCK_ALL) /* No lock in lib */
#endif
#if DBA_DB4
- DBA_HND(db4, DBA_LOCK_EXT) /* Locking done in library itself */
+ DBA_HND(db4, DBA_LOCK_ALL) /* No lock in lib */
#endif
#if DBA_INIFILE
DBA_HND(inifile, DBA_STREAM_OPEN|DBA_LOCK_ALL|DBA_CAST_AS_FD) /* No lock in lib */
diff --git a/ext/dba/dba_cdb.c b/ext/dba/dba_cdb.c
index c8d2eaa3d..60bb38603 100644
--- a/ext/dba/dba_cdb.c
+++ b/ext/dba/dba_cdb.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dba_cdb.c,v 1.32.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: dba_cdb.c,v 1.32.2.1.2.3 2008/12/31 11:17:36 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dba/dba_db1.c b/ext/dba/dba_db1.c
index 91d408da0..35e28c9d2 100755
--- a/ext/dba/dba_db1.c
+++ b/ext/dba/dba_db1.c
@@ -1,197 +1,197 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 3.01 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available through the world-wide-web at the following url: |
- | http://www.php.net/license/3_01.txt |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Shen Cheng-Da <cdsheen@gmail.com> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id: dba_db1.c,v 1.3.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-
-#if DBA_DB1
-#include "php_db1.h"
-
-#ifdef DB1_INCLUDE_FILE
-#include DB1_INCLUDE_FILE
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#define DB1_DATA dba_db1_data *dba = info->dbf
-#define DB1_GKEY DBT gkey; gkey.data = (char *) key; gkey.size = keylen
-
-typedef struct {
- DB *dbp;
-} dba_db1_data;
-
-DBA_OPEN_FUNC(db1)
-{
- dba_db1_data *dba;
- DB *db;
-
- int gmode;
- int filemode = 0644;
-
- if (info->argc > 0) {
- convert_to_long_ex(info->argv[0]);
- filemode = Z_LVAL_PP(info->argv[0]);
- }
-
- gmode = 0;
- switch (info->mode) {
- case DBA_READER:
- gmode = O_RDONLY;
- break;
- case DBA_WRITER:
- gmode = O_RDWR;
- break;
- case DBA_CREAT:
- gmode = O_RDWR | O_CREAT;
- break;
- case DBA_TRUNC:
- gmode = O_RDWR | O_CREAT | O_TRUNC;
- break;
- default:
- return FAILURE; /* not possible */
- }
-
- db = dbopen((char *)info->path, gmode, filemode, DB_HASH, NULL);
-
- if (db == NULL) {
- return FAILURE;
- }
-
- dba = pemalloc(sizeof(*dba), info->flags&DBA_PERSISTENT);
- dba->dbp = db;
-
- info->dbf = dba;
-
- return SUCCESS;
-}
-
-DBA_CLOSE_FUNC(db1)
-{
- DB1_DATA;
- dba->dbp->close(dba->dbp);
- pefree(info->dbf, info->flags&DBA_PERSISTENT);
-}
-
-DBA_FETCH_FUNC(db1)
-{
- DBT gval;
- DB1_DATA;
- DB1_GKEY;
-
- memset(&gval, 0, sizeof(gval));
- if (dba->dbp->get(dba->dbp, &gkey, &gval, 0) == RET_SUCCESS) {
- if (newlen) *newlen = gval.size;
- return estrndup(gval.data, gval.size);
- }
- return NULL;
-}
-
-DBA_UPDATE_FUNC(db1)
-{
- DBT gval;
- DB1_DATA;
- DB1_GKEY;
-
- gval.data = (char *) val;
- gval.size = vallen;
-
- return dba->dbp->put(dba->dbp, &gkey, &gval, mode == 1 ? R_NOOVERWRITE : 0) != RET_SUCCESS ? FAILURE : SUCCESS;
-}
-
-DBA_EXISTS_FUNC(db1)
-{
- DBT gval;
- DB1_DATA;
- DB1_GKEY;
-
- return dba->dbp->get(dba->dbp, &gkey, &gval, 0) != RET_SUCCESS ? FAILURE : SUCCESS;
-}
-
-DBA_DELETE_FUNC(db1)
-{
- DB1_DATA;
- DB1_GKEY;
-
- return dba->dbp->del(dba->dbp, &gkey, 0) != RET_SUCCESS ? FAILURE : SUCCESS;
-}
-
-DBA_FIRSTKEY_FUNC(db1)
-{
- DBT gkey;
- DBT gval;
- DB1_DATA;
-
- memset(&gkey, 0, sizeof(gkey));
- memset(&gval, 0, sizeof(gval));
-
- if (dba->dbp->seq(dba->dbp, &gkey, &gval, R_FIRST) == RET_SUCCESS) {
- if (newlen) *newlen = gkey.size;
- return estrndup(gkey.data, gkey.size);
- }
- return NULL;
-}
-
-DBA_NEXTKEY_FUNC(db1)
-{
- DBT gkey;
- DBT gval;
- DB1_DATA;
-
- memset(&gkey, 0, sizeof(gkey));
- memset(&gval, 0, sizeof(gval));
-
- if (dba->dbp->seq(dba->dbp, &gkey, &gval, R_NEXT) == RET_SUCCESS) {
- if (newlen) *newlen = gkey.size;
- return estrndup(gkey.data, gkey.size);
- }
- return NULL;
-}
-
-DBA_OPTIMIZE_FUNC(db1)
-{
- /* dummy */
- return SUCCESS;
-}
-
-DBA_SYNC_FUNC(db1)
-{
- return SUCCESS;
-}
-
-DBA_INFO_FUNC(db1)
-{
- return estrdup(DB1_VERSION);
-}
-
-#endif
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
+/*
+ +----------------------------------------------------------------------+
+ | PHP Version 5 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997-2009 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.01 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.php.net/license/3_01.txt |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Author: Shen Cheng-Da <cdsheen@gmail.com> |
+ +----------------------------------------------------------------------+
+ */
+
+/* $Id: dba_db1.c,v 1.3.2.1.2.4 2008/12/31 11:17:36 sebastian Exp $ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "php.h"
+
+#if DBA_DB1
+#include "php_db1.h"
+
+#ifdef DB1_INCLUDE_FILE
+#include DB1_INCLUDE_FILE
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#define DB1_DATA dba_db1_data *dba = info->dbf
+#define DB1_GKEY DBT gkey; gkey.data = (char *) key; gkey.size = keylen
+
+typedef struct {
+ DB *dbp;
+} dba_db1_data;
+
+DBA_OPEN_FUNC(db1)
+{
+ dba_db1_data *dba;
+ DB *db;
+
+ int gmode;
+ int filemode = 0644;
+
+ if (info->argc > 0) {
+ convert_to_long_ex(info->argv[0]);
+ filemode = Z_LVAL_PP(info->argv[0]);
+ }
+
+ gmode = 0;
+ switch (info->mode) {
+ case DBA_READER:
+ gmode = O_RDONLY;
+ break;
+ case DBA_WRITER:
+ gmode = O_RDWR;
+ break;
+ case DBA_CREAT:
+ gmode = O_RDWR | O_CREAT;
+ break;
+ case DBA_TRUNC:
+ gmode = O_RDWR | O_CREAT | O_TRUNC;
+ break;
+ default:
+ return FAILURE; /* not possible */
+ }
+
+ db = dbopen((char *)info->path, gmode, filemode, DB_HASH, NULL);
+
+ if (db == NULL) {
+ return FAILURE;
+ }
+
+ dba = pemalloc(sizeof(*dba), info->flags&DBA_PERSISTENT);
+ dba->dbp = db;
+
+ info->dbf = dba;
+
+ return SUCCESS;
+}
+
+DBA_CLOSE_FUNC(db1)
+{
+ DB1_DATA;
+ dba->dbp->close(dba->dbp);
+ pefree(info->dbf, info->flags&DBA_PERSISTENT);
+}
+
+DBA_FETCH_FUNC(db1)
+{
+ DBT gval;
+ DB1_DATA;
+ DB1_GKEY;
+
+ memset(&gval, 0, sizeof(gval));
+ if (dba->dbp->get(dba->dbp, &gkey, &gval, 0) == RET_SUCCESS) {
+ if (newlen) *newlen = gval.size;
+ return estrndup(gval.data, gval.size);
+ }
+ return NULL;
+}
+
+DBA_UPDATE_FUNC(db1)
+{
+ DBT gval;
+ DB1_DATA;
+ DB1_GKEY;
+
+ gval.data = (char *) val;
+ gval.size = vallen;
+
+ return dba->dbp->put(dba->dbp, &gkey, &gval, mode == 1 ? R_NOOVERWRITE : 0) != RET_SUCCESS ? FAILURE : SUCCESS;
+}
+
+DBA_EXISTS_FUNC(db1)
+{
+ DBT gval;
+ DB1_DATA;
+ DB1_GKEY;
+
+ return dba->dbp->get(dba->dbp, &gkey, &gval, 0) != RET_SUCCESS ? FAILURE : SUCCESS;
+}
+
+DBA_DELETE_FUNC(db1)
+{
+ DB1_DATA;
+ DB1_GKEY;
+
+ return dba->dbp->del(dba->dbp, &gkey, 0) != RET_SUCCESS ? FAILURE : SUCCESS;
+}
+
+DBA_FIRSTKEY_FUNC(db1)
+{
+ DBT gkey;
+ DBT gval;
+ DB1_DATA;
+
+ memset(&gkey, 0, sizeof(gkey));
+ memset(&gval, 0, sizeof(gval));
+
+ if (dba->dbp->seq(dba->dbp, &gkey, &gval, R_FIRST) == RET_SUCCESS) {
+ if (newlen) *newlen = gkey.size;
+ return estrndup(gkey.data, gkey.size);
+ }
+ return NULL;
+}
+
+DBA_NEXTKEY_FUNC(db1)
+{
+ DBT gkey;
+ DBT gval;
+ DB1_DATA;
+
+ memset(&gkey, 0, sizeof(gkey));
+ memset(&gval, 0, sizeof(gval));
+
+ if (dba->dbp->seq(dba->dbp, &gkey, &gval, R_NEXT) == RET_SUCCESS) {
+ if (newlen) *newlen = gkey.size;
+ return estrndup(gkey.data, gkey.size);
+ }
+ return NULL;
+}
+
+DBA_OPTIMIZE_FUNC(db1)
+{
+ /* dummy */
+ return SUCCESS;
+}
+
+DBA_SYNC_FUNC(db1)
+{
+ return SUCCESS;
+}
+
+DBA_INFO_FUNC(db1)
+{
+ return estrdup(DB1_VERSION);
+}
+
+#endif
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */
diff --git a/ext/dba/dba_db2.c b/ext/dba/dba_db2.c
index 79d835d01..56d145149 100644
--- a/ext/dba/dba_db2.c
+++ b/ext/dba/dba_db2.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dba_db2.c,v 1.39.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: dba_db2.c,v 1.39.2.1.2.3 2008/12/31 11:17:36 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dba/dba_db3.c b/ext/dba/dba_db3.c
index 5fbcdf851..0209cb8ca 100644
--- a/ext/dba/dba_db3.c
+++ b/ext/dba/dba_db3.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dba_db3.c,v 1.33.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: dba_db3.c,v 1.33.2.1.2.3 2008/12/31 11:17:36 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dba/dba_db4.c b/ext/dba/dba_db4.c
index b2bdec8e8..9bb3e9726 100644
--- a/ext/dba/dba_db4.c
+++ b/ext/dba/dba_db4.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dba_db4.c,v 1.15.2.3.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: dba_db4.c,v 1.15.2.3.2.4 2008/12/31 11:17:36 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -36,7 +36,11 @@
#include <db.h>
#endif
-static void php_dba_db4_errcall_fcn(const char *errpfx, char *msg)
+static void php_dba_db4_errcall_fcn(
+#if (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3)
+ const DB_ENV *dbenv,
+#endif
+ const char *errpfx, const char *msg)
{
TSRMLS_FETCH();
@@ -81,7 +85,6 @@ DBA_OPEN_FUNC(db4)
return FAILURE; /* not possible */
}
- gmode |= DB_INIT_LOCK;
if (info->flags & DBA_PERSISTENT) {
gmode |= DB_THREAD;
}
@@ -91,10 +94,6 @@ DBA_OPEN_FUNC(db4)
filemode = Z_LVAL_PP(info->argv[0]);
}
-#ifdef DB_FCNTL_LOCKING
- gmode |= DB_FCNTL_LOCKING;
-#endif
-
if ((err=db_create(&dbp, NULL, 0)) == 0) {
dbp->set_errcall(dbp, php_dba_db4_errcall_fcn);
if (
diff --git a/ext/dba/dba_dbm.c b/ext/dba/dba_dbm.c
index a7896be85..27e196b90 100644
--- a/ext/dba/dba_dbm.c
+++ b/ext/dba/dba_dbm.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dba_dbm.c,v 1.29.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: dba_dbm.c,v 1.29.2.1.2.3 2008/12/31 11:17:36 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dba/dba_flatfile.c b/ext/dba/dba_flatfile.c
index 30f8bf4ac..f57d1e4c4 100644
--- a/ext/dba/dba_flatfile.c
+++ b/ext/dba/dba_flatfile.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dba_flatfile.c,v 1.19.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: dba_flatfile.c,v 1.19.2.1.2.3 2008/12/31 11:17:36 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dba/dba_gdbm.c b/ext/dba/dba_gdbm.c
index de915f950..0a821b1f8 100644
--- a/ext/dba/dba_gdbm.c
+++ b/ext/dba/dba_gdbm.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dba_gdbm.c,v 1.23.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: dba_gdbm.c,v 1.23.2.1.2.3 2008/12/31 11:17:36 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dba/dba_inifile.c b/ext/dba/dba_inifile.c
index 291258283..6fa9a80ad 100644
--- a/ext/dba/dba_inifile.c
+++ b/ext/dba/dba_inifile.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dba_inifile.c,v 1.5.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: dba_inifile.c,v 1.5.2.1.2.3 2008/12/31 11:17:36 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dba/dba_ndbm.c b/ext/dba/dba_ndbm.c
index 8414385f6..8062d67c2 100644
--- a/ext/dba/dba_ndbm.c
+++ b/ext/dba/dba_ndbm.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dba_ndbm.c,v 1.19.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: dba_ndbm.c,v 1.19.2.1.2.3 2008/12/31 11:17:36 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dba/dba_qdbm.c b/ext/dba/dba_qdbm.c
index da9a0bd4a..4cfcbbfcd 100755
--- a/ext/dba/dba_qdbm.c
+++ b/ext/dba/dba_qdbm.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dba_qdbm.c,v 1.4.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: dba_qdbm.c,v 1.4.2.1.2.3 2008/12/31 11:17:36 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dba/libcdb/cdb.c b/ext/dba/libcdb/cdb.c
index d84214b1c..597ab02b8 100644
--- a/ext/dba/libcdb/cdb.c
+++ b/ext/dba/libcdb/cdb.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: cdb.c,v 1.10.2.1.2.4 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: cdb.c,v 1.10.2.1.2.5 2008/12/31 11:17:36 sebastian Exp $ */
/* incorporated from D.J.Bernstein's cdb-0.75 (http://cr.yp.to/cdb.html)*/
@@ -189,6 +189,6 @@ int cdb_find(struct cdb *c, char *key, unsigned int len TSRMLS_DC)
/* {{{ cdb_version */
char *cdb_version()
{
- return "0.75, $Revision: 1.10.2.1.2.4 $";
+ return "0.75, $Revision: 1.10.2.1.2.5 $";
}
/* }}} */
diff --git a/ext/dba/libcdb/cdb.h b/ext/dba/libcdb/cdb.h
index 38af71e28..e5a828104 100644
--- a/ext/dba/libcdb/cdb.h
+++ b/ext/dba/libcdb/cdb.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: cdb.h,v 1.7.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: cdb.h,v 1.7.2.1.2.3 2008/12/31 11:17:36 sebastian Exp $ */
/* incorporated from D.J.Bernstein's cdb-0.75 (http://cr.yp.to/cdb.html)*/
diff --git a/ext/dba/libcdb/cdb_make.c b/ext/dba/libcdb/cdb_make.c
index c68451367..79a15c1cf 100644
--- a/ext/dba/libcdb/cdb_make.c
+++ b/ext/dba/libcdb/cdb_make.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: cdb_make.c,v 1.9.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: cdb_make.c,v 1.9.2.1.2.3 2008/12/31 11:17:36 sebastian Exp $ */
/* incorporated from D.J.Bernstein's cdb-0.75 (http://cr.yp.to/cdb.html)*/
@@ -240,5 +240,5 @@ int cdb_make_finish(struct cdb_make *c TSRMLS_DC)
/* {{{ cdb_make_version */
char *cdb_make_version()
{
- return "0.75, $Revision: 1.9.2.1.2.2 $";
+ return "0.75, $Revision: 1.9.2.1.2.3 $";
}
diff --git a/ext/dba/libcdb/cdb_make.h b/ext/dba/libcdb/cdb_make.h
index b93028181..d121ea85a 100644
--- a/ext/dba/libcdb/cdb_make.h
+++ b/ext/dba/libcdb/cdb_make.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: cdb_make.h,v 1.7.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: cdb_make.h,v 1.7.2.1.2.3 2008/12/31 11:17:36 sebastian Exp $ */
/* incorporated from D.J.Bernstein's cdb-0.75 (http://cr.yp.to/cdb.html)*/
diff --git a/ext/dba/libcdb/uint32.c b/ext/dba/libcdb/uint32.c
index 955edbdd0..06dcc40a6 100644
--- a/ext/dba/libcdb/uint32.c
+++ b/ext/dba/libcdb/uint32.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: uint32.c,v 1.6.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: uint32.c,v 1.6.2.1.2.3 2008/12/31 11:17:36 sebastian Exp $ */
/* incorporated from D.J.Bernstein's cdb-0.75 (http://cr.yp.to/cdb.html)*/
diff --git a/ext/dba/libcdb/uint32.h b/ext/dba/libcdb/uint32.h
index 35591e49e..8dcdb2b35 100644
--- a/ext/dba/libcdb/uint32.h
+++ b/ext/dba/libcdb/uint32.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: uint32.h,v 1.6.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: uint32.h,v 1.6.2.1.2.3 2008/12/31 11:17:36 sebastian Exp $ */
/* incorporated from D.J.Bernstein's cdb-0.75 (http://cr.yp.to/cdb.html)*/
diff --git a/ext/dba/libflatfile/flatfile.c b/ext/dba/libflatfile/flatfile.c
index 7d8b3ff9f..0e7d1c8c4 100644
--- a/ext/dba/libflatfile/flatfile.c
+++ b/ext/dba/libflatfile/flatfile.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -19,7 +19,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: flatfile.c,v 1.14.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: flatfile.c,v 1.14.2.1.2.3 2008/12/31 11:17:36 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -307,7 +307,7 @@ datum flatfile_nextkey(flatfile *dba TSRMLS_DC) {
/* {{{ flatfile_version */
char *flatfile_version()
{
- return "1.0, $Revision: 1.14.2.1.2.2 $";
+ return "1.0, $Revision: 1.14.2.1.2.3 $";
}
/* }}} */
diff --git a/ext/dba/libflatfile/flatfile.h b/ext/dba/libflatfile/flatfile.h
index 3ec25a396..4ad468427 100644
--- a/ext/dba/libflatfile/flatfile.h
+++ b/ext/dba/libflatfile/flatfile.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: flatfile.h,v 1.11.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: flatfile.h,v 1.11.2.1.2.3 2008/12/31 11:17:36 sebastian Exp $ */
#ifndef PHP_LIB_FLATFILE_H
#define PHP_LIB_FLATFILE_H
diff --git a/ext/dba/libinifile/inifile.c b/ext/dba/libinifile/inifile.c
index c87025314..080124ff7 100644
--- a/ext/dba/libinifile/inifile.c
+++ b/ext/dba/libinifile/inifile.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: inifile.c,v 1.14.2.1.2.4 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: inifile.c,v 1.14.2.1.2.6 2008/12/31 11:17:36 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -43,7 +43,7 @@
/* {{{ inifile_version */
char *inifile_version()
{
- return "1.0, $Revision: 1.14.2.1.2.4 $";
+ return "1.0, $Revision: 1.14.2.1.2.6 $";
}
/* }}} */
@@ -508,7 +508,9 @@ static int inifile_delete_replace_append(inifile *dba, const key_type *key, cons
/* 5 */
if (ret == SUCCESS) {
- ret = inifile_truncate(dba, append ? pos_grp_next : pos_grp_start TSRMLS_CC); /* writes error on fail */
+ if (!value || (key->name && strlen(key->name))) {
+ ret = inifile_truncate(dba, append ? pos_grp_next : pos_grp_start TSRMLS_CC); /* writes error on fail */
+ }
}
if (ret == SUCCESS) {
diff --git a/ext/dba/libinifile/inifile.h b/ext/dba/libinifile/inifile.h
index f50806acb..34268209c 100644
--- a/ext/dba/libinifile/inifile.h
+++ b/ext/dba/libinifile/inifile.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: inifile.h,v 1.5.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: inifile.h,v 1.5.2.1.2.3 2008/12/31 11:17:36 sebastian Exp $ */
#ifndef PHP_LIB_INIFILE_H
#define PHP_LIB_INIFILE_H
diff --git a/ext/dba/php_dba.h b/ext/dba/php_dba.h
index f7fd95d41..2440cba40 100644
--- a/ext/dba/php_dba.h
+++ b/ext/dba/php_dba.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_dba.h,v 1.29.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: php_dba.h,v 1.29.2.1.2.3 2008/12/31 11:17:36 sebastian Exp $ */
#ifndef PHP_DBA_H
#define PHP_DBA_H
diff --git a/ext/dba/tests/dba_db4.phpt b/ext/dba/tests/dba_db4.phpt
index 252797bf4..fcf089a1e 100644
--- a/ext/dba/tests/dba_db4.phpt
+++ b/ext/dba/tests/dba_db4.phpt
@@ -9,7 +9,6 @@ DBA DB4 handler test
<?php
$handler = 'db4';
require_once('test.inc');
- $lock_flag = ''; // lock in library
require_once('dba_handler.inc');
?>
===DONE===
@@ -18,7 +17,22 @@ database handler: db4
3NYNYY
Content String 2
Content 2 replaced
-Read during write: allowed
+Read during write: not allowed
+Content 2 replaced 2nd time
+The 6th value
+array(3) {
+ ["key number 6"]=>
+ string(13) "The 6th value"
+ ["key2"]=>
+ string(27) "Content 2 replaced 2nd time"
+ ["key5"]=>
+ string(23) "The last content string"
+}
+--NO-LOCK--
+3NYNYY
+Content String 2
+Content 2 replaced
+Read during write: not allowed
Content 2 replaced 2nd time
The 6th value
array(3) {
diff --git a/ext/dom/attr.c b/ext/dom/attr.c
index a77c8e9ac..ea4538330 100644
--- a/ext/dom/attr.c
+++ b/ext/dom/attr.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: attr.c,v 1.18.2.2.2.4 2008/02/04 15:23:10 sebastian Exp $ */
+/* $Id: attr.c,v 1.18.2.2.2.5 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dom/cdatasection.c b/ext/dom/cdatasection.c
index d153026e3..0e1116994 100644
--- a/ext/dom/cdatasection.c
+++ b/ext/dom/cdatasection.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: cdatasection.c,v 1.11.2.1.2.3 2008/02/04 15:23:10 sebastian Exp $ */
+/* $Id: cdatasection.c,v 1.11.2.1.2.5 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -73,7 +73,7 @@ PHP_METHOD(domcdatasection, __construct)
intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
if (intern != NULL) {
- oldnode = (xmlNodePtr)intern->ptr;
+ oldnode = dom_object_get_node(intern);
if (oldnode != NULL) {
php_libxml_node_free_resource(oldnode TSRMLS_CC);
}
diff --git a/ext/dom/characterdata.c b/ext/dom/characterdata.c
index 20b5a3980..153533756 100644
--- a/ext/dom/characterdata.c
+++ b/ext/dom/characterdata.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: characterdata.c,v 1.15.2.1.2.4 2008/02/04 15:23:10 sebastian Exp $ */
+/* $Id: characterdata.c,v 1.15.2.1.2.5 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dom/comment.c b/ext/dom/comment.c
index 94d720352..2e7271ab0 100644
--- a/ext/dom/comment.c
+++ b/ext/dom/comment.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: comment.c,v 1.11.2.1.2.3 2008/02/04 15:23:10 sebastian Exp $ */
+/* $Id: comment.c,v 1.11.2.1.2.5 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -73,7 +73,7 @@ PHP_METHOD(domcomment, __construct)
intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
if (intern != NULL) {
- oldnode = (xmlNodePtr)intern->ptr;
+ oldnode = dom_object_get_node(intern);
if (oldnode != NULL) {
php_libxml_node_free_resource(oldnode TSRMLS_CC);
}
diff --git a/ext/dom/document.c b/ext/dom/document.c
index c5d504d2f..f699ac7f6 100644
--- a/ext/dom/document.c
+++ b/ext/dom/document.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: document.c,v 1.68.2.3.2.8 2008/02/04 15:23:10 sebastian Exp $ */
+/* $Id: document.c,v 1.68.2.3.2.11 2009/01/26 19:11:19 rrichards Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -153,7 +153,7 @@ ZEND_END_ARG_INFO();
static
ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_document_savexml, 0, 0, 0)
- ZEND_ARG_OBJ_INFO(0, node, DOMNode, 0)
+ ZEND_ARG_OBJ_INFO(0, node, DOMNode, 1)
ZEND_END_ARG_INFO();
static
@@ -1687,7 +1687,7 @@ static xmlDocPtr dom_document_parser(zval *id, int mode, char *source, int optio
EG(error_reporting) = old_error_reporting;
}
/* If loading from memory, set the base reference uri for the document */
- if (ret->URL == NULL && ctxt->directory != NULL) {
+ if (ret && ret->URL == NULL && ctxt->directory != NULL) {
ret->URL = xmlStrdup(ctxt->directory);
}
} else {
diff --git a/ext/dom/documentfragment.c b/ext/dom/documentfragment.c
index feaa8b52a..88b30e1c0 100644
--- a/ext/dom/documentfragment.c
+++ b/ext/dom/documentfragment.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: documentfragment.c,v 1.15.2.1.2.3 2008/02/04 15:23:10 sebastian Exp $ */
+/* $Id: documentfragment.c,v 1.15.2.1.2.5 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -76,7 +76,7 @@ PHP_METHOD(domdocumentfragment, __construct)
intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
if (intern != NULL) {
- oldnode = (xmlNodePtr)intern->ptr;
+ oldnode = dom_object_get_node(intern);
if (oldnode != NULL) {
php_libxml_node_free_resource(oldnode TSRMLS_CC);
}
diff --git a/ext/dom/documenttype.c b/ext/dom/documenttype.c
index db4fa4833..18365f1bc 100644
--- a/ext/dom/documenttype.c
+++ b/ext/dom/documenttype.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: documenttype.c,v 1.15.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: documenttype.c,v 1.15.2.1.2.3 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dom/dom_ce.h b/ext/dom/dom_ce.h
index 14c832863..4d0c12d90 100644
--- a/ext/dom/dom_ce.h
+++ b/ext/dom/dom_ce.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dom_ce.h,v 1.8.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: dom_ce.h,v 1.8.2.1.2.3 2008/12/31 11:17:37 sebastian Exp $ */
#ifndef DOM_CE_H
#define DOM_CE_H
diff --git a/ext/dom/dom_fe.h b/ext/dom/dom_fe.h
index df791c8a5..f603bb39c 100644
--- a/ext/dom/dom_fe.h
+++ b/ext/dom/dom_fe.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dom_fe.h,v 1.14.2.1.2.5 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: dom_fe.h,v 1.14.2.1.2.6 2008/12/31 11:17:37 sebastian Exp $ */
#ifndef DOM_FE_H
#define DOM_FE_H
diff --git a/ext/dom/dom_iterators.c b/ext/dom/dom_iterators.c
index ef660cf4f..a56c83536 100644
--- a/ext/dom/dom_iterators.c
+++ b/ext/dom/dom_iterators.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dom_iterators.c,v 1.9.2.3.2.6 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: dom_iterators.c,v 1.9.2.3.2.7 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dom/dom_properties.h b/ext/dom/dom_properties.h
index 27ad5c1bd..6064bdc4b 100644
--- a/ext/dom/dom_properties.h
+++ b/ext/dom/dom_properties.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dom_properties.h,v 1.7.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: dom_properties.h,v 1.7.2.1.2.3 2008/12/31 11:17:37 sebastian Exp $ */
#ifndef DOM_PROPERTIES_H
#define DOM_PROPERTIES_H
diff --git a/ext/dom/domconfiguration.c b/ext/dom/domconfiguration.c
index 21e14dd4b..98a81c762 100644
--- a/ext/dom/domconfiguration.c
+++ b/ext/dom/domconfiguration.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: domconfiguration.c,v 1.5.2.1.2.3 2008/02/04 15:23:10 sebastian Exp $ */
+/* $Id: domconfiguration.c,v 1.5.2.1.2.5 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -32,7 +32,7 @@
static
ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_configuration_set_parameter, 0, 0, 2)
ZEND_ARG_INFO(0, name)
- ZEND_ARG_OBJ_INFO(0, value, DOMUserData, 0)
+ ZEND_ARG_INFO(0, value)
ZEND_END_ARG_INFO();
static
@@ -43,7 +43,7 @@ ZEND_END_ARG_INFO();
static
ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_configuration_can_set_parameter, 0, 0, 0)
ZEND_ARG_INFO(0, name)
- ZEND_ARG_OBJ_INFO(0, value, DOMUserData, 0)
+ ZEND_ARG_INFO(0, value)
ZEND_END_ARG_INFO();
/* }}} */
diff --git a/ext/dom/domerror.c b/ext/dom/domerror.c
index 4fae3eeb7..940c427e4 100644
--- a/ext/dom/domerror.c
+++ b/ext/dom/domerror.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: domerror.c,v 1.6.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: domerror.c,v 1.6.2.1.2.3 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dom/domerrorhandler.c b/ext/dom/domerrorhandler.c
index 493aa38f9..4da18ff2a 100644
--- a/ext/dom/domerrorhandler.c
+++ b/ext/dom/domerrorhandler.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: domerrorhandler.c,v 1.5.2.1.2.3 2008/02/04 15:23:11 sebastian Exp $ */
+/* $Id: domerrorhandler.c,v 1.5.2.1.2.4 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dom/domexception.c b/ext/dom/domexception.c
index 0bd87ece2..56ee632f2 100644
--- a/ext/dom/domexception.c
+++ b/ext/dom/domexception.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: domexception.c,v 1.11.2.1.2.2 2007/12/31 07:20:05 sebastian Exp $ */
+/* $Id: domexception.c,v 1.11.2.1.2.3 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dom/domimplementation.c b/ext/dom/domimplementation.c
index 890a5abab..7a62b725e 100644
--- a/ext/dom/domimplementation.c
+++ b/ext/dom/domimplementation.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: domimplementation.c,v 1.15.2.2.2.4 2008/02/04 15:23:11 sebastian Exp $ */
+/* $Id: domimplementation.c,v 1.15.2.2.2.5 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dom/domimplementationlist.c b/ext/dom/domimplementationlist.c
index d65e2beb6..d49298200 100644
--- a/ext/dom/domimplementationlist.c
+++ b/ext/dom/domimplementationlist.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: domimplementationlist.c,v 1.6.2.1.2.3 2008/02/04 15:23:11 sebastian Exp $ */
+/* $Id: domimplementationlist.c,v 1.6.2.1.2.4 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dom/domimplementationsource.c b/ext/dom/domimplementationsource.c
index 3bc4d2b9c..d9cba4a23 100644
--- a/ext/dom/domimplementationsource.c
+++ b/ext/dom/domimplementationsource.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: domimplementationsource.c,v 1.5.2.1.2.3 2008/02/04 15:23:11 sebastian Exp $ */
+/* $Id: domimplementationsource.c,v 1.5.2.1.2.4 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dom/domlocator.c b/ext/dom/domlocator.c
index fd915a9d1..d80f13cbd 100644
--- a/ext/dom/domlocator.c
+++ b/ext/dom/domlocator.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: domlocator.c,v 1.6.2.1.2.2 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: domlocator.c,v 1.6.2.1.2.3 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dom/domstringlist.c b/ext/dom/domstringlist.c
index c902bbaf9..31810d962 100644
--- a/ext/dom/domstringlist.c
+++ b/ext/dom/domstringlist.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: domstringlist.c,v 1.6.2.1.2.3 2008/02/04 15:23:11 sebastian Exp $ */
+/* $Id: domstringlist.c,v 1.6.2.1.2.4 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dom/element.c b/ext/dom/element.c
index 5f6614de7..8b754a4d4 100644
--- a/ext/dom/element.c
+++ b/ext/dom/element.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: element.c,v 1.36.2.4.2.10 2008/02/04 15:23:11 sebastian Exp $ */
+/* $Id: element.c,v 1.36.2.4.2.12 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -585,6 +585,10 @@ PHP_FUNCTION(dom_element_set_attribute_node)
xmlUnlinkNode((xmlNodePtr) existattrp);
}
+ if (attrp->parent != NULL) {
+ xmlUnlinkNode((xmlNodePtr) attrp);
+ }
+
if (attrp->doc == NULL && nodep->doc != NULL) {
attrobj->document = intern->document;
php_libxml_increment_doc_ref((php_libxml_node_object *)attrobj, NULL TSRMLS_CC);
@@ -998,6 +1002,10 @@ PHP_FUNCTION(dom_element_set_attribute_node_ns)
xmlUnlinkNode((xmlNodePtr) existattrp);
}
+ if (attrp->parent != NULL) {
+ xmlUnlinkNode((xmlNodePtr) attrp);
+ }
+
if (attrp->doc == NULL && nodep->doc != NULL) {
attrobj->document = intern->document;
php_libxml_increment_doc_ref((php_libxml_node_object *)attrobj, NULL TSRMLS_CC);
diff --git a/ext/dom/entity.c b/ext/dom/entity.c
index 8781367ca..363d6d42a 100644
--- a/ext/dom/entity.c
+++ b/ext/dom/entity.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: entity.c,v 1.9.2.1.2.2 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: entity.c,v 1.9.2.1.2.3 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dom/entityreference.c b/ext/dom/entityreference.c
index 740a29ebd..b01bcbf7a 100644
--- a/ext/dom/entityreference.c
+++ b/ext/dom/entityreference.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: entityreference.c,v 1.12.2.1.2.4 2008/02/04 15:23:11 sebastian Exp $ */
+/* $Id: entityreference.c,v 1.12.2.1.2.5 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dom/namednodemap.c b/ext/dom/namednodemap.c
index 75885e101..2f83607a2 100644
--- a/ext/dom/namednodemap.c
+++ b/ext/dom/namednodemap.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: namednodemap.c,v 1.15.2.2.2.3 2008/02/04 15:23:11 sebastian Exp $ */
+/* $Id: namednodemap.c,v 1.15.2.2.2.4 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dom/namelist.c b/ext/dom/namelist.c
index 93b4778ec..c0c82b602 100644
--- a/ext/dom/namelist.c
+++ b/ext/dom/namelist.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: namelist.c,v 1.7.2.1.2.3 2008/02/04 15:23:11 sebastian Exp $ */
+/* $Id: namelist.c,v 1.7.2.1.2.4 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dom/node.c b/ext/dom/node.c
index d02f20a14..138c59dec 100644
--- a/ext/dom/node.c
+++ b/ext/dom/node.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: node.c,v 1.37.2.3.2.11 2008/01/30 06:48:20 sebastian Exp $ */
+/* $Id: node.c,v 1.37.2.3.2.13 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -112,7 +112,7 @@ ZEND_END_ARG_INFO();
static
ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_node_set_user_data, 0, 0, 3)
ZEND_ARG_INFO(0, key)
- ZEND_ARG_OBJ_INFO(0, data, DOMUserData, 0)
+ ZEND_ARG_INFO(0, data)
ZEND_ARG_INFO(0, handler)
ZEND_END_ARG_INFO();
diff --git a/ext/dom/nodelist.c b/ext/dom/nodelist.c
index fbd6bfd1c..ecea228dc 100644
--- a/ext/dom/nodelist.c
+++ b/ext/dom/nodelist.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: nodelist.c,v 1.17.2.2.2.4 2008/02/04 15:23:11 sebastian Exp $ */
+/* $Id: nodelist.c,v 1.17.2.2.2.5 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dom/notation.c b/ext/dom/notation.c
index 5009bfbe4..e30f5a875 100644
--- a/ext/dom/notation.c
+++ b/ext/dom/notation.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: notation.c,v 1.9.2.2.2.2 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: notation.c,v 1.9.2.2.2.3 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dom/php_dom.c b/ext/dom/php_dom.c
index f994fc08f..37d4dc2a7 100644
--- a/ext/dom/php_dom.c
+++ b/ext/dom/php_dom.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_dom.c,v 1.73.2.12.2.13 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: php_dom.c,v 1.73.2.12.2.15 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -186,7 +186,7 @@ int dom_set_doc_classmap(php_libxml_ref_obj *document, zend_class_entry *basece,
if (ce) {
return zend_hash_update(doc_props->classmap, basece->name, basece->name_length + 1, &ce, sizeof(ce), NULL);
} else {
- return zend_hash_del(doc_props->classmap, basece->name, basece->name_length + 1);
+ zend_hash_del(doc_props->classmap, basece->name, basece->name_length + 1);
}
}
return SUCCESS;
diff --git a/ext/dom/php_dom.h b/ext/dom/php_dom.h
index 6f82067ad..61f11f3bb 100644
--- a/ext/dom/php_dom.h
+++ b/ext/dom/php_dom.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_dom.h,v 1.28.2.1.2.5 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: php_dom.h,v 1.28.2.1.2.6 2008/12/31 11:17:37 sebastian Exp $ */
#ifndef PHP_DOM_H
#define PHP_DOM_H
diff --git a/ext/dom/processinginstruction.c b/ext/dom/processinginstruction.c
index cbfb29861..67354d829 100644
--- a/ext/dom/processinginstruction.c
+++ b/ext/dom/processinginstruction.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: processinginstruction.c,v 1.17.2.1.2.3 2008/02/04 15:23:11 sebastian Exp $ */
+/* $Id: processinginstruction.c,v 1.17.2.1.2.5 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -81,7 +81,7 @@ PHP_METHOD(domprocessinginstruction, __construct)
intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
if (intern != NULL) {
- oldnode = (xmlNodePtr)intern->ptr;
+ oldnode = dom_object_get_node(intern);
if (oldnode != NULL) {
php_libxml_node_free_resource(oldnode TSRMLS_CC);
}
diff --git a/ext/dom/string_extend.c b/ext/dom/string_extend.c
index 60a522f1b..af0a1db27 100644
--- a/ext/dom/string_extend.c
+++ b/ext/dom/string_extend.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: string_extend.c,v 1.5.2.1.2.3 2008/02/04 15:23:11 sebastian Exp $ */
+/* $Id: string_extend.c,v 1.5.2.1.2.4 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dom/tests/DOMCharacterData_appendData_basic.phpt b/ext/dom/tests/DOMCharacterData_appendData_basic.phpt
new file mode 100644
index 000000000..ee590de80
--- /dev/null
+++ b/ext/dom/tests/DOMCharacterData_appendData_basic.phpt
@@ -0,0 +1,35 @@
+--TEST--
+DOMCharacterData::appendData basic functionality test
+--CREDITS--
+Mike Sullivan <mike@regexia.com>
+#TestFest 2008 (London)
+--FILE--
+<?php
+
+$document = new DOMDocument;
+$root = $document->createElement('root');
+$document->appendChild($root);
+
+$cdata = $document->createElement('cdata');
+$root->appendChild($cdata);
+
+$cdatanode = $document->createCDATASection('');
+$cdata->appendChild($cdatanode);
+$cdatanode->appendData('data');
+echo "CDATA Length (one append): " . $cdatanode->length . "\n";
+
+$cdatanode->appendData('><&"');
+echo "CDATA Length (two appends): " . $cdatanode->length . "\n";
+
+echo "CDATA Content: " . $cdatanode->data . "\n";
+
+echo "\n" . $document->saveXML();
+
+?>
+--EXPECT--
+CDATA Length (one append): 4
+CDATA Length (two appends): 8
+CDATA Content: data><&"
+
+<?xml version="1.0"?>
+<root><cdata><![CDATA[data><&"]]></cdata></root> \ No newline at end of file
diff --git a/ext/dom/tests/DOMComment_appendData_basic.phpt b/ext/dom/tests/DOMComment_appendData_basic.phpt
new file mode 100644
index 000000000..c756f1665
--- /dev/null
+++ b/ext/dom/tests/DOMComment_appendData_basic.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Test adding data to a DOMComment
+--CREDITS--
+Andrew Larssen <al@larssen.org>
+London TestFest 2008
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+
+$dom = new DomDocument();
+$comment = $dom->createComment('test-comment');
+$comment->appendData('-more-data');
+$dom->appendChild($comment);
+$dom->saveXML();
+echo $dom->saveXML();
+
+?>
+--EXPECTF--
+<?xml version="1.0"?>
+<!--test-comment-more-data--> \ No newline at end of file
diff --git a/ext/dom/tests/DOMComment_appendData_basic_Sullivan.phpt b/ext/dom/tests/DOMComment_appendData_basic_Sullivan.phpt
new file mode 100644
index 000000000..ae06d8a87
--- /dev/null
+++ b/ext/dom/tests/DOMComment_appendData_basic_Sullivan.phpt
@@ -0,0 +1,37 @@
+--TEST--
+DOMComment::appendData basic functionality test
+--CREDITS--
+Mike Sullivan <mike@regexia.com>
+#TestFest 2008 (London)
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+
+$document = new DOMDocument;
+$root = $document->createElement('root');
+$document->appendChild($root);
+
+$comment = $document->createElement('comment');
+$root->appendChild($comment);
+
+$commentnode = $document->createComment('');
+$comment->appendChild($commentnode);
+$commentnode->appendData('data');
+echo "Comment Length (one append): " . $commentnode->length . "\n";
+
+$commentnode->appendData('><&"');
+echo "Comment Length (two appends): " . $commentnode->length . "\n";
+
+echo "Comment Content: " . $commentnode->data . "\n";
+
+echo "\n" . $document->saveXML();
+
+?>
+--EXPECT--
+Comment Length (one append): 4
+Comment Length (two appends): 8
+Comment Content: data><&"
+
+<?xml version="1.0"?>
+<root><comment><!--data><&"--></comment></root> \ No newline at end of file
diff --git a/ext/dom/tests/DOMComment_insertData_basic.phpt b/ext/dom/tests/DOMComment_insertData_basic.phpt
new file mode 100644
index 000000000..5a4857d67
--- /dev/null
+++ b/ext/dom/tests/DOMComment_insertData_basic.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Test inserting data into a DOMComment basic test
+--CREDITS--
+Andrew Larssen <al@larssen.org>
+London TestFest 2008
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+
+//correct offset
+$dom = new DomDocument();
+$comment = $dom->createComment('test-comment');
+$comment->insertData(4,'-inserted');
+$dom->appendChild($comment);
+echo $dom->saveXML();
+
+?>
+--EXPECTF--
+<?xml version="1.0"?>
+<!--test-inserted-comment-->
diff --git a/ext/dom/tests/DOMComment_insertData_error1.phpt b/ext/dom/tests/DOMComment_insertData_error1.phpt
new file mode 100644
index 000000000..56922ac51
--- /dev/null
+++ b/ext/dom/tests/DOMComment_insertData_error1.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Test inserting data into a DOMComment basic test
+--CREDITS--
+Andrew Larssen <al@larssen.org>
+London TestFest 2008
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+
+//Negative offset
+$dom = new DomDocument();
+$comment = $dom->createComment('test-comment');
+try {
+ $comment->insertData(-1,'-inserted');
+} catch (DOMException $e ) {
+ if ($e->getMessage() == 'Index Size Error'){
+ echo "Throws DOMException for -ve offset\n";
+ }
+}
+
+?>
+--EXPECTF--
+Throws DOMException for -ve offset
diff --git a/ext/dom/tests/DOMComment_insertData_error2.phpt b/ext/dom/tests/DOMComment_insertData_error2.phpt
new file mode 100644
index 000000000..d2affa89e
--- /dev/null
+++ b/ext/dom/tests/DOMComment_insertData_error2.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Test inserting data into a DOMComment basic test
+--CREDITS--
+Andrew Larssen <al@larssen.org>
+London TestFest 2008
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+
+//offset to large
+$dom = new DomDocument();
+$comment = $dom->createComment('test-comment');
+try {
+ $comment->insertData(999,'-inserted');
+} catch (DOMException $e ) {
+ if ($e->getMessage() == 'Index Size Error'){
+ echo "Throws DOMException for offset too large\n";
+ }
+}
+
+?>
+--EXPECTF--
+Throws DOMException for offset too large \ No newline at end of file
diff --git a/ext/dom/tests/DOMComment_replaceData_basic.phpt b/ext/dom/tests/DOMComment_replaceData_basic.phpt
new file mode 100644
index 000000000..2963cb1e0
--- /dev/null
+++ b/ext/dom/tests/DOMComment_replaceData_basic.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Test replacing data into a DOMComment basic test
+--CREDITS--
+Andrew Larssen <al@larssen.org>
+London TestFest 2008
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+
+$dom = new DomDocument();
+$comment = $dom->createComment('test-comment');
+$comment->replaceData(4,1,'replaced');
+$dom->appendChild($comment);
+echo $dom->saveXML();
+
+// Replaces rest of string if count is greater than length of existing string
+$dom = new DomDocument();
+$comment = $dom->createComment('test-comment');
+$comment->replaceData(0,50,'replaced');
+$dom->appendChild($comment);
+echo $dom->saveXML();
+
+?>
+--EXPECTF--
+<?xml version="1.0"?>
+<!--testreplacedcomment-->
+<?xml version="1.0"?>
+<!--replaced-->
diff --git a/ext/dom/tests/DOMComment_replaceData_error1.phpt b/ext/dom/tests/DOMComment_replaceData_error1.phpt
new file mode 100644
index 000000000..4ae4cb61d
--- /dev/null
+++ b/ext/dom/tests/DOMComment_replaceData_error1.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Test replacing data into a DOMComment basic test
+--CREDITS--
+Andrew Larssen <al@larssen.org>
+London TestFest 2008
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+
+//Negative offset
+$dom = new DomDocument();
+$comment = $dom->createComment('test-comment');
+try {
+ $comment->replaceData(-1,4,'-inserted');
+} catch (DOMException $e ) {
+ if ($e->getMessage() == 'Index Size Error'){
+ echo "Throws DOMException for -ve offest\n";
+ }
+}
+
+?>
+--EXPECTF--
+Throws DOMException for -ve offest
diff --git a/ext/dom/tests/DOMComment_replaceData_error2.phpt b/ext/dom/tests/DOMComment_replaceData_error2.phpt
new file mode 100644
index 000000000..89614f975
--- /dev/null
+++ b/ext/dom/tests/DOMComment_replaceData_error2.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Test replacing data into a DOMComment basic test
+--CREDITS--
+Andrew Larssen <al@larssen.org>
+London TestFest 2008
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+
+//offset to large
+$dom = new DomDocument();
+$comment = $dom->createComment('test-comment');
+try {
+ $comment->replaceData(999,4,'-inserted');
+} catch (DOMException $e ) {
+ if ($e->getMessage() == 'Index Size Error'){
+ echo "Throws DOMException for offest too large\n";
+ }
+}
+
+?>
+--EXPECTF--
+Throws DOMException for offest too large \ No newline at end of file
diff --git a/ext/dom/tests/DOMDocumentFragment_appendXML_hasChildNodes_basic.phpt b/ext/dom/tests/DOMDocumentFragment_appendXML_hasChildNodes_basic.phpt
new file mode 100644
index 000000000..c82a73b52
--- /dev/null
+++ b/ext/dom/tests/DOMDocumentFragment_appendXML_hasChildNodes_basic.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Testing DOMDocumentFragment::appendXML and DOMDocumentFragment::hasChildNodes
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$doc = new DOMDocument();
+
+$fragment = $doc->createDocumentFragment();
+if ($fragment->hasChildNodes()) {
+ echo "has child nodes\n";
+} else {
+ echo "has no child nodes\n";
+}
+$fragment->appendXML('<foo>bar</foo>');
+if ($fragment->hasChildNodes()) {
+ echo "has child nodes\n";
+} else {
+ echo "has no child nodes\n";
+}
+--EXPECT--
+has no child nodes
+has child nodes
diff --git a/ext/dom/tests/DOMDocument_createAttribute_basic.phpt b/ext/dom/tests/DOMDocument_createAttribute_basic.phpt
new file mode 100644
index 000000000..4dd181b3f
--- /dev/null
+++ b/ext/dom/tests/DOMDocument_createAttribute_basic.phpt
@@ -0,0 +1,26 @@
+--TEST--
+DomDocument::createAttribute() - basic test for DomDocument::createAttribute()
+--CREDITS--
+Muhammad Khalid Adnan
+# TestFest 2008
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+
+$doc = new DOMDocument;
+
+$node = $doc->createElement("para");
+$newnode = $doc->appendChild($node);
+
+// A pass case.
+$test_attribute = $doc->createAttribute("hahaha");
+$node->appendChild($test_attribute);
+
+echo $doc->saveXML();
+
+?>
+--EXPECT--
+<?xml version="1.0"?>
+<para hahaha=""/>
+
diff --git a/ext/dom/tests/DOMDocument_createAttribute_error.phpt b/ext/dom/tests/DOMDocument_createAttribute_error.phpt
new file mode 100644
index 000000000..bf71d554a
--- /dev/null
+++ b/ext/dom/tests/DOMDocument_createAttribute_error.phpt
@@ -0,0 +1,27 @@
+--TEST--
+Test DOMDocument::createAttribute() for expected expection thrown when wrong parameter passed
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$dom = new DOMDocument();
+
+try {
+ $attr = $dom->createAttribute(0);
+}
+catch(DOMException $e) {
+ $code = $e->getCode();
+ if(DOM_INVALID_CHARACTER_ERR === $code) {
+ echo "PASS";
+ }
+ else {
+ echo 'Wrong exception code';
+ }
+}
+catch(Exception $e) {
+ echo 'Wrong exception thrown';
+}
+
+?>
+--EXPECTF--
+PASS
diff --git a/ext/dom/tests/DOMDocument_createAttribute_error1.phpt b/ext/dom/tests/DOMDocument_createAttribute_error1.phpt
new file mode 100644
index 000000000..745873aca
--- /dev/null
+++ b/ext/dom/tests/DOMDocument_createAttribute_error1.phpt
@@ -0,0 +1,29 @@
+--TEST--
+DomDocument::createAttribute() - error test for DomDocument::createAttribute()
+--CREDITS--
+Muhammad Khalid Adnan
+# TestFest 2008
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+
+$doc = new DOMDocument;
+
+$node = $doc->createElement("para");
+$newnode = $doc->appendChild($node);
+
+try {
+ $failed_test_attribute = $doc->createAttribute("ha haha");
+ $node->appendChild($failed_test_attribute);
+
+ echo $doc->saveXML();
+}
+catch (DOMException $e) {
+ echo 'Test failed!', PHP_EOL;
+}
+
+?>
+--EXPECT--
+Test failed!
+
diff --git a/ext/dom/tests/DOMDocument_createAttribute_variation.phpt b/ext/dom/tests/DOMDocument_createAttribute_variation.phpt
new file mode 100644
index 000000000..ff81343cc
--- /dev/null
+++ b/ext/dom/tests/DOMDocument_createAttribute_variation.phpt
@@ -0,0 +1,14 @@
+--TEST--
+Test DOMDocument::createAttribute() for expected return value
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$dom = new DOMDocument();
+
+$attr = $dom->createAttribute('string');
+echo get_class($attr);
+
+?>
+--EXPECTF--
+DOMAttr
diff --git a/ext/dom/tests/DOMDocument_createProcessingInstruction_basic.phpt b/ext/dom/tests/DOMDocument_createProcessingInstruction_basic.phpt
new file mode 100644
index 000000000..9f45f125d
--- /dev/null
+++ b/ext/dom/tests/DOMDocument_createProcessingInstruction_basic.phpt
@@ -0,0 +1,30 @@
+--TEST--
+DomDocument::createProcessingInstruction() - basic test for DomDocument::createProcessingInstruction()
+--CREDITS--
+Muhammad Khalid Adnan
+# TestFest 2008
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+
+$doc = new DOMDocument;
+
+$node = $doc->createElement("para");
+$newnode = $doc->appendChild($node);
+
+$test_proc_inst0 =
+ $doc->createProcessingInstruction( "blablabla" );
+$node->appendChild($test_proc_inst0);
+
+$test_proc_inst1 =
+ $doc->createProcessingInstruction( "blablabla", "datadata" );
+$node->appendChild($test_proc_inst1);
+
+echo $doc->saveXML();
+
+?>
+--EXPECT--
+<?xml version="1.0"?>
+<para><?blablabla?><?blablabla datadata?></para>
+
diff --git a/ext/dom/tests/DOMDocument_createProcessingInstruction_error.phpt b/ext/dom/tests/DOMDocument_createProcessingInstruction_error.phpt
new file mode 100644
index 000000000..a0c12b1fe
--- /dev/null
+++ b/ext/dom/tests/DOMDocument_createProcessingInstruction_error.phpt
@@ -0,0 +1,31 @@
+--TEST--
+DomDocument::createProcessingInstruction() - error test for DomDocument::createProcessingInstruction()
+--CREDITS--
+Muhammad Khalid Adnan
+# TestFest 2008
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+
+$doc = new DOMDocument;
+
+$node = $doc->createElement("para");
+$newnode = $doc->appendChild($node);
+
+try {
+ $test_proc_inst =
+ $doc->createProcessingInstruction( "bla bla bla" );
+ $node->appendChild($test_proc_inst);
+
+ echo $doc->saveXML();
+}
+catch (DOMException $e)
+{
+ echo 'Test failed!', PHP_EOL;
+}
+
+?>
+--EXPECT--
+Test failed!
+
diff --git a/ext/dom/tests/DOMDocument_loadHTML_basic.phpt b/ext/dom/tests/DOMDocument_loadHTML_basic.phpt
new file mode 100644
index 000000000..616d1d837
--- /dev/null
+++ b/ext/dom/tests/DOMDocument_loadHTML_basic.phpt
@@ -0,0 +1,18 @@
+--TEST--
+DOMDocument::loadHTML
+--CREDITS--
+Frank Cassedanne franck@ouarz.net
+#London TestFest 2008
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+?>
+--FILE--
+<?php
+$doc = new DOMDocument();
+$doc->loadHTML("<html><body><p>Test<br></p></body></html>");
+echo $doc->saveHTML();
+?>
+--EXPECTF--
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html><body><p>Test<br></p></body></html>
diff --git a/ext/dom/tests/DOMDocument_save_basic.phpt b/ext/dom/tests/DOMDocument_save_basic.phpt
new file mode 100644
index 000000000..c7d1ead24
--- /dev/null
+++ b/ext/dom/tests/DOMDocument_save_basic.phpt
@@ -0,0 +1,33 @@
+--TEST--
+DOMDocument::save Test basic function of save method
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+?>
+--FILE--
+<?php
+$doc = new DOMDocument('1.0');
+$doc->formatOutput = true;
+
+$root = $doc->createElement('book');
+
+$root = $doc->appendChild($root);
+
+$title = $doc->createElement('title');
+$title = $root->appendChild($title);
+
+$text = $doc->createTextNode('This is the title');
+$text = $title->appendChild($text);
+
+$temp_filename = dirname(__FILE__)."/DomDocument_save_basic.tmp";
+
+echo 'Wrote: ' . $doc->save($temp_filename) . ' bytes'; // Wrote: 72 bytes
+?>
+--CLEAN--
+<?php
+ $temp_filename = dirname(__FILE__)."/DomDocument_save_basic.tmp";
+ unlink($temp_filename);
+?>
+--EXPECTF--
+Wrote: 72 bytes
+
diff --git a/ext/dom/tests/DOMElement_hasAttributes_basic.phpt b/ext/dom/tests/DOMElement_hasAttributes_basic.phpt
new file mode 100644
index 000000000..36c4f5873
--- /dev/null
+++ b/ext/dom/tests/DOMElement_hasAttributes_basic.phpt
@@ -0,0 +1,51 @@
+--TEST--
+DOMNode: hasAttributes()
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--CREDITS--
+James Lewis <james@s-1.com>
+#TestFest 2008
+--FILE--
+<?php
+require_once("dom_test.inc");
+
+$dom = new DOMDocument;
+$dom->loadXML($xmlstr);
+if(!$dom) {
+ echo "Error while parsing the document\n";
+ exit;
+}
+
+$element = $dom->documentElement;
+
+echo "Verify that we have a DOMElement object:\n";
+var_dump($element);
+
+echo "\nElement should have attributes:\n";
+var_dump($element->hasAttributes());
+
+$nodelist=$dom->getElementsByTagName('tbody') ;
+$element = $nodelist->item(0);
+
+echo "\nVerify that we have a DOMElement object:\n";
+var_dump($element);
+
+echo "\nElement should have no attributes:\n";
+var_dump($element->hasAttributes())
+
+
+?>
+--EXPECTF--
+Verify that we have a DOMElement object:
+object(DOMElement)#%d (0) {
+}
+
+Element should have attributes:
+bool(true)
+
+Verify that we have a DOMElement object:
+object(DOMElement)#%d (0) {
+}
+
+Element should have no attributes:
+bool(false)
diff --git a/ext/dom/tests/DOMNode_cloneNode_basic.phpt b/ext/dom/tests/DOMNode_cloneNode_basic.phpt
new file mode 100644
index 000000000..16b8533f7
--- /dev/null
+++ b/ext/dom/tests/DOMNode_cloneNode_basic.phpt
@@ -0,0 +1,111 @@
+--TEST--
+DOM cloneNode : Basic Functionality
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+?>
+--CREDITS--
+Simon Hughes <odbc3@hotmail.com>
+--FILE--
+<?php
+
+$xml = <<< EOXML
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<courses>
+ <course title="one">
+ <notes>
+ <note>c1n1</note>
+ <note>c1n2</note>
+ </notes>
+ </course>
+ <course title="two">
+ <notes>
+ <note>c2n1</note>
+ <note>c2n2</note>
+ </notes>
+ </course>
+</courses>
+EOXML;
+
+function dumpcourse($current) {
+ $title = ($current->nodeType != XML_TEXT_NODE && $current->hasAttribute('title')) ? $current->getAttribute('title'):"no title";
+ echo "Course: $title:";var_dump($current);
+ echo "~";var_dump($current->textContent);
+}
+
+$dom = new DOMDocument();
+$dom->loadXML($xml);
+$root = $dom->documentElement;
+
+// strip all text nodes from this tree
+$children = $root->childNodes;
+$len = $children->length;
+for ($index = $children->length - 1; $index >=0; $index--) {
+ $current = $children->item($index);
+ if ($current->nodeType == XML_TEXT_NODE) {
+ $noderemoved = $root->removeChild($current);
+ }
+}
+
+echo "Start cloneNode test\n";
+$first_course = $children->item(0);
+$cloned_first_course_default = $first_course->cloneNode();
+$first_course->setAttribute('title', 'new title1');
+
+$cloned_first_course_true = $first_course->cloneNode(true);
+$first_course->setAttribute('title', 'new title2');
+
+$cloned_first_course_false = $first_course->cloneNode(false);
+$first_course->setAttribute('title', 'new title3');
+
+$cloned_first_course_default->setAttribute('title', 'new title default');
+$cloned_first_course_true->setAttribute('title', 'new title true');
+$cloned_first_course_false->setAttribute('title', 'new title false');
+
+$root->appendChild($cloned_first_course_default);
+$root->appendChild($cloned_first_course_true);
+$root->appendChild($cloned_first_course_false);
+
+$children = $root->childNodes;
+for ($index = 0; $index < $children->length; $index++) {
+ echo "node $index\n";
+ dumpcourse($children->item($index));
+}
+
+--EXPECTF--
+Start cloneNode test
+node 0
+Course: new title3:object(DOMElement)#6 (0) {
+}
+~string(24) "
+
+ c1n1
+ c1n2
+
+ "
+node 1
+Course: two:object(DOMElement)#3 (0) {
+}
+~string(24) "
+
+ c2n1
+ c2n2
+
+ "
+node 2
+Course: new title default:object(DOMElement)#4 (0) {
+}
+~string(0) ""
+node 3
+Course: new title true:object(DOMElement)#7 (0) {
+}
+~string(24) "
+
+ c1n1
+ c1n2
+
+ "
+node 4
+Course: new title false:object(DOMElement)#8 (0) {
+}
+~string(0) "" \ No newline at end of file
diff --git a/ext/dom/tests/DOMNode_hasChildNodes_basic.phpt b/ext/dom/tests/DOMNode_hasChildNodes_basic.phpt
new file mode 100644
index 000000000..3a6f6b421
--- /dev/null
+++ b/ext/dom/tests/DOMNode_hasChildNodes_basic.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test whether a node has child nodes: hasChildNodes()
+--SKIPIF--
+<?php
+include('skipif.inc');
+?>
+--FILE--
+<?php
+
+/* Create an XML document
+ * with strcuture
+ * <book>
+ * <title>This is the title</title>
+ * </book>
+ * Check for child nodes of the <book>, <title> and This is the title
+ *
+*/
+
+$doc = new DOMDocument();
+
+$root = $doc->createElement('book');
+$doc->appendChild($root);
+
+$title = $doc->createElement('title');
+$root->appendChild($title);
+
+$text = $doc->createTextNode('This is the title');
+$title->appendChild($text);
+
+echo "Root has child nodes: ";
+var_dump($root->hasChildNodes());
+
+echo "Title has child nodes: ";
+var_dump($title->hasChildNodes());
+
+echo "Text has child nodes: ";
+var_dump($text->hasChildNodes());
+
+?>
+--EXPECTF--
+Root has child nodes: bool(true)
+Title has child nodes: bool(true)
+Text has child nodes: bool(false) \ No newline at end of file
diff --git a/ext/dom/tests/DOMNode_issamenode_basic.phpt b/ext/dom/tests/DOMNode_issamenode_basic.phpt
new file mode 100644
index 000000000..e008340ea
--- /dev/null
+++ b/ext/dom/tests/DOMNode_issamenode_basic.phpt
@@ -0,0 +1,37 @@
+--TEST--
+DOMNode: isSameNode()
+--CREDITS--
+James Lewis <james@s-1.com>
+#TestFest 2008
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+require_once("dom_test.inc");
+
+$dom = new DOMDocument;
+$dom->loadXML($xmlstr);
+if(!$dom) {
+ echo "Error while parsing the document\n";
+ exit;
+}
+
+$node = $dom->documentElement;
+if($node->isSameNode($node))
+ echo "EXPECTING SAME NODE, PASSED\n" ;
+else
+ echo "EXPECTING SAME NODE, FAILED\n" ;
+
+$nodelist=$dom->getElementsByTagName('tbody') ;
+
+if($nodelist->item(0)->isSameNode($node))
+ echo "EXPECTING NOT SAME NODE, FAILED\n" ;
+else
+ echo "EXPECTING NOT SAME NODE, PASSED\n" ;
+
+?>
+===DONE===
+--EXPECT--
+EXPECTING SAME NODE, PASSED
+EXPECTING NOT SAME NODE, PASSED
+===DONE===
diff --git a/ext/dom/tests/DOMNode_normalize_basic.phpt b/ext/dom/tests/DOMNode_normalize_basic.phpt
new file mode 100644
index 000000000..e413fb033
--- /dev/null
+++ b/ext/dom/tests/DOMNode_normalize_basic.phpt
@@ -0,0 +1,64 @@
+--TEST--
+DOMNode::normalize()
+--SKIPIF--
+<?php
+include('skipif.inc');
+?>
+--FILE--
+<?php
+
+/* Create an XML document
+ * with structure
+ * <book>
+ * <author></author>
+ * <title>This is the title</title>
+ * </book>
+ * Calculate the number of title text nodes (1).
+ * Add another text node to title. Calculate the number of title text nodes (2).
+ * Normalize author. Calculate the number of title text nodes (2).
+ * Normalize title. Calculate the number of title text nodes (1).
+*/
+
+$doc = new DOMDocument();
+
+$root = $doc->createElement('book');
+$doc->appendChild($root);
+
+$title = $doc->createElement('title');
+$root->appendChild($title);
+
+$author = $doc->createElement('author');
+$root->appendChild($author);
+
+$text = $doc->createTextNode('This is the first title');
+$title->appendChild($text);
+
+echo "Number of child nodes of title = ";
+var_dump($title->childNodes->length);
+
+// add a second text node to title
+$text = $doc->createTextNode('This is the second title');
+$title->appendChild($text);
+
+echo "Number of child nodes of title after adding second title = ";
+var_dump($title->childNodes->length);
+
+// should do nothing
+$author->normalize();
+
+echo "Number of child nodes of title after normalizing author = ";
+var_dump($title->childNodes->length);
+
+
+// should concatenate first and second title text nodes
+$title->normalize();
+
+echo "Number of child nodes of title after normalizing title = ";
+var_dump($title->childNodes->length);
+
+?>
+--EXPECTF--
+Number of child nodes of title = int(1)
+Number of child nodes of title after adding second title = int(2)
+Number of child nodes of title after normalizing author = int(2)
+Number of child nodes of title after normalizing title = int(1) \ No newline at end of file
diff --git a/ext/dom/tests/DOMNode_removeChild_basic.phpt b/ext/dom/tests/DOMNode_removeChild_basic.phpt
new file mode 100644
index 000000000..8609e58be
--- /dev/null
+++ b/ext/dom/tests/DOMNode_removeChild_basic.phpt
@@ -0,0 +1,113 @@
+--TEST--
+DOM removeChild : Basic Functionality
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+?>
+--CREDITS--
+Simon Hughes <odbc3@hotmail.com>
+--FILE--
+<?php
+
+$xml = <<< EOXML
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<courses>
+ <course title="one">
+ <notes>
+ <note>c1n1</note>
+ <note>c1n2</note>
+ </notes>
+ </course>
+ <course title="two">
+ <notes>
+ <note>c2n1</note>
+ <note>c2n2</note>
+ </notes>
+ </course>
+</courses>
+EOXML;
+
+function dumpcourse($current) {
+ $title = ($current->nodeType != XML_TEXT_NODE && $current->hasAttribute('title')) ? $current->getAttribute('title'):"no title";
+ echo "Course: $title:";var_dump($current);
+ echo "~";var_dump($current->textContent);
+}
+
+$dom = new DOMDocument();
+$dom->loadXML($xml);
+$root = $dom->documentElement;
+
+$children = $root->childNodes;
+$len = $children->length;
+echo "orignal has $len nodes\n";
+for ($index = $children->length - 1; $index >=0; $index--) {
+ echo "node $index\n";
+ $current = $children->item($index);
+ dumpcourse($current);
+ if ($current->nodeType == XML_TEXT_NODE) {
+ $noderemoved = $root->removeChild($current);
+ }
+}
+$children = $root->childNodes;
+$len = $children->length;
+echo "after text removed it now has $len nodes\n";
+for ($index = 0; $index < $children->length; $index++) {
+ echo "node $index\n";
+ $current = $children->item($index);
+ dumpcourse($current);
+}
+
+--EXPECTF--
+orignal has 5 nodes
+node 4
+Course: no title:object(DOMText)#4 (0) {
+}
+~string(1) "
+"
+node 3
+Course: two:object(DOMElement)#5 (0) {
+}
+~string(24) "
+
+ c2n1
+ c2n2
+
+ "
+node 2
+Course: no title:object(DOMText)#6 (0) {
+}
+~string(2) "
+ "
+node 1
+Course: one:object(DOMElement)#4 (0) {
+}
+~string(24) "
+
+ c1n1
+ c1n2
+
+ "
+node 0
+Course: no title:object(DOMText)#5 (0) {
+}
+~string(2) "
+ "
+after text removed it now has 2 nodes
+node 0
+Course: one:object(DOMElement)#3 (0) {
+}
+~string(24) "
+
+ c1n1
+ c1n2
+
+ "
+node 1
+Course: two:object(DOMElement)#4 (0) {
+}
+~string(24) "
+
+ c2n1
+ c2n2
+
+ " \ No newline at end of file
diff --git a/ext/dom/tests/DOMNode_replaceChild_basic.phpt b/ext/dom/tests/DOMNode_replaceChild_basic.phpt
new file mode 100644
index 000000000..49fc05501
--- /dev/null
+++ b/ext/dom/tests/DOMNode_replaceChild_basic.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Replacing a child node
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--CREDITS--
+Matt Raines <matt@raines.me.uk>
+#London TestFest 2008
+--FILE--
+<?php
+$document = new DOMDocument();
+$document->loadXML('<?xml version="1.0" encoding="utf-8"?>
+<root><foo><bar/><baz/></foo><spam><eggs/><eggs/></spam></root>');
+
+// Replaces the child node oldChild with newChild in the list of children, and
+// returns the oldChild node.
+$parent = $document->getElementsByTagName('foo')->item(0);
+$new_child = $document->createElement('qux');
+$old_child = $parent->replaceChild($new_child, $parent->firstChild);
+echo "New child replaces old child:\n" . $document->saveXML();
+echo "Old child is returned:\n" . $old_child->tagName . "\n";
+
+// If the newChild is already in the tree, it is first removed.
+$parent = $document->getElementsByTagName('spam')->item(0);
+$parent->replaceChild($new_child, $parent->firstChild);
+echo "Existing child is removed from tree:\n" . $document->saveXML();
+
+// Children are inserted in the correct order.
+$new_child = $document->getElementsByTagName('spam')->item(0);
+$parent = $document->getElementsByTagName('foo')->item(0);
+$parent->replaceChild($new_child, $parent->firstChild);
+echo "Children are inserted in order:\n" . $document->saveXML();
+?>
+--EXPECT--
+New child replaces old child:
+<?xml version="1.0" encoding="utf-8"?>
+<root><foo><qux/><baz/></foo><spam><eggs/><eggs/></spam></root>
+Old child is returned:
+bar
+Existing child is removed from tree:
+<?xml version="1.0" encoding="utf-8"?>
+<root><foo><baz/></foo><spam><qux/><eggs/></spam></root>
+Children are inserted in order:
+<?xml version="1.0" encoding="utf-8"?>
+<root><foo><spam><qux/><eggs/></spam></foo></root>
diff --git a/ext/dom/tests/DOMText_appendData_basic.phpt b/ext/dom/tests/DOMText_appendData_basic.phpt
new file mode 100644
index 000000000..6a28a9ae4
--- /dev/null
+++ b/ext/dom/tests/DOMText_appendData_basic.phpt
@@ -0,0 +1,35 @@
+--TEST--
+DOMText::appendData basic functionality test
+--CREDITS--
+Mike Sullivan <mike@regexia.com>
+#TestFest 2008 (London)
+--FILE--
+<?php
+
+$document = new DOMDocument;
+$root = $document->createElement('root');
+$document->appendChild($root);
+
+$text = $document->createElement('text');
+$root->appendChild($text);
+
+$textnode = $document->createTextNode('');
+$text->appendChild($textnode);
+$textnode->appendData('data');
+echo "Text Length (one append): " . $textnode->length . "\n";
+
+$textnode->appendData('><&"');
+echo "Text Length (two appends): " . $textnode->length . "\n";
+
+echo "Text Content: " . $textnode->data . "\n";
+
+echo "\n" . $document->saveXML();
+
+?>
+--EXPECT--
+Text Length (one append): 4
+Text Length (two appends): 8
+Text Content: data><&"
+
+<?xml version="1.0"?>
+<root><text>data&gt;&lt;&amp;"</text></root> \ No newline at end of file
diff --git a/ext/dom/tests/bug34276.phpt b/ext/dom/tests/bug34276.phpt
index fd265e58e..6959d90a9 100644
--- a/ext/dom/tests/bug34276.phpt
+++ b/ext/dom/tests/bug34276.phpt
@@ -1,5 +1,5 @@
--TEST--
-Bug #34276 setAttributeNS and default namespace
+Bug #34276 (setAttributeNS and default namespace)
--SKIPIF--
<?php require_once('skipif.inc'); ?>
--FILE--
diff --git a/ext/dom/tests/bug35342.phpt b/ext/dom/tests/bug35342.phpt
index 3248c7339..f93c06233 100644
--- a/ext/dom/tests/bug35342.phpt
+++ b/ext/dom/tests/bug35342.phpt
@@ -1,5 +1,5 @@
--TEST--
-Bug #35342 isset(DOMNodeList->length) returns false
+Bug #35342 (isset(DOMNodeList->length) returns false)
--SKIPIF--
<?php require_once('skipif.inc'); ?>
--FILE--
diff --git a/ext/dom/tests/bug42082.phpt b/ext/dom/tests/bug42082.phpt
index 3e20a6b13..86f32dd8d 100644
--- a/ext/dom/tests/bug42082.phpt
+++ b/ext/dom/tests/bug42082.phpt
@@ -8,7 +8,7 @@ $nodes = $xpath->query('*');
var_dump($nodes);
var_dump($nodes->length);
$length = $nodes->length;
-var_dump(empty($nodes->length), empty($lenght));
+var_dump(empty($nodes->length), empty($length));
$doc->loadXML("<element></element>");
var_dump($doc->firstChild->nodeValue, empty($doc->firstChild->nodeValue), isset($doc->firstChild->nodeValue));
@@ -24,4 +24,4 @@ string(0) ""
bool(true)
bool(true)
bool(false)
-bool(false)
+bool(false) \ No newline at end of file
diff --git a/ext/dom/tests/bug45251.phpt b/ext/dom/tests/bug45251.phpt
new file mode 100644
index 000000000..652e3b253
--- /dev/null
+++ b/ext/dom/tests/bug45251.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Bug #45251 (double free or corruption with setAttributeNode())
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$doc = new DOMDocument;
+$doc->loadXml(<<<EOF
+<?xml version="1.0" encoding="utf-8" ?>
+<aaa>
+ <bbb foo="bar"/>
+</aaa>
+EOF
+);
+
+$xpath = new DOMXPath($doc);
+
+$bbb = $xpath->query('bbb', $doc->documentElement)->item(0);
+
+$ccc = $doc->createElement('ccc');
+foreach ($bbb->attributes as $attr)
+{
+ $ccc->setAttributeNode($attr);
+}
+
+echo $attr->parentNode->localName;
+
+?>
+--EXPECT--
+ccc
diff --git a/ext/dom/tests/bug46335.phpt b/ext/dom/tests/bug46335.phpt
new file mode 100644
index 000000000..bea4ae9e7
--- /dev/null
+++ b/ext/dom/tests/bug46335.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Bug #46335 (DOMText::splitText doesn't handle multibyte characters).
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$textascii = 'This is an "example" of using DOM splitText';
+$text = 'This is an ‘example’ of using DOM splitText';
+$start = 30;
+$length = 3;
+
+$dom = new DOMDocument('1.0', 'UTF-8');
+$node = $dom->createTextNode($textascii);
+$dom->appendChild($node);
+
+print "Text: $node->textContent\n";
+
+$matched = $node->splitText($start);
+$matched->splitText($length);
+print "splitText (ASCII): $matched->textContent\n";
+
+$node = $dom->createTextNode($text);
+$dom->appendChild($node);
+
+print "Text: $node->textContent\n";
+
+$matched = $node->splitText($start);
+$matched->splitText($length);
+print "splitText (UTF-8): $matched->textContent\n";
+?>
+--EXPECT--
+Text: This is an "example" of using DOM splitText
+splitText (ASCII): DOM
+Text: This is an ‘example’ of using DOM splitText
+splitText (UTF-8): DOM
diff --git a/ext/dom/tests/dom_comment_basic.phpt b/ext/dom/tests/dom_comment_basic.phpt
new file mode 100644
index 000000000..cb029ed04
--- /dev/null
+++ b/ext/dom/tests/dom_comment_basic.phpt
@@ -0,0 +1,46 @@
+--TEST--
+DOM Comment : Basic Functionality
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+?>
+--FILE--
+<?php
+
+$xml = <<< EOXML
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<courses>
+ <!-- Hello World! -->
+</courses>
+EOXML;
+
+$dom = new DOMDocument();
+$dom->loadXML($xml);
+$root = $dom->documentElement;
+var_dump($root->hasChildNodes());
+$children = $root->childNodes;
+
+for ($index = 0; $index < $children->length; $index++) {
+ echo "--- child $index ---\n";
+ $current = $children->item($index);
+ var_dump($current);
+ var_dump($current->textContent);
+}
+
+--EXPECTF--
+bool(true)
+--- child 0 ---
+object(DOMText)#%d (0) {
+}
+string(2) "
+ "
+--- child 1 ---
+object(DOMComment)#%d (0) {
+}
+string(14) " Hello World! "
+--- child 2 ---
+object(DOMText)#%d (0) {
+}
+string(1) "
+"
+
diff --git a/ext/dom/tests/dom_comment_variation.phpt b/ext/dom/tests/dom_comment_variation.phpt
new file mode 100644
index 000000000..bef0ef1b1
--- /dev/null
+++ b/ext/dom/tests/dom_comment_variation.phpt
@@ -0,0 +1,33 @@
+--TEST--
+DOM Comment : Variation
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+?>
+--FILE--
+<?php
+
+$xml = <<< EOXML
+<?xml version="1.0" encoding="ISO-8859-1"?><courses><!-- Hello World! --></courses>
+EOXML;
+
+$dom = new DOMDocument();
+$dom->loadXML($xml);
+$root = $dom->documentElement;
+var_dump($root->hasChildNodes());
+$children = $root->childNodes;
+
+for ($index = 0; $index < $children->length; $index++) {
+ echo "--- child $index ---\n";
+ $current = $children->item($index);
+ var_dump($current);
+ var_dump($current->textContent);
+}
+
+--EXPECTF--
+bool(true)
+--- child 0 ---
+object(DOMComment)#%d (0) {
+}
+string(14) " Hello World! "
+
diff --git a/ext/dom/text.c b/ext/dom/text.c
index 82f871d4e..b0acfa014 100644
--- a/ext/dom/text.c
+++ b/ext/dom/text.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: text.c,v 1.23.2.1.2.6 2008/02/04 15:23:11 sebastian Exp $ */
+/* $Id: text.c,v 1.23.2.1.2.9 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -91,7 +91,7 @@ PHP_METHOD(domtext, __construct)
intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
if (intern != NULL) {
- oldnode = (xmlNodePtr)intern->ptr;
+ oldnode = dom_object_get_node(intern);
if (oldnode != NULL) {
php_libxml_node_free_resource(oldnode TSRMLS_CC);
}
@@ -172,19 +172,19 @@ PHP_FUNCTION(dom_text_split_text)
if (cur == NULL) {
RETURN_FALSE;
}
- length = xmlStrlen(cur);
+ length = xmlUTF8Strlen(cur);
if (offset > length || offset < 0) {
xmlFree(cur);
RETURN_FALSE;
}
- first = xmlStrndup(cur, offset);
- second = xmlStrdup(cur + offset);
+ first = xmlUTF8Strndup(cur, offset);
+ second = xmlUTF8Strsub(cur, offset, length - offset);
xmlFree(cur);
- xmlNodeSetContentLen(node, first, offset);
+ xmlNodeSetContent(node, first);
nnode = xmlNewDocText(node->doc, second);
xmlFree(first);
diff --git a/ext/dom/typeinfo.c b/ext/dom/typeinfo.c
index 0dd169329..8753be925 100644
--- a/ext/dom/typeinfo.c
+++ b/ext/dom/typeinfo.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: typeinfo.c,v 1.6.2.1.2.2 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: typeinfo.c,v 1.6.2.1.2.3 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dom/userdatahandler.c b/ext/dom/userdatahandler.c
index 3a43fd6cb..a2655c743 100644
--- a/ext/dom/userdatahandler.c
+++ b/ext/dom/userdatahandler.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: userdatahandler.c,v 1.6.2.1.2.2 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: userdatahandler.c,v 1.6.2.1.2.3 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/dom/xml_common.h b/ext/dom/xml_common.h
index a96861697..3578763a8 100644
--- a/ext/dom/xml_common.h
+++ b/ext/dom/xml_common.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: xml_common.h,v 1.23.2.1.2.3 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: xml_common.h,v 1.23.2.1.2.4 2008/12/31 11:17:37 sebastian Exp $ */
#ifndef PHP_XML_COMMON_H
#define PHP_XML_COMMON_H
diff --git a/ext/dom/xpath.c b/ext/dom/xpath.c
index 9910e4e25..76561fef6 100644
--- a/ext/dom/xpath.c
+++ b/ext/dom/xpath.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: xpath.c,v 1.26.2.1.2.3 2008/01/29 15:55:29 sebastian Exp $ */
+/* $Id: xpath.c,v 1.26.2.1.2.4 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/exif/exif.c b/ext/exif/exif.c
index c347f6b12..69ee59614 100644
--- a/ext/exif/exif.c
+++ b/ext/exif/exif.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: exif.c,v 1.173.2.5.2.25 2008/03/12 17:33:14 iliaa Exp $ */
+/* $Id: exif.c,v 1.173.2.5.2.27 2008/12/31 11:17:37 sebastian Exp $ */
/* ToDos
*
@@ -142,7 +142,7 @@ zend_function_entry exif_functions[] = {
};
/* }}} */
-#define EXIF_VERSION "1.4 $Id: exif.c,v 1.173.2.5.2.25 2008/03/12 17:33:14 iliaa Exp $"
+#define EXIF_VERSION "1.4 $Id: exif.c,v 1.173.2.5.2.27 2008/12/31 11:17:37 sebastian Exp $"
/* {{{ PHP_MINFO_FUNCTION
*/
@@ -2862,11 +2862,9 @@ static int exif_process_IFD_TAG(image_info_type *ImageInfo, char *dir_entry, cha
/* If its bigger than 4 bytes, the dir entry contains an offset. */
value_ptr = offset_base+offset_val;
if (offset_val+byte_count > IFDlength || value_ptr < dir_entry) {
- /*
- // It is important to check for IMAGE_FILETYPE_TIFF
- // JPEG does not use absolute pointers instead its pointers are relative to the start
- // of the TIFF header in APP1 section.
- */
+ /* It is important to check for IMAGE_FILETYPE_TIFF
+ * JPEG does not use absolute pointers instead its pointers are
+ * relative to the start of the TIFF header in APP1 section. */
if (offset_val+byte_count>ImageInfo->FileSize || (ImageInfo->FileType!=IMAGE_FILETYPE_TIFF_II && ImageInfo->FileType!=IMAGE_FILETYPE_TIFF_MM && ImageInfo->FileType!=IMAGE_FILETYPE_JPEG)) {
if (value_ptr < dir_entry) {
/* we can read this if offset_val > 0 */
@@ -2884,13 +2882,11 @@ static int exif_process_IFD_TAG(image_info_type *ImageInfo, char *dir_entry, cha
value_ptr = safe_emalloc(byte_count, 1, 0);
outside = value_ptr;
} else {
- /*
- // in most cases we only access a small range so
- // it is faster to use a static buffer there
- // BUT it offers also the possibility to have
- // pointers read without the need to free them
- // explicitley before returning.
- */
+ /* In most cases we only access a small range so
+ * it is faster to use a static buffer there
+ * BUT it offers also the possibility to have
+ * pointers read without the need to free them
+ * explicitley before returning. */
memset(&cbuf, 0, sizeof(cbuf));
value_ptr = cbuf;
}
diff --git a/ext/exif/php_exif.h b/ext/exif/php_exif.h
index c020dfe3b..3939572b2 100644
--- a/ext/exif/php_exif.h
+++ b/ext/exif/php_exif.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_exif.h,v 1.14.2.1.2.2 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: php_exif.h,v 1.14.2.1.2.3 2008/12/31 11:17:37 sebastian Exp $ */
#if HAVE_EXIF
extern zend_module_entry exif_module_entry;
diff --git a/ext/exif/tests/exif007.phpt b/ext/exif/tests/exif007.phpt
new file mode 100644
index 000000000..8e82fe5ab
--- /dev/null
+++ b/ext/exif/tests/exif007.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Check for exif_read_data, baseline JPEG with no IFD, EXIF, GPS or Interoperability data in Intel byte-order.
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--INI--
+output_handler=
+zlib.output_compression=0
+--FILE--
+<?php
+var_dump(exif_read_data(dirname(__FILE__).'/image007.jpg'));
+?>
+--EXPECTF--
+array(7) {
+ ["FileName"]=>
+ string(12) "image007.jpg"
+ ["FileDateTime"]=>
+ int(%d)
+ ["FileSize"]=>
+ int(%d)
+ ["FileType"]=>
+ int(2)
+ ["MimeType"]=>
+ string(10) "image/jpeg"
+ ["SectionsFound"]=>
+ string(0) ""
+ ["COMPUTED"]=>
+ array(4) {
+ ["html"]=>
+ string(20) "width="1" height="1""
+ ["Height"]=>
+ int(1)
+ ["Width"]=>
+ int(1)
+ ["IsColor"]=>
+ int(1)
+ }
+}
+--CREDIT--
+Eric Stewart <ericleestewart@gmail.com>
diff --git a/ext/exif/tests/exif008.phpt b/ext/exif/tests/exif008.phpt
new file mode 100644
index 000000000..01da06e01
--- /dev/null
+++ b/ext/exif/tests/exif008.phpt
@@ -0,0 +1,65 @@
+--TEST--
+Check for exif_read_data, JPEG with IFD data in Intel byte-order.
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--INI--
+output_handler=
+zlib.output_compression=0
+--FILE--
+<?php
+var_dump(exif_read_data(dirname(__FILE__).'/image008.jpg'));
+?>
+--EXPECTF--
+array(16) {
+ ["FileName"]=>
+ string(12) "image008.jpg"
+ ["FileDateTime"]=>
+ int(%d)
+ ["FileSize"]=>
+ int(%d)
+ ["FileType"]=>
+ int(2)
+ ["MimeType"]=>
+ string(10) "image/jpeg"
+ ["SectionsFound"]=>
+ string(13) "ANY_TAG, IFD0"
+ ["COMPUTED"]=>
+ array(8) {
+ ["html"]=>
+ string(20) "width="1" height="1""
+ ["Height"]=>
+ int(1)
+ ["Width"]=>
+ int(1)
+ ["IsColor"]=>
+ int(1)
+ ["ByteOrderMotorola"]=>
+ int(0)
+ ["Copyright"]=>
+ string(24) "Eric Stewart, Hex Editor"
+ ["Copyright.Photographer"]=>
+ string(12) "Eric Stewart"
+ ["Copyright.Editor"]=>
+ string(10) "Hex Editor"
+ }
+ ["ImageDescription"]=>
+ string(15) "My description."
+ ["Make"]=>
+ string(11) "OpenShutter"
+ ["Model"]=>
+ string(8) "OS 1.0.0"
+ ["XResolution"]=>
+ string(4) "72/1"
+ ["YResolution"]=>
+ string(4) "72/1"
+ ["ResolutionUnit"]=>
+ int(2)
+ ["DateTime"]=>
+ string(19) "2008:06:19 01:47:53"
+ ["Artist"]=>
+ string(12) "Eric Stewart"
+ ["Copyright"]=>
+ string(12) "Eric Stewart"
+}
+--CREDIT--
+Eric Stewart <ericleestewart@gmail.com>
diff --git a/ext/exif/tests/exif009.phpt b/ext/exif/tests/exif009.phpt
new file mode 100644
index 000000000..e2025e4f8
--- /dev/null
+++ b/ext/exif/tests/exif009.phpt
@@ -0,0 +1,65 @@
+--TEST--
+Check for exif_read_data, JPEG with IFD data in Motorola byte-order.
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--INI--
+output_handler=
+zlib.output_compression=0
+--FILE--
+<?php
+var_dump(exif_read_data(dirname(__FILE__).'/image009.jpg'));
+?>
+--EXPECTF--
+array(16) {
+ ["FileName"]=>
+ string(12) "image009.jpg"
+ ["FileDateTime"]=>
+ int(%d)
+ ["FileSize"]=>
+ int(%d)
+ ["FileType"]=>
+ int(2)
+ ["MimeType"]=>
+ string(10) "image/jpeg"
+ ["SectionsFound"]=>
+ string(13) "ANY_TAG, IFD0"
+ ["COMPUTED"]=>
+ array(8) {
+ ["html"]=>
+ string(20) "width="1" height="1""
+ ["Height"]=>
+ int(1)
+ ["Width"]=>
+ int(1)
+ ["IsColor"]=>
+ int(1)
+ ["ByteOrderMotorola"]=>
+ int(1)
+ ["Copyright"]=>
+ string(24) "Eric Stewart, Hex Editor"
+ ["Copyright.Photographer"]=>
+ string(12) "Eric Stewart"
+ ["Copyright.Editor"]=>
+ string(10) "Hex Editor"
+ }
+ ["ImageDescription"]=>
+ string(15) "My description."
+ ["Make"]=>
+ string(11) "OpenShutter"
+ ["Model"]=>
+ string(8) "OS 1.0.0"
+ ["XResolution"]=>
+ string(4) "72/1"
+ ["YResolution"]=>
+ string(4) "72/1"
+ ["ResolutionUnit"]=>
+ int(2)
+ ["DateTime"]=>
+ string(19) "2008:06:19 01:47:53"
+ ["Artist"]=>
+ string(12) "Eric Stewart"
+ ["Copyright"]=>
+ string(12) "Eric Stewart"
+}
+--CREDIT--
+Eric Stewart <ericleestewart@gmail.com>
diff --git a/ext/exif/tests/exif010.phpt b/ext/exif/tests/exif010.phpt
new file mode 100644
index 000000000..45a2617b8
--- /dev/null
+++ b/ext/exif/tests/exif010.phpt
@@ -0,0 +1,91 @@
+--TEST--
+Check for exif_read_data, JPEG with IFD and EXIF data in Intel byte-order.
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--INI--
+output_handler=
+zlib.output_compression=0
+--FILE--
+<?php
+var_dump(exif_read_data(dirname(__FILE__).'/image010.jpg'));
+?>
+--EXPECTF--
+array(28) {
+ ["FileName"]=>
+ string(12) "image010.jpg"
+ ["FileDateTime"]=>
+ int(%d)
+ ["FileSize"]=>
+ int(%d)
+ ["FileType"]=>
+ int(2)
+ ["MimeType"]=>
+ string(10) "image/jpeg"
+ ["SectionsFound"]=>
+ string(19) "ANY_TAG, IFD0, EXIF"
+ ["COMPUTED"]=>
+ array(9) {
+ ["html"]=>
+ string(20) "width="1" height="1""
+ ["Height"]=>
+ int(1)
+ ["Width"]=>
+ int(1)
+ ["IsColor"]=>
+ int(1)
+ ["ByteOrderMotorola"]=>
+ int(0)
+ ["ApertureFNumber"]=>
+ string(5) "f/8.0"
+ ["Copyright"]=>
+ string(24) "Eric Stewart, Hex Editor"
+ ["Copyright.Photographer"]=>
+ string(12) "Eric Stewart"
+ ["Copyright.Editor"]=>
+ string(10) "Hex Editor"
+ }
+ ["ImageDescription"]=>
+ string(15) "My description."
+ ["Make"]=>
+ string(11) "OpenShutter"
+ ["Model"]=>
+ string(8) "OS 1.0.0"
+ ["XResolution"]=>
+ string(4) "72/1"
+ ["YResolution"]=>
+ string(4) "72/1"
+ ["ResolutionUnit"]=>
+ int(2)
+ ["DateTime"]=>
+ string(19) "2008:06:19 01:47:53"
+ ["Artist"]=>
+ string(12) "Eric Stewart"
+ ["Copyright"]=>
+ string(12) "Eric Stewart"
+ ["Exif_IFD_Pointer"]=>
+ int(246)
+ ["ExposureTime"]=>
+ string(5) "1/125"
+ ["FNumber"]=>
+ string(3) "8/1"
+ ["ISOSpeedRatings"]=>
+ int(80)
+ ["DateTimeOriginal"]=>
+ string(19) "2008:06:19 01:47:53"
+ ["DateTimeDigitized"]=>
+ string(19) "2008:06:19 01:47:53"
+ ["MeteringMode"]=>
+ int(5)
+ ["LightSource"]=>
+ int(4)
+ ["Flash"]=>
+ int(7)
+ ["FocalLength"]=>
+ string(4) "29/5"
+ ["ExifImageWidth"]=>
+ int(1)
+ ["ExifImageLength"]=>
+ int(1)
+}
+--CREDIT--
+Eric Stewart <ericleestewart@gmail.com>
diff --git a/ext/exif/tests/exif011.phpt b/ext/exif/tests/exif011.phpt
new file mode 100644
index 000000000..adaf24640
--- /dev/null
+++ b/ext/exif/tests/exif011.phpt
@@ -0,0 +1,91 @@
+--TEST--
+Check for exif_read_data, JPEG with IFD and EXIF data in Motorola byte-order.
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--INI--
+output_handler=
+zlib.output_compression=0
+--FILE--
+<?php
+var_dump(exif_read_data(dirname(__FILE__).'/image011.jpg'));
+?>
+--EXPECTF--
+array(28) {
+ ["FileName"]=>
+ string(12) "image011.jpg"
+ ["FileDateTime"]=>
+ int(%d)
+ ["FileSize"]=>
+ int(%d)
+ ["FileType"]=>
+ int(2)
+ ["MimeType"]=>
+ string(10) "image/jpeg"
+ ["SectionsFound"]=>
+ string(19) "ANY_TAG, IFD0, EXIF"
+ ["COMPUTED"]=>
+ array(9) {
+ ["html"]=>
+ string(20) "width="1" height="1""
+ ["Height"]=>
+ int(1)
+ ["Width"]=>
+ int(1)
+ ["IsColor"]=>
+ int(1)
+ ["ByteOrderMotorola"]=>
+ int(1)
+ ["ApertureFNumber"]=>
+ string(5) "f/8.0"
+ ["Copyright"]=>
+ string(24) "Eric Stewart, Hex Editor"
+ ["Copyright.Photographer"]=>
+ string(12) "Eric Stewart"
+ ["Copyright.Editor"]=>
+ string(10) "Hex Editor"
+ }
+ ["ImageDescription"]=>
+ string(15) "My description."
+ ["Make"]=>
+ string(11) "OpenShutter"
+ ["Model"]=>
+ string(8) "OS 1.0.0"
+ ["XResolution"]=>
+ string(4) "72/1"
+ ["YResolution"]=>
+ string(4) "72/1"
+ ["ResolutionUnit"]=>
+ int(2)
+ ["DateTime"]=>
+ string(19) "2008:06:19 01:47:53"
+ ["Artist"]=>
+ string(12) "Eric Stewart"
+ ["Copyright"]=>
+ string(12) "Eric Stewart"
+ ["Exif_IFD_Pointer"]=>
+ int(246)
+ ["ExposureTime"]=>
+ string(5) "1/125"
+ ["FNumber"]=>
+ string(3) "8/1"
+ ["ISOSpeedRatings"]=>
+ int(80)
+ ["DateTimeOriginal"]=>
+ string(19) "2008:06:19 01:47:53"
+ ["DateTimeDigitized"]=>
+ string(19) "2008:06:19 01:47:53"
+ ["MeteringMode"]=>
+ int(5)
+ ["LightSource"]=>
+ int(4)
+ ["Flash"]=>
+ int(7)
+ ["FocalLength"]=>
+ string(4) "29/5"
+ ["ExifImageWidth"]=>
+ int(1)
+ ["ExifImageLength"]=>
+ int(1)
+}
+--CREDIT--
+Eric Stewart <ericleestewart@gmail.com>
diff --git a/ext/exif/tests/exif012.phpt b/ext/exif/tests/exif012.phpt
new file mode 100644
index 000000000..8e8b01aef
--- /dev/null
+++ b/ext/exif/tests/exif012.phpt
Binary files differ
diff --git a/ext/exif/tests/exif013.phpt b/ext/exif/tests/exif013.phpt
new file mode 100644
index 000000000..88dc88175
--- /dev/null
+++ b/ext/exif/tests/exif013.phpt
Binary files differ
diff --git a/ext/exif/tests/exif014.phpt b/ext/exif/tests/exif014.phpt
new file mode 100644
index 000000000..4a4df12d9
--- /dev/null
+++ b/ext/exif/tests/exif014.phpt
Binary files differ
diff --git a/ext/exif/tests/exif015.phpt b/ext/exif/tests/exif015.phpt
new file mode 100644
index 000000000..c38ef4ee9
--- /dev/null
+++ b/ext/exif/tests/exif015.phpt
Binary files differ
diff --git a/ext/exif/tests/exif016.phpt b/ext/exif/tests/exif016.phpt
new file mode 100644
index 000000000..266801bf0
--- /dev/null
+++ b/ext/exif/tests/exif016.phpt
@@ -0,0 +1,1622 @@
+--TEST--
+Check for exif_read_data, TIFF with IFD data in Intel byte-order.
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--INI--
+output_handler=
+zlib.output_compression=0
+--FILE--
+<?php
+var_dump(exif_read_data(dirname(__FILE__).'/image016.tiff'));
+?>
+--EXPECTF--
+array(26) {
+ ["FileName"]=>
+ string(13) "image016.tiff"
+ ["FileDateTime"]=>
+ int(%d)
+ ["FileSize"]=>
+ int(%d)
+ ["FileType"]=>
+ int(7)
+ ["MimeType"]=>
+ string(10) "image/tiff"
+ ["SectionsFound"]=>
+ string(13) "ANY_TAG, IFD0"
+ ["COMPUTED"]=>
+ array(8) {
+ ["html"]=>
+ string(20) "width="1" height="1""
+ ["Height"]=>
+ int(1)
+ ["Width"]=>
+ int(1)
+ ["IsColor"]=>
+ int(1)
+ ["ByteOrderMotorola"]=>
+ int(0)
+ ["Copyright"]=>
+ string(24) "Eric Stewart, Hex Editor"
+ ["Copyright.Photographer"]=>
+ string(12) "Eric Stewart"
+ ["Copyright.Editor"]=>
+ string(10) "Hex Editor"
+ }
+ ["ImageWidth"]=>
+ int(1)
+ ["ImageLength"]=>
+ int(1)
+ ["BitsPerSample"]=>
+ int(8)
+ ["Compression"]=>
+ int(5)
+ ["PhotometricInterpretation"]=>
+ int(3)
+ ["ImageDescription"]=>
+ string(15) "My description."
+ ["Make"]=>
+ string(11) "OpenShutter"
+ ["Model"]=>
+ string(8) "OS 1.0.0"
+ ["StripOffsets"]=>
+ int(1870)
+ ["SamplesPerPixel"]=>
+ int(1)
+ ["RowsPerStrip"]=>
+ int(8)
+ ["StripByteCounts"]=>
+ int(4)
+ ["XResolution"]=>
+ string(17) "381681664/2097152"
+ ["YResolution"]=>
+ string(17) "381681664/2097152"
+ ["PlanarConfiguration"]=>
+ int(1)
+ ["ResolutionUnit"]=>
+ int(2)
+ ["Artist"]=>
+ string(12) "Eric Stewart"
+ ["ColorMap"]=>
+ array(768) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(65280)
+ [2]=>
+ int(32512)
+ [3]=>
+ int(49152)
+ [4]=>
+ int(99)
+ [5]=>
+ int(115)
+ [6]=>
+ int(116)
+ [7]=>
+ int(101)
+ [8]=>
+ int(119)
+ [9]=>
+ int(97)
+ [10]=>
+ int(114)
+ [11]=>
+ int(116)
+ [12]=>
+ int(0)
+ [13]=>
+ int(0)
+ [14]=>
+ int(0)
+ [15]=>
+ int(0)
+ [16]=>
+ int(0)
+ [17]=>
+ int(0)
+ [18]=>
+ int(0)
+ [19]=>
+ int(0)
+ [20]=>
+ int(0)
+ [21]=>
+ int(0)
+ [22]=>
+ int(0)
+ [23]=>
+ int(0)
+ [24]=>
+ int(0)
+ [25]=>
+ int(0)
+ [26]=>
+ int(0)
+ [27]=>
+ int(0)
+ [28]=>
+ int(0)
+ [29]=>
+ int(0)
+ [30]=>
+ int(0)
+ [31]=>
+ int(0)
+ [32]=>
+ int(0)
+ [33]=>
+ int(0)
+ [34]=>
+ int(0)
+ [35]=>
+ int(0)
+ [36]=>
+ int(0)
+ [37]=>
+ int(0)
+ [38]=>
+ int(0)
+ [39]=>
+ int(0)
+ [40]=>
+ int(0)
+ [41]=>
+ int(0)
+ [42]=>
+ int(0)
+ [43]=>
+ int(0)
+ [44]=>
+ int(0)
+ [45]=>
+ int(0)
+ [46]=>
+ int(0)
+ [47]=>
+ int(0)
+ [48]=>
+ int(0)
+ [49]=>
+ int(0)
+ [50]=>
+ int(0)
+ [51]=>
+ int(0)
+ [52]=>
+ int(0)
+ [53]=>
+ int(0)
+ [54]=>
+ int(0)
+ [55]=>
+ int(0)
+ [56]=>
+ int(0)
+ [57]=>
+ int(0)
+ [58]=>
+ int(0)
+ [59]=>
+ int(0)
+ [60]=>
+ int(0)
+ [61]=>
+ int(0)
+ [62]=>
+ int(0)
+ [63]=>
+ int(0)
+ [64]=>
+ int(0)
+ [65]=>
+ int(0)
+ [66]=>
+ int(0)
+ [67]=>
+ int(0)
+ [68]=>
+ int(0)
+ [69]=>
+ int(0)
+ [70]=>
+ int(0)
+ [71]=>
+ int(0)
+ [72]=>
+ int(0)
+ [73]=>
+ int(0)
+ [74]=>
+ int(0)
+ [75]=>
+ int(0)
+ [76]=>
+ int(0)
+ [77]=>
+ int(0)
+ [78]=>
+ int(0)
+ [79]=>
+ int(0)
+ [80]=>
+ int(0)
+ [81]=>
+ int(0)
+ [82]=>
+ int(0)
+ [83]=>
+ int(0)
+ [84]=>
+ int(0)
+ [85]=>
+ int(0)
+ [86]=>
+ int(0)
+ [87]=>
+ int(0)
+ [88]=>
+ int(0)
+ [89]=>
+ int(0)
+ [90]=>
+ int(0)
+ [91]=>
+ int(0)
+ [92]=>
+ int(0)
+ [93]=>
+ int(0)
+ [94]=>
+ int(0)
+ [95]=>
+ int(0)
+ [96]=>
+ int(0)
+ [97]=>
+ int(0)
+ [98]=>
+ int(0)
+ [99]=>
+ int(0)
+ [100]=>
+ int(0)
+ [101]=>
+ int(0)
+ [102]=>
+ int(0)
+ [103]=>
+ int(0)
+ [104]=>
+ int(0)
+ [105]=>
+ int(0)
+ [106]=>
+ int(0)
+ [107]=>
+ int(0)
+ [108]=>
+ int(0)
+ [109]=>
+ int(0)
+ [110]=>
+ int(0)
+ [111]=>
+ int(0)
+ [112]=>
+ int(0)
+ [113]=>
+ int(0)
+ [114]=>
+ int(0)
+ [115]=>
+ int(0)
+ [116]=>
+ int(0)
+ [117]=>
+ int(0)
+ [118]=>
+ int(0)
+ [119]=>
+ int(0)
+ [120]=>
+ int(0)
+ [121]=>
+ int(0)
+ [122]=>
+ int(0)
+ [123]=>
+ int(0)
+ [124]=>
+ int(0)
+ [125]=>
+ int(0)
+ [126]=>
+ int(0)
+ [127]=>
+ int(0)
+ [128]=>
+ int(0)
+ [129]=>
+ int(0)
+ [130]=>
+ int(0)
+ [131]=>
+ int(0)
+ [132]=>
+ int(0)
+ [133]=>
+ int(0)
+ [134]=>
+ int(0)
+ [135]=>
+ int(0)
+ [136]=>
+ int(0)
+ [137]=>
+ int(0)
+ [138]=>
+ int(0)
+ [139]=>
+ int(0)
+ [140]=>
+ int(0)
+ [141]=>
+ int(0)
+ [142]=>
+ int(0)
+ [143]=>
+ int(0)
+ [144]=>
+ int(0)
+ [145]=>
+ int(0)
+ [146]=>
+ int(0)
+ [147]=>
+ int(0)
+ [148]=>
+ int(0)
+ [149]=>
+ int(0)
+ [150]=>
+ int(0)
+ [151]=>
+ int(0)
+ [152]=>
+ int(0)
+ [153]=>
+ int(0)
+ [154]=>
+ int(0)
+ [155]=>
+ int(0)
+ [156]=>
+ int(0)
+ [157]=>
+ int(0)
+ [158]=>
+ int(0)
+ [159]=>
+ int(0)
+ [160]=>
+ int(0)
+ [161]=>
+ int(0)
+ [162]=>
+ int(0)
+ [163]=>
+ int(0)
+ [164]=>
+ int(0)
+ [165]=>
+ int(0)
+ [166]=>
+ int(0)
+ [167]=>
+ int(0)
+ [168]=>
+ int(0)
+ [169]=>
+ int(0)
+ [170]=>
+ int(0)
+ [171]=>
+ int(0)
+ [172]=>
+ int(0)
+ [173]=>
+ int(0)
+ [174]=>
+ int(0)
+ [175]=>
+ int(0)
+ [176]=>
+ int(0)
+ [177]=>
+ int(0)
+ [178]=>
+ int(0)
+ [179]=>
+ int(0)
+ [180]=>
+ int(0)
+ [181]=>
+ int(0)
+ [182]=>
+ int(0)
+ [183]=>
+ int(0)
+ [184]=>
+ int(0)
+ [185]=>
+ int(0)
+ [186]=>
+ int(0)
+ [187]=>
+ int(0)
+ [188]=>
+ int(0)
+ [189]=>
+ int(0)
+ [190]=>
+ int(0)
+ [191]=>
+ int(0)
+ [192]=>
+ int(0)
+ [193]=>
+ int(0)
+ [194]=>
+ int(0)
+ [195]=>
+ int(0)
+ [196]=>
+ int(0)
+ [197]=>
+ int(0)
+ [198]=>
+ int(0)
+ [199]=>
+ int(0)
+ [200]=>
+ int(0)
+ [201]=>
+ int(0)
+ [202]=>
+ int(0)
+ [203]=>
+ int(0)
+ [204]=>
+ int(0)
+ [205]=>
+ int(0)
+ [206]=>
+ int(0)
+ [207]=>
+ int(0)
+ [208]=>
+ int(0)
+ [209]=>
+ int(0)
+ [210]=>
+ int(0)
+ [211]=>
+ int(0)
+ [212]=>
+ int(0)
+ [213]=>
+ int(0)
+ [214]=>
+ int(0)
+ [215]=>
+ int(0)
+ [216]=>
+ int(0)
+ [217]=>
+ int(0)
+ [218]=>
+ int(0)
+ [219]=>
+ int(0)
+ [220]=>
+ int(0)
+ [221]=>
+ int(0)
+ [222]=>
+ int(0)
+ [223]=>
+ int(0)
+ [224]=>
+ int(0)
+ [225]=>
+ int(0)
+ [226]=>
+ int(0)
+ [227]=>
+ int(0)
+ [228]=>
+ int(0)
+ [229]=>
+ int(0)
+ [230]=>
+ int(0)
+ [231]=>
+ int(0)
+ [232]=>
+ int(0)
+ [233]=>
+ int(0)
+ [234]=>
+ int(0)
+ [235]=>
+ int(0)
+ [236]=>
+ int(0)
+ [237]=>
+ int(0)
+ [238]=>
+ int(0)
+ [239]=>
+ int(0)
+ [240]=>
+ int(0)
+ [241]=>
+ int(0)
+ [242]=>
+ int(0)
+ [243]=>
+ int(0)
+ [244]=>
+ int(0)
+ [245]=>
+ int(0)
+ [246]=>
+ int(0)
+ [247]=>
+ int(0)
+ [248]=>
+ int(0)
+ [249]=>
+ int(0)
+ [250]=>
+ int(0)
+ [251]=>
+ int(0)
+ [252]=>
+ int(0)
+ [253]=>
+ int(0)
+ [254]=>
+ int(0)
+ [255]=>
+ int(1)
+ [256]=>
+ int(0)
+ [257]=>
+ int(65280)
+ [258]=>
+ int(32512)
+ [259]=>
+ int(49152)
+ [260]=>
+ int(0)
+ [261]=>
+ int(0)
+ [262]=>
+ int(0)
+ [263]=>
+ int(0)
+ [264]=>
+ int(0)
+ [265]=>
+ int(0)
+ [266]=>
+ int(0)
+ [267]=>
+ int(0)
+ [268]=>
+ int(0)
+ [269]=>
+ int(0)
+ [270]=>
+ int(0)
+ [271]=>
+ int(0)
+ [272]=>
+ int(11945)
+ [273]=>
+ int(1914)
+ [274]=>
+ int(0)
+ [275]=>
+ int(24609)
+ [276]=>
+ int(1088)
+ [277]=>
+ int(960)
+ [278]=>
+ int(0)
+ [279]=>
+ int(0)
+ [280]=>
+ int(20000)
+ [281]=>
+ int(8414)
+ [282]=>
+ int(65436)
+ [283]=>
+ int(0)
+ [284]=>
+ int(47655)
+ [285]=>
+ int(8)
+ [286]=>
+ int(37936)
+ [287]=>
+ int(8406)
+ [288]=>
+ int(0)
+ [289]=>
+ int(0)
+ [290]=>
+ int(0)
+ [291]=>
+ int(0)
+ [292]=>
+ int(0)
+ [293]=>
+ int(0)
+ [294]=>
+ int(0)
+ [295]=>
+ int(0)
+ [296]=>
+ int(0)
+ [297]=>
+ int(64652)
+ [298]=>
+ int(50264)
+ [299]=>
+ int(0)
+ [300]=>
+ int(0)
+ [301]=>
+ int(64887)
+ [302]=>
+ int(50264)
+ [303]=>
+ int(0)
+ [304]=>
+ int(25714)
+ [305]=>
+ int(26220)
+ [306]=>
+ int(17235)
+ [307]=>
+ int(19777)
+ [308]=>
+ int(65535)
+ [309]=>
+ int(65535)
+ [310]=>
+ int(65535)
+ [311]=>
+ int(65535)
+ [312]=>
+ int(65535)
+ [313]=>
+ int(65535)
+ [314]=>
+ int(65535)
+ [315]=>
+ int(65535)
+ [316]=>
+ int(501)
+ [317]=>
+ int(0)
+ [318]=>
+ int(20)
+ [319]=>
+ int(0)
+ [320]=>
+ int(0)
+ [321]=>
+ int(0)
+ [322]=>
+ int(16877)
+ [323]=>
+ int(0)
+ [324]=>
+ int(3)
+ [325]=>
+ int(0)
+ [326]=>
+ int(0)
+ [327]=>
+ int(0)
+ [328]=>
+ int(0)
+ [329]=>
+ int(0)
+ [330]=>
+ int(0)
+ [331]=>
+ int(0)
+ [332]=>
+ int(65535)
+ [333]=>
+ int(65535)
+ [334]=>
+ int(65535)
+ [335]=>
+ int(65535)
+ [336]=>
+ int(65535)
+ [337]=>
+ int(65535)
+ [338]=>
+ int(65535)
+ [339]=>
+ int(65535)
+ [340]=>
+ int(0)
+ [341]=>
+ int(0)
+ [342]=>
+ int(52840)
+ [343]=>
+ int(2025)
+ [344]=>
+ int(16)
+ [345]=>
+ int(57377)
+ [346]=>
+ int(1024)
+ [347]=>
+ int(960)
+ [348]=>
+ int(0)
+ [349]=>
+ int(0)
+ [350]=>
+ int(27136)
+ [351]=>
+ int(8414)
+ [352]=>
+ int(65436)
+ [353]=>
+ int(0)
+ [354]=>
+ int(47655)
+ [355]=>
+ int(8)
+ [356]=>
+ int(62400)
+ [357]=>
+ int(8407)
+ [358]=>
+ int(0)
+ [359]=>
+ int(0)
+ [360]=>
+ int(0)
+ [361]=>
+ int(0)
+ [362]=>
+ int(0)
+ [363]=>
+ int(0)
+ [364]=>
+ int(0)
+ [365]=>
+ int(0)
+ [366]=>
+ int(0)
+ [367]=>
+ int(64857)
+ [368]=>
+ int(50264)
+ [369]=>
+ int(0)
+ [370]=>
+ int(0)
+ [371]=>
+ int(64892)
+ [372]=>
+ int(50264)
+ [373]=>
+ int(0)
+ [374]=>
+ int(25714)
+ [375]=>
+ int(26220)
+ [376]=>
+ int(17235)
+ [377]=>
+ int(19777)
+ [378]=>
+ int(65535)
+ [379]=>
+ int(65535)
+ [380]=>
+ int(65535)
+ [381]=>
+ int(65535)
+ [382]=>
+ int(65535)
+ [383]=>
+ int(65535)
+ [384]=>
+ int(65535)
+ [385]=>
+ int(65535)
+ [386]=>
+ int(501)
+ [387]=>
+ int(0)
+ [388]=>
+ int(20)
+ [389]=>
+ int(0)
+ [390]=>
+ int(0)
+ [391]=>
+ int(0)
+ [392]=>
+ int(16877)
+ [393]=>
+ int(0)
+ [394]=>
+ int(3)
+ [395]=>
+ int(0)
+ [396]=>
+ int(0)
+ [397]=>
+ int(0)
+ [398]=>
+ int(0)
+ [399]=>
+ int(0)
+ [400]=>
+ int(0)
+ [401]=>
+ int(0)
+ [402]=>
+ int(65535)
+ [403]=>
+ int(65535)
+ [404]=>
+ int(65535)
+ [405]=>
+ int(65535)
+ [406]=>
+ int(65535)
+ [407]=>
+ int(65535)
+ [408]=>
+ int(65535)
+ [409]=>
+ int(65535)
+ [410]=>
+ int(0)
+ [411]=>
+ int(0)
+ [412]=>
+ int(53440)
+ [413]=>
+ int(2025)
+ [414]=>
+ int(16)
+ [415]=>
+ int(57377)
+ [416]=>
+ int(1024)
+ [417]=>
+ int(960)
+ [418]=>
+ int(0)
+ [419]=>
+ int(0)
+ [420]=>
+ int(41120)
+ [421]=>
+ int(9024)
+ [422]=>
+ int(65436)
+ [423]=>
+ int(0)
+ [424]=>
+ int(47655)
+ [425]=>
+ int(8)
+ [426]=>
+ int(24480)
+ [427]=>
+ int(8404)
+ [428]=>
+ int(0)
+ [429]=>
+ int(0)
+ [430]=>
+ int(0)
+ [431]=>
+ int(0)
+ [432]=>
+ int(0)
+ [433]=>
+ int(0)
+ [434]=>
+ int(0)
+ [435]=>
+ int(0)
+ [436]=>
+ int(0)
+ [437]=>
+ int(21315)
+ [438]=>
+ int(50294)
+ [439]=>
+ int(0)
+ [440]=>
+ int(0)
+ [441]=>
+ int(53635)
+ [442]=>
+ int(50294)
+ [443]=>
+ int(0)
+ [444]=>
+ int(25714)
+ [445]=>
+ int(26220)
+ [446]=>
+ int(17235)
+ [447]=>
+ int(19777)
+ [448]=>
+ int(65535)
+ [449]=>
+ int(65535)
+ [450]=>
+ int(65535)
+ [451]=>
+ int(65535)
+ [452]=>
+ int(65535)
+ [453]=>
+ int(65535)
+ [454]=>
+ int(65535)
+ [455]=>
+ int(65535)
+ [456]=>
+ int(501)
+ [457]=>
+ int(0)
+ [458]=>
+ int(20)
+ [459]=>
+ int(0)
+ [460]=>
+ int(0)
+ [461]=>
+ int(0)
+ [462]=>
+ int(16877)
+ [463]=>
+ int(0)
+ [464]=>
+ int(3)
+ [465]=>
+ int(0)
+ [466]=>
+ int(0)
+ [467]=>
+ int(0)
+ [468]=>
+ int(0)
+ [469]=>
+ int(0)
+ [470]=>
+ int(0)
+ [471]=>
+ int(0)
+ [472]=>
+ int(65535)
+ [473]=>
+ int(65535)
+ [474]=>
+ int(65535)
+ [475]=>
+ int(65535)
+ [476]=>
+ int(65535)
+ [477]=>
+ int(65535)
+ [478]=>
+ int(65535)
+ [479]=>
+ int(65535)
+ [480]=>
+ int(0)
+ [481]=>
+ int(0)
+ [482]=>
+ int(54028)
+ [483]=>
+ int(2772)
+ [484]=>
+ int(16)
+ [485]=>
+ int(57377)
+ [486]=>
+ int(1024)
+ [487]=>
+ int(960)
+ [488]=>
+ int(0)
+ [489]=>
+ int(0)
+ [490]=>
+ int(42384)
+ [491]=>
+ int(8408)
+ [492]=>
+ int(65436)
+ [493]=>
+ int(0)
+ [494]=>
+ int(47655)
+ [495]=>
+ int(8)
+ [496]=>
+ int(1136)
+ [497]=>
+ int(8348)
+ [498]=>
+ int(0)
+ [499]=>
+ int(0)
+ [500]=>
+ int(0)
+ [501]=>
+ int(0)
+ [502]=>
+ int(0)
+ [503]=>
+ int(0)
+ [504]=>
+ int(0)
+ [505]=>
+ int(0)
+ [506]=>
+ int(0)
+ [507]=>
+ int(12326)
+ [508]=>
+ int(50261)
+ [509]=>
+ int(0)
+ [510]=>
+ int(0)
+ [511]=>
+ int(12326)
+ [512]=>
+ int(0)
+ [513]=>
+ int(65280)
+ [514]=>
+ int(32512)
+ [515]=>
+ int(49152)
+ [516]=>
+ int(0)
+ [517]=>
+ int(0)
+ [518]=>
+ int(22663)
+ [519]=>
+ int(2)
+ [520]=>
+ int(0)
+ [521]=>
+ int(0)
+ [522]=>
+ int(24576)
+ [523]=>
+ int(2)
+ [524]=>
+ int(0)
+ [525]=>
+ int(0)
+ [526]=>
+ int(501)
+ [527]=>
+ int(0)
+ [528]=>
+ int(20)
+ [529]=>
+ int(0)
+ [530]=>
+ int(0)
+ [531]=>
+ int(0)
+ [532]=>
+ int(33188)
+ [533]=>
+ int(0)
+ [534]=>
+ int(0)
+ [535]=>
+ int(0)
+ [536]=>
+ int(0)
+ [537]=>
+ int(0)
+ [538]=>
+ int(0)
+ [539]=>
+ int(0)
+ [540]=>
+ int(0)
+ [541]=>
+ int(0)
+ [542]=>
+ int(0)
+ [543]=>
+ int(0)
+ [544]=>
+ int(0)
+ [545]=>
+ int(0)
+ [546]=>
+ int(0)
+ [547]=>
+ int(0)
+ [548]=>
+ int(0)
+ [549]=>
+ int(0)
+ [550]=>
+ int(0)
+ [551]=>
+ int(0)
+ [552]=>
+ int(51766)
+ [553]=>
+ int(1946)
+ [554]=>
+ int(0)
+ [555]=>
+ int(24609)
+ [556]=>
+ int(1088)
+ [557]=>
+ int(960)
+ [558]=>
+ int(0)
+ [559]=>
+ int(0)
+ [560]=>
+ int(0)
+ [561]=>
+ int(0)
+ [562]=>
+ int(25116)
+ [563]=>
+ int(2012)
+ [564]=>
+ int(0)
+ [565]=>
+ int(0)
+ [566]=>
+ int(0)
+ [567]=>
+ int(0)
+ [568]=>
+ int(0)
+ [569]=>
+ int(0)
+ [570]=>
+ int(0)
+ [571]=>
+ int(0)
+ [572]=>
+ int(0)
+ [573]=>
+ int(0)
+ [574]=>
+ int(0)
+ [575]=>
+ int(0)
+ [576]=>
+ int(0)
+ [577]=>
+ int(0)
+ [578]=>
+ int(0)
+ [579]=>
+ int(0)
+ [580]=>
+ int(0)
+ [581]=>
+ int(0)
+ [582]=>
+ int(0)
+ [583]=>
+ int(0)
+ [584]=>
+ int(0)
+ [585]=>
+ int(0)
+ [586]=>
+ int(0)
+ [587]=>
+ int(0)
+ [588]=>
+ int(0)
+ [589]=>
+ int(0)
+ [590]=>
+ int(0)
+ [591]=>
+ int(0)
+ [592]=>
+ int(0)
+ [593]=>
+ int(0)
+ [594]=>
+ int(0)
+ [595]=>
+ int(0)
+ [596]=>
+ int(0)
+ [597]=>
+ int(0)
+ [598]=>
+ int(0)
+ [599]=>
+ int(0)
+ [600]=>
+ int(0)
+ [601]=>
+ int(0)
+ [602]=>
+ int(0)
+ [603]=>
+ int(0)
+ [604]=>
+ int(0)
+ [605]=>
+ int(0)
+ [606]=>
+ int(0)
+ [607]=>
+ int(0)
+ [608]=>
+ int(0)
+ [609]=>
+ int(0)
+ [610]=>
+ int(0)
+ [611]=>
+ int(0)
+ [612]=>
+ int(0)
+ [613]=>
+ int(0)
+ [614]=>
+ int(0)
+ [615]=>
+ int(0)
+ [616]=>
+ int(0)
+ [617]=>
+ int(0)
+ [618]=>
+ int(0)
+ [619]=>
+ int(0)
+ [620]=>
+ int(0)
+ [621]=>
+ int(0)
+ [622]=>
+ int(0)
+ [623]=>
+ int(0)
+ [624]=>
+ int(0)
+ [625]=>
+ int(0)
+ [626]=>
+ int(0)
+ [627]=>
+ int(0)
+ [628]=>
+ int(0)
+ [629]=>
+ int(0)
+ [630]=>
+ int(0)
+ [631]=>
+ int(0)
+ [632]=>
+ int(0)
+ [633]=>
+ int(0)
+ [634]=>
+ int(0)
+ [635]=>
+ int(0)
+ [636]=>
+ int(0)
+ [637]=>
+ int(0)
+ [638]=>
+ int(0)
+ [639]=>
+ int(0)
+ [640]=>
+ int(0)
+ [641]=>
+ int(0)
+ [642]=>
+ int(0)
+ [643]=>
+ int(0)
+ [644]=>
+ int(0)
+ [645]=>
+ int(0)
+ [646]=>
+ int(0)
+ [647]=>
+ int(0)
+ [648]=>
+ int(0)
+ [649]=>
+ int(0)
+ [650]=>
+ int(0)
+ [651]=>
+ int(0)
+ [652]=>
+ int(0)
+ [653]=>
+ int(0)
+ [654]=>
+ int(0)
+ [655]=>
+ int(0)
+ [656]=>
+ int(0)
+ [657]=>
+ int(0)
+ [658]=>
+ int(0)
+ [659]=>
+ int(0)
+ [660]=>
+ int(0)
+ [661]=>
+ int(0)
+ [662]=>
+ int(0)
+ [663]=>
+ int(0)
+ [664]=>
+ int(0)
+ [665]=>
+ int(0)
+ [666]=>
+ int(0)
+ [667]=>
+ int(0)
+ [668]=>
+ int(0)
+ [669]=>
+ int(0)
+ [670]=>
+ int(0)
+ [671]=>
+ int(0)
+ [672]=>
+ int(0)
+ [673]=>
+ int(0)
+ [674]=>
+ int(0)
+ [675]=>
+ int(0)
+ [676]=>
+ int(0)
+ [677]=>
+ int(0)
+ [678]=>
+ int(0)
+ [679]=>
+ int(0)
+ [680]=>
+ int(0)
+ [681]=>
+ int(0)
+ [682]=>
+ int(0)
+ [683]=>
+ int(0)
+ [684]=>
+ int(0)
+ [685]=>
+ int(0)
+ [686]=>
+ int(0)
+ [687]=>
+ int(0)
+ [688]=>
+ int(0)
+ [689]=>
+ int(0)
+ [690]=>
+ int(0)
+ [691]=>
+ int(0)
+ [692]=>
+ int(0)
+ [693]=>
+ int(0)
+ [694]=>
+ int(0)
+ [695]=>
+ int(0)
+ [696]=>
+ int(0)
+ [697]=>
+ int(0)
+ [698]=>
+ int(0)
+ [699]=>
+ int(0)
+ [700]=>
+ int(0)
+ [701]=>
+ int(0)
+ [702]=>
+ int(0)
+ [703]=>
+ int(0)
+ [704]=>
+ int(0)
+ [705]=>
+ int(0)
+ [706]=>
+ int(0)
+ [707]=>
+ int(0)
+ [708]=>
+ int(0)
+ [709]=>
+ int(0)
+ [710]=>
+ int(0)
+ [711]=>
+ int(0)
+ [712]=>
+ int(0)
+ [713]=>
+ int(0)
+ [714]=>
+ int(0)
+ [715]=>
+ int(0)
+ [716]=>
+ int(0)
+ [717]=>
+ int(0)
+ [718]=>
+ int(0)
+ [719]=>
+ int(0)
+ [720]=>
+ int(0)
+ [721]=>
+ int(0)
+ [722]=>
+ int(0)
+ [723]=>
+ int(0)
+ [724]=>
+ int(0)
+ [725]=>
+ int(0)
+ [726]=>
+ int(0)
+ [727]=>
+ int(0)
+ [728]=>
+ int(0)
+ [729]=>
+ int(0)
+ [730]=>
+ int(0)
+ [731]=>
+ int(0)
+ [732]=>
+ int(0)
+ [733]=>
+ int(0)
+ [734]=>
+ int(0)
+ [735]=>
+ int(0)
+ [736]=>
+ int(0)
+ [737]=>
+ int(0)
+ [738]=>
+ int(0)
+ [739]=>
+ int(0)
+ [740]=>
+ int(0)
+ [741]=>
+ int(0)
+ [742]=>
+ int(0)
+ [743]=>
+ int(0)
+ [744]=>
+ int(0)
+ [745]=>
+ int(0)
+ [746]=>
+ int(0)
+ [747]=>
+ int(0)
+ [748]=>
+ int(0)
+ [749]=>
+ int(0)
+ [750]=>
+ int(0)
+ [751]=>
+ int(0)
+ [752]=>
+ int(0)
+ [753]=>
+ int(0)
+ [754]=>
+ int(0)
+ [755]=>
+ int(0)
+ [756]=>
+ int(0)
+ [757]=>
+ int(0)
+ [758]=>
+ int(0)
+ [759]=>
+ int(0)
+ [760]=>
+ int(0)
+ [761]=>
+ int(0)
+ [762]=>
+ int(0)
+ [763]=>
+ int(0)
+ [764]=>
+ int(0)
+ [765]=>
+ int(0)
+ [766]=>
+ int(0)
+ [767]=>
+ int(0)
+ }
+ ["Copyright"]=>
+ string(12) "Eric Stewart"
+}
+--CREDIT--
+Eric Stewart <ericleestewart@gmail.com>
diff --git a/ext/exif/tests/exif017.phpt b/ext/exif/tests/exif017.phpt
new file mode 100644
index 000000000..36c3965ee
--- /dev/null
+++ b/ext/exif/tests/exif017.phpt
@@ -0,0 +1,1622 @@
+--TEST--
+Check for exif_read_data, TIFF with IFD data in Motorola byte-order.
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--INI--
+output_handler=
+zlib.output_compression=0
+--FILE--
+<?php
+var_dump(exif_read_data(dirname(__FILE__).'/image017.tiff'));
+?>
+--EXPECTF--
+array(26) {
+ ["FileName"]=>
+ string(13) "image017.tiff"
+ ["FileDateTime"]=>
+ int(%d)
+ ["FileSize"]=>
+ int(%d)
+ ["FileType"]=>
+ int(8)
+ ["MimeType"]=>
+ string(10) "image/tiff"
+ ["SectionsFound"]=>
+ string(13) "ANY_TAG, IFD0"
+ ["COMPUTED"]=>
+ array(8) {
+ ["html"]=>
+ string(20) "width="1" height="1""
+ ["Height"]=>
+ int(1)
+ ["Width"]=>
+ int(1)
+ ["IsColor"]=>
+ int(1)
+ ["ByteOrderMotorola"]=>
+ int(1)
+ ["Copyright"]=>
+ string(24) "Eric Stewart, Hex Editor"
+ ["Copyright.Photographer"]=>
+ string(12) "Eric Stewart"
+ ["Copyright.Editor"]=>
+ string(10) "Hex Editor"
+ }
+ ["ImageWidth"]=>
+ int(1)
+ ["ImageLength"]=>
+ int(1)
+ ["BitsPerSample"]=>
+ int(8)
+ ["Compression"]=>
+ int(5)
+ ["PhotometricInterpretation"]=>
+ int(3)
+ ["ImageDescription"]=>
+ string(15) "My description."
+ ["Make"]=>
+ string(11) "OpenShutter"
+ ["Model"]=>
+ string(8) "OS 1.0.0"
+ ["StripOffsets"]=>
+ int(1870)
+ ["SamplesPerPixel"]=>
+ int(1)
+ ["RowsPerStrip"]=>
+ int(8)
+ ["StripByteCounts"]=>
+ int(4)
+ ["XResolution"]=>
+ string(17) "381681664/2097152"
+ ["YResolution"]=>
+ string(17) "381681664/2097152"
+ ["PlanarConfiguration"]=>
+ int(1)
+ ["ResolutionUnit"]=>
+ int(2)
+ ["Artist"]=>
+ string(12) "Eric Stewart"
+ ["ColorMap"]=>
+ array(768) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(65280)
+ [2]=>
+ int(32512)
+ [3]=>
+ int(49152)
+ [4]=>
+ int(99)
+ [5]=>
+ int(115)
+ [6]=>
+ int(116)
+ [7]=>
+ int(101)
+ [8]=>
+ int(119)
+ [9]=>
+ int(97)
+ [10]=>
+ int(114)
+ [11]=>
+ int(116)
+ [12]=>
+ int(0)
+ [13]=>
+ int(0)
+ [14]=>
+ int(0)
+ [15]=>
+ int(0)
+ [16]=>
+ int(0)
+ [17]=>
+ int(0)
+ [18]=>
+ int(0)
+ [19]=>
+ int(0)
+ [20]=>
+ int(0)
+ [21]=>
+ int(0)
+ [22]=>
+ int(0)
+ [23]=>
+ int(0)
+ [24]=>
+ int(0)
+ [25]=>
+ int(0)
+ [26]=>
+ int(0)
+ [27]=>
+ int(0)
+ [28]=>
+ int(0)
+ [29]=>
+ int(0)
+ [30]=>
+ int(0)
+ [31]=>
+ int(0)
+ [32]=>
+ int(0)
+ [33]=>
+ int(0)
+ [34]=>
+ int(0)
+ [35]=>
+ int(0)
+ [36]=>
+ int(0)
+ [37]=>
+ int(0)
+ [38]=>
+ int(0)
+ [39]=>
+ int(0)
+ [40]=>
+ int(0)
+ [41]=>
+ int(0)
+ [42]=>
+ int(0)
+ [43]=>
+ int(0)
+ [44]=>
+ int(0)
+ [45]=>
+ int(0)
+ [46]=>
+ int(0)
+ [47]=>
+ int(0)
+ [48]=>
+ int(0)
+ [49]=>
+ int(0)
+ [50]=>
+ int(0)
+ [51]=>
+ int(0)
+ [52]=>
+ int(0)
+ [53]=>
+ int(0)
+ [54]=>
+ int(0)
+ [55]=>
+ int(0)
+ [56]=>
+ int(0)
+ [57]=>
+ int(0)
+ [58]=>
+ int(0)
+ [59]=>
+ int(0)
+ [60]=>
+ int(0)
+ [61]=>
+ int(0)
+ [62]=>
+ int(0)
+ [63]=>
+ int(0)
+ [64]=>
+ int(0)
+ [65]=>
+ int(0)
+ [66]=>
+ int(0)
+ [67]=>
+ int(0)
+ [68]=>
+ int(0)
+ [69]=>
+ int(0)
+ [70]=>
+ int(0)
+ [71]=>
+ int(0)
+ [72]=>
+ int(0)
+ [73]=>
+ int(0)
+ [74]=>
+ int(0)
+ [75]=>
+ int(0)
+ [76]=>
+ int(0)
+ [77]=>
+ int(0)
+ [78]=>
+ int(0)
+ [79]=>
+ int(0)
+ [80]=>
+ int(0)
+ [81]=>
+ int(0)
+ [82]=>
+ int(0)
+ [83]=>
+ int(0)
+ [84]=>
+ int(0)
+ [85]=>
+ int(0)
+ [86]=>
+ int(0)
+ [87]=>
+ int(0)
+ [88]=>
+ int(0)
+ [89]=>
+ int(0)
+ [90]=>
+ int(0)
+ [91]=>
+ int(0)
+ [92]=>
+ int(0)
+ [93]=>
+ int(0)
+ [94]=>
+ int(0)
+ [95]=>
+ int(0)
+ [96]=>
+ int(0)
+ [97]=>
+ int(0)
+ [98]=>
+ int(0)
+ [99]=>
+ int(0)
+ [100]=>
+ int(0)
+ [101]=>
+ int(0)
+ [102]=>
+ int(0)
+ [103]=>
+ int(0)
+ [104]=>
+ int(0)
+ [105]=>
+ int(0)
+ [106]=>
+ int(0)
+ [107]=>
+ int(0)
+ [108]=>
+ int(0)
+ [109]=>
+ int(0)
+ [110]=>
+ int(0)
+ [111]=>
+ int(0)
+ [112]=>
+ int(0)
+ [113]=>
+ int(0)
+ [114]=>
+ int(0)
+ [115]=>
+ int(0)
+ [116]=>
+ int(0)
+ [117]=>
+ int(0)
+ [118]=>
+ int(0)
+ [119]=>
+ int(0)
+ [120]=>
+ int(0)
+ [121]=>
+ int(0)
+ [122]=>
+ int(0)
+ [123]=>
+ int(0)
+ [124]=>
+ int(0)
+ [125]=>
+ int(0)
+ [126]=>
+ int(0)
+ [127]=>
+ int(0)
+ [128]=>
+ int(0)
+ [129]=>
+ int(0)
+ [130]=>
+ int(0)
+ [131]=>
+ int(0)
+ [132]=>
+ int(0)
+ [133]=>
+ int(0)
+ [134]=>
+ int(0)
+ [135]=>
+ int(0)
+ [136]=>
+ int(0)
+ [137]=>
+ int(0)
+ [138]=>
+ int(0)
+ [139]=>
+ int(0)
+ [140]=>
+ int(0)
+ [141]=>
+ int(0)
+ [142]=>
+ int(0)
+ [143]=>
+ int(0)
+ [144]=>
+ int(0)
+ [145]=>
+ int(0)
+ [146]=>
+ int(0)
+ [147]=>
+ int(0)
+ [148]=>
+ int(0)
+ [149]=>
+ int(0)
+ [150]=>
+ int(0)
+ [151]=>
+ int(0)
+ [152]=>
+ int(0)
+ [153]=>
+ int(0)
+ [154]=>
+ int(0)
+ [155]=>
+ int(0)
+ [156]=>
+ int(0)
+ [157]=>
+ int(0)
+ [158]=>
+ int(0)
+ [159]=>
+ int(0)
+ [160]=>
+ int(0)
+ [161]=>
+ int(0)
+ [162]=>
+ int(0)
+ [163]=>
+ int(0)
+ [164]=>
+ int(0)
+ [165]=>
+ int(0)
+ [166]=>
+ int(0)
+ [167]=>
+ int(0)
+ [168]=>
+ int(0)
+ [169]=>
+ int(0)
+ [170]=>
+ int(0)
+ [171]=>
+ int(0)
+ [172]=>
+ int(0)
+ [173]=>
+ int(0)
+ [174]=>
+ int(0)
+ [175]=>
+ int(0)
+ [176]=>
+ int(0)
+ [177]=>
+ int(0)
+ [178]=>
+ int(0)
+ [179]=>
+ int(0)
+ [180]=>
+ int(0)
+ [181]=>
+ int(0)
+ [182]=>
+ int(0)
+ [183]=>
+ int(0)
+ [184]=>
+ int(0)
+ [185]=>
+ int(0)
+ [186]=>
+ int(0)
+ [187]=>
+ int(0)
+ [188]=>
+ int(0)
+ [189]=>
+ int(0)
+ [190]=>
+ int(0)
+ [191]=>
+ int(0)
+ [192]=>
+ int(0)
+ [193]=>
+ int(0)
+ [194]=>
+ int(0)
+ [195]=>
+ int(0)
+ [196]=>
+ int(0)
+ [197]=>
+ int(0)
+ [198]=>
+ int(0)
+ [199]=>
+ int(0)
+ [200]=>
+ int(0)
+ [201]=>
+ int(0)
+ [202]=>
+ int(0)
+ [203]=>
+ int(0)
+ [204]=>
+ int(0)
+ [205]=>
+ int(0)
+ [206]=>
+ int(0)
+ [207]=>
+ int(0)
+ [208]=>
+ int(0)
+ [209]=>
+ int(0)
+ [210]=>
+ int(0)
+ [211]=>
+ int(0)
+ [212]=>
+ int(0)
+ [213]=>
+ int(0)
+ [214]=>
+ int(0)
+ [215]=>
+ int(0)
+ [216]=>
+ int(0)
+ [217]=>
+ int(0)
+ [218]=>
+ int(0)
+ [219]=>
+ int(0)
+ [220]=>
+ int(0)
+ [221]=>
+ int(0)
+ [222]=>
+ int(0)
+ [223]=>
+ int(0)
+ [224]=>
+ int(0)
+ [225]=>
+ int(0)
+ [226]=>
+ int(0)
+ [227]=>
+ int(0)
+ [228]=>
+ int(0)
+ [229]=>
+ int(0)
+ [230]=>
+ int(0)
+ [231]=>
+ int(0)
+ [232]=>
+ int(0)
+ [233]=>
+ int(0)
+ [234]=>
+ int(0)
+ [235]=>
+ int(0)
+ [236]=>
+ int(0)
+ [237]=>
+ int(0)
+ [238]=>
+ int(0)
+ [239]=>
+ int(0)
+ [240]=>
+ int(0)
+ [241]=>
+ int(0)
+ [242]=>
+ int(0)
+ [243]=>
+ int(0)
+ [244]=>
+ int(0)
+ [245]=>
+ int(0)
+ [246]=>
+ int(0)
+ [247]=>
+ int(0)
+ [248]=>
+ int(0)
+ [249]=>
+ int(0)
+ [250]=>
+ int(0)
+ [251]=>
+ int(0)
+ [252]=>
+ int(0)
+ [253]=>
+ int(0)
+ [254]=>
+ int(0)
+ [255]=>
+ int(1)
+ [256]=>
+ int(0)
+ [257]=>
+ int(65280)
+ [258]=>
+ int(32512)
+ [259]=>
+ int(49152)
+ [260]=>
+ int(0)
+ [261]=>
+ int(0)
+ [262]=>
+ int(0)
+ [263]=>
+ int(0)
+ [264]=>
+ int(0)
+ [265]=>
+ int(0)
+ [266]=>
+ int(0)
+ [267]=>
+ int(0)
+ [268]=>
+ int(0)
+ [269]=>
+ int(0)
+ [270]=>
+ int(0)
+ [271]=>
+ int(0)
+ [272]=>
+ int(11945)
+ [273]=>
+ int(1914)
+ [274]=>
+ int(0)
+ [275]=>
+ int(24609)
+ [276]=>
+ int(1088)
+ [277]=>
+ int(960)
+ [278]=>
+ int(0)
+ [279]=>
+ int(0)
+ [280]=>
+ int(20000)
+ [281]=>
+ int(8414)
+ [282]=>
+ int(65436)
+ [283]=>
+ int(0)
+ [284]=>
+ int(47655)
+ [285]=>
+ int(8)
+ [286]=>
+ int(37936)
+ [287]=>
+ int(8406)
+ [288]=>
+ int(0)
+ [289]=>
+ int(0)
+ [290]=>
+ int(0)
+ [291]=>
+ int(0)
+ [292]=>
+ int(0)
+ [293]=>
+ int(0)
+ [294]=>
+ int(0)
+ [295]=>
+ int(0)
+ [296]=>
+ int(0)
+ [297]=>
+ int(64652)
+ [298]=>
+ int(50264)
+ [299]=>
+ int(0)
+ [300]=>
+ int(0)
+ [301]=>
+ int(64887)
+ [302]=>
+ int(50264)
+ [303]=>
+ int(0)
+ [304]=>
+ int(25714)
+ [305]=>
+ int(26220)
+ [306]=>
+ int(17235)
+ [307]=>
+ int(19777)
+ [308]=>
+ int(65535)
+ [309]=>
+ int(65535)
+ [310]=>
+ int(65535)
+ [311]=>
+ int(65535)
+ [312]=>
+ int(65535)
+ [313]=>
+ int(65535)
+ [314]=>
+ int(65535)
+ [315]=>
+ int(65535)
+ [316]=>
+ int(501)
+ [317]=>
+ int(0)
+ [318]=>
+ int(20)
+ [319]=>
+ int(0)
+ [320]=>
+ int(0)
+ [321]=>
+ int(0)
+ [322]=>
+ int(16877)
+ [323]=>
+ int(0)
+ [324]=>
+ int(3)
+ [325]=>
+ int(0)
+ [326]=>
+ int(0)
+ [327]=>
+ int(0)
+ [328]=>
+ int(0)
+ [329]=>
+ int(0)
+ [330]=>
+ int(0)
+ [331]=>
+ int(0)
+ [332]=>
+ int(65535)
+ [333]=>
+ int(65535)
+ [334]=>
+ int(65535)
+ [335]=>
+ int(65535)
+ [336]=>
+ int(65535)
+ [337]=>
+ int(65535)
+ [338]=>
+ int(65535)
+ [339]=>
+ int(65535)
+ [340]=>
+ int(0)
+ [341]=>
+ int(0)
+ [342]=>
+ int(52840)
+ [343]=>
+ int(2025)
+ [344]=>
+ int(16)
+ [345]=>
+ int(57377)
+ [346]=>
+ int(1024)
+ [347]=>
+ int(960)
+ [348]=>
+ int(0)
+ [349]=>
+ int(0)
+ [350]=>
+ int(27136)
+ [351]=>
+ int(8414)
+ [352]=>
+ int(65436)
+ [353]=>
+ int(0)
+ [354]=>
+ int(47655)
+ [355]=>
+ int(8)
+ [356]=>
+ int(62400)
+ [357]=>
+ int(8407)
+ [358]=>
+ int(0)
+ [359]=>
+ int(0)
+ [360]=>
+ int(0)
+ [361]=>
+ int(0)
+ [362]=>
+ int(0)
+ [363]=>
+ int(0)
+ [364]=>
+ int(0)
+ [365]=>
+ int(0)
+ [366]=>
+ int(0)
+ [367]=>
+ int(64857)
+ [368]=>
+ int(50264)
+ [369]=>
+ int(0)
+ [370]=>
+ int(0)
+ [371]=>
+ int(64892)
+ [372]=>
+ int(50264)
+ [373]=>
+ int(0)
+ [374]=>
+ int(25714)
+ [375]=>
+ int(26220)
+ [376]=>
+ int(17235)
+ [377]=>
+ int(19777)
+ [378]=>
+ int(65535)
+ [379]=>
+ int(65535)
+ [380]=>
+ int(65535)
+ [381]=>
+ int(65535)
+ [382]=>
+ int(65535)
+ [383]=>
+ int(65535)
+ [384]=>
+ int(65535)
+ [385]=>
+ int(65535)
+ [386]=>
+ int(501)
+ [387]=>
+ int(0)
+ [388]=>
+ int(20)
+ [389]=>
+ int(0)
+ [390]=>
+ int(0)
+ [391]=>
+ int(0)
+ [392]=>
+ int(16877)
+ [393]=>
+ int(0)
+ [394]=>
+ int(3)
+ [395]=>
+ int(0)
+ [396]=>
+ int(0)
+ [397]=>
+ int(0)
+ [398]=>
+ int(0)
+ [399]=>
+ int(0)
+ [400]=>
+ int(0)
+ [401]=>
+ int(0)
+ [402]=>
+ int(65535)
+ [403]=>
+ int(65535)
+ [404]=>
+ int(65535)
+ [405]=>
+ int(65535)
+ [406]=>
+ int(65535)
+ [407]=>
+ int(65535)
+ [408]=>
+ int(65535)
+ [409]=>
+ int(65535)
+ [410]=>
+ int(0)
+ [411]=>
+ int(0)
+ [412]=>
+ int(53440)
+ [413]=>
+ int(2025)
+ [414]=>
+ int(16)
+ [415]=>
+ int(57377)
+ [416]=>
+ int(1024)
+ [417]=>
+ int(960)
+ [418]=>
+ int(0)
+ [419]=>
+ int(0)
+ [420]=>
+ int(41120)
+ [421]=>
+ int(9024)
+ [422]=>
+ int(65436)
+ [423]=>
+ int(0)
+ [424]=>
+ int(47655)
+ [425]=>
+ int(8)
+ [426]=>
+ int(24480)
+ [427]=>
+ int(8404)
+ [428]=>
+ int(0)
+ [429]=>
+ int(0)
+ [430]=>
+ int(0)
+ [431]=>
+ int(0)
+ [432]=>
+ int(0)
+ [433]=>
+ int(0)
+ [434]=>
+ int(0)
+ [435]=>
+ int(0)
+ [436]=>
+ int(0)
+ [437]=>
+ int(21315)
+ [438]=>
+ int(50294)
+ [439]=>
+ int(0)
+ [440]=>
+ int(0)
+ [441]=>
+ int(53635)
+ [442]=>
+ int(50294)
+ [443]=>
+ int(0)
+ [444]=>
+ int(25714)
+ [445]=>
+ int(26220)
+ [446]=>
+ int(17235)
+ [447]=>
+ int(19777)
+ [448]=>
+ int(65535)
+ [449]=>
+ int(65535)
+ [450]=>
+ int(65535)
+ [451]=>
+ int(65535)
+ [452]=>
+ int(65535)
+ [453]=>
+ int(65535)
+ [454]=>
+ int(65535)
+ [455]=>
+ int(65535)
+ [456]=>
+ int(501)
+ [457]=>
+ int(0)
+ [458]=>
+ int(20)
+ [459]=>
+ int(0)
+ [460]=>
+ int(0)
+ [461]=>
+ int(0)
+ [462]=>
+ int(16877)
+ [463]=>
+ int(0)
+ [464]=>
+ int(3)
+ [465]=>
+ int(0)
+ [466]=>
+ int(0)
+ [467]=>
+ int(0)
+ [468]=>
+ int(0)
+ [469]=>
+ int(0)
+ [470]=>
+ int(0)
+ [471]=>
+ int(0)
+ [472]=>
+ int(65535)
+ [473]=>
+ int(65535)
+ [474]=>
+ int(65535)
+ [475]=>
+ int(65535)
+ [476]=>
+ int(65535)
+ [477]=>
+ int(65535)
+ [478]=>
+ int(65535)
+ [479]=>
+ int(65535)
+ [480]=>
+ int(0)
+ [481]=>
+ int(0)
+ [482]=>
+ int(54028)
+ [483]=>
+ int(2772)
+ [484]=>
+ int(16)
+ [485]=>
+ int(57377)
+ [486]=>
+ int(1024)
+ [487]=>
+ int(960)
+ [488]=>
+ int(0)
+ [489]=>
+ int(0)
+ [490]=>
+ int(42384)
+ [491]=>
+ int(8408)
+ [492]=>
+ int(65436)
+ [493]=>
+ int(0)
+ [494]=>
+ int(47655)
+ [495]=>
+ int(8)
+ [496]=>
+ int(1136)
+ [497]=>
+ int(8348)
+ [498]=>
+ int(0)
+ [499]=>
+ int(0)
+ [500]=>
+ int(0)
+ [501]=>
+ int(0)
+ [502]=>
+ int(0)
+ [503]=>
+ int(0)
+ [504]=>
+ int(0)
+ [505]=>
+ int(0)
+ [506]=>
+ int(0)
+ [507]=>
+ int(12326)
+ [508]=>
+ int(50261)
+ [509]=>
+ int(0)
+ [510]=>
+ int(0)
+ [511]=>
+ int(12326)
+ [512]=>
+ int(0)
+ [513]=>
+ int(65280)
+ [514]=>
+ int(32512)
+ [515]=>
+ int(49152)
+ [516]=>
+ int(0)
+ [517]=>
+ int(0)
+ [518]=>
+ int(22663)
+ [519]=>
+ int(2)
+ [520]=>
+ int(0)
+ [521]=>
+ int(0)
+ [522]=>
+ int(24576)
+ [523]=>
+ int(2)
+ [524]=>
+ int(0)
+ [525]=>
+ int(0)
+ [526]=>
+ int(501)
+ [527]=>
+ int(0)
+ [528]=>
+ int(20)
+ [529]=>
+ int(0)
+ [530]=>
+ int(0)
+ [531]=>
+ int(0)
+ [532]=>
+ int(33188)
+ [533]=>
+ int(0)
+ [534]=>
+ int(0)
+ [535]=>
+ int(0)
+ [536]=>
+ int(0)
+ [537]=>
+ int(0)
+ [538]=>
+ int(0)
+ [539]=>
+ int(0)
+ [540]=>
+ int(0)
+ [541]=>
+ int(0)
+ [542]=>
+ int(0)
+ [543]=>
+ int(0)
+ [544]=>
+ int(0)
+ [545]=>
+ int(0)
+ [546]=>
+ int(0)
+ [547]=>
+ int(0)
+ [548]=>
+ int(0)
+ [549]=>
+ int(0)
+ [550]=>
+ int(0)
+ [551]=>
+ int(0)
+ [552]=>
+ int(51766)
+ [553]=>
+ int(1946)
+ [554]=>
+ int(0)
+ [555]=>
+ int(24609)
+ [556]=>
+ int(1088)
+ [557]=>
+ int(960)
+ [558]=>
+ int(0)
+ [559]=>
+ int(0)
+ [560]=>
+ int(0)
+ [561]=>
+ int(0)
+ [562]=>
+ int(25116)
+ [563]=>
+ int(2012)
+ [564]=>
+ int(0)
+ [565]=>
+ int(0)
+ [566]=>
+ int(0)
+ [567]=>
+ int(0)
+ [568]=>
+ int(0)
+ [569]=>
+ int(0)
+ [570]=>
+ int(0)
+ [571]=>
+ int(0)
+ [572]=>
+ int(0)
+ [573]=>
+ int(0)
+ [574]=>
+ int(0)
+ [575]=>
+ int(0)
+ [576]=>
+ int(0)
+ [577]=>
+ int(0)
+ [578]=>
+ int(0)
+ [579]=>
+ int(0)
+ [580]=>
+ int(0)
+ [581]=>
+ int(0)
+ [582]=>
+ int(0)
+ [583]=>
+ int(0)
+ [584]=>
+ int(0)
+ [585]=>
+ int(0)
+ [586]=>
+ int(0)
+ [587]=>
+ int(0)
+ [588]=>
+ int(0)
+ [589]=>
+ int(0)
+ [590]=>
+ int(0)
+ [591]=>
+ int(0)
+ [592]=>
+ int(0)
+ [593]=>
+ int(0)
+ [594]=>
+ int(0)
+ [595]=>
+ int(0)
+ [596]=>
+ int(0)
+ [597]=>
+ int(0)
+ [598]=>
+ int(0)
+ [599]=>
+ int(0)
+ [600]=>
+ int(0)
+ [601]=>
+ int(0)
+ [602]=>
+ int(0)
+ [603]=>
+ int(0)
+ [604]=>
+ int(0)
+ [605]=>
+ int(0)
+ [606]=>
+ int(0)
+ [607]=>
+ int(0)
+ [608]=>
+ int(0)
+ [609]=>
+ int(0)
+ [610]=>
+ int(0)
+ [611]=>
+ int(0)
+ [612]=>
+ int(0)
+ [613]=>
+ int(0)
+ [614]=>
+ int(0)
+ [615]=>
+ int(0)
+ [616]=>
+ int(0)
+ [617]=>
+ int(0)
+ [618]=>
+ int(0)
+ [619]=>
+ int(0)
+ [620]=>
+ int(0)
+ [621]=>
+ int(0)
+ [622]=>
+ int(0)
+ [623]=>
+ int(0)
+ [624]=>
+ int(0)
+ [625]=>
+ int(0)
+ [626]=>
+ int(0)
+ [627]=>
+ int(0)
+ [628]=>
+ int(0)
+ [629]=>
+ int(0)
+ [630]=>
+ int(0)
+ [631]=>
+ int(0)
+ [632]=>
+ int(0)
+ [633]=>
+ int(0)
+ [634]=>
+ int(0)
+ [635]=>
+ int(0)
+ [636]=>
+ int(0)
+ [637]=>
+ int(0)
+ [638]=>
+ int(0)
+ [639]=>
+ int(0)
+ [640]=>
+ int(0)
+ [641]=>
+ int(0)
+ [642]=>
+ int(0)
+ [643]=>
+ int(0)
+ [644]=>
+ int(0)
+ [645]=>
+ int(0)
+ [646]=>
+ int(0)
+ [647]=>
+ int(0)
+ [648]=>
+ int(0)
+ [649]=>
+ int(0)
+ [650]=>
+ int(0)
+ [651]=>
+ int(0)
+ [652]=>
+ int(0)
+ [653]=>
+ int(0)
+ [654]=>
+ int(0)
+ [655]=>
+ int(0)
+ [656]=>
+ int(0)
+ [657]=>
+ int(0)
+ [658]=>
+ int(0)
+ [659]=>
+ int(0)
+ [660]=>
+ int(0)
+ [661]=>
+ int(0)
+ [662]=>
+ int(0)
+ [663]=>
+ int(0)
+ [664]=>
+ int(0)
+ [665]=>
+ int(0)
+ [666]=>
+ int(0)
+ [667]=>
+ int(0)
+ [668]=>
+ int(0)
+ [669]=>
+ int(0)
+ [670]=>
+ int(0)
+ [671]=>
+ int(0)
+ [672]=>
+ int(0)
+ [673]=>
+ int(0)
+ [674]=>
+ int(0)
+ [675]=>
+ int(0)
+ [676]=>
+ int(0)
+ [677]=>
+ int(0)
+ [678]=>
+ int(0)
+ [679]=>
+ int(0)
+ [680]=>
+ int(0)
+ [681]=>
+ int(0)
+ [682]=>
+ int(0)
+ [683]=>
+ int(0)
+ [684]=>
+ int(0)
+ [685]=>
+ int(0)
+ [686]=>
+ int(0)
+ [687]=>
+ int(0)
+ [688]=>
+ int(0)
+ [689]=>
+ int(0)
+ [690]=>
+ int(0)
+ [691]=>
+ int(0)
+ [692]=>
+ int(0)
+ [693]=>
+ int(0)
+ [694]=>
+ int(0)
+ [695]=>
+ int(0)
+ [696]=>
+ int(0)
+ [697]=>
+ int(0)
+ [698]=>
+ int(0)
+ [699]=>
+ int(0)
+ [700]=>
+ int(0)
+ [701]=>
+ int(0)
+ [702]=>
+ int(0)
+ [703]=>
+ int(0)
+ [704]=>
+ int(0)
+ [705]=>
+ int(0)
+ [706]=>
+ int(0)
+ [707]=>
+ int(0)
+ [708]=>
+ int(0)
+ [709]=>
+ int(0)
+ [710]=>
+ int(0)
+ [711]=>
+ int(0)
+ [712]=>
+ int(0)
+ [713]=>
+ int(0)
+ [714]=>
+ int(0)
+ [715]=>
+ int(0)
+ [716]=>
+ int(0)
+ [717]=>
+ int(0)
+ [718]=>
+ int(0)
+ [719]=>
+ int(0)
+ [720]=>
+ int(0)
+ [721]=>
+ int(0)
+ [722]=>
+ int(0)
+ [723]=>
+ int(0)
+ [724]=>
+ int(0)
+ [725]=>
+ int(0)
+ [726]=>
+ int(0)
+ [727]=>
+ int(0)
+ [728]=>
+ int(0)
+ [729]=>
+ int(0)
+ [730]=>
+ int(0)
+ [731]=>
+ int(0)
+ [732]=>
+ int(0)
+ [733]=>
+ int(0)
+ [734]=>
+ int(0)
+ [735]=>
+ int(0)
+ [736]=>
+ int(0)
+ [737]=>
+ int(0)
+ [738]=>
+ int(0)
+ [739]=>
+ int(0)
+ [740]=>
+ int(0)
+ [741]=>
+ int(0)
+ [742]=>
+ int(0)
+ [743]=>
+ int(0)
+ [744]=>
+ int(0)
+ [745]=>
+ int(0)
+ [746]=>
+ int(0)
+ [747]=>
+ int(0)
+ [748]=>
+ int(0)
+ [749]=>
+ int(0)
+ [750]=>
+ int(0)
+ [751]=>
+ int(0)
+ [752]=>
+ int(0)
+ [753]=>
+ int(0)
+ [754]=>
+ int(0)
+ [755]=>
+ int(0)
+ [756]=>
+ int(0)
+ [757]=>
+ int(0)
+ [758]=>
+ int(0)
+ [759]=>
+ int(0)
+ [760]=>
+ int(0)
+ [761]=>
+ int(0)
+ [762]=>
+ int(0)
+ [763]=>
+ int(0)
+ [764]=>
+ int(0)
+ [765]=>
+ int(0)
+ [766]=>
+ int(0)
+ [767]=>
+ int(0)
+ }
+ ["Copyright"]=>
+ string(12) "Eric Stewart"
+}
+--CREDIT--
+Eric Stewart <ericleestewart@gmail.com>
diff --git a/ext/exif/tests/exif018.phpt b/ext/exif/tests/exif018.phpt
new file mode 100644
index 000000000..a4ca53cb9
--- /dev/null
+++ b/ext/exif/tests/exif018.phpt
@@ -0,0 +1,1646 @@
+--TEST--
+Check for exif_read_data, TIFF with IFD and EXIF data in Intel byte-order.
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--INI--
+output_handler=
+zlib.output_compression=0
+--FILE--
+<?php
+var_dump(exif_read_data(dirname(__FILE__).'/image018.tiff'));
+?>
+--EXPECTF--
+array(37) {
+ ["FileName"]=>
+ string(13) "image018.tiff"
+ ["FileDateTime"]=>
+ int(%d)
+ ["FileSize"]=>
+ int(%d)
+ ["FileType"]=>
+ int(7)
+ ["MimeType"]=>
+ string(10) "image/tiff"
+ ["SectionsFound"]=>
+ string(19) "ANY_TAG, IFD0, EXIF"
+ ["COMPUTED"]=>
+ array(9) {
+ ["html"]=>
+ string(20) "width="1" height="1""
+ ["Height"]=>
+ int(1)
+ ["Width"]=>
+ int(1)
+ ["IsColor"]=>
+ int(1)
+ ["ByteOrderMotorola"]=>
+ int(0)
+ ["ApertureFNumber"]=>
+ string(5) "f/8.0"
+ ["Copyright"]=>
+ string(24) "Eric Stewart, Hex Editor"
+ ["Copyright.Photographer"]=>
+ string(12) "Eric Stewart"
+ ["Copyright.Editor"]=>
+ string(10) "Hex Editor"
+ }
+ ["ImageWidth"]=>
+ int(1)
+ ["ImageLength"]=>
+ int(1)
+ ["BitsPerSample"]=>
+ int(8)
+ ["Compression"]=>
+ int(5)
+ ["PhotometricInterpretation"]=>
+ int(3)
+ ["ImageDescription"]=>
+ string(15) "My description."
+ ["Make"]=>
+ string(11) "OpenShutter"
+ ["Model"]=>
+ string(8) "OS 1.0.0"
+ ["StripOffsets"]=>
+ int(2084)
+ ["SamplesPerPixel"]=>
+ int(1)
+ ["RowsPerStrip"]=>
+ int(8)
+ ["StripByteCounts"]=>
+ int(4)
+ ["XResolution"]=>
+ string(17) "381681664/2097152"
+ ["YResolution"]=>
+ string(17) "381681664/2097152"
+ ["PlanarConfiguration"]=>
+ int(1)
+ ["ResolutionUnit"]=>
+ int(2)
+ ["Artist"]=>
+ string(12) "Eric Stewart"
+ ["ColorMap"]=>
+ array(768) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(65280)
+ [2]=>
+ int(32512)
+ [3]=>
+ int(49152)
+ [4]=>
+ int(99)
+ [5]=>
+ int(115)
+ [6]=>
+ int(116)
+ [7]=>
+ int(101)
+ [8]=>
+ int(119)
+ [9]=>
+ int(97)
+ [10]=>
+ int(114)
+ [11]=>
+ int(116)
+ [12]=>
+ int(0)
+ [13]=>
+ int(0)
+ [14]=>
+ int(0)
+ [15]=>
+ int(0)
+ [16]=>
+ int(0)
+ [17]=>
+ int(0)
+ [18]=>
+ int(0)
+ [19]=>
+ int(0)
+ [20]=>
+ int(0)
+ [21]=>
+ int(0)
+ [22]=>
+ int(0)
+ [23]=>
+ int(0)
+ [24]=>
+ int(0)
+ [25]=>
+ int(0)
+ [26]=>
+ int(0)
+ [27]=>
+ int(0)
+ [28]=>
+ int(0)
+ [29]=>
+ int(0)
+ [30]=>
+ int(0)
+ [31]=>
+ int(0)
+ [32]=>
+ int(0)
+ [33]=>
+ int(0)
+ [34]=>
+ int(0)
+ [35]=>
+ int(0)
+ [36]=>
+ int(0)
+ [37]=>
+ int(0)
+ [38]=>
+ int(0)
+ [39]=>
+ int(0)
+ [40]=>
+ int(0)
+ [41]=>
+ int(0)
+ [42]=>
+ int(0)
+ [43]=>
+ int(0)
+ [44]=>
+ int(0)
+ [45]=>
+ int(0)
+ [46]=>
+ int(0)
+ [47]=>
+ int(0)
+ [48]=>
+ int(0)
+ [49]=>
+ int(0)
+ [50]=>
+ int(0)
+ [51]=>
+ int(0)
+ [52]=>
+ int(0)
+ [53]=>
+ int(0)
+ [54]=>
+ int(0)
+ [55]=>
+ int(0)
+ [56]=>
+ int(0)
+ [57]=>
+ int(0)
+ [58]=>
+ int(0)
+ [59]=>
+ int(0)
+ [60]=>
+ int(0)
+ [61]=>
+ int(0)
+ [62]=>
+ int(0)
+ [63]=>
+ int(0)
+ [64]=>
+ int(0)
+ [65]=>
+ int(0)
+ [66]=>
+ int(0)
+ [67]=>
+ int(0)
+ [68]=>
+ int(0)
+ [69]=>
+ int(0)
+ [70]=>
+ int(0)
+ [71]=>
+ int(0)
+ [72]=>
+ int(0)
+ [73]=>
+ int(0)
+ [74]=>
+ int(0)
+ [75]=>
+ int(0)
+ [76]=>
+ int(0)
+ [77]=>
+ int(0)
+ [78]=>
+ int(0)
+ [79]=>
+ int(0)
+ [80]=>
+ int(0)
+ [81]=>
+ int(0)
+ [82]=>
+ int(0)
+ [83]=>
+ int(0)
+ [84]=>
+ int(0)
+ [85]=>
+ int(0)
+ [86]=>
+ int(0)
+ [87]=>
+ int(0)
+ [88]=>
+ int(0)
+ [89]=>
+ int(0)
+ [90]=>
+ int(0)
+ [91]=>
+ int(0)
+ [92]=>
+ int(0)
+ [93]=>
+ int(0)
+ [94]=>
+ int(0)
+ [95]=>
+ int(0)
+ [96]=>
+ int(0)
+ [97]=>
+ int(0)
+ [98]=>
+ int(0)
+ [99]=>
+ int(0)
+ [100]=>
+ int(0)
+ [101]=>
+ int(0)
+ [102]=>
+ int(0)
+ [103]=>
+ int(0)
+ [104]=>
+ int(0)
+ [105]=>
+ int(0)
+ [106]=>
+ int(0)
+ [107]=>
+ int(0)
+ [108]=>
+ int(0)
+ [109]=>
+ int(0)
+ [110]=>
+ int(0)
+ [111]=>
+ int(0)
+ [112]=>
+ int(0)
+ [113]=>
+ int(0)
+ [114]=>
+ int(0)
+ [115]=>
+ int(0)
+ [116]=>
+ int(0)
+ [117]=>
+ int(0)
+ [118]=>
+ int(0)
+ [119]=>
+ int(0)
+ [120]=>
+ int(0)
+ [121]=>
+ int(0)
+ [122]=>
+ int(0)
+ [123]=>
+ int(0)
+ [124]=>
+ int(0)
+ [125]=>
+ int(0)
+ [126]=>
+ int(0)
+ [127]=>
+ int(0)
+ [128]=>
+ int(0)
+ [129]=>
+ int(0)
+ [130]=>
+ int(0)
+ [131]=>
+ int(0)
+ [132]=>
+ int(0)
+ [133]=>
+ int(0)
+ [134]=>
+ int(0)
+ [135]=>
+ int(0)
+ [136]=>
+ int(0)
+ [137]=>
+ int(0)
+ [138]=>
+ int(0)
+ [139]=>
+ int(0)
+ [140]=>
+ int(0)
+ [141]=>
+ int(0)
+ [142]=>
+ int(0)
+ [143]=>
+ int(0)
+ [144]=>
+ int(0)
+ [145]=>
+ int(0)
+ [146]=>
+ int(0)
+ [147]=>
+ int(0)
+ [148]=>
+ int(0)
+ [149]=>
+ int(0)
+ [150]=>
+ int(0)
+ [151]=>
+ int(0)
+ [152]=>
+ int(0)
+ [153]=>
+ int(0)
+ [154]=>
+ int(0)
+ [155]=>
+ int(0)
+ [156]=>
+ int(0)
+ [157]=>
+ int(0)
+ [158]=>
+ int(0)
+ [159]=>
+ int(0)
+ [160]=>
+ int(0)
+ [161]=>
+ int(0)
+ [162]=>
+ int(0)
+ [163]=>
+ int(0)
+ [164]=>
+ int(0)
+ [165]=>
+ int(0)
+ [166]=>
+ int(0)
+ [167]=>
+ int(0)
+ [168]=>
+ int(0)
+ [169]=>
+ int(0)
+ [170]=>
+ int(0)
+ [171]=>
+ int(0)
+ [172]=>
+ int(0)
+ [173]=>
+ int(0)
+ [174]=>
+ int(0)
+ [175]=>
+ int(0)
+ [176]=>
+ int(0)
+ [177]=>
+ int(0)
+ [178]=>
+ int(0)
+ [179]=>
+ int(0)
+ [180]=>
+ int(0)
+ [181]=>
+ int(0)
+ [182]=>
+ int(0)
+ [183]=>
+ int(0)
+ [184]=>
+ int(0)
+ [185]=>
+ int(0)
+ [186]=>
+ int(0)
+ [187]=>
+ int(0)
+ [188]=>
+ int(0)
+ [189]=>
+ int(0)
+ [190]=>
+ int(0)
+ [191]=>
+ int(0)
+ [192]=>
+ int(0)
+ [193]=>
+ int(0)
+ [194]=>
+ int(0)
+ [195]=>
+ int(0)
+ [196]=>
+ int(0)
+ [197]=>
+ int(0)
+ [198]=>
+ int(0)
+ [199]=>
+ int(0)
+ [200]=>
+ int(0)
+ [201]=>
+ int(0)
+ [202]=>
+ int(0)
+ [203]=>
+ int(0)
+ [204]=>
+ int(0)
+ [205]=>
+ int(0)
+ [206]=>
+ int(0)
+ [207]=>
+ int(0)
+ [208]=>
+ int(0)
+ [209]=>
+ int(0)
+ [210]=>
+ int(0)
+ [211]=>
+ int(0)
+ [212]=>
+ int(0)
+ [213]=>
+ int(0)
+ [214]=>
+ int(0)
+ [215]=>
+ int(0)
+ [216]=>
+ int(0)
+ [217]=>
+ int(0)
+ [218]=>
+ int(0)
+ [219]=>
+ int(0)
+ [220]=>
+ int(0)
+ [221]=>
+ int(0)
+ [222]=>
+ int(0)
+ [223]=>
+ int(0)
+ [224]=>
+ int(0)
+ [225]=>
+ int(0)
+ [226]=>
+ int(0)
+ [227]=>
+ int(0)
+ [228]=>
+ int(0)
+ [229]=>
+ int(0)
+ [230]=>
+ int(0)
+ [231]=>
+ int(0)
+ [232]=>
+ int(0)
+ [233]=>
+ int(0)
+ [234]=>
+ int(0)
+ [235]=>
+ int(0)
+ [236]=>
+ int(0)
+ [237]=>
+ int(0)
+ [238]=>
+ int(0)
+ [239]=>
+ int(0)
+ [240]=>
+ int(0)
+ [241]=>
+ int(0)
+ [242]=>
+ int(0)
+ [243]=>
+ int(0)
+ [244]=>
+ int(0)
+ [245]=>
+ int(0)
+ [246]=>
+ int(0)
+ [247]=>
+ int(0)
+ [248]=>
+ int(0)
+ [249]=>
+ int(0)
+ [250]=>
+ int(0)
+ [251]=>
+ int(0)
+ [252]=>
+ int(0)
+ [253]=>
+ int(0)
+ [254]=>
+ int(0)
+ [255]=>
+ int(1)
+ [256]=>
+ int(0)
+ [257]=>
+ int(65280)
+ [258]=>
+ int(32512)
+ [259]=>
+ int(49152)
+ [260]=>
+ int(0)
+ [261]=>
+ int(0)
+ [262]=>
+ int(0)
+ [263]=>
+ int(0)
+ [264]=>
+ int(0)
+ [265]=>
+ int(0)
+ [266]=>
+ int(0)
+ [267]=>
+ int(0)
+ [268]=>
+ int(0)
+ [269]=>
+ int(0)
+ [270]=>
+ int(0)
+ [271]=>
+ int(0)
+ [272]=>
+ int(11945)
+ [273]=>
+ int(1914)
+ [274]=>
+ int(0)
+ [275]=>
+ int(24609)
+ [276]=>
+ int(1088)
+ [277]=>
+ int(960)
+ [278]=>
+ int(0)
+ [279]=>
+ int(0)
+ [280]=>
+ int(20000)
+ [281]=>
+ int(8414)
+ [282]=>
+ int(65436)
+ [283]=>
+ int(0)
+ [284]=>
+ int(47655)
+ [285]=>
+ int(8)
+ [286]=>
+ int(37936)
+ [287]=>
+ int(8406)
+ [288]=>
+ int(0)
+ [289]=>
+ int(0)
+ [290]=>
+ int(0)
+ [291]=>
+ int(0)
+ [292]=>
+ int(0)
+ [293]=>
+ int(0)
+ [294]=>
+ int(0)
+ [295]=>
+ int(0)
+ [296]=>
+ int(0)
+ [297]=>
+ int(64652)
+ [298]=>
+ int(50264)
+ [299]=>
+ int(0)
+ [300]=>
+ int(0)
+ [301]=>
+ int(64887)
+ [302]=>
+ int(50264)
+ [303]=>
+ int(0)
+ [304]=>
+ int(25714)
+ [305]=>
+ int(26220)
+ [306]=>
+ int(17235)
+ [307]=>
+ int(19777)
+ [308]=>
+ int(65535)
+ [309]=>
+ int(65535)
+ [310]=>
+ int(65535)
+ [311]=>
+ int(65535)
+ [312]=>
+ int(65535)
+ [313]=>
+ int(65535)
+ [314]=>
+ int(65535)
+ [315]=>
+ int(65535)
+ [316]=>
+ int(501)
+ [317]=>
+ int(0)
+ [318]=>
+ int(20)
+ [319]=>
+ int(0)
+ [320]=>
+ int(0)
+ [321]=>
+ int(0)
+ [322]=>
+ int(16877)
+ [323]=>
+ int(0)
+ [324]=>
+ int(3)
+ [325]=>
+ int(0)
+ [326]=>
+ int(0)
+ [327]=>
+ int(0)
+ [328]=>
+ int(0)
+ [329]=>
+ int(0)
+ [330]=>
+ int(0)
+ [331]=>
+ int(0)
+ [332]=>
+ int(65535)
+ [333]=>
+ int(65535)
+ [334]=>
+ int(65535)
+ [335]=>
+ int(65535)
+ [336]=>
+ int(65535)
+ [337]=>
+ int(65535)
+ [338]=>
+ int(65535)
+ [339]=>
+ int(65535)
+ [340]=>
+ int(0)
+ [341]=>
+ int(0)
+ [342]=>
+ int(52840)
+ [343]=>
+ int(2025)
+ [344]=>
+ int(16)
+ [345]=>
+ int(57377)
+ [346]=>
+ int(1024)
+ [347]=>
+ int(960)
+ [348]=>
+ int(0)
+ [349]=>
+ int(0)
+ [350]=>
+ int(27136)
+ [351]=>
+ int(8414)
+ [352]=>
+ int(65436)
+ [353]=>
+ int(0)
+ [354]=>
+ int(47655)
+ [355]=>
+ int(8)
+ [356]=>
+ int(62400)
+ [357]=>
+ int(8407)
+ [358]=>
+ int(0)
+ [359]=>
+ int(0)
+ [360]=>
+ int(0)
+ [361]=>
+ int(0)
+ [362]=>
+ int(0)
+ [363]=>
+ int(0)
+ [364]=>
+ int(0)
+ [365]=>
+ int(0)
+ [366]=>
+ int(0)
+ [367]=>
+ int(64857)
+ [368]=>
+ int(50264)
+ [369]=>
+ int(0)
+ [370]=>
+ int(0)
+ [371]=>
+ int(64892)
+ [372]=>
+ int(50264)
+ [373]=>
+ int(0)
+ [374]=>
+ int(25714)
+ [375]=>
+ int(26220)
+ [376]=>
+ int(17235)
+ [377]=>
+ int(19777)
+ [378]=>
+ int(65535)
+ [379]=>
+ int(65535)
+ [380]=>
+ int(65535)
+ [381]=>
+ int(65535)
+ [382]=>
+ int(65535)
+ [383]=>
+ int(65535)
+ [384]=>
+ int(65535)
+ [385]=>
+ int(65535)
+ [386]=>
+ int(501)
+ [387]=>
+ int(0)
+ [388]=>
+ int(20)
+ [389]=>
+ int(0)
+ [390]=>
+ int(0)
+ [391]=>
+ int(0)
+ [392]=>
+ int(16877)
+ [393]=>
+ int(0)
+ [394]=>
+ int(3)
+ [395]=>
+ int(0)
+ [396]=>
+ int(0)
+ [397]=>
+ int(0)
+ [398]=>
+ int(0)
+ [399]=>
+ int(0)
+ [400]=>
+ int(0)
+ [401]=>
+ int(0)
+ [402]=>
+ int(65535)
+ [403]=>
+ int(65535)
+ [404]=>
+ int(65535)
+ [405]=>
+ int(65535)
+ [406]=>
+ int(65535)
+ [407]=>
+ int(65535)
+ [408]=>
+ int(65535)
+ [409]=>
+ int(65535)
+ [410]=>
+ int(0)
+ [411]=>
+ int(0)
+ [412]=>
+ int(53440)
+ [413]=>
+ int(2025)
+ [414]=>
+ int(16)
+ [415]=>
+ int(57377)
+ [416]=>
+ int(1024)
+ [417]=>
+ int(960)
+ [418]=>
+ int(0)
+ [419]=>
+ int(0)
+ [420]=>
+ int(41120)
+ [421]=>
+ int(9024)
+ [422]=>
+ int(65436)
+ [423]=>
+ int(0)
+ [424]=>
+ int(47655)
+ [425]=>
+ int(8)
+ [426]=>
+ int(24480)
+ [427]=>
+ int(8404)
+ [428]=>
+ int(0)
+ [429]=>
+ int(0)
+ [430]=>
+ int(0)
+ [431]=>
+ int(0)
+ [432]=>
+ int(0)
+ [433]=>
+ int(0)
+ [434]=>
+ int(0)
+ [435]=>
+ int(0)
+ [436]=>
+ int(0)
+ [437]=>
+ int(21315)
+ [438]=>
+ int(50294)
+ [439]=>
+ int(0)
+ [440]=>
+ int(0)
+ [441]=>
+ int(53635)
+ [442]=>
+ int(50294)
+ [443]=>
+ int(0)
+ [444]=>
+ int(25714)
+ [445]=>
+ int(26220)
+ [446]=>
+ int(17235)
+ [447]=>
+ int(19777)
+ [448]=>
+ int(65535)
+ [449]=>
+ int(65535)
+ [450]=>
+ int(65535)
+ [451]=>
+ int(65535)
+ [452]=>
+ int(65535)
+ [453]=>
+ int(65535)
+ [454]=>
+ int(65535)
+ [455]=>
+ int(65535)
+ [456]=>
+ int(501)
+ [457]=>
+ int(0)
+ [458]=>
+ int(20)
+ [459]=>
+ int(0)
+ [460]=>
+ int(0)
+ [461]=>
+ int(0)
+ [462]=>
+ int(16877)
+ [463]=>
+ int(0)
+ [464]=>
+ int(3)
+ [465]=>
+ int(0)
+ [466]=>
+ int(0)
+ [467]=>
+ int(0)
+ [468]=>
+ int(0)
+ [469]=>
+ int(0)
+ [470]=>
+ int(0)
+ [471]=>
+ int(0)
+ [472]=>
+ int(65535)
+ [473]=>
+ int(65535)
+ [474]=>
+ int(65535)
+ [475]=>
+ int(65535)
+ [476]=>
+ int(65535)
+ [477]=>
+ int(65535)
+ [478]=>
+ int(65535)
+ [479]=>
+ int(65535)
+ [480]=>
+ int(0)
+ [481]=>
+ int(0)
+ [482]=>
+ int(54028)
+ [483]=>
+ int(2772)
+ [484]=>
+ int(16)
+ [485]=>
+ int(57377)
+ [486]=>
+ int(1024)
+ [487]=>
+ int(960)
+ [488]=>
+ int(0)
+ [489]=>
+ int(0)
+ [490]=>
+ int(42384)
+ [491]=>
+ int(8408)
+ [492]=>
+ int(65436)
+ [493]=>
+ int(0)
+ [494]=>
+ int(47655)
+ [495]=>
+ int(8)
+ [496]=>
+ int(1136)
+ [497]=>
+ int(8348)
+ [498]=>
+ int(0)
+ [499]=>
+ int(0)
+ [500]=>
+ int(0)
+ [501]=>
+ int(0)
+ [502]=>
+ int(0)
+ [503]=>
+ int(0)
+ [504]=>
+ int(0)
+ [505]=>
+ int(0)
+ [506]=>
+ int(0)
+ [507]=>
+ int(12326)
+ [508]=>
+ int(50261)
+ [509]=>
+ int(0)
+ [510]=>
+ int(0)
+ [511]=>
+ int(12326)
+ [512]=>
+ int(0)
+ [513]=>
+ int(65280)
+ [514]=>
+ int(32512)
+ [515]=>
+ int(49152)
+ [516]=>
+ int(0)
+ [517]=>
+ int(0)
+ [518]=>
+ int(22663)
+ [519]=>
+ int(2)
+ [520]=>
+ int(0)
+ [521]=>
+ int(0)
+ [522]=>
+ int(24576)
+ [523]=>
+ int(2)
+ [524]=>
+ int(0)
+ [525]=>
+ int(0)
+ [526]=>
+ int(501)
+ [527]=>
+ int(0)
+ [528]=>
+ int(20)
+ [529]=>
+ int(0)
+ [530]=>
+ int(0)
+ [531]=>
+ int(0)
+ [532]=>
+ int(33188)
+ [533]=>
+ int(0)
+ [534]=>
+ int(0)
+ [535]=>
+ int(0)
+ [536]=>
+ int(0)
+ [537]=>
+ int(0)
+ [538]=>
+ int(0)
+ [539]=>
+ int(0)
+ [540]=>
+ int(0)
+ [541]=>
+ int(0)
+ [542]=>
+ int(0)
+ [543]=>
+ int(0)
+ [544]=>
+ int(0)
+ [545]=>
+ int(0)
+ [546]=>
+ int(0)
+ [547]=>
+ int(0)
+ [548]=>
+ int(0)
+ [549]=>
+ int(0)
+ [550]=>
+ int(0)
+ [551]=>
+ int(0)
+ [552]=>
+ int(51766)
+ [553]=>
+ int(1946)
+ [554]=>
+ int(0)
+ [555]=>
+ int(24609)
+ [556]=>
+ int(1088)
+ [557]=>
+ int(960)
+ [558]=>
+ int(0)
+ [559]=>
+ int(0)
+ [560]=>
+ int(0)
+ [561]=>
+ int(0)
+ [562]=>
+ int(25116)
+ [563]=>
+ int(2012)
+ [564]=>
+ int(0)
+ [565]=>
+ int(0)
+ [566]=>
+ int(0)
+ [567]=>
+ int(0)
+ [568]=>
+ int(0)
+ [569]=>
+ int(0)
+ [570]=>
+ int(0)
+ [571]=>
+ int(0)
+ [572]=>
+ int(0)
+ [573]=>
+ int(0)
+ [574]=>
+ int(0)
+ [575]=>
+ int(0)
+ [576]=>
+ int(0)
+ [577]=>
+ int(0)
+ [578]=>
+ int(0)
+ [579]=>
+ int(0)
+ [580]=>
+ int(0)
+ [581]=>
+ int(0)
+ [582]=>
+ int(0)
+ [583]=>
+ int(0)
+ [584]=>
+ int(0)
+ [585]=>
+ int(0)
+ [586]=>
+ int(0)
+ [587]=>
+ int(0)
+ [588]=>
+ int(0)
+ [589]=>
+ int(0)
+ [590]=>
+ int(0)
+ [591]=>
+ int(0)
+ [592]=>
+ int(0)
+ [593]=>
+ int(0)
+ [594]=>
+ int(0)
+ [595]=>
+ int(0)
+ [596]=>
+ int(0)
+ [597]=>
+ int(0)
+ [598]=>
+ int(0)
+ [599]=>
+ int(0)
+ [600]=>
+ int(0)
+ [601]=>
+ int(0)
+ [602]=>
+ int(0)
+ [603]=>
+ int(0)
+ [604]=>
+ int(0)
+ [605]=>
+ int(0)
+ [606]=>
+ int(0)
+ [607]=>
+ int(0)
+ [608]=>
+ int(0)
+ [609]=>
+ int(0)
+ [610]=>
+ int(0)
+ [611]=>
+ int(0)
+ [612]=>
+ int(0)
+ [613]=>
+ int(0)
+ [614]=>
+ int(0)
+ [615]=>
+ int(0)
+ [616]=>
+ int(0)
+ [617]=>
+ int(0)
+ [618]=>
+ int(0)
+ [619]=>
+ int(0)
+ [620]=>
+ int(0)
+ [621]=>
+ int(0)
+ [622]=>
+ int(0)
+ [623]=>
+ int(0)
+ [624]=>
+ int(0)
+ [625]=>
+ int(0)
+ [626]=>
+ int(0)
+ [627]=>
+ int(0)
+ [628]=>
+ int(0)
+ [629]=>
+ int(0)
+ [630]=>
+ int(0)
+ [631]=>
+ int(0)
+ [632]=>
+ int(0)
+ [633]=>
+ int(0)
+ [634]=>
+ int(0)
+ [635]=>
+ int(0)
+ [636]=>
+ int(0)
+ [637]=>
+ int(0)
+ [638]=>
+ int(0)
+ [639]=>
+ int(0)
+ [640]=>
+ int(0)
+ [641]=>
+ int(0)
+ [642]=>
+ int(0)
+ [643]=>
+ int(0)
+ [644]=>
+ int(0)
+ [645]=>
+ int(0)
+ [646]=>
+ int(0)
+ [647]=>
+ int(0)
+ [648]=>
+ int(0)
+ [649]=>
+ int(0)
+ [650]=>
+ int(0)
+ [651]=>
+ int(0)
+ [652]=>
+ int(0)
+ [653]=>
+ int(0)
+ [654]=>
+ int(0)
+ [655]=>
+ int(0)
+ [656]=>
+ int(0)
+ [657]=>
+ int(0)
+ [658]=>
+ int(0)
+ [659]=>
+ int(0)
+ [660]=>
+ int(0)
+ [661]=>
+ int(0)
+ [662]=>
+ int(0)
+ [663]=>
+ int(0)
+ [664]=>
+ int(0)
+ [665]=>
+ int(0)
+ [666]=>
+ int(0)
+ [667]=>
+ int(0)
+ [668]=>
+ int(0)
+ [669]=>
+ int(0)
+ [670]=>
+ int(0)
+ [671]=>
+ int(0)
+ [672]=>
+ int(0)
+ [673]=>
+ int(0)
+ [674]=>
+ int(0)
+ [675]=>
+ int(0)
+ [676]=>
+ int(0)
+ [677]=>
+ int(0)
+ [678]=>
+ int(0)
+ [679]=>
+ int(0)
+ [680]=>
+ int(0)
+ [681]=>
+ int(0)
+ [682]=>
+ int(0)
+ [683]=>
+ int(0)
+ [684]=>
+ int(0)
+ [685]=>
+ int(0)
+ [686]=>
+ int(0)
+ [687]=>
+ int(0)
+ [688]=>
+ int(0)
+ [689]=>
+ int(0)
+ [690]=>
+ int(0)
+ [691]=>
+ int(0)
+ [692]=>
+ int(0)
+ [693]=>
+ int(0)
+ [694]=>
+ int(0)
+ [695]=>
+ int(0)
+ [696]=>
+ int(0)
+ [697]=>
+ int(0)
+ [698]=>
+ int(0)
+ [699]=>
+ int(0)
+ [700]=>
+ int(0)
+ [701]=>
+ int(0)
+ [702]=>
+ int(0)
+ [703]=>
+ int(0)
+ [704]=>
+ int(0)
+ [705]=>
+ int(0)
+ [706]=>
+ int(0)
+ [707]=>
+ int(0)
+ [708]=>
+ int(0)
+ [709]=>
+ int(0)
+ [710]=>
+ int(0)
+ [711]=>
+ int(0)
+ [712]=>
+ int(0)
+ [713]=>
+ int(0)
+ [714]=>
+ int(0)
+ [715]=>
+ int(0)
+ [716]=>
+ int(0)
+ [717]=>
+ int(0)
+ [718]=>
+ int(0)
+ [719]=>
+ int(0)
+ [720]=>
+ int(0)
+ [721]=>
+ int(0)
+ [722]=>
+ int(0)
+ [723]=>
+ int(0)
+ [724]=>
+ int(0)
+ [725]=>
+ int(0)
+ [726]=>
+ int(0)
+ [727]=>
+ int(0)
+ [728]=>
+ int(0)
+ [729]=>
+ int(0)
+ [730]=>
+ int(0)
+ [731]=>
+ int(0)
+ [732]=>
+ int(0)
+ [733]=>
+ int(0)
+ [734]=>
+ int(0)
+ [735]=>
+ int(0)
+ [736]=>
+ int(0)
+ [737]=>
+ int(0)
+ [738]=>
+ int(0)
+ [739]=>
+ int(0)
+ [740]=>
+ int(0)
+ [741]=>
+ int(0)
+ [742]=>
+ int(0)
+ [743]=>
+ int(0)
+ [744]=>
+ int(0)
+ [745]=>
+ int(0)
+ [746]=>
+ int(0)
+ [747]=>
+ int(0)
+ [748]=>
+ int(0)
+ [749]=>
+ int(0)
+ [750]=>
+ int(0)
+ [751]=>
+ int(0)
+ [752]=>
+ int(0)
+ [753]=>
+ int(0)
+ [754]=>
+ int(0)
+ [755]=>
+ int(0)
+ [756]=>
+ int(0)
+ [757]=>
+ int(0)
+ [758]=>
+ int(0)
+ [759]=>
+ int(0)
+ [760]=>
+ int(0)
+ [761]=>
+ int(0)
+ [762]=>
+ int(0)
+ [763]=>
+ int(0)
+ [764]=>
+ int(0)
+ [765]=>
+ int(0)
+ [766]=>
+ int(0)
+ [767]=>
+ int(0)
+ }
+ ["Copyright"]=>
+ string(12) "Eric Stewart"
+ ["ExposureTime"]=>
+ string(5) "1/125"
+ ["FNumber"]=>
+ string(3) "8/1"
+ ["ISOSpeedRatings"]=>
+ int(80)
+ ["DateTimeOriginal"]=>
+ string(19) "2008:06:19 01:47:53"
+ ["DateTimeDigitized"]=>
+ string(19) "2008:06:19 01:47:53"
+ ["MeteringMode"]=>
+ int(5)
+ ["LightSource"]=>
+ int(4)
+ ["Flash"]=>
+ int(7)
+ ["FocalLength"]=>
+ string(4) "29/5"
+ ["ExifImageWidth"]=>
+ int(1)
+ ["ExifImageLength"]=>
+ int(1)
+}
+--CREDIT--
+Eric Stewart <ericleestewart@gmail.com>
diff --git a/ext/exif/tests/exif020.phpt b/ext/exif/tests/exif020.phpt
new file mode 100644
index 000000000..c6bb13c32
--- /dev/null
+++ b/ext/exif/tests/exif020.phpt
@@ -0,0 +1,1659 @@
+--TEST--
+Check for exif_read_data, TIFF with IFD and GPS data in Intel byte-order.
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--INI--
+output_handler=
+zlib.output_compression=0
+--FILE--
+<?php
+var_dump(exif_read_data(dirname(__FILE__).'/image020.tiff'));
+?>
+--EXPECTF--
+array(34) {
+ ["FileName"]=>
+ string(13) "image020.tiff"
+ ["FileDateTime"]=>
+ int(%d)
+ ["FileSize"]=>
+ int(%d)
+ ["FileType"]=>
+ int(7)
+ ["MimeType"]=>
+ string(10) "image/tiff"
+ ["SectionsFound"]=>
+ string(18) "ANY_TAG, IFD0, GPS"
+ ["COMPUTED"]=>
+ array(8) {
+ ["html"]=>
+ string(20) "width="1" height="1""
+ ["Height"]=>
+ int(1)
+ ["Width"]=>
+ int(1)
+ ["IsColor"]=>
+ int(1)
+ ["ByteOrderMotorola"]=>
+ int(0)
+ ["Copyright"]=>
+ string(24) "Eric Stewart, Hex Editor"
+ ["Copyright.Photographer"]=>
+ string(12) "Eric Stewart"
+ ["Copyright.Editor"]=>
+ string(10) "Hex Editor"
+ }
+ ["ImageWidth"]=>
+ int(1)
+ ["ImageLength"]=>
+ int(1)
+ ["BitsPerSample"]=>
+ int(8)
+ ["Compression"]=>
+ int(5)
+ ["PhotometricInterpretation"]=>
+ int(3)
+ ["ImageDescription"]=>
+ string(15) "My description."
+ ["Make"]=>
+ string(11) "OpenShutter"
+ ["Model"]=>
+ string(8) "OS 1.0.0"
+ ["StripOffsets"]=>
+ int(2064)
+ ["SamplesPerPixel"]=>
+ int(1)
+ ["RowsPerStrip"]=>
+ int(8)
+ ["StripByteCounts"]=>
+ int(4)
+ ["XResolution"]=>
+ string(17) "381681664/2097152"
+ ["YResolution"]=>
+ string(17) "381681664/2097152"
+ ["PlanarConfiguration"]=>
+ int(1)
+ ["ResolutionUnit"]=>
+ int(2)
+ ["Artist"]=>
+ string(12) "Eric Stewart"
+ ["ColorMap"]=>
+ array(768) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(65280)
+ [2]=>
+ int(32512)
+ [3]=>
+ int(49152)
+ [4]=>
+ int(99)
+ [5]=>
+ int(115)
+ [6]=>
+ int(116)
+ [7]=>
+ int(101)
+ [8]=>
+ int(119)
+ [9]=>
+ int(97)
+ [10]=>
+ int(114)
+ [11]=>
+ int(116)
+ [12]=>
+ int(0)
+ [13]=>
+ int(0)
+ [14]=>
+ int(0)
+ [15]=>
+ int(0)
+ [16]=>
+ int(0)
+ [17]=>
+ int(0)
+ [18]=>
+ int(0)
+ [19]=>
+ int(0)
+ [20]=>
+ int(0)
+ [21]=>
+ int(0)
+ [22]=>
+ int(0)
+ [23]=>
+ int(0)
+ [24]=>
+ int(0)
+ [25]=>
+ int(0)
+ [26]=>
+ int(0)
+ [27]=>
+ int(0)
+ [28]=>
+ int(0)
+ [29]=>
+ int(0)
+ [30]=>
+ int(0)
+ [31]=>
+ int(0)
+ [32]=>
+ int(0)
+ [33]=>
+ int(0)
+ [34]=>
+ int(0)
+ [35]=>
+ int(0)
+ [36]=>
+ int(0)
+ [37]=>
+ int(0)
+ [38]=>
+ int(0)
+ [39]=>
+ int(0)
+ [40]=>
+ int(0)
+ [41]=>
+ int(0)
+ [42]=>
+ int(0)
+ [43]=>
+ int(0)
+ [44]=>
+ int(0)
+ [45]=>
+ int(0)
+ [46]=>
+ int(0)
+ [47]=>
+ int(0)
+ [48]=>
+ int(0)
+ [49]=>
+ int(0)
+ [50]=>
+ int(0)
+ [51]=>
+ int(0)
+ [52]=>
+ int(0)
+ [53]=>
+ int(0)
+ [54]=>
+ int(0)
+ [55]=>
+ int(0)
+ [56]=>
+ int(0)
+ [57]=>
+ int(0)
+ [58]=>
+ int(0)
+ [59]=>
+ int(0)
+ [60]=>
+ int(0)
+ [61]=>
+ int(0)
+ [62]=>
+ int(0)
+ [63]=>
+ int(0)
+ [64]=>
+ int(0)
+ [65]=>
+ int(0)
+ [66]=>
+ int(0)
+ [67]=>
+ int(0)
+ [68]=>
+ int(0)
+ [69]=>
+ int(0)
+ [70]=>
+ int(0)
+ [71]=>
+ int(0)
+ [72]=>
+ int(0)
+ [73]=>
+ int(0)
+ [74]=>
+ int(0)
+ [75]=>
+ int(0)
+ [76]=>
+ int(0)
+ [77]=>
+ int(0)
+ [78]=>
+ int(0)
+ [79]=>
+ int(0)
+ [80]=>
+ int(0)
+ [81]=>
+ int(0)
+ [82]=>
+ int(0)
+ [83]=>
+ int(0)
+ [84]=>
+ int(0)
+ [85]=>
+ int(0)
+ [86]=>
+ int(0)
+ [87]=>
+ int(0)
+ [88]=>
+ int(0)
+ [89]=>
+ int(0)
+ [90]=>
+ int(0)
+ [91]=>
+ int(0)
+ [92]=>
+ int(0)
+ [93]=>
+ int(0)
+ [94]=>
+ int(0)
+ [95]=>
+ int(0)
+ [96]=>
+ int(0)
+ [97]=>
+ int(0)
+ [98]=>
+ int(0)
+ [99]=>
+ int(0)
+ [100]=>
+ int(0)
+ [101]=>
+ int(0)
+ [102]=>
+ int(0)
+ [103]=>
+ int(0)
+ [104]=>
+ int(0)
+ [105]=>
+ int(0)
+ [106]=>
+ int(0)
+ [107]=>
+ int(0)
+ [108]=>
+ int(0)
+ [109]=>
+ int(0)
+ [110]=>
+ int(0)
+ [111]=>
+ int(0)
+ [112]=>
+ int(0)
+ [113]=>
+ int(0)
+ [114]=>
+ int(0)
+ [115]=>
+ int(0)
+ [116]=>
+ int(0)
+ [117]=>
+ int(0)
+ [118]=>
+ int(0)
+ [119]=>
+ int(0)
+ [120]=>
+ int(0)
+ [121]=>
+ int(0)
+ [122]=>
+ int(0)
+ [123]=>
+ int(0)
+ [124]=>
+ int(0)
+ [125]=>
+ int(0)
+ [126]=>
+ int(0)
+ [127]=>
+ int(0)
+ [128]=>
+ int(0)
+ [129]=>
+ int(0)
+ [130]=>
+ int(0)
+ [131]=>
+ int(0)
+ [132]=>
+ int(0)
+ [133]=>
+ int(0)
+ [134]=>
+ int(0)
+ [135]=>
+ int(0)
+ [136]=>
+ int(0)
+ [137]=>
+ int(0)
+ [138]=>
+ int(0)
+ [139]=>
+ int(0)
+ [140]=>
+ int(0)
+ [141]=>
+ int(0)
+ [142]=>
+ int(0)
+ [143]=>
+ int(0)
+ [144]=>
+ int(0)
+ [145]=>
+ int(0)
+ [146]=>
+ int(0)
+ [147]=>
+ int(0)
+ [148]=>
+ int(0)
+ [149]=>
+ int(0)
+ [150]=>
+ int(0)
+ [151]=>
+ int(0)
+ [152]=>
+ int(0)
+ [153]=>
+ int(0)
+ [154]=>
+ int(0)
+ [155]=>
+ int(0)
+ [156]=>
+ int(0)
+ [157]=>
+ int(0)
+ [158]=>
+ int(0)
+ [159]=>
+ int(0)
+ [160]=>
+ int(0)
+ [161]=>
+ int(0)
+ [162]=>
+ int(0)
+ [163]=>
+ int(0)
+ [164]=>
+ int(0)
+ [165]=>
+ int(0)
+ [166]=>
+ int(0)
+ [167]=>
+ int(0)
+ [168]=>
+ int(0)
+ [169]=>
+ int(0)
+ [170]=>
+ int(0)
+ [171]=>
+ int(0)
+ [172]=>
+ int(0)
+ [173]=>
+ int(0)
+ [174]=>
+ int(0)
+ [175]=>
+ int(0)
+ [176]=>
+ int(0)
+ [177]=>
+ int(0)
+ [178]=>
+ int(0)
+ [179]=>
+ int(0)
+ [180]=>
+ int(0)
+ [181]=>
+ int(0)
+ [182]=>
+ int(0)
+ [183]=>
+ int(0)
+ [184]=>
+ int(0)
+ [185]=>
+ int(0)
+ [186]=>
+ int(0)
+ [187]=>
+ int(0)
+ [188]=>
+ int(0)
+ [189]=>
+ int(0)
+ [190]=>
+ int(0)
+ [191]=>
+ int(0)
+ [192]=>
+ int(0)
+ [193]=>
+ int(0)
+ [194]=>
+ int(0)
+ [195]=>
+ int(0)
+ [196]=>
+ int(0)
+ [197]=>
+ int(0)
+ [198]=>
+ int(0)
+ [199]=>
+ int(0)
+ [200]=>
+ int(0)
+ [201]=>
+ int(0)
+ [202]=>
+ int(0)
+ [203]=>
+ int(0)
+ [204]=>
+ int(0)
+ [205]=>
+ int(0)
+ [206]=>
+ int(0)
+ [207]=>
+ int(0)
+ [208]=>
+ int(0)
+ [209]=>
+ int(0)
+ [210]=>
+ int(0)
+ [211]=>
+ int(0)
+ [212]=>
+ int(0)
+ [213]=>
+ int(0)
+ [214]=>
+ int(0)
+ [215]=>
+ int(0)
+ [216]=>
+ int(0)
+ [217]=>
+ int(0)
+ [218]=>
+ int(0)
+ [219]=>
+ int(0)
+ [220]=>
+ int(0)
+ [221]=>
+ int(0)
+ [222]=>
+ int(0)
+ [223]=>
+ int(0)
+ [224]=>
+ int(0)
+ [225]=>
+ int(0)
+ [226]=>
+ int(0)
+ [227]=>
+ int(0)
+ [228]=>
+ int(0)
+ [229]=>
+ int(0)
+ [230]=>
+ int(0)
+ [231]=>
+ int(0)
+ [232]=>
+ int(0)
+ [233]=>
+ int(0)
+ [234]=>
+ int(0)
+ [235]=>
+ int(0)
+ [236]=>
+ int(0)
+ [237]=>
+ int(0)
+ [238]=>
+ int(0)
+ [239]=>
+ int(0)
+ [240]=>
+ int(0)
+ [241]=>
+ int(0)
+ [242]=>
+ int(0)
+ [243]=>
+ int(0)
+ [244]=>
+ int(0)
+ [245]=>
+ int(0)
+ [246]=>
+ int(0)
+ [247]=>
+ int(0)
+ [248]=>
+ int(0)
+ [249]=>
+ int(0)
+ [250]=>
+ int(0)
+ [251]=>
+ int(0)
+ [252]=>
+ int(0)
+ [253]=>
+ int(0)
+ [254]=>
+ int(0)
+ [255]=>
+ int(1)
+ [256]=>
+ int(0)
+ [257]=>
+ int(65280)
+ [258]=>
+ int(32512)
+ [259]=>
+ int(49152)
+ [260]=>
+ int(0)
+ [261]=>
+ int(0)
+ [262]=>
+ int(0)
+ [263]=>
+ int(0)
+ [264]=>
+ int(0)
+ [265]=>
+ int(0)
+ [266]=>
+ int(0)
+ [267]=>
+ int(0)
+ [268]=>
+ int(0)
+ [269]=>
+ int(0)
+ [270]=>
+ int(0)
+ [271]=>
+ int(0)
+ [272]=>
+ int(11945)
+ [273]=>
+ int(1914)
+ [274]=>
+ int(0)
+ [275]=>
+ int(24609)
+ [276]=>
+ int(1088)
+ [277]=>
+ int(960)
+ [278]=>
+ int(0)
+ [279]=>
+ int(0)
+ [280]=>
+ int(20000)
+ [281]=>
+ int(8414)
+ [282]=>
+ int(65436)
+ [283]=>
+ int(0)
+ [284]=>
+ int(47655)
+ [285]=>
+ int(8)
+ [286]=>
+ int(37936)
+ [287]=>
+ int(8406)
+ [288]=>
+ int(0)
+ [289]=>
+ int(0)
+ [290]=>
+ int(0)
+ [291]=>
+ int(0)
+ [292]=>
+ int(0)
+ [293]=>
+ int(0)
+ [294]=>
+ int(0)
+ [295]=>
+ int(0)
+ [296]=>
+ int(0)
+ [297]=>
+ int(64652)
+ [298]=>
+ int(50264)
+ [299]=>
+ int(0)
+ [300]=>
+ int(0)
+ [301]=>
+ int(64887)
+ [302]=>
+ int(50264)
+ [303]=>
+ int(0)
+ [304]=>
+ int(25714)
+ [305]=>
+ int(26220)
+ [306]=>
+ int(17235)
+ [307]=>
+ int(19777)
+ [308]=>
+ int(65535)
+ [309]=>
+ int(65535)
+ [310]=>
+ int(65535)
+ [311]=>
+ int(65535)
+ [312]=>
+ int(65535)
+ [313]=>
+ int(65535)
+ [314]=>
+ int(65535)
+ [315]=>
+ int(65535)
+ [316]=>
+ int(501)
+ [317]=>
+ int(0)
+ [318]=>
+ int(20)
+ [319]=>
+ int(0)
+ [320]=>
+ int(0)
+ [321]=>
+ int(0)
+ [322]=>
+ int(16877)
+ [323]=>
+ int(0)
+ [324]=>
+ int(3)
+ [325]=>
+ int(0)
+ [326]=>
+ int(0)
+ [327]=>
+ int(0)
+ [328]=>
+ int(0)
+ [329]=>
+ int(0)
+ [330]=>
+ int(0)
+ [331]=>
+ int(0)
+ [332]=>
+ int(65535)
+ [333]=>
+ int(65535)
+ [334]=>
+ int(65535)
+ [335]=>
+ int(65535)
+ [336]=>
+ int(65535)
+ [337]=>
+ int(65535)
+ [338]=>
+ int(65535)
+ [339]=>
+ int(65535)
+ [340]=>
+ int(0)
+ [341]=>
+ int(0)
+ [342]=>
+ int(52840)
+ [343]=>
+ int(2025)
+ [344]=>
+ int(16)
+ [345]=>
+ int(57377)
+ [346]=>
+ int(1024)
+ [347]=>
+ int(960)
+ [348]=>
+ int(0)
+ [349]=>
+ int(0)
+ [350]=>
+ int(27136)
+ [351]=>
+ int(8414)
+ [352]=>
+ int(65436)
+ [353]=>
+ int(0)
+ [354]=>
+ int(47655)
+ [355]=>
+ int(8)
+ [356]=>
+ int(62400)
+ [357]=>
+ int(8407)
+ [358]=>
+ int(0)
+ [359]=>
+ int(0)
+ [360]=>
+ int(0)
+ [361]=>
+ int(0)
+ [362]=>
+ int(0)
+ [363]=>
+ int(0)
+ [364]=>
+ int(0)
+ [365]=>
+ int(0)
+ [366]=>
+ int(0)
+ [367]=>
+ int(64857)
+ [368]=>
+ int(50264)
+ [369]=>
+ int(0)
+ [370]=>
+ int(0)
+ [371]=>
+ int(64892)
+ [372]=>
+ int(50264)
+ [373]=>
+ int(0)
+ [374]=>
+ int(25714)
+ [375]=>
+ int(26220)
+ [376]=>
+ int(17235)
+ [377]=>
+ int(19777)
+ [378]=>
+ int(65535)
+ [379]=>
+ int(65535)
+ [380]=>
+ int(65535)
+ [381]=>
+ int(65535)
+ [382]=>
+ int(65535)
+ [383]=>
+ int(65535)
+ [384]=>
+ int(65535)
+ [385]=>
+ int(65535)
+ [386]=>
+ int(501)
+ [387]=>
+ int(0)
+ [388]=>
+ int(20)
+ [389]=>
+ int(0)
+ [390]=>
+ int(0)
+ [391]=>
+ int(0)
+ [392]=>
+ int(16877)
+ [393]=>
+ int(0)
+ [394]=>
+ int(3)
+ [395]=>
+ int(0)
+ [396]=>
+ int(0)
+ [397]=>
+ int(0)
+ [398]=>
+ int(0)
+ [399]=>
+ int(0)
+ [400]=>
+ int(0)
+ [401]=>
+ int(0)
+ [402]=>
+ int(65535)
+ [403]=>
+ int(65535)
+ [404]=>
+ int(65535)
+ [405]=>
+ int(65535)
+ [406]=>
+ int(65535)
+ [407]=>
+ int(65535)
+ [408]=>
+ int(65535)
+ [409]=>
+ int(65535)
+ [410]=>
+ int(0)
+ [411]=>
+ int(0)
+ [412]=>
+ int(53440)
+ [413]=>
+ int(2025)
+ [414]=>
+ int(16)
+ [415]=>
+ int(57377)
+ [416]=>
+ int(1024)
+ [417]=>
+ int(960)
+ [418]=>
+ int(0)
+ [419]=>
+ int(0)
+ [420]=>
+ int(41120)
+ [421]=>
+ int(9024)
+ [422]=>
+ int(65436)
+ [423]=>
+ int(0)
+ [424]=>
+ int(47655)
+ [425]=>
+ int(8)
+ [426]=>
+ int(24480)
+ [427]=>
+ int(8404)
+ [428]=>
+ int(0)
+ [429]=>
+ int(0)
+ [430]=>
+ int(0)
+ [431]=>
+ int(0)
+ [432]=>
+ int(0)
+ [433]=>
+ int(0)
+ [434]=>
+ int(0)
+ [435]=>
+ int(0)
+ [436]=>
+ int(0)
+ [437]=>
+ int(21315)
+ [438]=>
+ int(50294)
+ [439]=>
+ int(0)
+ [440]=>
+ int(0)
+ [441]=>
+ int(53635)
+ [442]=>
+ int(50294)
+ [443]=>
+ int(0)
+ [444]=>
+ int(25714)
+ [445]=>
+ int(26220)
+ [446]=>
+ int(17235)
+ [447]=>
+ int(19777)
+ [448]=>
+ int(65535)
+ [449]=>
+ int(65535)
+ [450]=>
+ int(65535)
+ [451]=>
+ int(65535)
+ [452]=>
+ int(65535)
+ [453]=>
+ int(65535)
+ [454]=>
+ int(65535)
+ [455]=>
+ int(65535)
+ [456]=>
+ int(501)
+ [457]=>
+ int(0)
+ [458]=>
+ int(20)
+ [459]=>
+ int(0)
+ [460]=>
+ int(0)
+ [461]=>
+ int(0)
+ [462]=>
+ int(16877)
+ [463]=>
+ int(0)
+ [464]=>
+ int(3)
+ [465]=>
+ int(0)
+ [466]=>
+ int(0)
+ [467]=>
+ int(0)
+ [468]=>
+ int(0)
+ [469]=>
+ int(0)
+ [470]=>
+ int(0)
+ [471]=>
+ int(0)
+ [472]=>
+ int(65535)
+ [473]=>
+ int(65535)
+ [474]=>
+ int(65535)
+ [475]=>
+ int(65535)
+ [476]=>
+ int(65535)
+ [477]=>
+ int(65535)
+ [478]=>
+ int(65535)
+ [479]=>
+ int(65535)
+ [480]=>
+ int(0)
+ [481]=>
+ int(0)
+ [482]=>
+ int(54028)
+ [483]=>
+ int(2772)
+ [484]=>
+ int(16)
+ [485]=>
+ int(57377)
+ [486]=>
+ int(1024)
+ [487]=>
+ int(960)
+ [488]=>
+ int(0)
+ [489]=>
+ int(0)
+ [490]=>
+ int(42384)
+ [491]=>
+ int(8408)
+ [492]=>
+ int(65436)
+ [493]=>
+ int(0)
+ [494]=>
+ int(47655)
+ [495]=>
+ int(8)
+ [496]=>
+ int(1136)
+ [497]=>
+ int(8348)
+ [498]=>
+ int(0)
+ [499]=>
+ int(0)
+ [500]=>
+ int(0)
+ [501]=>
+ int(0)
+ [502]=>
+ int(0)
+ [503]=>
+ int(0)
+ [504]=>
+ int(0)
+ [505]=>
+ int(0)
+ [506]=>
+ int(0)
+ [507]=>
+ int(12326)
+ [508]=>
+ int(50261)
+ [509]=>
+ int(0)
+ [510]=>
+ int(0)
+ [511]=>
+ int(12326)
+ [512]=>
+ int(0)
+ [513]=>
+ int(65280)
+ [514]=>
+ int(32512)
+ [515]=>
+ int(49152)
+ [516]=>
+ int(0)
+ [517]=>
+ int(0)
+ [518]=>
+ int(22663)
+ [519]=>
+ int(2)
+ [520]=>
+ int(0)
+ [521]=>
+ int(0)
+ [522]=>
+ int(24576)
+ [523]=>
+ int(2)
+ [524]=>
+ int(0)
+ [525]=>
+ int(0)
+ [526]=>
+ int(501)
+ [527]=>
+ int(0)
+ [528]=>
+ int(20)
+ [529]=>
+ int(0)
+ [530]=>
+ int(0)
+ [531]=>
+ int(0)
+ [532]=>
+ int(33188)
+ [533]=>
+ int(0)
+ [534]=>
+ int(0)
+ [535]=>
+ int(0)
+ [536]=>
+ int(0)
+ [537]=>
+ int(0)
+ [538]=>
+ int(0)
+ [539]=>
+ int(0)
+ [540]=>
+ int(0)
+ [541]=>
+ int(0)
+ [542]=>
+ int(0)
+ [543]=>
+ int(0)
+ [544]=>
+ int(0)
+ [545]=>
+ int(0)
+ [546]=>
+ int(0)
+ [547]=>
+ int(0)
+ [548]=>
+ int(0)
+ [549]=>
+ int(0)
+ [550]=>
+ int(0)
+ [551]=>
+ int(0)
+ [552]=>
+ int(51766)
+ [553]=>
+ int(1946)
+ [554]=>
+ int(0)
+ [555]=>
+ int(24609)
+ [556]=>
+ int(1088)
+ [557]=>
+ int(960)
+ [558]=>
+ int(0)
+ [559]=>
+ int(0)
+ [560]=>
+ int(0)
+ [561]=>
+ int(0)
+ [562]=>
+ int(25116)
+ [563]=>
+ int(2012)
+ [564]=>
+ int(0)
+ [565]=>
+ int(0)
+ [566]=>
+ int(0)
+ [567]=>
+ int(0)
+ [568]=>
+ int(0)
+ [569]=>
+ int(0)
+ [570]=>
+ int(0)
+ [571]=>
+ int(0)
+ [572]=>
+ int(0)
+ [573]=>
+ int(0)
+ [574]=>
+ int(0)
+ [575]=>
+ int(0)
+ [576]=>
+ int(0)
+ [577]=>
+ int(0)
+ [578]=>
+ int(0)
+ [579]=>
+ int(0)
+ [580]=>
+ int(0)
+ [581]=>
+ int(0)
+ [582]=>
+ int(0)
+ [583]=>
+ int(0)
+ [584]=>
+ int(0)
+ [585]=>
+ int(0)
+ [586]=>
+ int(0)
+ [587]=>
+ int(0)
+ [588]=>
+ int(0)
+ [589]=>
+ int(0)
+ [590]=>
+ int(0)
+ [591]=>
+ int(0)
+ [592]=>
+ int(0)
+ [593]=>
+ int(0)
+ [594]=>
+ int(0)
+ [595]=>
+ int(0)
+ [596]=>
+ int(0)
+ [597]=>
+ int(0)
+ [598]=>
+ int(0)
+ [599]=>
+ int(0)
+ [600]=>
+ int(0)
+ [601]=>
+ int(0)
+ [602]=>
+ int(0)
+ [603]=>
+ int(0)
+ [604]=>
+ int(0)
+ [605]=>
+ int(0)
+ [606]=>
+ int(0)
+ [607]=>
+ int(0)
+ [608]=>
+ int(0)
+ [609]=>
+ int(0)
+ [610]=>
+ int(0)
+ [611]=>
+ int(0)
+ [612]=>
+ int(0)
+ [613]=>
+ int(0)
+ [614]=>
+ int(0)
+ [615]=>
+ int(0)
+ [616]=>
+ int(0)
+ [617]=>
+ int(0)
+ [618]=>
+ int(0)
+ [619]=>
+ int(0)
+ [620]=>
+ int(0)
+ [621]=>
+ int(0)
+ [622]=>
+ int(0)
+ [623]=>
+ int(0)
+ [624]=>
+ int(0)
+ [625]=>
+ int(0)
+ [626]=>
+ int(0)
+ [627]=>
+ int(0)
+ [628]=>
+ int(0)
+ [629]=>
+ int(0)
+ [630]=>
+ int(0)
+ [631]=>
+ int(0)
+ [632]=>
+ int(0)
+ [633]=>
+ int(0)
+ [634]=>
+ int(0)
+ [635]=>
+ int(0)
+ [636]=>
+ int(0)
+ [637]=>
+ int(0)
+ [638]=>
+ int(0)
+ [639]=>
+ int(0)
+ [640]=>
+ int(0)
+ [641]=>
+ int(0)
+ [642]=>
+ int(0)
+ [643]=>
+ int(0)
+ [644]=>
+ int(0)
+ [645]=>
+ int(0)
+ [646]=>
+ int(0)
+ [647]=>
+ int(0)
+ [648]=>
+ int(0)
+ [649]=>
+ int(0)
+ [650]=>
+ int(0)
+ [651]=>
+ int(0)
+ [652]=>
+ int(0)
+ [653]=>
+ int(0)
+ [654]=>
+ int(0)
+ [655]=>
+ int(0)
+ [656]=>
+ int(0)
+ [657]=>
+ int(0)
+ [658]=>
+ int(0)
+ [659]=>
+ int(0)
+ [660]=>
+ int(0)
+ [661]=>
+ int(0)
+ [662]=>
+ int(0)
+ [663]=>
+ int(0)
+ [664]=>
+ int(0)
+ [665]=>
+ int(0)
+ [666]=>
+ int(0)
+ [667]=>
+ int(0)
+ [668]=>
+ int(0)
+ [669]=>
+ int(0)
+ [670]=>
+ int(0)
+ [671]=>
+ int(0)
+ [672]=>
+ int(0)
+ [673]=>
+ int(0)
+ [674]=>
+ int(0)
+ [675]=>
+ int(0)
+ [676]=>
+ int(0)
+ [677]=>
+ int(0)
+ [678]=>
+ int(0)
+ [679]=>
+ int(0)
+ [680]=>
+ int(0)
+ [681]=>
+ int(0)
+ [682]=>
+ int(0)
+ [683]=>
+ int(0)
+ [684]=>
+ int(0)
+ [685]=>
+ int(0)
+ [686]=>
+ int(0)
+ [687]=>
+ int(0)
+ [688]=>
+ int(0)
+ [689]=>
+ int(0)
+ [690]=>
+ int(0)
+ [691]=>
+ int(0)
+ [692]=>
+ int(0)
+ [693]=>
+ int(0)
+ [694]=>
+ int(0)
+ [695]=>
+ int(0)
+ [696]=>
+ int(0)
+ [697]=>
+ int(0)
+ [698]=>
+ int(0)
+ [699]=>
+ int(0)
+ [700]=>
+ int(0)
+ [701]=>
+ int(0)
+ [702]=>
+ int(0)
+ [703]=>
+ int(0)
+ [704]=>
+ int(0)
+ [705]=>
+ int(0)
+ [706]=>
+ int(0)
+ [707]=>
+ int(0)
+ [708]=>
+ int(0)
+ [709]=>
+ int(0)
+ [710]=>
+ int(0)
+ [711]=>
+ int(0)
+ [712]=>
+ int(0)
+ [713]=>
+ int(0)
+ [714]=>
+ int(0)
+ [715]=>
+ int(0)
+ [716]=>
+ int(0)
+ [717]=>
+ int(0)
+ [718]=>
+ int(0)
+ [719]=>
+ int(0)
+ [720]=>
+ int(0)
+ [721]=>
+ int(0)
+ [722]=>
+ int(0)
+ [723]=>
+ int(0)
+ [724]=>
+ int(0)
+ [725]=>
+ int(0)
+ [726]=>
+ int(0)
+ [727]=>
+ int(0)
+ [728]=>
+ int(0)
+ [729]=>
+ int(0)
+ [730]=>
+ int(0)
+ [731]=>
+ int(0)
+ [732]=>
+ int(0)
+ [733]=>
+ int(0)
+ [734]=>
+ int(0)
+ [735]=>
+ int(0)
+ [736]=>
+ int(0)
+ [737]=>
+ int(0)
+ [738]=>
+ int(0)
+ [739]=>
+ int(0)
+ [740]=>
+ int(0)
+ [741]=>
+ int(0)
+ [742]=>
+ int(0)
+ [743]=>
+ int(0)
+ [744]=>
+ int(0)
+ [745]=>
+ int(0)
+ [746]=>
+ int(0)
+ [747]=>
+ int(0)
+ [748]=>
+ int(0)
+ [749]=>
+ int(0)
+ [750]=>
+ int(0)
+ [751]=>
+ int(0)
+ [752]=>
+ int(0)
+ [753]=>
+ int(0)
+ [754]=>
+ int(0)
+ [755]=>
+ int(0)
+ [756]=>
+ int(0)
+ [757]=>
+ int(0)
+ [758]=>
+ int(0)
+ [759]=>
+ int(0)
+ [760]=>
+ int(0)
+ [761]=>
+ int(0)
+ [762]=>
+ int(0)
+ [763]=>
+ int(0)
+ [764]=>
+ int(0)
+ [765]=>
+ int(0)
+ [766]=>
+ int(0)
+ [767]=>
+ int(0)
+ }
+ ["Copyright"]=>
+ string(12) "Eric Stewart"
+ ["GPSVersion"]=>
+ string(4) "
+ ["GPSLatitudeRef"]=>
+ string(1) "N"
+ ["GPSLatitude"]=>
+ array(3) {
+ [0]=>
+ string(4) "33/1"
+ [1]=>
+ string(4) "37/1"
+ [2]=>
+ string(3) "0/1"
+ }
+ ["GPSLongitudeRef"]=>
+ string(1) "W"
+ ["GPSLongitude"]=>
+ array(3) {
+ [0]=>
+ string(4) "84/1"
+ [1]=>
+ string(3) "7/1"
+ [2]=>
+ string(3) "0/1"
+ }
+ ["GPSAltitudeRef"]=>
+ string(1) "
+ ["GPSAltitude"]=>
+ string(5) "295/1"
+ ["GPSTimeStamp"]=>
+ array(3) {
+ [0]=>
+ string(3) "1/1"
+ [1]=>
+ string(4) "47/1"
+ [2]=>
+ string(4) "53/1"
+ }
+}
+--CREDIT--
+Eric Stewart <ericleestewart@gmail.com>
diff --git a/ext/exif/tests/exif021.phpt b/ext/exif/tests/exif021.phpt
new file mode 100644
index 000000000..2cf446b00
--- /dev/null
+++ b/ext/exif/tests/exif021.phpt
@@ -0,0 +1,1659 @@
+--TEST--
+Check for exif_read_data, TIFF with IFD and GPS data in Motorola byte-order.
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--INI--
+output_handler=
+zlib.output_compression=0
+--FILE--
+<?php
+var_dump(exif_read_data(dirname(__FILE__).'/image021.tiff'));
+?>
+--EXPECTF--
+array(34) {
+ ["FileName"]=>
+ string(13) "image021.tiff"
+ ["FileDateTime"]=>
+ int(%d)
+ ["FileSize"]=>
+ int(%d)
+ ["FileType"]=>
+ int(8)
+ ["MimeType"]=>
+ string(10) "image/tiff"
+ ["SectionsFound"]=>
+ string(18) "ANY_TAG, IFD0, GPS"
+ ["COMPUTED"]=>
+ array(8) {
+ ["html"]=>
+ string(20) "width="1" height="1""
+ ["Height"]=>
+ int(1)
+ ["Width"]=>
+ int(1)
+ ["IsColor"]=>
+ int(1)
+ ["ByteOrderMotorola"]=>
+ int(1)
+ ["Copyright"]=>
+ string(24) "Eric Stewart, Hex Editor"
+ ["Copyright.Photographer"]=>
+ string(12) "Eric Stewart"
+ ["Copyright.Editor"]=>
+ string(10) "Hex Editor"
+ }
+ ["ImageWidth"]=>
+ int(1)
+ ["ImageLength"]=>
+ int(1)
+ ["BitsPerSample"]=>
+ int(8)
+ ["Compression"]=>
+ int(5)
+ ["PhotometricInterpretation"]=>
+ int(3)
+ ["ImageDescription"]=>
+ string(15) "My description."
+ ["Make"]=>
+ string(11) "OpenShutter"
+ ["Model"]=>
+ string(8) "OS 1.0.0"
+ ["StripOffsets"]=>
+ int(2064)
+ ["SamplesPerPixel"]=>
+ int(1)
+ ["RowsPerStrip"]=>
+ int(8)
+ ["StripByteCounts"]=>
+ int(4)
+ ["XResolution"]=>
+ string(17) "381681664/2097152"
+ ["YResolution"]=>
+ string(17) "381681664/2097152"
+ ["PlanarConfiguration"]=>
+ int(1)
+ ["ResolutionUnit"]=>
+ int(2)
+ ["Artist"]=>
+ string(12) "Eric Stewart"
+ ["ColorMap"]=>
+ array(768) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(65280)
+ [2]=>
+ int(32512)
+ [3]=>
+ int(49152)
+ [4]=>
+ int(99)
+ [5]=>
+ int(115)
+ [6]=>
+ int(116)
+ [7]=>
+ int(101)
+ [8]=>
+ int(119)
+ [9]=>
+ int(97)
+ [10]=>
+ int(114)
+ [11]=>
+ int(116)
+ [12]=>
+ int(0)
+ [13]=>
+ int(0)
+ [14]=>
+ int(0)
+ [15]=>
+ int(0)
+ [16]=>
+ int(0)
+ [17]=>
+ int(0)
+ [18]=>
+ int(0)
+ [19]=>
+ int(0)
+ [20]=>
+ int(0)
+ [21]=>
+ int(0)
+ [22]=>
+ int(0)
+ [23]=>
+ int(0)
+ [24]=>
+ int(0)
+ [25]=>
+ int(0)
+ [26]=>
+ int(0)
+ [27]=>
+ int(0)
+ [28]=>
+ int(0)
+ [29]=>
+ int(0)
+ [30]=>
+ int(0)
+ [31]=>
+ int(0)
+ [32]=>
+ int(0)
+ [33]=>
+ int(0)
+ [34]=>
+ int(0)
+ [35]=>
+ int(0)
+ [36]=>
+ int(0)
+ [37]=>
+ int(0)
+ [38]=>
+ int(0)
+ [39]=>
+ int(0)
+ [40]=>
+ int(0)
+ [41]=>
+ int(0)
+ [42]=>
+ int(0)
+ [43]=>
+ int(0)
+ [44]=>
+ int(0)
+ [45]=>
+ int(0)
+ [46]=>
+ int(0)
+ [47]=>
+ int(0)
+ [48]=>
+ int(0)
+ [49]=>
+ int(0)
+ [50]=>
+ int(0)
+ [51]=>
+ int(0)
+ [52]=>
+ int(0)
+ [53]=>
+ int(0)
+ [54]=>
+ int(0)
+ [55]=>
+ int(0)
+ [56]=>
+ int(0)
+ [57]=>
+ int(0)
+ [58]=>
+ int(0)
+ [59]=>
+ int(0)
+ [60]=>
+ int(0)
+ [61]=>
+ int(0)
+ [62]=>
+ int(0)
+ [63]=>
+ int(0)
+ [64]=>
+ int(0)
+ [65]=>
+ int(0)
+ [66]=>
+ int(0)
+ [67]=>
+ int(0)
+ [68]=>
+ int(0)
+ [69]=>
+ int(0)
+ [70]=>
+ int(0)
+ [71]=>
+ int(0)
+ [72]=>
+ int(0)
+ [73]=>
+ int(0)
+ [74]=>
+ int(0)
+ [75]=>
+ int(0)
+ [76]=>
+ int(0)
+ [77]=>
+ int(0)
+ [78]=>
+ int(0)
+ [79]=>
+ int(0)
+ [80]=>
+ int(0)
+ [81]=>
+ int(0)
+ [82]=>
+ int(0)
+ [83]=>
+ int(0)
+ [84]=>
+ int(0)
+ [85]=>
+ int(0)
+ [86]=>
+ int(0)
+ [87]=>
+ int(0)
+ [88]=>
+ int(0)
+ [89]=>
+ int(0)
+ [90]=>
+ int(0)
+ [91]=>
+ int(0)
+ [92]=>
+ int(0)
+ [93]=>
+ int(0)
+ [94]=>
+ int(0)
+ [95]=>
+ int(0)
+ [96]=>
+ int(0)
+ [97]=>
+ int(0)
+ [98]=>
+ int(0)
+ [99]=>
+ int(0)
+ [100]=>
+ int(0)
+ [101]=>
+ int(0)
+ [102]=>
+ int(0)
+ [103]=>
+ int(0)
+ [104]=>
+ int(0)
+ [105]=>
+ int(0)
+ [106]=>
+ int(0)
+ [107]=>
+ int(0)
+ [108]=>
+ int(0)
+ [109]=>
+ int(0)
+ [110]=>
+ int(0)
+ [111]=>
+ int(0)
+ [112]=>
+ int(0)
+ [113]=>
+ int(0)
+ [114]=>
+ int(0)
+ [115]=>
+ int(0)
+ [116]=>
+ int(0)
+ [117]=>
+ int(0)
+ [118]=>
+ int(0)
+ [119]=>
+ int(0)
+ [120]=>
+ int(0)
+ [121]=>
+ int(0)
+ [122]=>
+ int(0)
+ [123]=>
+ int(0)
+ [124]=>
+ int(0)
+ [125]=>
+ int(0)
+ [126]=>
+ int(0)
+ [127]=>
+ int(0)
+ [128]=>
+ int(0)
+ [129]=>
+ int(0)
+ [130]=>
+ int(0)
+ [131]=>
+ int(0)
+ [132]=>
+ int(0)
+ [133]=>
+ int(0)
+ [134]=>
+ int(0)
+ [135]=>
+ int(0)
+ [136]=>
+ int(0)
+ [137]=>
+ int(0)
+ [138]=>
+ int(0)
+ [139]=>
+ int(0)
+ [140]=>
+ int(0)
+ [141]=>
+ int(0)
+ [142]=>
+ int(0)
+ [143]=>
+ int(0)
+ [144]=>
+ int(0)
+ [145]=>
+ int(0)
+ [146]=>
+ int(0)
+ [147]=>
+ int(0)
+ [148]=>
+ int(0)
+ [149]=>
+ int(0)
+ [150]=>
+ int(0)
+ [151]=>
+ int(0)
+ [152]=>
+ int(0)
+ [153]=>
+ int(0)
+ [154]=>
+ int(0)
+ [155]=>
+ int(0)
+ [156]=>
+ int(0)
+ [157]=>
+ int(0)
+ [158]=>
+ int(0)
+ [159]=>
+ int(0)
+ [160]=>
+ int(0)
+ [161]=>
+ int(0)
+ [162]=>
+ int(0)
+ [163]=>
+ int(0)
+ [164]=>
+ int(0)
+ [165]=>
+ int(0)
+ [166]=>
+ int(0)
+ [167]=>
+ int(0)
+ [168]=>
+ int(0)
+ [169]=>
+ int(0)
+ [170]=>
+ int(0)
+ [171]=>
+ int(0)
+ [172]=>
+ int(0)
+ [173]=>
+ int(0)
+ [174]=>
+ int(0)
+ [175]=>
+ int(0)
+ [176]=>
+ int(0)
+ [177]=>
+ int(0)
+ [178]=>
+ int(0)
+ [179]=>
+ int(0)
+ [180]=>
+ int(0)
+ [181]=>
+ int(0)
+ [182]=>
+ int(0)
+ [183]=>
+ int(0)
+ [184]=>
+ int(0)
+ [185]=>
+ int(0)
+ [186]=>
+ int(0)
+ [187]=>
+ int(0)
+ [188]=>
+ int(0)
+ [189]=>
+ int(0)
+ [190]=>
+ int(0)
+ [191]=>
+ int(0)
+ [192]=>
+ int(0)
+ [193]=>
+ int(0)
+ [194]=>
+ int(0)
+ [195]=>
+ int(0)
+ [196]=>
+ int(0)
+ [197]=>
+ int(0)
+ [198]=>
+ int(0)
+ [199]=>
+ int(0)
+ [200]=>
+ int(0)
+ [201]=>
+ int(0)
+ [202]=>
+ int(0)
+ [203]=>
+ int(0)
+ [204]=>
+ int(0)
+ [205]=>
+ int(0)
+ [206]=>
+ int(0)
+ [207]=>
+ int(0)
+ [208]=>
+ int(0)
+ [209]=>
+ int(0)
+ [210]=>
+ int(0)
+ [211]=>
+ int(0)
+ [212]=>
+ int(0)
+ [213]=>
+ int(0)
+ [214]=>
+ int(0)
+ [215]=>
+ int(0)
+ [216]=>
+ int(0)
+ [217]=>
+ int(0)
+ [218]=>
+ int(0)
+ [219]=>
+ int(0)
+ [220]=>
+ int(0)
+ [221]=>
+ int(0)
+ [222]=>
+ int(0)
+ [223]=>
+ int(0)
+ [224]=>
+ int(0)
+ [225]=>
+ int(0)
+ [226]=>
+ int(0)
+ [227]=>
+ int(0)
+ [228]=>
+ int(0)
+ [229]=>
+ int(0)
+ [230]=>
+ int(0)
+ [231]=>
+ int(0)
+ [232]=>
+ int(0)
+ [233]=>
+ int(0)
+ [234]=>
+ int(0)
+ [235]=>
+ int(0)
+ [236]=>
+ int(0)
+ [237]=>
+ int(0)
+ [238]=>
+ int(0)
+ [239]=>
+ int(0)
+ [240]=>
+ int(0)
+ [241]=>
+ int(0)
+ [242]=>
+ int(0)
+ [243]=>
+ int(0)
+ [244]=>
+ int(0)
+ [245]=>
+ int(0)
+ [246]=>
+ int(0)
+ [247]=>
+ int(0)
+ [248]=>
+ int(0)
+ [249]=>
+ int(0)
+ [250]=>
+ int(0)
+ [251]=>
+ int(0)
+ [252]=>
+ int(0)
+ [253]=>
+ int(0)
+ [254]=>
+ int(0)
+ [255]=>
+ int(1)
+ [256]=>
+ int(0)
+ [257]=>
+ int(65280)
+ [258]=>
+ int(32512)
+ [259]=>
+ int(49152)
+ [260]=>
+ int(0)
+ [261]=>
+ int(0)
+ [262]=>
+ int(0)
+ [263]=>
+ int(0)
+ [264]=>
+ int(0)
+ [265]=>
+ int(0)
+ [266]=>
+ int(0)
+ [267]=>
+ int(0)
+ [268]=>
+ int(0)
+ [269]=>
+ int(0)
+ [270]=>
+ int(0)
+ [271]=>
+ int(0)
+ [272]=>
+ int(11945)
+ [273]=>
+ int(1914)
+ [274]=>
+ int(0)
+ [275]=>
+ int(24609)
+ [276]=>
+ int(1088)
+ [277]=>
+ int(960)
+ [278]=>
+ int(0)
+ [279]=>
+ int(0)
+ [280]=>
+ int(20000)
+ [281]=>
+ int(8414)
+ [282]=>
+ int(65436)
+ [283]=>
+ int(0)
+ [284]=>
+ int(47655)
+ [285]=>
+ int(8)
+ [286]=>
+ int(37936)
+ [287]=>
+ int(8406)
+ [288]=>
+ int(0)
+ [289]=>
+ int(0)
+ [290]=>
+ int(0)
+ [291]=>
+ int(0)
+ [292]=>
+ int(0)
+ [293]=>
+ int(0)
+ [294]=>
+ int(0)
+ [295]=>
+ int(0)
+ [296]=>
+ int(0)
+ [297]=>
+ int(64652)
+ [298]=>
+ int(50264)
+ [299]=>
+ int(0)
+ [300]=>
+ int(0)
+ [301]=>
+ int(64887)
+ [302]=>
+ int(50264)
+ [303]=>
+ int(0)
+ [304]=>
+ int(25714)
+ [305]=>
+ int(26220)
+ [306]=>
+ int(17235)
+ [307]=>
+ int(19777)
+ [308]=>
+ int(65535)
+ [309]=>
+ int(65535)
+ [310]=>
+ int(65535)
+ [311]=>
+ int(65535)
+ [312]=>
+ int(65535)
+ [313]=>
+ int(65535)
+ [314]=>
+ int(65535)
+ [315]=>
+ int(65535)
+ [316]=>
+ int(501)
+ [317]=>
+ int(0)
+ [318]=>
+ int(20)
+ [319]=>
+ int(0)
+ [320]=>
+ int(0)
+ [321]=>
+ int(0)
+ [322]=>
+ int(16877)
+ [323]=>
+ int(0)
+ [324]=>
+ int(3)
+ [325]=>
+ int(0)
+ [326]=>
+ int(0)
+ [327]=>
+ int(0)
+ [328]=>
+ int(0)
+ [329]=>
+ int(0)
+ [330]=>
+ int(0)
+ [331]=>
+ int(0)
+ [332]=>
+ int(65535)
+ [333]=>
+ int(65535)
+ [334]=>
+ int(65535)
+ [335]=>
+ int(65535)
+ [336]=>
+ int(65535)
+ [337]=>
+ int(65535)
+ [338]=>
+ int(65535)
+ [339]=>
+ int(65535)
+ [340]=>
+ int(0)
+ [341]=>
+ int(0)
+ [342]=>
+ int(52840)
+ [343]=>
+ int(2025)
+ [344]=>
+ int(16)
+ [345]=>
+ int(57377)
+ [346]=>
+ int(1024)
+ [347]=>
+ int(960)
+ [348]=>
+ int(0)
+ [349]=>
+ int(0)
+ [350]=>
+ int(27136)
+ [351]=>
+ int(8414)
+ [352]=>
+ int(65436)
+ [353]=>
+ int(0)
+ [354]=>
+ int(47655)
+ [355]=>
+ int(8)
+ [356]=>
+ int(62400)
+ [357]=>
+ int(8407)
+ [358]=>
+ int(0)
+ [359]=>
+ int(0)
+ [360]=>
+ int(0)
+ [361]=>
+ int(0)
+ [362]=>
+ int(0)
+ [363]=>
+ int(0)
+ [364]=>
+ int(0)
+ [365]=>
+ int(0)
+ [366]=>
+ int(0)
+ [367]=>
+ int(64857)
+ [368]=>
+ int(50264)
+ [369]=>
+ int(0)
+ [370]=>
+ int(0)
+ [371]=>
+ int(64892)
+ [372]=>
+ int(50264)
+ [373]=>
+ int(0)
+ [374]=>
+ int(25714)
+ [375]=>
+ int(26220)
+ [376]=>
+ int(17235)
+ [377]=>
+ int(19777)
+ [378]=>
+ int(65535)
+ [379]=>
+ int(65535)
+ [380]=>
+ int(65535)
+ [381]=>
+ int(65535)
+ [382]=>
+ int(65535)
+ [383]=>
+ int(65535)
+ [384]=>
+ int(65535)
+ [385]=>
+ int(65535)
+ [386]=>
+ int(501)
+ [387]=>
+ int(0)
+ [388]=>
+ int(20)
+ [389]=>
+ int(0)
+ [390]=>
+ int(0)
+ [391]=>
+ int(0)
+ [392]=>
+ int(16877)
+ [393]=>
+ int(0)
+ [394]=>
+ int(3)
+ [395]=>
+ int(0)
+ [396]=>
+ int(0)
+ [397]=>
+ int(0)
+ [398]=>
+ int(0)
+ [399]=>
+ int(0)
+ [400]=>
+ int(0)
+ [401]=>
+ int(0)
+ [402]=>
+ int(65535)
+ [403]=>
+ int(65535)
+ [404]=>
+ int(65535)
+ [405]=>
+ int(65535)
+ [406]=>
+ int(65535)
+ [407]=>
+ int(65535)
+ [408]=>
+ int(65535)
+ [409]=>
+ int(65535)
+ [410]=>
+ int(0)
+ [411]=>
+ int(0)
+ [412]=>
+ int(53440)
+ [413]=>
+ int(2025)
+ [414]=>
+ int(16)
+ [415]=>
+ int(57377)
+ [416]=>
+ int(1024)
+ [417]=>
+ int(960)
+ [418]=>
+ int(0)
+ [419]=>
+ int(0)
+ [420]=>
+ int(41120)
+ [421]=>
+ int(9024)
+ [422]=>
+ int(65436)
+ [423]=>
+ int(0)
+ [424]=>
+ int(47655)
+ [425]=>
+ int(8)
+ [426]=>
+ int(24480)
+ [427]=>
+ int(8404)
+ [428]=>
+ int(0)
+ [429]=>
+ int(0)
+ [430]=>
+ int(0)
+ [431]=>
+ int(0)
+ [432]=>
+ int(0)
+ [433]=>
+ int(0)
+ [434]=>
+ int(0)
+ [435]=>
+ int(0)
+ [436]=>
+ int(0)
+ [437]=>
+ int(21315)
+ [438]=>
+ int(50294)
+ [439]=>
+ int(0)
+ [440]=>
+ int(0)
+ [441]=>
+ int(53635)
+ [442]=>
+ int(50294)
+ [443]=>
+ int(0)
+ [444]=>
+ int(25714)
+ [445]=>
+ int(26220)
+ [446]=>
+ int(17235)
+ [447]=>
+ int(19777)
+ [448]=>
+ int(65535)
+ [449]=>
+ int(65535)
+ [450]=>
+ int(65535)
+ [451]=>
+ int(65535)
+ [452]=>
+ int(65535)
+ [453]=>
+ int(65535)
+ [454]=>
+ int(65535)
+ [455]=>
+ int(65535)
+ [456]=>
+ int(501)
+ [457]=>
+ int(0)
+ [458]=>
+ int(20)
+ [459]=>
+ int(0)
+ [460]=>
+ int(0)
+ [461]=>
+ int(0)
+ [462]=>
+ int(16877)
+ [463]=>
+ int(0)
+ [464]=>
+ int(3)
+ [465]=>
+ int(0)
+ [466]=>
+ int(0)
+ [467]=>
+ int(0)
+ [468]=>
+ int(0)
+ [469]=>
+ int(0)
+ [470]=>
+ int(0)
+ [471]=>
+ int(0)
+ [472]=>
+ int(65535)
+ [473]=>
+ int(65535)
+ [474]=>
+ int(65535)
+ [475]=>
+ int(65535)
+ [476]=>
+ int(65535)
+ [477]=>
+ int(65535)
+ [478]=>
+ int(65535)
+ [479]=>
+ int(65535)
+ [480]=>
+ int(0)
+ [481]=>
+ int(0)
+ [482]=>
+ int(54028)
+ [483]=>
+ int(2772)
+ [484]=>
+ int(16)
+ [485]=>
+ int(57377)
+ [486]=>
+ int(1024)
+ [487]=>
+ int(960)
+ [488]=>
+ int(0)
+ [489]=>
+ int(0)
+ [490]=>
+ int(42384)
+ [491]=>
+ int(8408)
+ [492]=>
+ int(65436)
+ [493]=>
+ int(0)
+ [494]=>
+ int(47655)
+ [495]=>
+ int(8)
+ [496]=>
+ int(1136)
+ [497]=>
+ int(8348)
+ [498]=>
+ int(0)
+ [499]=>
+ int(0)
+ [500]=>
+ int(0)
+ [501]=>
+ int(0)
+ [502]=>
+ int(0)
+ [503]=>
+ int(0)
+ [504]=>
+ int(0)
+ [505]=>
+ int(0)
+ [506]=>
+ int(0)
+ [507]=>
+ int(12326)
+ [508]=>
+ int(50261)
+ [509]=>
+ int(0)
+ [510]=>
+ int(0)
+ [511]=>
+ int(12326)
+ [512]=>
+ int(0)
+ [513]=>
+ int(65280)
+ [514]=>
+ int(32512)
+ [515]=>
+ int(49152)
+ [516]=>
+ int(0)
+ [517]=>
+ int(0)
+ [518]=>
+ int(22663)
+ [519]=>
+ int(2)
+ [520]=>
+ int(0)
+ [521]=>
+ int(0)
+ [522]=>
+ int(24576)
+ [523]=>
+ int(2)
+ [524]=>
+ int(0)
+ [525]=>
+ int(0)
+ [526]=>
+ int(501)
+ [527]=>
+ int(0)
+ [528]=>
+ int(20)
+ [529]=>
+ int(0)
+ [530]=>
+ int(0)
+ [531]=>
+ int(0)
+ [532]=>
+ int(33188)
+ [533]=>
+ int(0)
+ [534]=>
+ int(0)
+ [535]=>
+ int(0)
+ [536]=>
+ int(0)
+ [537]=>
+ int(0)
+ [538]=>
+ int(0)
+ [539]=>
+ int(0)
+ [540]=>
+ int(0)
+ [541]=>
+ int(0)
+ [542]=>
+ int(0)
+ [543]=>
+ int(0)
+ [544]=>
+ int(0)
+ [545]=>
+ int(0)
+ [546]=>
+ int(0)
+ [547]=>
+ int(0)
+ [548]=>
+ int(0)
+ [549]=>
+ int(0)
+ [550]=>
+ int(0)
+ [551]=>
+ int(0)
+ [552]=>
+ int(51766)
+ [553]=>
+ int(1946)
+ [554]=>
+ int(0)
+ [555]=>
+ int(24609)
+ [556]=>
+ int(1088)
+ [557]=>
+ int(960)
+ [558]=>
+ int(0)
+ [559]=>
+ int(0)
+ [560]=>
+ int(0)
+ [561]=>
+ int(0)
+ [562]=>
+ int(25116)
+ [563]=>
+ int(2012)
+ [564]=>
+ int(0)
+ [565]=>
+ int(0)
+ [566]=>
+ int(0)
+ [567]=>
+ int(0)
+ [568]=>
+ int(0)
+ [569]=>
+ int(0)
+ [570]=>
+ int(0)
+ [571]=>
+ int(0)
+ [572]=>
+ int(0)
+ [573]=>
+ int(0)
+ [574]=>
+ int(0)
+ [575]=>
+ int(0)
+ [576]=>
+ int(0)
+ [577]=>
+ int(0)
+ [578]=>
+ int(0)
+ [579]=>
+ int(0)
+ [580]=>
+ int(0)
+ [581]=>
+ int(0)
+ [582]=>
+ int(0)
+ [583]=>
+ int(0)
+ [584]=>
+ int(0)
+ [585]=>
+ int(0)
+ [586]=>
+ int(0)
+ [587]=>
+ int(0)
+ [588]=>
+ int(0)
+ [589]=>
+ int(0)
+ [590]=>
+ int(0)
+ [591]=>
+ int(0)
+ [592]=>
+ int(0)
+ [593]=>
+ int(0)
+ [594]=>
+ int(0)
+ [595]=>
+ int(0)
+ [596]=>
+ int(0)
+ [597]=>
+ int(0)
+ [598]=>
+ int(0)
+ [599]=>
+ int(0)
+ [600]=>
+ int(0)
+ [601]=>
+ int(0)
+ [602]=>
+ int(0)
+ [603]=>
+ int(0)
+ [604]=>
+ int(0)
+ [605]=>
+ int(0)
+ [606]=>
+ int(0)
+ [607]=>
+ int(0)
+ [608]=>
+ int(0)
+ [609]=>
+ int(0)
+ [610]=>
+ int(0)
+ [611]=>
+ int(0)
+ [612]=>
+ int(0)
+ [613]=>
+ int(0)
+ [614]=>
+ int(0)
+ [615]=>
+ int(0)
+ [616]=>
+ int(0)
+ [617]=>
+ int(0)
+ [618]=>
+ int(0)
+ [619]=>
+ int(0)
+ [620]=>
+ int(0)
+ [621]=>
+ int(0)
+ [622]=>
+ int(0)
+ [623]=>
+ int(0)
+ [624]=>
+ int(0)
+ [625]=>
+ int(0)
+ [626]=>
+ int(0)
+ [627]=>
+ int(0)
+ [628]=>
+ int(0)
+ [629]=>
+ int(0)
+ [630]=>
+ int(0)
+ [631]=>
+ int(0)
+ [632]=>
+ int(0)
+ [633]=>
+ int(0)
+ [634]=>
+ int(0)
+ [635]=>
+ int(0)
+ [636]=>
+ int(0)
+ [637]=>
+ int(0)
+ [638]=>
+ int(0)
+ [639]=>
+ int(0)
+ [640]=>
+ int(0)
+ [641]=>
+ int(0)
+ [642]=>
+ int(0)
+ [643]=>
+ int(0)
+ [644]=>
+ int(0)
+ [645]=>
+ int(0)
+ [646]=>
+ int(0)
+ [647]=>
+ int(0)
+ [648]=>
+ int(0)
+ [649]=>
+ int(0)
+ [650]=>
+ int(0)
+ [651]=>
+ int(0)
+ [652]=>
+ int(0)
+ [653]=>
+ int(0)
+ [654]=>
+ int(0)
+ [655]=>
+ int(0)
+ [656]=>
+ int(0)
+ [657]=>
+ int(0)
+ [658]=>
+ int(0)
+ [659]=>
+ int(0)
+ [660]=>
+ int(0)
+ [661]=>
+ int(0)
+ [662]=>
+ int(0)
+ [663]=>
+ int(0)
+ [664]=>
+ int(0)
+ [665]=>
+ int(0)
+ [666]=>
+ int(0)
+ [667]=>
+ int(0)
+ [668]=>
+ int(0)
+ [669]=>
+ int(0)
+ [670]=>
+ int(0)
+ [671]=>
+ int(0)
+ [672]=>
+ int(0)
+ [673]=>
+ int(0)
+ [674]=>
+ int(0)
+ [675]=>
+ int(0)
+ [676]=>
+ int(0)
+ [677]=>
+ int(0)
+ [678]=>
+ int(0)
+ [679]=>
+ int(0)
+ [680]=>
+ int(0)
+ [681]=>
+ int(0)
+ [682]=>
+ int(0)
+ [683]=>
+ int(0)
+ [684]=>
+ int(0)
+ [685]=>
+ int(0)
+ [686]=>
+ int(0)
+ [687]=>
+ int(0)
+ [688]=>
+ int(0)
+ [689]=>
+ int(0)
+ [690]=>
+ int(0)
+ [691]=>
+ int(0)
+ [692]=>
+ int(0)
+ [693]=>
+ int(0)
+ [694]=>
+ int(0)
+ [695]=>
+ int(0)
+ [696]=>
+ int(0)
+ [697]=>
+ int(0)
+ [698]=>
+ int(0)
+ [699]=>
+ int(0)
+ [700]=>
+ int(0)
+ [701]=>
+ int(0)
+ [702]=>
+ int(0)
+ [703]=>
+ int(0)
+ [704]=>
+ int(0)
+ [705]=>
+ int(0)
+ [706]=>
+ int(0)
+ [707]=>
+ int(0)
+ [708]=>
+ int(0)
+ [709]=>
+ int(0)
+ [710]=>
+ int(0)
+ [711]=>
+ int(0)
+ [712]=>
+ int(0)
+ [713]=>
+ int(0)
+ [714]=>
+ int(0)
+ [715]=>
+ int(0)
+ [716]=>
+ int(0)
+ [717]=>
+ int(0)
+ [718]=>
+ int(0)
+ [719]=>
+ int(0)
+ [720]=>
+ int(0)
+ [721]=>
+ int(0)
+ [722]=>
+ int(0)
+ [723]=>
+ int(0)
+ [724]=>
+ int(0)
+ [725]=>
+ int(0)
+ [726]=>
+ int(0)
+ [727]=>
+ int(0)
+ [728]=>
+ int(0)
+ [729]=>
+ int(0)
+ [730]=>
+ int(0)
+ [731]=>
+ int(0)
+ [732]=>
+ int(0)
+ [733]=>
+ int(0)
+ [734]=>
+ int(0)
+ [735]=>
+ int(0)
+ [736]=>
+ int(0)
+ [737]=>
+ int(0)
+ [738]=>
+ int(0)
+ [739]=>
+ int(0)
+ [740]=>
+ int(0)
+ [741]=>
+ int(0)
+ [742]=>
+ int(0)
+ [743]=>
+ int(0)
+ [744]=>
+ int(0)
+ [745]=>
+ int(0)
+ [746]=>
+ int(0)
+ [747]=>
+ int(0)
+ [748]=>
+ int(0)
+ [749]=>
+ int(0)
+ [750]=>
+ int(0)
+ [751]=>
+ int(0)
+ [752]=>
+ int(0)
+ [753]=>
+ int(0)
+ [754]=>
+ int(0)
+ [755]=>
+ int(0)
+ [756]=>
+ int(0)
+ [757]=>
+ int(0)
+ [758]=>
+ int(0)
+ [759]=>
+ int(0)
+ [760]=>
+ int(0)
+ [761]=>
+ int(0)
+ [762]=>
+ int(0)
+ [763]=>
+ int(0)
+ [764]=>
+ int(0)
+ [765]=>
+ int(0)
+ [766]=>
+ int(0)
+ [767]=>
+ int(0)
+ }
+ ["Copyright"]=>
+ string(12) "Eric Stewart"
+ ["GPSVersion"]=>
+ string(4) "
+ ["GPSLatitudeRef"]=>
+ string(1) "N"
+ ["GPSLatitude"]=>
+ array(3) {
+ [0]=>
+ string(4) "33/1"
+ [1]=>
+ string(4) "37/1"
+ [2]=>
+ string(3) "0/1"
+ }
+ ["GPSLongitudeRef"]=>
+ string(1) "W"
+ ["GPSLongitude"]=>
+ array(3) {
+ [0]=>
+ string(4) "84/1"
+ [1]=>
+ string(3) "7/1"
+ [2]=>
+ string(3) "0/1"
+ }
+ ["GPSAltitudeRef"]=>
+ string(1) "
+ ["GPSAltitude"]=>
+ string(5) "295/1"
+ ["GPSTimeStamp"]=>
+ array(3) {
+ [0]=>
+ string(3) "1/1"
+ [1]=>
+ string(4) "47/1"
+ [2]=>
+ string(4) "53/1"
+ }
+}
+--CREDIT--
+Eric Stewart <ericleestewart@gmail.com>
diff --git a/ext/exif/tests/exif022.phpt b/ext/exif/tests/exif022.phpt
new file mode 100644
index 000000000..f523d88bc
--- /dev/null
+++ b/ext/exif/tests/exif022.phpt
@@ -0,0 +1,1683 @@
+--TEST--
+Check for exif_read_data, TIFF with IFD, EXIF and GPS data in Intel byte-order.
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--INI--
+output_handler=
+zlib.output_compression=0
+--FILE--
+<?php
+var_dump(exif_read_data(dirname(__FILE__).'/image022.tiff'));
+?>
+--EXPECTF--
+array(45) {
+ ["FileName"]=>
+ string(13) "image022.tiff"
+ ["FileDateTime"]=>
+ int(%d)
+ ["FileSize"]=>
+ int(%d)
+ ["FileType"]=>
+ int(7)
+ ["MimeType"]=>
+ string(10) "image/tiff"
+ ["SectionsFound"]=>
+ string(24) "ANY_TAG, IFD0, EXIF, GPS"
+ ["COMPUTED"]=>
+ array(9) {
+ ["html"]=>
+ string(20) "width="1" height="1""
+ ["Height"]=>
+ int(1)
+ ["Width"]=>
+ int(1)
+ ["IsColor"]=>
+ int(1)
+ ["ByteOrderMotorola"]=>
+ int(0)
+ ["ApertureFNumber"]=>
+ string(5) "f/8.0"
+ ["Copyright"]=>
+ string(24) "Eric Stewart, Hex Editor"
+ ["Copyright.Photographer"]=>
+ string(12) "Eric Stewart"
+ ["Copyright.Editor"]=>
+ string(10) "Hex Editor"
+ }
+ ["ImageWidth"]=>
+ int(1)
+ ["ImageLength"]=>
+ int(1)
+ ["BitsPerSample"]=>
+ int(8)
+ ["Compression"]=>
+ int(5)
+ ["PhotometricInterpretation"]=>
+ int(3)
+ ["ImageDescription"]=>
+ string(15) "My description."
+ ["Make"]=>
+ string(11) "OpenShutter"
+ ["Model"]=>
+ string(8) "OS 1.0.0"
+ ["StripOffsets"]=>
+ int(2278)
+ ["SamplesPerPixel"]=>
+ int(1)
+ ["RowsPerStrip"]=>
+ int(8)
+ ["StripByteCounts"]=>
+ int(4)
+ ["XResolution"]=>
+ string(17) "381681664/2097152"
+ ["YResolution"]=>
+ string(17) "381681664/2097152"
+ ["PlanarConfiguration"]=>
+ int(1)
+ ["ResolutionUnit"]=>
+ int(2)
+ ["Artist"]=>
+ string(12) "Eric Stewart"
+ ["ColorMap"]=>
+ array(768) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(65280)
+ [2]=>
+ int(32512)
+ [3]=>
+ int(49152)
+ [4]=>
+ int(99)
+ [5]=>
+ int(115)
+ [6]=>
+ int(116)
+ [7]=>
+ int(101)
+ [8]=>
+ int(119)
+ [9]=>
+ int(97)
+ [10]=>
+ int(114)
+ [11]=>
+ int(116)
+ [12]=>
+ int(0)
+ [13]=>
+ int(0)
+ [14]=>
+ int(0)
+ [15]=>
+ int(0)
+ [16]=>
+ int(0)
+ [17]=>
+ int(0)
+ [18]=>
+ int(0)
+ [19]=>
+ int(0)
+ [20]=>
+ int(0)
+ [21]=>
+ int(0)
+ [22]=>
+ int(0)
+ [23]=>
+ int(0)
+ [24]=>
+ int(0)
+ [25]=>
+ int(0)
+ [26]=>
+ int(0)
+ [27]=>
+ int(0)
+ [28]=>
+ int(0)
+ [29]=>
+ int(0)
+ [30]=>
+ int(0)
+ [31]=>
+ int(0)
+ [32]=>
+ int(0)
+ [33]=>
+ int(0)
+ [34]=>
+ int(0)
+ [35]=>
+ int(0)
+ [36]=>
+ int(0)
+ [37]=>
+ int(0)
+ [38]=>
+ int(0)
+ [39]=>
+ int(0)
+ [40]=>
+ int(0)
+ [41]=>
+ int(0)
+ [42]=>
+ int(0)
+ [43]=>
+ int(0)
+ [44]=>
+ int(0)
+ [45]=>
+ int(0)
+ [46]=>
+ int(0)
+ [47]=>
+ int(0)
+ [48]=>
+ int(0)
+ [49]=>
+ int(0)
+ [50]=>
+ int(0)
+ [51]=>
+ int(0)
+ [52]=>
+ int(0)
+ [53]=>
+ int(0)
+ [54]=>
+ int(0)
+ [55]=>
+ int(0)
+ [56]=>
+ int(0)
+ [57]=>
+ int(0)
+ [58]=>
+ int(0)
+ [59]=>
+ int(0)
+ [60]=>
+ int(0)
+ [61]=>
+ int(0)
+ [62]=>
+ int(0)
+ [63]=>
+ int(0)
+ [64]=>
+ int(0)
+ [65]=>
+ int(0)
+ [66]=>
+ int(0)
+ [67]=>
+ int(0)
+ [68]=>
+ int(0)
+ [69]=>
+ int(0)
+ [70]=>
+ int(0)
+ [71]=>
+ int(0)
+ [72]=>
+ int(0)
+ [73]=>
+ int(0)
+ [74]=>
+ int(0)
+ [75]=>
+ int(0)
+ [76]=>
+ int(0)
+ [77]=>
+ int(0)
+ [78]=>
+ int(0)
+ [79]=>
+ int(0)
+ [80]=>
+ int(0)
+ [81]=>
+ int(0)
+ [82]=>
+ int(0)
+ [83]=>
+ int(0)
+ [84]=>
+ int(0)
+ [85]=>
+ int(0)
+ [86]=>
+ int(0)
+ [87]=>
+ int(0)
+ [88]=>
+ int(0)
+ [89]=>
+ int(0)
+ [90]=>
+ int(0)
+ [91]=>
+ int(0)
+ [92]=>
+ int(0)
+ [93]=>
+ int(0)
+ [94]=>
+ int(0)
+ [95]=>
+ int(0)
+ [96]=>
+ int(0)
+ [97]=>
+ int(0)
+ [98]=>
+ int(0)
+ [99]=>
+ int(0)
+ [100]=>
+ int(0)
+ [101]=>
+ int(0)
+ [102]=>
+ int(0)
+ [103]=>
+ int(0)
+ [104]=>
+ int(0)
+ [105]=>
+ int(0)
+ [106]=>
+ int(0)
+ [107]=>
+ int(0)
+ [108]=>
+ int(0)
+ [109]=>
+ int(0)
+ [110]=>
+ int(0)
+ [111]=>
+ int(0)
+ [112]=>
+ int(0)
+ [113]=>
+ int(0)
+ [114]=>
+ int(0)
+ [115]=>
+ int(0)
+ [116]=>
+ int(0)
+ [117]=>
+ int(0)
+ [118]=>
+ int(0)
+ [119]=>
+ int(0)
+ [120]=>
+ int(0)
+ [121]=>
+ int(0)
+ [122]=>
+ int(0)
+ [123]=>
+ int(0)
+ [124]=>
+ int(0)
+ [125]=>
+ int(0)
+ [126]=>
+ int(0)
+ [127]=>
+ int(0)
+ [128]=>
+ int(0)
+ [129]=>
+ int(0)
+ [130]=>
+ int(0)
+ [131]=>
+ int(0)
+ [132]=>
+ int(0)
+ [133]=>
+ int(0)
+ [134]=>
+ int(0)
+ [135]=>
+ int(0)
+ [136]=>
+ int(0)
+ [137]=>
+ int(0)
+ [138]=>
+ int(0)
+ [139]=>
+ int(0)
+ [140]=>
+ int(0)
+ [141]=>
+ int(0)
+ [142]=>
+ int(0)
+ [143]=>
+ int(0)
+ [144]=>
+ int(0)
+ [145]=>
+ int(0)
+ [146]=>
+ int(0)
+ [147]=>
+ int(0)
+ [148]=>
+ int(0)
+ [149]=>
+ int(0)
+ [150]=>
+ int(0)
+ [151]=>
+ int(0)
+ [152]=>
+ int(0)
+ [153]=>
+ int(0)
+ [154]=>
+ int(0)
+ [155]=>
+ int(0)
+ [156]=>
+ int(0)
+ [157]=>
+ int(0)
+ [158]=>
+ int(0)
+ [159]=>
+ int(0)
+ [160]=>
+ int(0)
+ [161]=>
+ int(0)
+ [162]=>
+ int(0)
+ [163]=>
+ int(0)
+ [164]=>
+ int(0)
+ [165]=>
+ int(0)
+ [166]=>
+ int(0)
+ [167]=>
+ int(0)
+ [168]=>
+ int(0)
+ [169]=>
+ int(0)
+ [170]=>
+ int(0)
+ [171]=>
+ int(0)
+ [172]=>
+ int(0)
+ [173]=>
+ int(0)
+ [174]=>
+ int(0)
+ [175]=>
+ int(0)
+ [176]=>
+ int(0)
+ [177]=>
+ int(0)
+ [178]=>
+ int(0)
+ [179]=>
+ int(0)
+ [180]=>
+ int(0)
+ [181]=>
+ int(0)
+ [182]=>
+ int(0)
+ [183]=>
+ int(0)
+ [184]=>
+ int(0)
+ [185]=>
+ int(0)
+ [186]=>
+ int(0)
+ [187]=>
+ int(0)
+ [188]=>
+ int(0)
+ [189]=>
+ int(0)
+ [190]=>
+ int(0)
+ [191]=>
+ int(0)
+ [192]=>
+ int(0)
+ [193]=>
+ int(0)
+ [194]=>
+ int(0)
+ [195]=>
+ int(0)
+ [196]=>
+ int(0)
+ [197]=>
+ int(0)
+ [198]=>
+ int(0)
+ [199]=>
+ int(0)
+ [200]=>
+ int(0)
+ [201]=>
+ int(0)
+ [202]=>
+ int(0)
+ [203]=>
+ int(0)
+ [204]=>
+ int(0)
+ [205]=>
+ int(0)
+ [206]=>
+ int(0)
+ [207]=>
+ int(0)
+ [208]=>
+ int(0)
+ [209]=>
+ int(0)
+ [210]=>
+ int(0)
+ [211]=>
+ int(0)
+ [212]=>
+ int(0)
+ [213]=>
+ int(0)
+ [214]=>
+ int(0)
+ [215]=>
+ int(0)
+ [216]=>
+ int(0)
+ [217]=>
+ int(0)
+ [218]=>
+ int(0)
+ [219]=>
+ int(0)
+ [220]=>
+ int(0)
+ [221]=>
+ int(0)
+ [222]=>
+ int(0)
+ [223]=>
+ int(0)
+ [224]=>
+ int(0)
+ [225]=>
+ int(0)
+ [226]=>
+ int(0)
+ [227]=>
+ int(0)
+ [228]=>
+ int(0)
+ [229]=>
+ int(0)
+ [230]=>
+ int(0)
+ [231]=>
+ int(0)
+ [232]=>
+ int(0)
+ [233]=>
+ int(0)
+ [234]=>
+ int(0)
+ [235]=>
+ int(0)
+ [236]=>
+ int(0)
+ [237]=>
+ int(0)
+ [238]=>
+ int(0)
+ [239]=>
+ int(0)
+ [240]=>
+ int(0)
+ [241]=>
+ int(0)
+ [242]=>
+ int(0)
+ [243]=>
+ int(0)
+ [244]=>
+ int(0)
+ [245]=>
+ int(0)
+ [246]=>
+ int(0)
+ [247]=>
+ int(0)
+ [248]=>
+ int(0)
+ [249]=>
+ int(0)
+ [250]=>
+ int(0)
+ [251]=>
+ int(0)
+ [252]=>
+ int(0)
+ [253]=>
+ int(0)
+ [254]=>
+ int(0)
+ [255]=>
+ int(1)
+ [256]=>
+ int(0)
+ [257]=>
+ int(65280)
+ [258]=>
+ int(32512)
+ [259]=>
+ int(49152)
+ [260]=>
+ int(0)
+ [261]=>
+ int(0)
+ [262]=>
+ int(0)
+ [263]=>
+ int(0)
+ [264]=>
+ int(0)
+ [265]=>
+ int(0)
+ [266]=>
+ int(0)
+ [267]=>
+ int(0)
+ [268]=>
+ int(0)
+ [269]=>
+ int(0)
+ [270]=>
+ int(0)
+ [271]=>
+ int(0)
+ [272]=>
+ int(11945)
+ [273]=>
+ int(1914)
+ [274]=>
+ int(0)
+ [275]=>
+ int(24609)
+ [276]=>
+ int(1088)
+ [277]=>
+ int(960)
+ [278]=>
+ int(0)
+ [279]=>
+ int(0)
+ [280]=>
+ int(20000)
+ [281]=>
+ int(8414)
+ [282]=>
+ int(65436)
+ [283]=>
+ int(0)
+ [284]=>
+ int(47655)
+ [285]=>
+ int(8)
+ [286]=>
+ int(37936)
+ [287]=>
+ int(8406)
+ [288]=>
+ int(0)
+ [289]=>
+ int(0)
+ [290]=>
+ int(0)
+ [291]=>
+ int(0)
+ [292]=>
+ int(0)
+ [293]=>
+ int(0)
+ [294]=>
+ int(0)
+ [295]=>
+ int(0)
+ [296]=>
+ int(0)
+ [297]=>
+ int(64652)
+ [298]=>
+ int(50264)
+ [299]=>
+ int(0)
+ [300]=>
+ int(0)
+ [301]=>
+ int(64887)
+ [302]=>
+ int(50264)
+ [303]=>
+ int(0)
+ [304]=>
+ int(25714)
+ [305]=>
+ int(26220)
+ [306]=>
+ int(17235)
+ [307]=>
+ int(19777)
+ [308]=>
+ int(65535)
+ [309]=>
+ int(65535)
+ [310]=>
+ int(65535)
+ [311]=>
+ int(65535)
+ [312]=>
+ int(65535)
+ [313]=>
+ int(65535)
+ [314]=>
+ int(65535)
+ [315]=>
+ int(65535)
+ [316]=>
+ int(501)
+ [317]=>
+ int(0)
+ [318]=>
+ int(20)
+ [319]=>
+ int(0)
+ [320]=>
+ int(0)
+ [321]=>
+ int(0)
+ [322]=>
+ int(16877)
+ [323]=>
+ int(0)
+ [324]=>
+ int(3)
+ [325]=>
+ int(0)
+ [326]=>
+ int(0)
+ [327]=>
+ int(0)
+ [328]=>
+ int(0)
+ [329]=>
+ int(0)
+ [330]=>
+ int(0)
+ [331]=>
+ int(0)
+ [332]=>
+ int(65535)
+ [333]=>
+ int(65535)
+ [334]=>
+ int(65535)
+ [335]=>
+ int(65535)
+ [336]=>
+ int(65535)
+ [337]=>
+ int(65535)
+ [338]=>
+ int(65535)
+ [339]=>
+ int(65535)
+ [340]=>
+ int(0)
+ [341]=>
+ int(0)
+ [342]=>
+ int(52840)
+ [343]=>
+ int(2025)
+ [344]=>
+ int(16)
+ [345]=>
+ int(57377)
+ [346]=>
+ int(1024)
+ [347]=>
+ int(960)
+ [348]=>
+ int(0)
+ [349]=>
+ int(0)
+ [350]=>
+ int(27136)
+ [351]=>
+ int(8414)
+ [352]=>
+ int(65436)
+ [353]=>
+ int(0)
+ [354]=>
+ int(47655)
+ [355]=>
+ int(8)
+ [356]=>
+ int(62400)
+ [357]=>
+ int(8407)
+ [358]=>
+ int(0)
+ [359]=>
+ int(0)
+ [360]=>
+ int(0)
+ [361]=>
+ int(0)
+ [362]=>
+ int(0)
+ [363]=>
+ int(0)
+ [364]=>
+ int(0)
+ [365]=>
+ int(0)
+ [366]=>
+ int(0)
+ [367]=>
+ int(64857)
+ [368]=>
+ int(50264)
+ [369]=>
+ int(0)
+ [370]=>
+ int(0)
+ [371]=>
+ int(64892)
+ [372]=>
+ int(50264)
+ [373]=>
+ int(0)
+ [374]=>
+ int(25714)
+ [375]=>
+ int(26220)
+ [376]=>
+ int(17235)
+ [377]=>
+ int(19777)
+ [378]=>
+ int(65535)
+ [379]=>
+ int(65535)
+ [380]=>
+ int(65535)
+ [381]=>
+ int(65535)
+ [382]=>
+ int(65535)
+ [383]=>
+ int(65535)
+ [384]=>
+ int(65535)
+ [385]=>
+ int(65535)
+ [386]=>
+ int(501)
+ [387]=>
+ int(0)
+ [388]=>
+ int(20)
+ [389]=>
+ int(0)
+ [390]=>
+ int(0)
+ [391]=>
+ int(0)
+ [392]=>
+ int(16877)
+ [393]=>
+ int(0)
+ [394]=>
+ int(3)
+ [395]=>
+ int(0)
+ [396]=>
+ int(0)
+ [397]=>
+ int(0)
+ [398]=>
+ int(0)
+ [399]=>
+ int(0)
+ [400]=>
+ int(0)
+ [401]=>
+ int(0)
+ [402]=>
+ int(65535)
+ [403]=>
+ int(65535)
+ [404]=>
+ int(65535)
+ [405]=>
+ int(65535)
+ [406]=>
+ int(65535)
+ [407]=>
+ int(65535)
+ [408]=>
+ int(65535)
+ [409]=>
+ int(65535)
+ [410]=>
+ int(0)
+ [411]=>
+ int(0)
+ [412]=>
+ int(53440)
+ [413]=>
+ int(2025)
+ [414]=>
+ int(16)
+ [415]=>
+ int(57377)
+ [416]=>
+ int(1024)
+ [417]=>
+ int(960)
+ [418]=>
+ int(0)
+ [419]=>
+ int(0)
+ [420]=>
+ int(41120)
+ [421]=>
+ int(9024)
+ [422]=>
+ int(65436)
+ [423]=>
+ int(0)
+ [424]=>
+ int(47655)
+ [425]=>
+ int(8)
+ [426]=>
+ int(24480)
+ [427]=>
+ int(8404)
+ [428]=>
+ int(0)
+ [429]=>
+ int(0)
+ [430]=>
+ int(0)
+ [431]=>
+ int(0)
+ [432]=>
+ int(0)
+ [433]=>
+ int(0)
+ [434]=>
+ int(0)
+ [435]=>
+ int(0)
+ [436]=>
+ int(0)
+ [437]=>
+ int(21315)
+ [438]=>
+ int(50294)
+ [439]=>
+ int(0)
+ [440]=>
+ int(0)
+ [441]=>
+ int(53635)
+ [442]=>
+ int(50294)
+ [443]=>
+ int(0)
+ [444]=>
+ int(25714)
+ [445]=>
+ int(26220)
+ [446]=>
+ int(17235)
+ [447]=>
+ int(19777)
+ [448]=>
+ int(65535)
+ [449]=>
+ int(65535)
+ [450]=>
+ int(65535)
+ [451]=>
+ int(65535)
+ [452]=>
+ int(65535)
+ [453]=>
+ int(65535)
+ [454]=>
+ int(65535)
+ [455]=>
+ int(65535)
+ [456]=>
+ int(501)
+ [457]=>
+ int(0)
+ [458]=>
+ int(20)
+ [459]=>
+ int(0)
+ [460]=>
+ int(0)
+ [461]=>
+ int(0)
+ [462]=>
+ int(16877)
+ [463]=>
+ int(0)
+ [464]=>
+ int(3)
+ [465]=>
+ int(0)
+ [466]=>
+ int(0)
+ [467]=>
+ int(0)
+ [468]=>
+ int(0)
+ [469]=>
+ int(0)
+ [470]=>
+ int(0)
+ [471]=>
+ int(0)
+ [472]=>
+ int(65535)
+ [473]=>
+ int(65535)
+ [474]=>
+ int(65535)
+ [475]=>
+ int(65535)
+ [476]=>
+ int(65535)
+ [477]=>
+ int(65535)
+ [478]=>
+ int(65535)
+ [479]=>
+ int(65535)
+ [480]=>
+ int(0)
+ [481]=>
+ int(0)
+ [482]=>
+ int(54028)
+ [483]=>
+ int(2772)
+ [484]=>
+ int(16)
+ [485]=>
+ int(57377)
+ [486]=>
+ int(1024)
+ [487]=>
+ int(960)
+ [488]=>
+ int(0)
+ [489]=>
+ int(0)
+ [490]=>
+ int(42384)
+ [491]=>
+ int(8408)
+ [492]=>
+ int(65436)
+ [493]=>
+ int(0)
+ [494]=>
+ int(47655)
+ [495]=>
+ int(8)
+ [496]=>
+ int(1136)
+ [497]=>
+ int(8348)
+ [498]=>
+ int(0)
+ [499]=>
+ int(0)
+ [500]=>
+ int(0)
+ [501]=>
+ int(0)
+ [502]=>
+ int(0)
+ [503]=>
+ int(0)
+ [504]=>
+ int(0)
+ [505]=>
+ int(0)
+ [506]=>
+ int(0)
+ [507]=>
+ int(12326)
+ [508]=>
+ int(50261)
+ [509]=>
+ int(0)
+ [510]=>
+ int(0)
+ [511]=>
+ int(12326)
+ [512]=>
+ int(0)
+ [513]=>
+ int(65280)
+ [514]=>
+ int(32512)
+ [515]=>
+ int(49152)
+ [516]=>
+ int(0)
+ [517]=>
+ int(0)
+ [518]=>
+ int(22663)
+ [519]=>
+ int(2)
+ [520]=>
+ int(0)
+ [521]=>
+ int(0)
+ [522]=>
+ int(24576)
+ [523]=>
+ int(2)
+ [524]=>
+ int(0)
+ [525]=>
+ int(0)
+ [526]=>
+ int(501)
+ [527]=>
+ int(0)
+ [528]=>
+ int(20)
+ [529]=>
+ int(0)
+ [530]=>
+ int(0)
+ [531]=>
+ int(0)
+ [532]=>
+ int(33188)
+ [533]=>
+ int(0)
+ [534]=>
+ int(0)
+ [535]=>
+ int(0)
+ [536]=>
+ int(0)
+ [537]=>
+ int(0)
+ [538]=>
+ int(0)
+ [539]=>
+ int(0)
+ [540]=>
+ int(0)
+ [541]=>
+ int(0)
+ [542]=>
+ int(0)
+ [543]=>
+ int(0)
+ [544]=>
+ int(0)
+ [545]=>
+ int(0)
+ [546]=>
+ int(0)
+ [547]=>
+ int(0)
+ [548]=>
+ int(0)
+ [549]=>
+ int(0)
+ [550]=>
+ int(0)
+ [551]=>
+ int(0)
+ [552]=>
+ int(51766)
+ [553]=>
+ int(1946)
+ [554]=>
+ int(0)
+ [555]=>
+ int(24609)
+ [556]=>
+ int(1088)
+ [557]=>
+ int(960)
+ [558]=>
+ int(0)
+ [559]=>
+ int(0)
+ [560]=>
+ int(0)
+ [561]=>
+ int(0)
+ [562]=>
+ int(25116)
+ [563]=>
+ int(2012)
+ [564]=>
+ int(0)
+ [565]=>
+ int(0)
+ [566]=>
+ int(0)
+ [567]=>
+ int(0)
+ [568]=>
+ int(0)
+ [569]=>
+ int(0)
+ [570]=>
+ int(0)
+ [571]=>
+ int(0)
+ [572]=>
+ int(0)
+ [573]=>
+ int(0)
+ [574]=>
+ int(0)
+ [575]=>
+ int(0)
+ [576]=>
+ int(0)
+ [577]=>
+ int(0)
+ [578]=>
+ int(0)
+ [579]=>
+ int(0)
+ [580]=>
+ int(0)
+ [581]=>
+ int(0)
+ [582]=>
+ int(0)
+ [583]=>
+ int(0)
+ [584]=>
+ int(0)
+ [585]=>
+ int(0)
+ [586]=>
+ int(0)
+ [587]=>
+ int(0)
+ [588]=>
+ int(0)
+ [589]=>
+ int(0)
+ [590]=>
+ int(0)
+ [591]=>
+ int(0)
+ [592]=>
+ int(0)
+ [593]=>
+ int(0)
+ [594]=>
+ int(0)
+ [595]=>
+ int(0)
+ [596]=>
+ int(0)
+ [597]=>
+ int(0)
+ [598]=>
+ int(0)
+ [599]=>
+ int(0)
+ [600]=>
+ int(0)
+ [601]=>
+ int(0)
+ [602]=>
+ int(0)
+ [603]=>
+ int(0)
+ [604]=>
+ int(0)
+ [605]=>
+ int(0)
+ [606]=>
+ int(0)
+ [607]=>
+ int(0)
+ [608]=>
+ int(0)
+ [609]=>
+ int(0)
+ [610]=>
+ int(0)
+ [611]=>
+ int(0)
+ [612]=>
+ int(0)
+ [613]=>
+ int(0)
+ [614]=>
+ int(0)
+ [615]=>
+ int(0)
+ [616]=>
+ int(0)
+ [617]=>
+ int(0)
+ [618]=>
+ int(0)
+ [619]=>
+ int(0)
+ [620]=>
+ int(0)
+ [621]=>
+ int(0)
+ [622]=>
+ int(0)
+ [623]=>
+ int(0)
+ [624]=>
+ int(0)
+ [625]=>
+ int(0)
+ [626]=>
+ int(0)
+ [627]=>
+ int(0)
+ [628]=>
+ int(0)
+ [629]=>
+ int(0)
+ [630]=>
+ int(0)
+ [631]=>
+ int(0)
+ [632]=>
+ int(0)
+ [633]=>
+ int(0)
+ [634]=>
+ int(0)
+ [635]=>
+ int(0)
+ [636]=>
+ int(0)
+ [637]=>
+ int(0)
+ [638]=>
+ int(0)
+ [639]=>
+ int(0)
+ [640]=>
+ int(0)
+ [641]=>
+ int(0)
+ [642]=>
+ int(0)
+ [643]=>
+ int(0)
+ [644]=>
+ int(0)
+ [645]=>
+ int(0)
+ [646]=>
+ int(0)
+ [647]=>
+ int(0)
+ [648]=>
+ int(0)
+ [649]=>
+ int(0)
+ [650]=>
+ int(0)
+ [651]=>
+ int(0)
+ [652]=>
+ int(0)
+ [653]=>
+ int(0)
+ [654]=>
+ int(0)
+ [655]=>
+ int(0)
+ [656]=>
+ int(0)
+ [657]=>
+ int(0)
+ [658]=>
+ int(0)
+ [659]=>
+ int(0)
+ [660]=>
+ int(0)
+ [661]=>
+ int(0)
+ [662]=>
+ int(0)
+ [663]=>
+ int(0)
+ [664]=>
+ int(0)
+ [665]=>
+ int(0)
+ [666]=>
+ int(0)
+ [667]=>
+ int(0)
+ [668]=>
+ int(0)
+ [669]=>
+ int(0)
+ [670]=>
+ int(0)
+ [671]=>
+ int(0)
+ [672]=>
+ int(0)
+ [673]=>
+ int(0)
+ [674]=>
+ int(0)
+ [675]=>
+ int(0)
+ [676]=>
+ int(0)
+ [677]=>
+ int(0)
+ [678]=>
+ int(0)
+ [679]=>
+ int(0)
+ [680]=>
+ int(0)
+ [681]=>
+ int(0)
+ [682]=>
+ int(0)
+ [683]=>
+ int(0)
+ [684]=>
+ int(0)
+ [685]=>
+ int(0)
+ [686]=>
+ int(0)
+ [687]=>
+ int(0)
+ [688]=>
+ int(0)
+ [689]=>
+ int(0)
+ [690]=>
+ int(0)
+ [691]=>
+ int(0)
+ [692]=>
+ int(0)
+ [693]=>
+ int(0)
+ [694]=>
+ int(0)
+ [695]=>
+ int(0)
+ [696]=>
+ int(0)
+ [697]=>
+ int(0)
+ [698]=>
+ int(0)
+ [699]=>
+ int(0)
+ [700]=>
+ int(0)
+ [701]=>
+ int(0)
+ [702]=>
+ int(0)
+ [703]=>
+ int(0)
+ [704]=>
+ int(0)
+ [705]=>
+ int(0)
+ [706]=>
+ int(0)
+ [707]=>
+ int(0)
+ [708]=>
+ int(0)
+ [709]=>
+ int(0)
+ [710]=>
+ int(0)
+ [711]=>
+ int(0)
+ [712]=>
+ int(0)
+ [713]=>
+ int(0)
+ [714]=>
+ int(0)
+ [715]=>
+ int(0)
+ [716]=>
+ int(0)
+ [717]=>
+ int(0)
+ [718]=>
+ int(0)
+ [719]=>
+ int(0)
+ [720]=>
+ int(0)
+ [721]=>
+ int(0)
+ [722]=>
+ int(0)
+ [723]=>
+ int(0)
+ [724]=>
+ int(0)
+ [725]=>
+ int(0)
+ [726]=>
+ int(0)
+ [727]=>
+ int(0)
+ [728]=>
+ int(0)
+ [729]=>
+ int(0)
+ [730]=>
+ int(0)
+ [731]=>
+ int(0)
+ [732]=>
+ int(0)
+ [733]=>
+ int(0)
+ [734]=>
+ int(0)
+ [735]=>
+ int(0)
+ [736]=>
+ int(0)
+ [737]=>
+ int(0)
+ [738]=>
+ int(0)
+ [739]=>
+ int(0)
+ [740]=>
+ int(0)
+ [741]=>
+ int(0)
+ [742]=>
+ int(0)
+ [743]=>
+ int(0)
+ [744]=>
+ int(0)
+ [745]=>
+ int(0)
+ [746]=>
+ int(0)
+ [747]=>
+ int(0)
+ [748]=>
+ int(0)
+ [749]=>
+ int(0)
+ [750]=>
+ int(0)
+ [751]=>
+ int(0)
+ [752]=>
+ int(0)
+ [753]=>
+ int(0)
+ [754]=>
+ int(0)
+ [755]=>
+ int(0)
+ [756]=>
+ int(0)
+ [757]=>
+ int(0)
+ [758]=>
+ int(0)
+ [759]=>
+ int(0)
+ [760]=>
+ int(0)
+ [761]=>
+ int(0)
+ [762]=>
+ int(0)
+ [763]=>
+ int(0)
+ [764]=>
+ int(0)
+ [765]=>
+ int(0)
+ [766]=>
+ int(0)
+ [767]=>
+ int(0)
+ }
+ ["Copyright"]=>
+ string(12) "Eric Stewart"
+ ["ExposureTime"]=>
+ string(5) "1/125"
+ ["FNumber"]=>
+ string(3) "8/1"
+ ["ISOSpeedRatings"]=>
+ int(80)
+ ["DateTimeOriginal"]=>
+ string(19) "2008:06:19 01:47:53"
+ ["DateTimeDigitized"]=>
+ string(19) "2008:06:19 01:47:53"
+ ["MeteringMode"]=>
+ int(5)
+ ["LightSource"]=>
+ int(4)
+ ["Flash"]=>
+ int(7)
+ ["FocalLength"]=>
+ string(4) "29/5"
+ ["ExifImageWidth"]=>
+ int(1)
+ ["ExifImageLength"]=>
+ int(1)
+ ["GPSVersion"]=>
+ string(4) "
+ ["GPSLatitudeRef"]=>
+ string(1) "N"
+ ["GPSLatitude"]=>
+ array(3) {
+ [0]=>
+ string(4) "33/1"
+ [1]=>
+ string(4) "37/1"
+ [2]=>
+ string(3) "0/1"
+ }
+ ["GPSLongitudeRef"]=>
+ string(1) "W"
+ ["GPSLongitude"]=>
+ array(3) {
+ [0]=>
+ string(4) "84/1"
+ [1]=>
+ string(3) "7/1"
+ [2]=>
+ string(3) "0/1"
+ }
+ ["GPSAltitudeRef"]=>
+ string(1) "
+ ["GPSAltitude"]=>
+ string(5) "295/1"
+ ["GPSTimeStamp"]=>
+ array(3) {
+ [0]=>
+ string(3) "1/1"
+ [1]=>
+ string(4) "47/1"
+ [2]=>
+ string(4) "53/1"
+ }
+}
+--CREDIT--
+Eric Stewart <ericleestewart@gmail.com>
diff --git a/ext/exif/tests/exif023.phpt b/ext/exif/tests/exif023.phpt
new file mode 100644
index 000000000..5940d9714
--- /dev/null
+++ b/ext/exif/tests/exif023.phpt
@@ -0,0 +1,1683 @@
+--TEST--
+Check for exif_read_data, TIFF with IFD, EXIF and GPS data in Motorola byte-order.
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--INI--
+output_handler=
+zlib.output_compression=0
+--FILE--
+<?php
+var_dump(exif_read_data(dirname(__FILE__).'/image023.tiff'));
+?>
+--EXPECTF--
+array(45) {
+ ["FileName"]=>
+ string(13) "image023.tiff"
+ ["FileDateTime"]=>
+ int(%d)
+ ["FileSize"]=>
+ int(%d)
+ ["FileType"]=>
+ int(8)
+ ["MimeType"]=>
+ string(10) "image/tiff"
+ ["SectionsFound"]=>
+ string(24) "ANY_TAG, IFD0, EXIF, GPS"
+ ["COMPUTED"]=>
+ array(9) {
+ ["html"]=>
+ string(20) "width="1" height="1""
+ ["Height"]=>
+ int(1)
+ ["Width"]=>
+ int(1)
+ ["IsColor"]=>
+ int(1)
+ ["ByteOrderMotorola"]=>
+ int(1)
+ ["ApertureFNumber"]=>
+ string(5) "f/8.0"
+ ["Copyright"]=>
+ string(24) "Eric Stewart, Hex Editor"
+ ["Copyright.Photographer"]=>
+ string(12) "Eric Stewart"
+ ["Copyright.Editor"]=>
+ string(10) "Hex Editor"
+ }
+ ["ImageWidth"]=>
+ int(1)
+ ["ImageLength"]=>
+ int(1)
+ ["BitsPerSample"]=>
+ int(8)
+ ["Compression"]=>
+ int(5)
+ ["PhotometricInterpretation"]=>
+ int(3)
+ ["ImageDescription"]=>
+ string(15) "My description."
+ ["Make"]=>
+ string(11) "OpenShutter"
+ ["Model"]=>
+ string(8) "OS 1.0.0"
+ ["StripOffsets"]=>
+ int(2278)
+ ["SamplesPerPixel"]=>
+ int(1)
+ ["RowsPerStrip"]=>
+ int(8)
+ ["StripByteCounts"]=>
+ int(4)
+ ["XResolution"]=>
+ string(17) "381681664/2097152"
+ ["YResolution"]=>
+ string(17) "381681664/2097152"
+ ["PlanarConfiguration"]=>
+ int(1)
+ ["ResolutionUnit"]=>
+ int(2)
+ ["Artist"]=>
+ string(12) "Eric Stewart"
+ ["ColorMap"]=>
+ array(768) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(65280)
+ [2]=>
+ int(32512)
+ [3]=>
+ int(49152)
+ [4]=>
+ int(99)
+ [5]=>
+ int(115)
+ [6]=>
+ int(116)
+ [7]=>
+ int(101)
+ [8]=>
+ int(119)
+ [9]=>
+ int(97)
+ [10]=>
+ int(114)
+ [11]=>
+ int(116)
+ [12]=>
+ int(0)
+ [13]=>
+ int(0)
+ [14]=>
+ int(0)
+ [15]=>
+ int(0)
+ [16]=>
+ int(0)
+ [17]=>
+ int(0)
+ [18]=>
+ int(0)
+ [19]=>
+ int(0)
+ [20]=>
+ int(0)
+ [21]=>
+ int(0)
+ [22]=>
+ int(0)
+ [23]=>
+ int(0)
+ [24]=>
+ int(0)
+ [25]=>
+ int(0)
+ [26]=>
+ int(0)
+ [27]=>
+ int(0)
+ [28]=>
+ int(0)
+ [29]=>
+ int(0)
+ [30]=>
+ int(0)
+ [31]=>
+ int(0)
+ [32]=>
+ int(0)
+ [33]=>
+ int(0)
+ [34]=>
+ int(0)
+ [35]=>
+ int(0)
+ [36]=>
+ int(0)
+ [37]=>
+ int(0)
+ [38]=>
+ int(0)
+ [39]=>
+ int(0)
+ [40]=>
+ int(0)
+ [41]=>
+ int(0)
+ [42]=>
+ int(0)
+ [43]=>
+ int(0)
+ [44]=>
+ int(0)
+ [45]=>
+ int(0)
+ [46]=>
+ int(0)
+ [47]=>
+ int(0)
+ [48]=>
+ int(0)
+ [49]=>
+ int(0)
+ [50]=>
+ int(0)
+ [51]=>
+ int(0)
+ [52]=>
+ int(0)
+ [53]=>
+ int(0)
+ [54]=>
+ int(0)
+ [55]=>
+ int(0)
+ [56]=>
+ int(0)
+ [57]=>
+ int(0)
+ [58]=>
+ int(0)
+ [59]=>
+ int(0)
+ [60]=>
+ int(0)
+ [61]=>
+ int(0)
+ [62]=>
+ int(0)
+ [63]=>
+ int(0)
+ [64]=>
+ int(0)
+ [65]=>
+ int(0)
+ [66]=>
+ int(0)
+ [67]=>
+ int(0)
+ [68]=>
+ int(0)
+ [69]=>
+ int(0)
+ [70]=>
+ int(0)
+ [71]=>
+ int(0)
+ [72]=>
+ int(0)
+ [73]=>
+ int(0)
+ [74]=>
+ int(0)
+ [75]=>
+ int(0)
+ [76]=>
+ int(0)
+ [77]=>
+ int(0)
+ [78]=>
+ int(0)
+ [79]=>
+ int(0)
+ [80]=>
+ int(0)
+ [81]=>
+ int(0)
+ [82]=>
+ int(0)
+ [83]=>
+ int(0)
+ [84]=>
+ int(0)
+ [85]=>
+ int(0)
+ [86]=>
+ int(0)
+ [87]=>
+ int(0)
+ [88]=>
+ int(0)
+ [89]=>
+ int(0)
+ [90]=>
+ int(0)
+ [91]=>
+ int(0)
+ [92]=>
+ int(0)
+ [93]=>
+ int(0)
+ [94]=>
+ int(0)
+ [95]=>
+ int(0)
+ [96]=>
+ int(0)
+ [97]=>
+ int(0)
+ [98]=>
+ int(0)
+ [99]=>
+ int(0)
+ [100]=>
+ int(0)
+ [101]=>
+ int(0)
+ [102]=>
+ int(0)
+ [103]=>
+ int(0)
+ [104]=>
+ int(0)
+ [105]=>
+ int(0)
+ [106]=>
+ int(0)
+ [107]=>
+ int(0)
+ [108]=>
+ int(0)
+ [109]=>
+ int(0)
+ [110]=>
+ int(0)
+ [111]=>
+ int(0)
+ [112]=>
+ int(0)
+ [113]=>
+ int(0)
+ [114]=>
+ int(0)
+ [115]=>
+ int(0)
+ [116]=>
+ int(0)
+ [117]=>
+ int(0)
+ [118]=>
+ int(0)
+ [119]=>
+ int(0)
+ [120]=>
+ int(0)
+ [121]=>
+ int(0)
+ [122]=>
+ int(0)
+ [123]=>
+ int(0)
+ [124]=>
+ int(0)
+ [125]=>
+ int(0)
+ [126]=>
+ int(0)
+ [127]=>
+ int(0)
+ [128]=>
+ int(0)
+ [129]=>
+ int(0)
+ [130]=>
+ int(0)
+ [131]=>
+ int(0)
+ [132]=>
+ int(0)
+ [133]=>
+ int(0)
+ [134]=>
+ int(0)
+ [135]=>
+ int(0)
+ [136]=>
+ int(0)
+ [137]=>
+ int(0)
+ [138]=>
+ int(0)
+ [139]=>
+ int(0)
+ [140]=>
+ int(0)
+ [141]=>
+ int(0)
+ [142]=>
+ int(0)
+ [143]=>
+ int(0)
+ [144]=>
+ int(0)
+ [145]=>
+ int(0)
+ [146]=>
+ int(0)
+ [147]=>
+ int(0)
+ [148]=>
+ int(0)
+ [149]=>
+ int(0)
+ [150]=>
+ int(0)
+ [151]=>
+ int(0)
+ [152]=>
+ int(0)
+ [153]=>
+ int(0)
+ [154]=>
+ int(0)
+ [155]=>
+ int(0)
+ [156]=>
+ int(0)
+ [157]=>
+ int(0)
+ [158]=>
+ int(0)
+ [159]=>
+ int(0)
+ [160]=>
+ int(0)
+ [161]=>
+ int(0)
+ [162]=>
+ int(0)
+ [163]=>
+ int(0)
+ [164]=>
+ int(0)
+ [165]=>
+ int(0)
+ [166]=>
+ int(0)
+ [167]=>
+ int(0)
+ [168]=>
+ int(0)
+ [169]=>
+ int(0)
+ [170]=>
+ int(0)
+ [171]=>
+ int(0)
+ [172]=>
+ int(0)
+ [173]=>
+ int(0)
+ [174]=>
+ int(0)
+ [175]=>
+ int(0)
+ [176]=>
+ int(0)
+ [177]=>
+ int(0)
+ [178]=>
+ int(0)
+ [179]=>
+ int(0)
+ [180]=>
+ int(0)
+ [181]=>
+ int(0)
+ [182]=>
+ int(0)
+ [183]=>
+ int(0)
+ [184]=>
+ int(0)
+ [185]=>
+ int(0)
+ [186]=>
+ int(0)
+ [187]=>
+ int(0)
+ [188]=>
+ int(0)
+ [189]=>
+ int(0)
+ [190]=>
+ int(0)
+ [191]=>
+ int(0)
+ [192]=>
+ int(0)
+ [193]=>
+ int(0)
+ [194]=>
+ int(0)
+ [195]=>
+ int(0)
+ [196]=>
+ int(0)
+ [197]=>
+ int(0)
+ [198]=>
+ int(0)
+ [199]=>
+ int(0)
+ [200]=>
+ int(0)
+ [201]=>
+ int(0)
+ [202]=>
+ int(0)
+ [203]=>
+ int(0)
+ [204]=>
+ int(0)
+ [205]=>
+ int(0)
+ [206]=>
+ int(0)
+ [207]=>
+ int(0)
+ [208]=>
+ int(0)
+ [209]=>
+ int(0)
+ [210]=>
+ int(0)
+ [211]=>
+ int(0)
+ [212]=>
+ int(0)
+ [213]=>
+ int(0)
+ [214]=>
+ int(0)
+ [215]=>
+ int(0)
+ [216]=>
+ int(0)
+ [217]=>
+ int(0)
+ [218]=>
+ int(0)
+ [219]=>
+ int(0)
+ [220]=>
+ int(0)
+ [221]=>
+ int(0)
+ [222]=>
+ int(0)
+ [223]=>
+ int(0)
+ [224]=>
+ int(0)
+ [225]=>
+ int(0)
+ [226]=>
+ int(0)
+ [227]=>
+ int(0)
+ [228]=>
+ int(0)
+ [229]=>
+ int(0)
+ [230]=>
+ int(0)
+ [231]=>
+ int(0)
+ [232]=>
+ int(0)
+ [233]=>
+ int(0)
+ [234]=>
+ int(0)
+ [235]=>
+ int(0)
+ [236]=>
+ int(0)
+ [237]=>
+ int(0)
+ [238]=>
+ int(0)
+ [239]=>
+ int(0)
+ [240]=>
+ int(0)
+ [241]=>
+ int(0)
+ [242]=>
+ int(0)
+ [243]=>
+ int(0)
+ [244]=>
+ int(0)
+ [245]=>
+ int(0)
+ [246]=>
+ int(0)
+ [247]=>
+ int(0)
+ [248]=>
+ int(0)
+ [249]=>
+ int(0)
+ [250]=>
+ int(0)
+ [251]=>
+ int(0)
+ [252]=>
+ int(0)
+ [253]=>
+ int(0)
+ [254]=>
+ int(0)
+ [255]=>
+ int(1)
+ [256]=>
+ int(0)
+ [257]=>
+ int(65280)
+ [258]=>
+ int(32512)
+ [259]=>
+ int(49152)
+ [260]=>
+ int(0)
+ [261]=>
+ int(0)
+ [262]=>
+ int(0)
+ [263]=>
+ int(0)
+ [264]=>
+ int(0)
+ [265]=>
+ int(0)
+ [266]=>
+ int(0)
+ [267]=>
+ int(0)
+ [268]=>
+ int(0)
+ [269]=>
+ int(0)
+ [270]=>
+ int(0)
+ [271]=>
+ int(0)
+ [272]=>
+ int(11945)
+ [273]=>
+ int(1914)
+ [274]=>
+ int(0)
+ [275]=>
+ int(24609)
+ [276]=>
+ int(1088)
+ [277]=>
+ int(960)
+ [278]=>
+ int(0)
+ [279]=>
+ int(0)
+ [280]=>
+ int(20000)
+ [281]=>
+ int(8414)
+ [282]=>
+ int(65436)
+ [283]=>
+ int(0)
+ [284]=>
+ int(47655)
+ [285]=>
+ int(8)
+ [286]=>
+ int(37936)
+ [287]=>
+ int(8406)
+ [288]=>
+ int(0)
+ [289]=>
+ int(0)
+ [290]=>
+ int(0)
+ [291]=>
+ int(0)
+ [292]=>
+ int(0)
+ [293]=>
+ int(0)
+ [294]=>
+ int(0)
+ [295]=>
+ int(0)
+ [296]=>
+ int(0)
+ [297]=>
+ int(64652)
+ [298]=>
+ int(50264)
+ [299]=>
+ int(0)
+ [300]=>
+ int(0)
+ [301]=>
+ int(64887)
+ [302]=>
+ int(50264)
+ [303]=>
+ int(0)
+ [304]=>
+ int(25714)
+ [305]=>
+ int(26220)
+ [306]=>
+ int(17235)
+ [307]=>
+ int(19777)
+ [308]=>
+ int(65535)
+ [309]=>
+ int(65535)
+ [310]=>
+ int(65535)
+ [311]=>
+ int(65535)
+ [312]=>
+ int(65535)
+ [313]=>
+ int(65535)
+ [314]=>
+ int(65535)
+ [315]=>
+ int(65535)
+ [316]=>
+ int(501)
+ [317]=>
+ int(0)
+ [318]=>
+ int(20)
+ [319]=>
+ int(0)
+ [320]=>
+ int(0)
+ [321]=>
+ int(0)
+ [322]=>
+ int(16877)
+ [323]=>
+ int(0)
+ [324]=>
+ int(3)
+ [325]=>
+ int(0)
+ [326]=>
+ int(0)
+ [327]=>
+ int(0)
+ [328]=>
+ int(0)
+ [329]=>
+ int(0)
+ [330]=>
+ int(0)
+ [331]=>
+ int(0)
+ [332]=>
+ int(65535)
+ [333]=>
+ int(65535)
+ [334]=>
+ int(65535)
+ [335]=>
+ int(65535)
+ [336]=>
+ int(65535)
+ [337]=>
+ int(65535)
+ [338]=>
+ int(65535)
+ [339]=>
+ int(65535)
+ [340]=>
+ int(0)
+ [341]=>
+ int(0)
+ [342]=>
+ int(52840)
+ [343]=>
+ int(2025)
+ [344]=>
+ int(16)
+ [345]=>
+ int(57377)
+ [346]=>
+ int(1024)
+ [347]=>
+ int(960)
+ [348]=>
+ int(0)
+ [349]=>
+ int(0)
+ [350]=>
+ int(27136)
+ [351]=>
+ int(8414)
+ [352]=>
+ int(65436)
+ [353]=>
+ int(0)
+ [354]=>
+ int(47655)
+ [355]=>
+ int(8)
+ [356]=>
+ int(62400)
+ [357]=>
+ int(8407)
+ [358]=>
+ int(0)
+ [359]=>
+ int(0)
+ [360]=>
+ int(0)
+ [361]=>
+ int(0)
+ [362]=>
+ int(0)
+ [363]=>
+ int(0)
+ [364]=>
+ int(0)
+ [365]=>
+ int(0)
+ [366]=>
+ int(0)
+ [367]=>
+ int(64857)
+ [368]=>
+ int(50264)
+ [369]=>
+ int(0)
+ [370]=>
+ int(0)
+ [371]=>
+ int(64892)
+ [372]=>
+ int(50264)
+ [373]=>
+ int(0)
+ [374]=>
+ int(25714)
+ [375]=>
+ int(26220)
+ [376]=>
+ int(17235)
+ [377]=>
+ int(19777)
+ [378]=>
+ int(65535)
+ [379]=>
+ int(65535)
+ [380]=>
+ int(65535)
+ [381]=>
+ int(65535)
+ [382]=>
+ int(65535)
+ [383]=>
+ int(65535)
+ [384]=>
+ int(65535)
+ [385]=>
+ int(65535)
+ [386]=>
+ int(501)
+ [387]=>
+ int(0)
+ [388]=>
+ int(20)
+ [389]=>
+ int(0)
+ [390]=>
+ int(0)
+ [391]=>
+ int(0)
+ [392]=>
+ int(16877)
+ [393]=>
+ int(0)
+ [394]=>
+ int(3)
+ [395]=>
+ int(0)
+ [396]=>
+ int(0)
+ [397]=>
+ int(0)
+ [398]=>
+ int(0)
+ [399]=>
+ int(0)
+ [400]=>
+ int(0)
+ [401]=>
+ int(0)
+ [402]=>
+ int(65535)
+ [403]=>
+ int(65535)
+ [404]=>
+ int(65535)
+ [405]=>
+ int(65535)
+ [406]=>
+ int(65535)
+ [407]=>
+ int(65535)
+ [408]=>
+ int(65535)
+ [409]=>
+ int(65535)
+ [410]=>
+ int(0)
+ [411]=>
+ int(0)
+ [412]=>
+ int(53440)
+ [413]=>
+ int(2025)
+ [414]=>
+ int(16)
+ [415]=>
+ int(57377)
+ [416]=>
+ int(1024)
+ [417]=>
+ int(960)
+ [418]=>
+ int(0)
+ [419]=>
+ int(0)
+ [420]=>
+ int(41120)
+ [421]=>
+ int(9024)
+ [422]=>
+ int(65436)
+ [423]=>
+ int(0)
+ [424]=>
+ int(47655)
+ [425]=>
+ int(8)
+ [426]=>
+ int(24480)
+ [427]=>
+ int(8404)
+ [428]=>
+ int(0)
+ [429]=>
+ int(0)
+ [430]=>
+ int(0)
+ [431]=>
+ int(0)
+ [432]=>
+ int(0)
+ [433]=>
+ int(0)
+ [434]=>
+ int(0)
+ [435]=>
+ int(0)
+ [436]=>
+ int(0)
+ [437]=>
+ int(21315)
+ [438]=>
+ int(50294)
+ [439]=>
+ int(0)
+ [440]=>
+ int(0)
+ [441]=>
+ int(53635)
+ [442]=>
+ int(50294)
+ [443]=>
+ int(0)
+ [444]=>
+ int(25714)
+ [445]=>
+ int(26220)
+ [446]=>
+ int(17235)
+ [447]=>
+ int(19777)
+ [448]=>
+ int(65535)
+ [449]=>
+ int(65535)
+ [450]=>
+ int(65535)
+ [451]=>
+ int(65535)
+ [452]=>
+ int(65535)
+ [453]=>
+ int(65535)
+ [454]=>
+ int(65535)
+ [455]=>
+ int(65535)
+ [456]=>
+ int(501)
+ [457]=>
+ int(0)
+ [458]=>
+ int(20)
+ [459]=>
+ int(0)
+ [460]=>
+ int(0)
+ [461]=>
+ int(0)
+ [462]=>
+ int(16877)
+ [463]=>
+ int(0)
+ [464]=>
+ int(3)
+ [465]=>
+ int(0)
+ [466]=>
+ int(0)
+ [467]=>
+ int(0)
+ [468]=>
+ int(0)
+ [469]=>
+ int(0)
+ [470]=>
+ int(0)
+ [471]=>
+ int(0)
+ [472]=>
+ int(65535)
+ [473]=>
+ int(65535)
+ [474]=>
+ int(65535)
+ [475]=>
+ int(65535)
+ [476]=>
+ int(65535)
+ [477]=>
+ int(65535)
+ [478]=>
+ int(65535)
+ [479]=>
+ int(65535)
+ [480]=>
+ int(0)
+ [481]=>
+ int(0)
+ [482]=>
+ int(54028)
+ [483]=>
+ int(2772)
+ [484]=>
+ int(16)
+ [485]=>
+ int(57377)
+ [486]=>
+ int(1024)
+ [487]=>
+ int(960)
+ [488]=>
+ int(0)
+ [489]=>
+ int(0)
+ [490]=>
+ int(42384)
+ [491]=>
+ int(8408)
+ [492]=>
+ int(65436)
+ [493]=>
+ int(0)
+ [494]=>
+ int(47655)
+ [495]=>
+ int(8)
+ [496]=>
+ int(1136)
+ [497]=>
+ int(8348)
+ [498]=>
+ int(0)
+ [499]=>
+ int(0)
+ [500]=>
+ int(0)
+ [501]=>
+ int(0)
+ [502]=>
+ int(0)
+ [503]=>
+ int(0)
+ [504]=>
+ int(0)
+ [505]=>
+ int(0)
+ [506]=>
+ int(0)
+ [507]=>
+ int(12326)
+ [508]=>
+ int(50261)
+ [509]=>
+ int(0)
+ [510]=>
+ int(0)
+ [511]=>
+ int(12326)
+ [512]=>
+ int(0)
+ [513]=>
+ int(65280)
+ [514]=>
+ int(32512)
+ [515]=>
+ int(49152)
+ [516]=>
+ int(0)
+ [517]=>
+ int(0)
+ [518]=>
+ int(22663)
+ [519]=>
+ int(2)
+ [520]=>
+ int(0)
+ [521]=>
+ int(0)
+ [522]=>
+ int(24576)
+ [523]=>
+ int(2)
+ [524]=>
+ int(0)
+ [525]=>
+ int(0)
+ [526]=>
+ int(501)
+ [527]=>
+ int(0)
+ [528]=>
+ int(20)
+ [529]=>
+ int(0)
+ [530]=>
+ int(0)
+ [531]=>
+ int(0)
+ [532]=>
+ int(33188)
+ [533]=>
+ int(0)
+ [534]=>
+ int(0)
+ [535]=>
+ int(0)
+ [536]=>
+ int(0)
+ [537]=>
+ int(0)
+ [538]=>
+ int(0)
+ [539]=>
+ int(0)
+ [540]=>
+ int(0)
+ [541]=>
+ int(0)
+ [542]=>
+ int(0)
+ [543]=>
+ int(0)
+ [544]=>
+ int(0)
+ [545]=>
+ int(0)
+ [546]=>
+ int(0)
+ [547]=>
+ int(0)
+ [548]=>
+ int(0)
+ [549]=>
+ int(0)
+ [550]=>
+ int(0)
+ [551]=>
+ int(0)
+ [552]=>
+ int(51766)
+ [553]=>
+ int(1946)
+ [554]=>
+ int(0)
+ [555]=>
+ int(24609)
+ [556]=>
+ int(1088)
+ [557]=>
+ int(960)
+ [558]=>
+ int(0)
+ [559]=>
+ int(0)
+ [560]=>
+ int(0)
+ [561]=>
+ int(0)
+ [562]=>
+ int(25116)
+ [563]=>
+ int(2012)
+ [564]=>
+ int(0)
+ [565]=>
+ int(0)
+ [566]=>
+ int(0)
+ [567]=>
+ int(0)
+ [568]=>
+ int(0)
+ [569]=>
+ int(0)
+ [570]=>
+ int(0)
+ [571]=>
+ int(0)
+ [572]=>
+ int(0)
+ [573]=>
+ int(0)
+ [574]=>
+ int(0)
+ [575]=>
+ int(0)
+ [576]=>
+ int(0)
+ [577]=>
+ int(0)
+ [578]=>
+ int(0)
+ [579]=>
+ int(0)
+ [580]=>
+ int(0)
+ [581]=>
+ int(0)
+ [582]=>
+ int(0)
+ [583]=>
+ int(0)
+ [584]=>
+ int(0)
+ [585]=>
+ int(0)
+ [586]=>
+ int(0)
+ [587]=>
+ int(0)
+ [588]=>
+ int(0)
+ [589]=>
+ int(0)
+ [590]=>
+ int(0)
+ [591]=>
+ int(0)
+ [592]=>
+ int(0)
+ [593]=>
+ int(0)
+ [594]=>
+ int(0)
+ [595]=>
+ int(0)
+ [596]=>
+ int(0)
+ [597]=>
+ int(0)
+ [598]=>
+ int(0)
+ [599]=>
+ int(0)
+ [600]=>
+ int(0)
+ [601]=>
+ int(0)
+ [602]=>
+ int(0)
+ [603]=>
+ int(0)
+ [604]=>
+ int(0)
+ [605]=>
+ int(0)
+ [606]=>
+ int(0)
+ [607]=>
+ int(0)
+ [608]=>
+ int(0)
+ [609]=>
+ int(0)
+ [610]=>
+ int(0)
+ [611]=>
+ int(0)
+ [612]=>
+ int(0)
+ [613]=>
+ int(0)
+ [614]=>
+ int(0)
+ [615]=>
+ int(0)
+ [616]=>
+ int(0)
+ [617]=>
+ int(0)
+ [618]=>
+ int(0)
+ [619]=>
+ int(0)
+ [620]=>
+ int(0)
+ [621]=>
+ int(0)
+ [622]=>
+ int(0)
+ [623]=>
+ int(0)
+ [624]=>
+ int(0)
+ [625]=>
+ int(0)
+ [626]=>
+ int(0)
+ [627]=>
+ int(0)
+ [628]=>
+ int(0)
+ [629]=>
+ int(0)
+ [630]=>
+ int(0)
+ [631]=>
+ int(0)
+ [632]=>
+ int(0)
+ [633]=>
+ int(0)
+ [634]=>
+ int(0)
+ [635]=>
+ int(0)
+ [636]=>
+ int(0)
+ [637]=>
+ int(0)
+ [638]=>
+ int(0)
+ [639]=>
+ int(0)
+ [640]=>
+ int(0)
+ [641]=>
+ int(0)
+ [642]=>
+ int(0)
+ [643]=>
+ int(0)
+ [644]=>
+ int(0)
+ [645]=>
+ int(0)
+ [646]=>
+ int(0)
+ [647]=>
+ int(0)
+ [648]=>
+ int(0)
+ [649]=>
+ int(0)
+ [650]=>
+ int(0)
+ [651]=>
+ int(0)
+ [652]=>
+ int(0)
+ [653]=>
+ int(0)
+ [654]=>
+ int(0)
+ [655]=>
+ int(0)
+ [656]=>
+ int(0)
+ [657]=>
+ int(0)
+ [658]=>
+ int(0)
+ [659]=>
+ int(0)
+ [660]=>
+ int(0)
+ [661]=>
+ int(0)
+ [662]=>
+ int(0)
+ [663]=>
+ int(0)
+ [664]=>
+ int(0)
+ [665]=>
+ int(0)
+ [666]=>
+ int(0)
+ [667]=>
+ int(0)
+ [668]=>
+ int(0)
+ [669]=>
+ int(0)
+ [670]=>
+ int(0)
+ [671]=>
+ int(0)
+ [672]=>
+ int(0)
+ [673]=>
+ int(0)
+ [674]=>
+ int(0)
+ [675]=>
+ int(0)
+ [676]=>
+ int(0)
+ [677]=>
+ int(0)
+ [678]=>
+ int(0)
+ [679]=>
+ int(0)
+ [680]=>
+ int(0)
+ [681]=>
+ int(0)
+ [682]=>
+ int(0)
+ [683]=>
+ int(0)
+ [684]=>
+ int(0)
+ [685]=>
+ int(0)
+ [686]=>
+ int(0)
+ [687]=>
+ int(0)
+ [688]=>
+ int(0)
+ [689]=>
+ int(0)
+ [690]=>
+ int(0)
+ [691]=>
+ int(0)
+ [692]=>
+ int(0)
+ [693]=>
+ int(0)
+ [694]=>
+ int(0)
+ [695]=>
+ int(0)
+ [696]=>
+ int(0)
+ [697]=>
+ int(0)
+ [698]=>
+ int(0)
+ [699]=>
+ int(0)
+ [700]=>
+ int(0)
+ [701]=>
+ int(0)
+ [702]=>
+ int(0)
+ [703]=>
+ int(0)
+ [704]=>
+ int(0)
+ [705]=>
+ int(0)
+ [706]=>
+ int(0)
+ [707]=>
+ int(0)
+ [708]=>
+ int(0)
+ [709]=>
+ int(0)
+ [710]=>
+ int(0)
+ [711]=>
+ int(0)
+ [712]=>
+ int(0)
+ [713]=>
+ int(0)
+ [714]=>
+ int(0)
+ [715]=>
+ int(0)
+ [716]=>
+ int(0)
+ [717]=>
+ int(0)
+ [718]=>
+ int(0)
+ [719]=>
+ int(0)
+ [720]=>
+ int(0)
+ [721]=>
+ int(0)
+ [722]=>
+ int(0)
+ [723]=>
+ int(0)
+ [724]=>
+ int(0)
+ [725]=>
+ int(0)
+ [726]=>
+ int(0)
+ [727]=>
+ int(0)
+ [728]=>
+ int(0)
+ [729]=>
+ int(0)
+ [730]=>
+ int(0)
+ [731]=>
+ int(0)
+ [732]=>
+ int(0)
+ [733]=>
+ int(0)
+ [734]=>
+ int(0)
+ [735]=>
+ int(0)
+ [736]=>
+ int(0)
+ [737]=>
+ int(0)
+ [738]=>
+ int(0)
+ [739]=>
+ int(0)
+ [740]=>
+ int(0)
+ [741]=>
+ int(0)
+ [742]=>
+ int(0)
+ [743]=>
+ int(0)
+ [744]=>
+ int(0)
+ [745]=>
+ int(0)
+ [746]=>
+ int(0)
+ [747]=>
+ int(0)
+ [748]=>
+ int(0)
+ [749]=>
+ int(0)
+ [750]=>
+ int(0)
+ [751]=>
+ int(0)
+ [752]=>
+ int(0)
+ [753]=>
+ int(0)
+ [754]=>
+ int(0)
+ [755]=>
+ int(0)
+ [756]=>
+ int(0)
+ [757]=>
+ int(0)
+ [758]=>
+ int(0)
+ [759]=>
+ int(0)
+ [760]=>
+ int(0)
+ [761]=>
+ int(0)
+ [762]=>
+ int(0)
+ [763]=>
+ int(0)
+ [764]=>
+ int(0)
+ [765]=>
+ int(0)
+ [766]=>
+ int(0)
+ [767]=>
+ int(0)
+ }
+ ["Copyright"]=>
+ string(12) "Eric Stewart"
+ ["ExposureTime"]=>
+ string(5) "1/125"
+ ["FNumber"]=>
+ string(3) "8/1"
+ ["ISOSpeedRatings"]=>
+ int(80)
+ ["DateTimeOriginal"]=>
+ string(19) "2008:06:19 01:47:53"
+ ["DateTimeDigitized"]=>
+ string(19) "2008:06:19 01:47:53"
+ ["MeteringMode"]=>
+ int(5)
+ ["LightSource"]=>
+ int(4)
+ ["Flash"]=>
+ int(7)
+ ["FocalLength"]=>
+ string(4) "29/5"
+ ["ExifImageWidth"]=>
+ int(1)
+ ["ExifImageLength"]=>
+ int(1)
+ ["GPSVersion"]=>
+ string(4) "
+ ["GPSLatitudeRef"]=>
+ string(1) "N"
+ ["GPSLatitude"]=>
+ array(3) {
+ [0]=>
+ string(4) "33/1"
+ [1]=>
+ string(4) "37/1"
+ [2]=>
+ string(3) "0/1"
+ }
+ ["GPSLongitudeRef"]=>
+ string(1) "W"
+ ["GPSLongitude"]=>
+ array(3) {
+ [0]=>
+ string(4) "84/1"
+ [1]=>
+ string(3) "7/1"
+ [2]=>
+ string(3) "0/1"
+ }
+ ["GPSAltitudeRef"]=>
+ string(1) "
+ ["GPSAltitude"]=>
+ string(5) "295/1"
+ ["GPSTimeStamp"]=>
+ array(3) {
+ [0]=>
+ string(3) "1/1"
+ [1]=>
+ string(4) "47/1"
+ [2]=>
+ string(4) "53/1"
+ }
+}
+--CREDIT--
+Eric Stewart <ericleestewart@gmail.com>
diff --git a/ext/exif/tests/exif024.phpt b/ext/exif/tests/exif024.phpt
new file mode 100644
index 000000000..4839d1cb3
--- /dev/null
+++ b/ext/exif/tests/exif024.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Check for exif_read_data, JPEG with IFD0, EXIF, INTEROP data in Intel byte-order.
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--INI--
+output_handler=
+zlib.output_compression=0
+--FILE--
+<?php
+var_dump(exif_read_data(dirname(__FILE__).'/image024.jpg'));
+?>
+--EXPECTF--
+array(14) {
+ ["FileName"]=>
+ string(12) "image024.jpg"
+ ["FileDateTime"]=>
+ int(%d)
+ ["FileSize"]=>
+ int(%d)
+ ["FileType"]=>
+ int(2)
+ ["MimeType"]=>
+ string(10) "image/jpeg"
+ ["SectionsFound"]=>
+ string(28) "ANY_TAG, IFD0, EXIF, INTEROP"
+ ["COMPUTED"]=>
+ array(5) {
+ ["html"]=>
+ string(20) "width="1" height="1""
+ ["Height"]=>
+ int(1)
+ ["Width"]=>
+ int(1)
+ ["IsColor"]=>
+ int(1)
+ ["ByteOrderMotorola"]=>
+ int(0)
+ }
+ ["Exif_IFD_Pointer"]=>
+ int(26)
+ ["InteroperabilityOffset"]=>
+ int(44)
+ ["InterOperabilityIndex"]=>
+ string(3) "R98"
+ ["InterOperabilityVersion"]=>
+ string(4) "0100"
+ ["RelatedFileFormat"]=>
+ string(12) "image024.jpg"
+ ["RelatedImageWidth"]=>
+ int(1)
+ ["RelatedImageHeight"]=>
+ int(1)
+}
+--CREDIT--
+Eric Stewart <ericleestewart@gmail.com>
diff --git a/ext/exif/tests/exif025.phpt b/ext/exif/tests/exif025.phpt
new file mode 100644
index 000000000..683dc7e3e
--- /dev/null
+++ b/ext/exif/tests/exif025.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Check for exif_read_data, JPEG with IFD0, EXIF, INTEROP data in Motorola byte-order.
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--INI--
+output_handler=
+zlib.output_compression=0
+--FILE--
+<?php
+var_dump(exif_read_data(dirname(__FILE__).'/image025.jpg'));
+?>
+--EXPECTF--
+array(14) {
+ ["FileName"]=>
+ string(12) "image025.jpg"
+ ["FileDateTime"]=>
+ int(%d)
+ ["FileSize"]=>
+ int(%d)
+ ["FileType"]=>
+ int(2)
+ ["MimeType"]=>
+ string(10) "image/jpeg"
+ ["SectionsFound"]=>
+ string(28) "ANY_TAG, IFD0, EXIF, INTEROP"
+ ["COMPUTED"]=>
+ array(5) {
+ ["html"]=>
+ string(20) "width="1" height="1""
+ ["Height"]=>
+ int(1)
+ ["Width"]=>
+ int(1)
+ ["IsColor"]=>
+ int(1)
+ ["ByteOrderMotorola"]=>
+ int(1)
+ }
+ ["Exif_IFD_Pointer"]=>
+ int(26)
+ ["InteroperabilityOffset"]=>
+ int(44)
+ ["InterOperabilityIndex"]=>
+ string(3) "R98"
+ ["InterOperabilityVersion"]=>
+ string(4) "0100"
+ ["RelatedFileFormat"]=>
+ string(12) "image025.jpg"
+ ["RelatedImageWidth"]=>
+ int(1)
+ ["RelatedImageHeight"]=>
+ int(1)
+}
+--CREDIT--
+Eric Stewart <ericleestewart@gmail.com>
diff --git a/ext/exif/tests/exif026.phpt b/ext/exif/tests/exif026.phpt
new file mode 100644
index 000000000..7de796801
--- /dev/null
+++ b/ext/exif/tests/exif026.phpt
@@ -0,0 +1,1632 @@
+--TEST--
+Check for exif_read_data, TIFF with IFD0, EXIF, INTEROP data in Intel byte-order.
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--INI--
+output_handler=
+zlib.output_compression=0
+--FILE--
+<?php
+var_dump(exif_read_data(dirname(__FILE__).'/image026.tiff'));
+?>
+--EXPECTF--
+array(31) {
+ ["FileName"]=>
+ string(13) "image026.tiff"
+ ["FileDateTime"]=>
+ int(%d)
+ ["FileSize"]=>
+ int(%d)
+ ["FileType"]=>
+ int(7)
+ ["MimeType"]=>
+ string(10) "image/tiff"
+ ["SectionsFound"]=>
+ string(28) "ANY_TAG, IFD0, EXIF, INTEROP"
+ ["COMPUTED"]=>
+ array(8) {
+ ["html"]=>
+ string(20) "width="1" height="1""
+ ["Height"]=>
+ int(1)
+ ["Width"]=>
+ int(1)
+ ["IsColor"]=>
+ int(1)
+ ["ByteOrderMotorola"]=>
+ int(0)
+ ["Copyright"]=>
+ string(24) "Eric Stewart, Hex Editor"
+ ["Copyright.Photographer"]=>
+ string(12) "Eric Stewart"
+ ["Copyright.Editor"]=>
+ string(10) "Hex Editor"
+ }
+ ["ImageWidth"]=>
+ int(1)
+ ["ImageLength"]=>
+ int(1)
+ ["BitsPerSample"]=>
+ int(8)
+ ["Compression"]=>
+ int(5)
+ ["PhotometricInterpretation"]=>
+ int(3)
+ ["ImageDescription"]=>
+ string(15) "My description."
+ ["Make"]=>
+ string(11) "OpenShutter"
+ ["Model"]=>
+ string(8) "OS 1.0.0"
+ ["StripOffsets"]=>
+ int(1980)
+ ["SamplesPerPixel"]=>
+ int(1)
+ ["RowsPerStrip"]=>
+ int(8)
+ ["StripByteCounts"]=>
+ int(4)
+ ["XResolution"]=>
+ string(17) "381681664/2097152"
+ ["YResolution"]=>
+ string(17) "381681664/2097152"
+ ["PlanarConfiguration"]=>
+ int(1)
+ ["ResolutionUnit"]=>
+ int(2)
+ ["Artist"]=>
+ string(12) "Eric Stewart"
+ ["ColorMap"]=>
+ array(768) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(65280)
+ [2]=>
+ int(32512)
+ [3]=>
+ int(49152)
+ [4]=>
+ int(99)
+ [5]=>
+ int(115)
+ [6]=>
+ int(116)
+ [7]=>
+ int(101)
+ [8]=>
+ int(119)
+ [9]=>
+ int(97)
+ [10]=>
+ int(114)
+ [11]=>
+ int(116)
+ [12]=>
+ int(0)
+ [13]=>
+ int(0)
+ [14]=>
+ int(0)
+ [15]=>
+ int(0)
+ [16]=>
+ int(0)
+ [17]=>
+ int(0)
+ [18]=>
+ int(0)
+ [19]=>
+ int(0)
+ [20]=>
+ int(0)
+ [21]=>
+ int(0)
+ [22]=>
+ int(0)
+ [23]=>
+ int(0)
+ [24]=>
+ int(0)
+ [25]=>
+ int(0)
+ [26]=>
+ int(0)
+ [27]=>
+ int(0)
+ [28]=>
+ int(0)
+ [29]=>
+ int(0)
+ [30]=>
+ int(0)
+ [31]=>
+ int(0)
+ [32]=>
+ int(0)
+ [33]=>
+ int(0)
+ [34]=>
+ int(0)
+ [35]=>
+ int(0)
+ [36]=>
+ int(0)
+ [37]=>
+ int(0)
+ [38]=>
+ int(0)
+ [39]=>
+ int(0)
+ [40]=>
+ int(0)
+ [41]=>
+ int(0)
+ [42]=>
+ int(0)
+ [43]=>
+ int(0)
+ [44]=>
+ int(0)
+ [45]=>
+ int(0)
+ [46]=>
+ int(0)
+ [47]=>
+ int(0)
+ [48]=>
+ int(0)
+ [49]=>
+ int(0)
+ [50]=>
+ int(0)
+ [51]=>
+ int(0)
+ [52]=>
+ int(0)
+ [53]=>
+ int(0)
+ [54]=>
+ int(0)
+ [55]=>
+ int(0)
+ [56]=>
+ int(0)
+ [57]=>
+ int(0)
+ [58]=>
+ int(0)
+ [59]=>
+ int(0)
+ [60]=>
+ int(0)
+ [61]=>
+ int(0)
+ [62]=>
+ int(0)
+ [63]=>
+ int(0)
+ [64]=>
+ int(0)
+ [65]=>
+ int(0)
+ [66]=>
+ int(0)
+ [67]=>
+ int(0)
+ [68]=>
+ int(0)
+ [69]=>
+ int(0)
+ [70]=>
+ int(0)
+ [71]=>
+ int(0)
+ [72]=>
+ int(0)
+ [73]=>
+ int(0)
+ [74]=>
+ int(0)
+ [75]=>
+ int(0)
+ [76]=>
+ int(0)
+ [77]=>
+ int(0)
+ [78]=>
+ int(0)
+ [79]=>
+ int(0)
+ [80]=>
+ int(0)
+ [81]=>
+ int(0)
+ [82]=>
+ int(0)
+ [83]=>
+ int(0)
+ [84]=>
+ int(0)
+ [85]=>
+ int(0)
+ [86]=>
+ int(0)
+ [87]=>
+ int(0)
+ [88]=>
+ int(0)
+ [89]=>
+ int(0)
+ [90]=>
+ int(0)
+ [91]=>
+ int(0)
+ [92]=>
+ int(0)
+ [93]=>
+ int(0)
+ [94]=>
+ int(0)
+ [95]=>
+ int(0)
+ [96]=>
+ int(0)
+ [97]=>
+ int(0)
+ [98]=>
+ int(0)
+ [99]=>
+ int(0)
+ [100]=>
+ int(0)
+ [101]=>
+ int(0)
+ [102]=>
+ int(0)
+ [103]=>
+ int(0)
+ [104]=>
+ int(0)
+ [105]=>
+ int(0)
+ [106]=>
+ int(0)
+ [107]=>
+ int(0)
+ [108]=>
+ int(0)
+ [109]=>
+ int(0)
+ [110]=>
+ int(0)
+ [111]=>
+ int(0)
+ [112]=>
+ int(0)
+ [113]=>
+ int(0)
+ [114]=>
+ int(0)
+ [115]=>
+ int(0)
+ [116]=>
+ int(0)
+ [117]=>
+ int(0)
+ [118]=>
+ int(0)
+ [119]=>
+ int(0)
+ [120]=>
+ int(0)
+ [121]=>
+ int(0)
+ [122]=>
+ int(0)
+ [123]=>
+ int(0)
+ [124]=>
+ int(0)
+ [125]=>
+ int(0)
+ [126]=>
+ int(0)
+ [127]=>
+ int(0)
+ [128]=>
+ int(0)
+ [129]=>
+ int(0)
+ [130]=>
+ int(0)
+ [131]=>
+ int(0)
+ [132]=>
+ int(0)
+ [133]=>
+ int(0)
+ [134]=>
+ int(0)
+ [135]=>
+ int(0)
+ [136]=>
+ int(0)
+ [137]=>
+ int(0)
+ [138]=>
+ int(0)
+ [139]=>
+ int(0)
+ [140]=>
+ int(0)
+ [141]=>
+ int(0)
+ [142]=>
+ int(0)
+ [143]=>
+ int(0)
+ [144]=>
+ int(0)
+ [145]=>
+ int(0)
+ [146]=>
+ int(0)
+ [147]=>
+ int(0)
+ [148]=>
+ int(0)
+ [149]=>
+ int(0)
+ [150]=>
+ int(0)
+ [151]=>
+ int(0)
+ [152]=>
+ int(0)
+ [153]=>
+ int(0)
+ [154]=>
+ int(0)
+ [155]=>
+ int(0)
+ [156]=>
+ int(0)
+ [157]=>
+ int(0)
+ [158]=>
+ int(0)
+ [159]=>
+ int(0)
+ [160]=>
+ int(0)
+ [161]=>
+ int(0)
+ [162]=>
+ int(0)
+ [163]=>
+ int(0)
+ [164]=>
+ int(0)
+ [165]=>
+ int(0)
+ [166]=>
+ int(0)
+ [167]=>
+ int(0)
+ [168]=>
+ int(0)
+ [169]=>
+ int(0)
+ [170]=>
+ int(0)
+ [171]=>
+ int(0)
+ [172]=>
+ int(0)
+ [173]=>
+ int(0)
+ [174]=>
+ int(0)
+ [175]=>
+ int(0)
+ [176]=>
+ int(0)
+ [177]=>
+ int(0)
+ [178]=>
+ int(0)
+ [179]=>
+ int(0)
+ [180]=>
+ int(0)
+ [181]=>
+ int(0)
+ [182]=>
+ int(0)
+ [183]=>
+ int(0)
+ [184]=>
+ int(0)
+ [185]=>
+ int(0)
+ [186]=>
+ int(0)
+ [187]=>
+ int(0)
+ [188]=>
+ int(0)
+ [189]=>
+ int(0)
+ [190]=>
+ int(0)
+ [191]=>
+ int(0)
+ [192]=>
+ int(0)
+ [193]=>
+ int(0)
+ [194]=>
+ int(0)
+ [195]=>
+ int(0)
+ [196]=>
+ int(0)
+ [197]=>
+ int(0)
+ [198]=>
+ int(0)
+ [199]=>
+ int(0)
+ [200]=>
+ int(0)
+ [201]=>
+ int(0)
+ [202]=>
+ int(0)
+ [203]=>
+ int(0)
+ [204]=>
+ int(0)
+ [205]=>
+ int(0)
+ [206]=>
+ int(0)
+ [207]=>
+ int(0)
+ [208]=>
+ int(0)
+ [209]=>
+ int(0)
+ [210]=>
+ int(0)
+ [211]=>
+ int(0)
+ [212]=>
+ int(0)
+ [213]=>
+ int(0)
+ [214]=>
+ int(0)
+ [215]=>
+ int(0)
+ [216]=>
+ int(0)
+ [217]=>
+ int(0)
+ [218]=>
+ int(0)
+ [219]=>
+ int(0)
+ [220]=>
+ int(0)
+ [221]=>
+ int(0)
+ [222]=>
+ int(0)
+ [223]=>
+ int(0)
+ [224]=>
+ int(0)
+ [225]=>
+ int(0)
+ [226]=>
+ int(0)
+ [227]=>
+ int(0)
+ [228]=>
+ int(0)
+ [229]=>
+ int(0)
+ [230]=>
+ int(0)
+ [231]=>
+ int(0)
+ [232]=>
+ int(0)
+ [233]=>
+ int(0)
+ [234]=>
+ int(0)
+ [235]=>
+ int(0)
+ [236]=>
+ int(0)
+ [237]=>
+ int(0)
+ [238]=>
+ int(0)
+ [239]=>
+ int(0)
+ [240]=>
+ int(0)
+ [241]=>
+ int(0)
+ [242]=>
+ int(0)
+ [243]=>
+ int(0)
+ [244]=>
+ int(0)
+ [245]=>
+ int(0)
+ [246]=>
+ int(0)
+ [247]=>
+ int(0)
+ [248]=>
+ int(0)
+ [249]=>
+ int(0)
+ [250]=>
+ int(0)
+ [251]=>
+ int(0)
+ [252]=>
+ int(0)
+ [253]=>
+ int(0)
+ [254]=>
+ int(0)
+ [255]=>
+ int(1)
+ [256]=>
+ int(0)
+ [257]=>
+ int(65280)
+ [258]=>
+ int(32512)
+ [259]=>
+ int(49152)
+ [260]=>
+ int(0)
+ [261]=>
+ int(0)
+ [262]=>
+ int(0)
+ [263]=>
+ int(0)
+ [264]=>
+ int(0)
+ [265]=>
+ int(0)
+ [266]=>
+ int(0)
+ [267]=>
+ int(0)
+ [268]=>
+ int(0)
+ [269]=>
+ int(0)
+ [270]=>
+ int(0)
+ [271]=>
+ int(0)
+ [272]=>
+ int(11945)
+ [273]=>
+ int(1914)
+ [274]=>
+ int(0)
+ [275]=>
+ int(24609)
+ [276]=>
+ int(1088)
+ [277]=>
+ int(960)
+ [278]=>
+ int(0)
+ [279]=>
+ int(0)
+ [280]=>
+ int(20000)
+ [281]=>
+ int(8414)
+ [282]=>
+ int(65436)
+ [283]=>
+ int(0)
+ [284]=>
+ int(47655)
+ [285]=>
+ int(8)
+ [286]=>
+ int(37936)
+ [287]=>
+ int(8406)
+ [288]=>
+ int(0)
+ [289]=>
+ int(0)
+ [290]=>
+ int(0)
+ [291]=>
+ int(0)
+ [292]=>
+ int(0)
+ [293]=>
+ int(0)
+ [294]=>
+ int(0)
+ [295]=>
+ int(0)
+ [296]=>
+ int(0)
+ [297]=>
+ int(64652)
+ [298]=>
+ int(50264)
+ [299]=>
+ int(0)
+ [300]=>
+ int(0)
+ [301]=>
+ int(64887)
+ [302]=>
+ int(50264)
+ [303]=>
+ int(0)
+ [304]=>
+ int(25714)
+ [305]=>
+ int(26220)
+ [306]=>
+ int(17235)
+ [307]=>
+ int(19777)
+ [308]=>
+ int(65535)
+ [309]=>
+ int(65535)
+ [310]=>
+ int(65535)
+ [311]=>
+ int(65535)
+ [312]=>
+ int(65535)
+ [313]=>
+ int(65535)
+ [314]=>
+ int(65535)
+ [315]=>
+ int(65535)
+ [316]=>
+ int(501)
+ [317]=>
+ int(0)
+ [318]=>
+ int(20)
+ [319]=>
+ int(0)
+ [320]=>
+ int(0)
+ [321]=>
+ int(0)
+ [322]=>
+ int(16877)
+ [323]=>
+ int(0)
+ [324]=>
+ int(3)
+ [325]=>
+ int(0)
+ [326]=>
+ int(0)
+ [327]=>
+ int(0)
+ [328]=>
+ int(0)
+ [329]=>
+ int(0)
+ [330]=>
+ int(0)
+ [331]=>
+ int(0)
+ [332]=>
+ int(65535)
+ [333]=>
+ int(65535)
+ [334]=>
+ int(65535)
+ [335]=>
+ int(65535)
+ [336]=>
+ int(65535)
+ [337]=>
+ int(65535)
+ [338]=>
+ int(65535)
+ [339]=>
+ int(65535)
+ [340]=>
+ int(0)
+ [341]=>
+ int(0)
+ [342]=>
+ int(52840)
+ [343]=>
+ int(2025)
+ [344]=>
+ int(16)
+ [345]=>
+ int(57377)
+ [346]=>
+ int(1024)
+ [347]=>
+ int(960)
+ [348]=>
+ int(0)
+ [349]=>
+ int(0)
+ [350]=>
+ int(27136)
+ [351]=>
+ int(8414)
+ [352]=>
+ int(65436)
+ [353]=>
+ int(0)
+ [354]=>
+ int(47655)
+ [355]=>
+ int(8)
+ [356]=>
+ int(62400)
+ [357]=>
+ int(8407)
+ [358]=>
+ int(0)
+ [359]=>
+ int(0)
+ [360]=>
+ int(0)
+ [361]=>
+ int(0)
+ [362]=>
+ int(0)
+ [363]=>
+ int(0)
+ [364]=>
+ int(0)
+ [365]=>
+ int(0)
+ [366]=>
+ int(0)
+ [367]=>
+ int(64857)
+ [368]=>
+ int(50264)
+ [369]=>
+ int(0)
+ [370]=>
+ int(0)
+ [371]=>
+ int(64892)
+ [372]=>
+ int(50264)
+ [373]=>
+ int(0)
+ [374]=>
+ int(25714)
+ [375]=>
+ int(26220)
+ [376]=>
+ int(17235)
+ [377]=>
+ int(19777)
+ [378]=>
+ int(65535)
+ [379]=>
+ int(65535)
+ [380]=>
+ int(65535)
+ [381]=>
+ int(65535)
+ [382]=>
+ int(65535)
+ [383]=>
+ int(65535)
+ [384]=>
+ int(65535)
+ [385]=>
+ int(65535)
+ [386]=>
+ int(501)
+ [387]=>
+ int(0)
+ [388]=>
+ int(20)
+ [389]=>
+ int(0)
+ [390]=>
+ int(0)
+ [391]=>
+ int(0)
+ [392]=>
+ int(16877)
+ [393]=>
+ int(0)
+ [394]=>
+ int(3)
+ [395]=>
+ int(0)
+ [396]=>
+ int(0)
+ [397]=>
+ int(0)
+ [398]=>
+ int(0)
+ [399]=>
+ int(0)
+ [400]=>
+ int(0)
+ [401]=>
+ int(0)
+ [402]=>
+ int(65535)
+ [403]=>
+ int(65535)
+ [404]=>
+ int(65535)
+ [405]=>
+ int(65535)
+ [406]=>
+ int(65535)
+ [407]=>
+ int(65535)
+ [408]=>
+ int(65535)
+ [409]=>
+ int(65535)
+ [410]=>
+ int(0)
+ [411]=>
+ int(0)
+ [412]=>
+ int(53440)
+ [413]=>
+ int(2025)
+ [414]=>
+ int(16)
+ [415]=>
+ int(57377)
+ [416]=>
+ int(1024)
+ [417]=>
+ int(960)
+ [418]=>
+ int(0)
+ [419]=>
+ int(0)
+ [420]=>
+ int(41120)
+ [421]=>
+ int(9024)
+ [422]=>
+ int(65436)
+ [423]=>
+ int(0)
+ [424]=>
+ int(47655)
+ [425]=>
+ int(8)
+ [426]=>
+ int(24480)
+ [427]=>
+ int(8404)
+ [428]=>
+ int(0)
+ [429]=>
+ int(0)
+ [430]=>
+ int(0)
+ [431]=>
+ int(0)
+ [432]=>
+ int(0)
+ [433]=>
+ int(0)
+ [434]=>
+ int(0)
+ [435]=>
+ int(0)
+ [436]=>
+ int(0)
+ [437]=>
+ int(21315)
+ [438]=>
+ int(50294)
+ [439]=>
+ int(0)
+ [440]=>
+ int(0)
+ [441]=>
+ int(53635)
+ [442]=>
+ int(50294)
+ [443]=>
+ int(0)
+ [444]=>
+ int(25714)
+ [445]=>
+ int(26220)
+ [446]=>
+ int(17235)
+ [447]=>
+ int(19777)
+ [448]=>
+ int(65535)
+ [449]=>
+ int(65535)
+ [450]=>
+ int(65535)
+ [451]=>
+ int(65535)
+ [452]=>
+ int(65535)
+ [453]=>
+ int(65535)
+ [454]=>
+ int(65535)
+ [455]=>
+ int(65535)
+ [456]=>
+ int(501)
+ [457]=>
+ int(0)
+ [458]=>
+ int(20)
+ [459]=>
+ int(0)
+ [460]=>
+ int(0)
+ [461]=>
+ int(0)
+ [462]=>
+ int(16877)
+ [463]=>
+ int(0)
+ [464]=>
+ int(3)
+ [465]=>
+ int(0)
+ [466]=>
+ int(0)
+ [467]=>
+ int(0)
+ [468]=>
+ int(0)
+ [469]=>
+ int(0)
+ [470]=>
+ int(0)
+ [471]=>
+ int(0)
+ [472]=>
+ int(65535)
+ [473]=>
+ int(65535)
+ [474]=>
+ int(65535)
+ [475]=>
+ int(65535)
+ [476]=>
+ int(65535)
+ [477]=>
+ int(65535)
+ [478]=>
+ int(65535)
+ [479]=>
+ int(65535)
+ [480]=>
+ int(0)
+ [481]=>
+ int(0)
+ [482]=>
+ int(54028)
+ [483]=>
+ int(2772)
+ [484]=>
+ int(16)
+ [485]=>
+ int(57377)
+ [486]=>
+ int(1024)
+ [487]=>
+ int(960)
+ [488]=>
+ int(0)
+ [489]=>
+ int(0)
+ [490]=>
+ int(42384)
+ [491]=>
+ int(8408)
+ [492]=>
+ int(65436)
+ [493]=>
+ int(0)
+ [494]=>
+ int(47655)
+ [495]=>
+ int(8)
+ [496]=>
+ int(1136)
+ [497]=>
+ int(8348)
+ [498]=>
+ int(0)
+ [499]=>
+ int(0)
+ [500]=>
+ int(0)
+ [501]=>
+ int(0)
+ [502]=>
+ int(0)
+ [503]=>
+ int(0)
+ [504]=>
+ int(0)
+ [505]=>
+ int(0)
+ [506]=>
+ int(0)
+ [507]=>
+ int(12326)
+ [508]=>
+ int(50261)
+ [509]=>
+ int(0)
+ [510]=>
+ int(0)
+ [511]=>
+ int(12326)
+ [512]=>
+ int(0)
+ [513]=>
+ int(65280)
+ [514]=>
+ int(32512)
+ [515]=>
+ int(49152)
+ [516]=>
+ int(0)
+ [517]=>
+ int(0)
+ [518]=>
+ int(22663)
+ [519]=>
+ int(2)
+ [520]=>
+ int(0)
+ [521]=>
+ int(0)
+ [522]=>
+ int(24576)
+ [523]=>
+ int(2)
+ [524]=>
+ int(0)
+ [525]=>
+ int(0)
+ [526]=>
+ int(501)
+ [527]=>
+ int(0)
+ [528]=>
+ int(20)
+ [529]=>
+ int(0)
+ [530]=>
+ int(0)
+ [531]=>
+ int(0)
+ [532]=>
+ int(33188)
+ [533]=>
+ int(0)
+ [534]=>
+ int(0)
+ [535]=>
+ int(0)
+ [536]=>
+ int(0)
+ [537]=>
+ int(0)
+ [538]=>
+ int(0)
+ [539]=>
+ int(0)
+ [540]=>
+ int(0)
+ [541]=>
+ int(0)
+ [542]=>
+ int(0)
+ [543]=>
+ int(0)
+ [544]=>
+ int(0)
+ [545]=>
+ int(0)
+ [546]=>
+ int(0)
+ [547]=>
+ int(0)
+ [548]=>
+ int(0)
+ [549]=>
+ int(0)
+ [550]=>
+ int(0)
+ [551]=>
+ int(0)
+ [552]=>
+ int(51766)
+ [553]=>
+ int(1946)
+ [554]=>
+ int(0)
+ [555]=>
+ int(24609)
+ [556]=>
+ int(1088)
+ [557]=>
+ int(960)
+ [558]=>
+ int(0)
+ [559]=>
+ int(0)
+ [560]=>
+ int(0)
+ [561]=>
+ int(0)
+ [562]=>
+ int(25116)
+ [563]=>
+ int(2012)
+ [564]=>
+ int(0)
+ [565]=>
+ int(0)
+ [566]=>
+ int(0)
+ [567]=>
+ int(0)
+ [568]=>
+ int(0)
+ [569]=>
+ int(0)
+ [570]=>
+ int(0)
+ [571]=>
+ int(0)
+ [572]=>
+ int(0)
+ [573]=>
+ int(0)
+ [574]=>
+ int(0)
+ [575]=>
+ int(0)
+ [576]=>
+ int(0)
+ [577]=>
+ int(0)
+ [578]=>
+ int(0)
+ [579]=>
+ int(0)
+ [580]=>
+ int(0)
+ [581]=>
+ int(0)
+ [582]=>
+ int(0)
+ [583]=>
+ int(0)
+ [584]=>
+ int(0)
+ [585]=>
+ int(0)
+ [586]=>
+ int(0)
+ [587]=>
+ int(0)
+ [588]=>
+ int(0)
+ [589]=>
+ int(0)
+ [590]=>
+ int(0)
+ [591]=>
+ int(0)
+ [592]=>
+ int(0)
+ [593]=>
+ int(0)
+ [594]=>
+ int(0)
+ [595]=>
+ int(0)
+ [596]=>
+ int(0)
+ [597]=>
+ int(0)
+ [598]=>
+ int(0)
+ [599]=>
+ int(0)
+ [600]=>
+ int(0)
+ [601]=>
+ int(0)
+ [602]=>
+ int(0)
+ [603]=>
+ int(0)
+ [604]=>
+ int(0)
+ [605]=>
+ int(0)
+ [606]=>
+ int(0)
+ [607]=>
+ int(0)
+ [608]=>
+ int(0)
+ [609]=>
+ int(0)
+ [610]=>
+ int(0)
+ [611]=>
+ int(0)
+ [612]=>
+ int(0)
+ [613]=>
+ int(0)
+ [614]=>
+ int(0)
+ [615]=>
+ int(0)
+ [616]=>
+ int(0)
+ [617]=>
+ int(0)
+ [618]=>
+ int(0)
+ [619]=>
+ int(0)
+ [620]=>
+ int(0)
+ [621]=>
+ int(0)
+ [622]=>
+ int(0)
+ [623]=>
+ int(0)
+ [624]=>
+ int(0)
+ [625]=>
+ int(0)
+ [626]=>
+ int(0)
+ [627]=>
+ int(0)
+ [628]=>
+ int(0)
+ [629]=>
+ int(0)
+ [630]=>
+ int(0)
+ [631]=>
+ int(0)
+ [632]=>
+ int(0)
+ [633]=>
+ int(0)
+ [634]=>
+ int(0)
+ [635]=>
+ int(0)
+ [636]=>
+ int(0)
+ [637]=>
+ int(0)
+ [638]=>
+ int(0)
+ [639]=>
+ int(0)
+ [640]=>
+ int(0)
+ [641]=>
+ int(0)
+ [642]=>
+ int(0)
+ [643]=>
+ int(0)
+ [644]=>
+ int(0)
+ [645]=>
+ int(0)
+ [646]=>
+ int(0)
+ [647]=>
+ int(0)
+ [648]=>
+ int(0)
+ [649]=>
+ int(0)
+ [650]=>
+ int(0)
+ [651]=>
+ int(0)
+ [652]=>
+ int(0)
+ [653]=>
+ int(0)
+ [654]=>
+ int(0)
+ [655]=>
+ int(0)
+ [656]=>
+ int(0)
+ [657]=>
+ int(0)
+ [658]=>
+ int(0)
+ [659]=>
+ int(0)
+ [660]=>
+ int(0)
+ [661]=>
+ int(0)
+ [662]=>
+ int(0)
+ [663]=>
+ int(0)
+ [664]=>
+ int(0)
+ [665]=>
+ int(0)
+ [666]=>
+ int(0)
+ [667]=>
+ int(0)
+ [668]=>
+ int(0)
+ [669]=>
+ int(0)
+ [670]=>
+ int(0)
+ [671]=>
+ int(0)
+ [672]=>
+ int(0)
+ [673]=>
+ int(0)
+ [674]=>
+ int(0)
+ [675]=>
+ int(0)
+ [676]=>
+ int(0)
+ [677]=>
+ int(0)
+ [678]=>
+ int(0)
+ [679]=>
+ int(0)
+ [680]=>
+ int(0)
+ [681]=>
+ int(0)
+ [682]=>
+ int(0)
+ [683]=>
+ int(0)
+ [684]=>
+ int(0)
+ [685]=>
+ int(0)
+ [686]=>
+ int(0)
+ [687]=>
+ int(0)
+ [688]=>
+ int(0)
+ [689]=>
+ int(0)
+ [690]=>
+ int(0)
+ [691]=>
+ int(0)
+ [692]=>
+ int(0)
+ [693]=>
+ int(0)
+ [694]=>
+ int(0)
+ [695]=>
+ int(0)
+ [696]=>
+ int(0)
+ [697]=>
+ int(0)
+ [698]=>
+ int(0)
+ [699]=>
+ int(0)
+ [700]=>
+ int(0)
+ [701]=>
+ int(0)
+ [702]=>
+ int(0)
+ [703]=>
+ int(0)
+ [704]=>
+ int(0)
+ [705]=>
+ int(0)
+ [706]=>
+ int(0)
+ [707]=>
+ int(0)
+ [708]=>
+ int(0)
+ [709]=>
+ int(0)
+ [710]=>
+ int(0)
+ [711]=>
+ int(0)
+ [712]=>
+ int(0)
+ [713]=>
+ int(0)
+ [714]=>
+ int(0)
+ [715]=>
+ int(0)
+ [716]=>
+ int(0)
+ [717]=>
+ int(0)
+ [718]=>
+ int(0)
+ [719]=>
+ int(0)
+ [720]=>
+ int(0)
+ [721]=>
+ int(0)
+ [722]=>
+ int(0)
+ [723]=>
+ int(0)
+ [724]=>
+ int(0)
+ [725]=>
+ int(0)
+ [726]=>
+ int(0)
+ [727]=>
+ int(0)
+ [728]=>
+ int(0)
+ [729]=>
+ int(0)
+ [730]=>
+ int(0)
+ [731]=>
+ int(0)
+ [732]=>
+ int(0)
+ [733]=>
+ int(0)
+ [734]=>
+ int(0)
+ [735]=>
+ int(0)
+ [736]=>
+ int(0)
+ [737]=>
+ int(0)
+ [738]=>
+ int(0)
+ [739]=>
+ int(0)
+ [740]=>
+ int(0)
+ [741]=>
+ int(0)
+ [742]=>
+ int(0)
+ [743]=>
+ int(0)
+ [744]=>
+ int(0)
+ [745]=>
+ int(0)
+ [746]=>
+ int(0)
+ [747]=>
+ int(0)
+ [748]=>
+ int(0)
+ [749]=>
+ int(0)
+ [750]=>
+ int(0)
+ [751]=>
+ int(0)
+ [752]=>
+ int(0)
+ [753]=>
+ int(0)
+ [754]=>
+ int(0)
+ [755]=>
+ int(0)
+ [756]=>
+ int(0)
+ [757]=>
+ int(0)
+ [758]=>
+ int(0)
+ [759]=>
+ int(0)
+ [760]=>
+ int(0)
+ [761]=>
+ int(0)
+ [762]=>
+ int(0)
+ [763]=>
+ int(0)
+ [764]=>
+ int(0)
+ [765]=>
+ int(0)
+ [766]=>
+ int(0)
+ [767]=>
+ int(0)
+ }
+ ["Copyright"]=>
+ string(12) "Eric Stewart"
+ ["InterOperabilityIndex"]=>
+ string(3) "R98"
+ ["InterOperabilityVersion"]=>
+ string(4) "0100"
+ ["RelatedFileFormat"]=>
+ string(13) "image026.tiff"
+ ["RelatedImageWidth"]=>
+ int(1)
+ ["RelatedImageHeight"]=>
+ int(1)
+}
+--CREDIT--
+Eric Stewart <ericleestewart@gmail.com>
diff --git a/ext/exif/tests/exif027.phpt b/ext/exif/tests/exif027.phpt
new file mode 100644
index 000000000..f527c37bf
--- /dev/null
+++ b/ext/exif/tests/exif027.phpt
@@ -0,0 +1,1632 @@
+--TEST--
+Check for exif_read_data, TIFF with IFD0, EXIF, INTEROP data in Motorola byte-order.
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--INI--
+output_handler=
+zlib.output_compression=0
+--FILE--
+<?php
+var_dump(exif_read_data(dirname(__FILE__).'/image027.tiff'));
+?>
+--EXPECTF--
+array(31) {
+ ["FileName"]=>
+ string(13) "image027.tiff"
+ ["FileDateTime"]=>
+ int(%d)
+ ["FileSize"]=>
+ int(%d)
+ ["FileType"]=>
+ int(8)
+ ["MimeType"]=>
+ string(10) "image/tiff"
+ ["SectionsFound"]=>
+ string(28) "ANY_TAG, IFD0, EXIF, INTEROP"
+ ["COMPUTED"]=>
+ array(8) {
+ ["html"]=>
+ string(20) "width="1" height="1""
+ ["Height"]=>
+ int(1)
+ ["Width"]=>
+ int(1)
+ ["IsColor"]=>
+ int(1)
+ ["ByteOrderMotorola"]=>
+ int(1)
+ ["Copyright"]=>
+ string(24) "Eric Stewart, Hex Editor"
+ ["Copyright.Photographer"]=>
+ string(12) "Eric Stewart"
+ ["Copyright.Editor"]=>
+ string(10) "Hex Editor"
+ }
+ ["ImageWidth"]=>
+ int(1)
+ ["ImageLength"]=>
+ int(1)
+ ["BitsPerSample"]=>
+ int(8)
+ ["Compression"]=>
+ int(5)
+ ["PhotometricInterpretation"]=>
+ int(3)
+ ["ImageDescription"]=>
+ string(15) "My description."
+ ["Make"]=>
+ string(11) "OpenShutter"
+ ["Model"]=>
+ string(8) "OS 1.0.0"
+ ["StripOffsets"]=>
+ int(1980)
+ ["SamplesPerPixel"]=>
+ int(1)
+ ["RowsPerStrip"]=>
+ int(8)
+ ["StripByteCounts"]=>
+ int(4)
+ ["XResolution"]=>
+ string(17) "381681664/2097152"
+ ["YResolution"]=>
+ string(17) "381681664/2097152"
+ ["PlanarConfiguration"]=>
+ int(1)
+ ["ResolutionUnit"]=>
+ int(2)
+ ["Artist"]=>
+ string(12) "Eric Stewart"
+ ["ColorMap"]=>
+ array(768) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(65280)
+ [2]=>
+ int(32512)
+ [3]=>
+ int(49152)
+ [4]=>
+ int(99)
+ [5]=>
+ int(115)
+ [6]=>
+ int(116)
+ [7]=>
+ int(101)
+ [8]=>
+ int(119)
+ [9]=>
+ int(97)
+ [10]=>
+ int(114)
+ [11]=>
+ int(116)
+ [12]=>
+ int(0)
+ [13]=>
+ int(0)
+ [14]=>
+ int(0)
+ [15]=>
+ int(0)
+ [16]=>
+ int(0)
+ [17]=>
+ int(0)
+ [18]=>
+ int(0)
+ [19]=>
+ int(0)
+ [20]=>
+ int(0)
+ [21]=>
+ int(0)
+ [22]=>
+ int(0)
+ [23]=>
+ int(0)
+ [24]=>
+ int(0)
+ [25]=>
+ int(0)
+ [26]=>
+ int(0)
+ [27]=>
+ int(0)
+ [28]=>
+ int(0)
+ [29]=>
+ int(0)
+ [30]=>
+ int(0)
+ [31]=>
+ int(0)
+ [32]=>
+ int(0)
+ [33]=>
+ int(0)
+ [34]=>
+ int(0)
+ [35]=>
+ int(0)
+ [36]=>
+ int(0)
+ [37]=>
+ int(0)
+ [38]=>
+ int(0)
+ [39]=>
+ int(0)
+ [40]=>
+ int(0)
+ [41]=>
+ int(0)
+ [42]=>
+ int(0)
+ [43]=>
+ int(0)
+ [44]=>
+ int(0)
+ [45]=>
+ int(0)
+ [46]=>
+ int(0)
+ [47]=>
+ int(0)
+ [48]=>
+ int(0)
+ [49]=>
+ int(0)
+ [50]=>
+ int(0)
+ [51]=>
+ int(0)
+ [52]=>
+ int(0)
+ [53]=>
+ int(0)
+ [54]=>
+ int(0)
+ [55]=>
+ int(0)
+ [56]=>
+ int(0)
+ [57]=>
+ int(0)
+ [58]=>
+ int(0)
+ [59]=>
+ int(0)
+ [60]=>
+ int(0)
+ [61]=>
+ int(0)
+ [62]=>
+ int(0)
+ [63]=>
+ int(0)
+ [64]=>
+ int(0)
+ [65]=>
+ int(0)
+ [66]=>
+ int(0)
+ [67]=>
+ int(0)
+ [68]=>
+ int(0)
+ [69]=>
+ int(0)
+ [70]=>
+ int(0)
+ [71]=>
+ int(0)
+ [72]=>
+ int(0)
+ [73]=>
+ int(0)
+ [74]=>
+ int(0)
+ [75]=>
+ int(0)
+ [76]=>
+ int(0)
+ [77]=>
+ int(0)
+ [78]=>
+ int(0)
+ [79]=>
+ int(0)
+ [80]=>
+ int(0)
+ [81]=>
+ int(0)
+ [82]=>
+ int(0)
+ [83]=>
+ int(0)
+ [84]=>
+ int(0)
+ [85]=>
+ int(0)
+ [86]=>
+ int(0)
+ [87]=>
+ int(0)
+ [88]=>
+ int(0)
+ [89]=>
+ int(0)
+ [90]=>
+ int(0)
+ [91]=>
+ int(0)
+ [92]=>
+ int(0)
+ [93]=>
+ int(0)
+ [94]=>
+ int(0)
+ [95]=>
+ int(0)
+ [96]=>
+ int(0)
+ [97]=>
+ int(0)
+ [98]=>
+ int(0)
+ [99]=>
+ int(0)
+ [100]=>
+ int(0)
+ [101]=>
+ int(0)
+ [102]=>
+ int(0)
+ [103]=>
+ int(0)
+ [104]=>
+ int(0)
+ [105]=>
+ int(0)
+ [106]=>
+ int(0)
+ [107]=>
+ int(0)
+ [108]=>
+ int(0)
+ [109]=>
+ int(0)
+ [110]=>
+ int(0)
+ [111]=>
+ int(0)
+ [112]=>
+ int(0)
+ [113]=>
+ int(0)
+ [114]=>
+ int(0)
+ [115]=>
+ int(0)
+ [116]=>
+ int(0)
+ [117]=>
+ int(0)
+ [118]=>
+ int(0)
+ [119]=>
+ int(0)
+ [120]=>
+ int(0)
+ [121]=>
+ int(0)
+ [122]=>
+ int(0)
+ [123]=>
+ int(0)
+ [124]=>
+ int(0)
+ [125]=>
+ int(0)
+ [126]=>
+ int(0)
+ [127]=>
+ int(0)
+ [128]=>
+ int(0)
+ [129]=>
+ int(0)
+ [130]=>
+ int(0)
+ [131]=>
+ int(0)
+ [132]=>
+ int(0)
+ [133]=>
+ int(0)
+ [134]=>
+ int(0)
+ [135]=>
+ int(0)
+ [136]=>
+ int(0)
+ [137]=>
+ int(0)
+ [138]=>
+ int(0)
+ [139]=>
+ int(0)
+ [140]=>
+ int(0)
+ [141]=>
+ int(0)
+ [142]=>
+ int(0)
+ [143]=>
+ int(0)
+ [144]=>
+ int(0)
+ [145]=>
+ int(0)
+ [146]=>
+ int(0)
+ [147]=>
+ int(0)
+ [148]=>
+ int(0)
+ [149]=>
+ int(0)
+ [150]=>
+ int(0)
+ [151]=>
+ int(0)
+ [152]=>
+ int(0)
+ [153]=>
+ int(0)
+ [154]=>
+ int(0)
+ [155]=>
+ int(0)
+ [156]=>
+ int(0)
+ [157]=>
+ int(0)
+ [158]=>
+ int(0)
+ [159]=>
+ int(0)
+ [160]=>
+ int(0)
+ [161]=>
+ int(0)
+ [162]=>
+ int(0)
+ [163]=>
+ int(0)
+ [164]=>
+ int(0)
+ [165]=>
+ int(0)
+ [166]=>
+ int(0)
+ [167]=>
+ int(0)
+ [168]=>
+ int(0)
+ [169]=>
+ int(0)
+ [170]=>
+ int(0)
+ [171]=>
+ int(0)
+ [172]=>
+ int(0)
+ [173]=>
+ int(0)
+ [174]=>
+ int(0)
+ [175]=>
+ int(0)
+ [176]=>
+ int(0)
+ [177]=>
+ int(0)
+ [178]=>
+ int(0)
+ [179]=>
+ int(0)
+ [180]=>
+ int(0)
+ [181]=>
+ int(0)
+ [182]=>
+ int(0)
+ [183]=>
+ int(0)
+ [184]=>
+ int(0)
+ [185]=>
+ int(0)
+ [186]=>
+ int(0)
+ [187]=>
+ int(0)
+ [188]=>
+ int(0)
+ [189]=>
+ int(0)
+ [190]=>
+ int(0)
+ [191]=>
+ int(0)
+ [192]=>
+ int(0)
+ [193]=>
+ int(0)
+ [194]=>
+ int(0)
+ [195]=>
+ int(0)
+ [196]=>
+ int(0)
+ [197]=>
+ int(0)
+ [198]=>
+ int(0)
+ [199]=>
+ int(0)
+ [200]=>
+ int(0)
+ [201]=>
+ int(0)
+ [202]=>
+ int(0)
+ [203]=>
+ int(0)
+ [204]=>
+ int(0)
+ [205]=>
+ int(0)
+ [206]=>
+ int(0)
+ [207]=>
+ int(0)
+ [208]=>
+ int(0)
+ [209]=>
+ int(0)
+ [210]=>
+ int(0)
+ [211]=>
+ int(0)
+ [212]=>
+ int(0)
+ [213]=>
+ int(0)
+ [214]=>
+ int(0)
+ [215]=>
+ int(0)
+ [216]=>
+ int(0)
+ [217]=>
+ int(0)
+ [218]=>
+ int(0)
+ [219]=>
+ int(0)
+ [220]=>
+ int(0)
+ [221]=>
+ int(0)
+ [222]=>
+ int(0)
+ [223]=>
+ int(0)
+ [224]=>
+ int(0)
+ [225]=>
+ int(0)
+ [226]=>
+ int(0)
+ [227]=>
+ int(0)
+ [228]=>
+ int(0)
+ [229]=>
+ int(0)
+ [230]=>
+ int(0)
+ [231]=>
+ int(0)
+ [232]=>
+ int(0)
+ [233]=>
+ int(0)
+ [234]=>
+ int(0)
+ [235]=>
+ int(0)
+ [236]=>
+ int(0)
+ [237]=>
+ int(0)
+ [238]=>
+ int(0)
+ [239]=>
+ int(0)
+ [240]=>
+ int(0)
+ [241]=>
+ int(0)
+ [242]=>
+ int(0)
+ [243]=>
+ int(0)
+ [244]=>
+ int(0)
+ [245]=>
+ int(0)
+ [246]=>
+ int(0)
+ [247]=>
+ int(0)
+ [248]=>
+ int(0)
+ [249]=>
+ int(0)
+ [250]=>
+ int(0)
+ [251]=>
+ int(0)
+ [252]=>
+ int(0)
+ [253]=>
+ int(0)
+ [254]=>
+ int(0)
+ [255]=>
+ int(1)
+ [256]=>
+ int(0)
+ [257]=>
+ int(65280)
+ [258]=>
+ int(32512)
+ [259]=>
+ int(49152)
+ [260]=>
+ int(0)
+ [261]=>
+ int(0)
+ [262]=>
+ int(0)
+ [263]=>
+ int(0)
+ [264]=>
+ int(0)
+ [265]=>
+ int(0)
+ [266]=>
+ int(0)
+ [267]=>
+ int(0)
+ [268]=>
+ int(0)
+ [269]=>
+ int(0)
+ [270]=>
+ int(0)
+ [271]=>
+ int(0)
+ [272]=>
+ int(11945)
+ [273]=>
+ int(1914)
+ [274]=>
+ int(0)
+ [275]=>
+ int(24609)
+ [276]=>
+ int(1088)
+ [277]=>
+ int(960)
+ [278]=>
+ int(0)
+ [279]=>
+ int(0)
+ [280]=>
+ int(20000)
+ [281]=>
+ int(8414)
+ [282]=>
+ int(65436)
+ [283]=>
+ int(0)
+ [284]=>
+ int(47655)
+ [285]=>
+ int(8)
+ [286]=>
+ int(37936)
+ [287]=>
+ int(8406)
+ [288]=>
+ int(0)
+ [289]=>
+ int(0)
+ [290]=>
+ int(0)
+ [291]=>
+ int(0)
+ [292]=>
+ int(0)
+ [293]=>
+ int(0)
+ [294]=>
+ int(0)
+ [295]=>
+ int(0)
+ [296]=>
+ int(0)
+ [297]=>
+ int(64652)
+ [298]=>
+ int(50264)
+ [299]=>
+ int(0)
+ [300]=>
+ int(0)
+ [301]=>
+ int(64887)
+ [302]=>
+ int(50264)
+ [303]=>
+ int(0)
+ [304]=>
+ int(25714)
+ [305]=>
+ int(26220)
+ [306]=>
+ int(17235)
+ [307]=>
+ int(19777)
+ [308]=>
+ int(65535)
+ [309]=>
+ int(65535)
+ [310]=>
+ int(65535)
+ [311]=>
+ int(65535)
+ [312]=>
+ int(65535)
+ [313]=>
+ int(65535)
+ [314]=>
+ int(65535)
+ [315]=>
+ int(65535)
+ [316]=>
+ int(501)
+ [317]=>
+ int(0)
+ [318]=>
+ int(20)
+ [319]=>
+ int(0)
+ [320]=>
+ int(0)
+ [321]=>
+ int(0)
+ [322]=>
+ int(16877)
+ [323]=>
+ int(0)
+ [324]=>
+ int(3)
+ [325]=>
+ int(0)
+ [326]=>
+ int(0)
+ [327]=>
+ int(0)
+ [328]=>
+ int(0)
+ [329]=>
+ int(0)
+ [330]=>
+ int(0)
+ [331]=>
+ int(0)
+ [332]=>
+ int(65535)
+ [333]=>
+ int(65535)
+ [334]=>
+ int(65535)
+ [335]=>
+ int(65535)
+ [336]=>
+ int(65535)
+ [337]=>
+ int(65535)
+ [338]=>
+ int(65535)
+ [339]=>
+ int(65535)
+ [340]=>
+ int(0)
+ [341]=>
+ int(0)
+ [342]=>
+ int(52840)
+ [343]=>
+ int(2025)
+ [344]=>
+ int(16)
+ [345]=>
+ int(57377)
+ [346]=>
+ int(1024)
+ [347]=>
+ int(960)
+ [348]=>
+ int(0)
+ [349]=>
+ int(0)
+ [350]=>
+ int(27136)
+ [351]=>
+ int(8414)
+ [352]=>
+ int(65436)
+ [353]=>
+ int(0)
+ [354]=>
+ int(47655)
+ [355]=>
+ int(8)
+ [356]=>
+ int(62400)
+ [357]=>
+ int(8407)
+ [358]=>
+ int(0)
+ [359]=>
+ int(0)
+ [360]=>
+ int(0)
+ [361]=>
+ int(0)
+ [362]=>
+ int(0)
+ [363]=>
+ int(0)
+ [364]=>
+ int(0)
+ [365]=>
+ int(0)
+ [366]=>
+ int(0)
+ [367]=>
+ int(64857)
+ [368]=>
+ int(50264)
+ [369]=>
+ int(0)
+ [370]=>
+ int(0)
+ [371]=>
+ int(64892)
+ [372]=>
+ int(50264)
+ [373]=>
+ int(0)
+ [374]=>
+ int(25714)
+ [375]=>
+ int(26220)
+ [376]=>
+ int(17235)
+ [377]=>
+ int(19777)
+ [378]=>
+ int(65535)
+ [379]=>
+ int(65535)
+ [380]=>
+ int(65535)
+ [381]=>
+ int(65535)
+ [382]=>
+ int(65535)
+ [383]=>
+ int(65535)
+ [384]=>
+ int(65535)
+ [385]=>
+ int(65535)
+ [386]=>
+ int(501)
+ [387]=>
+ int(0)
+ [388]=>
+ int(20)
+ [389]=>
+ int(0)
+ [390]=>
+ int(0)
+ [391]=>
+ int(0)
+ [392]=>
+ int(16877)
+ [393]=>
+ int(0)
+ [394]=>
+ int(3)
+ [395]=>
+ int(0)
+ [396]=>
+ int(0)
+ [397]=>
+ int(0)
+ [398]=>
+ int(0)
+ [399]=>
+ int(0)
+ [400]=>
+ int(0)
+ [401]=>
+ int(0)
+ [402]=>
+ int(65535)
+ [403]=>
+ int(65535)
+ [404]=>
+ int(65535)
+ [405]=>
+ int(65535)
+ [406]=>
+ int(65535)
+ [407]=>
+ int(65535)
+ [408]=>
+ int(65535)
+ [409]=>
+ int(65535)
+ [410]=>
+ int(0)
+ [411]=>
+ int(0)
+ [412]=>
+ int(53440)
+ [413]=>
+ int(2025)
+ [414]=>
+ int(16)
+ [415]=>
+ int(57377)
+ [416]=>
+ int(1024)
+ [417]=>
+ int(960)
+ [418]=>
+ int(0)
+ [419]=>
+ int(0)
+ [420]=>
+ int(41120)
+ [421]=>
+ int(9024)
+ [422]=>
+ int(65436)
+ [423]=>
+ int(0)
+ [424]=>
+ int(47655)
+ [425]=>
+ int(8)
+ [426]=>
+ int(24480)
+ [427]=>
+ int(8404)
+ [428]=>
+ int(0)
+ [429]=>
+ int(0)
+ [430]=>
+ int(0)
+ [431]=>
+ int(0)
+ [432]=>
+ int(0)
+ [433]=>
+ int(0)
+ [434]=>
+ int(0)
+ [435]=>
+ int(0)
+ [436]=>
+ int(0)
+ [437]=>
+ int(21315)
+ [438]=>
+ int(50294)
+ [439]=>
+ int(0)
+ [440]=>
+ int(0)
+ [441]=>
+ int(53635)
+ [442]=>
+ int(50294)
+ [443]=>
+ int(0)
+ [444]=>
+ int(25714)
+ [445]=>
+ int(26220)
+ [446]=>
+ int(17235)
+ [447]=>
+ int(19777)
+ [448]=>
+ int(65535)
+ [449]=>
+ int(65535)
+ [450]=>
+ int(65535)
+ [451]=>
+ int(65535)
+ [452]=>
+ int(65535)
+ [453]=>
+ int(65535)
+ [454]=>
+ int(65535)
+ [455]=>
+ int(65535)
+ [456]=>
+ int(501)
+ [457]=>
+ int(0)
+ [458]=>
+ int(20)
+ [459]=>
+ int(0)
+ [460]=>
+ int(0)
+ [461]=>
+ int(0)
+ [462]=>
+ int(16877)
+ [463]=>
+ int(0)
+ [464]=>
+ int(3)
+ [465]=>
+ int(0)
+ [466]=>
+ int(0)
+ [467]=>
+ int(0)
+ [468]=>
+ int(0)
+ [469]=>
+ int(0)
+ [470]=>
+ int(0)
+ [471]=>
+ int(0)
+ [472]=>
+ int(65535)
+ [473]=>
+ int(65535)
+ [474]=>
+ int(65535)
+ [475]=>
+ int(65535)
+ [476]=>
+ int(65535)
+ [477]=>
+ int(65535)
+ [478]=>
+ int(65535)
+ [479]=>
+ int(65535)
+ [480]=>
+ int(0)
+ [481]=>
+ int(0)
+ [482]=>
+ int(54028)
+ [483]=>
+ int(2772)
+ [484]=>
+ int(16)
+ [485]=>
+ int(57377)
+ [486]=>
+ int(1024)
+ [487]=>
+ int(960)
+ [488]=>
+ int(0)
+ [489]=>
+ int(0)
+ [490]=>
+ int(42384)
+ [491]=>
+ int(8408)
+ [492]=>
+ int(65436)
+ [493]=>
+ int(0)
+ [494]=>
+ int(47655)
+ [495]=>
+ int(8)
+ [496]=>
+ int(1136)
+ [497]=>
+ int(8348)
+ [498]=>
+ int(0)
+ [499]=>
+ int(0)
+ [500]=>
+ int(0)
+ [501]=>
+ int(0)
+ [502]=>
+ int(0)
+ [503]=>
+ int(0)
+ [504]=>
+ int(0)
+ [505]=>
+ int(0)
+ [506]=>
+ int(0)
+ [507]=>
+ int(12326)
+ [508]=>
+ int(50261)
+ [509]=>
+ int(0)
+ [510]=>
+ int(0)
+ [511]=>
+ int(12326)
+ [512]=>
+ int(0)
+ [513]=>
+ int(65280)
+ [514]=>
+ int(32512)
+ [515]=>
+ int(49152)
+ [516]=>
+ int(0)
+ [517]=>
+ int(0)
+ [518]=>
+ int(22663)
+ [519]=>
+ int(2)
+ [520]=>
+ int(0)
+ [521]=>
+ int(0)
+ [522]=>
+ int(24576)
+ [523]=>
+ int(2)
+ [524]=>
+ int(0)
+ [525]=>
+ int(0)
+ [526]=>
+ int(501)
+ [527]=>
+ int(0)
+ [528]=>
+ int(20)
+ [529]=>
+ int(0)
+ [530]=>
+ int(0)
+ [531]=>
+ int(0)
+ [532]=>
+ int(33188)
+ [533]=>
+ int(0)
+ [534]=>
+ int(0)
+ [535]=>
+ int(0)
+ [536]=>
+ int(0)
+ [537]=>
+ int(0)
+ [538]=>
+ int(0)
+ [539]=>
+ int(0)
+ [540]=>
+ int(0)
+ [541]=>
+ int(0)
+ [542]=>
+ int(0)
+ [543]=>
+ int(0)
+ [544]=>
+ int(0)
+ [545]=>
+ int(0)
+ [546]=>
+ int(0)
+ [547]=>
+ int(0)
+ [548]=>
+ int(0)
+ [549]=>
+ int(0)
+ [550]=>
+ int(0)
+ [551]=>
+ int(0)
+ [552]=>
+ int(51766)
+ [553]=>
+ int(1946)
+ [554]=>
+ int(0)
+ [555]=>
+ int(24609)
+ [556]=>
+ int(1088)
+ [557]=>
+ int(960)
+ [558]=>
+ int(0)
+ [559]=>
+ int(0)
+ [560]=>
+ int(0)
+ [561]=>
+ int(0)
+ [562]=>
+ int(25116)
+ [563]=>
+ int(2012)
+ [564]=>
+ int(0)
+ [565]=>
+ int(0)
+ [566]=>
+ int(0)
+ [567]=>
+ int(0)
+ [568]=>
+ int(0)
+ [569]=>
+ int(0)
+ [570]=>
+ int(0)
+ [571]=>
+ int(0)
+ [572]=>
+ int(0)
+ [573]=>
+ int(0)
+ [574]=>
+ int(0)
+ [575]=>
+ int(0)
+ [576]=>
+ int(0)
+ [577]=>
+ int(0)
+ [578]=>
+ int(0)
+ [579]=>
+ int(0)
+ [580]=>
+ int(0)
+ [581]=>
+ int(0)
+ [582]=>
+ int(0)
+ [583]=>
+ int(0)
+ [584]=>
+ int(0)
+ [585]=>
+ int(0)
+ [586]=>
+ int(0)
+ [587]=>
+ int(0)
+ [588]=>
+ int(0)
+ [589]=>
+ int(0)
+ [590]=>
+ int(0)
+ [591]=>
+ int(0)
+ [592]=>
+ int(0)
+ [593]=>
+ int(0)
+ [594]=>
+ int(0)
+ [595]=>
+ int(0)
+ [596]=>
+ int(0)
+ [597]=>
+ int(0)
+ [598]=>
+ int(0)
+ [599]=>
+ int(0)
+ [600]=>
+ int(0)
+ [601]=>
+ int(0)
+ [602]=>
+ int(0)
+ [603]=>
+ int(0)
+ [604]=>
+ int(0)
+ [605]=>
+ int(0)
+ [606]=>
+ int(0)
+ [607]=>
+ int(0)
+ [608]=>
+ int(0)
+ [609]=>
+ int(0)
+ [610]=>
+ int(0)
+ [611]=>
+ int(0)
+ [612]=>
+ int(0)
+ [613]=>
+ int(0)
+ [614]=>
+ int(0)
+ [615]=>
+ int(0)
+ [616]=>
+ int(0)
+ [617]=>
+ int(0)
+ [618]=>
+ int(0)
+ [619]=>
+ int(0)
+ [620]=>
+ int(0)
+ [621]=>
+ int(0)
+ [622]=>
+ int(0)
+ [623]=>
+ int(0)
+ [624]=>
+ int(0)
+ [625]=>
+ int(0)
+ [626]=>
+ int(0)
+ [627]=>
+ int(0)
+ [628]=>
+ int(0)
+ [629]=>
+ int(0)
+ [630]=>
+ int(0)
+ [631]=>
+ int(0)
+ [632]=>
+ int(0)
+ [633]=>
+ int(0)
+ [634]=>
+ int(0)
+ [635]=>
+ int(0)
+ [636]=>
+ int(0)
+ [637]=>
+ int(0)
+ [638]=>
+ int(0)
+ [639]=>
+ int(0)
+ [640]=>
+ int(0)
+ [641]=>
+ int(0)
+ [642]=>
+ int(0)
+ [643]=>
+ int(0)
+ [644]=>
+ int(0)
+ [645]=>
+ int(0)
+ [646]=>
+ int(0)
+ [647]=>
+ int(0)
+ [648]=>
+ int(0)
+ [649]=>
+ int(0)
+ [650]=>
+ int(0)
+ [651]=>
+ int(0)
+ [652]=>
+ int(0)
+ [653]=>
+ int(0)
+ [654]=>
+ int(0)
+ [655]=>
+ int(0)
+ [656]=>
+ int(0)
+ [657]=>
+ int(0)
+ [658]=>
+ int(0)
+ [659]=>
+ int(0)
+ [660]=>
+ int(0)
+ [661]=>
+ int(0)
+ [662]=>
+ int(0)
+ [663]=>
+ int(0)
+ [664]=>
+ int(0)
+ [665]=>
+ int(0)
+ [666]=>
+ int(0)
+ [667]=>
+ int(0)
+ [668]=>
+ int(0)
+ [669]=>
+ int(0)
+ [670]=>
+ int(0)
+ [671]=>
+ int(0)
+ [672]=>
+ int(0)
+ [673]=>
+ int(0)
+ [674]=>
+ int(0)
+ [675]=>
+ int(0)
+ [676]=>
+ int(0)
+ [677]=>
+ int(0)
+ [678]=>
+ int(0)
+ [679]=>
+ int(0)
+ [680]=>
+ int(0)
+ [681]=>
+ int(0)
+ [682]=>
+ int(0)
+ [683]=>
+ int(0)
+ [684]=>
+ int(0)
+ [685]=>
+ int(0)
+ [686]=>
+ int(0)
+ [687]=>
+ int(0)
+ [688]=>
+ int(0)
+ [689]=>
+ int(0)
+ [690]=>
+ int(0)
+ [691]=>
+ int(0)
+ [692]=>
+ int(0)
+ [693]=>
+ int(0)
+ [694]=>
+ int(0)
+ [695]=>
+ int(0)
+ [696]=>
+ int(0)
+ [697]=>
+ int(0)
+ [698]=>
+ int(0)
+ [699]=>
+ int(0)
+ [700]=>
+ int(0)
+ [701]=>
+ int(0)
+ [702]=>
+ int(0)
+ [703]=>
+ int(0)
+ [704]=>
+ int(0)
+ [705]=>
+ int(0)
+ [706]=>
+ int(0)
+ [707]=>
+ int(0)
+ [708]=>
+ int(0)
+ [709]=>
+ int(0)
+ [710]=>
+ int(0)
+ [711]=>
+ int(0)
+ [712]=>
+ int(0)
+ [713]=>
+ int(0)
+ [714]=>
+ int(0)
+ [715]=>
+ int(0)
+ [716]=>
+ int(0)
+ [717]=>
+ int(0)
+ [718]=>
+ int(0)
+ [719]=>
+ int(0)
+ [720]=>
+ int(0)
+ [721]=>
+ int(0)
+ [722]=>
+ int(0)
+ [723]=>
+ int(0)
+ [724]=>
+ int(0)
+ [725]=>
+ int(0)
+ [726]=>
+ int(0)
+ [727]=>
+ int(0)
+ [728]=>
+ int(0)
+ [729]=>
+ int(0)
+ [730]=>
+ int(0)
+ [731]=>
+ int(0)
+ [732]=>
+ int(0)
+ [733]=>
+ int(0)
+ [734]=>
+ int(0)
+ [735]=>
+ int(0)
+ [736]=>
+ int(0)
+ [737]=>
+ int(0)
+ [738]=>
+ int(0)
+ [739]=>
+ int(0)
+ [740]=>
+ int(0)
+ [741]=>
+ int(0)
+ [742]=>
+ int(0)
+ [743]=>
+ int(0)
+ [744]=>
+ int(0)
+ [745]=>
+ int(0)
+ [746]=>
+ int(0)
+ [747]=>
+ int(0)
+ [748]=>
+ int(0)
+ [749]=>
+ int(0)
+ [750]=>
+ int(0)
+ [751]=>
+ int(0)
+ [752]=>
+ int(0)
+ [753]=>
+ int(0)
+ [754]=>
+ int(0)
+ [755]=>
+ int(0)
+ [756]=>
+ int(0)
+ [757]=>
+ int(0)
+ [758]=>
+ int(0)
+ [759]=>
+ int(0)
+ [760]=>
+ int(0)
+ [761]=>
+ int(0)
+ [762]=>
+ int(0)
+ [763]=>
+ int(0)
+ [764]=>
+ int(0)
+ [765]=>
+ int(0)
+ [766]=>
+ int(0)
+ [767]=>
+ int(0)
+ }
+ ["Copyright"]=>
+ string(12) "Eric Stewart"
+ ["InterOperabilityIndex"]=>
+ string(3) "R98"
+ ["InterOperabilityVersion"]=>
+ string(4) "0100"
+ ["RelatedFileFormat"]=>
+ string(13) "image027.tiff"
+ ["RelatedImageWidth"]=>
+ int(1)
+ ["RelatedImageHeight"]=>
+ int(1)
+}
+--CREDIT--
+Eric Stewart <ericleestewart@gmail.com>
diff --git a/ext/exif/tests/exif_imagetype_basic.phpt b/ext/exif/tests/exif_imagetype_basic.phpt
new file mode 100644
index 000000000..1248d39ad
--- /dev/null
+++ b/ext/exif/tests/exif_imagetype_basic.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Check for exif_imagetype default behaviour
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--INI--
+output_handler=
+zlib.output_compression=0
+--FILE--
+<?php
+
+/* Prototype : int exif_imagetype ( string $filename )
+ * Description: Determine the type of an image
+ * Source code: ext/exif/exif.c
+*/
+echo "*** Testing exif_imagetype() : basic functionality ***\n";
+
+var_dump(exif_imagetype(dirname(__FILE__).'/test2.jpg'));
+?>
+===Done===
+--EXPECT--
+*** Testing exif_imagetype() : basic functionality ***
+int(2)
+===Done=== \ No newline at end of file
diff --git a/ext/exif/tests/exif_imagetype_error.phpt b/ext/exif/tests/exif_imagetype_error.phpt
new file mode 100644
index 000000000..fac6e0b9b
--- /dev/null
+++ b/ext/exif/tests/exif_imagetype_error.phpt
@@ -0,0 +1,45 @@
+--TEST--
+Test exif_imagetype() function : error conditions
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--FILE--
+<?php
+
+/* Prototype : int exif_imagetype ( string $filename )
+ * Description: Determine the type of an image
+ * Source code: ext/exif/exif.c
+*/
+
+echo "*** Testing exif_imagetype() : error conditions ***\n";
+
+echo "\n-- Testing exif_imagetype() function with no arguments --\n";
+var_dump( exif_imagetype() );
+
+echo "\n-- Testing exif_imagetype() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( exif_imagetype(dirname(__FILE__).'/test2.jpg', $extra_arg) );
+
+echo "\n-- Testing exif_imagetype() function with an unknown file --\n";
+var_dump( exif_imagetype(dirname(__FILE__).'/foo.jpg') );
+
+
+?>
+===Done===
+--EXPECTF--
+*** Testing exif_imagetype() : error conditions ***
+
+-- Testing exif_imagetype() function with no arguments --
+
+Warning: Wrong parameter count for exif_imagetype() in %s on line %d
+NULL
+
+-- Testing exif_imagetype() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for exif_imagetype() in %s on line %d
+NULL
+
+-- Testing exif_imagetype() function with an unknown file --
+
+Warning: exif_imagetype(%sfoo.jpg): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+===Done===
diff --git a/ext/exif/tests/exif_imagetype_variation1.phpt b/ext/exif/tests/exif_imagetype_variation1.phpt
new file mode 100644
index 000000000..09e8b5554
--- /dev/null
+++ b/ext/exif/tests/exif_imagetype_variation1.phpt
@@ -0,0 +1,224 @@
+--TEST--
+Test exif_imagetype() function : usage variations - different types for filename argument
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--FILE--
+<?php
+
+/* Prototype : int exif_imagetype ( string $filename )
+ * Description: Determine the type of an image
+ * Source code: ext/exif/exif.c
+*/
+
+echo "*** Testing exif_imagetype() : different types for filename argument ***\n";
+// initialize all required variables
+
+// get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+// declaring a class
+class sample {
+ public function __toString() {
+ return "obj'ct";
+ }
+}
+
+// Defining resource
+$file_handle = fopen(__FILE__, 'r');
+
+// array with different values
+$values = array (
+
+ // integer values
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float values
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array values
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // boolean values
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty string
+ "",
+ '',
+
+ // undefined variable
+ $undefined_var,
+
+ // unset variable
+ $unset_var,
+
+ // objects
+ new sample(),
+
+ // resource
+ $file_handle,
+
+ NULL,
+ null
+);
+
+
+// loop through each element of the array and check the working of exif_imagetype()
+// when $filename is supplied with different values
+
+echo "\n--- Testing exif_imagetype() by supplying different values for 'filename' argument ---\n";
+$counter = 1;
+foreach($values as $filename) {
+ echo "-- Iteration $counter --\n";
+ var_dump( exif_imagetype($filename) );
+ $counter ++;
+}
+
+// closing the file
+fclose($file_handle);
+
+echo "Done\n";
+?>
+
+?>
+===Done===
+--EXPECTF--
+*** Testing exif_imagetype() : different types for filename argument ***
+
+Notice: Undefined variable: undefined_var in %s on line %d
+
+Notice: Undefined variable: unset_var in %s on line %d
+
+--- Testing exif_imagetype() by supplying different values for 'filename' argument ---
+-- Iteration 1 --
+
+Warning: exif_imagetype(0): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+-- Iteration 2 --
+
+Warning: exif_imagetype(1): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+-- Iteration 3 --
+
+Warning: exif_imagetype(12345): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+-- Iteration 4 --
+
+Warning: exif_imagetype(-2345): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+-- Iteration 5 --
+
+Warning: exif_imagetype(10.5): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+-- Iteration 6 --
+
+Warning: exif_imagetype(-10.5): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+-- Iteration 7 --
+
+Warning: exif_imagetype(101234567000): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+-- Iteration 8 --
+
+Warning: exif_imagetype(1.07654321E-9): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+-- Iteration 9 --
+
+Warning: exif_imagetype(0.5): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+
+Warning: exif_imagetype(Array): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+
+Warning: exif_imagetype(Array): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+-- Iteration 12 --
+
+Notice: Array to string conversion in %s on line %d
+
+Warning: exif_imagetype(Array): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+-- Iteration 13 --
+
+Notice: Array to string conversion in %s on line %d
+
+Warning: exif_imagetype(Array): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+-- Iteration 14 --
+
+Notice: Array to string conversion in %s on line %d
+
+Warning: exif_imagetype(Array): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+-- Iteration 15 --
+
+Warning: exif_imagetype(1): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+-- Iteration 16 --
+
+Warning: exif_imagetype(): Filename cannot be empty in %s on line %d
+bool(false)
+-- Iteration 17 --
+
+Warning: exif_imagetype(1): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+-- Iteration 18 --
+
+Warning: exif_imagetype(): Filename cannot be empty in %s on line %d
+bool(false)
+-- Iteration 19 --
+
+Warning: exif_imagetype(): Filename cannot be empty in %s on line %d
+bool(false)
+-- Iteration 20 --
+
+Warning: exif_imagetype(): Filename cannot be empty in %s on line %d
+bool(false)
+-- Iteration 21 --
+
+Warning: exif_imagetype(): Filename cannot be empty in %s on line %d
+bool(false)
+-- Iteration 22 --
+
+Warning: exif_imagetype(): Filename cannot be empty in %s on line %d
+bool(false)
+-- Iteration 23 --
+
+Warning: exif_imagetype(obj'ct): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+-- Iteration 24 --
+
+Warning: exif_imagetype(Resource id #%d): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+-- Iteration 25 --
+
+Warning: exif_imagetype(): Filename cannot be empty in %s on line %d
+bool(false)
+-- Iteration 26 --
+
+Warning: exif_imagetype(): Filename cannot be empty in %s on line %d
+bool(false)
+Done
+
+?>
+===Done===
diff --git a/ext/exif/tests/exif_read_exif_data_basic.phpt b/ext/exif/tests/exif_read_exif_data_basic.phpt
new file mode 100644
index 000000000..435f13752
--- /dev/null
+++ b/ext/exif/tests/exif_read_exif_data_basic.phpt
@@ -0,0 +1,62 @@
+--TEST--
+Check for read_exif_data default behaviour
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--INI--
+output_handler=
+zlib.output_compression=0
+--FILE--
+<?php
+
+/* Prototype : array read_exif_data ( string $filename [, string $sections [, bool $arrays [, bool $thumbnail ]]] )
+ * Description: Alias of exif_read_data()
+ * Source code: ext/exif/exif.c
+*/
+echo "*** Testing read_exif_data() : basic functionality ***\n";
+
+print_r(read_exif_data(dirname(__FILE__).'/test2.jpg'));
+?>
+===Done===
+--EXPECTF--
+*** Testing read_exif_data() : basic functionality ***
+Array
+(
+ [FileName] => test2.jpg
+ [FileDateTime] => %d
+ [FileSize] => 1240
+ [FileType] => 2
+ [MimeType] => image/jpeg
+ [SectionsFound] => ANY_TAG, IFD0, THUMBNAIL, COMMENT
+ [COMPUTED] => Array
+ (
+ [html] => width="1" height="1"
+ [Height] => 1
+ [Width] => 1
+ [IsColor] => 1
+ [ByteOrderMotorola] => 1
+ [UserComment] => Exif test image.
+ [UserCommentEncoding] => ASCII
+ [Copyright] => Photo (c) M.Boerger, Edited by M.Boerger.
+ [Copyright.Photographer] => Photo (c) M.Boerger
+ [Copyright.Editor] => Edited by M.Boerger.
+ [Thumbnail.FileType] => 2
+ [Thumbnail.MimeType] => image/jpeg
+ )
+
+ [Copyright] => Photo (c) M.Boerger
+ [UserComment] => ASCII
+ [THUMBNAIL] => Array
+ (
+ [JPEGInterchangeFormat] => 134
+ [JPEGInterchangeFormatLength] => 523
+ )
+
+ [COMMENT] => Array
+ (
+ [0] => Comment #1.
+ [1] => Comment #2.
+ [2] => Comment #3end
+ )
+
+)
+===Done=== \ No newline at end of file
diff --git a/ext/exif/tests/exif_tagname_basic.phpt b/ext/exif/tests/exif_tagname_basic.phpt
new file mode 100644
index 000000000..e33601197
--- /dev/null
+++ b/ext/exif/tests/exif_tagname_basic.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Test exif_tagname() function : basic functionality
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--INI--
+output_handler=
+zlib.output_compression=0
+--FILE--
+<?php
+
+/* Prototype :string exif_tagname ( string $index )
+ * Description: Get the header name for an index
+ * Source code: ext/exif/exif.c
+*/
+
+echo "*** Testing exif_tagname() : basic functionality ***\n";
+
+var_dump(exif_tagname(0x10E));
+var_dump(exif_tagname(0x10F));
+var_dump(exif_tagname(0x110));
+
+?>
+===Done===
+--EXPECT--
+*** Testing exif_tagname() : basic functionality ***
+string(16) "ImageDescription"
+string(4) "Make"
+string(5) "Model"
+===Done===
diff --git a/ext/exif/tests/exif_tagname_error.phpt b/ext/exif/tests/exif_tagname_error.phpt
new file mode 100644
index 000000000..f74495adc
--- /dev/null
+++ b/ext/exif/tests/exif_tagname_error.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test exif_tagname() function : error conditions
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--FILE--
+<?php
+
+/* Prototype :string exif_tagname ( string $index )
+ * Description: Get the header name for an index
+ * Source code: ext/exif/exif.c
+*/
+
+echo "*** Testing exif_tagname() : error conditions ***\n";
+
+echo "\n-- Testing exif_tagname() function with no arguments --\n";
+var_dump( exif_tagname() );
+
+echo "\n-- Testing exif_tagname() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( exif_tagname(0x10E, $extra_arg) );
+
+?>
+===Done===
+--EXPECTF--
+*** Testing exif_tagname() : error conditions ***
+
+-- Testing exif_tagname() function with no arguments --
+
+Warning: Wrong parameter count for exif_tagname() in %s on line %d
+NULL
+
+-- Testing exif_tagname() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for exif_tagname() in %s on line %d
+NULL
+===Done===
diff --git a/ext/exif/tests/exif_tagname_variation1.phpt b/ext/exif/tests/exif_tagname_variation1.phpt
new file mode 100644
index 000000000..cf1fcf2c6
--- /dev/null
+++ b/ext/exif/tests/exif_tagname_variation1.phpt
@@ -0,0 +1,164 @@
+--TEST--
+Test exif_tagname() function : usage variations - different types for index argument
+--SKIPIF--
+<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?>
+--FILE--
+<?php
+
+/* Prototype : string exif_tagname ( string $index )
+ * Description: Get the header name for an index
+ * Source code: ext/exif/exif.c
+*/
+
+echo "*** Testing exif_tagname() : different types for index argument ***\n";
+// initialize all required variables
+
+// get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+// declaring a class
+class sample {
+ public function __toString() {
+ return "obj'ct";
+ }
+}
+
+// Defining resource
+$file_handle = fopen(__FILE__, 'r');
+
+// array with different values
+$values = array (
+
+ // integer values
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float values
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array values
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // boolean values
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty string
+ "",
+ '',
+
+ // undefined variable
+ $undefined_var,
+
+ // unset variable
+ $unset_var,
+
+ // objects
+ new sample(),
+
+ // resource
+ $file_handle,
+
+ NULL,
+ null
+);
+
+
+// loop through each element of the array and check the working of exif_tagname()
+// when $index arugment is supplied with different values
+
+echo "\n--- Testing exif_tagname() by supplying different values for 'index' argument ---\n";
+$counter = 1;
+foreach($values as $index) {
+ echo "-- Iteration $counter --\n";
+ var_dump( exif_tagname($index) );
+ $counter ++;
+}
+
+// closing the file
+fclose($file_handle);
+
+echo "Done\n";
+?>
+
+?>
+===Done===
+--EXPECTF--
+*** Testing exif_tagname() : different types for index argument ***
+
+Notice: Undefined variable: undefined_var in %s on line %d
+
+Notice: Undefined variable: unset_var in %s on line %d
+
+--- Testing exif_tagname() by supplying different values for 'index' argument ---
+-- Iteration 1 --
+bool(false)
+-- Iteration 2 --
+bool(false)
+-- Iteration 3 --
+bool(false)
+-- Iteration 4 --
+bool(false)
+-- Iteration 5 --
+bool(false)
+-- Iteration 6 --
+bool(false)
+-- Iteration 7 --
+bool(false)
+-- Iteration 8 --
+bool(false)
+-- Iteration 9 --
+bool(false)
+-- Iteration 10 --
+bool(false)
+-- Iteration 11 --
+bool(false)
+-- Iteration 12 --
+bool(false)
+-- Iteration 13 --
+bool(false)
+-- Iteration 14 --
+bool(false)
+-- Iteration 15 --
+bool(false)
+-- Iteration 16 --
+bool(false)
+-- Iteration 17 --
+bool(false)
+-- Iteration 18 --
+bool(false)
+-- Iteration 19 --
+bool(false)
+-- Iteration 20 --
+bool(false)
+-- Iteration 21 --
+bool(false)
+-- Iteration 22 --
+bool(false)
+-- Iteration 23 --
+
+Notice: Object of class sample could not be converted to int in %s on line %d
+bool(false)
+-- Iteration 24 --
+%s
+-- Iteration 25 --
+bool(false)
+-- Iteration 26 --
+bool(false)
+Done
+
+?>
+===Done===
diff --git a/ext/exif/tests/image007.jpg b/ext/exif/tests/image007.jpg
new file mode 100644
index 000000000..852654075
--- /dev/null
+++ b/ext/exif/tests/image007.jpg
Binary files differ
diff --git a/ext/exif/tests/image008.jpg b/ext/exif/tests/image008.jpg
new file mode 100644
index 000000000..3e8bfe451
--- /dev/null
+++ b/ext/exif/tests/image008.jpg
Binary files differ
diff --git a/ext/exif/tests/image009.jpg b/ext/exif/tests/image009.jpg
new file mode 100644
index 000000000..8803ddccd
--- /dev/null
+++ b/ext/exif/tests/image009.jpg
Binary files differ
diff --git a/ext/exif/tests/image010.jpg b/ext/exif/tests/image010.jpg
new file mode 100644
index 000000000..31ed6d678
--- /dev/null
+++ b/ext/exif/tests/image010.jpg
Binary files differ
diff --git a/ext/exif/tests/image011.jpg b/ext/exif/tests/image011.jpg
new file mode 100644
index 000000000..fcd5783ec
--- /dev/null
+++ b/ext/exif/tests/image011.jpg
Binary files differ
diff --git a/ext/exif/tests/image012.jpg b/ext/exif/tests/image012.jpg
new file mode 100644
index 000000000..dd25e0618
--- /dev/null
+++ b/ext/exif/tests/image012.jpg
Binary files differ
diff --git a/ext/exif/tests/image013.jpg b/ext/exif/tests/image013.jpg
new file mode 100644
index 000000000..93ded2666
--- /dev/null
+++ b/ext/exif/tests/image013.jpg
Binary files differ
diff --git a/ext/exif/tests/image014.jpg b/ext/exif/tests/image014.jpg
new file mode 100644
index 000000000..7657a0a4c
--- /dev/null
+++ b/ext/exif/tests/image014.jpg
Binary files differ
diff --git a/ext/exif/tests/image015.jpg b/ext/exif/tests/image015.jpg
new file mode 100644
index 000000000..6f52dec4d
--- /dev/null
+++ b/ext/exif/tests/image015.jpg
Binary files differ
diff --git a/ext/exif/tests/image016.tiff b/ext/exif/tests/image016.tiff
new file mode 100644
index 000000000..171211393
--- /dev/null
+++ b/ext/exif/tests/image016.tiff
Binary files differ
diff --git a/ext/exif/tests/image017.tiff b/ext/exif/tests/image017.tiff
new file mode 100644
index 000000000..89800d879
--- /dev/null
+++ b/ext/exif/tests/image017.tiff
Binary files differ
diff --git a/ext/exif/tests/image018.tiff b/ext/exif/tests/image018.tiff
new file mode 100644
index 000000000..6b4492f7c
--- /dev/null
+++ b/ext/exif/tests/image018.tiff
Binary files differ
diff --git a/ext/exif/tests/image020.tiff b/ext/exif/tests/image020.tiff
new file mode 100644
index 000000000..87f187821
--- /dev/null
+++ b/ext/exif/tests/image020.tiff
Binary files differ
diff --git a/ext/exif/tests/image021.tiff b/ext/exif/tests/image021.tiff
new file mode 100644
index 000000000..190f30b93
--- /dev/null
+++ b/ext/exif/tests/image021.tiff
Binary files differ
diff --git a/ext/exif/tests/image022.tiff b/ext/exif/tests/image022.tiff
new file mode 100644
index 000000000..88f437334
--- /dev/null
+++ b/ext/exif/tests/image022.tiff
Binary files differ
diff --git a/ext/exif/tests/image023.tiff b/ext/exif/tests/image023.tiff
new file mode 100644
index 000000000..dc33f6ed9
--- /dev/null
+++ b/ext/exif/tests/image023.tiff
Binary files differ
diff --git a/ext/exif/tests/image024.jpg b/ext/exif/tests/image024.jpg
new file mode 100644
index 000000000..0b5a42e89
--- /dev/null
+++ b/ext/exif/tests/image024.jpg
Binary files differ
diff --git a/ext/exif/tests/image025.jpg b/ext/exif/tests/image025.jpg
new file mode 100644
index 000000000..a5c0e17c7
--- /dev/null
+++ b/ext/exif/tests/image025.jpg
Binary files differ
diff --git a/ext/exif/tests/image026.tiff b/ext/exif/tests/image026.tiff
new file mode 100644
index 000000000..8fdafc738
--- /dev/null
+++ b/ext/exif/tests/image026.tiff
Binary files differ
diff --git a/ext/exif/tests/image027.tiff b/ext/exif/tests/image027.tiff
new file mode 100644
index 000000000..7c3a37a90
--- /dev/null
+++ b/ext/exif/tests/image027.tiff
Binary files differ
diff --git a/ext/fbsql/php_fbsql.c b/ext/fbsql/php_fbsql.c
index e919f88f4..a1b65372c 100644
--- a/ext/fbsql/php_fbsql.c
+++ b/ext/fbsql/php_fbsql.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_fbsql.c,v 1.114.2.3.2.7 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: php_fbsql.c,v 1.114.2.3.2.8 2008/12/31 11:17:37 sebastian Exp $ */
/* TODO:
*
diff --git a/ext/fbsql/php_fbsql.h b/ext/fbsql/php_fbsql.h
index a8c82ba43..2ae77325e 100644
--- a/ext/fbsql/php_fbsql.h
+++ b/ext/fbsql/php_fbsql.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_fbsql.h,v 1.31.2.1.2.3 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: php_fbsql.h,v 1.31.2.1.2.4 2008/12/31 11:17:37 sebastian Exp $ */
#define HAVE_FBSQL 1
diff --git a/ext/fdf/fdf.c b/ext/fdf/fdf.c
index 91c4f91e7..e32b861a6 100644
--- a/ext/fdf/fdf.c
+++ b/ext/fdf/fdf.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: fdf.c,v 1.89.2.2.2.10 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: fdf.c,v 1.89.2.2.2.11 2008/12/31 11:17:37 sebastian Exp $ */
/* FdfTk lib 2.0 is a Complete C/C++ FDF Toolkit available from
http://beta1.adobe.com/ada/acrosdk/forms.html. */
diff --git a/ext/fdf/php_fdf.h b/ext/fdf/php_fdf.h
index c9161582b..50720075b 100644
--- a/ext/fdf/php_fdf.h
+++ b/ext/fdf/php_fdf.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_fdf.h,v 1.22.2.1.2.2 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: php_fdf.h,v 1.22.2.1.2.3 2008/12/31 11:17:37 sebastian Exp $ */
#ifndef PHP_FDF_H
#define PHP_FDF_H
diff --git a/ext/filter/callback_filter.c b/ext/filter/callback_filter.c
index 4405347d9..69d094275 100644
--- a/ext/filter/callback_filter.c
+++ b/ext/filter/callback_filter.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: callback_filter.c,v 1.9.2.5 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: callback_filter.c,v 1.9.2.6 2008/12/31 11:17:37 sebastian Exp $ */
#include "php_filter.h"
diff --git a/ext/filter/filter.c b/ext/filter/filter.c
index e26a747f9..497668cb3 100644
--- a/ext/filter/filter.c
+++ b/ext/filter/filter.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -19,7 +19,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: filter.c,v 1.52.2.42 2008/02/24 18:34:30 felipe Exp $ */
+/* $Id: filter.c,v 1.52.2.45 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -275,7 +275,7 @@ PHP_MINFO_FUNCTION(filter)
{
php_info_print_table_start();
php_info_print_table_row( 2, "Input Validation and Filtering", "enabled" );
- php_info_print_table_row( 2, "Revision", "$Revision: 1.52.2.42 $");
+ php_info_print_table_row( 2, "Revision", "$Revision: 1.52.2.45 $");
php_info_print_table_end();
DISPLAY_INI_ENTRIES();
@@ -403,7 +403,7 @@ static unsigned int php_sapi_filter(int arg, char *var, char **val, unsigned int
Z_STRLEN(new_var) = val_len;
Z_TYPE(new_var) = IS_STRING;
- if (!(IF_G(default_filter) == FILTER_UNSAFE_RAW)) {
+ if (IF_G(default_filter) != FILTER_UNSAFE_RAW) {
zval *tmp_new_var = &new_var;
Z_STRVAL(new_var) = estrndup(*val, val_len);
INIT_PZVAL(tmp_new_var);
diff --git a/ext/filter/filter_private.h b/ext/filter/filter_private.h
index e8e8fcf3a..fae3cade7 100644
--- a/ext/filter/filter_private.h
+++ b/ext/filter/filter_private.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: filter_private.h,v 1.12.2.10 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: filter_private.h,v 1.12.2.11 2008/12/31 11:17:37 sebastian Exp $ */
#ifndef FILTER_PRIVATE_H
#define FILTER_PRIVATE_H
diff --git a/ext/filter/logical_filters.c b/ext/filter/logical_filters.c
index 103d5a51e..1d56eda9b 100644
--- a/ext/filter/logical_filters.c
+++ b/ext/filter/logical_filters.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: logical_filters.c,v 1.1.2.24 2008/03/18 23:32:42 iliaa Exp $ */
+/* $Id: logical_filters.c,v 1.1.2.28 2009/02/02 23:51:58 iliaa Exp $ */
#include "php_filter.h"
#include "filter_private.h"
@@ -469,7 +469,7 @@ void php_filter_validate_url(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
void php_filter_validate_email(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
{
/* From http://cvs.php.net/co.php/pear/HTML_QuickForm/QuickForm/Rule/Email.php?r=1.4 */
- const char regexp[] = "/^((\\\"[^\\\"\\f\\n\\r\\t\\b]+\\\")|([\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]+(\\.[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]+)*))@((\\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9])(([A-Za-z0-9\\-])*([A-Za-z0-9]))?\\.)+[A-Za-z\\-]+))$/D";
+ const char regexp[] = "/^((\\\"[^\\\"\\f\\n\\r\\t\\b]+\\\")|([\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]+(\\.[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]*)*))@((\\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9])(([A-Za-z0-9\\-])*([A-Za-z0-9]))?\\.?)+[A-Za-z\\-]*))$/D";
pcre *re = NULL;
pcre_extra *pcre_extra = NULL;
@@ -526,9 +526,10 @@ static int _php_filter_validate_ipv6(char *str, int str_len TSRMLS_DC) /* {{{ */
int compressed = 0;
int blocks = 8;
int n;
- char *ipv4;
+ char *ipv4 = NULL;
char *end;
int ip4elm[4];
+ char *s = str;
if (!memchr(str, ':', str_len)) {
return 0;
@@ -551,23 +552,29 @@ static int _php_filter_validate_ipv6(char *str, int str_len TSRMLS_DC) /* {{{ */
blocks = 6;
}
- end = str + str_len;
+ end = ipv4 ? ipv4 : str + str_len;
+
while (str < end) {
if (*str == ':') {
if (--blocks == 0) {
+ if ((str+1) == end && ipv4) {
+ return 1;
+ }
return 0;
}
if (++str >= end) {
- return 0;
+ return (ipv4 && ipv4 == str && blocks == 3) || 0;
}
if (*str == ':') {
if (compressed || --blocks == 0) {
- return 0;
+ return ipv4 != NULL;
}
- if (++str == end) {
+ if (++str == end || (ipv4 && ipv4 == str)) {
return 1;
}
compressed = 1;
+ } else if ((str - 1) == s) {
+ return 0;
}
}
n = 0;
diff --git a/ext/filter/php_filter.h b/ext/filter/php_filter.h
index a1dd54a3e..3fd2ef50a 100644
--- a/ext/filter/php_filter.h
+++ b/ext/filter/php_filter.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_filter.h,v 1.10.2.3 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: php_filter.h,v 1.10.2.4 2008/12/31 11:17:37 sebastian Exp $ */
#ifndef PHP_FILTER_H
#define PHP_FILTER_H
diff --git a/ext/filter/sanitizing_filters.c b/ext/filter/sanitizing_filters.c
index 132ae86f7..59b950056 100644
--- a/ext/filter/sanitizing_filters.c
+++ b/ext/filter/sanitizing_filters.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: sanitizing_filters.c,v 1.11.2.10 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: sanitizing_filters.c,v 1.11.2.11 2008/12/31 11:17:37 sebastian Exp $ */
#include "php_filter.h"
#include "filter_private.h"
diff --git a/ext/filter/tests/016.phpt b/ext/filter/tests/016.phpt
index e013c550a..d7e33b800 100644
--- a/ext/filter/tests/016.phpt
+++ b/ext/filter/tests/016.phpt
@@ -13,7 +13,8 @@ $values = Array(
'test@com',
'@',
'[]()/@example.com',
-'QWERTYUIOPASDFGHJKLZXCVBNM@QWERTYUIOPASDFGHJKLZXCVBNM.NET',
+'QWERTYUIOPASDFGHJKLZXCVBNM@QWERTYUIOPASDFGHJKLZXCVBNM.NET',
+'e.x.a.m.p.l.e.@example.com'
);
foreach ($values as $value) {
var_dump(filter_var($value, FILTER_VALIDATE_EMAIL));
@@ -27,8 +28,9 @@ string(17) "abuse@example.com"
bool(false)
bool(false)
bool(false)
-bool(false)
+string(8) "test@com"
bool(false)
bool(false)
string(57) "QWERTYUIOPASDFGHJKLZXCVBNM@QWERTYUIOPASDFGHJKLZXCVBNM.NET"
-Done
+string(26) "e.x.a.m.p.l.e.@example.com"
+Done \ No newline at end of file
diff --git a/ext/filter/tests/bug42718-2.phpt b/ext/filter/tests/bug42718-2.phpt
new file mode 100644
index 000000000..fd2a91d9d
--- /dev/null
+++ b/ext/filter/tests/bug42718-2.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Bug #42718 - 2 (unsafe_raw filter not applied when configured as default filter)
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--INI--
+magic_quotes_gpc=1
+filter.default=unsafe_raw
+filter.default_flags=
+--GET--
+a=1%00
+--FILE--
+<?php
+echo ini_get('filter.default') . "\n";
+echo ini_get('filter.default_flags') . "\n";
+echo addcslashes($_GET['a'],"\0") . "\n";
+?>
+--EXPECT--
+unsafe_raw
+
+1\0
diff --git a/ext/filter/tests/bug42718.phpt b/ext/filter/tests/bug42718.phpt
new file mode 100644
index 000000000..61245ee81
--- /dev/null
+++ b/ext/filter/tests/bug42718.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Bug #42718 (unsafe_raw filter not applied when configured as default filter)
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--INI--
+magic_quotes_gpc=0
+filter.default=unsafe_raw
+filter.default_flags=4
+--GET--
+a=1%00
+--FILE--
+<?php
+echo ini_get('filter.default') . "\n";
+echo ini_get('filter.default_flags') . "\n";
+var_dump(FILTER_FLAG_STRIP_LOW == 4);
+echo addcslashes($_GET['a'],"\0") . "\n";
+?>
+--XFAIL--
+--EXPECT--
+unsafe_raw
+4
+bool(true)
+1
diff --git a/ext/filter/tests/bug46973.phpt b/ext/filter/tests/bug46973.phpt
new file mode 100644
index 000000000..c9c5ba430
--- /dev/null
+++ b/ext/filter/tests/bug46973.phpt
@@ -0,0 +1,14 @@
+--TEST--
+Bug #46973 (IPv6 address filter rejects valid address)
+--FILE--
+<?php
+
+var_dump(filter_var('1fff::a88:85a3::172.31.128.1', FILTER_VALIDATE_IP,FILTER_FLAG_IPV6));
+var_dump(filter_var('3ffe:6a88:85a3:08d3:1319:8a2e:0370:7344', FILTER_VALIDATE_IP,FILTER_FLAG_IPV6));
+var_dump(filter_var('1fff::a88:85a3::172.31.128.1', FILTER_VALIDATE_IP,FILTER_FLAG_IPV6));
+
+?>
+--EXPECTF--
+string(28) "1fff::a88:85a3::172.31.128.1"
+string(39) "3ffe:6a88:85a3:08d3:1319:8a2e:0370:7344"
+string(28) "1fff::a88:85a3::172.31.128.1"
diff --git a/ext/ftp/ftp.c b/ext/ftp/ftp.c
index cdc73b546..6d9b6b75b 100644
--- a/ext/ftp/ftp.c
+++ b/ext/ftp/ftp.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: ftp.c,v 1.112.2.4.2.10 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: ftp.c,v 1.112.2.4.2.11 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/ftp/ftp.h b/ext/ftp/ftp.h
index d9f3fd197..44acde2bb 100644
--- a/ext/ftp/ftp.h
+++ b/ext/ftp/ftp.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: ftp.h,v 1.43.2.1.2.3 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: ftp.h,v 1.43.2.1.2.4 2008/12/31 11:17:37 sebastian Exp $ */
#ifndef FTP_H
#define FTP_H
diff --git a/ext/ftp/php_ftp.c b/ext/ftp/php_ftp.c
index 69d947efa..8724d79fd 100644
--- a/ext/ftp/php_ftp.c
+++ b/ext/ftp/php_ftp.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_ftp.c,v 1.103.2.2.2.3 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: php_ftp.c,v 1.103.2.2.2.4 2008/12/31 11:17:37 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/ftp/php_ftp.h b/ext/ftp/php_ftp.h
index 309f6780f..dfc3ae4b2 100644
--- a/ext/ftp/php_ftp.h
+++ b/ext/ftp/php_ftp.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_ftp.h,v 1.29.2.1.2.2 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: php_ftp.h,v 1.29.2.1.2.3 2008/12/31 11:17:37 sebastian Exp $ */
#ifndef _INCLUDED_FTP_H
#define _INCLUDED_FTP_H
diff --git a/ext/ftp/tests/ftp_fget_basic.phpt b/ext/ftp/tests/ftp_fget_basic.phpt
new file mode 100644
index 000000000..d736f8c45
--- /dev/null
+++ b/ext/ftp/tests/ftp_fget_basic.phpt
@@ -0,0 +1,43 @@
+--TEST--
+FTP ftp_fget file for both binary and ASCII transfer modes
+--CREDITS--
+Nathaniel McHugh
+--SKIPIF--
+<?php
+require 'skipif.inc';
+?>
+--FILE--
+<?php
+require 'server.inc';
+
+$ftp = ftp_connect('127.0.0.1', $port);
+if (!$ftp) die("Couldn't connect to the server");
+
+var_dump(ftp_login($ftp, 'user', 'pass'));
+
+//test simple text transfer
+$fp = tmpfile();
+var_dump(ftp_fget($ftp, $fp ,'a story.txt', FTP_ASCII));
+fseek($fp, 0);
+echo fgets($fp);
+
+$postition = ftell($fp);
+//test binary data transfer
+var_dump(ftp_fget($ftp, $fp, 'binary data.bin', FTP_BINARY));
+fseek($fp, $postition);
+var_dump(urlencode(fgets($fp)));
+
+//test non-existant file request
+ftp_fget($ftp, $fp ,'a warning.txt', FTP_ASCII);
+
+//remove file
+fclose($fp);
+?>
+--EXPECTF--
+bool(true)
+bool(true)
+For sale: baby shoes, never worn.
+bool(true)
+string(21) "BINARYFoo%00Bar%0D%0A"
+
+Warning: ftp_fget(): a warning: No such file or directory in %sftp_fget_basic.php on line %d
diff --git a/ext/ftp/tests/ftp_get_basic.phpt b/ext/ftp/tests/ftp_get_basic.phpt
new file mode 100644
index 000000000..23fd8d07f
--- /dev/null
+++ b/ext/ftp/tests/ftp_get_basic.phpt
@@ -0,0 +1,40 @@
+--TEST--
+FTP ftp_get file for both binary and ASCII transfer modes
+--CREDITS--
+Nathaniel McHugh
+--SKIPIF--
+<?php
+require 'skipif.inc';
+?>
+--FILE--
+<?php
+require 'server.inc';
+
+$ftp = ftp_connect('127.0.0.1', $port);
+if (!$ftp) die("Couldn't connect to the server");
+
+var_dump(ftp_login($ftp, 'user', 'pass'));
+
+//test simple text transfer
+$tmpfname = tempnam(dirname(__FILE__), "ftp_test");
+var_dump(ftp_get($ftp, $tmpfname ,'a story.txt', FTP_ASCII));
+echo file_get_contents($tmpfname);
+unlink($tmpfname);
+
+//test binary data transfer
+$tmpfname = tempnam(dirname(__FILE__), "ftp_test");
+var_dump(ftp_get($ftp, $tmpfname, 'binary data.bin', FTP_BINARY));
+var_dump(urlencode(file_get_contents($tmpfname)));
+unlink($tmpfname);
+
+//test non-existant file request
+ftp_get($ftp, $tmpfname ,'a warning.txt', FTP_ASCII);
+?>
+--EXPECTF--
+bool(true)
+bool(true)
+For sale: baby shoes, never worn.
+bool(true)
+string(21) "BINARYFoo%00Bar%0D%0A"
+
+Warning: ftp_get(): a warning: No such file or directory in %sftp_get_basic.php on line %d
diff --git a/ext/ftp/tests/ftp_mdtm_basic.phpt b/ext/ftp/tests/ftp_mdtm_basic.phpt
new file mode 100644
index 000000000..39aeb766f
--- /dev/null
+++ b/ext/ftp/tests/ftp_mdtm_basic.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Test the File Modification Time as described in http://tools.ietf.org/html/rfc3659#section-3.1
+--CREDITS--
+Nathaniel McHugh
+--SKIPIF--
+<?php
+require 'skipif.inc';
+?>
+--FILE--
+<?php
+
+require 'server.inc';
+
+$ftp = ftp_connect('127.0.0.1', $port);
+if (!$ftp) die("Couldn't connect to the server");
+
+var_dump(ftp_login($ftp, 'user', 'pass'));
+
+
+date_default_timezone_set('UTC');
+
+$time = ftp_mdtm($ftp, "A");
+echo date("F d Y H:i:s u",$time), PHP_EOL;
+
+$time = ftp_mdtm($ftp, "B");
+echo date("F d Y H:i:s u",$time), PHP_EOL;
+
+$time = ftp_mdtm($ftp, "C");
+echo date("F d Y H:i:s u",$time), PHP_EOL;
+
+$time = ftp_mdtm($ftp, "D");
+var_dump($time);
+
+$time = ftp_mdtm($ftp, "19990929043300 File6");
+echo date("F d Y H:i:s u",$time), PHP_EOL;
+
+$time = ftp_mdtm($ftp, "MdTm 19990929043300 file6");
+var_dump($time);
+
+?>
+--EXPECTF--
+bool(true)
+June 15 1998 10:00:45 000000
+June 15 1998 10:00:45 000000
+July 05 1998 13:23:16 000000
+int(-1)
+October 05 1999 21:31:02 000000
+int(-1)
diff --git a/ext/ftp/tests/server.inc b/ext/ftp/tests/server.inc
index c101c7c70..76198c23d 100644
--- a/ext/ftp/tests/server.inc
+++ b/ext/ftp/tests/server.inc
@@ -136,7 +136,6 @@ $cwd = '/';
$num_bogus_cmds = 0;
while($buf = fread($s, 4098)) {
-
if (!empty($bogus)) {
fputs($s, "502 Command not implemented (".$num_bogus_cmds++.").\r\n");
@@ -244,7 +243,48 @@ while($buf = fread($s, 4098)) {
} elseif (preg_match('/^USER /', $buf)) {
user_auth($buf);
- } else {
+ } elseif (preg_match('/^MDTM ([\w\h]+)/', $buf, $matches)) {
+ switch ($matches [1]){
+ case "A":
+ fputs($s, "213 19980615100045.014\r\n");
+ break;
+ case "B":
+ fputs($s, "213 19980615100045.014\r\n");
+ break;
+ case "C":
+ fputs($s, "213 19980705132316\r\n");
+ break;
+ case "19990929043300 File6":
+ fputs($s, "213 19991005213102\r\n");
+ break;
+ default :
+ fputs($s, "550 No file named \"{$matches [1]}\"\r\n");
+ break;
+ }
+ }elseif (preg_match('/^RETR ([\w\h]+)/', $buf, $matches)) {
+ if (!$fs = stream_socket_client("tcp://$host:$port")) {
+ fputs($s, "425 Can't open data connection\r\n");
+ continue;
+ }
+ switch($matches[1]){
+ case "a story":
+ fputs($s, "150 File status okay; about to open data connection.\r\n");
+ fputs($fs, "For sale: baby shoes, never worn.\r\n");
+ fputs($s, "226 Closing data Connection.\r\n");
+ break;
+ case "binary data":
+ fputs($s, "150 File status okay; about to open data connection.\r\n");
+ $transfer_type = $ascii? 'ASCII' : 'BINARY' ;
+ fputs($fs, $transfer_type."Foo\0Bar\r\n");
+ fputs($s, "226 Closing data Connection.\r\n");
+ break;
+ default:
+ fputs($s, "550 {$matches[1]}: No such file or directory \r\n");
+ break;
+ }
+ fclose($fs);
+ }
+ else {
fputs($s, "500 Syntax error, command unrecognized.\r\n");
dump_and_exit($buf);
}
diff --git a/ext/gd/gd.c b/ext/gd/gd.c
index 541ed86e9..af40a2bb0 100644
--- a/ext/gd/gd.c
+++ b/ext/gd/gd.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: gd.c,v 1.312.2.20.2.34 2008/04/04 17:39:52 felipe Exp $ */
+/* $Id: gd.c,v 1.312.2.20.2.38 2009/01/31 15:28:34 kalle Exp $ */
/* gd 1.2 is copyright 1994, 1995, Quest Protein Database Center,
Cold Spring Harbor Labs. */
@@ -966,6 +966,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_imagefilter, 0, 0, 2)
ZEND_ARG_INFO(0, arg1)
ZEND_ARG_INFO(0, arg2)
ZEND_ARG_INFO(0, arg3)
+ ZEND_ARG_INFO(0, arg4)
ZEND_END_ARG_INFO()
static
@@ -1636,6 +1637,22 @@ PHP_FUNCTION(imageloadfont)
font->nchars = FLIPWORD(font->nchars);
body_size = font->w * font->h * font->nchars;
}
+
+ if (overflow2(font->nchars, font->h)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error reading font, invalid font header");
+ efree(font);
+ php_stream_close(stream);
+ RETURN_FALSE;
+ }
+ if (overflow2(font->nchars * font->h, font->w )) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error reading font, invalid font header");
+ efree(font);
+ php_stream_close(stream);
+ RETURN_FALSE;
+ }
+
+
+
if (body_size != body_size_check) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error reading font");
@@ -4548,7 +4565,7 @@ PHP_FUNCTION(imagepsslantfont)
}
/* }}} */
-/* {{{ proto array imagepstext(resource image, string text, resource font, int size, int foreground, int background, int xcoord, int ycoord [, int space, int tightness, float angle, int antialias])
+/* {{{ proto array imagepstext(resource image, string text, resource font, int size, int foreground, int background, int xcoord, int ycoord [, int space [, int tightness [, float angle [, int antialias]]]])
Rasterize a string over an image */
PHP_FUNCTION(imagepstext)
{
diff --git a/ext/gd/gd_ctx.c b/ext/gd/gd_ctx.c
index cd721b3f9..bf47911b8 100644
--- a/ext/gd/gd_ctx.c
+++ b/ext/gd/gd_ctx.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: gd_ctx.c,v 1.22.2.5.2.4 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: gd_ctx.c,v 1.22.2.5.2.5 2008/12/31 11:17:37 sebastian Exp $ */
#include "php_gd.h"
diff --git a/ext/gd/libgd/gd.c b/ext/gd/libgd/gd.c
index cfb50d4ef..a2677c11d 100644
--- a/ext/gd/libgd/gd.c
+++ b/ext/gd/libgd/gd.c
@@ -2620,6 +2620,7 @@ void gdImageCopyResampled (gdImagePtr dst, gdImagePtr src, int dstX, int dstY, i
green /= spixels;
blue /= spixels;
alpha /= spixels;
+ alpha += 0.5;
}
if ( alpha_sum != 0.0f) {
if( contrib_sum != 0.0f) {
@@ -3135,7 +3136,7 @@ gdImagePtr gdImageRotate (gdImagePtr src, double dAngle, int clrBack, int ignore
return NULL;
}
- if (!gdImageTrueColor(src) && clrBack>=gdImageColorsTotal(src)) {
+ if (!gdImageTrueColor(src) && (clrBack < 0 || clrBack>=gdImageColorsTotal(src))) {
return NULL;
}
diff --git a/ext/gd/libgd/gd_png.c b/ext/gd/libgd/gd_png.c
index a002a9521..7591dc0c6 100644
--- a/ext/gd/libgd/gd_png.c
+++ b/ext/gd/libgd/gd_png.c
@@ -689,7 +689,12 @@ void gdImagePngCtxEx (gdImagePtr im, gdIOCtx * outfile, int level, int basefilte
*/
a = gdTrueColorGetAlpha(thisPixel);
/* Andrew Hull: >> 6, not >> 7! (gd 2.0.5) */
- *pOutputRow++ = 255 - ((a << 1) + (a >> 6));
+ if (a == 127) {
+ *pOutputRow++ = 0;
+ } else {
+ *pOutputRow++ = 255 - ((a << 1) + (a >> 6));
+ }
+
}
}
}
diff --git a/ext/gd/libgd/xbm.c b/ext/gd/libgd/xbm.c
index 6e7f473a9..23d36886f 100644
--- a/ext/gd/libgd/xbm.c
+++ b/ext/gd/libgd/xbm.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: xbm.c,v 1.7.2.2.2.3 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: xbm.c,v 1.7.2.2.2.4 2008/12/31 11:17:38 sebastian Exp $ */
#include <stdio.h>
#include <math.h>
diff --git a/ext/gd/php_gd.h b/ext/gd/php_gd.h
index 6c981f3ce..406252b6c 100644
--- a/ext/gd/php_gd.h
+++ b/ext/gd/php_gd.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_gd.h,v 1.59.2.3.2.6 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: php_gd.h,v 1.59.2.3.2.7 2008/12/31 11:17:37 sebastian Exp $ */
#ifndef PHP_GD_H
#define PHP_GD_H
diff --git a/ext/gd/tests/gd_info_error.phpt b/ext/gd/tests/gd_info_error.phpt
new file mode 100644
index 000000000..514530c21
--- /dev/null
+++ b/ext/gd/tests/gd_info_error.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Test gd_info() function : error conditions - with more than expected number of arguments
+--SKIPIF--
+<?php
+if(!extension_loaded('gd')) {
+ die('skip gd extension is not loaded');
+}
+if(!function_exists('gd_info')) {
+ die('skip gd_info function is not available');
+}
+?>
+--FILE--
+<?php
+/* Prototype : array gd_info()
+ * Description: Retrieve information about the currently installed GD library
+ * Source code: ext/gd/gd.c
+ */
+$extra_arg_number = 10;
+$extra_arg_string = "Hello";
+
+echo "*** Testing gd_info() : error conditions ***\n";
+
+echo "\n-- Testing gd_info() function with more than expected number of arguments --\n";
+var_dump(gd_info($extra_arg_number));
+var_dump(gd_info($extra_arg_string, $extra_arg_number));
+?>
+===DONE===
+--EXPECTF--
+*** Testing gd_info() : error conditions ***
+
+-- Testing gd_info() function with more than expected number of arguments --
+
+Warning: Wrong parameter count for gd_info() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for gd_info() in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/gd/tests/gd_info_variation1.phpt b/ext/gd/tests/gd_info_variation1.phpt
new file mode 100644
index 000000000..5430cedc8
--- /dev/null
+++ b/ext/gd/tests/gd_info_variation1.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test gd_info() function : variation - Checking all the values in returned array
+--SKIPIF--
+<?php
+if(!extension_loaded('gd')) {
+ die('skip gd extension is not loaded');
+}
+if(!function_exists('gd_info')) {
+ die('skip gd_info function is not available');
+}
+?>
+--FILE--
+<?php
+/* Prototype : array gd_info()
+ * Description: Retrieve information about the currently installed GD library
+ * Source code: ext/gd/gd.c
+ */
+
+echo "*** Testing gd_info() : variation ***\n";
+
+var_dump(gd_info());
+?>
+===DONE===
+--EXPECTF--
+*** Testing gd_info() : variation ***
+array(%d) {
+ ["GD Version"]=>
+ string(%d) "%s"
+ ["FreeType Support"]=>
+ bool(%s)%A
+ ["T1Lib Support"]=>
+ bool(%s)
+ ["GIF Read Support"]=>
+ bool(%s)
+ ["GIF Create Support"]=>
+ bool(%s)
+ ["JPG Support"]=>
+ bool(%s)
+ ["PNG Support"]=>
+ bool(%s)
+ ["WBMP Support"]=>
+ bool(%s)
+ ["XPM Support"]=>
+ bool(%s)
+ ["XBM Support"]=>
+ bool(%s)
+ ["JIS-mapped Japanese Font Support"]=>
+ bool(%s)
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/gd/tests/image_type_to_mime_type_error.phpt b/ext/gd/tests/image_type_to_mime_type_error.phpt
new file mode 100644
index 000000000..5ecdce77c
--- /dev/null
+++ b/ext/gd/tests/image_type_to_mime_type_error.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test image_type_to_mime_type() function : error conditions - Pass incorrect number of arguments
+--FILE--
+<?php
+/* Prototype : proto string image_type_to_mime_type(int imagetype)
+ * Description: Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype
+ * Source code: ext/standard/image.c
+ */
+
+$imagetype = IMAGETYPE_GIF;
+$extra_arg = 10;
+echo "*** Testing image_type_to_mime_type() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing image_type_to_mime_type() function with Zero arguments --\n";
+var_dump( image_type_to_mime_type() );
+
+//Test image_type_to_mime_type with one more than the expected number of arguments
+echo "\n-- Testing image_type_to_mime_type() function with more than expected no. of arguments --\n";
+var_dump( image_type_to_mime_type($imagetype, $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing image_type_to_mime_type() : error conditions ***
+
+-- Testing image_type_to_mime_type() function with Zero arguments --
+
+Warning: Wrong parameter count for image_type_to_mime_type() in %s on line %d
+bool(false)
+
+-- Testing image_type_to_mime_type() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for image_type_to_mime_type() in %s on line %d
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/gd/tests/image_type_to_mime_type_variation1.phpt b/ext/gd/tests/image_type_to_mime_type_variation1.phpt
new file mode 100644
index 000000000..1747524d7
--- /dev/null
+++ b/ext/gd/tests/image_type_to_mime_type_variation1.phpt
@@ -0,0 +1,138 @@
+--TEST--
+Test image_type_to_mime_type() function : usage variations - Pass different data types as imagetype
+--FILE--
+<?php
+/* Prototype : string image_type_to_mime_type(int imagetype)
+ * Description: Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype
+ * Source code: ext/standard/image.c
+ */
+
+echo "*** Testing image_type_to_mime_type() : usage variations ***\n";
+
+error_reporting(E_ALL ^ E_NOTICE);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+class MyClass
+{
+ function __toString() {
+ return "MyClass";
+ }
+}
+
+//array of values to iterate over
+$values = array(
+
+ // float data
+ 100.5,
+ -100.5,
+ 100.1234567e10,
+ 100.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new MyClass(),
+
+ // undefined data
+ @$undefined_var,
+
+ // unset data
+ @$unset_var,
+);
+
+// loop through each element of the array for imagetype
+$iterator = 1;
+foreach($values as $value) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( image_type_to_mime_type($value) );
+ $iterator++;
+};
+?>
+===DONE===
+--EXPECTF--
+*** Testing image_type_to_mime_type() : usage variations ***
+
+-- Iteration 1 --
+string(24) "application/octet-stream"
+
+-- Iteration 2 --
+string(24) "application/octet-stream"
+
+-- Iteration 3 --
+string(24) "application/octet-stream"
+
+-- Iteration 4 --
+string(24) "application/octet-stream"
+
+-- Iteration 5 --
+string(24) "application/octet-stream"
+
+-- Iteration 6 --
+string(24) "application/octet-stream"
+
+-- Iteration 7 --
+string(9) "image/gif"
+
+-- Iteration 8 --
+string(24) "application/octet-stream"
+
+-- Iteration 9 --
+string(24) "application/octet-stream"
+
+-- Iteration 10 --
+string(9) "image/gif"
+
+-- Iteration 11 --
+string(24) "application/octet-stream"
+
+-- Iteration 12 --
+string(9) "image/gif"
+
+-- Iteration 13 --
+string(24) "application/octet-stream"
+
+-- Iteration 14 --
+string(24) "application/octet-stream"
+
+-- Iteration 15 --
+string(24) "application/octet-stream"
+
+-- Iteration 16 --
+string(24) "application/octet-stream"
+
+-- Iteration 17 --
+string(24) "application/octet-stream"
+
+-- Iteration 18 --
+string(9) "image/gif"
+
+-- Iteration 19 --
+string(24) "application/octet-stream"
+
+-- Iteration 20 --
+string(24) "application/octet-stream"
+===DONE=== \ No newline at end of file
diff --git a/ext/gd/tests/image_type_to_mime_type_variation2.phpt b/ext/gd/tests/image_type_to_mime_type_variation2.phpt
new file mode 100644
index 000000000..141bc576f
--- /dev/null
+++ b/ext/gd/tests/image_type_to_mime_type_variation2.phpt
@@ -0,0 +1,80 @@
+--TEST--
+Test image_type_to_mime_type() function : usage variations - Pass decimal, octal, and hexadecimal values as imagetype
+--FILE--
+<?php
+/* Prototype : string image_type_to_mime_type(int imagetype)
+ * Description: Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype
+ * Source code: ext/standard/image.c
+ */
+
+echo "*** Testing image_type_to_mime_type() : usage variations ***\n";
+
+error_reporting(E_ALL ^ E_NOTICE);
+$values = array (
+ //Decimal values
+ 0,
+ 1,
+ 12345,
+ -12345,
+
+ //Octal values
+ 02,
+ 010,
+ 030071,
+ -030071,
+
+ //Hexadecimal values
+ 0x0,
+ 0x1,
+ 0xABCD,
+ -0xABCD
+);
+
+// loop through each element of the array for imagetype
+$iterator = 1;
+foreach($values as $value) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( image_type_to_mime_type($value) );
+ $iterator++;
+};
+?>
+===DONE===
+--EXPECT--
+*** Testing image_type_to_mime_type() : usage variations ***
+
+-- Iteration 1 --
+string(24) "application/octet-stream"
+
+-- Iteration 2 --
+string(9) "image/gif"
+
+-- Iteration 3 --
+string(24) "application/octet-stream"
+
+-- Iteration 4 --
+string(24) "application/octet-stream"
+
+-- Iteration 5 --
+string(10) "image/jpeg"
+
+-- Iteration 6 --
+string(10) "image/tiff"
+
+-- Iteration 7 --
+string(24) "application/octet-stream"
+
+-- Iteration 8 --
+string(24) "application/octet-stream"
+
+-- Iteration 9 --
+string(24) "application/octet-stream"
+
+-- Iteration 10 --
+string(9) "image/gif"
+
+-- Iteration 11 --
+string(24) "application/octet-stream"
+
+-- Iteration 12 --
+string(24) "application/octet-stream"
+===DONE===
diff --git a/ext/gd/tests/image_type_to_mime_type_variation3.phpt b/ext/gd/tests/image_type_to_mime_type_variation3.phpt
new file mode 100644
index 000000000..483890406
--- /dev/null
+++ b/ext/gd/tests/image_type_to_mime_type_variation3.phpt
@@ -0,0 +1,76 @@
+--TEST--
+Test image_type_to_mime_type() function : usage variations - Pass equivalent imagetype constant integer values
+--FILE--
+<?php
+/* Prototype : string image_type_to_mime_type(int imagetype)
+ * Description: Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype
+ * Source code: ext/standard/image.c
+ */
+
+echo "*** Testing image_type_to_mime_type() : usage variations ***\n";
+
+//There are 17 imagetypes
+$number_of_imagetypes = 17;
+
+$iterator = 1;
+for($imagetype = 1; $imagetype<=$number_of_imagetypes; $imagetype++) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( image_type_to_mime_type($imagetype) );
+ $iterator++;
+}
+?>
+===DONE===
+--EXPECTREGEX--
+\*\*\* Testing image_type_to_mime_type\(\) : usage variations \*\*\*
+
+-- Iteration 1 --
+string\(9\) "image\/gif"
+
+-- Iteration 2 --
+string\(10\) "image\/jpeg"
+
+-- Iteration 3 --
+string\(9\) "image\/png"
+
+-- Iteration 4 --
+string\(29\) "application\/x-shockwave-flash"
+
+-- Iteration 5 --
+string\(9\) "image\/psd"
+
+-- Iteration 6 --
+string\(9\) "image\/bmp"
+
+-- Iteration 7 --
+string\(10\) "image\/tiff"
+
+-- Iteration 8 --
+string\(10\) "image\/tiff"
+
+-- Iteration 9 --
+string\(24\) "application\/octet-stream"
+
+-- Iteration 10 --
+string\(9\) "image\/jp2"
+
+-- Iteration 11 --
+string\(24\) "application\/octet-stream"
+
+-- Iteration 12 --
+string\(24\) "application\/octet-stream"
+
+-- Iteration 13 --
+string\(2[49]\) "application\/(x-shockwave-flash|octet-stream)"
+
+-- Iteration 14 --
+string\(9\) "image\/iff"
+
+-- Iteration 15 --
+string\(18\) "image\/vnd.wap.wbmp"
+
+-- Iteration 16 --
+string\(9\) "image\/xbm"
+
+-- Iteration 17 --
+string\(24\) "application\/octet-stream"
+===DONE===
diff --git a/ext/gd/tests/image_type_to_mime_type_variation4.phpt b/ext/gd/tests/image_type_to_mime_type_variation4.phpt
new file mode 100644
index 000000000..90ae17b96
--- /dev/null
+++ b/ext/gd/tests/image_type_to_mime_type_variation4.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Test image_type_to_mime_type() function : usage variations - Passing IMAGETYPE_ICO and IMAGETYPE_SWC
+--FILE--
+<?php
+/* Prototype : string image_type_to_mime_type(int imagetype)
+ * Description: Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype
+ * Source code: ext/standard/image.c
+ */
+
+
+echo "*** Testing image_type_to_mime_type() : usage variations ***\n";
+
+error_reporting(E_ALL ^ E_NOTICE);
+
+var_dump( image_type_to_mime_type(IMAGETYPE_ICO) );
+var_dump( image_type_to_mime_type(IMAGETYPE_SWC) );
+?>
+===DONE===
+--EXPECTREGEX--
+\*\*\* Testing image_type_to_mime_type\(\) : usage variations \*\*\*
+string\(24\) "application\/octet-stream"
+string\(2[49]\) "application\/(x-shockwave-flash|octet-stream)"
+===DONE=== \ No newline at end of file
diff --git a/ext/gd/tests/imagecolorallocate_basic.phpt b/ext/gd/tests/imagecolorallocate_basic.phpt
new file mode 100644
index 000000000..25b282148
--- /dev/null
+++ b/ext/gd/tests/imagecolorallocate_basic.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test imagecolorallocate() function : basic functionality
+--SKIPIF--
+<?php
+if(!extension_loaded('gd')) {
+ die('skip gd extension is not loaded');
+}
+if(!function_exists('imagecreatetruecolor')) {
+ die('skip imagecreatetruecolor function is not available');
+}
+?>
+--FILE--
+<?php
+/* Prototype : int imagecolorallocate(resource im, int red, int green, int blue)
+ * Description: Allocate a color for an image
+ * Source code: ext/gd/gd.c
+ */
+
+echo "*** Testing imagecolorallocate() : basic functionality ***\n";
+
+$im = imagecreatetruecolor(200, 200);
+// Calling imagecolorallocate() with all possible arguments
+var_dump( imagecolorallocate($im, 255, 0, 0) );
+var_dump( imagecolorallocate($im, 0, 255, 0) );
+var_dump( imagecolorallocate($im, 0, 0, 255) );
+var_dump( imagecolorallocate($im, 255, 255, 255) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing imagecolorallocate() : basic functionality ***
+int(16711680)
+int(65280)
+int(255)
+int(16777215)
+===DONE=== \ No newline at end of file
diff --git a/ext/gd/tests/imagecolorallocate_error.phpt b/ext/gd/tests/imagecolorallocate_error.phpt
new file mode 100644
index 000000000..fa05e9147
--- /dev/null
+++ b/ext/gd/tests/imagecolorallocate_error.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test imagecolorallocate() function : error conditions
+--SKIPIF--
+<?php
+if(!extension_loaded('gd')) {
+ die('skip gd extension is not loaded');
+}
+?>
+--FILE--
+<?php
+/* Prototype : int imagecolorallocate(resource im, int red, int green, int blue)
+ * Description: Allocate a color for an image
+ * Source code: ext/gd/gd.c
+ */
+
+$red = 10;
+$green = 10;
+$blue = 10;
+$extra_arg = 10;
+$im = imagecreate(200, 200);
+
+echo "*** Testing imagecolorallocate() : error conditions ***\n";
+
+//Test imagecolorallocate with one more than the expected number of arguments
+echo "\n-- Testing imagecolorallocate() function with more than expected no. of arguments --\n";
+var_dump( imagecolorallocate($im, $red, $green, $blue, $extra_arg) );
+
+// Testing imagecolorallocate with one less than the expected number of arguments
+echo "\n-- Testing imagecolorallocate() function with less than expected no. of arguments --\n";
+var_dump( imagecolorallocate() );
+var_dump( imagecolorallocate($im, $red, $green) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing imagecolorallocate() : error conditions ***
+
+-- Testing imagecolorallocate() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for imagecolorallocate() in %s on line %d
+NULL
+
+-- Testing imagecolorallocate() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for imagecolorallocate() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for imagecolorallocate() in %s on line %d
+NULL
+===DONE===
+
+
diff --git a/ext/gd/tests/imagecolorallocate_variation1.phpt b/ext/gd/tests/imagecolorallocate_variation1.phpt
new file mode 100644
index 000000000..b08aecec2
--- /dev/null
+++ b/ext/gd/tests/imagecolorallocate_variation1.phpt
@@ -0,0 +1,267 @@
+--TEST--
+Test imagecolorallocate() function : usage variations - passing different data types to first argument
+--SKIPIF--
+<?php
+if(!extension_loaded('gd')) {
+ die('skip gd extension is not loaded');
+}
+?>
+--FILE--
+<?php
+/* Prototype : int imagecolorallocate(resource im, int red, int green, int blue)
+ * Description: Allocate a color for an image
+ * Source code: ext/gd/gd.c
+ */
+
+echo "*** Testing imagecolorallocate() : usage variations ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$red = 10;
+$green = 10;
+$blue = 10;
+
+$fp = tmpfile();
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 10.1234567e10' => 10.1234567e10,
+ 'float 10.7654321E-10' => 10.7654321E-10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ //resource
+ "file resource" => $fp
+);
+
+// loop through each element of the array for im
+foreach($values as $key => $value) {
+ echo "\n-- $key --\n";
+ var_dump( imagecolorallocate($value, $red, $green, $blue) );
+};
+?>
+===DONE===
+--EXPECTF--
+*** Testing imagecolorallocate() : usage variations ***
+
+-- int 0 --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- int 1 --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- int 12345 --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- int -12345 --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- float 10.5 --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- float -10.5 --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- float 10.1234567e10 --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- float 10.7654321E-10 --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- float .5 --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- empty array --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- int indexed array --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- associative array --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- nested arrays --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- uppercase NULL --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- lowercase null --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- lowercase true --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- lowercase false --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- uppercase TRUE --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- uppercase FALSE --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- empty string DQ --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- empty string SQ --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- string DQ --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- string SQ --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- mixed case string --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- heredoc --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- instance of classWithToString --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- instance of classWithoutToString --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- undefined var --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- unset var --
+
+Warning: imagecolorallocate(): supplied argument is not a valid Image resource in %s on line %d
+bool(false)
+
+-- file resource --
+
+Warning: imagecolorallocate(): supplied resource is not a valid Image resource in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/gd/tests/imagecolorallocate_variation2.phpt b/ext/gd/tests/imagecolorallocate_variation2.phpt
new file mode 100644
index 000000000..d8885f348
--- /dev/null
+++ b/ext/gd/tests/imagecolorallocate_variation2.phpt
@@ -0,0 +1,192 @@
+--TEST--
+Test imagecolorallocate() function : usage variations - passing different data types to second argument
+--SKIPIF--
+<?php
+if(!extension_loaded('gd')) {
+ die('skip gd extension is not loaded');
+}
+if(!function_exists('imagecreatetruecolor')) {
+ die('skip imagecreatetruecolor function is not available');
+}
+?>
+--FILE--
+<?php
+/* Prototype : int imagecolorallocate(resource im, int red, int green, int blue)
+ * Description: Allocate a color for an image
+ * Source code: ext/gd/gd.c
+ */
+
+echo "*** Testing imagecolorallocate() : usage variations ***\n";
+
+$im = imagecreatetruecolor(200, 200);
+$green = 10;
+$blue = 10;
+
+$fp = tmpfile();
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$values = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 10.1234567e10' => 10.1234567e10,
+ 'float 10.7654321E-10' => 10.7654321E-10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ //resource
+ "file resource" => $fp
+);
+// loop through each element of the array for red
+foreach($values as $key => $value) {
+ echo "\n--$key--\n";
+ var_dump( imagecolorallocate($im, $value, $green, $blue) );
+};
+?>
+===DONE===
+--EXPECTF--
+*** Testing imagecolorallocate() : usage variations ***
+
+--float 10.5--
+int(657930)
+
+--float -10.5--
+bool(false)
+
+--float 10.1234567e10--
+bool(false)
+
+--float 10.7654321E-10--
+int(2570)
+
+--float .5--
+int(2570)
+
+--empty array--
+int(2570)
+
+--int indexed array--
+int(68106)
+
+--associative array--
+int(68106)
+
+--nested arrays--
+int(68106)
+
+--uppercase NULL--
+int(2570)
+
+--lowercase null--
+int(2570)
+
+--lowercase true--
+int(68106)
+
+--lowercase false--
+int(2570)
+
+--uppercase TRUE--
+int(68106)
+
+--uppercase FALSE--
+int(2570)
+
+--empty string DQ--
+int(2570)
+
+--empty string SQ--
+int(2570)
+
+--string DQ--
+int(2570)
+
+--string SQ--
+int(2570)
+
+--mixed case string--
+int(2570)
+
+--heredoc--
+int(2570)
+
+--instance of classWithToString--
+
+Notice: Object of class classWithToString could not be converted to int in %s on line %d
+int(68106)
+
+--instance of classWithoutToString--
+
+Notice: Object of class classWithoutToString could not be converted to int in %s on line %d
+int(68106)
+
+--undefined var--
+int(2570)
+
+--unset var--
+int(2570)
+
+--file resource--
+int(330250)
+===DONE===
diff --git a/ext/gd/tests/imagecolorallocate_variation3.phpt b/ext/gd/tests/imagecolorallocate_variation3.phpt
new file mode 100644
index 000000000..6bdf2596d
--- /dev/null
+++ b/ext/gd/tests/imagecolorallocate_variation3.phpt
@@ -0,0 +1,192 @@
+--TEST--
+Test imagecolorallocate() function : usage variations - passing different data types to third argument
+--SKIPIF--
+<?php
+if(!extension_loaded('gd')) {
+ die('skip gd extension is not loaded');
+}
+if(!function_exists('imagecreatetruecolor')) {
+ die('skip imagecreatetruecolor function is not available');
+}
+?>
+--FILE--
+<?php
+/* Prototype : imagecolorallocate(resource im, int red, int green, int blue)
+ * Description: Allocate a color for an image
+ * Source code: ext/gd/gd.c
+ */
+
+echo "*** Testing imagecolorallocate() : usage variations ***\n";
+
+$im = imagecreatetruecolor(200, 200);
+$red = 10;
+$blue = 10;
+
+$fp = tmpfile();
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$values = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 10.1234567e10' => 10.1234567e10,
+ 'float 10.7654321E-10' => 10.7654321E-10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ //resource
+ "file resource" => $fp
+);
+// loop through each element of the array for red
+foreach($values as $key => $value) {
+ echo "\n--$key--\n";
+ var_dump( imagecolorallocate($im, $red, $value, $blue) );
+};
+?>
+===DONE===
+--EXPECTF--
+*** Testing imagecolorallocate() : usage variations ***
+
+--float 10.5--
+int(657930)
+
+--float -10.5--
+int(652810)
+
+--float 10.1234567e10--
+int(217143306)
+
+--float 10.7654321E-10--
+int(655370)
+
+--float .5--
+int(655370)
+
+--empty array--
+int(655370)
+
+--int indexed array--
+int(655626)
+
+--associative array--
+int(655626)
+
+--nested arrays--
+int(655626)
+
+--uppercase NULL--
+int(655370)
+
+--lowercase null--
+int(655370)
+
+--lowercase true--
+int(655626)
+
+--lowercase false--
+int(655370)
+
+--uppercase TRUE--
+int(655626)
+
+--uppercase FALSE--
+int(655370)
+
+--empty string DQ--
+int(655370)
+
+--empty string SQ--
+int(655370)
+
+--string DQ--
+int(655370)
+
+--string SQ--
+int(655370)
+
+--mixed case string--
+int(655370)
+
+--heredoc--
+int(655370)
+
+--instance of classWithToString--
+
+Notice: Object of class classWithToString could not be converted to int in %s on line %d
+int(655626)
+
+--instance of classWithoutToString--
+
+Notice: Object of class classWithoutToString could not be converted to int in %s on line %d
+int(655626)
+
+--undefined var--
+int(655370)
+
+--unset var--
+int(655370)
+
+--file resource--
+int(656650)
+===DONE=== \ No newline at end of file
diff --git a/ext/gd/tests/imagecolorallocate_variation4.phpt b/ext/gd/tests/imagecolorallocate_variation4.phpt
new file mode 100644
index 000000000..f170e4ad9
--- /dev/null
+++ b/ext/gd/tests/imagecolorallocate_variation4.phpt
@@ -0,0 +1,191 @@
+--TEST--
+Test imagecolorallocate() function : usage variations - passing different data types to fourth argument
+--SKIPIF--
+<?php
+if(!extension_loaded('gd')) {
+ die('skip gd extension is not loaded');
+}
+if(!function_exists('imagecreatetruecolor')) {
+ die('skip imagecreatetruecolor function is not available');
+}
+?>
+--FILE--
+<?php
+/* Prototype : int imagecolorallocate(resource im, int red, int green, int blue)
+ * Description: Allocate a color for an image
+ * Source code: ext/gd/gd.c
+ */
+echo "*** Testing imagecolorallocate() : usage variations ***\n";
+
+$im = imagecreatetruecolor(200, 200);
+$red = 10;
+$green = 10;
+
+$fp = tmpfile();
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$values = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 10.1234567e10' => 10.1234567e10,
+ 'float 10.7654321E-10' => 10.7654321E-10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ //resource
+ "file resource" => $fp
+);
+// loop through each element of the array for red
+foreach($values as $key => $value) {
+ echo "\n--$key--\n";
+ var_dump( imagecolorallocate($im, $red, $green, $value) );
+};
+?>
+===DONE===
+--EXPECTF--
+*** Testing imagecolorallocate() : usage variations ***
+
+--float 10.5--
+int(657930)
+
+--float -10.5--
+int(657910)
+
+--float 10.1234567e10--
+bool(false)
+
+--float 10.7654321E-10--
+int(657920)
+
+--float .5--
+int(657920)
+
+--empty array--
+int(657920)
+
+--int indexed array--
+int(657921)
+
+--associative array--
+int(657921)
+
+--nested arrays--
+int(657921)
+
+--uppercase NULL--
+int(657920)
+
+--lowercase null--
+int(657920)
+
+--lowercase true--
+int(657921)
+
+--lowercase false--
+int(657920)
+
+--uppercase TRUE--
+int(657921)
+
+--uppercase FALSE--
+int(657920)
+
+--empty string DQ--
+int(657920)
+
+--empty string SQ--
+int(657920)
+
+--string DQ--
+int(657920)
+
+--string SQ--
+int(657920)
+
+--mixed case string--
+int(657920)
+
+--heredoc--
+int(657920)
+
+--instance of classWithToString--
+
+Notice: Object of class classWithToString could not be converted to int in %s on line %d
+int(657921)
+
+--instance of classWithoutToString--
+
+Notice: Object of class classWithoutToString could not be converted to int in %s on line %d
+int(657921)
+
+--undefined var--
+int(657920)
+
+--unset var--
+int(657920)
+
+--file resource--
+int(657925)
+===DONE===
diff --git a/ext/gd/tests/imagecolorallocate_variation5.phpt b/ext/gd/tests/imagecolorallocate_variation5.phpt
new file mode 100644
index 000000000..794abb3d7
--- /dev/null
+++ b/ext/gd/tests/imagecolorallocate_variation5.phpt
@@ -0,0 +1,90 @@
+--TEST--
+Test imagecolorallocate() function : usage variations - passing octal and hexa-decimal values
+--SKIPIF--
+<?php
+if(!extension_loaded('gd')) {
+ die('skip gd extension is not loaded');
+}
+if(!function_exists('imagecreatetruecolor')) {
+ die('skip imagecreatetruecolor function is not available');
+}
+?>
+--FILE--
+<?php
+/* Prototype : int imagecolorallocate(resource im, int red, int green, int blue)
+ * Description: Allocate a color for an image
+ * Source code: ext/gd/gd.c
+ */
+echo "*** Testing imagecolorallocate() : usage variations ***\n";
+
+$im = imagecreatetruecolor(200, 200);
+$red = 10;
+$green = 10;
+$blue = 10;
+
+$values = array(
+ // octal integer data
+ "Octal 000" => 000,
+ "Octal 012" => 012,
+ "Octal -012" => -012,
+ "Octal 0377" => 0377,
+
+ // hexa-decimal integer data
+ "Hexa-decimal 0x0" => 0x0,
+ "Hexa-decimal 0xA" => 0xA,
+ "Hexa-decimal -0xA" => -0xA,
+ "Hexa-decimal 0xFF" => 0xFF,
+);
+
+// loop through each element of the array for blue
+foreach($values as $key => $value) {
+ echo "\n--$key--\n";
+ var_dump( imagecolorallocate($im, $value, $green, $blue) );
+ var_dump( imagecolorallocate($im, $red, $value, $blue) );
+ var_dump( imagecolorallocate($im, $red, $green, $value) );
+};
+?>
+===DONE===
+--EXPECTF--
+*** Testing imagecolorallocate() : usage variations ***
+
+--Octal 000--
+int(2570)
+int(655370)
+int(657920)
+
+--Octal 012--
+int(657930)
+int(657930)
+int(657930)
+
+--Octal -012--
+bool(false)
+int(652810)
+int(657910)
+
+--Octal 0377--
+int(16714250)
+int(720650)
+int(658175)
+
+--Hexa-decimal 0x0--
+int(2570)
+int(655370)
+int(657920)
+
+--Hexa-decimal 0xA--
+int(657930)
+int(657930)
+int(657930)
+
+--Hexa-decimal -0xA--
+bool(false)
+int(652810)
+int(657910)
+
+--Hexa-decimal 0xFF--
+int(16714250)
+int(720650)
+int(658175)
+===DONE===
diff --git a/ext/gd/tests/imagecolorallocate_variation6.phpt b/ext/gd/tests/imagecolorallocate_variation6.phpt
new file mode 100644
index 000000000..bc939c979
--- /dev/null
+++ b/ext/gd/tests/imagecolorallocate_variation6.phpt
@@ -0,0 +1,56 @@
+--TEST--
+Test imagecolorallocate() function : usage variations - passing RED, GREEN, BLUE values more than 255
+--SKIPIF--
+<?php
+if(!extension_loaded('gd')) {
+ die('skip gd extension is not loaded');
+}
+if(!function_exists('imagecreatetruecolor')) {
+ die('skip imagecreatetruecolor function is not available');
+}
+?>
+--FILE--
+<?php
+/* Prototype : int imagecolorallocate(resource im, int red, int green, int blue)
+ * Description: Allocate a color for an image
+ * Source code: ext/gd/gd.c
+ */
+echo "*** Testing imagecolorallocate() : usage variations ***\n";
+
+$values = array(
+ //Decimal integera data
+ "Decimal 256" => 256,
+
+ // octal integer data
+ "Octal 0400" => 0400,
+
+ // hexa-decimal integer data
+ "Hexa-decimal 0x100" => 0x100
+);
+
+// loop through each element of the array for blue
+foreach($values as $key => $value) {
+ echo "\n--$key--\n";
+ //Need to be created every time to get expected return value
+ $im_palette = imagecreate(200, 200);
+ $im_true_color = imagecreatetruecolor(200, 200);
+ var_dump( imagecolorallocate($im_palette, $value, $value, $value) );
+ var_dump( imagecolorallocate($im_true_color, $value, $value, $value) );
+};
+?>
+===DONE===
+--EXPECTF--
+*** Testing imagecolorallocate() : usage variations ***
+
+--Decimal 256--
+int(0)
+int(16843008)
+
+--Octal 0400--
+int(0)
+int(16843008)
+
+--Hexa-decimal 0x100--
+int(0)
+int(16843008)
+===DONE===
diff --git a/ext/gd/tests/imagecolorstotal_basic.phpt b/ext/gd/tests/imagecolorstotal_basic.phpt
new file mode 100644
index 000000000..472a10d86
--- /dev/null
+++ b/ext/gd/tests/imagecolorstotal_basic.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test imagecolorstotal() function : basic functionality
+--SKIPIF--
+<?php
+if(!extension_loaded('gd')) {
+ die('skip gd extension is not loaded');
+}
+
+if(!function_exists('imagecolorstotal') || !function_exists('imagecreatefromgif')) {
+ die('skip imagecolorstotal and imagecreatefromgif functions not available in this build');
+}
+?>
+--FILE--
+<?php
+/* Prototype : int imagecolorstotal ( resource $image )
+ * Description: Find out the number of colors in an image's palette
+ * Source code: ext/gd/gd.c
+ */
+
+echo "*** Testing imagecolorstotal() : basic functionality ***\n";
+
+// Get an image
+$gif = dirname(__FILE__)."/php.gif";
+$im = imagecreatefromgif($gif);
+
+echo 'Total colors in image: ' . imagecolorstotal($im);
+
+// Free image
+imagedestroy($im);
+?>
+
+===DONE===
+--EXPECTF--
+*** Testing imagecolorstotal() : basic functionality ***
+Total colors in image: 128
+===DONE=== \ No newline at end of file
diff --git a/ext/gd/tests/imagecolorstotal_error.phpt b/ext/gd/tests/imagecolorstotal_error.phpt
new file mode 100644
index 000000000..995fa400e
--- /dev/null
+++ b/ext/gd/tests/imagecolorstotal_error.phpt
@@ -0,0 +1,54 @@
+--TEST--
+Test imagecolorstotal() function : error conditions - Pass incorrect number of arguments
+--SKIPIF--
+<?php
+if(!extension_loaded('gd')) {
+ die('skip gd extension is not loaded');
+}
+if(!function_exists('imagecolorstotal')) {
+ die('skip imagecolorstotal function is not available');
+}
+?>
+--FILE--
+<?php
+/* Prototype : int imagecolorstotal ( resource $image )
+ * Description: Find out the number of colors in an image's palette
+ * Source code: ext/gd/gd.c
+ */
+
+echo "*** Testing imagecolorstotal() : error conditions ***\n";
+
+// Get a resource
+$im = fopen(__FILE__, 'r');
+
+echo "\n-- Testing imagecolorstotal() function with Zero arguments --\n";
+var_dump( imagecolorstotal() );
+
+echo "\n-- Testing imagecolorstotal() function with more than expected no. of arguments --\n";
+$extra_arg = false;
+var_dump( imagecolorstotal($im, $extra_arg) );
+
+echo "\n-- Testing imagecolorstotal() function with a invalid resource\n";
+var_dump( imagecolorstotal($im) );
+
+fclose($im);
+?>
+===DONE===
+--EXPECTF--
+*** Testing imagecolorstotal() : error conditions ***
+
+-- Testing imagecolorstotal() function with Zero arguments --
+
+Warning: Wrong parameter count for imagecolorstotal() in %s on line %d
+NULL
+
+-- Testing imagecolorstotal() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for imagecolorstotal() in %s on line %d
+NULL
+
+-- Testing imagecolorstotal() function with a invalid resource
+
+Warning: imagecolorstotal(): supplied resource is not a valid Image resource in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/gd/tests/imageloadfont_invalid.phpt b/ext/gd/tests/imageloadfont_invalid.phpt
new file mode 100644
index 000000000..07bf150ac
--- /dev/null
+++ b/ext/gd/tests/imageloadfont_invalid.phpt
@@ -0,0 +1,26 @@
+--TEST--
+imageloadfont() function crashes
+--SKIPIF--
+<?php
+ if (!extension_loaded('gd')) die("skip gd extension not available\n");
+ if (!GD_BUNDLED) die('skip external GD libraries always fail');
+?>
+--FILE--
+<?php
+$filename = dirname(__FILE__) . '/font.gdf';
+$bin = "\x41\x41\x41\x41\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00";
+$fp = fopen($filename, 'wb');
+fwrite($fp, $bin);
+fclose($fp);
+
+$image = imagecreatetruecolor(50, 20);
+$font = imageloadfont($filename);
+$black = imagecolorallocate($image, 0, 0, 0);
+imagestring($image, $font, 0, 0, "Hello", $black);
+unlink($filename);
+?>
+--EXPECTF--
+Warning: imageloadfont(): gd warning: product of memory allocation multiplication would exceed INT_MAX, failing operation gracefully
+ in %simageloadfont_invalid.php on line %d
+
+Warning: imageloadfont(): Error reading font, invalid font header in %simageloadfont_invalid.php on line %d
diff --git a/ext/gd/tests/imagerotate_overflow.phpt b/ext/gd/tests/imagerotate_overflow.phpt
new file mode 100644
index 000000000..ade61d8f8
--- /dev/null
+++ b/ext/gd/tests/imagerotate_overflow.phpt
@@ -0,0 +1,32 @@
+--TEST--
+imagerotate() overflow with negative numbers
+--SKIPIF--
+<?php
+ if (!extension_loaded('gd')) {
+ die("skip gd extension not available.");
+ }
+
+ if (!function_exists('imagerotate')) {
+ die("skip imagerotate() not available.");
+ }
+?>
+--FILE--
+<?php
+
+$im = imagecreate(10, 10);
+
+$tmp = imagerotate ($im, 5, -9999999);
+
+var_dump($tmp);
+
+if ($tmp) {
+ imagedestroy($tmp);
+}
+
+if ($im) {
+ imagedestroy($im);
+}
+
+?>
+--EXPECT--
+bool(false)
diff --git a/ext/gd/tests/php.gif b/ext/gd/tests/php.gif
new file mode 100644
index 000000000..f352c7308
--- /dev/null
+++ b/ext/gd/tests/php.gif
Binary files differ
diff --git a/ext/gettext/gettext.c b/ext/gettext/gettext.c
index 71bd68a7f..2bb47f763 100644
--- a/ext/gettext/gettext.c
+++ b/ext/gettext/gettext.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: gettext.c,v 1.46.2.2.2.5 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: gettext.c,v 1.46.2.2.2.9 2008/12/31 11:17:38 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -144,6 +144,21 @@ zend_module_entry php_gettext_module_entry = {
ZEND_GET_MODULE(php_gettext)
#endif
+#define PHP_GETTEXT_MAX_DOMAIN_LENGTH 1024
+#define PHP_GETTEXT_MAX_MSGID_LENGTH 4096
+
+#define PHP_GETTEXT_DOMAIN_LENGTH_CHECK \
+ if (domain_len > PHP_GETTEXT_MAX_DOMAIN_LENGTH) { \
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "domain passed too long"); \
+ RETURN_FALSE; \
+ }
+
+#define PHP_GETTEXT_LENGTH_CHECK(check_name, check_len) \
+ if (check_len > PHP_GETTEXT_MAX_MSGID_LENGTH) { \
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s passed too long", check_name); \
+ RETURN_FALSE; \
+ }
+
PHP_MINFO_FUNCTION(php_gettext)
{
php_info_print_table_start();
@@ -155,18 +170,17 @@ PHP_MINFO_FUNCTION(php_gettext)
Set the textdomain to "domain". Returns the current domain */
PHP_NAMED_FUNCTION(zif_textdomain)
{
- zval **domain;
- char *domain_name, *retval;
- char *val;
+ char *domain, *domain_name, *retval;
+ int domain_len;
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &domain) == FAILURE) {
- WRONG_PARAM_COUNT;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &domain, &domain_len) == FAILURE) {
+ return;
}
- convert_to_string_ex(domain);
- val = Z_STRVAL_PP(domain);
- if (strcmp(val, "") && strcmp(val, "0")) {
- domain_name = val;
+ PHP_GETTEXT_DOMAIN_LENGTH_CHECK
+
+ if (strcmp(domain, "") && strcmp(domain, "0")) {
+ domain_name = domain;
} else {
domain_name = NULL;
}
@@ -181,15 +195,15 @@ PHP_NAMED_FUNCTION(zif_textdomain)
Return the translation of msgid for the current domain, or msgid unaltered if a translation does not exist */
PHP_NAMED_FUNCTION(zif_gettext)
{
- zval **msgid;
- char *msgstr;
+ char *msgid, *msgstr;
+ int msgid_len;
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &msgid) == FAILURE) {
- WRONG_PARAM_COUNT;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &msgid, &msgid_len) == FAILURE) {
+ return;
}
- convert_to_string_ex(msgid);
- msgstr = gettext(Z_STRVAL_PP(msgid));
+ PHP_GETTEXT_LENGTH_CHECK("msgid", msgid_len)
+ msgstr = gettext(msgid);
RETURN_STRING(msgstr, 1);
}
@@ -199,16 +213,17 @@ PHP_NAMED_FUNCTION(zif_gettext)
Return the translation of msgid for domain_name, or msgid unaltered if a translation does not exist */
PHP_NAMED_FUNCTION(zif_dgettext)
{
- zval **domain_name, **msgid;
- char *msgstr;
+ char *domain, *msgid, *msgstr;
+ int domain_len, msgid_len;
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &domain_name, &msgid) == FAILURE) {
- WRONG_PARAM_COUNT;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &domain, &domain_len, &msgid, &msgid_len) == FAILURE) {
+ return;
}
- convert_to_string_ex(domain_name);
- convert_to_string_ex(msgid);
- msgstr = dgettext(Z_STRVAL_PP(domain_name), Z_STRVAL_PP(msgid));
+ PHP_GETTEXT_DOMAIN_LENGTH_CHECK
+ PHP_GETTEXT_LENGTH_CHECK("msgid", msgid_len)
+
+ msgstr = dgettext(domain, msgid);
RETURN_STRING(msgstr, 1);
}
@@ -218,17 +233,18 @@ PHP_NAMED_FUNCTION(zif_dgettext)
Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist */
PHP_NAMED_FUNCTION(zif_dcgettext)
{
- zval **domain_name, **msgid, **category;
- char *msgstr;
+ char *domain, *msgid, *msgstr;
+ int domain_len, msgid_len;
+ long category;
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &domain_name, &msgid, &category) == FAILURE) {
- WRONG_PARAM_COUNT;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssl", &domain, &domain_len, &msgid, &msgid_len, &category) == FAILURE) {
+ return;
}
- convert_to_string_ex(domain_name);
- convert_to_string_ex(msgid);
- convert_to_long_ex(category);
- msgstr = dcgettext(Z_STRVAL_PP(domain_name), Z_STRVAL_PP(msgid), Z_LVAL_PP(category));
+ PHP_GETTEXT_DOMAIN_LENGTH_CHECK
+ PHP_GETTEXT_LENGTH_CHECK("msgid", msgid_len)
+
+ msgstr = dcgettext(domain, msgid, category);
RETURN_STRING(msgstr, 1);
}
@@ -238,29 +254,30 @@ PHP_NAMED_FUNCTION(zif_dcgettext)
Bind to the text domain domain_name, looking for translations in dir. Returns the current domain */
PHP_NAMED_FUNCTION(zif_bindtextdomain)
{
- zval **domain_name, **dir;
+ char *domain, *dir;
+ int domain_len, dir_len;
char *retval, dir_name[MAXPATHLEN];
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &domain_name, &dir) == FAILURE) {
- WRONG_PARAM_COUNT;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &domain, &domain_len, &dir, &dir_len) == FAILURE) {
+ return;
}
- convert_to_string_ex(domain_name);
- convert_to_string_ex(dir);
- if (Z_STRVAL_PP(domain_name)[0] == '\0') {
+ PHP_GETTEXT_DOMAIN_LENGTH_CHECK
+
+ if (domain[0] == '\0') {
php_error(E_WARNING, "The first parameter of bindtextdomain must not be empty");
RETURN_FALSE;
}
-
- if (Z_STRVAL_PP(dir)[0] != '\0' && strcmp(Z_STRVAL_PP(dir), "0")) {
- if (!VCWD_REALPATH(Z_STRVAL_PP(dir), dir_name)) {
+
+ if (dir[0] != '\0' && strcmp(dir, "0")) {
+ if (!VCWD_REALPATH(dir, dir_name)) {
RETURN_FALSE;
}
} else if (!VCWD_GETCWD(dir_name, MAXPATHLEN)) {
RETURN_FALSE;
}
- retval = bindtextdomain(Z_STRVAL_PP(domain_name), dir_name);
+ retval = bindtextdomain(domain, dir_name);
RETURN_STRING(retval, 1);
}
@@ -271,22 +288,20 @@ PHP_NAMED_FUNCTION(zif_bindtextdomain)
Plural version of gettext() */
PHP_NAMED_FUNCTION(zif_ngettext)
{
- zval **msgid1, **msgid2, **count;
- char *msgstr;
+ char *msgid1, *msgid2, *msgstr;
+ int msgid1_len, msgid2_len;
+ long count;
- RETVAL_FALSE;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssl", &msgid1, &msgid1_len, &msgid2, &msgid2_len, &count) == FAILURE) {
+ return;
+ }
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &msgid1, &msgid2, &count) == FAILURE) {
- WRONG_PARAM_COUNT;
- } else {
- convert_to_string_ex(msgid1);
- convert_to_string_ex(msgid2);
- convert_to_long_ex(count);
+ PHP_GETTEXT_LENGTH_CHECK("msgid1", msgid1_len)
+ PHP_GETTEXT_LENGTH_CHECK("msgid2", msgid2_len)
- msgstr = ngettext(Z_STRVAL_PP(msgid1), Z_STRVAL_PP(msgid2), Z_LVAL_PP(count));
- if (msgstr) {
- RETVAL_STRING (msgstr, 1);
- }
+ msgstr = ngettext(msgid1, msgid2, count);
+ if (msgstr) {
+ RETVAL_STRING(msgstr, 1);
}
}
/* }}} */
@@ -297,24 +312,22 @@ PHP_NAMED_FUNCTION(zif_ngettext)
Plural version of dgettext() */
PHP_NAMED_FUNCTION(zif_dngettext)
{
- zval **domain, **msgid1, **msgid2, **count;
+ char *domain, *msgid1, *msgid2, *msgstr = NULL;
+ int domain_len, msgid1_len, msgid2_len;
+ long count;
- RETVAL_FALSE;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sssl", &domain, &domain_len,
+ &msgid1, &msgid1_len, &msgid2, &msgid2_len, &count) == FAILURE) {
+ return;
+ }
- if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &domain, &msgid1, &msgid2, &count) == FAILURE) {
- WRONG_PARAM_COUNT;
- } else {
- char *msgstr;
-
- convert_to_string_ex(domain);
- convert_to_string_ex(msgid1);
- convert_to_string_ex(msgid2);
- convert_to_long_ex(count);
-
- msgstr = dngettext(Z_STRVAL_PP(domain), Z_STRVAL_PP(msgid1), Z_STRVAL_PP(msgid2), Z_LVAL_PP(count));
- if (msgstr) {
- RETVAL_STRING(msgstr, 1);
- }
+ PHP_GETTEXT_DOMAIN_LENGTH_CHECK
+ PHP_GETTEXT_LENGTH_CHECK("msgid1", msgid1_len)
+ PHP_GETTEXT_LENGTH_CHECK("msgid2", msgid2_len)
+
+ msgstr = dngettext(domain, msgid1, msgid2, count);
+ if (msgstr) {
+ RETVAL_STRING(msgstr, 1);
}
}
/* }}} */
@@ -322,29 +335,28 @@ PHP_NAMED_FUNCTION(zif_dngettext)
#if HAVE_DCNGETTEXT
/* {{{ proto string dcngettext (string domain, string msgid1, string msgid2, int n, int category)
- Plural version of dcgettext() */
+ Plural version of dcgettext() */
PHP_NAMED_FUNCTION(zif_dcngettext)
{
- zval **domain, **msgid1, **msgid2, **count, **category;
+ char *domain, *msgid1, *msgid2, *msgstr = NULL;
+ int domain_len, msgid1_len, msgid2_len;
+ long count, category;
RETVAL_FALSE;
- if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &domain, &msgid1, &msgid2, &count, &category) == FAILURE) {
- WRONG_PARAM_COUNT;
- } else {
- char* msgstr = NULL;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sssll", &domain, &domain_len,
+ &msgid1, &msgid1_len, &msgid2, &msgid2_len, &count, &category) == FAILURE) {
+ return;
+ }
- convert_to_string_ex(domain);
- convert_to_string_ex(msgid1);
- convert_to_string_ex(msgid2);
- convert_to_long_ex(count);
- convert_to_long_ex(category);
+ PHP_GETTEXT_DOMAIN_LENGTH_CHECK
+ PHP_GETTEXT_LENGTH_CHECK("msgid1", msgid1_len)
+ PHP_GETTEXT_LENGTH_CHECK("msgid2", msgid2_len)
- msgstr = dcngettext(Z_STRVAL_PP(domain), Z_STRVAL_PP(msgid1), Z_STRVAL_PP(msgid2), Z_LVAL_PP(count), Z_LVAL_PP(category));
+ msgstr = dcngettext(domain, msgid1, msgid2, count, category);
- if (msgstr) {
- RETVAL_STRING(msgstr, 1);
- }
+ if (msgstr) {
+ RETVAL_STRING(msgstr, 1);
}
}
/* }}} */
@@ -356,22 +368,21 @@ PHP_NAMED_FUNCTION(zif_dcngettext)
Specify the character encoding in which the messages from the DOMAIN message catalog will be returned. */
PHP_NAMED_FUNCTION(zif_bind_textdomain_codeset)
{
- zval **domain, **codeset;
- char *retval;
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &domain, &codeset) == FAILURE) {
- WRONG_PARAM_COUNT;
- } else {
- convert_to_string_ex(domain);
- convert_to_string_ex(codeset);
-
- retval = bind_textdomain_codeset(Z_STRVAL_PP(domain), Z_STRVAL_PP(codeset));
+ char *domain, *codeset, *retval = NULL;
+ int domain_len, codeset_len;
- if (!retval) {
- RETURN_FALSE;
- }
- RETURN_STRING(retval, 1);
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &domain, &domain_len, &codeset, &codeset_len) == FAILURE) {
+ return;
}
+
+ PHP_GETTEXT_DOMAIN_LENGTH_CHECK
+
+ retval = bind_textdomain_codeset(domain, codeset);
+
+ if (!retval) {
+ RETURN_FALSE;
+ }
+ RETURN_STRING(retval, 1);
}
/* }}} */
#endif
diff --git a/ext/gettext/php_gettext.h b/ext/gettext/php_gettext.h
index f75f53427..5f1ecafc3 100644
--- a/ext/gettext/php_gettext.h
+++ b/ext/gettext/php_gettext.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_gettext.h,v 1.20.2.1.2.2 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: php_gettext.h,v 1.20.2.1.2.3 2008/12/31 11:17:38 sebastian Exp $ */
#ifndef PHP_GETTEXT_H
#define PHP_GETTEXT_H
diff --git a/ext/gettext/tests/44938.phpt b/ext/gettext/tests/44938.phpt
new file mode 100644
index 000000000..f2d594aa5
--- /dev/null
+++ b/ext/gettext/tests/44938.phpt
@@ -0,0 +1,85 @@
+--TEST--
+#44938: gettext functions crash with overlong strings
+--SKIPIF--
+<?php
+if (!extension_loaded("gettext")) {
+ die("skip\n");
+}
+--FILE--
+<?php
+$overflown = str_repeat('C', 8476509);
+$msgid = "msgid";
+$domain = "domain";
+$category = "cat";
+
+var_dump(bindtextdomain($overflown, 'path'));
+
+var_dump(dngettext($overflown, $msgid, $msgid, 1));
+var_dump(dngettext($domain, $overflown, $msgid, 1));
+var_dump(dngettext($domain, $msgid, $overflown, 1));
+
+var_dump(gettext($overflown));
+
+var_dump(ngettext($overflown, $msgid, -1));
+var_dump(ngettext($msgid, $overflown, -1));
+
+var_dump(dcgettext($overflown, $msgid, -1));
+var_dump(dcgettext($domain, $overflown, -1));
+
+var_dump(dcngettext($overflown, $msgid, $msgid, -1, -1));
+var_dump(dcngettext($domain, $overflown, $msgid, -1, -1));
+var_dump(dcngettext($domain, $msgid, $overflown, -1, -1));
+
+var_dump(dgettext($overflown, $msgid));
+var_dump(dgettext($domain, $overflown));
+
+var_dump(textdomain($overflown));
+?>
+==DONE==
+--EXPECTF--
+
+Warning: bindtextdomain(): domain passed too long in %s on line %d
+bool(false)
+
+Warning: dngettext(): domain passed too long in %s on line %d
+bool(false)
+
+Warning: dngettext(): msgid1 passed too long in %s on line %d
+bool(false)
+
+Warning: dngettext(): msgid2 passed too long in %s on line %d
+bool(false)
+
+Warning: gettext(): msgid passed too long in %s on line %d
+bool(false)
+
+Warning: ngettext(): msgid1 passed too long in %s on line %d
+bool(false)
+
+Warning: ngettext(): msgid2 passed too long in %s on line %d
+bool(false)
+
+Warning: dcgettext(): domain passed too long in %s on line %d
+bool(false)
+
+Warning: dcgettext(): msgid passed too long in %s on line %d
+bool(false)
+
+Warning: dcngettext(): domain passed too long in %s on line %d
+bool(false)
+
+Warning: dcngettext(): msgid1 passed too long in %s on line %d
+bool(false)
+
+Warning: dcngettext(): msgid2 passed too long in %s on line %d
+bool(false)
+
+Warning: dgettext(): domain passed too long in %s on line %d
+bool(false)
+
+Warning: dgettext(): msgid passed too long in %s on line %d
+bool(false)
+
+Warning: textdomain(): domain passed too long in %s on line %d
+bool(false)
+==DONE==
diff --git a/ext/gettext/tests/dcngettext.phpt b/ext/gettext/tests/dcngettext.phpt
index e5961eb1e..2b8e2b196 100644
--- a/ext/gettext/tests/dcngettext.phpt
+++ b/ext/gettext/tests/dcngettext.phpt
@@ -19,7 +19,7 @@ var_dump(dcngettext("","","",0,0));
echo "Done\n";
?>
--EXPECTF--
-Warning: Wrong parameter count for dcngettext() in %s on line %d
+Warning: dcngettext() expects exactly 5 parameters, 4 given in %s on line %d
bool(false)
string(1) "1"
string(4) "test"
diff --git a/ext/gmp/gmp.c b/ext/gmp/gmp.c
index 09f468d1b..406862eba 100644
--- a/ext/gmp/gmp.c
+++ b/ext/gmp/gmp.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/gmp/php_gmp.h b/ext/gmp/php_gmp.h
index ff8c66625..73f9b2639 100644
--- a/ext/gmp/php_gmp.h
+++ b/ext/gmp/php_gmp.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/hash/hash.c b/ext/hash/hash.c
index 8a5e2bf70..259f3781e 100644
--- a/ext/hash/hash.c
+++ b/ext/hash/hash.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: hash.c,v 1.18.2.5.2.8 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: hash.c,v 1.18.2.5.2.9 2008/12/31 11:17:38 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/hash/hash_adler32.c b/ext/hash/hash_adler32.c
index 9dc5dc4b2..8c4121b37 100644
--- a/ext/hash/hash_adler32.c
+++ b/ext/hash/hash_adler32.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: hash_adler32.c,v 1.3.2.4.2.3 2007/12/31 07:20:06 sebastian Exp $ */
+/* $Id: hash_adler32.c,v 1.3.2.4.2.4 2008/12/31 11:17:38 sebastian Exp $ */
#include "php_hash.h"
#include "php_hash_adler32.h"
diff --git a/ext/hash/hash_crc32.c b/ext/hash/hash_crc32.c
index f13c5d45e..12be97349 100644
--- a/ext/hash/hash_crc32.c
+++ b/ext/hash/hash_crc32.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: hash_crc32.c,v 1.2.2.3.2.3 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: hash_crc32.c,v 1.2.2.3.2.5 2008/12/31 11:17:38 sebastian Exp $ */
#include "php_hash.h"
#include "php_hash_crc32.h"
@@ -56,6 +56,16 @@ PHP_HASH_API void PHP_CRC32Final(unsigned char digest[4], PHP_CRC32_CTX *context
context->state = 0;
}
+PHP_HASH_API void PHP_CRC32BFinal(unsigned char digest[4], PHP_CRC32_CTX *context)
+{
+ context->state=~context->state;
+ digest[0] = (unsigned char) ((context->state >> 24) & 0xff);
+ digest[1] = (unsigned char) ((context->state >> 16) & 0xff);
+ digest[2] = (unsigned char) ((context->state >> 8) & 0xff);
+ digest[3] = (unsigned char) (context->state & 0xff);
+ context->state = 0;
+}
+
const php_hash_ops php_hash_crc32_ops = {
(php_hash_init_func_t) PHP_CRC32Init,
(php_hash_update_func_t) PHP_CRC32Update,
@@ -68,7 +78,7 @@ const php_hash_ops php_hash_crc32_ops = {
const php_hash_ops php_hash_crc32b_ops = {
(php_hash_init_func_t) PHP_CRC32Init,
(php_hash_update_func_t) PHP_CRC32BUpdate,
- (php_hash_final_func_t) PHP_CRC32Final,
+ (php_hash_final_func_t) PHP_CRC32BFinal,
4, /* what to say here? */
4,
sizeof(PHP_CRC32_CTX)
diff --git a/ext/hash/hash_gost.c b/ext/hash/hash_gost.c
index c860c347c..2075c2230 100644
--- a/ext/hash/hash_gost.c
+++ b/ext/hash/hash_gost.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: hash_gost.c,v 1.2.2.3.2.3 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: hash_gost.c,v 1.2.2.3.2.4 2008/12/31 11:17:38 sebastian Exp $ */
#include "php_hash.h"
#include "php_hash_gost.h"
diff --git a/ext/hash/hash_haval.c b/ext/hash/hash_haval.c
index 04557f634..fcdcd9fb3 100644
--- a/ext/hash/hash_haval.c
+++ b/ext/hash/hash_haval.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: hash_haval.c,v 1.4.2.3.2.3 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: hash_haval.c,v 1.4.2.3.2.4 2008/12/31 11:17:38 sebastian Exp $ */
#include "php_hash.h"
#include "php_hash_haval.h"
diff --git a/ext/hash/hash_md.c b/ext/hash/hash_md.c
index 85347db26..a3dac8b6f 100644
--- a/ext/hash/hash_md.c
+++ b/ext/hash/hash_md.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: hash_md.c,v 1.6.2.4.2.4 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: hash_md.c,v 1.6.2.4.2.5 2008/12/31 11:17:38 sebastian Exp $ */
#include "php_hash.h"
#include "php_hash_md.h"
diff --git a/ext/hash/hash_ripemd.c b/ext/hash/hash_ripemd.c
index e656431ae..410586e58 100644
--- a/ext/hash/hash_ripemd.c
+++ b/ext/hash/hash_ripemd.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: hash_ripemd.c,v 1.5.2.3.2.4 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: hash_ripemd.c,v 1.5.2.3.2.5 2008/12/31 11:17:38 sebastian Exp $ */
/* Heavily borrowed from md5.c & sha1.c of PHP archival fame
Note that ripemd laughs in the face of logic and uses
diff --git a/ext/hash/hash_salsa.c b/ext/hash/hash_salsa.c
index 9cc84ce8b..0c102adbf 100644
--- a/ext/hash/hash_salsa.c
+++ b/ext/hash/hash_salsa.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: hash_salsa.c,v 1.3.2.3.2.3 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: hash_salsa.c,v 1.3.2.3.2.4 2008/12/31 11:17:38 sebastian Exp $ */
#include "php_hash.h"
#include "php_hash_salsa.h"
diff --git a/ext/hash/hash_sha.c b/ext/hash/hash_sha.c
index 74aef1544..ce3acd253 100644
--- a/ext/hash/hash_sha.c
+++ b/ext/hash/hash_sha.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: hash_sha.c,v 1.10.2.3.2.3 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: hash_sha.c,v 1.10.2.3.2.4 2008/12/31 11:17:38 sebastian Exp $ */
#include "php_hash.h"
#include "php_hash_sha.h"
diff --git a/ext/hash/hash_snefru.c b/ext/hash/hash_snefru.c
index 412698502..2886ba872 100644
--- a/ext/hash/hash_snefru.c
+++ b/ext/hash/hash_snefru.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: hash_snefru.c,v 1.3.2.3.2.3 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: hash_snefru.c,v 1.3.2.3.2.4 2008/12/31 11:17:38 sebastian Exp $ */
#include "php_hash.h"
#include "php_hash_snefru.h"
diff --git a/ext/hash/hash_tiger.c b/ext/hash/hash_tiger.c
index 906ad5ab0..7d2232728 100644
--- a/ext/hash/hash_tiger.c
+++ b/ext/hash/hash_tiger.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: hash_tiger.c,v 1.4.2.4.2.4 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: hash_tiger.c,v 1.4.2.4.2.5 2008/12/31 11:17:38 sebastian Exp $ */
#include "php_hash.h"
#include "php_hash_tiger.h"
diff --git a/ext/hash/hash_whirlpool.c b/ext/hash/hash_whirlpool.c
index 8b6c7ed27..bb3202726 100644
--- a/ext/hash/hash_whirlpool.c
+++ b/ext/hash/hash_whirlpool.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: hash_whirlpool.c,v 1.3.2.3.2.3 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: hash_whirlpool.c,v 1.3.2.3.2.4 2008/12/31 11:17:38 sebastian Exp $ */
#include "php_hash.h"
diff --git a/ext/hash/php_hash.h b/ext/hash/php_hash.h
index 2c863f722..b58fdd302 100644
--- a/ext/hash/php_hash.h
+++ b/ext/hash/php_hash.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_hash.h,v 1.13.2.7.2.4 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_hash.h,v 1.13.2.7.2.5 2008/12/31 11:17:38 sebastian Exp $ */
#ifndef PHP_HASH_H
#define PHP_HASH_H
diff --git a/ext/hash/php_hash_adler32.h b/ext/hash/php_hash_adler32.h
index 36f56de72..aecfd56a9 100644
--- a/ext/hash/php_hash_adler32.h
+++ b/ext/hash/php_hash_adler32.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_hash_adler32.h,v 1.3.2.3.2.2 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_hash_adler32.h,v 1.3.2.3.2.3 2008/12/31 11:17:38 sebastian Exp $ */
#ifndef PHP_HASH_ADLER32_H
#define PHP_HASH_ADLER32_H
diff --git a/ext/hash/php_hash_crc32.h b/ext/hash/php_hash_crc32.h
index 0a74fb884..95ee4cae3 100644
--- a/ext/hash/php_hash_crc32.h
+++ b/ext/hash/php_hash_crc32.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_hash_crc32.h,v 1.3.2.3.2.2 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_hash_crc32.h,v 1.3.2.3.2.3 2008/12/31 11:17:38 sebastian Exp $ */
#ifndef PHP_HASH_CRC32_H
#define PHP_HASH_CRC32_H
diff --git a/ext/hash/php_hash_crc32_tables.h b/ext/hash/php_hash_crc32_tables.h
index ba9ad1b1b..213bf7b53 100644
--- a/ext/hash/php_hash_crc32_tables.h
+++ b/ext/hash/php_hash_crc32_tables.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_hash_crc32_tables.h,v 1.2.2.3.2.2 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_hash_crc32_tables.h,v 1.2.2.3.2.3 2008/12/31 11:17:38 sebastian Exp $ */
static const php_hash_uint32 crc32_table[] = { 0x0,
0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b,
diff --git a/ext/hash/php_hash_gost.h b/ext/hash/php_hash_gost.h
index a54286e36..7e7a716ff 100644
--- a/ext/hash/php_hash_gost.h
+++ b/ext/hash/php_hash_gost.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_hash_gost.h,v 1.2.2.4.2.2 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_hash_gost.h,v 1.2.2.4.2.3 2008/12/31 11:17:38 sebastian Exp $ */
#ifndef PHP_HASH_GOST_H
#define PHP_HASH_GOST_H
diff --git a/ext/hash/php_hash_haval.h b/ext/hash/php_hash_haval.h
index 8b8672a54..46ea0756a 100644
--- a/ext/hash/php_hash_haval.h
+++ b/ext/hash/php_hash_haval.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_hash_haval.h,v 1.2.2.3.2.2 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_hash_haval.h,v 1.2.2.3.2.3 2008/12/31 11:17:38 sebastian Exp $ */
#ifndef PHP_HASH_HAVAL_H
#define PHP_HASH_HAVAL_H
diff --git a/ext/hash/php_hash_md.h b/ext/hash/php_hash_md.h
index adff1e7e4..ea498b328 100644
--- a/ext/hash/php_hash_md.h
+++ b/ext/hash/php_hash_md.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_hash_md.h,v 1.2.2.4.2.3 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_hash_md.h,v 1.2.2.4.2.4 2008/12/31 11:17:38 sebastian Exp $ */
#ifndef PHP_HASH_MD_H
#define PHP_HASH_MD_H
diff --git a/ext/hash/php_hash_ripemd.h b/ext/hash/php_hash_ripemd.h
index 18180e0e1..3b9c145f2 100644
--- a/ext/hash/php_hash_ripemd.h
+++ b/ext/hash/php_hash_ripemd.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_hash_ripemd.h,v 1.2.2.3.2.3 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_hash_ripemd.h,v 1.2.2.3.2.4 2008/12/31 11:17:38 sebastian Exp $ */
#ifndef PHP_HASH_RIPEMD_H
#define PHP_HASH_RIPEMD_H
diff --git a/ext/hash/php_hash_salsa.h b/ext/hash/php_hash_salsa.h
index dad09c78a..12641f581 100644
--- a/ext/hash/php_hash_salsa.h
+++ b/ext/hash/php_hash_salsa.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_hash_salsa.h,v 1.4.2.4.2.2 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_hash_salsa.h,v 1.4.2.4.2.3 2008/12/31 11:17:38 sebastian Exp $ */
#ifndef PHP_HASH_SALSA_H
#define PHP_HASH_SALSA_H
diff --git a/ext/hash/php_hash_sha.h b/ext/hash/php_hash_sha.h
index 1fd952b23..276d9fe2f 100644
--- a/ext/hash/php_hash_sha.h
+++ b/ext/hash/php_hash_sha.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_hash_sha.h,v 1.3.2.3.2.2 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_hash_sha.h,v 1.3.2.3.2.3 2008/12/31 11:17:38 sebastian Exp $ */
#ifndef PHP_HASH_SHA_H
#define PHP_HASH_SHA_H
diff --git a/ext/hash/php_hash_snefru.h b/ext/hash/php_hash_snefru.h
index bc99fda11..8f8f7fdd3 100644
--- a/ext/hash/php_hash_snefru.h
+++ b/ext/hash/php_hash_snefru.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_hash_snefru.h,v 1.2.2.4.2.2 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_hash_snefru.h,v 1.2.2.4.2.3 2008/12/31 11:17:38 sebastian Exp $ */
#ifndef PHP_HASH_SNEFRU_H
#define PHP_HASH_SNEFRU_H
diff --git a/ext/hash/php_hash_snefru_tables.h b/ext/hash/php_hash_snefru_tables.h
index ed461a7df..ef4abb8b8 100644
--- a/ext/hash/php_hash_snefru_tables.h
+++ b/ext/hash/php_hash_snefru_tables.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_hash_snefru_tables.h,v 1.3.2.3.2.2 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_hash_snefru_tables.h,v 1.3.2.3.2.3 2008/12/31 11:17:38 sebastian Exp $ */
static const php_hash_uint32 tables[16][256]= {
diff --git a/ext/hash/php_hash_tiger.h b/ext/hash/php_hash_tiger.h
index 338ead529..5fab89316 100644
--- a/ext/hash/php_hash_tiger.h
+++ b/ext/hash/php_hash_tiger.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_hash_tiger.h,v 1.3.2.3.2.2 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_hash_tiger.h,v 1.3.2.3.2.3 2008/12/31 11:17:38 sebastian Exp $ */
#ifndef PHP_HASH_TIGER_H
#define PHP_HASH_TIGER_H
diff --git a/ext/hash/php_hash_tiger_tables.h b/ext/hash/php_hash_tiger_tables.h
index 2fba9a4ff..d0703089d 100644
--- a/ext/hash/php_hash_tiger_tables.h
+++ b/ext/hash/php_hash_tiger_tables.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_hash_tiger_tables.h,v 1.2.2.3.2.2 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_hash_tiger_tables.h,v 1.2.2.3.2.3 2008/12/31 11:17:38 sebastian Exp $ */
#define t1 (table)
#define t2 (table+256)
diff --git a/ext/hash/php_hash_types.h b/ext/hash/php_hash_types.h
index c7a7b0e42..d5970c0a3 100644
--- a/ext/hash/php_hash_types.h
+++ b/ext/hash/php_hash_types.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_hash_types.h,v 1.2.2.4.2.2 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_hash_types.h,v 1.2.2.4.2.3 2008/12/31 11:17:38 sebastian Exp $ */
#ifndef PHP_HASH_TYPES_H
#define PHP_HASH_TYPES_H
diff --git a/ext/hash/php_hash_whirlpool.h b/ext/hash/php_hash_whirlpool.h
index aed8f0480..138bfa36d 100644
--- a/ext/hash/php_hash_whirlpool.h
+++ b/ext/hash/php_hash_whirlpool.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_hash_whirlpool.h,v 1.2.2.4.2.2 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_hash_whirlpool.h,v 1.2.2.4.2.3 2008/12/31 11:17:38 sebastian Exp $ */
#ifndef PHP_HASH_WHIRLPOOL_H
#define PHP_HASH_WHIRLPOOL_H
diff --git a/ext/hash/php_hash_whirlpool_tables.h b/ext/hash/php_hash_whirlpool_tables.h
index 69aa4293f..c097fa26a 100644
--- a/ext/hash/php_hash_whirlpool_tables.h
+++ b/ext/hash/php_hash_whirlpool_tables.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_hash_whirlpool_tables.h,v 1.1.2.3.2.2 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_hash_whirlpool_tables.h,v 1.1.2.3.2.3 2008/12/31 11:17:38 sebastian Exp $ */
#ifndef PHP_HASH_WHIRLPOOL_TABLES_H
#define PHP_HASH_WHIRLPOOL_TABLES_H
diff --git a/ext/hash/tests/crc32.phpt b/ext/hash/tests/crc32.phpt
index c51209c60..3862fb17a 100644
--- a/ext/hash/tests/crc32.phpt
+++ b/ext/hash/tests/crc32.phpt
@@ -28,9 +28,9 @@ echo hash('crc32b', '12345678901234567890123456789012345678901234567890123456789
882174a0
96790816
00000000
-43beb7e8
-c2412435
-7f9d1520
-bd50274c
-d2e6c21f
-724aa97c
+e8b7be43
+352441c2
+20159d7f
+4c2750bd
+1fc2e6d2
+7ca94a72
diff --git a/ext/hash/tests/hash_algos.phpt b/ext/hash/tests/hash_algos.phpt
new file mode 100644
index 000000000..01a664a70
--- /dev/null
+++ b/ext/hash/tests/hash_algos.phpt
@@ -0,0 +1,101 @@
+--TEST--
+Test hash_algos() function : basic functionality
+--SKIPIF--
+<?php
+ if(!extension_loaded("hash")) print "skip";
+?>
+--FILE--
+<?php
+
+/* Prototype : array hash_algos (void)
+ * Description: Return a list of registered hashing algorithms
+ * Source code: ext/hash/hash.c
+ * Alias to functions:
+*/
+
+echo "*** Testing hash_algos() : basic functionality ***\n";
+var_dump(hash_algos());
+
+?>
+===Done===
+--EXPECTF--
+*** Testing hash_algos() : basic functionality ***
+array(38) {
+ [0]=>
+ string(3) "md2"
+ [1]=>
+ string(3) "md4"
+ [2]=>
+ string(3) "md5"
+ [3]=>
+ string(4) "sha1"
+ [4]=>
+ string(6) "sha256"
+ [5]=>
+ string(6) "sha384"
+ [6]=>
+ string(6) "sha512"
+ [7]=>
+ string(9) "ripemd128"
+ [8]=>
+ string(9) "ripemd160"
+ [9]=>
+ string(9) "ripemd256"
+ [10]=>
+ string(9) "ripemd320"
+ [11]=>
+ string(9) "whirlpool"
+ [12]=>
+ string(10) "tiger128,3"
+ [13]=>
+ string(10) "tiger160,3"
+ [14]=>
+ string(10) "tiger192,3"
+ [15]=>
+ string(10) "tiger128,4"
+ [16]=>
+ string(10) "tiger160,4"
+ [17]=>
+ string(10) "tiger192,4"
+ [18]=>
+ string(6) "snefru"
+ [19]=>
+ string(4) "gost"
+ [20]=>
+ string(7) "adler32"
+ [21]=>
+ string(5) "crc32"
+ [22]=>
+ string(6) "crc32b"
+ [23]=>
+ string(10) "haval128,3"
+ [24]=>
+ string(10) "haval160,3"
+ [25]=>
+ string(10) "haval192,3"
+ [26]=>
+ string(10) "haval224,3"
+ [27]=>
+ string(10) "haval256,3"
+ [28]=>
+ string(10) "haval128,4"
+ [29]=>
+ string(10) "haval160,4"
+ [30]=>
+ string(10) "haval192,4"
+ [31]=>
+ string(10) "haval224,4"
+ [32]=>
+ string(10) "haval256,4"
+ [33]=>
+ string(10) "haval128,5"
+ [34]=>
+ string(10) "haval160,5"
+ [35]=>
+ string(10) "haval192,5"
+ [36]=>
+ string(10) "haval224,5"
+ [37]=>
+ string(10) "haval256,5"
+}
+===Done=== \ No newline at end of file
diff --git a/ext/hash/tests/hash_error.phpt b/ext/hash/tests/hash_error.phpt
new file mode 100644
index 000000000..1164ca706
--- /dev/null
+++ b/ext/hash/tests/hash_error.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Test hash() function : error conditions
+--SKIPIF--
+<?php extension_loaded('hash') or die('skip'); ?>
+--FILE--
+<?php
+
+/* Prototype : string hash ( string $algo , string $data [, bool $raw_output ] )
+ * Description: Generate a hash value (message digest)
+ * Source code: ext/hash/hash.c
+ * Alias to functions:
+*/
+echo "*** Testing hash() : error conditions ***\n";
+
+echo "\n-- Testing hash() function with less than expected no. of arguments --\n";
+var_dump(hash());
+var_dump(hash('adler32'));
+
+echo "\n-- Testing hash() function with more than expected no. of arguments --\n";
+$extra_arg= 10;
+var_dump(hash('adler32', '', false, $extra_arg));
+
+echo "\n-- Testing hash() function with invalid hash algorithm --\n";
+var_dump(hash('foo', ''));
+
+?>
+===Done===
+--EXPECTF--
+*** Testing hash() : error conditions ***
+
+-- Testing hash() function with less than expected no. of arguments --
+
+Warning: hash() expects at least 2 parameters, 0 given in %s on line %d
+NULL
+
+Warning: hash() expects at least 2 parameters, 1 given in %s on line %d
+NULL
+
+-- Testing hash() function with more than expected no. of arguments --
+
+Warning: hash() expects at most 3 parameters, 4 given in %s on line %d
+NULL
+
+-- Testing hash() function with invalid hash algorithm --
+
+Warning: hash(): Unknown hashing algorithm: foo in %s on line %d
+bool(false)
+===Done=== \ No newline at end of file
diff --git a/ext/hash/tests/hash_file_basic1.phpt b/ext/hash/tests/hash_file_basic1.phpt
new file mode 100644
index 000000000..4bbdeaffb
--- /dev/null
+++ b/ext/hash/tests/hash_file_basic1.phpt
@@ -0,0 +1,87 @@
+--TEST--
+Test hash_file() function : basic functionality
+--SKIPIF--
+<?php
+ if(!extension_loaded("hash")) print "skip";
+?>
+--FILE--
+<?php
+
+/* Prototype : string hash_file ( string algo, string filename [, bool raw_output] )
+ * Description: Generate a hash value using the contents of a given file
+ * Source code: ext/hash/hash.c
+ * Alias to functions:
+*/
+
+echo "*** Testing hash_file() : basic functionality ***\n";
+
+$file = dirname(__FILE__) . "hash_file.txt";
+/* Creating a temporary file file */
+if (($fp = fopen( $file, "w+")) == FALSE) {
+ echo "Cannot create file ($file)";
+ exit;
+}
+
+/* Writing into file */
+$content = "This is a sample string used to test the hash_file function with various hashing algorithms";
+if (is_writable($file)) {
+ if (fwrite($fp, $content) === FALSE) {
+ echo "Cannot write to file ($file)";
+ exit;
+ }
+}
+
+// close the file
+fclose($fp);
+
+echo "adler32: " . hash_file('adler32', $file) . "\n";
+echo "crc32: " . hash_file('crc32', $file) . "\n";
+echo "gost: " . hash_file('gost', $file). "\n";
+echo "haval128,3: " . hash_file('haval128,3', $file). "\n";
+echo "md2: " . hash_file('md2', $file). "\n";
+echo "md4: " . hash_file('md4', $file). "\n";
+echo "md5: " . hash_file('md5', $file). "\n";
+echo "ripemd128: " . hash_file('ripemd128', $file). "\n";
+echo "ripemd160: " . hash_file('ripemd160', $file). "\n";
+echo "ripemd256: " . hash_file('ripemd256', $file). "\n";
+echo "ripemd320: " . hash_file('ripemd320', $file). "\n";
+echo "sha1: " . hash_file('sha1', $file). "\n";
+echo "sha256: " . hash_file('sha256', $file). "\n";
+echo "sha384: " . hash_file('sha384', $file). "\n";
+echo "sha512: " . hash_file('sha512', $file). "\n";
+echo "snefru: " . hash_file('snefru', $file). "\n";
+echo "tiger192,3: " . hash_file('tiger192,3', $file). "\n";
+echo "whirlpool: " . hash_file('whirlpool', $file). "\n";
+
+echo "adler32(raw): " . bin2hex(hash_file('adler32', $file, TRUE)) . "\n";
+echo "md5(raw): " . bin2hex(hash_file('md5', $file, TRUE)). "\n";
+echo "sha256(raw): " . bin2hex(hash_file('sha256', $file, TRUE)). "\n";
+
+unlink($file);
+
+?>
+===Done===
+--EXPECTF--
+*** Testing hash_file() : basic functionality ***
+adler32: 2e2287ff
+crc32: 61664d33
+gost: d9e65f0c0c2ef944e4f8a01f4a46365c4f33a2853756878182a7f03e1490a4cd
+haval128,3: 8bb81269aca8b7f87829020d76a4e841
+md2: 70f791c0d8fa9edd7d08e32fcba8c354
+md4: a9d034b16bb290c57a645afd6f14cd3b
+md5: 704bf818448f5bbb94061332d2c889aa
+ripemd128: d02a5f320a11c54c7d51f933b0bd8471
+ripemd160: 3ff296ca6314313af3ed0437c8fc0ebbd3242d3b
+ripemd256: 0edd779587c11cf32781111b264251eb37529832fb207121cd45dd95002e48a8
+ripemd320: bf162fa2ff20491b3016c5d8190f8ee47d7dcda8c38eaf6779349a243a029d275eec9adf16ec1b35
+sha1: 8529b266611e3bd0d208fd9614653c2a8f23d0fe
+sha256: a0f5702fa5d3670b80033d668e8732b70550392abb53841355447f8bb0f72245
+sha384: a35d875ed96d94b6452acad910f97978200faa2398d8a0e6b9cffa33704c3809e3d2e5b0d63700d8f32a0716e7d2d528
+sha512: 1f42adaf938fbf136e381b164bae5f984c7f9fe60c82728bd889c14f187c7d63e81a0305a1731c7e0a8f3ed9fd2ec92a3833a93502bdf269532601f0b8e2bab0
+snefru: d414b2345d3e7fa1a31c044cf334bfc1fec24d89e464411998d579d24663895f
+tiger192,3: c6fa75a0be4ecf7afa3cafb4e2a08efc3a40534c0e46b971
+whirlpool: 4248b149e000477269a4a5f1a84d97cfc3d0199b7aaf505913e6f010a6f83276029d11a9ad545374bc710eb59c7d958985023ab886ffa9ec9a23852844c764ec
+adler32(raw): 2e2287ff
+md5(raw): 704bf818448f5bbb94061332d2c889aa
+sha256(raw): a0f5702fa5d3670b80033d668e8732b70550392abb53841355447f8bb0f72245
+===Done=== \ No newline at end of file
diff --git a/ext/hash/tests/hash_file_error1.phpt b/ext/hash/tests/hash_file_error1.phpt
new file mode 100644
index 000000000..14bbdb18d
--- /dev/null
+++ b/ext/hash/tests/hash_file_error1.phpt
@@ -0,0 +1,52 @@
+--TEST--
+Test hash_file() function : error conditions
+--SKIPIF--
+<?php
+ if(!extension_loaded("hash")) print "skip";
+?>
+--FILE--
+<?php
+
+/* Prototype : string hash_file ( string algo, string filename [, bool raw_output] )
+ * Description: Generate a hash value using the contents of a given file
+ * Source code: ext/hash/hash.c
+ * Alias to functions:
+*/
+
+echo "*** Testing hash_file() : error conditions ***\n";
+
+$file = dirname(__FILE__) . "hash_file.txt";
+
+echo "\n-- Testing hash_file() function with less than expected no. of arguments --\n";
+var_dump(hash_file());
+var_dump(hash_file('crc32'));
+
+echo "\n-- Testing hash_file() function with more than expected no. of arguments --\n";
+var_dump(hash_file('crc32', $file, TRUE, 10));
+
+echo "\n-- Testing hash_file() function with invalid hash algorithm --\n";
+var_dump(hash_file('foo', $file));
+
+?>
+===Done===
+--EXPECTF--
+*** Testing hash_file() : error conditions ***
+
+-- Testing hash_file() function with less than expected no. of arguments --
+
+Warning: hash_file() expects at least 2 parameters, 0 given in %s on line %d
+NULL
+
+Warning: hash_file() expects at least 2 parameters, 1 given in %s on line %d
+NULL
+
+-- Testing hash_file() function with more than expected no. of arguments --
+
+Warning: hash_file() expects at most 3 parameters, 4 given in %s on line %d
+NULL
+
+-- Testing hash_file() function with invalid hash algorithm --
+
+Warning: hash_file(): Unknown hashing algorithm: foo in %s on line %d
+bool(false)
+===Done=== \ No newline at end of file
diff --git a/ext/hash/tests/hash_hmac_basic.phpt b/ext/hash/tests/hash_hmac_basic.phpt
new file mode 100644
index 000000000..d40e0f487
--- /dev/null
+++ b/ext/hash/tests/hash_hmac_basic.phpt
@@ -0,0 +1,68 @@
+--TEST--
+Test hash_file() function : basic functionality
+--SKIPIF--
+<?php
+ if(!extension_loaded("hash")) print "skip";
+?>
+--FILE--
+<?php
+
+/* Prototype : string hash_hmac ( string $algo , string $data , string $key [, bool $raw_output ] )
+ * Description: Generate a keyed hash value using the HMAC method
+ * Source code: ext/hash/hash.c
+ * Alias to functions:
+*/
+
+echo "*** Testing hash_hmac() : basic functionality ***\n";
+
+$content = "This is a sample string used to test the hash_hmac function with various hashing algorithms";
+$key = 'secret';
+
+echo "adler32: " . hash_hmac('adler32', $content, $key) . "\n";
+echo "crc32: " . hash_hmac('crc32', $content, $key) . "\n";
+echo "gost: " . hash_hmac('gost', $content, $key) . "\n";
+echo "haval128,3: " . hash_hmac('haval128,3', $content, $key) . "\n";
+echo "md2: " . hash_hmac('md2', $content, $key) . "\n";
+echo "md4: " . hash_hmac('md4', $content, $key) . "\n";
+echo "md5: " . hash_hmac('md5', $content, $key) . "\n";
+echo "ripemd128: " . hash_hmac('ripemd128', $content, $key) . "\n";
+echo "ripemd160: " . hash_hmac('ripemd160', $content, $key) . "\n";
+echo "ripemd256: " . hash_hmac('ripemd256', $content, $key) . "\n";
+echo "ripemd320: " . hash_hmac('ripemd320', $content, $key) . "\n";
+echo "sha1: " . hash_hmac('sha1', $content, $key) . "\n";
+echo "sha256: " . hash_hmac('sha256', $content, $key) . "\n";
+echo "sha384: " . hash_hmac('sha384', $content, $key) . "\n";
+echo "sha512: " . hash_hmac('sha512', $content, $key) . "\n";
+echo "snefru: " . hash_hmac('snefru', $content, $key) . "\n";
+echo "tiger192,3: " . hash_hmac('tiger192,3', $content, $key) . "\n";
+echo "whirlpool: " . hash_hmac('whirlpool', $content, $key) . "\n";
+echo "adler32(raw): " . bin2hex(hash_hmac('adler32', $content, $key, TRUE)) . "\n";
+echo "md5(raw): " . bin2hex(hash_hmac('md5', $content, $key, TRUE)) . "\n";
+echo "sha256(raw): " . bin2hex(hash_hmac('sha256', $content, $key, TRUE)) . "\n";
+
+?>
+===Done===
+--EXPECTF--
+*** Testing hash_hmac() : basic functionality ***
+adler32: 9e033311
+crc32: 96859101
+gost: a4a3c80bdf3f8665bf07376a34dc9c1b11af7c813f4928f62e39f0c0dc564dad
+haval128,3: 82cd0f4bd36729b5c80c33efa8c13ac5
+md2: 6d111dab563025e4cb5f4425c991fa12
+md4: 10cdbfe843000c623f8b8da0d5d20b0b
+md5: 2a632783e2812cf23de100d7d6a463ae
+ripemd128: 26c2f694a65b1928b668cf55f65529b4
+ripemd160: 4b3433ba596ec39692bb7ce760a9ee5fb818113f
+ripemd256: 4e4e5ec19322895a727f272dfe68f87bc1af66cc6ce27c6c1360a5ee78a14b30
+ripemd320: f10a8ff82e828b92a5ff0a02fc9032bc61352d0d824821fc42f7e09cf5b5f41ee59fd33a730d7469
+sha1: 5bfdb62b97e2c987405463e9f7c193139c0e1fd0
+sha256: 49bde3496b9510a17d0edd8a4b0ac70148e32a1d51e881ec76faa96534125838
+sha384: b781415b856744834e532b9899e1aa0bec5a82cf09a838f0a833470468e2a42648a52428cfd9012385d04de5cd9bd122
+sha512: 7de05636b18e2b0ca3427e03f53074af3a48a7b9df226daba4f22324c570638e7d7b26430e214799c9ce0db5ee88dad3292ca0f38bf99b8eaebed59b3a9c140a
+snefru: 67af483046f9cf16fe19f9087929ccfc6ad176ade3290b4d33f43e0ddb07e711
+tiger192,3: 82779797cdc439e886884953ba21fa38e35679041e95ee27
+whirlpool: 4a0f1582b21b7aff59bfba7f9c29131c69741b2ce80acdc7d314040f3b768cf5a17e30b74cceb86fbc6b34b1692e0addd5bfd7cfc043d40c0621f1b97e26fa49
+adler32(raw): 9e033311
+md5(raw): 2a632783e2812cf23de100d7d6a463ae
+sha256(raw): 49bde3496b9510a17d0edd8a4b0ac70148e32a1d51e881ec76faa96534125838
+===Done=== \ No newline at end of file
diff --git a/ext/hash/tests/hash_hmac_error.phpt b/ext/hash/tests/hash_hmac_error.phpt
new file mode 100644
index 000000000..2c9a9a005
--- /dev/null
+++ b/ext/hash/tests/hash_hmac_error.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Test hash_hmac() function : basic functionality
+--SKIPIF--
+<?php
+ if(!extension_loaded("hash")) print "skip";
+?>
+--FILE--
+<?php
+/*
+* proto string hash_hmac ( string algo, string data, string key [, bool raw_output] )
+* Function is implemented in ext/hash/hash.c
+*/
+
+echo "*** Testing hash_hmac() : error conditions ***\n";
+
+$data = "This is a sample string used to test the hash_hmac function with various hashing algorithms";
+$key = 'secret';
+
+echo "\n-- Testing hash_hmac() function with less than expected no. of arguments --\n";
+var_dump(hash_hmac());
+var_dump(hash_hmac('crc32'));
+var_dump(hash_hmac('crc32', $data));
+
+echo "\n-- Testing hash_hmac() function with more than expected no. of arguments --\n";
+var_dump(hash_hmac('crc32', $data, $key, TRUE, 10));
+
+echo "\n-- Testing hash_hmac() function with invalid hash algorithm --\n";
+var_dump(hash_hmac('foo', $data, $key));
+
+?>
+===Done===
+--EXPECTF--
+*** Testing hash_hmac() : error conditions ***
+
+-- Testing hash_hmac() function with less than expected no. of arguments --
+
+Warning: hash_hmac() expects at least 3 parameters, 0 given in %s on line %d
+NULL
+
+Warning: hash_hmac() expects at least 3 parameters, 1 given in %s on line %d
+NULL
+
+Warning: hash_hmac() expects at least 3 parameters, 2 given in %s on line %d
+NULL
+
+-- Testing hash_hmac() function with more than expected no. of arguments --
+
+Warning: hash_hmac() expects at most 4 parameters, 5 given in %s on line %d
+NULL
+
+-- Testing hash_hmac() function with invalid hash algorithm --
+
+Warning: hash_hmac(): Unknown hashing algorithm: foo in %s on line %d
+bool(false)
+===Done=== \ No newline at end of file
diff --git a/ext/hash/tests/hash_hmac_file_basic.phpt b/ext/hash/tests/hash_hmac_file_basic.phpt
new file mode 100644
index 000000000..bbd89b43b
--- /dev/null
+++ b/ext/hash/tests/hash_hmac_file_basic.phpt
@@ -0,0 +1,103 @@
+--TEST--
+Test hash_hmac_file() function : basic functionality
+--SKIPIF--
+<?php
+ if(!extension_loaded("hash")) print "skip";
+?>
+--FILE--
+<?php
+
+
+/* Prototype : string hash_hmac_file ( string algo, string filename, string key [, bool raw_output] )
+ * Description: Generate a keyed hash value using the HMAC method and the contents of a given file
+ * Source code: ext/hash/hash.c
+ * Alias to functions:
+*/
+
+echo "*** Testing hash_hmac_file() : basic functionality ***\n";
+
+$file = dirname(__FILE__) . "hash_hmac_file.txt";
+/* Creating a temporary file file */
+if (($fp = fopen( $file, "w+")) == FALSE) {
+ echo "Cannot create file ($file)";
+ exit;
+}
+
+/* Writing into file */
+$content = "This is a sample string used to test the hash_hmac_file function with various hashing algorithms";
+if (is_writable($file)) {
+ if (fwrite($fp, $content) === FALSE) {
+ echo "Cannot write to file ($file)";
+ exit;
+ }
+}
+
+// close the files
+fclose($fp);
+
+$key = 'secret';
+
+
+echo "adler32: " . hash_hmac_file('adler32', $file, $key) . "\n";
+echo "crc32: " . hash_hmac_file('crc32', $file, $key) . "\n";
+echo "gost: " . hash_hmac_file('gost', $file, $key) . "\n";
+echo "haval128,3: " . hash_hmac_file('haval128,3', $file, $key) . "\n";
+echo "md2: " . hash_hmac_file('md2', $file, $key) . "\n";
+echo "md4: " . hash_hmac_file('md4', $file, $key) . "\n";
+echo "md5: " . hash_hmac_file('md5', $file, $key) . "\n";
+echo "ripemd128: " . hash_hmac_file('ripemd128', $file, $key) . "\n";
+echo "ripemd160: " . hash_hmac_file('ripemd160', $file, $key) . "\n";
+echo "ripemd256: " . hash_hmac_file('ripemd256', $file, $key) . "\n";
+echo "ripemd320: " . hash_hmac_file('ripemd320', $file, $key) . "\n";
+echo "sha1: " . hash_hmac_file('sha1', $file, $key) . "\n";
+echo "sha256: " . hash_hmac_file('sha256', $file, $key) . "\n";
+echo "sha384: " . hash_hmac_file('sha384', $file, $key) . "\n";
+echo "sha512: " . hash_hmac_file('sha512', $file, $key) . "\n";
+echo "snefru: " . hash_hmac_file('snefru', $file, $key) . "\n";
+echo "tiger192,3: " . hash_hmac_file('tiger192,3', $file, $key) . "\n";
+echo "whirlpool: " . hash_hmac_file('whirlpool', $file, $key) . "\n";
+
+echo "adler32(raw): " . bin2hex(hash_hmac_file('adler32', $file, $key, TRUE)) . "\n";
+echo "md5(raw): " . bin2hex(hash_hmac_file('md5', $file, $key, TRUE)). "\n";
+echo "sha256(raw): " . bin2hex(hash_hmac_file('sha256', $file, $key, TRUE)). "\n";
+
+echo "Error cases:\n";
+hash_hmac_file();
+hash_hmac_file('foo', $file);
+hash_hmac_file('foo', $file, $key, TRUE, 10);
+
+unlink($file);
+
+?>
+===Done===
+--EXPECTF--
+*** Testing hash_hmac_file() : basic functionality ***
+adler32: 9f037811
+crc32: f2a60b9c
+gost: 94c39a40d5db852a8dc3d24e37eebf2d53e3d711457c59cd02b614f792a9d918
+haval128,3: e8fcff647f1a675acb429130fb94a17e
+md2: a685475e600314bb549ab4f33c3b27cb
+md4: cbc6bff781f48f57378d3effa27553e4
+md5: 8bddf39dd1c566c27acc7fa85ec36acf
+ripemd128: 03269b76bf61d508c50f038cbe9ba691
+ripemd160: 94652211292268d97eb63344a3a05d3009f9d2d3
+ripemd256: b6ab414cc1630e1e474fefa41976d252f38ca7cf401552774e71736165e512e7
+ripemd320: 71271a649265740eed4b9931417f979fd81eba6288f4e08ff2997bc3dd6858da054d53a9f1fffe8c
+sha1: 7f338d17b72371091abd28f451bc8d1f3a9eb3b6
+sha256: 9135286ca4c84dec711e4b831f6cd39e672e5ff93d011321274eb76733cc1e40
+sha384: 364fdc45a4c742763366ab5d3d1c17c24057e6c3b641607a36d969f00c88da25b19c8b88c8632411e3a0a02397f88aca
+sha512: d460aabdf0353655059ed0d408efa91f19c4cda46acc2a4e0adf4764b06951c899fbb2ed41519db78b58ff7be17b1b2910aebe674a56861b232143571b35c83f
+snefru: 7b79787e1c1d926b6cc98327f05c5d04ba6227ab51c1398661861196016ef34c
+tiger192,3: 5577f21e2af269fff41e023db30e2b01bfd8b8f669177929
+whirlpool: 37a0fbb90547690d5e5e11c046f6654ffdb7bab15e16d9d79c7d85765cc4bdcbfd9df8db7a3ce9558f3f244fead00ca29cf05297f75596555195a0683f15d69f
+adler32(raw): 9f037811
+md5(raw): 8bddf39dd1c566c27acc7fa85ec36acf
+sha256(raw): 9135286ca4c84dec711e4b831f6cd39e672e5ff93d011321274eb76733cc1e40
+Error cases:
+
+Warning: hash_hmac_file() expects at least 3 parameters, 0 given in %s on line %d
+
+Warning: hash_hmac_file() expects at least 3 parameters, 2 given in %s on line %d
+
+Warning: hash_hmac_file() expects at most 4 parameters, 5 given in %s on line %d
+===Done=== \ No newline at end of file
diff --git a/ext/hash/tests/hash_hmac_file_error.phpt b/ext/hash/tests/hash_hmac_file_error.phpt
new file mode 100644
index 000000000..bdc2ad1df
--- /dev/null
+++ b/ext/hash/tests/hash_hmac_file_error.phpt
@@ -0,0 +1,56 @@
+--TEST--
+Test hash_hmac_file() function : basic functionality
+--SKIPIF--
+<?php
+ if(!extension_loaded("hash")) print "skip";
+?>
+--FILE--
+<?php
+
+/* Prototype : string hash_hmac_file ( string algo, string filename, string key [, bool raw_output] )
+ * Description: Generate a keyed hash value using the HMAC method and the contents of a given file
+ * Source code: ext/hash/hash.c
+ * Alias to functions:
+*/
+
+echo "*** Testing hash() : error conditions ***\n";
+
+$file = dirname(__FILE__) . "hash_file.txt";
+$key = 'secret';
+
+echo "\n-- Testing hash_hmac_file() function with less than expected no. of arguments --\n";
+var_dump(hash_hmac_file());
+var_dump(hash_hmac_file('crc32'));
+var_dump(hash_hmac_file('crc32', $file));
+
+echo "\n-- Testing hash_hmac_file() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+hash_hmac_file('crc32', $file, $key, TRUE, $extra_arg);
+
+echo "\n-- Testing hash_hmac_file() function with invalid hash algorithm --\n";
+hash_hmac_file('foo', $file, $key, TRUE);
+
+?>
+===Done===
+--EXPECTF--
+*** Testing hash() : error conditions ***
+
+-- Testing hash_hmac_file() function with less than expected no. of arguments --
+
+Warning: hash_hmac_file() expects at least 3 parameters, 0 given in %s on line %d
+NULL
+
+Warning: hash_hmac_file() expects at least 3 parameters, 1 given in %s on line %d
+NULL
+
+Warning: hash_hmac_file() expects at least 3 parameters, 2 given in %s on line %d
+NULL
+
+-- Testing hash_hmac_file() function with more than expected no. of arguments --
+
+Warning: hash_hmac_file() expects at most 4 parameters, 5 given in %s on line %d
+
+-- Testing hash_hmac_file() function with invalid hash algorithm --
+
+Warning: hash_hmac_file(): Unknown hashing algorithm: foo in %s on line %d
+===Done=== \ No newline at end of file
diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c
index d7b4b4524..a88c3ed5d 100644
--- a/ext/iconv/iconv.c
+++ b/ext/iconv/iconv.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: iconv.c,v 1.124.2.8.2.23 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: iconv.c,v 1.124.2.8.2.24 2008/12/31 11:17:38 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/iconv/php_iconv.h b/ext/iconv/php_iconv.h
index 975ae0c55..ff140fbe3 100644
--- a/ext/iconv/php_iconv.h
+++ b/ext/iconv/php_iconv.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Revision: 1.28.2.2.2.3 $ */
+/* $Revision: 1.28.2.2.2.4 $ */
#ifndef PHP_ICONV_H
#define PHP_ICONV_H
diff --git a/ext/imap/config.m4 b/ext/imap/config.m4
index 97474a74c..85dbd0e94 100644
--- a/ext/imap/config.m4
+++ b/ext/imap/config.m4
@@ -1,5 +1,5 @@
dnl
-dnl $Id: config.m4,v 1.69.4.7 2007/02/11 09:25:32 tony2001 Exp $
+dnl $Id: config.m4,v 1.69.4.8 2008/10/16 16:20:53 dmitry Exp $
dnl
AC_DEFUN([IMAP_INC_CHK],[if test -r "$i$1/c-client.h"; then
@@ -229,4 +229,34 @@ if test "$PHP_IMAP" != "no"; then
AC_MSG_RESULT(no)
AC_MSG_ERROR([build test failed. Please check the config.log for details.])
], $TST_LIBS)
+
+ AC_MSG_CHECKING(whether rfc822_output_address_list function present)
+ PHP_TEST_BUILD(foobar, [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_RFC822_OUTPUT_ADDRESS_LIST, 1, [ ])
+ ], [
+ AC_MSG_RESULT(no)
+ ], [
+ $TST_LIBS
+ ], [
+ void mm_log(void){}
+ void mm_dlog(void){}
+ void mm_flags(void){}
+ void mm_fatal(void){}
+ void mm_critical(void){}
+ void mm_nocritical(void){}
+ void mm_notify(void){}
+ void mm_login(void){}
+ void mm_diskerror(void){}
+ void mm_status(void){}
+ void mm_lsub(void){}
+ void mm_list(void){}
+ void mm_exists(void){}
+ void mm_searched(void){}
+ void mm_expunged(void){}
+ void rfc822_output_address_list(void);
+ void (*f)(void);
+ char foobar () {f = rfc822_output_address_list;}
+ ])
+
fi
diff --git a/ext/imap/config.w32 b/ext/imap/config.w32
index 447e1e67f..d567bc361 100644
--- a/ext/imap/config.w32
+++ b/ext/imap/config.w32
@@ -1,4 +1,4 @@
-// $Id: config.w32,v 1.4 2005/08/01 20:55:31 edink Exp $
+// $Id: config.w32,v 1.4.4.2 2008/12/01 00:03:03 pajoye Exp $
// vim:ft=javascript
ARG_WITH("imap", "IMAP Support", "no");
@@ -15,6 +15,7 @@ if (PHP_IMAP == "yes") {
ADD_FLAG("CFLAGS_IMAP", "/D HAVE_IMAP2000=1 /D HAVE_IMAP2004=1 /D HAVE_IMAP_SSL=1");
AC_DEFINE('HAVE_IMAP', 1, 'Have IMAP support', true);
+ AC_DEFINE('HAVE_RFC822_OUTPUT_ADDRESS_LIST', 1, 'Have rfc822_output_address_list', true);
} else {
WARNING("imap not enabled; libraries and headers not found");
}
diff --git a/ext/imap/php_imap.c b/ext/imap/php_imap.c
index b93100d67..e58e99778 100644
--- a/ext/imap/php_imap.c
+++ b/ext/imap/php_imap.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -26,7 +26,7 @@
| PHP 4.0 updates: Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_imap.c,v 1.208.2.7.2.31 2008/04/17 11:04:49 felipe Exp $ */
+/* $Id: php_imap.c,v 1.208.2.7.2.43 2008/12/31 11:17:38 sebastian Exp $ */
#define IMAP41
@@ -40,6 +40,7 @@
#include "ext/standard/php_string.h"
#include "ext/standard/info.h"
#include "ext/standard/file.h"
+#include "ext/standard/php_smart_str.h"
#ifdef ERROR
#undef ERROR
@@ -66,10 +67,11 @@ MAILSTREAM DEFAULTPROTO;
#define SENDBUFLEN 16385
#endif
+
static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC);
static void _php_imap_add_body(zval *arg, BODY *body TSRMLS_DC);
-static void _php_imap_parse_address(ADDRESS *addresslist, char **fulladdress, zval *paddress TSRMLS_DC);
-static int _php_imap_address_size(ADDRESS *addresslist);
+static char* _php_imap_parse_address(ADDRESS *addresslist, zval *paddress TSRMLS_DC);
+static char* _php_rfc822_write_address(ADDRESS *addresslist TSRMLS_DC);
/* the gets we use */
static char *php_mail_gets(readfn_t f, void *stream, unsigned long size, GETS_DATA *md);
@@ -717,23 +719,26 @@ PHP_RSHUTDOWN_FUNCTION(imap)
}
/* }}} */
-
-/* {{{ PHP_MINFO_FUNCTION
- */
-PHP_MINFO_FUNCTION(imap)
-{
- php_info_print_table_start();
+#if !defined(CCLIENTVERSION)
#if HAVE_IMAP2004
- php_info_print_table_row(2, "IMAP c-Client Version", "2004");
+#define CCLIENTVERSION "2004"
#elif HAVE_IMAP2001
- php_info_print_table_row(2, "IMAP c-Client Version", "2001");
+#define CCLIENTVERSION "2001"
#elif HAVE_IMAP2000
- php_info_print_table_row(2, "IMAP c-Client Version", "2000");
+#define CCLIENTVERSION "2000"
#elif defined(IMAP41)
- php_info_print_table_row(2, "IMAP c-Client Version", "4.1");
+#define CCLIENTVERSION "4.1"
#else
- php_info_print_table_row(2, "IMAP c-Client Version", "4.0");
+#define CCLIENTVERSION "4.0"
#endif
+#endif
+
+/* {{{ PHP_MINFO_FUNCTION
+ */
+PHP_MINFO_FUNCTION(imap)
+{
+ php_info_print_table_start();
+ php_info_print_table_row(2, "IMAP c-Client Version", CCLIENTVERSION);
#if HAVE_IMAP_SSL
php_info_print_table_row(2, "SSL Support", "enabled");
#endif
@@ -1135,6 +1140,13 @@ PHP_FUNCTION(imap_close)
if (myargcount == 2) {
convert_to_long_ex(options);
flags = Z_LVAL_PP(options);
+
+ /* Check that flags is exactly equal to PHP_EXPUNGE or Zero*/
+ if (flags && ((flags & ~PHP_EXPUNGE) != 0)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid value for the flags parameter");
+ RETURN_FALSE;
+ }
+
/* Do the translation from PHP's internal PHP_EXPUNGE define to c-client's CL_EXPUNGE */
if (flags & PHP_EXPUNGE) {
flags ^= PHP_EXPUNGE;
@@ -1203,22 +1215,29 @@ PHP_FUNCTION(imap_headers)
Read the message body */
PHP_FUNCTION(imap_body)
{
- zval **streamind, **msgno, **flags;
+ zval **streamind, **msgno, **pflags;
pils *imap_le_struct;
int msgindex, myargc=ZEND_NUM_ARGS();
+ long flags=0L;
- if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &msgno, &flags) == FAILURE) {
+ if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &msgno, &pflags) == FAILURE) {
ZEND_WRONG_PARAM_COUNT();
}
+
ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
convert_to_long_ex(msgno);
if (myargc == 3) {
- convert_to_long_ex(flags);
+ convert_to_long_ex(pflags);
+ flags = Z_LVAL_PP(pflags);
+ if (flags && ((flags & ~(FT_UID|FT_PEEK|FT_INTERNAL)) != 0)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid value for the options parameter");
+ RETURN_FALSE;
+ }
}
- if ((myargc == 3) && (Z_LVAL_PP(flags) & FT_UID)) {
+ if ((myargc == 3) && (flags & FT_UID)) {
/* This should be cached; if it causes an extra RTT to the
IMAP server, then that's the price we pay for making
sure we don't crash. */
@@ -1231,7 +1250,7 @@ PHP_FUNCTION(imap_body)
RETURN_FALSE;
}
- RETVAL_STRING(mail_fetchtext_full (imap_le_struct->imap_stream, Z_LVAL_PP(msgno), NIL, myargc==3 ? Z_LVAL_PP(flags) : NIL), 1);
+ RETVAL_STRING(mail_fetchtext_full (imap_le_struct->imap_stream, Z_LVAL_PP(msgno), NIL, myargc==3 ? Z_LVAL_PP(pflags) : NIL), 1);
}
/* }}} */
@@ -1451,7 +1470,7 @@ PHP_FUNCTION(imap_list_full)
}
/* }}} */
-/* {{{ proto array imap_scan(resource stream_id, string ref, string pattern, string content)
+/* {{{ proto array imap_listscan(resource stream_id, string ref, string pattern, string content)
Read list of mailboxes containing a certain string */
PHP_FUNCTION(imap_listscan)
{
@@ -1575,7 +1594,7 @@ PHP_FUNCTION(imap_headerinfo)
pils *imap_le_struct;
MESSAGECACHE *cache;
ENVELOPE *en;
- char dummy[2000], fulladdress[MAILTMPLEN];
+ char dummy[2000], fulladdress[MAILTMPLEN + 1];
int myargc = ZEND_NUM_ARGS();
if (myargc < 2 || myargc > 5 || zend_get_parameters_ex(myargc, &streamind, &msgno, &fromlength, &subjectlength, &defaulthost) == FAILURE) {
@@ -1587,8 +1606,8 @@ PHP_FUNCTION(imap_headerinfo)
convert_to_long_ex(msgno);
if (myargc >= 3) {
convert_to_long_ex(fromlength);
- if (Z_LVAL_PP(fromlength) < 0 || Z_LVAL_PP(fromlength) >= MAILTMPLEN) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "From length has to be between 1 and %i", MAILTMPLEN);
+ if (Z_LVAL_PP(fromlength) < 0 || Z_LVAL_PP(fromlength) > MAILTMPLEN) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "From length has to be between 0 and %d", MAILTMPLEN);
RETURN_FALSE;
}
} else {
@@ -1596,8 +1615,8 @@ PHP_FUNCTION(imap_headerinfo)
}
if (myargc >= 4) {
convert_to_long_ex(subjectlength);
- if (Z_LVAL_PP(subjectlength) < 0 || Z_LVAL_PP(subjectlength) >= MAILTMPLEN) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Subject length has to be between 1 and %i", MAILTMPLEN);
+ if (Z_LVAL_PP(subjectlength) < 0 || Z_LVAL_PP(subjectlength) > MAILTMPLEN) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Subject length has to be between 0 and %d", MAILTMPLEN);
RETURN_FALSE;
}
} else {
@@ -1825,14 +1844,16 @@ PHP_FUNCTION(imap_unsubscribe)
Read the full structure of a message */
PHP_FUNCTION(imap_fetchstructure)
{
- zval **streamind, **msgno, **flags;
+ zval **streamind, **msgno, **pflags;
pils *imap_le_struct;
BODY *body;
int msgindex, myargc=ZEND_NUM_ARGS();
+ long flags=0L;
- if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &msgno, &flags) == FAILURE) {
+ if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &msgno, &pflags) == FAILURE) {
ZEND_WRONG_PARAM_COUNT();
}
+
ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
@@ -1841,12 +1862,18 @@ PHP_FUNCTION(imap_fetchstructure)
RETURN_FALSE;
}
if (myargc == 3) {
- convert_to_long_ex(flags);
+ convert_to_long_ex(pflags);
+ flags = Z_LVAL_PP(pflags);
+
+ if (flags && ((flags & ~FT_UID) != 0)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid value for the options parameter");
+ RETURN_FALSE;
+ }
}
object_init(return_value);
- if ((myargc == 3) && (Z_LVAL_PP(flags) & FT_UID)) {
+ if ((myargc == 3) && (flags & FT_UID)) {
/* This should be cached; if it causes an extra RTT to the
IMAP server, then that's the price we pay for making
sure we don't crash. */
@@ -1856,7 +1883,7 @@ PHP_FUNCTION(imap_fetchstructure)
}
PHP_IMAP_CHECK_MSGNO(msgindex);
- mail_fetchstructure_full(imap_le_struct->imap_stream, Z_LVAL_PP(msgno), &body , myargc == 3 ? Z_LVAL_PP(flags) : NIL);
+ mail_fetchstructure_full(imap_le_struct->imap_stream, Z_LVAL_PP(msgno), &body , myargc == 3 ? Z_LVAL_PP(pflags) : NIL);
if (!body) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "No body information available");
@@ -1871,30 +1898,37 @@ PHP_FUNCTION(imap_fetchstructure)
Get a specific body section */
PHP_FUNCTION(imap_fetchbody)
{
- zval **streamind, **msgno, **sec, **flags;
+ zval **streamind, **msgno, **sec, **pflags;
pils *imap_le_struct;
char *body;
+ long flags=0L;
unsigned long len;
int myargc=ZEND_NUM_ARGS();
- if (myargc < 3 || myargc > 4 || zend_get_parameters_ex(myargc, &streamind, &msgno, &sec, &flags) == FAILURE) {
+ if (myargc < 3 || myargc > 4 || zend_get_parameters_ex(myargc, &streamind, &msgno, &sec, &pflags) == FAILURE) {
ZEND_WRONG_PARAM_COUNT();
}
+
ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
convert_to_long_ex(msgno);
convert_to_string_ex(sec);
if (myargc == 4) {
- convert_to_long_ex(flags);
+ convert_to_long_ex(pflags);
+ flags = Z_LVAL_PP(pflags);
+ if (flags && ((flags & ~(FT_UID|FT_PEEK|FT_INTERNAL)) != 0)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid value for the options parameter");
+ RETURN_FALSE;
+ }
}
- if (myargc < 4 || !(Z_LVAL_PP(flags) & FT_UID)) {
+ if (myargc < 4 || !(flags & FT_UID)) {
/* only perform the check if the msgno is a message number and not a UID */
PHP_IMAP_CHECK_MSGNO(Z_LVAL_PP(msgno));
}
- body = mail_fetchbody_full(imap_le_struct->imap_stream, Z_LVAL_PP(msgno), Z_STRVAL_PP(sec), &len, myargc==4 ? Z_LVAL_PP(flags) : NIL);
+ body = mail_fetchbody_full(imap_le_struct->imap_stream, Z_LVAL_PP(msgno), Z_STRVAL_PP(sec), &len, myargc==4 ? Z_LVAL_PP(pflags) : NIL);
if (!body) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "No body information available");
@@ -2109,7 +2143,7 @@ PHP_FUNCTION(imap_rfc822_write_address)
{
zval **mailbox, **host, **personal;
ADDRESS *addr;
- char string[MAILTMPLEN];
+ char *string;
if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &mailbox, &host, &personal) == FAILURE) {
ZEND_WRONG_PARAM_COUNT();
@@ -2137,13 +2171,12 @@ PHP_FUNCTION(imap_rfc822_write_address)
addr->error=NIL;
addr->adl=NIL;
- if (_php_imap_address_size(addr) >= MAILTMPLEN) {
+ string = _php_rfc822_write_address(addr TSRMLS_CC);
+ if (string) {
+ RETVAL_STRING(string, 0);
+ } else {
RETURN_FALSE;
}
-
- string[0]='\0';
- rfc822_write_address(string, addr);
- RETVAL_STRING(string, 1);
}
/* }}} */
@@ -2154,7 +2187,8 @@ PHP_FUNCTION(imap_rfc822_parse_adrlist)
zval **str, **defaulthost, *tovals;
ADDRESS *addresstmp;
ENVELOPE *env;
-
+ char *str_copy;
+
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &str, &defaulthost) == FAILURE) {
ZEND_WRONG_PARAM_COUNT();
}
@@ -2165,7 +2199,10 @@ PHP_FUNCTION(imap_rfc822_parse_adrlist)
env = mail_newenvelope();
- rfc822_parse_adrlist(&env->to, Z_STRVAL_PP(str), Z_STRVAL_PP(defaulthost));
+ /* rfc822_parse_adrlist() modifies passed string. Copy it. */
+ str_copy = estrndup(Z_STRVAL_PP(str), Z_STRLEN_PP(str));
+ rfc822_parse_adrlist(&env->to, str_copy, Z_STRVAL_PP(defaulthost));
+ efree(str_copy);
array_init(return_value);
@@ -2188,6 +2225,8 @@ PHP_FUNCTION(imap_rfc822_parse_adrlist)
}
add_next_index_object(return_value, tovals TSRMLS_CC);
} while ((addresstmp = addresstmp->next));
+
+ mail_free_envelope(&env);
}
/* }}} */
@@ -2632,22 +2671,29 @@ PHP_FUNCTION(imap_sort)
Get the full unfiltered header for a message */
PHP_FUNCTION(imap_fetchheader)
{
- zval **streamind, **msgno, **flags;
+ zval **streamind, **msgno, **pflags;
pils *imap_le_struct;
int msgindex, myargc = ZEND_NUM_ARGS();
+ long flags=0L;
- if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &msgno, &flags) == FAILURE) {
+ if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &msgno, &pflags) == FAILURE) {
ZEND_WRONG_PARAM_COUNT();
}
-
+
ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
convert_to_long_ex(msgno);
if (myargc == 3) {
- convert_to_long_ex(flags);
- }
+ convert_to_long_ex(pflags);
+ flags = Z_LVAL_PP(pflags);
+ if (flags && ((flags & ~(FT_UID|FT_INTERNAL|FT_PREFETCHTEXT)) != 0)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid value for the options parameter");
+ RETURN_FALSE;
+ }
+ }
+
- if ((myargc == 3) && (Z_LVAL_PP(flags) & FT_UID)) {
+ if ((myargc == 3) && (flags & FT_UID)) {
/* This should be cached; if it causes an extra RTT to the
IMAP server, then that's the price we pay for making sure
we don't crash. */
@@ -2658,7 +2704,7 @@ PHP_FUNCTION(imap_fetchheader)
PHP_IMAP_CHECK_MSGNO(msgindex);
- RETVAL_STRING(mail_fetchheader_full(imap_le_struct->imap_stream, Z_LVAL_PP(msgno), NIL, NIL, (myargc == 3 ? Z_LVAL_PP(flags) : NIL)), 1);
+ RETVAL_STRING(mail_fetchheader_full(imap_le_struct->imap_stream, Z_LVAL_PP(msgno), NIL, NIL, (myargc == 3 ? Z_LVAL_PP(pflags) : NIL)), 1);
}
/* }}} */
@@ -2873,7 +2919,7 @@ PHP_FUNCTION(imap_fetch_overview)
zval **streamind, **sequence, **pflags;
pils *imap_le_struct;
zval *myoverview;
- char address[MAILTMPLEN];
+ char *address;
long status, flags=0L;
int myargc = ZEND_NUM_ARGS();
@@ -2881,12 +2927,17 @@ PHP_FUNCTION(imap_fetch_overview)
ZEND_WRONG_PARAM_COUNT();
}
+
ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);
convert_to_string_ex(sequence);
if(myargc == 3) {
convert_to_long_ex(pflags);
flags = Z_LVAL_PP(pflags);
+ if (flags && ((flags & ~FT_UID) != 0)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid value for the options parameter");
+ RETURN_FALSE;
+ }
}
array_init(return_value);
@@ -2908,17 +2959,19 @@ PHP_FUNCTION(imap_fetch_overview)
if (env->subject) {
add_property_string(myoverview, "subject", env->subject, 1);
}
- if (env->from && _php_imap_address_size(env->from) < MAILTMPLEN) {
+ if (env->from) {
env->from->next=NULL;
- address[0] = '\0';
- rfc822_write_address(address, env->from);
- add_property_string(myoverview, "from", address, 1);
+ address =_php_rfc822_write_address(env->from TSRMLS_CC);
+ if (address) {
+ add_property_string(myoverview, "from", address, 0);
+ }
}
- if (env->to && _php_imap_address_size(env->to) < MAILTMPLEN) {
+ if (env->to) {
env->to->next = NULL;
- address[0] = '\0';
- rfc822_write_address(address, env->to);
- add_property_string(myoverview, "to", address, 1);
+ address = _php_rfc822_write_address(env->to TSRMLS_CC);
+ if (address) {
+ add_property_string(myoverview, "to", address, 0);
+ }
}
if (env->date) {
add_property_string(myoverview, "date", env->date, 1);
@@ -2961,7 +3014,7 @@ PHP_FUNCTION(imap_mail_compose)
BODY *bod=NULL, *topbod=NULL;
PART *mypart=NULL, *part;
PARAMETER *param, *disp_param = NULL, *custom_headers_param = NULL, *tmp_param = NULL;
- char *tmp=NULL, *mystring=NULL, *t=NULL, *tempstring=NULL;
+ char *tmp=NULL, *mystring=NULL, *t=NULL, *tempstring=NULL, *str_copy = NULL;
int toppart = 0;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &envelope, &body) == FAILURE) {
@@ -2978,50 +3031,55 @@ PHP_FUNCTION(imap_mail_compose)
RETURN_FALSE;
}
+#define PHP_RFC822_PARSE_ADRLIST(target, value) \
+ str_copy = estrndup(Z_STRVAL_PP(value), Z_STRLEN_PP(value)); \
+ rfc822_parse_adrlist(target, str_copy, "NO HOST"); \
+ efree(str_copy);
+
env = mail_newenvelope();
if (zend_hash_find(Z_ARRVAL_PP(envelope), "remail", sizeof("remail"), (void **) &pvalue)== SUCCESS) {
convert_to_string_ex(pvalue);
- env->remail=cpystr(Z_STRVAL_PP(pvalue));
+ env->remail = cpystr(Z_STRVAL_PP(pvalue));
}
if (zend_hash_find(Z_ARRVAL_PP(envelope), "return_path", sizeof("return_path"), (void **) &pvalue)== SUCCESS) {
convert_to_string_ex(pvalue)
- rfc822_parse_adrlist(&env->return_path, Z_STRVAL_PP(pvalue), "NO HOST");
+ PHP_RFC822_PARSE_ADRLIST(&env->return_path, pvalue);
}
if (zend_hash_find(Z_ARRVAL_PP(envelope), "date", sizeof("date"), (void **) &pvalue)== SUCCESS) {
convert_to_string_ex(pvalue);
- env->date=cpystr(Z_STRVAL_PP(pvalue));
+ env->date = cpystr(Z_STRVAL_PP(pvalue));
}
if (zend_hash_find(Z_ARRVAL_PP(envelope), "from", sizeof("from"), (void **) &pvalue)== SUCCESS) {
convert_to_string_ex(pvalue);
- rfc822_parse_adrlist (&env->from, Z_STRVAL_PP(pvalue), "NO HOST");
+ PHP_RFC822_PARSE_ADRLIST(&env->from, pvalue);
}
if (zend_hash_find(Z_ARRVAL_PP(envelope), "reply_to", sizeof("reply_to"), (void **) &pvalue)== SUCCESS) {
convert_to_string_ex(pvalue);
- rfc822_parse_adrlist (&env->reply_to, Z_STRVAL_PP(pvalue), "NO HOST");
+ PHP_RFC822_PARSE_ADRLIST(&env->reply_to, pvalue);
}
if (zend_hash_find(Z_ARRVAL_PP(envelope), "in_reply_to", sizeof("in_reply_to"), (void **) &pvalue)== SUCCESS) {
convert_to_string_ex(pvalue);
- env->in_reply_to=cpystr(Z_STRVAL_PP(pvalue));
+ env->in_reply_to = cpystr(Z_STRVAL_PP(pvalue));
}
if (zend_hash_find(Z_ARRVAL_PP(envelope), "subject", sizeof("subject"), (void **) &pvalue)== SUCCESS) {
convert_to_string_ex(pvalue);
- env->subject=cpystr(Z_STRVAL_PP(pvalue));
+ env->subject = cpystr(Z_STRVAL_PP(pvalue));
}
if (zend_hash_find(Z_ARRVAL_PP(envelope), "to", sizeof("to"), (void **) &pvalue)== SUCCESS) {
convert_to_string_ex(pvalue);
- rfc822_parse_adrlist (&env->to, Z_STRVAL_PP(pvalue), "NO HOST");
+ PHP_RFC822_PARSE_ADRLIST(&env->to, pvalue);
}
if (zend_hash_find(Z_ARRVAL_PP(envelope), "cc", sizeof("cc"), (void **) &pvalue)== SUCCESS) {
convert_to_string_ex(pvalue);
- rfc822_parse_adrlist (&env->cc, Z_STRVAL_PP(pvalue), "NO HOST");
+ PHP_RFC822_PARSE_ADRLIST(&env->cc, pvalue);
}
if (zend_hash_find(Z_ARRVAL_PP(envelope), "bcc", sizeof("bcc"), (void **) &pvalue)== SUCCESS) {
convert_to_string_ex(pvalue);
- rfc822_parse_adrlist (&env->bcc, Z_STRVAL_PP(pvalue), "NO HOST");
+ PHP_RFC822_PARSE_ADRLIST(&env->bcc, pvalue);
}
if (zend_hash_find(Z_ARRVAL_PP(envelope), "message_id", sizeof("message_id"), (void **) &pvalue)== SUCCESS) {
convert_to_string_ex(pvalue);
- env->message_id=cpystr(Z_STRVAL_PP(pvalue));
+ env->message_id = cpystr(Z_STRVAL_PP(pvalue));
}
if (zend_hash_find(Z_ARRVAL_PP(envelope), "custom_headers", sizeof("custom_headers"), (void **) &pvalue)== SUCCESS) {
@@ -3858,6 +3916,43 @@ static int _php_rfc822_len(char *str)
/* }}} */
/* Support Functions */
+
+#ifdef HAVE_RFC822_OUTPUT_ADDRESS_LIST
+/* {{{ _php_rfc822_soutr
+ */
+static long _php_rfc822_soutr (void *stream, char *string)
+{
+ smart_str *ret = (smart_str*)stream;
+ int len = strlen(string);
+
+ smart_str_appendl(ret, string, len);
+ return LONGT;
+}
+
+/* }}} */
+
+/* {{{ _php_rfc822_write_address
+ */
+static char* _php_rfc822_write_address(ADDRESS *addresslist TSRMLS_DC)
+{
+ char address[MAILTMPLEN];
+ smart_str ret = {0};
+ RFC822BUFFER buf;
+
+ buf.beg = address;
+ buf.cur = buf.beg;
+ buf.end = buf.beg + sizeof(address) - 1;
+ buf.s = &ret;
+ buf.f = _php_rfc822_soutr;
+ rfc822_output_address_list(&buf, addresslist, 0, NULL);
+ rfc822_output_flush(&buf);
+ smart_str_0(&ret);
+ return ret.c;
+}
+/* }}} */
+
+#else
+
/* {{{ _php_imap_get_address_size
*/
static int _php_imap_address_size (ADDRESS *addresslist)
@@ -3887,26 +3982,33 @@ static int _php_imap_address_size (ADDRESS *addresslist)
/* }}} */
+/* {{{ _php_rfc822_write_address
+ */
+static char* _php_rfc822_write_address(ADDRESS *addresslist TSRMLS_DC)
+{
+ char address[SENDBUFLEN];
+ if (_php_imap_address_size(addresslist) >= SENDBUFLEN) {
+ php_error_docref(NULL TSRMLS_CC, E_ERROR, "Address buffer overflow");
+ return NULL;
+ }
+ address[0] = 0;
+ rfc822_write_address(address, addresslist);
+ return estrdup(address);
+}
+/* }}} */
+#endif
/* {{{ _php_imap_parse_address
*/
-static void _php_imap_parse_address (ADDRESS *addresslist, char **fulladdress, zval *paddress TSRMLS_DC)
+static char* _php_imap_parse_address (ADDRESS *addresslist, zval *paddress TSRMLS_DC)
{
+ char *fulladdress;
ADDRESS *addresstmp;
zval *tmpvals;
- char *tmpstr;
- int len=0;
addresstmp = addresslist;
- if ((len = _php_imap_address_size(addresstmp))) {
- tmpstr = (char *) pemalloc(len + 1, 1);
- tmpstr[0] = '\0';
- rfc822_write_address(tmpstr, addresstmp);
- *fulladdress = tmpstr;
- } else {
- *fulladdress = NULL;
- }
+ fulladdress = _php_rfc822_write_address(addresstmp TSRMLS_CC);
addresstmp = addresslist;
do {
@@ -3918,6 +4020,7 @@ static void _php_imap_parse_address (ADDRESS *addresslist, char **fulladdress, z
if (addresstmp->host) add_property_string(tmpvals, "host", addresstmp->host, 1);
add_next_index_object(paddress, tmpvals TSRMLS_CC);
} while ((addresstmp = addresstmp->next));
+ return fulladdress;
}
/* }}} */
@@ -3944,10 +4047,9 @@ static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC)
if (en->to) {
MAKE_STD_ZVAL(paddress);
array_init(paddress);
- _php_imap_parse_address(en->to, &fulladdress, paddress TSRMLS_CC);
+ fulladdress = _php_imap_parse_address(en->to, paddress TSRMLS_CC);
if (fulladdress) {
- add_property_string(myzvalue, "toaddress", fulladdress, 1);
- free(fulladdress);
+ add_property_string(myzvalue, "toaddress", fulladdress, 0);
}
add_assoc_object(myzvalue, "to", paddress TSRMLS_CC);
}
@@ -3955,10 +4057,9 @@ static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC)
if (en->from) {
MAKE_STD_ZVAL(paddress);
array_init(paddress);
- _php_imap_parse_address(en->from, &fulladdress, paddress TSRMLS_CC);
+ fulladdress = _php_imap_parse_address(en->from, paddress TSRMLS_CC);
if (fulladdress) {
- add_property_string(myzvalue, "fromaddress", fulladdress, 1);
- free(fulladdress);
+ add_property_string(myzvalue, "fromaddress", fulladdress, 0);
}
add_assoc_object(myzvalue, "from", paddress TSRMLS_CC);
}
@@ -3966,10 +4067,9 @@ static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC)
if (en->cc) {
MAKE_STD_ZVAL(paddress);
array_init(paddress);
- _php_imap_parse_address(en->cc, &fulladdress, paddress TSRMLS_CC);
+ fulladdress = _php_imap_parse_address(en->cc, paddress TSRMLS_CC);
if (fulladdress) {
- add_property_string(myzvalue, "ccaddress", fulladdress, 1);
- free(fulladdress);
+ add_property_string(myzvalue, "ccaddress", fulladdress, 0);
}
add_assoc_object(myzvalue, "cc", paddress TSRMLS_CC);
}
@@ -3977,10 +4077,9 @@ static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC)
if (en->bcc) {
MAKE_STD_ZVAL(paddress);
array_init(paddress);
- _php_imap_parse_address(en->bcc, &fulladdress, paddress TSRMLS_CC);
+ fulladdress = _php_imap_parse_address(en->bcc, paddress TSRMLS_CC);
if (fulladdress) {
- add_property_string(myzvalue, "bccaddress", fulladdress, 1);
- free(fulladdress);
+ add_property_string(myzvalue, "bccaddress", fulladdress, 0);
}
add_assoc_object(myzvalue, "bcc", paddress TSRMLS_CC);
}
@@ -3988,10 +4087,9 @@ static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC)
if (en->reply_to) {
MAKE_STD_ZVAL(paddress);
array_init(paddress);
- _php_imap_parse_address(en->reply_to, &fulladdress, paddress TSRMLS_CC);
+ fulladdress = _php_imap_parse_address(en->reply_to, paddress TSRMLS_CC);
if (fulladdress) {
- add_property_string(myzvalue, "reply_toaddress", fulladdress, 1);
- free(fulladdress);
+ add_property_string(myzvalue, "reply_toaddress", fulladdress, 0);
}
add_assoc_object(myzvalue, "reply_to", paddress TSRMLS_CC);
}
@@ -3999,10 +4097,9 @@ static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC)
if (en->sender) {
MAKE_STD_ZVAL(paddress);
array_init(paddress);
- _php_imap_parse_address(en->sender, &fulladdress, paddress TSRMLS_CC);
+ fulladdress = _php_imap_parse_address(en->sender, paddress TSRMLS_CC);
if (fulladdress) {
- add_property_string(myzvalue, "senderaddress", fulladdress, 1);
- free(fulladdress);
+ add_property_string(myzvalue, "senderaddress", fulladdress, 0);
}
add_assoc_object(myzvalue, "sender", paddress TSRMLS_CC);
}
@@ -4010,10 +4107,9 @@ static void _php_make_header_object(zval *myzvalue, ENVELOPE *en TSRMLS_DC)
if (en->return_path) {
MAKE_STD_ZVAL(paddress);
array_init(paddress);
- _php_imap_parse_address(en->return_path, &fulladdress, paddress TSRMLS_CC);
+ fulladdress = _php_imap_parse_address(en->return_path, paddress TSRMLS_CC);
if (fulladdress) {
- add_property_string(myzvalue, "return_pathaddress", fulladdress, 1);
- free(fulladdress);
+ add_property_string(myzvalue, "return_pathaddress", fulladdress, 0);
}
add_assoc_object(myzvalue, "return_path", paddress TSRMLS_CC);
}
diff --git a/ext/imap/php_imap.h b/ext/imap/php_imap.h
index 06ca89ac5..5a55b41b4 100644
--- a/ext/imap/php_imap.h
+++ b/ext/imap/php_imap.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -27,7 +27,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_imap.h,v 1.32.2.2.2.2 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_imap.h,v 1.32.2.2.2.3 2008/12/31 11:17:38 sebastian Exp $ */
#ifndef PHP_IMAP_H
#define PHP_IMAP_H
diff --git a/ext/imap/tests/README b/ext/imap/tests/README
new file mode 100644
index 000000000..0d222ad0b
--- /dev/null
+++ b/ext/imap/tests/README
@@ -0,0 +1,45 @@
+
+Many of the tests in this directory require a mail server to be running, if there is no mail server the test will skip and warn, see skipif.inc for details.
+
+To make the tests run parameters in the skipif.inc and imap_include.inc file will need to be changed to match the local mailserver configuration.
+
+
+The tests have been checked using dovecot (on Linux 32 and 64 bit systems) and hMailServer on Windows. The tests are intended to be mailserver agnostic.
+
+The tests can be run without modification with a fairly minimal dovecot installation. For information, the dovecot.conf file used in running the tests is given below (after -----). The dovecot password file (dovecotpass) requires a password for one user, webmaster@something.com. It's also necessary to set up one additional user ID (vmail) to own the mail directory.
+
+--------------------------------------------------
+protocols = imap imaps
+
+listen = *
+
+ssl_disable = yes
+
+disable_plaintext_auth=yes
+
+## Mailbox locations and namespaces
+
+mail_location = maildir:/home/vmail/mail/%d/%n/Maildir
+
+auth_verbose = yes
+
+auth_debug = yes
+
+auth default {
+
+ mechanisms = login
+
+ passdb passwd-file {
+ args = /etc/dovecot/dovecotpass
+ }
+
+ userdb static {
+ args = uid=11459 gid=1002 home=/home/vmail/dovecot/mail/%d/%n
+ }
+
+ user = root
+}
+
+
+
+
diff --git a/ext/imap/tests/bug45705_1.phpt b/ext/imap/tests/bug45705_1.phpt
new file mode 100644
index 000000000..eedaed081
--- /dev/null
+++ b/ext/imap/tests/bug45705_1.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Bug #45705 test #1 (imap rfc822_parse_adrlist() modifies passed address parameter)
+--SKIPIF--
+<?php
+ if (!extension_loaded("imap")) {
+ die("skip imap extension not available");
+ }
+?>
+--FILE--
+<?php
+
+$address = 'John Doe <john@example.com>';
+var_dump($address);
+imap_rfc822_parse_adrlist($address, null);
+var_dump($address);
+
+?>
+--EXPECT--
+string(27) "John Doe <john@example.com>"
+string(27) "John Doe <john@example.com>"
diff --git a/ext/imap/tests/bug45705_2.phpt b/ext/imap/tests/bug45705_2.phpt
new file mode 100644
index 000000000..797d47317
--- /dev/null
+++ b/ext/imap/tests/bug45705_2.phpt
@@ -0,0 +1,53 @@
+--TEST--
+Bug #45705 test #2 (imap rfc822_parse_adrlist() modifies passed address parameter)
+--SKIPIF--
+<?php
+ if (!extension_loaded("imap")) {
+ die("skip imap extension not available");
+ }
+?>
+--FILE--
+<?php
+
+$envelope = array('return_path' => 'John Doe <john@example.com>',
+ 'from' => 'John Doe <john@example.com>',
+ 'reply_to' => 'John Doe <john@example.com>',
+ 'to' => 'John Doe <john@example.com>',
+ 'cc' => 'John Doe <john@example.com>',
+ 'bcc' => 'John Doe <john@example.com>',
+);
+
+var_dump($envelope);
+imap_mail_compose($envelope, array(1 => array()));
+var_dump($envelope);
+
+?>
+--EXPECT--
+array(6) {
+ ["return_path"]=>
+ string(27) "John Doe <john@example.com>"
+ ["from"]=>
+ string(27) "John Doe <john@example.com>"
+ ["reply_to"]=>
+ string(27) "John Doe <john@example.com>"
+ ["to"]=>
+ string(27) "John Doe <john@example.com>"
+ ["cc"]=>
+ string(27) "John Doe <john@example.com>"
+ ["bcc"]=>
+ string(27) "John Doe <john@example.com>"
+}
+array(6) {
+ ["return_path"]=>
+ string(27) "John Doe <john@example.com>"
+ ["from"]=>
+ string(27) "John Doe <john@example.com>"
+ ["reply_to"]=>
+ string(27) "John Doe <john@example.com>"
+ ["to"]=>
+ string(27) "John Doe <john@example.com>"
+ ["cc"]=>
+ string(27) "John Doe <john@example.com>"
+ ["bcc"]=>
+ string(27) "John Doe <john@example.com>"
+}
diff --git a/ext/imap/tests/bug46918.phpt b/ext/imap/tests/bug46918.phpt
new file mode 100644
index 000000000..6456f2570
--- /dev/null
+++ b/ext/imap/tests/bug46918.phpt
@@ -0,0 +1,69 @@
+--TEST--
+Bug #46918 (imap_rfc822_parse_adrlist host part not filled in correctly)
+--FILE--
+<?php
+
+$adds = 'ian eiloart <iane@example.ac.uk>,
+ shuf6@example.ac.uk,
+ blobby,
+ "ian,eiloart"<ian@example.ac.uk>,
+ <@example.com:foo@example.ac.uk>,
+ foo@#,
+ ian@-example.com,
+ ian@one@two';
+$add_arr = imap_rfc822_parse_adrlist($adds, 'example.com');
+var_export($add_arr);
+
+?>
+--EXPECT--
+array (
+ 0 =>
+ stdClass::__set_state(array(
+ 'mailbox' => 'iane',
+ 'host' => 'example.ac.uk',
+ 'personal' => 'ian eiloart',
+ )),
+ 1 =>
+ stdClass::__set_state(array(
+ 'mailbox' => 'shuf6',
+ 'host' => 'example.ac.uk',
+ )),
+ 2 =>
+ stdClass::__set_state(array(
+ 'mailbox' => 'blobby',
+ 'host' => 'example.com',
+ )),
+ 3 =>
+ stdClass::__set_state(array(
+ 'mailbox' => 'ian',
+ 'host' => 'example.ac.uk',
+ 'personal' => 'ian,eiloart',
+ )),
+ 4 =>
+ stdClass::__set_state(array(
+ 'mailbox' => 'foo',
+ 'host' => 'example.ac.uk',
+ 'adl' => '@example.com',
+ )),
+ 5 =>
+ stdClass::__set_state(array(
+ 'mailbox' => 'foo',
+ 'host' => '#',
+ )),
+ 6 =>
+ stdClass::__set_state(array(
+ 'mailbox' => 'ian',
+ 'host' => '-example.com',
+ )),
+ 7 =>
+ stdClass::__set_state(array(
+ 'mailbox' => 'ian',
+ 'host' => 'one',
+ )),
+ 8 =>
+ stdClass::__set_state(array(
+ 'mailbox' => 'UNEXPECTED_DATA_AFTER_ADDRESS',
+ 'host' => '.SYNTAX-ERROR.',
+ )),
+)
+Notice: Unknown: Unexpected characters at end of address: @two (errflg=3) in Unknown on line 0
diff --git a/ext/imap/tests/clean.inc b/ext/imap/tests/clean.inc
new file mode 100644
index 000000000..648f3c364
--- /dev/null
+++ b/ext/imap/tests/clean.inc
@@ -0,0 +1,25 @@
+<?php
+include_once(dirname(__FILE__) . '/imap_include.inc');
+
+$imap_stream = imap_open($default_mailbox, $username, $password);
+
+// delete all msgs in default mailbox, i.e INBOX
+$check = imap_check($imap_stream);
+for ($i = 1; $i <= $check->Nmsgs; $i++) {
+ imap_delete($imap_stream, $i);
+}
+
+$mailboxes = imap_getmailboxes($imap_stream, $server, '*');
+
+foreach($mailboxes as $value) {
+ // Only delete mailboxes with our prefix
+ if (preg_match('/\{.*?\}INBOX\.(.+)/', $value->name, $match) == 1) {
+ if (strlen($match[1]) >= strlen($mailbox_prefix)
+ && substr_compare($match[1], $mailbox_prefix, 0, strlen($mailbox_prefix)) == 0) {
+ imap_deletemailbox($imap_stream, $value->name);
+ }
+ }
+}
+
+imap_close($imap_stream, CL_EXPUNGE);
+?> \ No newline at end of file
diff --git a/ext/imap/tests/imap_8bit_basic.phpt b/ext/imap/tests/imap_8bit_basic.phpt
new file mode 100644
index 000000000..48b136d74
--- /dev/null
+++ b/ext/imap/tests/imap_8bit_basic.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test imap_8bit() function : basic functionality
+--SKIPIF--
+<?php
+extension_loaded('imap') or die('skip imap extension not available in this build');
+?>
+--FILE--
+<?php
+/* Prototype : string imap_8bit ( string $string )
+ * Description: Convert an 8bit string to a quoted-printable string.
+ * Source code: ext/imap/php_imap.c
+ */
+
+echo "*** Testing imap_8bit() : basic functionality ***\n";
+
+var_dump(imap_8bit("String with CRLF at end \r\n"));
+//NB this appears to be a bug in cclient; a space at end of string should be encoded as =20
+var_dump(imap_8bit("String with space at end "));
+var_dump(imap_8bit("String with tabs \t\t in middle"));
+var_dump(imap_8bit("String with tab at end \t"));
+var_dump(imap_8bit("\x00\x01\x02\x03\x04\xfe\xff\x0a\x0d"));
+
+?>
+===Done===
+--EXPECT--
+*** Testing imap_8bit() : basic functionality ***
+string(28) "String with CRLF at end=20
+"
+string(25) "String with space at end "
+string(33) "String with tabs =09=09 in middle"
+string(26) "String with tab at end =09"
+string(27) "=00=01=02=03=04=FE=FF=0A=0D"
+===Done===
diff --git a/ext/imap/tests/imap_alerts_error.phpt b/ext/imap/tests/imap_alerts_error.phpt
new file mode 100644
index 000000000..b1b9ccdf6
--- /dev/null
+++ b/ext/imap/tests/imap_alerts_error.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Test imap_alerts() function : error conditions
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : array imap_alerts(void)
+ * Description: Returns an array of all IMAP alerts that have been generated since the last page load or since the last imap_alerts() call, whichever came last. The alert stack is cleared after imap_alerts() is called.
+ * Source code: ext/imap/php_imap.c
+ * Alias to functions:
+ */
+
+echo "*** Testing imap_alerts() : error conditions ***\n";
+
+// One argument
+echo "\n-- Testing imap_alerts() function with one argument --\n";
+$extra_arg = 10;;
+var_dump( imap_alerts($extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing imap_alerts() : error conditions ***
+
+-- Testing imap_alerts() function with one argument --
+
+Warning: Wrong parameter count for imap_alerts() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/imap/tests/imap_append_basic.phpt b/ext/imap/tests/imap_append_basic.phpt
new file mode 100644
index 000000000..cd0021688
--- /dev/null
+++ b/ext/imap/tests/imap_append_basic.phpt
@@ -0,0 +1,72 @@
+--TEST--
+Test imap_append() function : basic functionality
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : bool imap_append ( resource $imap_stream , string $mailbox , string $message [, string $options ] )
+ * Description: Append a string message to a specified mailbox.
+ * Source code: ext/imap/php_imap.c
+ */
+
+echo "*** Testing imap_append() : basic functionality ***\n";
+
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+echo "Create a new mailbox for test\n";
+$imap_stream = setup_test_mailbox("", 0);
+if (!is_resource($imap_stream)) {
+ exit("TEST FAILED: Unable to create test mailbox\n");
+}
+
+$mb_details = imap_mailboxmsginfo($imap_stream);
+echo "Add a couple of msgs to new mailbox " . $mb_details->Mailbox . "\n";
+var_dump(imap_append($imap_stream, $mb_details->Mailbox
+ , "From: webmaster@something.com\r\n"
+ . "To: info@something.com\r\n"
+ . "Subject: Test message\r\n"
+ . "\r\n"
+ . "this is a test message, please ignore\r\n"
+ ));
+
+var_dump(imap_append($imap_stream, $mb_details->Mailbox
+ , "From: webmaster@something.com\r\n"
+ . "To: info@something.com\r\n"
+ . "Subject: Another test\r\n"
+ . "\r\n"
+ . "this is another test message, please ignore it too!!\r\n"
+ ));
+
+$check = imap_check($imap_stream);
+echo "Msg Count after append : ". $check->Nmsgs . "\n";
+
+echo "List the msg headers\n";
+var_dump(imap_headers($imap_stream));
+
+imap_close($imap_stream);
+?>
+===Done===
+--CLEAN--
+<?php
+require_once('clean.inc');
+?>
+--EXPECTF--
+*** Testing imap_append() : basic functionality ***
+Create a new mailbox for test
+Create a temporary mailbox and add 0 msgs
+.. mailbox '%s' created
+Add a couple of msgs to new mailbox {%s}INBOX.%s
+bool(true)
+bool(true)
+Msg Count after append : 2
+List the msg headers
+array(2) {
+ [0]=>
+ string(%d) "%w%s 1)%s webmaster@something. Test message (%d chars)"
+ [1]=>
+ string(%d) "%w%s 2)%s webmaster@something. Another test (%d chars)"
+}
+===Done===
+
diff --git a/ext/imap/tests/imap_base64_basic.phpt b/ext/imap/tests/imap_base64_basic.phpt
new file mode 100644
index 000000000..3d1b6c283
--- /dev/null
+++ b/ext/imap/tests/imap_base64_basic.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test imap_base64() function : basic functionality
+--SKIPIF--
+<?php
+extension_loaded('imap') or die('skip imap extension not available in this build');
+?>
+--FILE--
+<?php
+/* Prototype : string imap_base64 ( string $text )
+ * Description: Decode BASE64 encoded text.
+ * Source code: ext/imap/php_imap.c
+ */
+
+echo "*** Testing imap_base64() : basic functionality ***\n";
+
+$str = b'This is an example string to be base 64 encoded';
+$base64 = base64_encode($str);
+if (imap_base64($base64) == $str) {
+ echo "TEST PASSED\n";
+} else {
+ echo "TEST FAILED";
+}
+
+$str = b'!£$%^&*()_+-={][];;@~#?/>.<,';
+$base64 = base64_encode($str);
+if (imap_base64($base64) == $str) {
+ echo "TEST PASSED\n";
+} else {
+ echo "TEST FAILED";
+}
+
+$hex = b'x00\x01\x02\x03\x04\x05\x06\xFA\xFB\xFC\xFD\xFE\xFF';
+$base64 = base64_encode($hex);
+if (imap_base64($base64) == $hex) {
+ echo "TEST PASSED\n";
+} else {
+ echo "TEST FAILED";
+}
+
+?>
+===Done===
+--EXPECT--
+*** Testing imap_base64() : basic functionality ***
+TEST PASSED
+TEST PASSED
+TEST PASSED
+===Done===
diff --git a/ext/imap/tests/imap_binary_basic.phpt b/ext/imap/tests/imap_binary_basic.phpt
new file mode 100644
index 000000000..bd4eabba5
--- /dev/null
+++ b/ext/imap/tests/imap_binary_basic.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Test imap_binary() function : basic functionality
+--SKIPIF--
+<?php
+extension_loaded('imap') or die('skip imap extension not available in this build');
+?>
+--FILE--
+<?php
+/* Prototype : string imap_binary ( string $string )
+ * Description: Convert an 8bit string to a base64 string.
+ * Source code: ext/imap/php_imap.c
+ */
+
+echo "*** Testing imap_binary() : basic functionality ***\n";
+
+echo "Encode as short string\n";
+$str = b'This is an example string to be base 64 encoded';
+$base64 = imap_binary($str);
+var_dump(bin2hex($base64));
+
+echo "Encode a string which results in more than 60 charters of output\n";
+$str = b'This is a long string with results in more than 60 characters of output';
+$base64 = imap_binary($str);
+var_dump(bin2hex($base64));
+
+echo "Encode a string with special characters\n";
+$str = b'_+-={][];;@~#?/>.<,';
+$base64 = imap_binary($str);
+var_dump(bin2hex($base64));
+
+echo "Encode some hexadecimal data\n";
+$hex = b'x00\x01\x02\x03\x04\x05\x06\xFA\xFB\xFC\xFD\xFE\xFF';
+$base64 = imap_binary($hex);
+var_dump(bin2hex($base64));
+
+?>
+===Done===
+--EXPECTF--
+*** Testing imap_binary() : basic functionality ***
+Encode as short string
+%string|unicode%(136) "5647687063794270637942686269426c654746746347786c49484e30636d6c755a794230627942695a53426959584e6c49445930494756755932396b0d0a5a57513d0d0a"
+Encode a string which results in more than 60 charters of output
+%string|unicode%(200) "56476870637942706379426849477876626d6367633352796157356e4948647064476767636d567a64577830637942706269427462334a6c4948526f0d0a595734674e6a416759326868636d466a64475679637942765a694276645852776458513d0d0a"
+Encode a string with special characters
+%string|unicode%(60) "5879737450587464573130374f30422b497a3876506934384c413d3d0d0a"
+Encode some hexadecimal data
+%string|unicode%(144) "65444177584867774d5678344d444a636544417a584867774e4678344d445663654441325848684751567834526b4a6365455a4458486847524678340d0a526b566365455a470d0a"
+===Done===
diff --git a/ext/imap/tests/imap_body_basic.phpt b/ext/imap/tests/imap_body_basic.phpt
new file mode 100644
index 000000000..deda63a35
--- /dev/null
+++ b/ext/imap/tests/imap_body_basic.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test imap_body() function : basic functionality
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : string imap_body ( resource $imap_stream , int $msg_number [, int $options ] )
+ * Description: Read the message body.
+ * Source code: ext/imap/php_imap.c
+ */
+
+echo "*** Testing imap_body() : basic functionality ***\n";
+
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+echo "Create a new mailbox for test\n";
+$imap_stream = setup_test_mailbox("", 1);
+if (!is_resource($imap_stream)) {
+ exit("TEST FAILED: Unable to create test mailbox\n");
+}
+
+$check = imap_check($imap_stream);
+echo "Msg Count in new mailbox: ". $check->Nmsgs . "\n";
+
+// show body for msg 1
+var_dump(imap_body($imap_stream, 1));
+
+imap_close($imap_stream);
+?>
+===Done===
+--CLEAN--
+<?php
+require_once('clean.inc');
+?>
+--EXPECTF--
+*** Testing imap_body() : basic functionality ***
+Create a new mailbox for test
+Create a temporary mailbox and add 1 msgs
+.. mailbox '%s' created
+Msg Count in new mailbox: 1
+string(%d) "1: this is a test message, please ignore%a"
+===Done=== \ No newline at end of file
diff --git a/ext/imap/tests/imap_bodystruct_basic.phpt b/ext/imap/tests/imap_bodystruct_basic.phpt
new file mode 100644
index 000000000..4edc753b6
--- /dev/null
+++ b/ext/imap/tests/imap_bodystruct_basic.phpt
@@ -0,0 +1,93 @@
+--TEST--
+Test imap_bodystruct() function : basic functionality
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : object imap_bodystruct ( resource $imap_stream , int $msg_number , string $section )
+ * Description: Read the structure of a specified body section of a specific message.
+ * Source code: ext/imap/php_imap.c
+ */
+
+echo "*** Testing string imap_bodystruct : basic functionality ***\n";
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+echo "Create a new mailbox for test and add a multipart msgs\n";
+$imap_stream = setup_test_mailbox("", 1, $mailbox, "multipart");
+if (!is_resource($imap_stream)) {
+ exit("TEST FAILED: Unable to create test mailbox\n");
+}
+
+echo "\nGet and validate structure of body part 1\n";
+
+$m = imap_bodystruct($imap_stream, 1, "1");
+
+$mandatoryFields = array(
+ 'ifsubtype',
+ 'ifdescription',
+ 'ifid',
+ 'ifdisposition',
+ 'ifdparameters',
+ 'ifparameters',
+ );
+
+foreach($mandatoryFields as $mf)
+{
+ if(isValid($m->$mf))
+ {
+ echo "$mf is 0 or 1\n";
+ }
+ else
+ {
+ echo "$mf FAIL\n";
+ }
+}
+
+if(is_array($m->parameters))
+{
+ echo "parameters is an array\n";
+}
+
+echo "\nTry to get part 4!\n";
+var_dump(imap_bodystruct($imap_stream, 1, "4"));
+
+imap_close($imap_stream);
+
+function isValid($param)
+{
+ if(($param == 0) || ($param == 1))
+ {
+ $result=true;
+ }
+ else
+ {
+ $result=false;
+ }
+return $result;
+}
+?>
+===Done===
+--CLEAN--
+<?php
+require_once('clean.inc');
+?>
+--EXPECTF--
+*** Testing string imap_bodystruct : basic functionality ***
+Create a new mailbox for test and add a multipart msgs
+Create a temporary mailbox and add 1 msgs
+.. mailbox '{localhost/norsh}INBOX.phpttest' created
+
+Get and validate structure of body part 1
+ifsubtype is 0 or 1
+ifdescription is 0 or 1
+ifid is 0 or 1
+ifdisposition is 0 or 1
+ifdparameters is 0 or 1
+ifparameters is 0 or 1
+parameters is an array
+
+Try to get part 4!
+bool(false)
+===Done===
diff --git a/ext/imap/tests/imap_clearflag_full_basic.phpt b/ext/imap/tests/imap_clearflag_full_basic.phpt
new file mode 100644
index 000000000..3e52b5dcb
--- /dev/null
+++ b/ext/imap/tests/imap_clearflag_full_basic.phpt
@@ -0,0 +1,127 @@
+--TEST--
+Test imap_clearflag_full() function : basic functionality
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : bool imap_clearflag_full ( resource $imap_stream , string $sequence , string $flag [, string $options ] )
+ * Description: Clears flags on messages.
+ * Source code: ext/imap/php_imap.c
+ */
+
+echo "*** Testing imap_clearflag_full() : basic functionality ***\n";
+
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+echo "Create a new mailbox for test\n";
+$imap_stream = setup_test_mailbox("", 10);
+if (!is_resource($imap_stream)) {
+ exit("TEST FAILED: Unable to create test mailbox\n");
+}
+
+$check = imap_check($imap_stream);
+echo "Initial msg count in new_mailbox : ". $check->Nmsgs . "\n";
+
+echo "Set some flags\n";
+var_dump(imap_setflag_full($imap_stream, "1,3", "\\Seen \\Answered"));
+var_dump(imap_setflag_full($imap_stream, "2,4", "\\Answered"));
+var_dump(imap_setflag_full($imap_stream, "5,7", "\\Flagged \\Deleted"));
+var_dump(imap_setflag_full($imap_stream, "6,8", "\\Deleted"));
+var_dump(imap_setflag_full($imap_stream, "9,10", "\\Draft \\Flagged"));
+
+var_dump(imap_search($imap_stream, "SEEN"));
+var_dump(imap_search($imap_stream, "ANSWERED"));
+var_dump(imap_search($imap_stream, "FLAGGED"));
+var_dump(imap_search($imap_stream, "DELETED"));
+
+var_dump(imap_clearflag_full($imap_stream, "1,4", "\\Answered"));
+var_dump(imap_clearflag_full($imap_stream, "5,6,7,8", "\\Deleted"));
+var_dump(imap_clearflag_full($imap_stream, "9", "\\Flagged"));
+
+var_dump(imap_search($imap_stream, "SEEN"));
+var_dump(imap_search($imap_stream, "ANSWERED"));
+var_dump(imap_search($imap_stream, "FLAGGED"));
+var_dump(imap_search($imap_stream, "DELETED"));
+
+imap_close($imap_stream);
+?>
+===Done===
+--CLEAN--
+<?php
+require_once('clean.inc');
+?>
+--EXPECTF--
+*** Testing imap_clearflag_full() : basic functionality ***
+Create a new mailbox for test
+Create a temporary mailbox and add 10 msgs
+.. mailbox '{localhost/norsh}INBOX.%s' created
+Initial msg count in new_mailbox : 10
+Set some flags
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(3)
+}
+array(4) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+}
+array(4) {
+ [0]=>
+ int(5)
+ [1]=>
+ int(7)
+ [2]=>
+ int(9)
+ [3]=>
+ int(10)
+}
+array(4) {
+ [0]=>
+ int(5)
+ [1]=>
+ int(6)
+ [2]=>
+ int(7)
+ [3]=>
+ int(8)
+}
+bool(true)
+bool(true)
+bool(true)
+array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(3)
+}
+array(2) {
+ [0]=>
+ int(2)
+ [1]=>
+ int(3)
+}
+array(3) {
+ [0]=>
+ int(5)
+ [1]=>
+ int(7)
+ [2]=>
+ int(10)
+}
+bool(false)
+===Done===
diff --git a/ext/imap/tests/imap_close_basic.phpt b/ext/imap/tests/imap_close_basic.phpt
new file mode 100644
index 000000000..5ec6a33a1
--- /dev/null
+++ b/ext/imap/tests/imap_close_basic.phpt
@@ -0,0 +1,56 @@
+--TEST--
+Test imap_close() function : basic functionality
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : bool imap_close(resource $stream_id [, int $options])
+ * Description: Close an IMAP stream
+ * Source code: ext/imap/php_imap.c
+ */
+
+echo "*** Testing imap_close() : basic functionality ***\n";
+
+// include file for required variables in imap_open()
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+// Initialize required variables
+$stream_id = setup_test_mailbox('', 3, $mailbox); // set up temp mailbox with 3 messages
+$options = CL_EXPUNGE;
+
+// mark messages in inbox for deletion
+for ($i = 1; $i < 4; $i++) {
+ imap_delete($stream_id, $i);
+}
+
+// Calling imap_close() with all possible arguments
+echo "\n-- Call to imap_close() with all possible arguments --\n";
+var_dump( imap_close($stream_id, $options) );
+
+// check that CL_EXPUNGE worked
+$stream_id = imap_open($mailbox, $username, $password);
+echo "There are now " . imap_num_msg($stream_id) . " msgs in mailbox '$mailbox'\n";
+
+// Calling imap_close() with mandatory arguments
+echo "\n-- Call to imap_close() with mandatory arguments --\n";
+var_dump( imap_close($stream_id) );
+?>
+===DONE===
+--CLEAN--
+<?php
+require_once(dirname(__FILE__).'/clean.inc');
+?>
+--EXPECTF--
+*** Testing imap_close() : basic functionality ***
+Create a temporary mailbox and add 3 msgs
+.. mailbox '%sINBOX.phpttest' created
+
+-- Call to imap_close() with all possible arguments --
+bool(true)
+There are now 0 msgs in mailbox '%sINBOX.phpttest'
+
+-- Call to imap_close() with mandatory arguments --
+bool(true)
+===DONE===
diff --git a/ext/imap/tests/imap_close_error.phpt b/ext/imap/tests/imap_close_error.phpt
new file mode 100644
index 000000000..2fbe0ec82
--- /dev/null
+++ b/ext/imap/tests/imap_close_error.phpt
@@ -0,0 +1,45 @@
+--TEST--
+Test imap_close() function : error conditions - incorrect number of args
+--SKIPIF--
+<?php
+require_once (dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : bool imap_close(resource $stream_id [, int $options])
+ * Description: Close an IMAP stream
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Pass an incorrect number of arguments to imap_close() to test behaviour
+ */
+
+echo "*** Testing imap_close() : error conditions ***\n";
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+// Zero arguments
+echo "\n-- Testing imap_close() function with Zero arguments --\n";
+var_dump( imap_close() );
+
+//Test imap_close with one more than the expected number of arguments
+echo "\n-- Testing imap_close() function with more than expected no. of arguments --\n";
+$stream_id = imap_open($server, $username, $password);
+$options = CL_EXPUNGE;
+$extra_arg = 10;
+var_dump( imap_close($stream_id, $options, $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing imap_close() : error conditions ***
+
+-- Testing imap_close() function with Zero arguments --
+
+Warning: Wrong parameter count for imap_close() in %s on line %d
+NULL
+
+-- Testing imap_close() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for imap_close() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/imap/tests/imap_close_variation1.phpt b/ext/imap/tests/imap_close_variation1.phpt
new file mode 100644
index 000000000..e5ffa2ecb
--- /dev/null
+++ b/ext/imap/tests/imap_close_variation1.phpt
@@ -0,0 +1,214 @@
+--TEST--
+Test imap_close() function : usage variations - different data types as $stream_id arg
+--SKIPIF--
+<?php
+extension_loaded('imap') or die('skip imap extension not available in this build');
+?>
+--FILE--
+<?php
+/* Prototype : bool imap_close(resource $stream_id [, int $options])
+ * Description: Close an IMAP stream
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Pass different data types as $stream_id argument to test behaviour of imap_close()
+ */
+
+echo "*** Testing imap_close() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// unexpected values to be passed to $stream_id argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "string",
+ 'string',
+ $heredoc,
+
+ // object data
+/*22*/ new classA(),
+
+ // undefined data
+/*23*/ @$undefined_var,
+
+ // unset data
+/*24*/ @$unset_var,
+);
+
+// loop through each element of $inputs to check the behavior of imap_close()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( imap_close($input) );
+ $iterator++;
+};
+?>
+===DONE===
+--EXPECTF--
+*** Testing imap_close() : usage variations ***
+
+-- Iteration 1 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 2 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 3 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 4 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 8 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 9 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 10 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 11 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 12 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 13 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 14 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 15 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 16 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 19 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 20 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 21 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 22 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 23 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 24 --
+
+Warning: imap_close(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/imap/tests/imap_close_variation2.phpt b/ext/imap/tests/imap_close_variation2.phpt
new file mode 100644
index 000000000..3aa9f2a7e
--- /dev/null
+++ b/ext/imap/tests/imap_close_variation2.phpt
@@ -0,0 +1,221 @@
+--TEST--
+Test imap_close() function : usage variations - different data types as $options arg
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : bool imap_close(resource $stream_id [, int $options])
+ * Description: Close an IMAP stream
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Pass different data types as $options argument to test behaviour of imap_close()
+ */
+
+echo "*** Testing imap_close() : usage variations ***\n";
+
+// include file for imap_stream
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+// create mailbox to test whether options has been set to CL_EXPUNGE
+$stream_id = setup_test_mailbox('', 3, $mailbox);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+32768
+EOT;
+
+// unexpected values to be passed to $options argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 32768,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "32768",
+ '32768',
+ $heredoc,
+
+ // undefined data
+/*22*/ @$undefined_var,
+
+ // unset data
+/*23*/ @$unset_var,
+);
+
+// loop through each element of $inputs to check the behavior of imap_close()
+$iterator = 1;
+foreach($inputs as $input) {
+
+ // mark added messages for deletion
+ for ($i = 1; $i < 4; $i++) {
+ imap_delete($stream_id, $i);
+ }
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( $check = imap_close($stream_id, $input) );
+
+ // check that imap_close was successful, if not call imap_close and explicitly set CL_EXPUNGE
+ if(false === $check) {
+ imap_close($stream_id, CL_EXPUNGE);
+ } else {
+ // if imap_close was successful test whether CL_EXPUNGE was set by doing a message count
+ $imap_stream = imap_open($mailbox, $username, $password);
+ $num_msg = imap_num_msg($imap_stream);
+ if ($num_msg != 0) {
+ echo "CL_EXPUNGE was not set, $num_msg msgs in mailbox\n";
+ } else {
+ echo "CL_EXPUNGE was set\n";
+ }
+ // call imap_close with CL_EXPUNGE explicitly set in case mailbox not empty
+ imap_close($imap_stream, CL_EXPUNGE);
+ }
+ $iterator++;
+
+ // get $stream_id for next iteration
+ $stream_id = imap_open($mailbox, $username, $password);
+ populate_mailbox($stream_id, $mailbox, 3);
+
+};
+
+?>
+===DONE===
+--CLEAN--
+<?php
+require_once(dirname(__FILE__).'/clean.inc');
+?>
+--EXPECTF--
+*** Testing imap_close() : usage variations ***
+Create a temporary mailbox and add 3 msgs
+.. mailbox '{localhost/norsh}INBOX.phpttest' created
+
+-- Iteration 1 --
+bool(true)
+CL_EXPUNGE was not set, 3 msgs in mailbox
+
+-- Iteration 2 --
+
+Warning: imap_close(): invalid value for the flags parameter in %s on line %d
+bool(false)
+
+-- Iteration 3 --
+bool(true)
+CL_EXPUNGE was set
+
+-- Iteration 4 --
+
+Warning: imap_close(): invalid value for the flags parameter in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+
+Warning: imap_close(): invalid value for the flags parameter in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Warning: imap_close(): invalid value for the flags parameter in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+
+Warning: imap_close(): invalid value for the flags parameter in %s on line %d
+bool(false)
+
+-- Iteration 8 --
+bool(true)
+CL_EXPUNGE was not set, 3 msgs in mailbox
+
+-- Iteration 9 --
+bool(true)
+CL_EXPUNGE was not set, 3 msgs in mailbox
+
+-- Iteration 10 --
+bool(true)
+CL_EXPUNGE was not set, 3 msgs in mailbox
+
+-- Iteration 11 --
+bool(true)
+CL_EXPUNGE was not set, 3 msgs in mailbox
+
+-- Iteration 12 --
+
+Warning: imap_close(): invalid value for the flags parameter in %s on line %d
+bool(false)
+
+-- Iteration 13 --
+bool(true)
+CL_EXPUNGE was not set, 3 msgs in mailbox
+
+-- Iteration 14 --
+
+Warning: imap_close(): invalid value for the flags parameter in %s on line %d
+bool(false)
+
+-- Iteration 15 --
+bool(true)
+CL_EXPUNGE was not set, 3 msgs in mailbox
+
+-- Iteration 16 --
+bool(true)
+CL_EXPUNGE was not set, 3 msgs in mailbox
+
+-- Iteration 17 --
+bool(true)
+CL_EXPUNGE was not set, 3 msgs in mailbox
+
+-- Iteration 18 --
+bool(true)
+CL_EXPUNGE was not set, 3 msgs in mailbox
+
+-- Iteration 19 --
+bool(true)
+CL_EXPUNGE was set
+
+-- Iteration 20 --
+bool(true)
+CL_EXPUNGE was set
+
+-- Iteration 21 --
+bool(true)
+CL_EXPUNGE was set
+
+-- Iteration 22 --
+bool(true)
+CL_EXPUNGE was not set, 3 msgs in mailbox
+
+-- Iteration 23 --
+bool(true)
+CL_EXPUNGE was not set, 3 msgs in mailbox
+===DONE===
diff --git a/ext/imap/tests/imap_close_variation3.phpt b/ext/imap/tests/imap_close_variation3.phpt
new file mode 100644
index 000000000..5f2790b31
--- /dev/null
+++ b/ext/imap/tests/imap_close_variation3.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test imap_close() function : usage variations - different streams
+--SKIPIF--
+<?php
+extension_loaded('imap') or die('skip imap extension not available in this build');
+?>
+--FILE--
+<?php
+/* Prototype : bool imap_close(resource $stream_id [, int $options])
+ * Description: Close an IMAP stream
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Pass different stream types to imap_close() to test whether it can close them
+ */
+
+echo "*** Testing imap_close() : usage variations ***\n";
+
+echo "\n-- File Resource opened with fopen() --\n";
+var_dump($file_handle = fopen(__FILE__, 'r'));
+var_dump(imap_close($file_handle));
+var_dump($file_handle);
+
+echo "\n-- Directory Resource opened with opendir() --\n";
+var_dump($dir_handle = opendir(dirname(__FILE__)));
+var_dump(imap_close($dir_handle));
+var_dump($dir_handle);
+?>
+===DONE===
+--EXPECTF--
+*** Testing imap_close() : usage variations ***
+
+-- File Resource opened with fopen() --
+resource(%d) of type (stream)
+
+Warning: imap_close(): supplied resource is not a valid imap resource in %s on line %d
+bool(false)
+resource(%d) of type (stream)
+
+-- Directory Resource opened with opendir() --
+resource(%d) of type (stream)
+
+Warning: imap_close(): supplied resource is not a valid imap resource in %s on line %d
+bool(false)
+resource(%d) of type (stream)
+===DONE===
diff --git a/ext/imap/tests/imap_close_variation4.phpt b/ext/imap/tests/imap_close_variation4.phpt
new file mode 100644
index 000000000..65b05786f
--- /dev/null
+++ b/ext/imap/tests/imap_close_variation4.phpt
@@ -0,0 +1,93 @@
+--TEST--
+Test imap_close() function : usage variations - different ints as $options arg
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : bool imap_close(resource $stream_id [, int $options])
+ * Description: Close an IMAP stream
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Pass different integers as $options arg to imap_close() to test which are
+ * recognised as CL_EXPUNGE option
+ */
+
+echo "*** Testing imap_close() : usage variations ***\n";
+
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+$inputs = array (0, 3.2768e4, -32768, PHP_INT_MAX, -PHP_INT_MAX);
+
+$stream_id = setup_test_mailbox('', 3, $mailbox); // set up temp mailbox with 3 messages
+
+// loop through each element of $inputs to check the behavior of imap_close()
+$iterator = 1;
+foreach($inputs as $input) {
+
+ // mark added messages for deletion
+ for ($i = 1; $i < 4; $i++) {
+ imap_delete($stream_id, $i);
+ }
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( $check = imap_close($stream_id, $input) );
+
+ // check that imap_close was successful, if not call imap_close and explicitly set CL_EXPUNGE
+ if(false === $check) {
+ imap_close($stream_id, CL_EXPUNGE);
+ } else {
+ // if imap_close was successful test whether CL_EXPUNGE was set by doing a message count
+ $imap_stream = imap_open($mailbox, $username, $password);
+ $num_msg = imap_num_msg($imap_stream);
+ if ($num_msg != 0) {
+ echo "CL_EXPUNGE was not set, $num_msg msgs in mailbox\n";
+ } else {
+ echo "CL_EXPUNGE was set\n";
+ }
+ // call imap_close with CL_EXPUNGE explicitly set in case mailbox not empty
+ imap_close($imap_stream, CL_EXPUNGE);
+ }
+ $iterator++;
+
+ // get $stream_id for next iteration
+ $stream_id = imap_open($mailbox, $username, $password);
+ populate_mailbox($stream_id, $mailbox, 3);
+
+};
+?>
+===DONE===
+--CLEAN--
+<?php
+require_once(dirname(__FILE__).'/clean.inc');
+?>
+--EXPECTF--
+*** Testing imap_close() : usage variations ***
+Create a temporary mailbox and add 3 msgs
+.. mailbox '{localhost/norsh}INBOX.phpttest' created
+
+-- Iteration 1 --
+bool(true)
+CL_EXPUNGE was not set, 3 msgs in mailbox
+
+-- Iteration 2 --
+bool(true)
+CL_EXPUNGE was set
+
+-- Iteration 3 --
+
+Warning: imap_close(): invalid value for the flags parameter in %s on line %d
+bool(false)
+
+-- Iteration 4 --
+
+Warning: imap_close(): invalid value for the flags parameter in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+
+Warning: imap_close(): invalid value for the flags parameter in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/imap/tests/imap_createmailbox_basic.phpt b/ext/imap/tests/imap_createmailbox_basic.phpt
new file mode 100644
index 000000000..e80c87dc8
--- /dev/null
+++ b/ext/imap/tests/imap_createmailbox_basic.phpt
@@ -0,0 +1,69 @@
+--TEST--
+Test imap_createmailbox() function : basic functionality
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : bool imap_createmailbox ( resource $imap_stream , string $mailbox )
+ * Description: Creates a new mailbox specified by mailbox .
+ * Source code: ext/imap/php_imap.c
+ */
+
+echo "*** Testing imap_createmailbox() : basic functionality ***\n";
+
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+$imap_stream = imap_open($default_mailbox, $username, $password) or
+ die("Cannot connect to mailbox $default_mailbox: " . imap_last_error());
+
+$newname = "phpnewbox";
+
+echo "Newname will be '$newname'\n";
+
+$newbox = imap_utf7_encode($server.$newname);
+if (imap_createmailbox($imap_stream, $newbox)) {
+
+ echo "Add a couple of msgs to '$newname' mailbox\n";
+ populate_mailbox($imap_stream, $newbox, 2);
+
+ $status = imap_status($imap_stream, $newbox, SA_ALL);
+ if ($status) {
+ echo "Your new mailbox '$newname' has the following status:\n";
+ echo "Messages: " . $status->messages . "\n";
+ echo "Recent: " . $status->recent . "\n";
+ echo "Unseen: " . $status->unseen . "\n";
+ echo "UIDnext: " . $status->uidnext . "\n";
+ echo "UIDvalidity: " . $status->uidvalidity . "\n";
+
+ } else {
+ echo "imap_status on new mailbox failed: " . imap_last_error() . "\n";
+ }
+
+ if (imap_deletemailbox($imap_stream, $newbox)) {
+ echo "Mailbox '$newname' removed to restore initial state\n";
+ } else {
+ echo "imap_deletemailbox on new mailbox failed: " . implode("\n", imap_errors()) . "\n";
+ }
+
+} else {
+ echo "could not create new mailbox: " . implode("\n", imap_errors()) . "\n";
+}
+
+imap_close($imap_stream);
+
+?>
+===Done===
+--EXPECTF--
+*** Testing imap_createmailbox() : basic functionality ***
+Newname will be 'phpnewbox'
+Add a couple of msgs to 'phpnewbox' mailbox
+Your new mailbox 'phpnewbox' has the following status:
+Messages: 2
+Recent: 2
+Unseen: 2
+UIDnext: %d
+UIDvalidity: %d
+Mailbox 'phpnewbox' removed to restore initial state
+===Done===
diff --git a/ext/imap/tests/imap_errors_basic.phpt b/ext/imap/tests/imap_errors_basic.phpt
new file mode 100644
index 000000000..f839fe152
--- /dev/null
+++ b/ext/imap/tests/imap_errors_basic.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Test imap_errors() function : basic functionality
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : array imap_errors ( void )
+ * Description: Returns all of the IMAP errors that have occured.
+ * Source code: ext/imap/php_imap.c
+ */
+
+echo "*** Testing imap_errors() : basic functionality ***\n";
+require_once(dirname(__FILE__).'/imap_include.inc');
+$password = "bogus"; // invalid password to use in this test
+
+echo "Issue open with invalid password with normal default number of retries, i.e 3\n";
+$mbox = imap_open($default_mailbox, $username, $password, OP_READONLY, 3);
+
+echo "List any errors\n";
+var_dump(imap_errors());
+
+echo "\n\nIssue open with invalid password with retries == 1\n";
+$mbox = imap_open($default_mailbox, $username, $password, OP_READONLY, 1);
+
+echo "List any errors\n";
+var_dump(imap_errors());
+?>
+===Done===
+--EXPECTF--
+*** Testing imap_errors() : basic functionality ***
+Issue open with invalid password with normal default number of retries, i.e 3
+
+Warning: imap_open(): Couldn't open stream %s in %s on line %d
+List any errors
+array(%d) {
+ [0]=>
+ string(%d) "%s"
+ [1]=>
+ string(%d) "%s"
+ [2]=>
+ string(%d) "%a
+}
+
+
+Issue open with invalid password with retries == 1
+
+Warning: imap_open(): Couldn't open stream %s in %s on line %d
+List any errors
+array(%d) {
+ [0]=>
+ string(%d) "%a
+}
+===Done===
diff --git a/ext/imap/tests/imap_fetch_overview_basic.phpt b/ext/imap/tests/imap_fetch_overview_basic.phpt
new file mode 100644
index 000000000..80d5c69f1
--- /dev/null
+++ b/ext/imap/tests/imap_fetch_overview_basic.phpt
@@ -0,0 +1,118 @@
+--TEST--
+Test imap_fetch_overview() function : basic functionality
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : array imap_fetch_overview(resource $stream_id, int $msg_no [, int $options])
+ * Description: Read an overview of the information in the headers
+ * of the given message sequence
+ * Source code: ext/imap/php_imap.c
+ */
+
+echo "*** Testing imap_fetch_overview() : basic functionality ***\n";
+
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+// create a new mailbox and add two new messages to it
+$stream_id = setup_test_mailbox('', 2, $mailbox, 'notSimple');
+
+// get UID for new message
+$msg_no = imap_uid($stream_id, 1);
+$options = FT_UID;
+
+//Set mandatory response fields
+$mandatoryFields = array(
+ 'size',
+ 'uid',
+ 'msgno',
+ 'recent',
+ 'flagged',
+ 'answered',
+ 'deleted',
+ 'seen',
+ 'draft',
+ );
+
+// Calling imap_fetch_overview() with all possible arguments
+echo "\n-- All possible arguments --\n";
+$a = imap_fetch_overview($stream_id, "$msg_no", $options) ;
+echo "\n--> Object #1\n";
+foreach ($mandatoryFields as $mf)
+{
+ $z = $a[0]->$mf;
+ echo "$mf is $z\n";
+}
+
+// Calling imap_fetch_overview() with mandatory arguments
+echo "\n-- Mandatory arguments --\n";
+$a = imap_fetch_overview($stream_id, '1:2') ;
+
+//first object in array
+echo "\n--> Object #1\n";
+foreach ($mandatoryFields as $mf)
+{
+ $z = $a[0]->$mf;
+ echo "$mf is $z\n";
+}
+
+//Second object in array
+echo "\n--> Object #2\n";
+foreach ($mandatoryFields as $mf)
+{
+ $z = $a[1]->$mf;
+ echo "$mf is $z\n";
+}
+
+imap_close($stream_id);
+
+?>
+===DONE===
+--CLEAN--
+<?php
+require_once(dirname(__FILE__).'/clean.inc');
+?>
+--EXPECTF--
+*** Testing imap_fetch_overview() : basic functionality ***
+Create a temporary mailbox and add 2 msgs
+.. mailbox '{localhost/norsh}INBOX.phpttest' created
+
+-- All possible arguments --
+
+--> Object #1
+size is %d
+uid is %d
+msgno is 1
+recent is %d
+flagged is 0
+answered is 0
+deleted is 0
+seen is 0
+draft is 0
+
+-- Mandatory arguments --
+
+--> Object #1
+size is %d
+uid is %d
+msgno is 1
+recent is %d
+flagged is 0
+answered is 0
+deleted is 0
+seen is 0
+draft is 0
+
+--> Object #2
+size is %d
+uid is %d
+msgno is 2
+recent is %d
+flagged is 0
+answered is 0
+deleted is 0
+seen is 0
+draft is 0
+===DONE===
diff --git a/ext/imap/tests/imap_fetch_overview_error.phpt b/ext/imap/tests/imap_fetch_overview_error.phpt
new file mode 100644
index 000000000..fa8c18232
--- /dev/null
+++ b/ext/imap/tests/imap_fetch_overview_error.phpt
@@ -0,0 +1,54 @@
+--TEST--
+Test imap_fetch_overview() function : error conditions - incorrect number of args
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : array imap_fetch_overview(resource $stream_id, int $msg_no [, int $options])
+ * Description: Read an overview of the information in the headers
+ * of the given message sequence
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Pass an incorrect number of arguments to imap_fetch_overview() to test behaviour
+ */
+
+echo "*** Testing imap_fetch_overview() : error conditions ***\n";
+
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+//Test imap_fetch_overview with one more than the expected number of arguments
+echo "\n-- Testing imap_fetch_overview() function with more than expected no. of arguments --\n";
+$stream_id = setup_test_mailbox('', 2, $mailbox, 'notSimple'); // set up temp mailbox with 2 msgs
+$msg_no = 1;
+$options = FT_UID;
+$extra_arg = 10;
+var_dump( imap_fetch_overview($stream_id, $msg_no, $options, $extra_arg) );
+
+// Testing imap_fetch_overview with one less than the expected number of arguments
+echo "\n-- Testing imap_fetch_overview() function with less than expected no. of arguments --\n";
+var_dump( imap_fetch_overview($stream_id) );
+?>
+===DONE===
+--CLEAN--
+<?php
+require_once(dirname(__FILE__).'/clean.inc');
+?>
+--EXPECTF--
+*** Testing imap_fetch_overview() : error conditions ***
+
+-- Testing imap_fetch_overview() function with more than expected no. of arguments --
+Create a temporary mailbox and add 2 msgs
+.. mailbox '%s.phpttest' created
+
+Warning: Wrong parameter count for imap_fetch_overview() in %s on line %d
+NULL
+
+-- Testing imap_fetch_overview() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for imap_fetch_overview() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/imap/tests/imap_fetch_overview_variation1.phpt b/ext/imap/tests/imap_fetch_overview_variation1.phpt
new file mode 100644
index 000000000..a7d86b434
--- /dev/null
+++ b/ext/imap/tests/imap_fetch_overview_variation1.phpt
@@ -0,0 +1,221 @@
+--TEST--
+Test imap_fetch_overview() function : usage variations - diff data types as $stream_id arg
+--SKIPIF--
+<?php
+extension_loaded('imap') or die('skip imap extension not available in this build');
+?>
+--FILE--
+<?php
+/* Prototype : array imap_fetch_overview(resource $stream_id, int $msg_no [, int $options])
+ * Description: Read an overview of the information in the headers
+ * of the given message sequence
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Pass different data types as $stream_id argument to imap_fetch_overview() to test behaviour
+ */
+
+echo "*** Testing imap_fetch_overview() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$msg_no = 1;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// unexpected values to be passed to $stream_id argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "string",
+ 'string',
+ $heredoc,
+
+ // object data
+/*22*/ new classA(),
+
+ // undefined data
+/*23*/ @$undefined_var,
+
+ // unset data
+/*24*/ @$unset_var,
+);
+
+// loop through each element of $inputs to check the behavior of imap_fetch_overview()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Testing with first argument value: ";
+ var_dump($input);
+ var_dump( imap_fetch_overview($input, $msg_no) );
+ $iterator++;
+};
+?>
+===DONE===
+--EXPECTF--
+*** Testing imap_fetch_overview() : usage variations ***
+
+-- Testing with first argument value: int(0)
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Testing with first argument value: int(1)
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Testing with first argument value: int(12345)
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Testing with first argument value: int(-2345)
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Testing with first argument value: float(10.5)
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Testing with first argument value: float(-10.5)
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Testing with first argument value: float(123456789000)
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Testing with first argument value: float(1.23456789E-9)
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Testing with first argument value: float(0.5)
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Testing with first argument value: NULL
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Testing with first argument value: NULL
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Testing with first argument value: bool(true)
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Testing with first argument value: bool(false)
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Testing with first argument value: bool(true)
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Testing with first argument value: bool(false)
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Testing with first argument value: string(0) ""
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Testing with first argument value: string(0) ""
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Testing with first argument value: array(0) {
+}
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Testing with first argument value: string(6) "string"
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Testing with first argument value: string(6) "string"
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Testing with first argument value: string(11) "hello world"
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Testing with first argument value: object(classA)#1 (0) {
+}
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Testing with first argument value: NULL
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Testing with first argument value: NULL
+
+Warning: imap_fetch_overview(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/imap/tests/imap_fetch_overview_variation2.phpt b/ext/imap/tests/imap_fetch_overview_variation2.phpt
new file mode 100644
index 000000000..18f2af3be
--- /dev/null
+++ b/ext/imap/tests/imap_fetch_overview_variation2.phpt
@@ -0,0 +1,243 @@
+--TEST--
+Test imap_fetch_overview() function : usage variations - diff data types as $msg_no arg
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : array imap_fetch_overview(resource $stream_id, int $msg_no [, int $options])
+ * Description: Read an overview of the information in the headers
+ * of the given message sequence
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Pass different data types as $msg_no argument to imap_fetch_overview() to test behaviour
+ */
+
+echo "*** Testing imap_fetch_overview() : usage variations ***\n";
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+// Initialise function arguments not being substituted
+$stream_id = setup_test_mailbox('', 1, $mailbox, 'notSimple'); // set up temp mailbox with 1 msg
+
+//Set mandatory response fields
+$mandatoryFields = array(
+ 'size',
+ 'uid',
+ 'msgno',
+ 'recent',
+ 'flagged',
+ 'answered',
+ 'deleted',
+ 'seen',
+ 'draft',
+ );
+
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to <<<ARGUMENT HERE>>> argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "string",
+ 'string',
+ $heredoc,
+
+ // object data
+/*22*/ new classA(),
+
+ // undefined data
+/*23*/ @$undefined_var,
+
+ // unset data
+/*24*/ @$unset_var,
+
+ // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of imap_fetch_overview()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Testing with second argument value: ";
+ var_dump($input);
+ $overview = imap_fetch_overview($stream_id, $input);
+ if (!$overview) {
+ echo imap_last_error() . "\n";
+ } else {
+ foreach ($mandatoryFields as $mf)
+ {
+ $z = $overview[0]->$mf;
+ echo "$mf is $z\n";
+ }
+ }
+ $iterator++;
+};
+
+fclose($fp);
+
+// clear the error stack
+imap_errors();
+?>
+===DONE===
+--CLEAN--
+<?php
+require_once(dirname(__FILE__).'/clean.inc');
+?>
+--EXPECTF--
+*** Testing imap_fetch_overview() : usage variations ***
+Create a temporary mailbox and add 1 msgs
+.. mailbox '{localhost/norsh}INBOX.phpttest' created
+
+-- Testing with second argument value: int(0)
+Sequence out of range
+
+-- Testing with second argument value: int(1)
+size is %d
+uid is %d
+msgno is 1
+recent is %d
+flagged is 0
+answered is 0
+deleted is 0
+seen is 0
+draft is 0
+
+-- Testing with second argument value: int(12345)
+Sequence out of range
+
+-- Testing with second argument value: int(-2345)
+Syntax error in sequence
+
+-- Testing with second argument value: float(10.5)
+Sequence out of range
+
+-- Testing with second argument value: float(-10.5)
+Syntax error in sequence
+
+-- Testing with second argument value: float(123456789000)
+Sequence out of range
+
+-- Testing with second argument value: float(1.23456789E-9)
+Sequence syntax error
+
+-- Testing with second argument value: float(0.5)
+Sequence out of range
+
+-- Testing with second argument value: NULL
+Sequence out of range
+
+-- Testing with second argument value: NULL
+Sequence out of range
+
+-- Testing with second argument value: bool(true)
+size is %d
+uid is %d
+msgno is 1
+recent is %d
+flagged is 0
+answered is 0
+deleted is 0
+seen is 0
+draft is 0
+
+-- Testing with second argument value: bool(false)
+Sequence out of range
+
+-- Testing with second argument value: bool(true)
+size is %d
+uid is %d
+msgno is 1
+recent is %d
+flagged is 0
+answered is 0
+deleted is 0
+seen is 0
+draft is 0
+
+-- Testing with second argument value: bool(false)
+Sequence out of range
+
+-- Testing with second argument value: string(0) ""
+Sequence out of range
+
+-- Testing with second argument value: string(0) ""
+Sequence out of range
+
+-- Testing with second argument value: array(0) {
+}
+
+Notice: Array to string conversion in %s on line %d
+Syntax error in sequence
+
+-- Testing with second argument value: string(6) "string"
+Syntax error in sequence
+
+-- Testing with second argument value: string(6) "string"
+Syntax error in sequence
+
+-- Testing with second argument value: string(11) "hello world"
+Syntax error in sequence
+
+-- Testing with second argument value: object(classA)#1 (0) {
+}
+Syntax error in sequence
+
+-- Testing with second argument value: NULL
+Syntax error in sequence
+
+-- Testing with second argument value: NULL
+Syntax error in sequence
+
+-- Testing with second argument value: resource(%d) of type (stream)
+Syntax error in sequence
+===DONE===
diff --git a/ext/imap/tests/imap_fetch_overview_variation3.phpt b/ext/imap/tests/imap_fetch_overview_variation3.phpt
new file mode 100644
index 000000000..4ec4fae6e
--- /dev/null
+++ b/ext/imap/tests/imap_fetch_overview_variation3.phpt
@@ -0,0 +1,79 @@
+--TEST--
+Test imap_fetch_overview() function : usage variations - FT_UID option
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : array imap_fetch_overview(resource $stream_id, int $msg_no [, int $options])
+ * Description: Read an overview of the information in the headers of the given message sequence
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Test passing a range of values into the $options argument to imap_fetch_overview():
+ * 1. values that equate to 1
+ * 2. Minimum and maximum PHP values
+ */
+
+echo "*** Testing imap_fetch_overview() : usage variations ***\n";
+
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+// Initialise required variables
+$stream_id = setup_test_mailbox('', 1); // set up temporary mailbox with one simple message
+$msg_no = 1;
+$msg_uid=imap_uid($stream_id, $msg_no);
+$options = array ('1',
+ true,
+ 1.000000000000001,
+ 0.00001e5,
+ PHP_INT_MAX,
+ -PHP_INT_MAX
+ );
+
+// iterate over each element of $options array
+$iterator = 1;
+imap_check($stream_id);
+foreach($options as $option) {
+ echo "\nTesting with option value:";
+ var_dump($option);
+ $overview = imap_fetch_overview($stream_id, $msg_uid, $option);
+ if ($overview) {
+ echo "imap_fetch_overview() returns an object\n";
+ }
+ $iterator++;
+}
+
+?>
+===DONE===
+--CLEAN--
+<?php
+require_once(dirname(__FILE__).'/clean.inc');
+?>
+--EXPECTF--
+*** Testing imap_fetch_overview() : usage variations ***
+Create a temporary mailbox and add 1 msgs
+.. mailbox '{localhost/norsh}INBOX.phpttest' created
+
+Testing with option value:string(1) "1"
+imap_fetch_overview() returns an object
+
+Testing with option value:bool(true)
+imap_fetch_overview() returns an object
+
+Testing with option value:float(1)
+imap_fetch_overview() returns an object
+
+Testing with option value:float(1)
+imap_fetch_overview() returns an object
+
+Testing with option value:int(%d)
+
+Warning: imap_fetch_overview(): invalid value for the options parameter in %s on line %d
+
+Testing with option value:int(-%d)
+
+Warning: imap_fetch_overview(): invalid value for the options parameter in %s on line %d
+===DONE===
diff --git a/ext/imap/tests/imap_fetch_overview_variation4.phpt b/ext/imap/tests/imap_fetch_overview_variation4.phpt
new file mode 100644
index 000000000..a5c266631
--- /dev/null
+++ b/ext/imap/tests/imap_fetch_overview_variation4.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test imap_fetch_overview() function : usage variations - different resources as $stream_id
+--SKIPIF--
+<?php
+extension_loaded('imap') or die('skip imap extension not available in this build');
+?>
+--FILE--
+<?php
+/* Prototype : array imap_fetch_overview(resource $stream_id, int $msg_no [, int $options])
+ * Description: Read an overview of the information in the headers
+ * of the given message sequence
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Pass different resource types to imap_fetch_overview() to test behaviour
+ */
+
+echo "*** Testing imap_fetch_overview() : usage variations ***\n";
+
+echo "\n-- File Resource opened with fopen() --\n";
+var_dump($file_pointer = fopen(__FILE__, 'r+'));
+var_dump(imap_fetch_overview($file_pointer, 1));
+fclose($file_pointer);
+
+echo "\n-- Directory Resource opened with opendir() --\n";
+var_dump($dir_handle = opendir(dirname(__FILE__)));
+var_dump(imap_fetch_overview($dir_handle, 1));
+closedir($dir_handle);
+?>
+===DONE===
+--EXPECTF--
+*** Testing imap_fetch_overview() : usage variations ***
+
+-- File Resource opened with fopen() --
+resource(%d) of type (stream)
+
+Warning: imap_fetch_overview(): supplied resource is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Directory Resource opened with opendir() --
+resource(%d) of type (stream)
+
+Warning: imap_fetch_overview(): supplied resource is not a valid imap resource in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/imap/tests/imap_fetch_overview_variation5.phpt b/ext/imap/tests/imap_fetch_overview_variation5.phpt
new file mode 100644
index 000000000..79861be7a
--- /dev/null
+++ b/ext/imap/tests/imap_fetch_overview_variation5.phpt
@@ -0,0 +1,149 @@
+--TEST--
+Test imap_fetch_overview() function : usage variations - $msg_no argument
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : array imap_fetch_overview(resource $stream_id, int $msg_no [, int $options])
+ * Description: Read an overview of the information in the headers
+ * of the given message sequence
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Pass different sequences/msg numbers as $msg_no argument to test behaviour
+ * of imap_fetch_overview()
+ */
+
+echo "*** Testing imap_fetch_overview() : usage variations ***\n";
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+$stream_id = setup_test_mailbox('', 3, $mailbox, 'notSimple'); // set up temp mailbox with 3 msgs
+
+//Set mandatory response fields
+$mandatoryFields = array(
+ 'size',
+ 'uid',
+ 'msgno',
+ 'recent',
+ 'flagged',
+ 'answered',
+ 'deleted',
+ 'seen',
+ 'draft',
+ );
+
+$sequences = array (0, 4, '4', // out of range
+ '2', '1,3', '1, 2',
+ '1:3'); // pass uid without setting FT_UID option
+
+foreach($sequences as $msg_no) {
+ echo "\n-- \$msg_no is $msg_no --\n";
+ $overview = imap_fetch_overview($stream_id, $msg_no);
+ if (!$overview) {
+ echo imap_last_error() . "\n";
+ } else {
+ foreach($overview as $ov) {
+ echo "\n";
+ foreach ($mandatoryFields as $mf)
+ {
+ $z = $ov->$mf;
+ echo "$mf is $z\n";
+ }
+ }
+ }
+}
+
+// clear error stack
+imap_errors();
+?>
+===DONE===
+--CLEAN--
+<?php
+require_once(dirname(__FILE__).'/clean.inc');
+?>
+--EXPECTF--
+*** Testing imap_fetch_overview() : usage variations ***
+Create a temporary mailbox and add 3 msgs
+.. mailbox '{localhost/norsh}INBOX.phpttest' created
+
+-- $msg_no is 0 --
+Sequence out of range
+
+-- $msg_no is 4 --
+Sequence out of range
+
+-- $msg_no is 4 --
+Sequence out of range
+
+-- $msg_no is 2 --
+
+size is %d
+uid is %d
+msgno is 2
+recent is %d
+flagged is 0
+answered is 0
+deleted is 0
+seen is 0
+draft is 0
+
+-- $msg_no is 1,3 --
+
+size is %d
+uid is %d
+msgno is 1
+recent is %d
+flagged is 0
+answered is 0
+deleted is 0
+seen is 0
+draft is 0
+
+size is %d
+uid is %d
+msgno is 3
+recent is %d
+flagged is 0
+answered is 0
+deleted is 0
+seen is 0
+draft is 0
+
+-- $msg_no is 1, 2 --
+Syntax error in sequence
+
+-- $msg_no is 1:3 --
+
+size is %d
+uid is %d
+msgno is 1
+recent is %d
+flagged is 0
+answered is 0
+deleted is 0
+seen is 0
+draft is 0
+
+size is %d
+uid is %d
+msgno is 2
+recent is %d
+flagged is 0
+answered is 0
+deleted is 0
+seen is 0
+draft is 0
+
+size is %d
+uid is %d
+msgno is 3
+recent is %d
+flagged is 0
+answered is 0
+deleted is 0
+seen is 0
+draft is 0
+===DONE===
diff --git a/ext/imap/tests/imap_fetch_overview_variation6.phpt b/ext/imap/tests/imap_fetch_overview_variation6.phpt
new file mode 100644
index 000000000..fda937e24
--- /dev/null
+++ b/ext/imap/tests/imap_fetch_overview_variation6.phpt
@@ -0,0 +1,125 @@
+--TEST--
+Test imap_fetch_overview() function : usage variations - multipart message
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : array imap_fetch_overview(resource $stream_id, int $msg_no [, int $options])
+ * Description: Read an overview of the information in the headers of the given message sequence
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Pass a multipart message to imap_fetch_overview() to test the contents of returned array
+ */
+
+echo "*** Testing imap_fetch_overview() : usage variations ***\n";
+
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+$stream_id = setup_test_mailbox('', 0, $mailbox); // setup temp mailbox
+create_multipart_message($stream_id, $mailbox);
+
+//Set mandatory response fields
+$mandatoryFields = array(
+ 'size',
+ 'uid',
+ 'msgno',
+ 'recent',
+ 'flagged',
+ 'answered',
+ 'deleted',
+ 'seen',
+ 'draft',
+ );
+
+// refresh msg numbers
+imap_check($stream_id);
+$msg_no = 1;
+
+$a = imap_fetch_overview($stream_id, $msg_no);
+echo "\n--> Object #1\n";
+foreach ($mandatoryFields as $mf)
+{
+ $z = $a[0]->$mf;
+ echo "$mf is $z\n";
+}
+
+
+
+
+/**
+ * Create a multipart message with subparts
+ *
+ * @param resource $imap_stream
+ * @param string $mailbox
+ */
+function create_multipart_message($imap_stream, $mailbox) {
+ global $users, $domain;
+ $envelope["from"]= "foo@anywhere.com";
+ $envelope["to"] = "$users[0]@$domain";
+ $envelope["subject"] = "Test msg 1";
+
+ $part1["type"] = TYPEMULTIPART;
+ $part1["subtype"] = "mixed";
+
+ $part2["type"] = TYPETEXT;
+ $part2["subtype"] = "plain";
+ $part2["description"] = "imap_mail_compose() function";
+ $part2["contents.data"] = "message 1:xxxxxxxxxxxxxxxxxxxxxxxxxx";
+
+ $part3["type"] = TYPETEXT;
+ $part3["subtype"] = "plain";
+ $part3["description"] = "Example";
+ $part3["contents.data"] = "message 2:yyyyyyyyyyyyyyyyyyyyyyyyyy";
+
+ $file_handle = fopen(__FILE__, 'r+');
+ $file_size = 1;
+
+ $part4["type"] = TYPEAPPLICATION;
+ $part4["encoding"] = ENCBASE64;
+ $part4["subtype"] = "octet-stream";
+ $part4["description"] = 'Test';
+ $part4['disposition.type'] = 'attachment';
+ $part4['disposition'] = array ('filename' => 'Test');
+ $part4['type.parameters'] = array('name' => 'Test');
+ $part4["contents.data"] = base64_encode(fread($file_handle, 1));
+
+ $body[1] = $part1;
+ $body[2] = $part2;
+ $body[3] = $part3;
+ $body[4] = $part4;
+
+ $msg = imap_mail_compose($envelope, $body);
+
+ if (imap_append($imap_stream, $mailbox, $msg) === false) {
+ echo imap_last_error() . "\n";
+ echo "TEST FAILED : could not append new message to mailbox '$mailbox'\n";
+ exit;
+ }
+}
+
+?>
+===DONE===
+--CLEAN--
+<?php
+require_once(dirname(__FILE__).'/clean.inc');
+?>
+--EXPECTF--
+*** Testing imap_fetch_overview() : usage variations ***
+Create a temporary mailbox and add 0 msgs
+.. mailbox '{localhost/norsh}INBOX.phpttest' created
+
+--> Object #1
+size is %d
+uid is %d
+msgno is 1
+recent is %d
+flagged is 0
+answered is 0
+deleted is 0
+seen is 0
+draft is 0
+===DONE===
diff --git a/ext/imap/tests/imap_fetchbody_basic.phpt b/ext/imap/tests/imap_fetchbody_basic.phpt
new file mode 100644
index 000000000..7783ee131
--- /dev/null
+++ b/ext/imap/tests/imap_fetchbody_basic.phpt
@@ -0,0 +1,70 @@
+--TEST--
+Test imap_fetchbody() function : basic functionality
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : string imap_fetchbody(resource $stream_id, int $msg_no, string $section
+ * [, int $options])
+ * Description: Get a specific body section
+ * Source code: ext/imap/php_imap.c
+ */
+
+echo "*** Testing imap_fetchbody() : basic functionality ***\n";
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+// Initialise all required variables
+
+// set up mailbox with one message
+$stream_id = setup_test_mailbox('', 3, $mailbox, 'notSimple');
+$section = '2';
+
+// Calling imap_fetchbody() with all possible arguments
+echo "\n-- All possible arguments --\n";
+
+echo "Option == FD_UID\n";
+$msg_uid = imap_uid($stream_id, 1);
+var_dump( imap_fetchbody($stream_id, $msg_uid, $section, FT_UID) );
+
+echo "Option == FD_PEEK\n";
+var_dump( imap_fetchbody($stream_id, 2, $section, FT_PEEK) );
+$overview = imap_fetch_overview($stream_id, 2);
+echo "Seen Flag: ";
+var_dump( $overview[0]->seen );
+
+echo "option == FD_INTERNAL\n";
+var_dump( imap_fetchbody($stream_id, 3, $section, FT_INTERNAL) );
+
+// Calling imap_fetchbody() with mandatory arguments
+echo "\n-- Mandatory arguments --\n";
+var_dump( imap_fetchbody($stream_id, 1, $section) );
+$overview = imap_fetch_overview($stream_id, 1);
+echo "Seen Flag: ";
+var_dump( $overview[0]->seen );
+
+?>
+===DONE===
+--CLEAN--
+<?php
+require_once(dirname(__FILE__).'/clean.inc');
+?>
+--EXPECTF--
+*** Testing imap_fetchbody() : basic functionality ***
+Create a temporary mailbox and add 3 msgs
+.. mailbox '{localhost/norsh}INBOX.phpttest' created
+
+-- All possible arguments --
+Option == FD_UID
+string(36) "message 2:yyyyyyyyyyyyyyyyyyyyyyyyyy"
+Option == FD_PEEK
+string(36) "message 2:yyyyyyyyyyyyyyyyyyyyyyyyyy"
+Seen Flag: int(%d)
+option == FD_INTERNAL
+string(36) "message 2:yyyyyyyyyyyyyyyyyyyyyyyyyy"
+
+-- Mandatory arguments --
+string(36) "message 2:yyyyyyyyyyyyyyyyyyyyyyyyyy"
+Seen Flag: int(%d)
+===DONE=== \ No newline at end of file
diff --git a/ext/imap/tests/imap_fetchbody_error.phpt b/ext/imap/tests/imap_fetchbody_error.phpt
new file mode 100644
index 000000000..b6bf1eb8f
--- /dev/null
+++ b/ext/imap/tests/imap_fetchbody_error.phpt
@@ -0,0 +1,57 @@
+--TEST--
+Test imap_fetchbody() function : error conditions - incorrect number of args
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype :string imap_fetchbody(resource $stream_id, int $msg_no, string $section
+ * [, int $options])
+ * Description: Get a specific body section
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Pass an incorrect number of arguments to imap_fetchbody() to test behaviour
+ */
+
+echo "*** Testing imap_fetchbody() : error conditions ***\n";
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+//Test imap_fetchbody with one more than the expected number of arguments
+echo "\n-- Testing imap_fetchbody() function with more than expected no. of arguments --\n";
+
+$stream_id = setup_test_mailbox('', 1); // set up temp mailbox with 1 simple msg
+$msg_no = 1;
+$section = '1';
+$options = FT_PEEK;
+$extra_arg = 10;
+
+var_dump( imap_fetchbody($stream_id, $msg_no, $section, $options, $extra_arg) );
+
+// Testing imap_fetchbody with one less than the expected number of arguments
+echo "\n-- Testing imap_fetchbody() function with less than expected no. of arguments --\n";
+
+var_dump( imap_fetchbody($stream_id, $msg_no) );
+?>
+===DONE===
+--CLEAN--
+<?php
+require_once(dirname(__FILE__).'/clean.inc');
+?>
+--EXPECTF--
+*** Testing imap_fetchbody() : error conditions ***
+
+-- Testing imap_fetchbody() function with more than expected no. of arguments --
+Create a temporary mailbox and add 1 msgs
+.. mailbox '%s.phpttest' created
+
+Warning: Wrong parameter count for imap_fetchbody() in %s on line %d
+NULL
+
+-- Testing imap_fetchbody() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for imap_fetchbody() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/imap/tests/imap_fetchbody_variation1.phpt b/ext/imap/tests/imap_fetchbody_variation1.phpt
new file mode 100644
index 000000000..3248ff2f1
--- /dev/null
+++ b/ext/imap/tests/imap_fetchbody_variation1.phpt
@@ -0,0 +1,219 @@
+--TEST--
+Test imap_fetchbody() function : usage variation - diff data types as $stream_id arg
+--SKIPIF--
+<?php
+extension_loaded('imap') or die('skip imap extension not available in this build');
+?>
+--FILE--
+<?php
+/* Prototype : string imap_fetchbody(resource $stream_id, int $msg_no, string $section
+ * [, int $options])
+ * Description: Get a specific body section
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Pass different data types as $stream_id argument to test behaviour of imap_fetchbody()
+ */
+
+echo "*** Testing imap_fetchbody() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$msg_no = 1;
+$section = '2';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// unexpected values to be passed to $stream_id argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "string",
+ 'string',
+ $heredoc,
+
+ // object data
+/*22*/ new classA(),
+
+ // undefined data
+/*23*/ @$undefined_var,
+
+ // unset data
+/*24*/ @$unset_var,
+);
+
+// loop through each element of $inputs to check the behavior of imap_fetchbody()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( imap_fetchbody($input, $msg_no, $section) );
+ $iterator++;
+}
+?>
+===DONE===
+--EXPECTF--
+*** Testing imap_fetchbody() : usage variations ***
+
+-- Iteration 1 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 2 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 3 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 4 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 8 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 9 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 10 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 11 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 12 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 13 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 14 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 15 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 16 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 19 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 20 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 21 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 22 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 23 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 24 --
+
+Warning: imap_fetchbody(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/imap/tests/imap_fetchbody_variation2.phpt b/ext/imap/tests/imap_fetchbody_variation2.phpt
new file mode 100644
index 000000000..8c5e60f38
--- /dev/null
+++ b/ext/imap/tests/imap_fetchbody_variation2.phpt
@@ -0,0 +1,221 @@
+--TEST--
+Test imap_fetchbody() function : usage variation - diff data types as $msg_no arg
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : string imap_fetchbody(resource $stream_id, int $msg_no, string $section
+ * [, int $options])
+ * Description: Get a specific body section
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Pass different data types as $msg_no argument to test behaviour of imap_fetchbody()
+ */
+
+echo "*** Testing imap_fetchbody() : usage variations ***\n";
+
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+// Initialise function arguments not being substituted
+$stream_id = setup_test_mailbox('', 1); // set up temp mailbox with 1 simple msg
+$section = '1';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// unexpected values to be passed to $msg_no argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "string",
+ 'string',
+ $heredoc,
+
+ // object data
+/*22*/ new classA(),
+
+ // undefined data
+/*23*/ @$undefined_var,
+
+ // unset data
+/*24*/ @$unset_var,
+);
+
+// loop through each element of $inputs to check the behavior of imap_fetchbody()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( imap_fetchbody($stream_id, $input, $section) );
+ $iterator++;
+};
+?>
+===DONE===
+--CLEAN--
+<?php
+require_once(dirname(__FILE__).'/clean.inc');
+?>
+--EXPECTF--
+*** Testing imap_fetchbody() : usage variations ***
+Create a temporary mailbox and add 1 msgs
+.. mailbox '{localhost/norsh}INBOX.phpttest' created
+
+-- Iteration 1 --
+
+Warning: imap_fetchbody(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 2 --
+string(%d) "1: this is a test message, please ignore%a"
+
+-- Iteration 3 --
+
+Warning: imap_fetchbody(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 4 --
+
+Warning: imap_fetchbody(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+
+Warning: imap_fetchbody(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Warning: imap_fetchbody(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+
+Warning: imap_fetchbody(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 8 --
+
+Warning: imap_fetchbody(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 9 --
+
+Warning: imap_fetchbody(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 10 --
+
+Warning: imap_fetchbody(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 11 --
+
+Warning: imap_fetchbody(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 12 --
+string(%d) "1: this is a test message, please ignore%a"
+
+-- Iteration 13 --
+
+Warning: imap_fetchbody(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 14 --
+string(%d) "1: this is a test message, please ignore%a"
+
+-- Iteration 15 --
+
+Warning: imap_fetchbody(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 16 --
+
+Warning: imap_fetchbody(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Warning: imap_fetchbody(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+
+Warning: imap_fetchbody(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 19 --
+
+Warning: imap_fetchbody(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 20 --
+
+Warning: imap_fetchbody(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 21 --
+
+Warning: imap_fetchbody(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 22 --
+
+Notice: Object of class classA could not be converted to int in %s on line %d
+string(%d) "1: this is a test message, please ignore%a"
+
+-- Iteration 23 --
+
+Warning: imap_fetchbody(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 24 --
+
+Warning: imap_fetchbody(): Bad message number in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/imap/tests/imap_fetchbody_variation3.phpt b/ext/imap/tests/imap_fetchbody_variation3.phpt
new file mode 100644
index 000000000..2a017b533
--- /dev/null
+++ b/ext/imap/tests/imap_fetchbody_variation3.phpt
@@ -0,0 +1,217 @@
+--TEST--
+Test imap_fetchbody() function : usage variation - diff data types as $section arg
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : string imap_fetchbody(resource $stream_id, int $msg_no, string $section
+ * [, int $options])
+ * Description: Get a specific body section
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Pass different data types as $section argument to test behaviour of imap_fetchbody()
+ */
+
+echo "*** Testing imap_fetchbody() : usage variations ***\n";
+
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+// Initialise function arguments not being substituted
+$stream_id = setup_test_mailbox('', 1); // set up temp mailbox with 1 simple msg
+$msg_no = 1;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// unexpected values to be passed to $section argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "string",
+ 'string',
+ $heredoc,
+
+ // object data
+/*22*/ new classA(),
+
+ // undefined data
+/*23*/ @$undefined_var,
+
+ // unset data
+/*24*/ @$unset_var,
+);
+
+// loop through each element of $inputs to check the behavior of imap_fetchbody()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( imap_fetchbody($stream_id, $msg_no, $input) );
+ $iterator++;
+};
+?>
+===DONE===
+--CLEAN--
+<?php
+require_once(dirname(__FILE__).'/clean.inc');
+?>
+--EXPECTF--
+*** Testing imap_fetchbody() : usage variations ***
+Create a temporary mailbox and add 1 msgs
+.. mailbox '%s.phpttest' created
+
+-- Iteration 1 --
+string(71) "From: %s
+To: %s
+Subject: test1
+
+"
+
+-- Iteration 2 --
+string(%d) "1: this is a test message, please ignore%a"
+
+-- Iteration 3 --
+string(0) ""
+
+-- Iteration 4 --
+string(0) ""
+
+-- Iteration 5 --
+string(0) ""
+
+-- Iteration 6 --
+string(0) ""
+
+-- Iteration 7 --
+string(0) ""
+
+-- Iteration 8 --
+string(0) ""
+
+-- Iteration 9 --
+string(0) ""
+
+-- Iteration 10 --
+string(%d) "From: %s
+To: %s
+Subject: test1
+
+1: this is a test message, please ignore%a"
+
+-- Iteration 11 --
+string(%d) "From: %s
+To: %s
+Subject: test1
+
+1: this is a test message, please ignore%a"
+
+-- Iteration 12 --
+string(%d) "1: this is a test message, please ignore%a"
+
+-- Iteration 13 --
+string(%d) "From: %s
+To: %s
+Subject: test1
+
+1: this is a test message, please ignore%a"
+
+-- Iteration 14 --
+string(%d) "1: this is a test message, please ignore%a"
+
+-- Iteration 15 --
+string(%d) "From: %s
+To: %s
+Subject: test1
+
+1: this is a test message, please ignore%a"
+
+-- Iteration 16 --
+string(%d) "From: %s
+To: %s
+Subject: test1
+
+1: this is a test message, please ignore%a"
+
+-- Iteration 17 --
+string(%d) "From: %s
+To: %s
+Subject: test1
+
+1: this is a test message, please ignore%a"
+
+-- Iteration 18 --
+
+Notice: Array to string conversion in %s on line %d
+string(0) ""
+
+-- Iteration 19 --
+string(0) ""
+
+-- Iteration 20 --
+string(0) ""
+
+-- Iteration 21 --
+string(0) ""
+
+-- Iteration 22 --
+string(0) ""
+
+-- Iteration 23 --
+string(%d) "From: %s
+To: %s
+Subject: test1
+
+1: this is a test message, please ignore%a"
+
+-- Iteration 24 --
+string(%d) "From: %s
+To: %s
+Subject: test1
+
+1: this is a test message, please ignore%a"
+===DONE===
diff --git a/ext/imap/tests/imap_fetchbody_variation4.phpt b/ext/imap/tests/imap_fetchbody_variation4.phpt
new file mode 100644
index 000000000..6b9579abd
--- /dev/null
+++ b/ext/imap/tests/imap_fetchbody_variation4.phpt
@@ -0,0 +1,79 @@
+--TEST--
+Test imap_fetchbody() function : usage variations - FT_UID option
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : string imap_fetchbody(resource $stream_id, int $msg_no, string $section [, int $options])
+ * Description: Get a specific body section
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Test if FT_UID is set by passing the following as $options argument to imap_fetchbody():
+ * 1. values that equate to 1
+ * 2. Minimum and maximum PHP values
+ */
+echo "*** Testing imap_fetchbody() : usage variations ***\n";
+
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+// Initialise required variables
+$stream_id = setup_test_mailbox('', 1); // set up temporary mailbox with one simple message
+$msg_no = 1;
+$msg_uid = imap_uid($stream_id, $msg_no);
+$section = 1;
+
+//Note: the first four values are valid as they will all be cast to 1L.
+$options = array ('1', true,
+ 1.000000000000001, 0.00001e5,
+ PHP_INT_MAX, -PHP_INT_MAX);
+
+// iterate over each element of $options array to test whether FT_UID is set
+$iterator = 1;
+imap_check($stream_id);
+foreach($options as $option) {
+ echo "\n-- Iteration $iterator --\n";
+ if(is_string(imap_fetchbody($stream_id, $msg_uid, $section, $option))) {
+ echo "FT_UID valid\n";
+ } else {
+ echo "FT_UID not valid\n";
+ }
+ $iterator++;
+}
+
+?>
+===DONE===
+--CLEAN--
+<?php
+require_once(dirname(__FILE__).'/clean.inc');
+?>
+--EXPECTF--
+*** Testing imap_fetchbody() : usage variations ***
+Create a temporary mailbox and add 1 msgs
+.. mailbox '{localhost/norsh}INBOX.phpttest' created
+
+-- Iteration 1 --
+FT_UID valid
+
+-- Iteration 2 --
+FT_UID valid
+
+-- Iteration 3 --
+FT_UID valid
+
+-- Iteration 4 --
+FT_UID valid
+
+-- Iteration 5 --
+
+Warning: imap_fetchbody(): invalid value for the options parameter in %s on line %d
+FT_UID not valid
+
+-- Iteration 6 --
+
+Warning: imap_fetchbody(): invalid value for the options parameter in %s on line %d
+FT_UID not valid
+===DONE===
diff --git a/ext/imap/tests/imap_fetchbody_variation5.phpt b/ext/imap/tests/imap_fetchbody_variation5.phpt
new file mode 100644
index 000000000..f01bfb405
--- /dev/null
+++ b/ext/imap/tests/imap_fetchbody_variation5.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test imap_fetchbody() function : usage variation - different resources as $stream_id arg
+--SKIPIF--
+<?php
+extension_loaded('imap') or die('skip imap extension not available in this build');
+?>
+--FILE--
+<?php
+/* Prototype : string imap_fetchbody(resource $stream_id, int $msg_no, string $section
+ * [, int options])
+ * Description: Get a specific body section
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Pass different resource types to imap_fetchbody() to test behaviour
+ */
+
+echo "*** Testing imap_fetchbody() : usage variations ***\n";
+
+echo "\n-- File Resource opened with fopen() --\n";
+var_dump($file_pointer = fopen(__FILE__, 'r+'));
+var_dump(imap_fetchbody($file_pointer, 1));
+fclose($file_pointer);
+
+echo "\n-- Directory Resource opened with opendir() --\n";
+var_dump($dir_handle = opendir(dirname(__FILE__)));
+var_dump(imap_fetchbody($dir_handle, 1));
+closedir($dir_handle);
+?>
+===DONE===
+--EXPECTF--
+*** Testing imap_fetchbody() : usage variations ***
+
+-- File Resource opened with fopen() --
+resource(%d) of type (stream)
+
+Warning: Wrong parameter count for imap_fetchbody() in %s on line %d
+NULL
+
+-- Directory Resource opened with opendir() --
+resource(%d) of type (stream)
+
+Warning: Wrong parameter count for imap_fetchbody() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/imap/tests/imap_fetchbody_variation6.phpt b/ext/imap/tests/imap_fetchbody_variation6.phpt
new file mode 100644
index 000000000..8f6f78095
--- /dev/null
+++ b/ext/imap/tests/imap_fetchbody_variation6.phpt
@@ -0,0 +1,66 @@
+--TEST--
+Test imap_fetchbody() function : usage variations - $msg_no arg
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : string imap_fetchbody(resource $stream_id, int $msg_no, string $section [, int $options])
+ * Description: Get a specific body section
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Pass different integers, strings, msg sequences and msg UIDs as $msg_no argument
+ * to test behaviour of imap_fetchbody()
+ */
+
+echo "*** Testing imap_fetchbody() : usage variations ***\n";
+
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+//Initialise required variables
+$stream_id = setup_test_mailbox('', 3); // set up temp mailbox with simple msgs
+$section = 1;
+
+$sequences = array (0, 4, // out of range
+ '1,3', '1:3', // message sequences instead of numbers
+ ); //
+
+foreach($sequences as $msg_no) {
+ echo "\n-- \$msg_no is $msg_no --\n";
+ var_dump($overview = imap_fetchbody($stream_id, $msg_no, $section));
+ if (!$overview) {
+ echo imap_last_error() . "\n";
+ }
+}
+?>
+===DONE===
+--CLEAN--
+<?php
+require_once(dirname(__FILE__).'/clean.inc');
+?>
+--EXPECTF--
+*** Testing imap_fetchbody() : usage variations ***
+Create a temporary mailbox and add 3 msgs
+.. mailbox '%s.phpttest' created
+
+-- $msg_no is 0 --
+
+Warning: imap_fetchbody(): Bad message number in %s on line %d
+bool(false)
+
+
+-- $msg_no is 4 --
+
+Warning: imap_fetchbody(): Bad message number in %s on line %d
+bool(false)
+
+
+-- $msg_no is 1,3 --
+string(%d) "1: this is a test message, please ignore%a"
+
+-- $msg_no is 1:3 --
+string(%d) "1: this is a test message, please ignore%a"
+===DONE===
diff --git a/ext/imap/tests/imap_fetchheader_basic.phpt b/ext/imap/tests/imap_fetchheader_basic.phpt
new file mode 100644
index 000000000..2e47b0ce5
--- /dev/null
+++ b/ext/imap/tests/imap_fetchheader_basic.phpt
@@ -0,0 +1,83 @@
+--TEST--
+Test imap_fetchheader() function : basic functions
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : string imap_fetchheader(resource $stream_id, int $msg_no [, int $options])
+ * Description: Get the full unfiltered header for a message
+ * Source code: ext/imap/php_imap.c
+ */
+
+echo "*** Testing imap_fetchheader() : basic functionality ***\n";
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+// Initialise all required variables
+$stream_id = setup_test_mailbox('', 1, $mailbox, 'multiPart'); // setup temp mailbox with 1 msg
+$msg_no = 1;
+$options = array('FT_UID' => FT_UID, 'FT_INTERNAL' => FT_INTERNAL,
+ 'FT_PREFETCHTEXT' => FT_PREFETCHTEXT);
+
+// Calling imap_fetchheader() with all possible arguments
+echo "\n-- All possible arguments --\n";
+foreach ($options as $key => $option) {
+ echo "-- Option is $key --\n";
+ if ($key == 'FT_UID') {
+ $msg_uid = imap_uid($stream_id, $msg_no);
+ var_dump(imap_fetchheader($stream_id, $msg_uid, $option));
+ } else {
+ var_dump(imap_fetchheader($stream_id, $msg_no, $option));
+ }
+}
+
+// Calling imap_fetchheader() with mandatory arguments
+echo "\n-- Mandatory arguments --\n";
+var_dump( imap_fetchheader($stream_id, $msg_no) );
+?>
+===DONE===
+--CLEAN--
+<?php
+require_once(dirname(__FILE__).'/clean.inc');
+?>
+--EXPECTF--
+*** Testing imap_fetchheader() : basic functionality ***
+Create a temporary mailbox and add 1 msgs
+.. mailbox '%s.phpttest' created
+
+-- All possible arguments --
+-- Option is FT_UID --
+string(%d) "From: foo@anywhere.com
+Subject: Test msg 1
+To: %s
+MIME-Version: 1.0
+Content-Type: %s; %s
+
+"
+-- Option is FT_INTERNAL --
+string(%d) "From: foo@anywhere.com
+Subject: Test msg 1
+To: %s
+MIME-Version: 1.0
+Content-Type: %s; %s
+
+"
+-- Option is FT_PREFETCHTEXT --
+string(%d) "From: foo@anywhere.com
+Subject: Test msg 1
+To: %s
+MIME-Version: 1.0
+Content-Type: %s; %s
+
+"
+
+-- Mandatory arguments --
+string(%d) "From: foo@anywhere.com
+Subject: Test msg 1
+To: %s
+MIME-Version: 1.0
+Content-Type: %s; %s
+
+"
+===DONE===
diff --git a/ext/imap/tests/imap_fetchheader_error.phpt b/ext/imap/tests/imap_fetchheader_error.phpt
new file mode 100644
index 000000000..7d1e84ef1
--- /dev/null
+++ b/ext/imap/tests/imap_fetchheader_error.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Test imap_fetchheader() function : error conditions - incorrect number of args
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : string imap_fetchheader(resource $stream_id, int $msg_no [, int $options])
+ * Description: Get the full unfiltered header for a message
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Pass an incorrect number of arguments to imap_fetchheader() to test behaviour
+ */
+
+echo "*** Testing imap_fetchheader() : error conditions ***\n";
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+//Test imap_fetchheader with one more than the expected number of arguments
+echo "\n-- Testing imap_fetchheader() function with more than expected no. of arguments --\n";
+
+$stream_id = imap_open($server, $username, $password);
+$msg_no = 10;
+$options = 10;
+$extra_arg = 10;
+var_dump( imap_fetchheader($stream_id, $msg_no, $options, $extra_arg) );
+
+// Testing imap_fetchheader with one less than the expected number of arguments
+echo "\n-- Testing imap_fetchheader() function with less than expected no. of arguments --\n";
+var_dump( imap_fetchheader($stream_id) );
+
+imap_close($stream_id);
+?>
+===DONE===
+--EXPECTF--
+*** Testing imap_fetchheader() : error conditions ***
+
+-- Testing imap_fetchheader() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for imap_fetchheader() in %s on line %d
+NULL
+
+-- Testing imap_fetchheader() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for imap_fetchheader() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/imap/tests/imap_fetchheader_variation1.phpt b/ext/imap/tests/imap_fetchheader_variation1.phpt
new file mode 100644
index 000000000..f43e07d80
--- /dev/null
+++ b/ext/imap/tests/imap_fetchheader_variation1.phpt
@@ -0,0 +1,245 @@
+--TEST--
+Test imap_fetchheader() function : usage variations - diff data types as $stream_id arg
+--SKIPIF--
+<?php
+extension_loaded('imap') or die('skip imap extension not available in this build');
+?>
+--FILE--
+<?php
+/* Prototype : string imap_fetchheader(resource $stream_id, int $msg_no [, int $options])
+ * Description: Get the full unfiltered header for a message
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Pass different data types as $stream_id argument to test behaviour of imap_fetchheader()
+ */
+
+echo "*** Testing imap_fetchheader() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$msg_no = 1;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get different types of array
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $stream_id argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+
+ // string data
+/*18*/ "string",
+ 'string',
+ $heredoc,
+
+ // array data
+/*21*/ array(),
+ $index_array,
+ $assoc_array,
+ array('foo', $index_array, $assoc_array),
+
+
+ // object data
+/*25*/ new classA(),
+
+ // undefined data
+/*26*/ @$undefined_var,
+
+ // unset data
+/*27*/ @$unset_var,
+);
+
+// loop through each element of $inputs to check the behavior of imap_fetchheader()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( imap_fetchheader($input, $msg_no) );
+ $iterator++;
+};
+?>
+===DONE===
+--EXPECTF--
+*** Testing imap_fetchheader() : usage variations ***
+
+-- Iteration 1 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 2 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 3 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 4 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 8 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 9 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 10 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 11 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 12 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 13 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 14 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 15 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 16 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 19 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 20 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 21 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 22 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 23 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 24 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 25 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 26 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Iteration 27 --
+
+Warning: imap_fetchheader(): supplied argument is not a valid imap resource in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/imap/tests/imap_fetchheader_variation2.phpt b/ext/imap/tests/imap_fetchheader_variation2.phpt
new file mode 100644
index 000000000..65d5d8557
--- /dev/null
+++ b/ext/imap/tests/imap_fetchheader_variation2.phpt
@@ -0,0 +1,292 @@
+--TEST--
+Test imap_fetchheader() function : usage variations - diff data types for $msg_no arg
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : string imap_fetchheader(resource $stream_id, int $msg_no [, int $options])
+ * Description: Get the full unfiltered header for a message
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Pass different data types as $msg_no argument to test behaviour of imap_fetchheader()
+ */
+
+echo "*** Testing imap_fetchheader() : usage variations ***\n";
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+// Initialise function arguments not being substituted
+$stream_id = setup_test_mailbox('', 1, $mailbox, 'notSimple'); // set up temp mailbox with 1 msg
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $msg_no argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+
+ // string data
+/*18*/ "string",
+ 'string',
+ $heredoc,
+
+ // array data
+/*21*/ array(),
+ $index_array,
+ $assoc_array,
+ array('foo', $index_array, $assoc_array),
+
+
+ // object data
+/*25*/ new classA(),
+
+ // undefined data
+/*26*/ @$undefined_var,
+
+ // unset data
+/*27*/ @$unset_var,
+
+ // resource variable
+/*28*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of imap_fetchheader()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( imap_fetchheader($stream_id, $input) );
+ $iterator++;
+};
+
+fclose($fp);
+?>
+===DONE===
+--CLEAN--
+<?php
+require_once(dirname(__FILE__).'/clean.inc');
+?>
+===DONE===
+--EXPECTF--
+*** Testing imap_fetchheader() : usage variations ***
+Create a temporary mailbox and add 1 msgs
+.. mailbox '{localhost/norsh}INBOX.phpttest' created
+
+-- Iteration 1 --
+
+Warning: imap_fetchheader(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 2 --
+string(%d) "From: foo@anywhere.com
+Subject: Test msg 1
+To: %s
+MIME-Version: 1.0
+Content-Type: MULTIPART/mixed; BOUNDARY="%s"
+
+"
+
+-- Iteration 3 --
+
+Warning: imap_fetchheader(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 4 --
+
+Warning: imap_fetchheader(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+
+Warning: imap_fetchheader(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Warning: imap_fetchheader(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+
+Warning: imap_fetchheader(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 8 --
+
+Warning: imap_fetchheader(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 9 --
+
+Warning: imap_fetchheader(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 10 --
+
+Warning: imap_fetchheader(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 11 --
+
+Warning: imap_fetchheader(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 12 --
+string(%d) "From: foo@anywhere.com
+Subject: Test msg 1
+To: %s
+MIME-Version: 1.0
+Content-Type: MULTIPART/mixed; BOUNDARY="%s"
+
+"
+
+-- Iteration 13 --
+
+Warning: imap_fetchheader(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 14 --
+string(%d) "From: foo@anywhere.com
+Subject: Test msg 1
+To: %s
+MIME-Version: 1.0
+Content-Type: MULTIPART/mixed; BOUNDARY="%s"
+
+"
+
+-- Iteration 15 --
+
+Warning: imap_fetchheader(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 16 --
+
+Warning: imap_fetchheader(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Warning: imap_fetchheader(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+
+Warning: imap_fetchheader(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 19 --
+
+Warning: imap_fetchheader(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 20 --
+
+Warning: imap_fetchheader(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 21 --
+
+Warning: imap_fetchheader(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 22 --
+string(%d) "From: foo@anywhere.com
+Subject: Test msg 1
+To: %s
+MIME-Version: 1.0
+Content-Type: MULTIPART/mixed; BOUNDARY="%s"
+
+"
+
+-- Iteration 23 --
+string(%d) "From: foo@anywhere.com
+Subject: Test msg 1
+To: %s
+MIME-Version: 1.0
+Content-Type: MULTIPART/mixed; BOUNDARY="%s"
+
+"
+
+-- Iteration 24 --
+string(%d) "From: foo@anywhere.com
+Subject: Test msg 1
+To: %s
+MIME-Version: 1.0
+Content-Type: MULTIPART/mixed; BOUNDARY="%s"
+
+"
+
+-- Iteration 25 --
+
+Notice: Object of class classA could not be converted to int in %s on line %d
+string(%d) "From: foo@anywhere.com
+Subject: Test msg 1
+To: %s
+MIME-Version: 1.0
+Content-Type: MULTIPART/mixed; BOUNDARY="%s"
+
+"
+
+-- Iteration 26 --
+
+Warning: imap_fetchheader(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 27 --
+
+Warning: imap_fetchheader(): Bad message number in %s on line %d
+bool(false)
+
+-- Iteration 28 --
+
+Warning: imap_fetchheader(): Bad message number in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/imap/tests/imap_fetchheader_variation3.phpt b/ext/imap/tests/imap_fetchheader_variation3.phpt
new file mode 100644
index 000000000..e21c1a966
--- /dev/null
+++ b/ext/imap/tests/imap_fetchheader_variation3.phpt
@@ -0,0 +1,77 @@
+--TEST--
+Test imap_fetchheader() function : usage variations - FT_UID option
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : string imap_fetchheader(resource $stream_id, int $msg_no [, int $options])
+ * Description: Get the full unfiltered header for a message
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Test if FT_UID is set by passing the following as $options argument to imap_fetchheader():
+ * 1. values that equate to 1
+ * 2. Minimum and maximum PHP values
+ */
+
+echo "*** Testing imap_fetchheader() : usage variations ***\n";
+
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+// Initialise required variables
+$stream_id = setup_test_mailbox('', 1); // set up temporary mailbox with one simple message
+$msg_no = 1;
+$msg_uid = imap_uid($stream_id, $msg_no);
+
+$options = array ('1', true,
+ 1.000000000000001, 0.00001e5,
+ PHP_INT_MAX, -PHP_INT_MAX);
+
+// iterate over each element of $options array to test whether FT_UID is set
+$iterator = 1;
+imap_check($stream_id);
+foreach($options as $option) {
+ echo "\n-- Iteration $iterator --\n";
+ if(is_string(imap_fetchheader($stream_id, $msg_uid, $option))) {
+ echo "FT_UID valid\n";
+ } else {
+ echo "FT_UID not valid\n";
+ }
+ $iterator++;
+}
+?>
+===DONE===
+--CLEAN--
+<?php
+require_once(dirname(__FILE__).'/clean.inc');
+?>
+--EXPECTF--
+*** Testing imap_fetchheader() : usage variations ***
+Create a temporary mailbox and add 1 msgs
+.. mailbox '{localhost/norsh}INBOX.phpttest' created
+
+-- Iteration 1 --
+FT_UID valid
+
+-- Iteration 2 --
+FT_UID valid
+
+-- Iteration 3 --
+FT_UID valid
+
+-- Iteration 4 --
+FT_UID valid
+
+-- Iteration 5 --
+
+Warning: imap_fetchheader(): invalid value for the options parameter in %s on line %d
+FT_UID not valid
+
+-- Iteration 6 --
+
+Warning: imap_fetchheader(): invalid value for the options parameter in %s on line %d
+FT_UID not valid
+===DONE===
diff --git a/ext/imap/tests/imap_fetchheader_variation4.phpt b/ext/imap/tests/imap_fetchheader_variation4.phpt
new file mode 100644
index 000000000..090fa217c
--- /dev/null
+++ b/ext/imap/tests/imap_fetchheader_variation4.phpt
@@ -0,0 +1,45 @@
+--TEST--
+Test imap_fetchheader() function : usage variations - diff resource types as $stream_id
+--SKIPIF--
+<?php
+extension_loaded('imap') or die('skip imap extension not available in this build');
+?>
+--FILE--
+<?php
+/* Prototype : string imap_fetchheader(resource $stream_id, int $msg_no [, int $options])
+ * Description: Get the full unfiltered header for a message
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Pass different types of resources to imap_fetchheader() to test behaviour
+ */
+
+echo "*** Testing imap_fetchheader() : usage variations ***\n";
+
+echo "\n-- File Resource opened with fopen() --\n";
+var_dump($file_pointer = fopen(__FILE__, 'r+'));
+var_dump(imap_fetchheader($file_pointer, 1));
+fclose($file_pointer);
+
+echo "\n-- Directory Resource opened with opendir() --\n";
+var_dump($dir_handle = opendir(dirname(__FILE__)));
+var_dump(imap_fetchheader($dir_handle, 1));
+closedir($dir_handle);
+?>
+===DONE===
+--EXPECTF--
+*** Testing imap_fetchheader() : usage variations ***
+
+-- File Resource opened with fopen() --
+resource(%d) of type (stream)
+
+Warning: imap_fetchheader(): supplied resource is not a valid imap resource in %s on line %d
+bool(false)
+
+-- Directory Resource opened with opendir() --
+resource(%d) of type (stream)
+
+Warning: imap_fetchheader(): supplied resource is not a valid imap resource in %s on line %d
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/imap/tests/imap_fetchheader_variation5.phpt b/ext/imap/tests/imap_fetchheader_variation5.phpt
new file mode 100644
index 000000000..f0f5fd597
--- /dev/null
+++ b/ext/imap/tests/imap_fetchheader_variation5.phpt
@@ -0,0 +1,79 @@
+--TEST--
+Test imap_fetchheader() function : usage variations - $msg_no argument
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+/* Prototype : string imap_fetchheader(resource $stream_id, int $msg_no [, int $options])
+ * Description: Get the full unfiltered header for a message
+ * Source code: ext/imap/php_imap.c
+ */
+
+/*
+ * Pass different integers and strings as $msg_no argument
+ * to test behaviour of imap_fetchheader()
+ */
+
+echo "*** Testing imap_fetchheader() : usage variations ***\n";
+
+require_once(dirname(__FILE__).'/imap_include.inc');
+
+$stream_id = setup_test_mailbox('', 3, $mailbox, 'notSimple'); // set up temp mailbox with 3 msgs
+
+$sequences = array (0, 4, // out of range
+ '1,3', '1:3', // message sequences instead of numbers
+ );
+
+foreach($sequences as $msg_no) {
+ echo "\n-- \$msg_no is $msg_no --\n";
+ var_dump($overview = imap_fetchheader($stream_id, $msg_no));
+ if (!$overview) {
+ echo imap_last_error() . "\n";
+ }
+}
+
+// clear error stack
+imap_errors();
+?>
+===DONE===
+--CLEAN--
+<?php
+require_once(dirname(__FILE__).'/clean.inc');
+?>
+--EXPECTF--
+*** Testing imap_fetchheader() : usage variations ***
+Create a temporary mailbox and add 3 msgs
+.. mailbox '{localhost/norsh}INBOX.phpttest' created
+
+-- $msg_no is 0 --
+
+Warning: imap_fetchheader(): Bad message number in %s on line %d
+bool(false)
+
+
+-- $msg_no is 4 --
+
+Warning: imap_fetchheader(): Bad message number in %s on line %d
+bool(false)
+
+
+-- $msg_no is 1,3 --
+string(%d) "From: foo@anywhere.com
+Subject: Test msg 1
+To: %s
+MIME-Version: 1.0
+Content-Type: MULTIPART/mixed; BOUNDARY="%s"
+
+"
+
+-- $msg_no is 1:3 --
+string(%d) "From: foo@anywhere.com
+Subject: Test msg 1
+To: %s
+MIME-Version: 1.0
+Content-Type: MULTIPART/mixed; BOUNDARY="%s"
+
+"
+===DONE===
diff --git a/ext/imap/tests/imap_include.inc b/ext/imap/tests/imap_include.inc
new file mode 100644
index 000000000..3f9845476
--- /dev/null
+++ b/ext/imap/tests/imap_include.inc
@@ -0,0 +1,150 @@
+<?php
+// Change these to make tests run successfully
+$server = '{localhost/norsh}';
+$default_mailbox = $server . "INBOX";
+$domain = "something.com";
+$admin_user = "webmaster"; // a user with admin access
+$username = "$admin_user@$domain";
+$password = 'p4ssw0rd';
+$users = array("webmaster", "info", "admin", "foo"); // tests require 4 valid userids
+$mailbox_prefix = "phpttest"; // name used for test mailbox
+
+/**
+ * Create a test mailbox and populate with msgs
+ *
+ * @para, string mailbox_suffix Suffix used to uniquely identify mailboxes
+ * @param int message_count number of test msgs to be written to new mailbox
+ *
+ * @return IMAP stream to new mailbox on sucesss; FALSE on failure
+ */
+function setup_test_mailbox($mailbox_suffix, $message_count, &$new_mailbox = null, $msg_type = "simple"){
+ global $server, $default_mailbox, $username, $password;
+
+ // open a stream to default mailbox
+ $imap_stream = imap_open($default_mailbox, $username, $password);
+
+ if ($imap_stream === false) {
+ echo "Cannot connect to IMAP server $server: " . imap_last_error() . "\n";
+ return false;
+ }
+
+ echo "Create a temporary mailbox and add " . $message_count . " msgs\n";
+ $new_mailbox = create_mailbox($imap_stream, $mailbox_suffix, $message_count, $msg_type);
+ if ($new_mailbox === false) {
+ echo "Cant create a temporary mailbox: " . imap_last_error(). "\n";
+ return false;
+ }
+
+ echo ".. mailbox '$new_mailbox' created\n";
+
+ // reopen stream to new mailbox
+ if (imap_reopen($imap_stream, $new_mailbox) === false) {
+ echo "cant re-open '$new_mailbox' mailbox: " . imap_last_error() . "\n";
+ return false;
+ }
+
+ return $imap_stream;
+}
+
+/**
+ * Create mailbox and fill with generic emails
+ *
+ * @param resource $imap_stream
+ * @param string $mailbox
+ */
+function create_mailbox($imap_stream, $mailbox_suffix, $message_count, $msg_type= "simple"){
+ global $default_mailbox, $mailbox_prefix;
+ $mailbox = $default_mailbox . "." . $mailbox_prefix . $mailbox_suffix;
+
+ $mailboxes = imap_getmailboxes($imap_stream, $mailbox, '*');
+
+ // check mailbox does not already exist
+ if ($mailboxes) {
+ foreach($mailboxes as $value) {
+ if ($value->name == $mailbox) {
+ exit ("TEST FAILED : Mailbox '$mailbox' already exists\n");
+ }
+ }
+ }
+
+ if (imap_createmailbox($imap_stream, $mailbox) === false) {
+ return false;
+ }
+
+ // Add number of test msgs requested
+ if ($message_count > 0) {
+ populate_mailbox($imap_stream, $mailbox, $message_count, $msg_type);
+ }
+
+ return $mailbox;
+}
+
+/**
+ * Populate a mailbox with generic emails
+ *
+ * @param resource $imap_stream
+ * @param string $mailbox
+ */
+function populate_mailbox($imap_stream, $mailbox, $message_count, $msg_type = "simple"){
+
+ global $users, $domain;
+
+ for($i = 1; $i <= $message_count; $i++) {
+ if ($msg_type == "simple") {
+ $msg = "From: foo@anywhere.com\r\n"
+ . "To: $users[0]@$domain\r\n"
+ . "Subject: test$i\r\n"
+ . "\r\n"
+ . "$i: this is a test message, please ignore\r\n";
+ } else {
+ $envelope["from"]= "foo@anywhere.com";
+ $envelope["to"] = "$users[0]@$domain";
+ $envelope["subject"] = "Test msg $i";
+
+ $part1["type"] = TYPEMULTIPART;
+ $part1["subtype"] = "mixed";
+
+ $part2["type"] = TYPETEXT;
+ $part2["subtype"] = "plain";
+ $part2["description"] = "imap_mail_compose() function";
+ $part2["contents.data"] = "message 1:xxxxxxxxxxxxxxxxxxxxxxxxxx";
+
+ $part3["type"] = TYPETEXT;
+ $part3["subtype"] = "plain";
+ $part3["description"] = "Example";
+ $part3["contents.data"] = "message 2:yyyyyyyyyyyyyyyyyyyyyyyyyy";
+
+ $part4["type"] = TYPETEXT;
+ $part4["subtype"] = "plain";
+ $part4["description"] = "Return Values";
+ $part4["contents.data"] = "message 3:zzzzzzzzzzzzzzzzzzzzzzzzzz";
+
+ $body[1] = $part1;
+ $body[2] = $part2;
+ $body[3] = $part3;
+ $body[4] = $part4;
+
+ $msg = imap_mail_compose($envelope, $body);
+ }
+
+ imap_append($imap_stream, $mailbox, $msg);
+ }
+}
+
+/**
+ * Get the mailbox name from a mailbox decription, i.e strip off server details.
+ *
+ * @param string mailbox complete mailbox name
+ * @return mailbox name
+ */
+function get_mailbox_name($mailbox){
+
+ if (preg_match('/\{.*?\}(.*)/', $mailbox, $match) != 1) {
+ echo "Unrecpognized mailbox name\n";
+ return false;
+ }
+
+ return $match[1];
+}
+
+?>
diff --git a/ext/imap/tests/skipif.inc b/ext/imap/tests/skipif.inc
new file mode 100644
index 000000000..df69c4382
--- /dev/null
+++ b/ext/imap/tests/skipif.inc
@@ -0,0 +1,16 @@
+<?php
+extension_loaded('imap') or die('skip imap extension not available in this build');
+
+// Change these to make tests run successfully
+$mailbox = '{localhost/norsh}';
+$username = 'webmaster@something.com';
+$password = 'p4ssw0rd';
+$options = OP_HALFOPEN; // this should be enough to verify server present
+$retries = 0; // dont retry connect on failure
+
+$mbox = @imap_open($mailbox, $username, $password, $options, $retries);
+if (!$mbox) {
+ die("skip could not connect to mailbox $mailbox");
+}
+imap_close($mbox);
+?>
diff --git a/ext/interbase/ibase_blobs.c b/ext/interbase/ibase_blobs.c
index ce994aed7..035fbd6ed 100644
--- a/ext/interbase/ibase_blobs.c
+++ b/ext/interbase/ibase_blobs.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: ibase_blobs.c,v 1.9.2.1.2.4 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: ibase_blobs.c,v 1.9.2.1.2.5 2008/12/31 11:17:38 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/interbase/ibase_events.c b/ext/interbase/ibase_events.c
index 6a9f13d50..f228e48d7 100644
--- a/ext/interbase/ibase_events.c
+++ b/ext/interbase/ibase_events.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: ibase_events.c,v 1.8.2.1.2.2 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: ibase_events.c,v 1.8.2.1.2.5 2008/12/31 11:17:38 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -260,7 +260,7 @@ PHP_FUNCTION(ibase_set_event_handler)
* link resource id (int) as arguments. The value returned from the function is
* used to determine if the event handler should remain set.
*/
-
+ char *cb_name;
zval **args[17], **cb_arg;
ibase_db_link *ib_link;
ibase_event *event;
@@ -268,8 +268,8 @@ PHP_FUNCTION(ibase_set_event_handler)
int link_res_id;
RESET_ERRMSG;
-
- /* no more than 15 events */
+
+ /* Minimum and maximum number of arguments allowed */
if (ZEND_NUM_ARGS() < 2 || ZEND_NUM_ARGS() > 17) {
WRONG_PARAM_COUNT;
}
@@ -280,6 +280,12 @@ PHP_FUNCTION(ibase_set_event_handler)
/* get a working link */
if (Z_TYPE_PP(args[0]) != IS_STRING) {
+ /* resource, callback, event_1 [, ... event_15]
+ * No more than 15 events
+ */
+ if (ZEND_NUM_ARGS() < 3 || ZEND_NUM_ARGS() > 17) {
+ WRONG_PARAM_COUNT;
+ }
cb_arg = args[1];
i = 2;
@@ -291,8 +297,10 @@ PHP_FUNCTION(ibase_set_event_handler)
link_res_id = Z_LVAL_PP(args[0]);
} else {
-
- if (ZEND_NUM_ARGS() > 16) {
+ /* callback, event_1 [, ... event_15]
+ * No more than 15 events
+ */
+ if (ZEND_NUM_ARGS() < 2 || ZEND_NUM_ARGS() > 16) {
WRONG_PARAM_COUNT;
}
@@ -304,11 +312,12 @@ PHP_FUNCTION(ibase_set_event_handler)
}
/* get the callback */
- if (!zend_is_callable(*cb_arg, 0, NULL)) {
- _php_ibase_module_error("Callback argument %s is not a callable function"
- TSRMLS_CC, Z_STRVAL_PP(cb_arg));
+ if (!zend_is_callable(*cb_arg, 0, &cb_name)) {
+ _php_ibase_module_error("Callback argument %s is not a callable function" TSRMLS_CC, cb_name);
+ efree(cb_name);
RETURN_FALSE;
}
+ efree(cb_name);
/* allocate the event resource */
event = (ibase_event *) safe_emalloc(sizeof(ibase_event), 1, 0);
diff --git a/ext/interbase/ibase_query.c b/ext/interbase/ibase_query.c
index b1062ef95..308c89285 100644
--- a/ext/interbase/ibase_query.c
+++ b/ext/interbase/ibase_query.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: ibase_query.c,v 1.23.2.1.2.11 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: ibase_query.c,v 1.23.2.1.2.13 2008/12/31 11:17:38 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -1819,16 +1819,17 @@ PHP_FUNCTION(ibase_execute)
if (bind_n != expected_n) {
php_error_docref(NULL TSRMLS_CC, (bind_n < expected_n) ? E_WARNING : E_NOTICE,
"Statement expects %d arguments, %d given", expected_n, bind_n);
+
if (bind_n < expected_n) {
break;
}
-
- } else if (bind_n > 0) { /* have variables to bind */
- args = (zval ***) do_alloca(ZEND_NUM_ARGS() * sizeof(zval **));
+ }
+
+ /* have variables to bind */
+ args = (zval ***) do_alloca((expected_n + 1) * sizeof(zval **));
- if (FAILURE == zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args)) {
- break;
- }
+ if (FAILURE == zend_get_parameters_array_ex((expected_n + 1), args)) {
+ break;
}
/* Have we used this cursor before and it's still open (exec proc has no cursor) ? */
diff --git a/ext/interbase/ibase_service.c b/ext/interbase/ibase_service.c
index d3d18c848..15ccb10a2 100644
--- a/ext/interbase/ibase_service.c
+++ b/ext/interbase/ibase_service.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: ibase_service.c,v 1.11.2.2.2.6 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: ibase_service.c,v 1.11.2.2.2.8 2008/12/31 11:17:38 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -229,8 +229,7 @@ PHP_FUNCTION(ibase_service_attach)
user, isc_spb_password, (char)plen, pass, host);
if (spb_len > sizeof(buf) || spb_len == -1) {
- _php_ibase_module_error("Internal error: insufficient buffer space for SPB (%ld)"
- TSRMLS_CC, spb_len);
+ _php_ibase_module_error("Internal error: insufficient buffer space for SPB (%d)" TSRMLS_CC, spb_len);
RETURN_FALSE;
}
@@ -451,8 +450,7 @@ static void _php_ibase_backup_restore(INTERNAL_FUNCTION_PARAMETERS, char operati
}
if (spb_len > sizeof(buf) || spb_len <= 0) {
- _php_ibase_module_error("Internal error: insufficient buffer space for SPB (%ld)"
- TSRMLS_CC, spb_len);
+ _php_ibase_module_error("Internal error: insufficient buffer space for SPB (%d)" TSRMLS_CC, spb_len);
RETURN_FALSE;
}
@@ -560,8 +558,7 @@ options_argument:
}
if (spb_len > sizeof(buf) || spb_len == -1) {
- _php_ibase_module_error("Internal error: insufficient buffer space for SPB (%ld)"
- TSRMLS_CC, spb_len);
+ _php_ibase_module_error("Internal error: insufficient buffer space for SPB (%d)" TSRMLS_CC, spb_len);
RETURN_FALSE;
}
diff --git a/ext/interbase/interbase.c b/ext/interbase/interbase.c
index 47d0d3e9a..5517f1c64 100644
--- a/ext/interbase/interbase.c
+++ b/ext/interbase/interbase.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: interbase.c,v 1.225.2.4.2.8 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: interbase.c,v 1.225.2.4.2.10 2008/12/31 11:17:38 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -894,8 +894,13 @@ PHP_FUNCTION(ibase_trans)
if (Z_TYPE_PP(args[i]) == IS_RESOURCE) {
- ZEND_FETCH_RESOURCE2(ib_link[link_cnt], ibase_db_link *, args[i], -1,
- LE_LINK, le_link, le_plink);
+ if (!ZEND_FETCH_RESOURCE2_NO_RETURN(ib_link[link_cnt], ibase_db_link *, args[i], -1, LE_LINK, le_link, le_plink)) {
+ efree(teb);
+ efree(tpb);
+ efree(ib_link);
+ efree(args);
+ RETURN_FALSE;
+ }
/* copy the most recent modifier string into tbp[] */
memcpy(&tpb[TPB_MAX_SIZE * link_cnt], last_tpb, TPB_MAX_SIZE);
@@ -959,8 +964,10 @@ PHP_FUNCTION(ibase_trans)
if (link_cnt == 0) {
link_cnt = 1;
- ZEND_FETCH_RESOURCE2(ib_link[0], ibase_db_link *, NULL, IBG(default_link), LE_LINK,
- le_link, le_plink);
+ if (!ZEND_FETCH_RESOURCE2_NO_RETURN(ib_link[0], ibase_db_link *, NULL, IBG(default_link), LE_LINK, le_link, le_plink)) {
+ efree(ib_link);
+ RETURN_FALSE;
+ }
result = isc_start_transaction(IB_STATUS, &tr_handle, 1, &ib_link[0]->handle, tpb_len, last_tpb);
}
diff --git a/ext/interbase/php_ibase_includes.h b/ext/interbase/php_ibase_includes.h
index 57195e132..35889c094 100755
--- a/ext/interbase/php_ibase_includes.h
+++ b/ext/interbase/php_ibase_includes.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_ibase_includes.h,v 1.16.2.1.2.3 2008/01/23 01:22:57 iliaa Exp $ */
+/* $Id: php_ibase_includes.h,v 1.16.2.1.2.4 2008/12/31 11:17:38 sebastian Exp $ */
#ifndef PHP_IBASE_INCLUDES_H
#define PHP_IBASE_INCLUDES_H
diff --git a/ext/interbase/php_ibase_udf.c b/ext/interbase/php_ibase_udf.c
index 4237222e5..b1d8104c9 100644
--- a/ext/interbase/php_ibase_udf.c
+++ b/ext/interbase/php_ibase_udf.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_ibase_udf.c,v 1.9.2.1.2.3 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_ibase_udf.c,v 1.9.2.1.2.4 2008/12/31 11:17:38 sebastian Exp $ */
/**
* This UDF library adds the ability to call PHP functions from SQL
diff --git a/ext/interbase/php_interbase.h b/ext/interbase/php_interbase.h
index 7437abff1..2307d3ccf 100644
--- a/ext/interbase/php_interbase.h
+++ b/ext/interbase/php_interbase.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_interbase.h,v 1.71.2.1.2.2 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_interbase.h,v 1.71.2.1.2.3 2008/12/31 11:17:38 sebastian Exp $ */
#ifndef PHP_INTERBASE_H
#define PHP_INTERBASE_H
diff --git a/ext/interbase/tests/bug45373.phpt b/ext/interbase/tests/bug45373.phpt
new file mode 100644
index 000000000..8ec71df15
--- /dev/null
+++ b/ext/interbase/tests/bug45373.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Bug #45373 (php crash on query with errors in params)
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+
+ require("interbase.inc");
+
+ $db = ibase_connect($test_base);
+
+
+ $sql = "select * from test1 where i = ? and c = ?";
+
+ $q = ibase_prepare($db, $sql);
+ $r = ibase_execute($q, 1, 'test table not created with isql');
+ var_dump(ibase_fetch_assoc($r));
+ ibase_free_result($r);
+
+ $r = ibase_execute($q, 1, 'test table not created with isql', 1);
+ var_dump(ibase_fetch_assoc($r));
+ ibase_free_result($r);
+
+ $r = ibase_execute($q, 1);
+ var_dump(ibase_fetch_assoc($r));
+
+?>
+--EXPECTF--
+array(2) {
+ ["I"]=>
+ int(1)
+ ["C"]=>
+ string(32) "test table not created with isql"
+}
+
+Notice: ibase_execute(): Statement expects 2 arguments, 3 given in %sbug45373.php on line %d
+array(2) {
+ ["I"]=>
+ int(1)
+ ["C"]=>
+ string(32) "test table not created with isql"
+}
+
+Warning: ibase_execute(): Statement expects 2 arguments, 1 given in %sbug45373.php on line %d
+
+Warning: ibase_fetch_assoc(): supplied argument is not a valid Firebird/InterBase result resource in %sbug45373.php on line %d
+bool(false)
+
+Warning: Unknown: invalid statement handle in Unknown on line 0
diff --git a/ext/interbase/tests/bug45575.phpt b/ext/interbase/tests/bug45575.phpt
new file mode 100644
index 000000000..ca0fa831e
--- /dev/null
+++ b/ext/interbase/tests/bug45575.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Bug #45575 (Segfault with invalid non-string as event handler callback)
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+
+require("interbase.inc");
+
+$db = ibase_connect($test_base);
+
+function foobar($var) { var_dump($var); return true; }
+
+ibase_set_event_handler($db, null, 'TEST1');
+ibase_set_event_handler($db, 1, 'TEST1');
+ibase_set_event_handler('foobar', 'TEST1');
+
+?>
+--EXPECTF--
+Warning: ibase_set_event_handler(): Callback argument is not a callable function in %s on line %d
+
+Warning: ibase_set_event_handler(): Callback argument 1 is not a callable function in %s on line %d
diff --git a/ext/interbase/tests/bug46247.phpt b/ext/interbase/tests/bug46247.phpt
new file mode 100644
index 000000000..ffd153b5f
--- /dev/null
+++ b/ext/interbase/tests/bug46247.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Bug #46247 (ibase_set_event_handler() is allowing to pass callback without event)
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+
+require("interbase.inc");
+
+$db = ibase_connect($test_base);
+
+function test() { }
+
+ibase_set_event_handler();
+
+ibase_set_event_handler('test', 1);
+ibase_set_event_handler($db, 'test', 1);
+ibase_set_event_handler(NULL, 'test', 1);
+
+
+ibase_set_event_handler('foo', 1);
+ibase_set_event_handler($db, 'foo', 1);
+ibase_set_event_handler(NULL, 'foo', 1);
+
+?>
+--EXPECTF--
+
+Warning: Wrong parameter count for ibase_set_event_handler() in %s on line %d
+
+Warning: ibase_set_event_handler(): supplied argument is not a valid InterBase link resource in %s on line %d
+
+Warning: ibase_set_event_handler(): Callback argument foo is not a callable function in %s on line %d
+
+Warning: ibase_set_event_handler(): Callback argument foo is not a callable function in %s on line %d
+
+Warning: ibase_set_event_handler(): supplied argument is not a valid InterBase link resource in %s on line %d
diff --git a/ext/interbase/tests/bug46543.phpt b/ext/interbase/tests/bug46543.phpt
new file mode 100644
index 000000000..59e088c3d
--- /dev/null
+++ b/ext/interbase/tests/bug46543.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Bug #46543 (ibase_trans() memory leaks when using wrong parameters)
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+
+require("interbase.inc");
+
+@ibase_close();
+
+ibase_trans(1);
+ibase_trans();
+ibase_trans('foo');
+ibase_trans(fopen(__FILE__, 'r'));
+
+$x = ibase_connect($test_base);
+ibase_trans(1, 2, $x, $x, 3);
+
+?>
+--EXPECTF--
+Warning: ibase_trans(): no Firebird/InterBase link resource supplied in %s on line %d
+
+Warning: ibase_trans(): no Firebird/InterBase link resource supplied in %s on line %d
+
+Warning: ibase_trans(): no Firebird/InterBase link resource supplied in %s on line %d
+
+Warning: ibase_trans(): supplied resource is not a valid Firebird/InterBase link resource in %s on line %d
diff --git a/ext/interbase/tests/ibase_affected_rows_001.phpt b/ext/interbase/tests/ibase_affected_rows_001.phpt
new file mode 100644
index 000000000..398a84c8b
--- /dev/null
+++ b/ext/interbase/tests/ibase_affected_rows_001.phpt
@@ -0,0 +1,32 @@
+--TEST--
+ibase_affected_rows(): Basic test
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+
+require("interbase.inc");
+
+$x = ibase_connect($test_base);
+
+ibase_query($x, 'INSERT INTO test1 VALUES (1, 100)');
+ibase_query($x, 'INSERT INTO test1 VALUES (10000, 100)');
+
+ibase_query($x, 'UPDATE test1 SET i = 10000');
+var_dump(ibase_affected_rows($x));
+
+
+ibase_query($x, 'UPDATE test1 SET i = 10000 WHERE i = 2.0');
+var_dump(ibase_affected_rows($x));
+
+ibase_query($x, 'UPDATE test1 SET i =');
+var_dump(ibase_affected_rows($x));
+
+
+?>
+--EXPECTF--
+int(3)
+int(0)
+
+Warning: ibase_query(): Dynamic SQL Error SQL error code = -104 %s on line %d
+int(0)
diff --git a/ext/interbase/tests/ibase_close_001.phpt b/ext/interbase/tests/ibase_close_001.phpt
new file mode 100644
index 000000000..25412d484
--- /dev/null
+++ b/ext/interbase/tests/ibase_close_001.phpt
@@ -0,0 +1,25 @@
+--TEST--
+ibase_close(): Basic test
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+
+require("interbase.inc");
+
+$x = ibase_connect($test_base);
+var_dump(ibase_close($x));
+var_dump(ibase_close($x));
+var_dump(ibase_close());
+var_dump(ibase_close('foo'));
+
+?>
+--EXPECTF--
+bool(true)
+bool(true)
+
+Warning: ibase_close(): %d is not a valid Firebird/InterBase link resource in %s on line %d
+bool(false)
+
+Warning: ibase_close(): %d is not a valid Firebird/InterBase link resource in %s on line %d
+bool(false)
diff --git a/ext/interbase/tests/ibase_drop_db_001.phpt b/ext/interbase/tests/ibase_drop_db_001.phpt
new file mode 100644
index 000000000..b5cabced5
--- /dev/null
+++ b/ext/interbase/tests/ibase_drop_db_001.phpt
@@ -0,0 +1,31 @@
+--TEST--
+ibase_drop_db(): Basic test
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+
+require("interbase.inc");
+
+unlink($file = tempnam('/tmp',"php_ibase_test"));
+
+
+$db = ibase_query(IBASE_CREATE,
+ sprintf("CREATE SCHEMA '%s' USER '%s' PASSWORD '%s' DEFAULT CHARACTER SET %s",$file,
+ $user, $password, ($charset = ini_get('ibase.default_charset')) ? $charset : 'NONE'));
+
+var_dump($db);
+var_dump(ibase_drop_db($db));
+var_dump(ibase_drop_db(1));
+var_dump(ibase_drop_db(NULL));
+
+?>
+--EXPECTF--
+resource(%d) of type (Firebird/InterBase link)
+bool(true)
+
+Warning: ibase_drop_db(): supplied resource is not a valid Firebird/InterBase link resource in %s on line %d
+bool(false)
+
+Warning: ibase_drop_db(): %d is not a valid Firebird/InterBase link resource in %s on line %d
+bool(false)
diff --git a/ext/interbase/tests/ibase_errmsg_001.phpt b/ext/interbase/tests/ibase_errmsg_001.phpt
new file mode 100644
index 000000000..ad0e827f9
--- /dev/null
+++ b/ext/interbase/tests/ibase_errmsg_001.phpt
@@ -0,0 +1,22 @@
+--TEST--
+ibase_errmsg(): Basic test
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+
+require("interbase.inc");
+
+$x = ibase_connect($test_base);
+
+ibase_query('SELECT Foobar');
+var_dump(ibase_errmsg());
+
+ibase_close($x);
+var_dump(ibase_errmsg());
+
+?>
+--EXPECTF--
+Warning: ibase_query(): Dynamic SQL Error SQL error code = -104 %s on line %d
+string(%d) "Dynamic SQL Error SQL error code = -104 %s"
+bool(false)
diff --git a/ext/interbase/tests/ibase_free_query_001.phpt b/ext/interbase/tests/ibase_free_query_001.phpt
new file mode 100644
index 000000000..bedec7173
--- /dev/null
+++ b/ext/interbase/tests/ibase_free_query_001.phpt
@@ -0,0 +1,28 @@
+--TEST--
+ibase_free_query(): Basic test
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+
+require("interbase.inc");
+
+$x = ibase_connect($test_base);
+
+$q =ibase_prepare($x, 'SELECT 1 FROM test1 WHERE i = ?');
+$q =ibase_prepare($x, 'SELECT 1 FROM test1 WHERE i = ?');
+$q = ibase_prepare($x, 'SELECT 1 FROM test1 WHERE i = ?');
+
+var_dump(ibase_free_query($q));
+var_dump(ibase_free_query($q));
+var_dump(ibase_free_query($x));
+
+?>
+--EXPECTF--
+bool(true)
+
+Warning: ibase_free_query(): 11 is not a valid Firebird/InterBase query resource in %s on line %d
+bool(false)
+
+Warning: ibase_free_query(): supplied resource is not a valid Firebird/InterBase query resource in %s on line %d
+bool(false)
diff --git a/ext/interbase/tests/ibase_num_fields_001.phpt b/ext/interbase/tests/ibase_num_fields_001.phpt
new file mode 100644
index 000000000..510b0f6f5
--- /dev/null
+++ b/ext/interbase/tests/ibase_num_fields_001.phpt
@@ -0,0 +1,25 @@
+--TEST--
+ibase_num_fields(): Basic test
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+
+require("interbase.inc");
+
+$x = ibase_connect($test_base);
+
+var_dump(ibase_num_fields(ibase_query('SELECT * FROM test1')));
+
+var_dump(ibase_num_fields(1));
+var_dump(ibase_num_fields());
+
+?>
+--EXPECTF--
+int(2)
+
+Warning: ibase_num_fields(): supplied argument is not a valid Firebird/InterBase result resource in %s on line %d
+bool(false)
+
+Warning: Wrong parameter count for ibase_num_fields() in %s on line %d
+NULL
diff --git a/ext/interbase/tests/ibase_num_params_001.phpt b/ext/interbase/tests/ibase_num_params_001.phpt
new file mode 100644
index 000000000..2cacc50f3
--- /dev/null
+++ b/ext/interbase/tests/ibase_num_params_001.phpt
@@ -0,0 +1,32 @@
+--TEST--
+ibase_num_params(): Basic test
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+
+require("interbase.inc");
+
+$x = ibase_connect($test_base);
+
+$rs = ibase_prepare('SELECT * FROM test1 WHERE 1 = ? AND 2 = ?');
+var_dump(ibase_num_params($rs));
+
+$rs = ibase_prepare('SELECT * FROM test1 WHERE 1 = ? AND 2 = ?');
+var_dump(ibase_num_params());
+
+$rs = ibase_prepare('SELECT * FROM test1 WHERE 1 = ? AND 2 = ? AND 3 = :x');
+var_dump(ibase_num_params($rs));
+
+
+?>
+--EXPECTF--
+int(2)
+
+Warning: Wrong parameter count for ibase_num_params() in %s on line %d
+NULL
+
+Warning: ibase_prepare(): Dynamic SQL Error SQL error code = -206 %s in %s on line %d
+
+Warning: ibase_num_params(): supplied argument is not a valid Firebird/InterBase query resource in %s on line %d
+bool(false)
diff --git a/ext/interbase/tests/ibase_param_info_001.phpt b/ext/interbase/tests/ibase_param_info_001.phpt
new file mode 100644
index 000000000..3dd92ba7a
--- /dev/null
+++ b/ext/interbase/tests/ibase_param_info_001.phpt
@@ -0,0 +1,55 @@
+--TEST--
+ibase_param_info(): Basic test
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+
+require("interbase.inc");
+
+$x = ibase_connect($test_base);
+
+$rs = ibase_prepare('SELECT * FROM test1 WHERE 1 = ? AND 2 = ?');
+var_dump(ibase_param_info($rs, 1));
+
+print "---\n";
+
+var_dump(ibase_param_info($rs, 100));
+
+print "---\n";
+
+var_dump(ibase_param_info(100));
+
+
+?>
+--EXPECTF--
+array(10) {
+ [0]=>
+ string(0) ""
+ ["name"]=>
+ string(0) ""
+ [1]=>
+ string(0) ""
+ ["alias"]=>
+ string(0) ""
+ [2]=>
+ string(0) ""
+ ["relation"]=>
+ string(0) ""
+ [3]=>
+ string(1) "4"
+ ["length"]=>
+ string(1) "4"
+ [4]=>
+ string(7) "INTEGER"
+ ["type"]=>
+ string(7) "INTEGER"
+}
+---
+bool(false)
+---
+
+Warning: Wrong parameter count for ibase_param_info() in %s on line %d
+NULL
+
+Warning: Unknown: invalid statement handle in Unknown on line 0
diff --git a/ext/interbase/tests/ibase_rollback_001.phpt b/ext/interbase/tests/ibase_rollback_001.phpt
new file mode 100644
index 000000000..3cde5e9d4
--- /dev/null
+++ b/ext/interbase/tests/ibase_rollback_001.phpt
@@ -0,0 +1,41 @@
+--TEST--
+ibase_rollback(): Basic test
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+
+require("interbase.inc");
+
+$x = ibase_connect($test_base);
+
+ibase_query('INSERT INTO test1 VALUES (100, 2)');
+ibase_query('INSERT INTO test1 VALUES (100, 2)');
+ibase_query('INSERT INTO test1 VALUES (100, 2)');
+
+$rs = ibase_query('SELECT COUNT(*) FROM test1 WHERE i = 100');
+var_dump(ibase_fetch_row($rs));
+
+var_dump(ibase_rollback($x));
+
+$rs = ibase_query('SELECT COUNT(*) FROM test1 WHERE i = 100');
+var_dump(ibase_fetch_row($rs));
+
+var_dump(ibase_rollback($x));
+var_dump(ibase_rollback());
+
+?>
+--EXPECTF--
+array(1) {
+ [0]=>
+ int(3)
+}
+bool(true)
+array(1) {
+ [0]=>
+ int(0)
+}
+bool(true)
+
+Warning: ibase_rollback(): invalid transaction handle (expecting explicit transaction start) in %s on line %d
+bool(false)
diff --git a/ext/interbase/tests/ibase_trans_001.phpt b/ext/interbase/tests/ibase_trans_001.phpt
new file mode 100644
index 000000000..cceb60e9a
--- /dev/null
+++ b/ext/interbase/tests/ibase_trans_001.phpt
@@ -0,0 +1,21 @@
+--TEST--
+ibase_trans(): Basic test
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+
+require("interbase.inc");
+
+$x = ibase_connect($test_base);
+var_dump(ibase_trans($x));
+var_dump(ibase_trans(1));
+var_dump(ibase_close());
+var_dump(ibase_close($x));
+
+?>
+--EXPECTF--
+resource(%d) of type (Firebird/InterBase transaction)
+resource(%d) of type (Firebird/InterBase transaction)
+bool(true)
+bool(true)
diff --git a/ext/interbase/tests/ibase_trans_002.phpt b/ext/interbase/tests/ibase_trans_002.phpt
new file mode 100644
index 000000000..be7c073ca
--- /dev/null
+++ b/ext/interbase/tests/ibase_trans_002.phpt
@@ -0,0 +1,34 @@
+--TEST--
+ibase_trans(): Basic operations
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+
+require("interbase.inc");
+
+$x = ibase_connect($test_base);
+
+$trans = ibase_trans(IBASE_DEFAULT, $x);
+$sth = ibase_prepare($trans, 'INSERT INTO test1 VALUES (?, ?)');
+
+$res = ibase_execute($sth, 100, 100);
+var_dump($res);
+
+ibase_commit($trans);
+
+$rs = ibase_query($x, 'SELECT * FROM test1 WHERE i = 100');
+var_dump(ibase_fetch_assoc($rs));
+
+ibase_free_query($sth);
+unset($res);
+
+?>
+--EXPECT--
+int(1)
+array(2) {
+ ["I"]=>
+ int(100)
+ ["C"]=>
+ string(3) "100"
+}
diff --git a/ext/interbase/tests/interbase.inc b/ext/interbase/tests/interbase.inc
index eea3bebe7..3254ace95 100755
--- a/ext/interbase/tests/interbase.inc
+++ b/ext/interbase/tests/interbase.inc
@@ -1,4 +1,4 @@
-<?php /* $Id: interbase.inc,v 1.10 2004/06/01 08:38:33 abies Exp $ */
+<?php /* $Id: interbase.inc,v 1.10.6.1 2008/10/07 12:53:08 felipe Exp $ */
srand((double)microtime()*1000000);
@@ -104,6 +104,9 @@ function rand_number($len , $prec = -1, $sign = 1)
}
} else if ($prec == 0) {
$n = substr(rand() . rand(), 0, rand() % $len + 1);
+ } else if (($prec - $len) == 0) {
+ $n = substr(rand() . rand(), 0, 1);
+ $n .= "." . substr(rand(), 0, $prec);
} else {
$n = substr(rand() . rand(), 0, rand() % ($len - $prec) + 1);
$n .= "." . substr(rand(), 0, $prec);
diff --git a/ext/json/JSON_parser.c b/ext/json/JSON_parser.c
index c054d5038..a88dde9fa 100644
--- a/ext/json/JSON_parser.c
+++ b/ext/json/JSON_parser.c
@@ -201,7 +201,7 @@ static const int state_transition_table[30][31] = {
/*29*/ {29,29,-1,-1,-1,-1,-1,-1, 3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}
};
-#define JSON_PARSER_MAX_DEPTH 128
+#define JSON_PARSER_MAX_DEPTH 512
/*
@@ -285,7 +285,7 @@ static void json_create_zval(zval **z, smart_str *buf, int type)
if (type == IS_LONG)
{
double d = zend_strtod(buf->c, NULL);
- if (d > LONG_MAX || d < -LONG_MAX) {
+ if (d > LONG_MAX || d < LONG_MIN) {
ZVAL_DOUBLE(*z, d);
} else {
ZVAL_LONG(*z, (long)d);
@@ -494,9 +494,7 @@ JSON_parser(zval *z, unsigned short p[], int length, int assoc TSRMLS_DC)
}
*/
case -7:
- if (type != -1 &&
- (JSON(the_stack)[JSON(the_top)] == MODE_OBJECT ||
- JSON(the_stack)[JSON(the_top)] == MODE_ARRAY))
+ if (type != -1 && JSON(the_stack)[JSON(the_top)] == MODE_OBJECT)
{
zval *mval;
smart_str_0(&buf);
@@ -566,9 +564,7 @@ JSON_parser(zval *z, unsigned short p[], int length, int assoc TSRMLS_DC)
*/
case -5:
{
- if (type != -1 &&
- (JSON(the_stack)[JSON(the_top)] == MODE_OBJECT ||
- JSON(the_stack)[JSON(the_top)] == MODE_ARRAY))
+ if (type != -1 && JSON(the_stack)[JSON(the_top)] == MODE_ARRAY)
{
zval *mval;
smart_str_0(&buf);
diff --git a/ext/json/json.c b/ext/json/json.c
index e7bb805e7..826d36751 100644
--- a/ext/json/json.c
+++ b/ext/json/json.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: json.c,v 1.9.2.21 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: json.c,v 1.9.2.26 2009/02/12 00:36:23 scottmac Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -84,7 +84,7 @@ static PHP_MINFO_FUNCTION(json)
/* }}} */
static void json_encode_r(smart_str *buf, zval *val TSRMLS_DC);
-static void json_escape_string(smart_str *buf, char *s, int len);
+static void json_escape_string(smart_str *buf, char *s, int len TSRMLS_DC);
static int json_determine_array_type(zval **val TSRMLS_DC) /* {{{ */
{
@@ -181,6 +181,9 @@ static void json_encode_array(smart_str *buf, zval **val TSRMLS_DC) { /* {{{ */
if (i == HASH_KEY_IS_STRING) {
if (key[0] == '\0' && Z_TYPE_PP(val) == IS_OBJECT) {
/* Skip protected and private members. */
+ if (tmp_ht) {
+ tmp_ht->nApplyCount--;
+ }
continue;
}
@@ -190,7 +193,7 @@ static void json_encode_array(smart_str *buf, zval **val TSRMLS_DC) { /* {{{ */
need_comma = 1;
}
- json_escape_string(buf, key, key_len - 1);
+ json_escape_string(buf, key, key_len - 1 TSRMLS_CC);
smart_str_appendc(buf, ':');
json_encode_r(buf, *data TSRMLS_CC);
@@ -230,7 +233,7 @@ static void json_encode_array(smart_str *buf, zval **val TSRMLS_DC) { /* {{{ */
#define REVERSE16(us) (((us & 0xf) << 12) | (((us >> 4) & 0xf) << 8) | (((us >> 8) & 0xf) << 4) | ((us >> 12) & 0xf))
-static void json_escape_string(smart_str *buf, char *s, int len) /* {{{ */
+static void json_escape_string(smart_str *buf, char *s, int len TSRMLS_DC) /* {{{ */
{
int pos = 0;
unsigned short us;
@@ -251,8 +254,14 @@ static void json_escape_string(smart_str *buf, char *s, int len) /* {{{ */
{
efree(utf16);
}
-
- smart_str_appendl(buf, "\"\"", 2);
+ if(len < 0) {
+ if(!PG(display_errors)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid UTF-8 sequence in argument");
+ }
+ smart_str_appendl(buf, "null", 4);
+ } else {
+ smart_str_appendl(buf, "\"\"", 2);
+ }
return;
}
@@ -369,7 +378,7 @@ static void json_encode_r(smart_str *buf, zval *val TSRMLS_DC) /* {{{ */
}
break;
case IS_STRING:
- json_escape_string(buf, Z_STRVAL_P(val), Z_STRLEN_P(val));
+ json_escape_string(buf, Z_STRVAL_P(val), Z_STRLEN_P(val) TSRMLS_CC);
break;
case IS_ARRAY:
case IS_OBJECT:
@@ -470,13 +479,7 @@ static PHP_FUNCTION(json_decode)
RETURN_DOUBLE(d);
}
}
- if (parameter_len > 1 && *parameter == '"' && parameter[parameter_len-1] == '"') {
- RETURN_STRINGL(parameter+1, parameter_len-2, 1);
- } else if (*parameter == '{' || *parameter == '[') { /* invalid JSON string */
RETURN_NULL();
- } else {
- RETURN_STRINGL(parameter, parameter_len, 1);
- }
}
}
/* }}} */
diff --git a/ext/json/php_json.h b/ext/json/php_json.h
index 27ef7a0ac..13aab3c62 100644
--- a/ext/json/php_json.h
+++ b/ext/json/php_json.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_json.h,v 1.8.2.3 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_json.h,v 1.8.2.4 2008/12/31 11:17:38 sebastian Exp $ */
#ifndef PHP_JSON_H
#define PHP_JSON_H
diff --git a/ext/json/tests/001.phpt b/ext/json/tests/001.phpt
index 4c9f918b4..02d43c424 100644
--- a/ext/json/tests/001.phpt
+++ b/ext/json/tests/001.phpt
@@ -23,49 +23,49 @@ var_dump(json_decode('{ "": { "": "" } }'));
var_dump(json_decode('{ "": { "": "" }'));
var_dump(json_decode('{ "": "": "" } }'));
-echo "Done\n";
?>
+===DONE===
--EXPECTF--
Warning: json_decode() expects at least 1 parameter, 0 given in %s on line %d
NULL
NULL
NULL
NULL
-string(1) "."
-string(1) "."
-string(3) "<?>"
-string(1) ";"
-string(12) "руÑÑиш"
-string(4) "blah"
NULL
-object(stdClass)#1 (1) {
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+object(stdClass)#%d (1) {
["test"]=>
- object(stdClass)#2 (1) {
+ object(stdClass)#%d (1) {
["foo"]=>
string(3) "bar"
}
}
-object(stdClass)#1 (1) {
+object(stdClass)#%d (1) {
["test"]=>
- object(stdClass)#2 (1) {
+ object(stdClass)#%d (1) {
["foo"]=>
string(0) ""
}
}
-object(stdClass)#1 (1) {
+object(stdClass)#%d (1) {
["_empty_"]=>
- object(stdClass)#2 (1) {
+ object(stdClass)#%d (1) {
["foo"]=>
string(0) ""
}
}
-object(stdClass)#1 (1) {
+object(stdClass)#%d (1) {
["_empty_"]=>
- object(stdClass)#2 (1) {
+ object(stdClass)#%d (1) {
["_empty_"]=>
string(0) ""
}
}
NULL
NULL
-Done
+===DONE===
diff --git a/ext/json/tests/bug41567.phpt b/ext/json/tests/bug41567.phpt
index 5a141003e..a253a47b7 100644
--- a/ext/json/tests/bug41567.phpt
+++ b/ext/json/tests/bug41567.phpt
@@ -1,5 +1,7 @@
--TEST--
Bug #41567 (json_encode() double conversion is inconsistent with PHP)
+--INI--
+precision=14
--SKIPIF--
<?php if (!extension_loaded('json')) print 'skip'; ?>
--FILE--
@@ -10,8 +12,6 @@ var_dump(json_decode($a));
echo "Done\n";
?>
---INI--
-precision=14
--EXPECT--
float(123456789.12345)
Done
diff --git a/ext/json/tests/bug42090.phpt b/ext/json/tests/bug42090.phpt
index bccd28aba..9e5b3317e 100644
--- a/ext/json/tests/bug42090.phpt
+++ b/ext/json/tests/bug42090.phpt
@@ -1,5 +1,5 @@
--TEST--
-Bug#42090 (json_decode causes segmentation fault)
+Bug #42090 (json_decode causes segmentation fault)
--SKIPIF--
<?php if (!extension_loaded("json")) print "skip"; ?>
--FILE--
@@ -16,10 +16,9 @@ var_dump(
?>
--EXPECT--
string(0) ""
-string(5) "".."."
-string(1) """
-string(2) """"
+NULL
+NULL
+NULL
string(4) ""\"""
string(1) """
string(2) """"
-
diff --git a/ext/json/tests/bug43941.phpt b/ext/json/tests/bug43941.phpt
new file mode 100644
index 000000000..0f86d1dfa
--- /dev/null
+++ b/ext/json/tests/bug43941.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Bug #43941 (json_encode() invalid UTF-8)
+--SKIPIF--
+<?php if (!extension_loaded("json")) print "skip"; ?>
+--FILE--
+<?php
+
+var_dump(json_encode("abc"));
+var_dump(json_encode("ab\xE0"));
+var_dump(json_encode("ab\xE0c"));
+var_dump(json_encode(array("ab\xE0", "ab\xE0c", "abc")));
+
+echo "Done\n";
+?>
+--EXPECTF--
+string(5) ""abc""
+string(4) "null"
+string(4) "null"
+string(17) "[null,null,"abc"]"
+Done
+
diff --git a/ext/json/tests/bug46215.phpt b/ext/json/tests/bug46215.phpt
new file mode 100644
index 000000000..0ac460cc1
--- /dev/null
+++ b/ext/json/tests/bug46215.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Bug #46215 (json_encode mutates its parameter and has some class-specific state)
+--SKIPIF--
+<?php
+if (!extension_loaded("json")) {
+ die('skip JSON extension not available in this build');
+}
+?>
+--FILE--
+<?php
+
+class foo {
+ protected $a = array();
+}
+
+$a = new foo;
+$x = json_encode($a);
+
+print_r($a);
+
+?>
+--EXPECT--
+foo Object
+(
+ [a:protected] => Array
+ (
+ )
+
+)
diff --git a/ext/json/tests/bug46944.phpt b/ext/json/tests/bug46944.phpt
new file mode 100644
index 000000000..812a54887
--- /dev/null
+++ b/ext/json/tests/bug46944.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Bug #46944 (json_encode() doesn't handle 3 byte utf8 correctly)
+--SKIPIF--
+<?php if (!extension_loaded('json')) print 'skip'; ?>
+--FILE--
+<?php
+
+for ($i = 1; $i <= 16; $i++) {
+ $first = 0xf0|($i >> 2);
+ $second = 0x8f|($i & 3) << 4;
+ $string = sprintf("aa%c%c\xbf\xbdzz", $first, $second);
+ echo json_encode($string) . "\n";
+}
+
+
+echo "Done\n";
+?>
+--EXPECT--
+"aa\ud83f\udffdzz"
+"aa\ud87f\udffdzz"
+"aa\ud8bf\udffdzz"
+"aa\ud8ff\udffdzz"
+"aa\ud93f\udffdzz"
+"aa\ud97f\udffdzz"
+"aa\ud9bf\udffdzz"
+"aa\ud9ff\udffdzz"
+"aa\uda3f\udffdzz"
+"aa\uda7f\udffdzz"
+"aa\udabf\udffdzz"
+"aa\udaff\udffdzz"
+"aa\udb3f\udffdzz"
+"aa\udb7f\udffdzz"
+"aa\udbbf\udffdzz"
+"aa\udbff\udffdzz"
+Done
diff --git a/ext/json/tests/fail001.phpt b/ext/json/tests/fail001.phpt
index 525bc048c..1bf9f1210 100644
--- a/ext/json/tests/fail001.phpt
+++ b/ext/json/tests/fail001.phpt
@@ -24,7 +24,7 @@ $tests = array('"A JSON payload should be an object or array, not a string."',
'["Illegal backslash escape: \\x15"]',
'["Illegal backslash escape: \\\'"]',
'["Illegal backslash escape: \\017"]',
- '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]',
+ '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]',
'{"Missing colon" null}',
'{"Double colon":: null}',
'{"Comma instead of colon", null}',
@@ -128,7 +128,7 @@ AS OBJECT
NULL
AS ARRAY
NULL
-Testing: [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
+Testing: [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
AS OBJECT
NULL
AS ARRAY
diff --git a/ext/json/utf8_decode.c b/ext/json/utf8_decode.c
index cea1f8cec..2d0422bed 100644
--- a/ext/json/utf8_decode.c
+++ b/ext/json/utf8_decode.c
@@ -165,7 +165,7 @@ utf8_decode_next(json_utf8_decode *utf8)
/*
Three continuation (65536 to 1114111)
*/
- if ((c & 0xF1) == 0xF0) {
+ if ((c & 0xF8) == 0xF0) {
int c1 = cont(utf8);
int c2 = cont(utf8);
int c3 = cont(utf8);
diff --git a/ext/json/utf8_to_utf16.c b/ext/json/utf8_to_utf16.c
index bc2d6f36d..599f0e13b 100644
--- a/ext/json/utf8_to_utf16.c
+++ b/ext/json/utf8_to_utf16.c
@@ -40,13 +40,13 @@ utf8_to_utf16(unsigned short w[], char p[], int length)
for (;;) {
c = utf8_decode_next(&utf8);
if (c < 0) {
- return UTF8_END ? the_index : UTF8_ERROR;
+ return (c == UTF8_END) ? the_index : UTF8_ERROR;
}
if (c < 0x10000) {
w[the_index] = (unsigned short)c;
the_index += 1;
} else {
- c &= 0xFFFF;
+ c -= 0x10000;
w[the_index] = (unsigned short)(0xD800 | (c >> 10));
the_index += 1;
w[the_index] = (unsigned short)(0xDC00 | (c & 0x3FF));
diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c
index eb70b483b..50d09dfa0 100644
--- a/ext/ldap/ldap.c
+++ b/ext/ldap/ldap.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -23,7 +23,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: ldap.c,v 1.161.2.3.2.12 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: ldap.c,v 1.161.2.3.2.14 2008/12/31 11:17:39 sebastian Exp $ */
#define IS_EXT_MODULE
#ifdef HAVE_CONFIG_H
@@ -322,7 +322,7 @@ PHP_MINFO_FUNCTION(ldap)
php_info_print_table_start();
php_info_print_table_row(2, "LDAP Support", "enabled");
- php_info_print_table_row(2, "RCS Version", "$Id: ldap.c,v 1.161.2.3.2.12 2007/12/31 07:20:07 sebastian Exp $");
+ php_info_print_table_row(2, "RCS Version", "$Id: ldap.c,v 1.161.2.3.2.14 2008/12/31 11:17:39 sebastian Exp $");
if (LDAPG(max_links) == -1) {
snprintf(tmp, 31, "%ld/unlimited", LDAPG(num_links));
@@ -471,7 +471,7 @@ static int _get_lderrno(LDAP *ldap)
}
/* }}} */
-/* {{{ proto bool ldap_bind(resource link [, string dn, string password])
+/* {{{ proto bool ldap_bind(resource link [, string dn [, string password]])
Bind to LDAP directory */
PHP_FUNCTION(ldap_bind)
{
@@ -581,7 +581,7 @@ static int _php_sasl_interact(LDAP *ld, unsigned flags, void *defaults, void *in
}
/* }}} */
-/* {{{ proto bool ldap_sasl_bind(resource link [, string binddn, string password, string sasl_mech, string sasl_realm, string sasl_authc_id, string sasl_authz_id, string props])
+/* {{{ proto bool ldap_sasl_bind(resource link [, string binddn [, string password [, string sasl_mech [, string sasl_realm [, string sasl_authc_id [, string sasl_authz_id [, string props]]]]]]])
Bind to LDAP directory using SASL */
PHP_FUNCTION(ldap_sasl_bind)
{
diff --git a/ext/ldap/php_ldap.h b/ext/ldap/php_ldap.h
index c401c3c28..cceaba2ed 100644
--- a/ext/ldap/php_ldap.h
+++ b/ext/ldap/php_ldap.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_ldap.h,v 1.32.2.1.2.3 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_ldap.h,v 1.32.2.1.2.4 2008/12/31 11:17:39 sebastian Exp $ */
#ifndef PHP_LDAP_H
#define PHP_LDAP_H
diff --git a/ext/libxml/libxml.c b/ext/libxml/libxml.c
index a715c5403..20689c11d 100644
--- a/ext/libxml/libxml.c
+++ b/ext/libxml/libxml.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: libxml.c,v 1.32.2.7.2.17 2008/01/30 15:29:51 rrichards Exp $ */
+/* $Id: libxml.c,v 1.32.2.7.2.18 2008/12/31 11:17:39 sebastian Exp $ */
#define IS_EXT_MODULE
diff --git a/ext/libxml/php_libxml.h b/ext/libxml/php_libxml.h
index d5707178b..cac26adae 100644
--- a/ext/libxml/php_libxml.h
+++ b/ext/libxml/php_libxml.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_libxml.h,v 1.15.2.2.2.7 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_libxml.h,v 1.15.2.2.2.8 2008/12/31 11:17:39 sebastian Exp $ */
#ifndef PHP_LIBXML_H
#define PHP_LIBXML_H
diff --git a/ext/mbstring/config.m4 b/ext/mbstring/config.m4
index a2d607497..6fa586f39 100644
--- a/ext/mbstring/config.m4
+++ b/ext/mbstring/config.m4
@@ -1,5 +1,5 @@
dnl
-dnl $Id: config.m4,v 1.58.2.4.2.11 2007/09/18 21:35:39 hirokawa Exp $
+dnl $Id: config.m4,v 1.58.2.4.2.12 2008/07/15 18:07:42 moriyoshi Exp $
dnl
AC_DEFUN([PHP_MBSTRING_ADD_SOURCES], [
@@ -72,19 +72,17 @@ int foo(int x, ...) {
return 0;
}
int main() { return foo(10, "", 3.14); }
- ], [cv_php_mbstring_stdarg=yes], [cv_php_mbstring_stdarg=no],
- [
- dnl cross-compile needs something here
-case $host_alias in
-*netware*)
-cv_php_mbstring_stdarg=yes
-;;
-*)
-cv_php_mbstring_stdarg=no
-;;
-esac
-]
-)
+ ], [cv_php_mbstring_stdarg=yes], [cv_php_mbstring_stdarg=no], [
+ dnl cross-compile needs something here
+ case $host_alias in
+ *netware*)
+ cv_php_mbstring_stdarg=yes
+ ;;
+ *)
+ cv_php_mbstring_stdarg=no
+ ;;
+ esac
+ ])
])
AC_CHECK_HEADERS([stdlib.h string.h strings.h unistd.h sys/time.h sys/times.h stdarg.h])
@@ -98,7 +96,6 @@ esac
AC_DEFINE([HAVE_MBREGEX], 1, [whether to have multibyte regex support])
-
if test "$PHP_MBREGEX_BACKTRACK" != "no"; then
AC_DEFINE([USE_COMBINATION_EXPLOSION_CHECK],1,[whether to check multibyte regex backtrack])
fi
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp932.c b/ext/mbstring/libmbfl/filters/mbfilter_cp932.c
index 80f7bfbc6..8fa254b6c 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_cp932.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_cp932.c
@@ -167,7 +167,7 @@ mbfl_filt_conv_sjiswin_wchar(int c, mbfl_convert_filter *filter)
case 1: /* kanji second char */
filter->status = 0;
c1 = filter->cache;
- if (c > 0x39 && c < 0xfd && c != 0x7f) {
+ if (c >= 0x40 && c <= 0xfc && c != 0x7f) {
w = 0;
SJIS_DECODE(c1, c, s1, s2);
s = (s1 - 0x21)*94 + s2 - 0x21;
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp936.c b/ext/mbstring/libmbfl/filters/mbfilter_cp936.c
index 9cdd0520e..561dc3003 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_cp936.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_cp936.c
@@ -192,7 +192,7 @@ mbfl_filt_conv_wchar_cp936(int c, mbfl_convert_filter *filter)
}
}
if (s >= 0) {
- if (s < 0x80) { /* latin */
+ if (s <= 0x80) { /* latin */
CK((*filter->output_function)(s, filter->data));
} else {
CK((*filter->output_function)((s >> 8) & 0xff, filter->data));
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c b/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c
index 40c24c342..6c6654a1b 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c
@@ -232,8 +232,7 @@ int mbfl_filt_conv_html_dec(int c, mbfl_convert_filter *filter)
mbfl_filt_conv_html_dec_flush(filter);
if (c=='&')
{
- filter->status = 1;
- buffer[0] = '&';
+ buffer[filter->status++] = '&';
}
}
}
@@ -244,17 +243,19 @@ int mbfl_filt_conv_html_dec(int c, mbfl_convert_filter *filter)
int mbfl_filt_conv_html_dec_flush(mbfl_convert_filter *filter)
{
int status, pos = 0;
- char *buffer;
+ unsigned char *buffer;
+ int err = 0;
- buffer = (char*)filter->opaque;
+ buffer = (unsigned char*)filter->opaque;
status = filter->status;
+ filter->status = 0;
/* flush fragments */
while (status--) {
- CK((*filter->output_function)(buffer[pos++], filter->data));
+ int e = (*filter->output_function)(buffer[pos++], filter->data);
+ if (e != 0)
+ err = e;
}
- filter->status = 0;
- /*filter->buffer = 0; of cause NOT*/
- return 0;
+ return err;
}
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis.c
index f9d7ff671..83ef56592 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_sjis.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis.c
@@ -167,7 +167,7 @@ mbfl_filt_conv_sjis_wchar(int c, mbfl_convert_filter *filter)
case 1: /* kanji second char */
filter->status = 0;
c1 = filter->cache;
- if (c > 0x39 && c < 0xfd && c != 0x7f) {
+ if (c >= 0x40 && c <= 0xfc && c != 0x7f) {
SJIS_DECODE(c1, c, s1, s2);
w = (s1 - 0x21)*94 + s2 - 0x21;
if (w >= 0 && w < jisx0208_ucs_table_size) {
diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter.c b/ext/mbstring/libmbfl/mbfl/mbfilter.c
index 97d2f048c..1aeb38cc9 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfilter.c
+++ b/ext/mbstring/libmbfl/mbfl/mbfilter.c
@@ -462,10 +462,9 @@ enum mbfl_no_encoding mbfl_encoding_detector_judge(mbfl_encoding_detector *ident
while (n >= 0) {
filter = identd->filter_list[n];
if (!filter->flag) {
- if (identd->strict && filter->status) {
- continue;
+ if (!identd->strict || !filter->status) {
+ encoding = filter->encoding->no_encoding;
}
- encoding = filter->encoding->no_encoding;
}
n--;
}
@@ -779,7 +778,7 @@ retry:
for (;;) {
pc->found_pos++;
p = h;
- m = pc->needle.buffer;
+ m = (int *)pc->needle.buffer;
n = pc->needle_pos - 1;
while (n > 0 && *p == *m) {
n--;
@@ -858,84 +857,203 @@ mbfl_strpos(
int offset,
int reverse)
{
- int n, result, negative_offset = 0;
- unsigned char *p;
- mbfl_convert_filter *filter;
- struct collector_strpos_data pc;
+ int result;
+ mbfl_string _haystack_u8, _needle_u8;
+ const mbfl_string *haystack_u8, *needle_u8;
+ const unsigned char *u8_tbl;
- if (haystack == NULL || needle == NULL) {
+ if (haystack == NULL || haystack->val == NULL || needle == NULL || needle->val == NULL) {
return -8;
}
- /* needle is converted into wchar */
- mbfl_wchar_device_init(&pc.needle);
- filter = mbfl_convert_filter_new(
- needle->no_encoding,
- mbfl_no_encoding_wchar,
- mbfl_wchar_device_output, 0, &pc.needle);
- if (filter == NULL) {
- return -4;
- }
- p = needle->val;
- n = needle->len;
- if (p != NULL) {
- while (n > 0) {
- if ((*filter->filter_function)(*p++, filter) < 0) {
- break;
- }
- n--;
+
+ {
+ const mbfl_encoding *u8_enc;
+ u8_enc = mbfl_no2encoding(mbfl_no_encoding_utf8);
+ if (u8_enc == NULL || u8_enc->mblen_table == NULL) {
+ return -8;
}
+ u8_tbl = u8_enc->mblen_table;
}
- mbfl_convert_filter_flush(filter);
- mbfl_convert_filter_delete(filter);
- pc.needle_len = pc.needle.pos;
- if (pc.needle.buffer == NULL) {
- return -4;
- }
- if (pc.needle_len <= 0) {
- mbfl_wchar_device_clear(&pc.needle);
- return -2;
+
+ if (haystack->no_encoding != mbfl_no_encoding_utf8) {
+ mbfl_string_init(&_haystack_u8);
+ haystack_u8 = mbfl_convert_encoding(haystack, &_haystack_u8, mbfl_no_encoding_utf8);
+ if (haystack_u8 == NULL) {
+ result = -4;
+ goto out;
+ }
+ } else {
+ haystack_u8 = haystack;
}
- /* initialize filter and collector data */
- filter = mbfl_convert_filter_new(
- haystack->no_encoding,
- mbfl_no_encoding_wchar,
- collector_strpos, 0, &pc);
- if (filter == NULL) {
- mbfl_wchar_device_clear(&pc.needle);
- return -4;
+
+ if (needle->no_encoding != mbfl_no_encoding_utf8) {
+ mbfl_string_init(&_needle_u8);
+ needle_u8 = mbfl_convert_encoding(needle, &_needle_u8, mbfl_no_encoding_utf8);
+ if (needle_u8 == NULL) {
+ result = -4;
+ goto out;
+ }
+ } else {
+ needle_u8 = needle;
}
- if (offset < 0) {
- negative_offset = -offset-1;
- offset = 0;
+ if (needle_u8->len < 1) {
+ result = -8;
+ goto out;
}
- pc.start = offset;
- pc.output = 0;
- pc.needle_pos = 0;
- pc.found_pos = 0;
- pc.matched_pos = -1;
+ result = -1;
+ if (haystack_u8->len < needle_u8->len) {
+ goto out;
+ }
- /* feed data */
- p = haystack->val;
- n = haystack->len - negative_offset;
- if (p != NULL) {
- while (n > 0) {
- if ((*filter->filter_function)(*p++, filter) < 0) {
- pc.matched_pos = -4;
- break;
+ if (!reverse) {
+ unsigned int jtbl[1 << (sizeof(unsigned char) * 8)];
+ unsigned int needle_u8_len = needle_u8->len;
+ unsigned int i;
+ const unsigned char *p, *q, *e;
+ const unsigned char *haystack_u8_val = haystack_u8->val,
+ *needle_u8_val = needle_u8->val;
+ for (i = 0; i < sizeof(jtbl) / sizeof(*jtbl); ++i) {
+ jtbl[i] = needle_u8_len + 1;
+ }
+ for (i = 0; i < needle_u8_len - 1; ++i) {
+ jtbl[needle_u8_val[i]] = needle_u8_len - i;
+ }
+ e = haystack_u8_val + haystack_u8->len;
+ p = haystack_u8_val;
+ while (--offset >= 0) {
+ if (p >= e) {
+ result = -16;
+ goto out;
}
- if (pc.matched_pos >= 0 && !reverse) {
- break;
+ p += u8_tbl[*p];
+ }
+ p += needle_u8_len;
+ if (p > e) {
+ goto out;
+ }
+ while (p <= e) {
+ const unsigned char *pv = p;
+ q = needle_u8_val + needle_u8_len;
+ for (;;) {
+ if (q == needle_u8_val) {
+ result = 0;
+ while (p > haystack_u8_val) {
+ unsigned char c = *--p;
+ if (c < 0x80) {
+ ++result;
+ } else if ((c & 0xc0) != 0x80) {
+ ++result;
+ }
+ }
+ goto out;
+ }
+ if (*--q != *--p) {
+ break;
+ }
+ }
+ p += jtbl[*p];
+ if (p <= pv) {
+ p = pv + 1;
+ }
+ }
+ } else {
+ unsigned int jtbl[1 << (sizeof(unsigned char) * 8)];
+ unsigned int needle_u8_len = needle_u8->len, needle_len = 0;
+ unsigned int i;
+ const unsigned char *p, *e, *q, *qe;
+ const unsigned char *haystack_u8_val = haystack_u8->val,
+ *needle_u8_val = needle_u8->val;
+ for (i = 0; i < sizeof(jtbl) / sizeof(*jtbl); ++i) {
+ jtbl[i] = needle_u8_len;
+ }
+ for (i = needle_u8_len - 1; i > 0; --i) {
+ unsigned char c = needle_u8_val[i];
+ jtbl[c] = i;
+ if (c < 0x80) {
+ ++needle_len;
+ } else if ((c & 0xc0) != 0x80) {
+ ++needle_len;
+ }
+ }
+ {
+ unsigned char c = needle_u8_val[0];
+ if (c < 0x80) {
+ ++needle_len;
+ } else if ((c & 0xc0) != 0x80) {
+ ++needle_len;
+ }
+ }
+ e = haystack_u8_val;
+ p = e + haystack_u8->len;
+ qe = needle_u8_val + needle_u8_len;
+ if (offset < 0) {
+ if (-offset > needle_len) {
+ offset += needle_len;
+ while (offset < 0) {
+ unsigned char c;
+ if (p <= e) {
+ result = -16;
+ goto out;
+ }
+ c = *(--p);
+ if (c < 0x80) {
+ ++offset;
+ } else if ((c & 0xc0) != 0x80) {
+ ++offset;
+ }
+ }
+ }
+ } else {
+ const unsigned char *ee = haystack_u8_val + haystack_u8->len;
+ while (--offset >= 0) {
+ if (e >= ee) {
+ result = -16;
+ goto out;
+ }
+ e += u8_tbl[*e];
+ }
+ }
+ if (p < e + needle_u8_len) {
+ goto out;
+ }
+ p -= needle_u8_len;
+ while (p >= e) {
+ const unsigned char *pv = p;
+ q = needle_u8_val;
+ for (;;) {
+ if (q == qe) {
+ result = 0;
+ p -= needle_u8_len;
+ while (p > haystack_u8_val) {
+ unsigned char c = *--p;
+ if (c < 0x80) {
+ ++result;
+ } else if ((c & 0xc0) != 0x80) {
+ ++result;
+ }
+ }
+ goto out;
+ }
+ if (*q != *p) {
+ break;
+ }
+ ++p, ++q;
+ }
+ p -= jtbl[*p];
+ if (p >= pv) {
+ p = pv - 1;
}
- n--;
}
}
- mbfl_convert_filter_flush(filter);
- result = pc.matched_pos;
- mbfl_convert_filter_delete(filter);
- mbfl_wchar_device_clear(&pc.needle);
-
+out:
+ if (haystack_u8 == &_haystack_u8) {
+ mbfl_string_clear(&_haystack_u8);
+ }
+ if (needle_u8 == &_needle_u8) {
+ mbfl_string_clear(&_needle_u8);
+ }
return result;
}
@@ -1013,6 +1131,7 @@ mbfl_substr_count(
if (pc.matched_pos >= 0) {
++result;
pc.matched_pos = -1;
+ pc.needle_pos = 0;
}
n--;
}
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_convert.c b/ext/mbstring/libmbfl/mbfl/mbfl_convert.c
index f6810738f..8c3a9758d 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfl_convert.c
+++ b/ext/mbstring/libmbfl/mbfl/mbfl_convert.c
@@ -357,22 +357,6 @@ int mbfl_convert_filter_strcat(mbfl_convert_filter *filter, const unsigned char
return 0;
}
-#if 0
-static int
-mbfl_convert_filter_strncat(mbfl_convert_filter *filter, const unsigned char *p,
- int n)
-{
- while (n > 0) {
- if ((*filter->filter_function)(*p++, filter) < 0) {
- return -1;
- }
- n--;
- }
-
- return n;
-}
-#endif
-
/* illegal character output function for conv-filter */
int
mbfl_filt_conv_illegal_output(int c, mbfl_convert_filter *filter)
@@ -387,14 +371,9 @@ mbfl_filt_conv_illegal_output(int c, mbfl_convert_filter *filter)
ret = (*filter->filter_function)(filter->illegal_substchar, filter);
break;
case MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG:
- case MBFL_OUTPUTFILTER_ILLEGAL_MODE_ENTITY:
if (c >= 0) {
if (c < MBFL_WCSGROUP_UCS4MAX) { /* unicode */
- if (mode_backup == MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG) {
- ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"U+");
- } else { /* entity */
- ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"&#");
- }
+ ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"U+");
} else {
if (c < MBFL_WCSGROUP_WCHARMAX) {
m = c & ~MBFL_WCSPLANE_MASK;
@@ -438,9 +417,38 @@ mbfl_filt_conv_illegal_output(int c, mbfl_convert_filter *filter)
if (m == 0 && ret >= 0) {
ret = (*filter->filter_function)(mbfl_hexchar_table[0], filter);
}
- if (mode_backup == MBFL_OUTPUTFILTER_ILLEGAL_MODE_ENTITY) {
- ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)";");
+ }
+ }
+ break;
+ case MBFL_OUTPUTFILTER_ILLEGAL_MODE_ENTITY:
+ if (c >= 0) {
+ if (c < MBFL_WCSGROUP_UCS4MAX) { /* unicode */
+ ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"&#x");
+ if (ret < 0)
+ break;
+
+ m = 0;
+ r = 28;
+ while (r >= 0) {
+ n = (c >> r) & 0xf;
+ if (n || m) {
+ m = 1;
+ ret = (*filter->filter_function)(mbfl_hexchar_table[n], filter);
+ if (ret < 0) {
+ break;
+ }
+ }
+ r -= 4;
+ }
+ if (ret < 0) {
+ break;
+ }
+ if (m == 0) {
+ ret = (*filter->filter_function)(mbfl_hexchar_table[0], filter);
}
+ ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)";");
+ } else {
+ ret = (*filter->filter_function)(filter->illegal_substchar, filter);
}
}
break;
@@ -462,8 +470,8 @@ const struct mbfl_convert_vtbl * mbfl_convert_filter_get_vtbl(enum mbfl_no_encod
to == mbfl_no_encoding_7bit) {
from = mbfl_no_encoding_8bit;
} else if (from == mbfl_no_encoding_base64 ||
- from == mbfl_no_encoding_qprint ||
- from == mbfl_no_encoding_uuencode) {
+ from == mbfl_no_encoding_qprint ||
+ from == mbfl_no_encoding_uuencode) {
to = mbfl_no_encoding_8bit;
}
diff --git a/ext/mbstring/mb_gpc.c b/ext/mbstring/mb_gpc.c
index f6a175d8d..98efdcbe1 100644
--- a/ext/mbstring/mb_gpc.c
+++ b/ext/mbstring/mb_gpc.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: mb_gpc.c,v 1.17.2.2.2.4 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: mb_gpc.c,v 1.17.2.2.2.5 2008/12/31 11:17:39 sebastian Exp $ */
/* {{{ includes */
#ifdef HAVE_CONFIG_H
diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c
index 7d2e2840c..211b2d63b 100644
--- a/ext/mbstring/mbstring.c
+++ b/ext/mbstring/mbstring.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: mbstring.c,v 1.224.2.22.2.30 2008/02/17 02:06:56 hirokawa Exp $ */
+/* $Id: mbstring.c,v 1.224.2.22.2.46 2009/02/15 07:11:23 moriyoshi Exp $ */
/*
* PHP 4 Multibyte String module "mbstring"
@@ -89,7 +89,7 @@ static PHP_GSHUTDOWN_FUNCTION(mbstring);
/* {{{ php_mb_default_identify_list */
typedef struct _php_mb_nls_ident_list {
enum mbfl_no_language lang;
- enum mbfl_no_encoding* list;
+ const enum mbfl_no_encoding* list;
int list_size;
} php_mb_nls_ident_list;
@@ -560,7 +560,7 @@ static int php_mb_nls_get_default_detect_order_list(enum mbfl_no_language lang,
for (i = 0; i < sizeof(php_mb_default_identify_list) / sizeof(php_mb_default_identify_list[0]); i++) {
if (php_mb_default_identify_list[i].lang == lang) {
- *plist = php_mb_default_identify_list[i].list;
+ *plist = (enum mbfl_no_encoding *)php_mb_default_identify_list[i].list;
*plist_size = php_mb_default_identify_list[i].list_size;
return 1;
}
@@ -576,6 +576,7 @@ static PHP_INI_MH(OnUpdate_mbstring_language)
no_language = mbfl_name2no_language(new_value);
if (no_language == mbfl_no_language_invalid) {
+ MBSTRG(language) = mbfl_no_language_neutral;
return FAILURE;
}
MBSTRG(language) = no_language;
@@ -591,12 +592,16 @@ static PHP_INI_MH(OnUpdate_mbstring_detect_order)
int size;
if (php_mb_parse_encoding_list(new_value, new_value_length, &list, &size, 1 TSRMLS_CC)) {
- if (MBSTRG(detect_order_list) != NULL) {
+ if (MBSTRG(detect_order_list)) {
free(MBSTRG(detect_order_list));
}
MBSTRG(detect_order_list) = list;
MBSTRG(detect_order_list_size) = size;
} else {
+ if (MBSTRG(detect_order_list)) {
+ free(MBSTRG(detect_order_list));
+ MBSTRG(detect_order_list) = NULL;
+ }
return FAILURE;
}
@@ -611,12 +616,17 @@ static PHP_INI_MH(OnUpdate_mbstring_http_input)
int size;
if (php_mb_parse_encoding_list(new_value, new_value_length, &list, &size, 1 TSRMLS_CC)) {
- if (MBSTRG(http_input_list) != NULL) {
+ if (MBSTRG(http_input_list)) {
free(MBSTRG(http_input_list));
}
MBSTRG(http_input_list) = list;
MBSTRG(http_input_list_size) = size;
} else {
+ if (MBSTRG(http_input_list)) {
+ free(MBSTRG(http_input_list));
+ MBSTRG(http_input_list) = NULL;
+ }
+ MBSTRG(http_input_list_size) = 0;
return FAILURE;
}
@@ -634,6 +644,8 @@ static PHP_INI_MH(OnUpdate_mbstring_http_output)
MBSTRG(http_output_encoding) = no_encoding;
MBSTRG(current_http_output_encoding) = no_encoding;
} else {
+ MBSTRG(http_output_encoding) = mbfl_no_encoding_pass;
+ MBSTRG(current_http_output_encoding) = mbfl_no_encoding_pass;
if (new_value != NULL && new_value_length > 0) {
return FAILURE;
}
@@ -643,41 +655,101 @@ static PHP_INI_MH(OnUpdate_mbstring_http_output)
}
/* }}} */
-/* {{{ static PHP_INI_MH(OnUpdate_mbstring_internal_encoding) */
-static PHP_INI_MH(OnUpdate_mbstring_internal_encoding)
+/* {{{ static _php_mb_ini_mbstring_internal_encoding_set */
+static int _php_mb_ini_mbstring_internal_encoding_set(const char *new_value, uint new_value_length TSRMLS_DC)
{
enum mbfl_no_encoding no_encoding;
- if (new_value == NULL) {
- return SUCCESS;
- }
+ const char *enc_name = NULL;
+ uint enc_name_len = 0;
- no_encoding = mbfl_name2no_encoding(new_value);
+ no_encoding = new_value ? mbfl_name2no_encoding(new_value):
+ mbfl_no_encoding_invalid;
if (no_encoding != mbfl_no_encoding_invalid) {
- MBSTRG(internal_encoding) = no_encoding;
- MBSTRG(current_internal_encoding) = no_encoding;
+ enc_name = new_value;
+ enc_name_len = new_value_length;
+ } else {
+ switch (MBSTRG(language)) {
+ case mbfl_no_language_uni:
+ enc_name = "UTF-8";
+ enc_name_len = sizeof("UTF-8") - 1;
+ break;
+ case mbfl_no_language_japanese:
+ enc_name = "EUC-JP";
+ enc_name_len = sizeof("EUC-JP") - 1;
+ break;
+ case mbfl_no_language_korean:
+ enc_name = "EUC-KR";
+ enc_name_len = sizeof("EUC-KR") - 1;
+ break;
+ case mbfl_no_language_simplified_chinese:
+ enc_name = "EUC-CN";
+ enc_name_len = sizeof("EUC-CN") - 1;
+ break;
+ case mbfl_no_language_traditional_chinese:
+ enc_name = "EUC-TW";
+ enc_name_len = sizeof("EUC-TW") - 1;
+ break;
+ case mbfl_no_language_russian:
+ enc_name = "KOI8-R";
+ enc_name_len = sizeof("KOI8-R") - 1;
+ break;
+ case mbfl_no_language_german:
+ enc_name = "ISO-8859-15";
+ enc_name_len = sizeof("ISO-8859-15") - 1;
+ break;
+ case mbfl_no_language_armenian:
+ enc_name = "ArmSCII-8";
+ enc_name_len = sizeof("ArmSCII-8") - 1;
+ break;
+ case mbfl_no_language_turkish:
+ enc_name = "ISO-8859-9";
+ enc_name_len = sizeof("ISO-8859-9") - 1;
+ break;
+ default:
+ enc_name = "ISO-8859-1";
+ enc_name_len = sizeof("ISO-8859-1") - 1;
+ break;
+ }
+ no_encoding = mbfl_name2no_encoding(enc_name);
+ }
+ MBSTRG(internal_encoding) = no_encoding;
+ MBSTRG(current_internal_encoding) = no_encoding;
#if HAVE_MBREGEX
- {
- OnigEncoding mbctype;
- mbctype = php_mb_regex_name2mbctype(new_value);
- if (mbctype == ONIG_ENCODING_UNDEF) {
- mbctype = ONIG_ENCODING_EUC_JP;
- }
- MBSTRG(current_mbctype) = MBSTRG(default_mbctype) = mbctype;
+ {
+ OnigEncoding mbctype;
+ mbctype = php_mb_regex_name2mbctype(enc_name);
+ if (mbctype == ONIG_ENCODING_UNDEF) {
+ mbctype = ONIG_ENCODING_EUC_JP;
}
+ MBSTRG(current_mbctype) = MBSTRG(default_mbctype) = mbctype;
+ }
#endif
#ifdef ZEND_MULTIBYTE
- zend_multibyte_set_internal_encoding(new_value, new_value_length TSRMLS_CC);
+ zend_multibyte_set_internal_encoding((char *)enc_name, enc_name_len TSRMLS_CC);
#endif /* ZEND_MULTIBYTE */
- } else {
- if (new_value != NULL && new_value_length > 0) {
- return FAILURE;
- }
- }
return SUCCESS;
}
/* }}} */
+/* {{{ static PHP_INI_MH(OnUpdate_mbstring_internal_encoding) */
+static PHP_INI_MH(OnUpdate_mbstring_internal_encoding)
+{
+ if (stage == PHP_INI_STAGE_STARTUP || stage == PHP_INI_STAGE_SHUTDOWN
+ || stage == PHP_INI_STAGE_RUNTIME) {
+ return _php_mb_ini_mbstring_internal_encoding_set(new_value, new_value_length TSRMLS_CC);
+ } else {
+ /* the corresponding mbstring globals needs to be set according to the
+ * ini value in the later stage because it never falls back to the
+ * default value if 1. no value for mbstring.internal_encoding is given,
+ * 2. mbstring.language directive is processed in per-dir or runtime
+ * context and 3. call to the handler for mbstring.language is done
+ * after mbstring.internal_encoding is handled. */
+ return SUCCESS;
+ }
+}
+/* }}} */
+
#ifdef ZEND_MULTIBYTE
/* {{{ static PHP_INI_MH(OnUpdate_mbstring_script_encoding) */
static PHP_INI_MH(OnUpdate_mbstring_script_encoding)
@@ -691,6 +763,11 @@ static PHP_INI_MH(OnUpdate_mbstring_script_encoding)
MBSTRG(script_encoding_list) = list;
MBSTRG(script_encoding_list_size) = size;
} else {
+ if (MBSTRG(script_encoding_list) != NULL) {
+ free(MBSTRG(script_encoding_list));
+ }
+ MBSTRG(script_encoding_list) = NULL;
+ MBSTRG(script_encoding_list_size) = 0;
return FAILURE;
}
@@ -726,6 +803,11 @@ static PHP_INI_MH(OnUpdate_mbstring_substitute_character)
}
}
}
+ } else {
+ MBSTRG(filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
+ MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
+ MBSTRG(filter_illegal_substchar) = 0x3f; /* '?' */
+ MBSTRG(current_filter_illegal_substchar) = 0x3f; /* '?' */
}
return SUCCESS;
@@ -756,7 +838,7 @@ static PHP_INI_MH(OnUpdate_mbstring_encoding_translation)
/* {{{ php.ini directive registration */
PHP_INI_BEGIN()
- PHP_INI_ENTRY("mbstring.language", "neutral", PHP_INI_SYSTEM | PHP_INI_PERDIR, OnUpdate_mbstring_language)
+ PHP_INI_ENTRY("mbstring.language", "neutral", PHP_INI_ALL, OnUpdate_mbstring_language)
PHP_INI_ENTRY("mbstring.detect_order", NULL, PHP_INI_ALL, OnUpdate_mbstring_detect_order)
PHP_INI_ENTRY("mbstring.http_input", "pass", PHP_INI_ALL, OnUpdate_mbstring_http_input)
PHP_INI_ENTRY("mbstring.http_output", "pass", PHP_INI_ALL, OnUpdate_mbstring_http_output)
@@ -765,8 +847,8 @@ PHP_INI_BEGIN()
PHP_INI_ENTRY("mbstring.script_encoding", NULL, PHP_INI_ALL, OnUpdate_mbstring_script_encoding)
#endif /* ZEND_MULTIBYTE */
PHP_INI_ENTRY("mbstring.substitute_character", NULL, PHP_INI_ALL, OnUpdate_mbstring_substitute_character)
- STD_PHP_INI_ENTRY("mbstring.func_overload", "0", PHP_INI_SYSTEM |
- PHP_INI_PERDIR, OnUpdateLong, func_overload, zend_mbstring_globals, mbstring_globals)
+ STD_PHP_INI_ENTRY("mbstring.func_overload", "0",
+ PHP_INI_SYSTEM, OnUpdateLong, func_overload, zend_mbstring_globals, mbstring_globals)
STD_PHP_INI_BOOLEAN("mbstring.encoding_translation", "0",
PHP_INI_SYSTEM | PHP_INI_PERDIR, OnUpdate_mbstring_encoding_translation,
@@ -781,7 +863,6 @@ PHP_INI_END()
static PHP_GINIT_FUNCTION(mbstring)
{
mbstring_globals->language = mbfl_no_language_uni;
- mbstring_globals->current_language = mbstring_globals->language;
mbstring_globals->internal_encoding = mbfl_no_encoding_invalid;
mbstring_globals->current_internal_encoding = mbstring_globals->internal_encoding;
#ifdef ZEND_MULTIBYTE
@@ -821,6 +902,18 @@ static PHP_GINIT_FUNCTION(mbstring)
/* {{{ PHP_GSHUTDOWN_FUNCTION */
static PHP_GSHUTDOWN_FUNCTION(mbstring)
{
+ if (mbstring_globals->http_input_list) {
+ free(mbstring_globals->http_input_list);
+ }
+#ifdef ZEND_MULTIBYTE
+ if (mbstring_globals->script_encoding_list) {
+ free(mbstring_globals->script_encoding_list);
+ }
+#endif /* ZEND_MULTIBYTE */
+ if (mbstring_globals->detect_order_list) {
+ free(mbstring_globals->detect_order_list);
+ }
+
#if HAVE_MBREGEX
_php_mb_regex_globals_dtor(mbstring_globals TSRMLS_CC);
#endif
@@ -859,18 +952,6 @@ PHP_MSHUTDOWN_FUNCTION(mbstring)
{
UNREGISTER_INI_ENTRIES();
- if (MBSTRG(http_input_list)) {
- free(MBSTRG(http_input_list));
- }
-#ifdef ZEND_MULTIBYTE
- if (MBSTRG(script_encoding_list)) {
- free(MBSTRG(script_encoding_list));
- }
-#endif /* ZEND_MULTIBYTE */
- if (MBSTRG(detect_order_list)) {
- free(MBSTRG(detect_order_list));
- }
-
#if HAVE_MBREGEX
PHP_MSHUTDOWN(mb_regex) (INIT_FUNC_ARGS_PASSTHRU);
#endif
@@ -887,51 +968,9 @@ PHP_RINIT_FUNCTION(mbstring)
zend_function *func, *orig;
const struct mb_overload_def *p;
- MBSTRG(current_language) = MBSTRG(language);
- php_mb_nls_get_default_detect_order_list(MBSTRG(language),
- &MBSTRG(default_detect_order_list), &MBSTRG(default_detect_order_list_size));
-
- if (MBSTRG(internal_encoding) == mbfl_no_encoding_invalid) {
- char *default_enc = NULL;
- switch (MBSTRG(current_language)) {
- case mbfl_no_language_uni:
- default_enc = "UTF-8";
- break;
- case mbfl_no_language_japanese:
- default_enc = "EUC-JP";
- break;
- case mbfl_no_language_korean:
- default_enc = "EUC-KR";
- break;
- case mbfl_no_language_simplified_chinese:
- default_enc = "EUC-CN";
- break;
- case mbfl_no_language_traditional_chinese:
- default_enc = "EUC-TW";
- break;
- case mbfl_no_language_russian:
- default_enc = "KOI8-R";
- break;
- case mbfl_no_language_german:
- default_enc = "ISO-8859-15";
- break;
- case mbfl_no_language_armenian:
- default_enc = "ArmSCII-8";
- break;
- case mbfl_no_language_turkish:
- default_enc = "ISO-8859-9";
- break;
- case mbfl_no_language_english:
- default:
- default_enc = "ISO-8859-1";
- break;
- }
- if (default_enc) {
- zend_alter_ini_entry("mbstring.internal_encoding",
- sizeof("mbstring.internal_encoding"),
- default_enc, strlen(default_enc),
- PHP_INI_PERDIR, PHP_INI_STAGE_RUNTIME);
- }
+ {
+ char *value = zend_ini_string("mbstring.internal_encoding", sizeof("mbstring.internal_encoding"), 0);
+ _php_mb_ini_mbstring_internal_encoding_set(value, value ? strlen(value): 0 TSRMLS_CC);
}
MBSTRG(current_internal_encoding) = MBSTRG(internal_encoding);
@@ -939,9 +978,7 @@ PHP_RINIT_FUNCTION(mbstring)
MBSTRG(current_filter_illegal_mode) = MBSTRG(filter_illegal_mode);
MBSTRG(current_filter_illegal_substchar) = MBSTRG(filter_illegal_substchar);
- if (!MBSTRG(encoding_translation)) {
- MBSTRG(illegalchars) = 0;
- }
+ MBSTRG(illegalchars) = 0;
n = 0;
if (MBSTRG(detect_order_list)) {
@@ -1025,9 +1062,14 @@ PHP_RSHUTDOWN_FUNCTION(mbstring)
/* clear overloaded function. */
if (MBSTRG(func_overload)){
p = &(mb_ovld[0]);
- while (p->type > 0 && zend_hash_find(EG(function_table), p->save_func, strlen(p->save_func)+1 , (void **)&orig) == SUCCESS) {
- zend_hash_update(EG(function_table), p->orig_func, strlen(p->orig_func)+1, orig, sizeof(zend_function), NULL);
- zend_hash_del(EG(function_table), p->save_func, strlen(p->save_func)+1);
+ while (p->type > 0) {
+ if ((MBSTRG(func_overload) & p->type) == p->type &&
+ zend_hash_find(EG(function_table), p->save_func,
+ strlen(p->save_func)+1, (void **)&orig) == SUCCESS) {
+
+ zend_hash_update(EG(function_table), p->orig_func, strlen(p->orig_func)+1, orig, sizeof(zend_function), NULL);
+ zend_hash_del(EG(function_table), p->save_func, strlen(p->save_func)+1);
+ }
p++;
}
}
@@ -1079,22 +1121,20 @@ PHP_FUNCTION(mb_language)
{
char *name = NULL;
int name_len = 0;
- enum mbfl_no_language no_language;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &name, &name_len) == FAILURE) {
return;
}
if (name == NULL) {
- RETURN_STRING((char *)mbfl_no_language2name(MBSTRG(current_language)), 1);
+ RETVAL_STRING((char *)mbfl_no_language2name(MBSTRG(language)), 1);
} else {
- no_language = mbfl_name2no_language(name);
- if (no_language == mbfl_no_language_invalid) {
+ if (FAILURE == zend_alter_ini_entry(
+ "mbstring.language", sizeof("mbstring.language"),
+ name, name_len, PHP_INI_USER, PHP_INI_STAGE_RUNTIME)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown language \"%s\"", name);
- RETURN_FALSE;
+ RETVAL_FALSE;
} else {
- php_mb_nls_get_default_detect_order_list(no_language, &MBSTRG(default_detect_order_list), &MBSTRG(default_detect_order_list_size));
- MBSTRG(current_language) = no_language;
- RETURN_TRUE;
+ RETVAL_TRUE;
}
}
}
@@ -1412,7 +1452,7 @@ PHP_FUNCTION(mb_preferred_mime_name)
Parses GET/POST/COOKIE data and sets global variables */
PHP_FUNCTION(mb_parse_str)
{
- zval *track_vars_array;
+ zval *track_vars_array = NULL;
char *encstr = NULL;
int encstr_len;
php_mb_encoding_handler_info_t info;
@@ -1436,10 +1476,10 @@ PHP_FUNCTION(mb_parse_str)
info.force_register_globals = (track_vars_array == NULL);
info.report_errors = 1;
info.to_encoding = MBSTRG(current_internal_encoding);
- info.to_language = MBSTRG(current_language);
+ info.to_language = MBSTRG(language);
info.from_encodings = MBSTRG(http_input_list);
info.num_from_encodings = MBSTRG(http_input_list_size);
- info.from_language = MBSTRG(current_language);
+ info.from_language = MBSTRG(language);
detected = _php_mb_encoding_handler_ex(&info, track_vars_array, encstr TSRMLS_CC);
@@ -1527,7 +1567,7 @@ PHP_FUNCTION(mb_output_handler)
/* feed the string */
mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
+ string.no_language = MBSTRG(language);
string.no_encoding = MBSTRG(current_internal_encoding);
string.val = (unsigned char *)arg_string;
string.len = arg_string_len;
@@ -1563,7 +1603,7 @@ PHP_FUNCTION(mb_strlen)
RETURN_FALSE;
}
- string.no_language = MBSTRG(current_language);
+ string.no_language = MBSTRG(language);
if (enc_name == NULL) {
string.no_encoding = MBSTRG(current_internal_encoding);
} else {
@@ -1595,9 +1635,9 @@ PHP_FUNCTION(mb_strpos)
mbfl_string_init(&haystack);
mbfl_string_init(&needle);
- haystack.no_language = MBSTRG(current_language);
+ haystack.no_language = MBSTRG(language);
haystack.no_encoding = MBSTRG(current_internal_encoding);
- needle.no_language = MBSTRG(current_language);
+ needle.no_language = MBSTRG(language);
needle.no_encoding = MBSTRG(current_internal_encoding);
offset = 0;
@@ -1613,12 +1653,12 @@ PHP_FUNCTION(mb_strpos)
}
}
- if (offset < 0 || (unsigned long)offset > (unsigned long)mbfl_strlen(&haystack)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset not contained in string.");
+ if (offset < 0 || offset > mbfl_strlen(&haystack)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset not contained in string");
RETURN_FALSE;
}
if (needle.len == 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty delimiter.");
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty delimiter");
RETURN_FALSE;
}
@@ -1630,17 +1670,17 @@ PHP_FUNCTION(mb_strpos)
case 1:
break;
case 2:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Needle has not positive length.");
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Needle has not positive length");
break;
case 4:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding or conversion error.");
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding or conversion error");
break;
case 8:
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Argument is empty.");
+ php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Argument is empty");
break;
default:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown error in mb_strpos.");
- break;
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown error in mb_strpos");
+ break;
}
RETVAL_FALSE;
}
@@ -1662,9 +1702,9 @@ PHP_FUNCTION(mb_strrpos)
mbfl_string_init(&haystack);
mbfl_string_init(&needle);
- haystack.no_language = MBSTRG(current_language);
+ haystack.no_language = MBSTRG(language);
haystack.no_encoding = MBSTRG(current_internal_encoding);
- needle.no_language = MBSTRG(current_language);
+ needle.no_language = MBSTRG(language);
needle.no_encoding = MBSTRG(current_internal_encoding);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|Zs", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &zoffset, &enc_name, &enc_name_len) == FAILURE) {
@@ -1727,10 +1767,13 @@ PHP_FUNCTION(mb_strrpos)
RETURN_FALSE;
}
- if ((offset > 0 && offset > mbfl_strlen(&haystack)) ||
- (offset < 0 && -offset > mbfl_strlen(&haystack))) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Offset is greater than the length of haystack string");
- RETURN_FALSE;
+ {
+ int haystack_char_len = mbfl_strlen(&haystack);
+ if ((offset > 0 && offset > haystack_char_len) ||
+ (offset < 0 && -offset > haystack_char_len)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset is greater than the length of haystack string");
+ RETURN_FALSE;
+ }
}
n = mbfl_strpos(&haystack, &needle, offset, 1);
@@ -1784,10 +1827,6 @@ PHP_FUNCTION(mb_strripos)
RETURN_FALSE;
}
- if(offset > old_haystack_len){
- RETURN_FALSE;
- }
-
n = php_mb_stripos(1, old_haystack, old_haystack_len, old_needle, old_needle_len, offset, from_encoding TSRMLS_CC);
if (n >= 0) {
@@ -1810,9 +1849,9 @@ PHP_FUNCTION(mb_strstr)
mbfl_string_init(&haystack);
mbfl_string_init(&needle);
- haystack.no_language = MBSTRG(current_language);
+ haystack.no_language = MBSTRG(language);
haystack.no_encoding = MBSTRG(current_internal_encoding);
- needle.no_language = MBSTRG(current_language);
+ needle.no_language = MBSTRG(language);
needle.no_encoding = MBSTRG(current_internal_encoding);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|bs", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &part, &enc_name, &enc_name_len) == FAILURE) {
@@ -1828,7 +1867,7 @@ PHP_FUNCTION(mb_strstr)
}
if (needle.len <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Empty delimiter.");
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty delimiter");
RETURN_FALSE;
}
n = mbfl_strpos(&haystack, &needle, 0, 0);
@@ -1868,9 +1907,9 @@ PHP_FUNCTION(mb_strrchr)
mbfl_string_init(&haystack);
mbfl_string_init(&needle);
- haystack.no_language = MBSTRG(current_language);
+ haystack.no_language = MBSTRG(language);
haystack.no_encoding = MBSTRG(current_internal_encoding);
- needle.no_language = MBSTRG(current_language);
+ needle.no_language = MBSTRG(language);
needle.no_encoding = MBSTRG(current_internal_encoding);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|bs", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &part, &enc_name, &enc_name_len) == FAILURE) {
@@ -1926,9 +1965,9 @@ PHP_FUNCTION(mb_stristr)
char *from_encoding = (char*)mbfl_no2preferred_mime_name(MBSTRG(current_internal_encoding));
mbfl_string_init(&haystack);
mbfl_string_init(&needle);
- haystack.no_language = MBSTRG(current_language);
+ haystack.no_language = MBSTRG(language);
haystack.no_encoding = MBSTRG(current_internal_encoding);
- needle.no_language = MBSTRG(current_language);
+ needle.no_language = MBSTRG(language);
needle.no_encoding = MBSTRG(current_internal_encoding);
@@ -1937,7 +1976,7 @@ PHP_FUNCTION(mb_stristr)
}
if(!needle.len){
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Empty delimiter.");
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty delimiter");
RETURN_FALSE;
}
@@ -1947,7 +1986,7 @@ PHP_FUNCTION(mb_stristr)
RETURN_FALSE;
}
- n = php_mb_stripos(0, haystack.val, haystack.len, needle.val, needle.len, 0, from_encoding TSRMLS_CC);
+ n = php_mb_stripos(0, haystack.val, haystack.len, needle.val, needle.len, 0, from_encoding TSRMLS_CC);
if (n <0) {
RETURN_FALSE;
@@ -1984,9 +2023,9 @@ PHP_FUNCTION(mb_strrichr)
char *from_encoding = (char*)mbfl_no2preferred_mime_name(MBSTRG(current_internal_encoding));
mbfl_string_init(&haystack);
mbfl_string_init(&needle);
- haystack.no_language = MBSTRG(current_language);
+ haystack.no_language = MBSTRG(language);
haystack.no_encoding = MBSTRG(current_internal_encoding);
- needle.no_language = MBSTRG(current_language);
+ needle.no_language = MBSTRG(language);
needle.no_encoding = MBSTRG(current_internal_encoding);
@@ -2038,9 +2077,9 @@ PHP_FUNCTION(mb_substr_count)
mbfl_string_init(&haystack);
mbfl_string_init(&needle);
- haystack.no_language = MBSTRG(current_language);
+ haystack.no_language = MBSTRG(language);
haystack.no_encoding = MBSTRG(current_internal_encoding);
- needle.no_language = MBSTRG(current_language);
+ needle.no_language = MBSTRG(language);
needle.no_encoding = MBSTRG(current_internal_encoding);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|s", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &enc_name, &enc_name_len) == FAILURE) {
@@ -2056,7 +2095,7 @@ PHP_FUNCTION(mb_substr_count)
}
if (needle.len <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Empty substring.");
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty substring");
RETURN_FALSE;
}
@@ -2078,7 +2117,7 @@ PHP_FUNCTION(mb_substr)
mbfl_string string, result, *ret;
mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
+ string.no_language = MBSTRG(language);
string.no_encoding = MBSTRG(current_internal_encoding);
argc = ZEND_NUM_ARGS();
@@ -2170,7 +2209,7 @@ PHP_FUNCTION(mb_strcut)
mbfl_string string, result, *ret;
mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
+ string.no_language = MBSTRG(language);
string.no_encoding = MBSTRG(current_internal_encoding);
argc = ZEND_NUM_ARGS();
@@ -2260,7 +2299,7 @@ PHP_FUNCTION(mb_strwidth)
mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
+ string.no_language = MBSTRG(language);
string.no_encoding = MBSTRG(current_internal_encoding);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", (char **)&string.val, &string.len, &enc_name, &enc_name_len) == FAILURE) {
@@ -2294,9 +2333,9 @@ PHP_FUNCTION(mb_strimwidth)
mbfl_string_init(&string);
mbfl_string_init(&marker);
- string.no_language = MBSTRG(current_language);
+ string.no_language = MBSTRG(language);
string.no_encoding = MBSTRG(current_internal_encoding);
- marker.no_language = MBSTRG(current_language);
+ marker.no_language = MBSTRG(language);
marker.no_encoding = MBSTRG(current_internal_encoding);
marker.val = NULL;
marker.len = 0;
@@ -2392,7 +2431,7 @@ MBSTRING_API char * php_mb_convert_encoding(char *input, size_t length, char *_t
mbfl_string_init(&result);
from_encoding = MBSTRG(current_internal_encoding);
string.no_encoding = from_encoding;
- string.no_language = MBSTRG(current_language);
+ string.no_language = MBSTRG(language);
string.val = (unsigned char *)input;
string.len = length;
@@ -2626,6 +2665,7 @@ PHP_FUNCTION(mb_detect_encoding)
if (!php_mb_parse_encoding_array(*arg_list, &list, &size, 0 TSRMLS_CC)) {
if (list) {
efree(list);
+ list = NULL;
size = 0;
}
}
@@ -2635,6 +2675,7 @@ PHP_FUNCTION(mb_detect_encoding)
if (!php_mb_parse_encoding_list(Z_STRVAL_PP(arg_list), Z_STRLEN_PP(arg_list), &list, &size, 0 TSRMLS_CC)) {
if (list) {
efree(list);
+ list = NULL;
size = 0;
}
}
@@ -2662,7 +2703,7 @@ PHP_FUNCTION(mb_detect_encoding)
convert_to_string_ex(arg_str);
mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
+ string.no_language = MBSTRG(language);
string.val = (unsigned char *)Z_STRVAL_PP(arg_str);
string.len = Z_STRLEN_PP(arg_str);
ret = mbfl_identify_encoding_name(&string, elist, size, strict);
@@ -2694,122 +2735,6 @@ PHP_FUNCTION(mb_list_encodings)
}
/* }}} */
-/* {{{ proto array mb_list_encodings_alias_names([string encoding])
- Returns an array of all supported alias encodings */
-PHP_FUNCTION(mb_list_encodings_alias_names)
-{
- const mbfl_encoding **encodings;
- const mbfl_encoding *encoding;
- enum mbfl_no_encoding no_encoding;
- int i, j;
- zval *row;
- char *name = NULL;
- int name_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &name, &name_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (name == NULL) {
- array_init(return_value);
- i = 0;
- encodings = mbfl_get_supported_encodings();
- while ((encoding = encodings[i++]) != NULL) {
- MAKE_STD_ZVAL(row);
- array_init(row);
- if (encoding->aliases != NULL) {
- j = 0;
- while ((*encoding->aliases)[j] != NULL) {
- add_next_index_string(row, (char *)(*encoding->aliases)[j], 1);
- j++;
- }
- }
- add_assoc_zval(return_value, (char *) encoding->name, row);
- }
- } else {
- no_encoding = mbfl_name2no_encoding(name);
- if (no_encoding == mbfl_no_encoding_invalid) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", name);
- RETURN_FALSE;
- }
-
- name = (char *)mbfl_no_encoding2name(no_encoding);
- if (name != NULL) {
- i = 0;
- encodings = mbfl_get_supported_encodings();
- while ((encoding = encodings[i++]) != NULL) {
- if (strcmp(encoding->name, name) != 0){ continue; }
-
- array_init(return_value);
- if (encoding->aliases != NULL) {
- j = 0;
- while ((*encoding->aliases)[j] != NULL) {
- add_next_index_string(return_value, (char *)(*encoding->aliases)[j], 1);
- j++;
- }
- }
-
- break;
- }
- } else {
- RETURN_FALSE;
- }
- }
-}
-/* }}} */
-
-/* {{{ proto mixed mb_list_mime_names([string encoding])
- Returns an array or string of all supported mime names */
-PHP_FUNCTION(mb_list_mime_names)
-{
- const mbfl_encoding **encodings;
- const mbfl_encoding *encoding;
- enum mbfl_no_encoding no_encoding;
- int i;
- char *name = NULL;
- int name_len;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &name, &name_len) == FAILURE) {
- RETURN_FALSE;
- }
-
- if (name == NULL) {
- array_init(return_value);
- i = 0;
- encodings = mbfl_get_supported_encodings();
- while ((encoding = encodings[i++]) != NULL) {
- if(encoding->mime_name != NULL) {
- add_assoc_string(return_value, (char *) encoding->name, (char *) encoding->mime_name, 1);
- } else{
- add_assoc_string(return_value, (char *) encoding->name, "", 1);
- }
- }
- } else {
- no_encoding = mbfl_name2no_encoding(name);
- if (no_encoding == mbfl_no_encoding_invalid) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", name);
- RETURN_FALSE;
- }
-
- name = (char *)mbfl_no_encoding2name(no_encoding);
- if (name != NULL) {
- i = 0;
- encodings = mbfl_get_supported_encodings();
- while ((encoding = encodings[i++]) != NULL) {
- if (strcmp(encoding->name, name) != 0){ continue; }
- if(encoding->mime_name != NULL) {
- RETURN_STRING((char *) encoding->mime_name, 1);
- }
- break;
- }
- RETURN_STRING("", 1);
- } else {
- RETURN_FALSE;
- }
- }
-}
-/* }}} */
-
/* {{{ proto string mb_encode_mimeheader(string str [, string charset [, string transfer-encoding [, string linefeed [, int indent]]]])
Converts the string to MIME "encoded-word" in the format of =?charset?(B|Q)?encoded_string?= */
PHP_FUNCTION(mb_encode_mimeheader)
@@ -2825,7 +2750,7 @@ PHP_FUNCTION(mb_encode_mimeheader)
long indent = 0;
mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
+ string.no_language = MBSTRG(language);
string.no_encoding = MBSTRG(current_internal_encoding);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|sssl", (char **)&string.val, &string.len, &charset_name, &charset_name_len, &trans_enc_name, &trans_enc_name_len, &linefeed, &linefeed_len, &indent) == FAILURE) {
@@ -2842,7 +2767,7 @@ PHP_FUNCTION(mb_encode_mimeheader)
RETURN_FALSE;
}
} else {
- const mbfl_language *lang = mbfl_no2language(MBSTRG(current_language));
+ const mbfl_language *lang = mbfl_no2language(MBSTRG(language));
if (lang != NULL) {
charset = lang->mail_charset;
transenc = lang->mail_header_encoding;
@@ -2874,7 +2799,7 @@ PHP_FUNCTION(mb_decode_mimeheader)
mbfl_string string, result, *ret;
mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
+ string.no_language = MBSTRG(language);
string.no_encoding = MBSTRG(current_internal_encoding);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", (char **)&string.val, &string.len) == FAILURE) {
@@ -2903,7 +2828,7 @@ PHP_FUNCTION(mb_convert_kana)
int encname_len;
mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
+ string.no_language = MBSTRG(language);
string.no_encoding = MBSTRG(current_internal_encoding);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ss", (char **)&string.val, &string.len, &optstr, &optstr_len, &encname, &encname_len) == FAILURE) {
@@ -3035,7 +2960,7 @@ PHP_FUNCTION(mb_convert_variables)
mbfl_string_init(&result);
from_encoding = MBSTRG(current_internal_encoding);
string.no_encoding = from_encoding;
- string.no_language = MBSTRG(current_language);
+ string.no_language = MBSTRG(language);
/* pre-conversion encoding */
elist = NULL;
@@ -3239,7 +3164,7 @@ php_mb_numericentity_exec(INTERNAL_FUNCTION_PARAMETERS, int type)
convert_to_string_ex(arg1);
mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
+ string.no_language = MBSTRG(language);
string.no_encoding = MBSTRG(current_internal_encoding);
string.val = (unsigned char *)Z_STRVAL_PP(arg1);
string.len = Z_STRLEN_PP(arg1);
@@ -3578,7 +3503,7 @@ PHP_FUNCTION(mb_send_mail)
tran_cs = mbfl_no_encoding_utf8;
head_enc = mbfl_no_encoding_base64;
body_enc = mbfl_no_encoding_base64;
- lang = mbfl_no2language(MBSTRG(current_language));
+ lang = mbfl_no2language(MBSTRG(language));
if (lang != NULL) {
tran_cs = lang->mail_charset;
head_enc = lang->mail_header_encoding;
@@ -3627,7 +3552,7 @@ PHP_FUNCTION(mb_send_mail)
if (strcasecmp(param_name, "charset") == 0) {
enum mbfl_no_encoding _tran_cs = tran_cs;
- charset = php_strtok_r(NULL, "= ", &tmp);
+ charset = php_strtok_r(NULL, "= \"", &tmp);
if (charset != NULL) {
_tran_cs = mbfl_name2no_encoding(charset);
}
@@ -3696,7 +3621,7 @@ PHP_FUNCTION(mb_send_mail)
/* Subject: */
if (subject != NULL && subject_len >= 0) {
- orig_str.no_language = MBSTRG(current_language);
+ orig_str.no_language = MBSTRG(language);
orig_str.val = (unsigned char *)subject;
orig_str.len = subject_len;
orig_str.no_encoding = MBSTRG(current_internal_encoding);
@@ -3715,7 +3640,7 @@ PHP_FUNCTION(mb_send_mail)
/* message body */
if (message != NULL) {
- orig_str.no_language = MBSTRG(current_language);
+ orig_str.no_language = MBSTRG(language);
orig_str.val = message;
orig_str.len = message_len;
orig_str.no_encoding = MBSTRG(current_internal_encoding);
@@ -3832,7 +3757,7 @@ PHP_FUNCTION(mb_get_info)
char *name;
const struct mb_overload_def *over_func;
zval *row1, *row2;
- const mbfl_language *lang = mbfl_no2language(MBSTRG(current_language));
+ const mbfl_language *lang = mbfl_no2language(MBSTRG(language));
enum mbfl_no_encoding *entry;
#ifdef ZEND_MULTIBYTE
zval *row3;
@@ -3885,7 +3810,7 @@ PHP_FUNCTION(mb_get_info)
} else {
add_assoc_string(return_value, "encoding_translation", "Off", 1);
}
- if ((name = (char *)mbfl_no_language2name(MBSTRG(current_language))) != NULL) {
+ if ((name = (char *)mbfl_no_language2name(MBSTRG(language))) != NULL) {
add_assoc_string(return_value, "language", name, 1);
}
n = MBSTRG(current_detect_order_list_size);
@@ -3980,7 +3905,7 @@ PHP_FUNCTION(mb_get_info)
RETVAL_STRING("Off", 1);
}
} else if (!strcasecmp("language", typ)) {
- if ((name = (char *)mbfl_no_language2name(MBSTRG(current_language))) != NULL) {
+ if ((name = (char *)mbfl_no_language2name(MBSTRG(language))) != NULL) {
RETVAL_STRING(name, 1);
}
} else if (!strcasecmp("detect_order", typ)) {
@@ -4071,14 +3996,12 @@ PHP_FUNCTION(mb_check_encoding)
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create converter");
RETURN_FALSE;
}
- mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode));
- mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar));
+ mbfl_buffer_converter_illegal_mode(convd, MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE);
+ mbfl_buffer_converter_illegal_substchar(convd, 0);
/* initialize string */
- mbfl_string_init(&string);
+ mbfl_string_init_set(&string, mbfl_no_language_neutral, no_encoding);
mbfl_string_init(&result);
- string.no_encoding = no_encoding;
- string.no_language = MBSTRG(current_language);
string.val = (unsigned char *)var;
string.len = var_len;
@@ -4086,18 +4009,13 @@ PHP_FUNCTION(mb_check_encoding)
illegalchars = mbfl_buffer_illegalchars(convd);
mbfl_buffer_converter_delete(convd);
- if (ret != NULL) {
- MBSTRG(illegalchars) += illegalchars;
- if (illegalchars == 0 && strncmp(string.val, ret->val, string.len) == 0) {
- efree(ret->val);
- RETURN_TRUE;
- } else {
- efree(ret->val);
- RETURN_FALSE;
- }
- } else {
- RETURN_FALSE;
- }
+ RETVAL_FALSE;
+ if (ret != NULL) {
+ if (illegalchars == 0 && string.len == result.len && memcmp(string.val, result.val, string.len) == 0) {
+ RETVAL_TRUE;
+ }
+ mbfl_string_clear(&result);
+ }
}
/* }}} */
@@ -4240,7 +4158,7 @@ MBSTRING_API int php_mb_gpc_encoding_converter(char **str, int *len, int num, co
mbfl_string_init(&string);
mbfl_string_init(&result);
string.no_encoding = from_encoding;
- string.no_language = MBSTRG(current_language);
+ string.no_language = MBSTRG(language);
for (i=0; i<num; i++){
string.val = (char*)str[i];
@@ -4321,7 +4239,7 @@ MBSTRING_API int php_mb_gpc_encoding_detector(char **arg_string, int *arg_length
}
mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
+ string.no_language = MBSTRG(language);
identd = mbfl_encoding_detector_new(elist, size, MBSTRG(strict_detection));
@@ -4359,9 +4277,9 @@ MBSTRING_API int php_mb_stripos(int mode, char *old_haystack, int old_haystack_l
mbfl_string_init(&haystack);
mbfl_string_init(&needle);
- haystack.no_language = MBSTRG(current_language);
+ haystack.no_language = MBSTRG(language);
haystack.no_encoding = MBSTRG(current_internal_encoding);
- needle.no_language = MBSTRG(current_language);
+ needle.no_language = MBSTRG(language);
needle.no_encoding = MBSTRG(current_internal_encoding);
do {
@@ -4391,9 +4309,21 @@ MBSTRING_API int php_mb_stripos(int mode, char *old_haystack, int old_haystack_l
break;
}
- if (offset < 0 || (unsigned long)offset > haystack.len) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset not contained in string.");
- break;
+ {
+ int haystack_char_len = mbfl_strlen(&haystack);
+
+ if (mode) {
+ if ((offset > 0 && offset > haystack_char_len) ||
+ (offset < 0 && -offset > haystack_char_len)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset is greater than the length of haystack string");
+ break;
+ }
+ } else {
+ if (offset < 0 || offset > haystack_char_len) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset not contained in string");
+ break;
+ }
+ }
}
n = mbfl_strpos(&haystack, &needle, offset, mode);
@@ -4407,7 +4337,7 @@ MBSTRING_API int php_mb_stripos(int mode, char *old_haystack, int old_haystack_l
efree(needle.val);
}
- return n;
+ return n;
}
/* }}} */
@@ -4487,7 +4417,7 @@ char* php_mb_encoding_detector(const char *arg_string, int arg_length, char *arg
}
mbfl_string_init(&string);
- string.no_language = MBSTRG(current_language);
+ string.no_language = MBSTRG(language);
string.val = (char*)arg_string;
string.len = arg_length;
ret = mbfl_identify_encoding_name(&string, elist, size, 0);
@@ -4525,7 +4455,7 @@ int php_mb_encoding_converter(char **to, int *to_length, const char *from,
mbfl_string_init(&string);
mbfl_string_init(&result);
string.no_encoding = from_encoding;
- string.no_language = MBSTRG(current_language);
+ string.no_language = MBSTRG(language);
string.val = (char*)from;
string.len = from_length;
@@ -4560,7 +4490,7 @@ int php_mb_oddlen(const char *string, int length, const char *encoding TSRMLS_DC
mbfl_string mb_string;
mbfl_string_init(&mb_string);
- mb_string.no_language = MBSTRG(current_language);
+ mb_string.no_language = MBSTRG(language);
mb_string.no_encoding = mbfl_name2no_encoding(encoding);
mb_string.val = (char*)string;
mb_string.len = length;
diff --git a/ext/mbstring/mbstring.h b/ext/mbstring/mbstring.h
index 02765d17f..6585f176d 100644
--- a/ext/mbstring/mbstring.h
+++ b/ext/mbstring/mbstring.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: mbstring.h,v 1.66.2.4.2.6 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: mbstring.h,v 1.66.2.4.2.9 2008/12/31 11:17:39 sebastian Exp $ */
/*
* PHP 4 Multibyte String module "mbstring" (currently only for Japanese)
@@ -118,8 +118,6 @@ PHP_FUNCTION(mb_strimwidth);
PHP_FUNCTION(mb_convert_encoding);
PHP_FUNCTION(mb_detect_encoding);
PHP_FUNCTION(mb_list_encodings);
-PHP_FUNCTION(mb_list_encodings_alias_names);
-PHP_FUNCTION(mb_list_mime_names);
PHP_FUNCTION(mb_convert_kana);
PHP_FUNCTION(mb_encode_mimeheader);
PHP_FUNCTION(mb_decode_mimeheader);
@@ -163,7 +161,6 @@ MBSTRING_API int php_mb_stripos(int mode, char *old_haystack, int old_haystack_l
ZEND_BEGIN_MODULE_GLOBALS(mbstring)
enum mbfl_no_language language;
- enum mbfl_no_language current_language;
enum mbfl_no_encoding internal_encoding;
enum mbfl_no_encoding current_internal_encoding;
#ifdef ZEND_MULTIBYTE
diff --git a/ext/mbstring/oniguruma/enc/utf16_be.c b/ext/mbstring/oniguruma/enc/utf16_be.c
index 536d107d6..33b520a23 100755
--- a/ext/mbstring/oniguruma/enc/utf16_be.c
+++ b/ext/mbstring/oniguruma/enc/utf16_be.c
@@ -2,7 +2,7 @@
utf16_be.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/ext/mbstring/oniguruma/enc/utf16_le.c b/ext/mbstring/oniguruma/enc/utf16_le.c
index cefcb60ad..94fa8c3a7 100755
--- a/ext/mbstring/oniguruma/enc/utf16_le.c
+++ b/ext/mbstring/oniguruma/enc/utf16_le.c
@@ -2,7 +2,7 @@
utf16_le.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/ext/mbstring/oniguruma/enc/utf32_be.c b/ext/mbstring/oniguruma/enc/utf32_be.c
index c1f066897..1ed127087 100755
--- a/ext/mbstring/oniguruma/enc/utf32_be.c
+++ b/ext/mbstring/oniguruma/enc/utf32_be.c
@@ -2,7 +2,7 @@
utf32_be.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/ext/mbstring/oniguruma/enc/utf32_le.c b/ext/mbstring/oniguruma/enc/utf32_le.c
index c10cbfa77..13fcd65d9 100755
--- a/ext/mbstring/oniguruma/enc/utf32_le.c
+++ b/ext/mbstring/oniguruma/enc/utf32_le.c
@@ -2,7 +2,7 @@
utf32_le.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/ext/mbstring/oniguruma/enc/utf8.c b/ext/mbstring/oniguruma/enc/utf8.c
index 42ce807f9..ec3e5f76b 100644
--- a/ext/mbstring/oniguruma/enc/utf8.c
+++ b/ext/mbstring/oniguruma/enc/utf8.c
@@ -2,7 +2,7 @@
utf8.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/ext/mbstring/oniguruma/oniguruma.h b/ext/mbstring/oniguruma/oniguruma.h
index 5fb6ec154..154ec5d74 100644
--- a/ext/mbstring/oniguruma/oniguruma.h
+++ b/ext/mbstring/oniguruma/oniguruma.h
@@ -4,7 +4,7 @@
oniguruma.h - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/ext/mbstring/oniguruma/regcomp.c b/ext/mbstring/oniguruma/regcomp.c
index a679a20b2..726f4b531 100644
--- a/ext/mbstring/oniguruma/regcomp.c
+++ b/ext/mbstring/oniguruma/regcomp.c
@@ -2,7 +2,7 @@
regcomp.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/ext/mbstring/oniguruma/regenc.h b/ext/mbstring/oniguruma/regenc.h
index 833dd2af4..c4ad678ca 100644
--- a/ext/mbstring/oniguruma/regenc.h
+++ b/ext/mbstring/oniguruma/regenc.h
@@ -4,7 +4,7 @@
regenc.h - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/ext/mbstring/oniguruma/regerror.c b/ext/mbstring/oniguruma/regerror.c
index 46dc6ae15..f0db90bb2 100644
--- a/ext/mbstring/oniguruma/regerror.c
+++ b/ext/mbstring/oniguruma/regerror.c
@@ -2,7 +2,7 @@
regerror.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/ext/mbstring/oniguruma/regexec.c b/ext/mbstring/oniguruma/regexec.c
index a1685c8c6..e34c8ea36 100644
--- a/ext/mbstring/oniguruma/regexec.c
+++ b/ext/mbstring/oniguruma/regexec.c
@@ -2,7 +2,7 @@
regexec.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/ext/mbstring/oniguruma/regext.c b/ext/mbstring/oniguruma/regext.c
index 1586012b8..e9ddbdabd 100755
--- a/ext/mbstring/oniguruma/regext.c
+++ b/ext/mbstring/oniguruma/regext.c
@@ -2,7 +2,7 @@
regext.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/ext/mbstring/oniguruma/reggnu.c b/ext/mbstring/oniguruma/reggnu.c
index fdc7974ae..449b09709 100644
--- a/ext/mbstring/oniguruma/reggnu.c
+++ b/ext/mbstring/oniguruma/reggnu.c
@@ -2,7 +2,7 @@
reggnu.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/ext/mbstring/oniguruma/regint.h b/ext/mbstring/oniguruma/regint.h
index 4eff34c3b..cd238bb51 100644
--- a/ext/mbstring/oniguruma/regint.h
+++ b/ext/mbstring/oniguruma/regint.h
@@ -4,7 +4,7 @@
regint.h - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/ext/mbstring/oniguruma/regparse.c b/ext/mbstring/oniguruma/regparse.c
index 26fc35b11..1f87b2d09 100644
--- a/ext/mbstring/oniguruma/regparse.c
+++ b/ext/mbstring/oniguruma/regparse.c
@@ -2,7 +2,7 @@
regparse.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/ext/mbstring/oniguruma/regparse.h b/ext/mbstring/oniguruma/regparse.h
index c0cdded7b..62e9326e9 100644
--- a/ext/mbstring/oniguruma/regparse.h
+++ b/ext/mbstring/oniguruma/regparse.h
@@ -4,7 +4,7 @@
regparse.h - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/ext/mbstring/oniguruma/regposix.c b/ext/mbstring/oniguruma/regposix.c
index 23ae95693..2362657d3 100644
--- a/ext/mbstring/oniguruma/regposix.c
+++ b/ext/mbstring/oniguruma/regposix.c
@@ -2,7 +2,7 @@
regposix.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/ext/mbstring/oniguruma/regsyntax.c b/ext/mbstring/oniguruma/regsyntax.c
index 542e599c8..54e320a6a 100644
--- a/ext/mbstring/oniguruma/regsyntax.c
+++ b/ext/mbstring/oniguruma/regsyntax.c
@@ -2,7 +2,7 @@
regsyntax.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/ext/mbstring/oniguruma/regversion.c b/ext/mbstring/oniguruma/regversion.c
index cbebdb026..c430bc5c4 100644
--- a/ext/mbstring/oniguruma/regversion.c
+++ b/ext/mbstring/oniguruma/regversion.c
@@ -2,7 +2,7 @@
regversion.c - Oniguruma (regular expression library)
**********************************************************************/
/*-
- * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2009 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -47,7 +47,7 @@ onig_copyright(void)
{
static char s[58];
- sprintf(s, "Oniguruma %d.%d.%d : Copyright (C) 2002-2008 K.Kosako",
+ sprintf(s, "Oniguruma %d.%d.%d : Copyright (C) 2002-2009 K.Kosako",
ONIGURUMA_VERSION_MAJOR,
ONIGURUMA_VERSION_MINOR,
ONIGURUMA_VERSION_TEENY);
diff --git a/ext/mbstring/php_mbregex.c b/ext/mbstring/php_mbregex.c
index be4921edd..4c61f13db 100644
--- a/ext/mbstring/php_mbregex.c
+++ b/ext/mbstring/php_mbregex.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_mbregex.c,v 1.53.2.1.2.7 2008/02/17 02:04:12 hirokawa Exp $ */
+/* $Id: php_mbregex.c,v 1.53.2.1.2.9 2008/12/31 11:17:39 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
@@ -66,6 +66,7 @@ void _php_mb_regex_globals_dtor(zend_mbstring_globals *pglobals TSRMLS_DC)
/* {{{ PHP_MINIT_FUNCTION(mb_regex) */
PHP_MINIT_FUNCTION(mb_regex)
{
+ onig_init();
return SUCCESS;
}
/* }}} */
@@ -73,6 +74,7 @@ PHP_MINIT_FUNCTION(mb_regex)
/* {{{ PHP_MSHUTDOWN_FUNCTION(mb_regex) */
PHP_MSHUTDOWN_FUNCTION(mb_regex)
{
+ onig_end();
return SUCCESS;
}
/* }}} */
diff --git a/ext/mbstring/php_mbregex.h b/ext/mbstring/php_mbregex.h
index e583b0063..11d4d8ba0 100644
--- a/ext/mbstring/php_mbregex.h
+++ b/ext/mbstring/php_mbregex.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_mbregex.h,v 1.12.2.1.2.2 2007/12/31 07:20:07 sebastian Exp $ */
+/* $Id: php_mbregex.h,v 1.12.2.1.2.3 2008/12/31 11:17:39 sebastian Exp $ */
#ifndef _PHP_MBREGEX_H
#define _PHP_MBREGEX_H
diff --git a/ext/mbstring/php_unicode.c b/ext/mbstring/php_unicode.c
index d90cabb84..ee22f4c9a 100644
--- a/ext/mbstring/php_unicode.c
+++ b/ext/mbstring/php_unicode.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -308,7 +308,7 @@ MBSTRING_API char *php_unicode_convert_case(int case_mode, char *srcstr, size_t
for (i = 0; i < unicode_len; i+=4) {
int res = php_unicode_is_prop(
BE_ARY_TO_UINT32(&unicode_ptr[i]),
- UC_MN|UC_ME|UC_CF|UC_LM|UC_SK|UC_LU|UC_LL|UC_LT, 0);
+ UC_MN|UC_ME|UC_CF|UC_LM|UC_SK|UC_LU|UC_LL|UC_LT|UC_PO|UC_OS, 0);
if (mode) {
if (res) {
UINT32_TO_BE_ARY(&unicode_ptr[i],
diff --git a/ext/mbstring/php_unicode.h b/ext/mbstring/php_unicode.h
index 1bbc77830..3df050009 100644
--- a/ext/mbstring/php_unicode.h
+++ b/ext/mbstring/php_unicode.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/mbstring/tests/bug43840.phpt b/ext/mbstring/tests/bug43840.phpt
new file mode 100644
index 000000000..626cd70f8
--- /dev/null
+++ b/ext/mbstring/tests/bug43840.phpt
@@ -0,0 +1,75 @@
+--TEST--
+Test mb_strpos() function : mb_strpos bounds check is byte count rather than a character count
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strpos') or die("skip mb_strpos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : int mb_strpos(string $haystack, string $needle [, int $offset [, string $encoding]])
+ * Description: Find position of first occurrence of a string within another
+ * Source code: ext/mbstring/mbstring.c
+ */
+
+/*
+ * mb_strpos bounds check is byte count rather than a character count:
+ * The multibyte string should be returning the same results as the ASCII string.
+ * Multibyte string was not returning error message until offset was passed the
+ * byte count of the string. Should return error message when passed character count.
+ */
+
+$offsets = array(20, 21, 22, 53, 54);
+$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=');
+$needle = base64_decode('44CC');
+
+foreach($offsets as $i) {
+ echo "\n-- Offset is $i --\n";
+ echo "--Multibyte String:--\n";
+ var_dump( mb_strpos($string_mb, $needle, $i, 'UTF-8') );
+ echo"--ASCII String:--\n";
+ var_dump(mb_strpos(b'This is na English ta', b'a', $i));
+}
+?>
+--EXPECTF--
+-- Offset is 20 --
+--Multibyte String:--
+int(20)
+--ASCII String:--
+int(20)
+
+-- Offset is 21 --
+--Multibyte String:--
+bool(false)
+--ASCII String:--
+bool(false)
+
+-- Offset is 22 --
+--Multibyte String:--
+
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
+bool(false)
+--ASCII String:--
+
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
+bool(false)
+
+-- Offset is 53 --
+--Multibyte String:--
+
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
+bool(false)
+--ASCII String:--
+
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
+bool(false)
+
+-- Offset is 54 --
+--Multibyte String:--
+
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
+bool(false)
+--ASCII String:--
+
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
+bool(false)
diff --git a/ext/mbstring/tests/bug43841.phpt b/ext/mbstring/tests/bug43841.phpt
new file mode 100644
index 000000000..9f2583286
--- /dev/null
+++ b/ext/mbstring/tests/bug43841.phpt
@@ -0,0 +1,85 @@
+--TEST--
+Test mb_strrpos() function : mb_strrpos offset is byte count for negative values
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strrpos') or die("skip mb_strrpos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : int mb_strrpos(string $haystack, string $needle [, int $offset [, string $encoding]])
+ * Description: Find position of last occurrence of a string within another
+ * Source code: ext/mbstring/mbstring.c
+ */
+
+/*
+ * Test that mb_strrpos offset is byte count for negative values (should be character count)
+ */
+
+$offsets = array(-25, -24, -13, -12);
+$string_mb =
+base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvv
+JfvvJjvvJnjgII=');
+$needle = base64_decode('44CC');
+
+foreach ($offsets as $i) {
+ echo "\n-- Offset is $i --\n";
+ echo "Multibyte String:\n";
+ var_dump( mb_strrpos($string_mb, $needle, $i, 'UTF-8') );
+ echo "ASCII String:\n";
+ echo "mb_strrpos:\n";
+ var_dump(mb_strrpos(b'This is na English ta', b'a', $i));
+ echo "strrpos:\n";
+ var_dump(strrpos(b'This is na English ta', b'a', $i));
+}
+?>
+
+--EXPECTF--
+
+-- Offset is -25 --
+Multibyte String:
+
+Warning: mb_strrpos(): Offset is greater than the length of haystack string in %s on line %d
+bool(false)
+ASCII String:
+mb_strrpos:
+
+Warning: mb_strrpos(): Offset is greater than the length of haystack string in %s on line %d
+bool(false)
+strrpos:
+
+Warning: strrpos(): Offset is greater than the length of haystack string in %s on line %d
+bool(false)
+
+-- Offset is -24 --
+Multibyte String:
+
+Warning: mb_strrpos(): Offset is greater than the length of haystack string in %s on line %d
+bool(false)
+ASCII String:
+mb_strrpos:
+
+Warning: mb_strrpos(): Offset is greater than the length of haystack string in %s on line %d
+bool(false)
+strrpos:
+
+Warning: strrpos(): Offset is greater than the length of haystack string in %s on line %d
+bool(false)
+
+-- Offset is -13 --
+Multibyte String:
+bool(false)
+ASCII String:
+mb_strrpos:
+bool(false)
+strrpos:
+bool(false)
+
+-- Offset is -12 --
+Multibyte String:
+int(9)
+ASCII String:
+mb_strrpos:
+int(9)
+strrpos:
+int(9)
diff --git a/ext/mbstring/tests/bug43993.phpt b/ext/mbstring/tests/bug43993.phpt
new file mode 100644
index 000000000..662045d3a
--- /dev/null
+++ b/ext/mbstring/tests/bug43993.phpt
@@ -0,0 +1,26 @@
+--TEST--
+Bug #43993 (mb_substr_count() behaves differently to substr_count() with overlapping needles)
+--SKIPIF--
+<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
+--FILE--
+<?php
+var_dump(mb_substr_count("abcabcabca", "abcabc"));
+var_dump(mb_substr_count("abcabcabca", "abc"));
+var_dump(mb_substr_count("abcabcabca", "cab"));
+var_dump(mb_substr_count("abcabcabca", "bca"));
+var_dump(mb_substr_count("ababababab", "ba"));
+var_dump(mb_substr_count("ababababab", "ab"));
+var_dump(mb_substr_count("ababababab", "bc"));
+var_dump(mb_substr_count("aaaaaaaaaa", "a"));
+var_dump(mb_substr_count("aaaaaaaaaa", "b"));
+?>
+--EXPECT--
+int(1)
+int(3)
+int(2)
+int(3)
+int(4)
+int(5)
+int(0)
+int(10)
+int(0)
diff --git a/ext/mbstring/tests/bug43994.phpt b/ext/mbstring/tests/bug43994.phpt
new file mode 100644
index 000000000..39a39f642
--- /dev/null
+++ b/ext/mbstring/tests/bug43994.phpt
@@ -0,0 +1,129 @@
+--TEST--
+Test mb_ereg() function : mb_ereg 'successfully' matching incorrectly
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_ereg') or die("skip mb_ereg() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : int mb_ereg(string $pattern, string $string [, array $registers])
+ * Description: Regular expression match for multibyte string
+ * Source code: ext/mbstring/php_mbregex.c
+ */
+
+/*
+ * mb_ereg 'successfully' matching incorrectly:
+ * Bug now seems to be fixed - error message is now generated when an 'empty'
+ * pattern is supplied to mb_ereg. Similar error message to ereg().
+ */
+
+$unset_var = 10;
+unset ($unset_var);
+$inputs = array(NULL, null, false, FALSE, "", '', @$undefined_var,
+@$unset_var);
+
+$iterator = 1;
+foreach($inputs as $input) {
+ if(@is_array($mb_regs)){
+ $mb_regs = '';
+ }
+ echo "\n-- Iteration $iterator --\n";
+ echo "Without \$regs arg:\n";
+ var_dump( mb_ereg($input, 'hello, world') );
+ echo "With \$regs arg:\n";
+ var_dump(mb_ereg($input, 'hello, world', $mb_regs));
+ var_dump($mb_regs);
+ $iterator++;
+};
+?>
+
+--EXPECTF----
+
+-- Iteration 1 --
+Without $regs arg:
+
+Warning: mb_ereg(): empty pattern in %s on line %d
+bool(false)
+With $regs arg:
+
+Warning: mb_ereg(): empty pattern in %s on line %d
+bool(false)
+NULL
+
+-- Iteration 2 --
+Without $regs arg:
+
+Warning: mb_ereg(): empty pattern in %s on line %d
+bool(false)
+With $regs arg:
+
+Warning: mb_ereg(): empty pattern in %s on line %d
+bool(false)
+NULL
+
+-- Iteration 3 --
+Without $regs arg:
+
+Warning: mb_ereg(): empty pattern in %s on line %d
+bool(false)
+With $regs arg:
+
+Warning: mb_ereg(): empty pattern in %s on line %d
+bool(false)
+NULL
+
+-- Iteration 4 --
+Without $regs arg:
+
+Warning: mb_ereg(): empty pattern in %s on line %d
+bool(false)
+With $regs arg:
+
+Warning: mb_ereg(): empty pattern in %s on line %d
+bool(false)
+NULL
+
+-- Iteration 5 --
+Without $regs arg:
+
+Warning: mb_ereg(): empty pattern in %s on line %d
+bool(false)
+With $regs arg:
+
+Warning: mb_ereg(): empty pattern in %s on line %d
+bool(false)
+NULL
+
+-- Iteration 6 --
+Without $regs arg:
+
+Warning: mb_ereg(): empty pattern in %s on line %d
+bool(false)
+With $regs arg:
+
+Warning: mb_ereg(): empty pattern in %s on line %d
+bool(false)
+NULL
+
+-- Iteration 7 --
+Without $regs arg:
+
+Warning: mb_ereg(): empty pattern in %s on line %d
+bool(false)
+With $regs arg:
+
+Warning: mb_ereg(): empty pattern in %s on line %d
+bool(false)
+NULL
+
+-- Iteration 8 --
+Without $regs arg:
+
+Warning: mb_ereg(): empty pattern in %s on line %d
+bool(false)
+With $regs arg:
+
+Warning: mb_ereg(): empty pattern in %s on line %d
+bool(false)
+NULL
diff --git a/ext/mbstring/tests/bug43998.phpt b/ext/mbstring/tests/bug43998.phpt
new file mode 100644
index 000000000..da5e599da
--- /dev/null
+++ b/ext/mbstring/tests/bug43998.phpt
@@ -0,0 +1,71 @@
+--TEST--
+Test mb_strtolower() function : Two error messages returned for incorrect encoding for mb_strto[upper|lower]
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strtolower') or die("skip mb_strtolower() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strto[lower|upper](string $sourcestring [, string $encoding])
+ * Description: Returns a [lower|upper]cased version of $sourcestring
+ * Source code: ext/mbstring/mbstring.c
+ */
+
+/*
+ * Two error messages returned for incorrect encoding for mb_strto[upper|lower]
+ * Bug now appears to be fixed
+ */
+
+$sourcestring = 'Hello, World';
+
+$inputs = array(12345, 12.3456789000E-10, true, false, "");
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( mb_strtolower($sourcestring, $input) );
+ var_dump( mb_strtoupper($sourcestring, $input) );
+ $iterator++;
+};
+?>
+--EXPECTF--
+
+-- Iteration 1 --
+
+Warning: mb_strtolower(): Unknown encoding "12345" in %s on line %d
+bool(false)
+
+Warning: mb_strtoupper(): Unknown encoding "12345" in %s on line %d
+bool(false)
+
+-- Iteration 2 --
+
+Warning: mb_strtolower(): Unknown encoding "1.23456789E-9" in %s on line %d
+bool(false)
+
+Warning: mb_strtoupper(): Unknown encoding "1.23456789E-9" in %s on line %d
+bool(false)
+
+-- Iteration 3 --
+
+Warning: mb_strtolower(): Unknown encoding "1" in %s on line %d
+bool(false)
+
+Warning: mb_strtoupper(): Unknown encoding "1" in %s on line %d
+bool(false)
+
+-- Iteration 4 --
+
+Warning: mb_strtolower(): Unknown encoding "" in %s on line %d
+bool(false)
+
+Warning: mb_strtoupper(): Unknown encoding "" in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+
+Warning: mb_strtolower(): Unknown encoding "" in %s on line %d
+bool(false)
+
+Warning: mb_strtoupper(): Unknown encoding "" in %s on line %d
+bool(false)
diff --git a/ext/mbstring/tests/bug45239.phpt b/ext/mbstring/tests/bug45239.phpt
new file mode 100644
index 000000000..8d8ef4831
--- /dev/null
+++ b/ext/mbstring/tests/bug45239.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Bug #45239 (encoding detector hangs with mbstring.strict_detection enabled)
+--INI--
+mbstring.strict_detection=1
+mbstring.http_input=UTF-8
+mbstring.internal_encoding=UTF-8
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+?>
+--FILE--
+<?php
+mb_internal_encoding("utf-8");
+mb_parse_str("a=%fc", $dummy);
+var_dump(mb_http_input());
+?>
+--EXPECT--
+string(5) "UTF-8"
diff --git a/ext/mbstring/tests/bug45722.phpt b/ext/mbstring/tests/bug45722.phpt
new file mode 100644
index 000000000..c05a010a8
--- /dev/null
+++ b/ext/mbstring/tests/bug45722.phpt
@@ -0,0 +1,8 @@
+--TEST--
+Bug #45722 (mb_check_encoding() crashes)
+--FILE--
+<?php
+var_dump(mb_check_encoding("&\xc2\xb7 TEST TEST TEST TEST TEST TEST", "HTML-ENTITIES"));
+?>
+--EXPECT--
+bool(false)
diff --git a/ext/mbstring/tests/bug45923.phpt b/ext/mbstring/tests/bug45923.phpt
new file mode 100644
index 000000000..2d184ab01
--- /dev/null
+++ b/ext/mbstring/tests/bug45923.phpt
@@ -0,0 +1,202 @@
+--TEST--
+Bug #45923 (mb_st[r]ripos() offset not handled correctly)
+--SKIPIF--
+<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
+--INI--
+mbstring.internal_encoding=UTF-8
+--FILE--
+<?php
+var_dump(strpos("abc abc abc", "abc", 0));
+var_dump(strpos("abc abc abc", "abc", 3));
+var_dump(strpos("abc abc abc", "abc", 6));
+var_dump(strpos("abc abc abc", "abc", 9));
+var_dump(strpos("abc abc abc", "abc", 11));
+var_dump(strpos("abc abc abc", "abc", 12));
+var_dump(strpos("abc abc abc", "abc", -1));
+var_dump(strpos("abc abc abc", "abc", -3));
+var_dump(strpos("abc abc abc", "abc", -6));
+
+var_dump(mb_strpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 0));
+var_dump(mb_strpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 3));
+var_dump(mb_strpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 6));
+var_dump(mb_strpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 9));
+var_dump(mb_strpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 11));
+var_dump(mb_strpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 12));
+var_dump(mb_strpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -1));
+var_dump(mb_strpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -3));
+var_dump(mb_strpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -6));
+
+var_dump(stripos("abc abc abc", "abc", 0));
+var_dump(stripos("abc abc abc", "abc", 3));
+var_dump(stripos("abc abc abc", "abc", 6));
+var_dump(stripos("abc abc abc", "abc", 9));
+var_dump(stripos("abc abc abc", "abc", 11));
+var_dump(stripos("abc abc abc", "abc", 12));
+var_dump(stripos("abc abc abc", "abc", -1));
+var_dump(stripos("abc abc abc", "abc", -3));
+var_dump(stripos("abc abc abc", "abc", -6));
+
+var_dump(mb_stripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 0));
+var_dump(mb_stripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 3));
+var_dump(mb_stripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 6));
+var_dump(mb_stripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 9));
+var_dump(mb_stripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 11));
+var_dump(mb_stripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 12));
+var_dump(mb_stripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -1));
+var_dump(mb_stripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -3));
+var_dump(mb_stripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -6));
+
+var_dump(strrpos("abc abc abc", "abc", 0));
+var_dump(strrpos("abc abc abc", "abc", 3));
+var_dump(strrpos("abc abc abc", "abc", 6));
+var_dump(strrpos("abc abc abc", "abc", 9));
+var_dump(strrpos("abc abc abc", "abc", 11));
+var_dump(strrpos("abc abc abc", "abc", 12));
+var_dump(strrpos("abc abc abc", "abc", -1));
+var_dump(strrpos("abc abc abc", "abc", -3));
+var_dump(strrpos("abc abc abc", "abc", -6));
+
+var_dump(mb_strrpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 0));
+var_dump(mb_strrpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 3));
+var_dump(mb_strrpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 6));
+var_dump(mb_strrpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 9));
+var_dump(mb_strrpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 11));
+var_dump(mb_strrpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 12));
+var_dump(mb_strrpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -1));
+var_dump(mb_strrpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -3));
+var_dump(mb_strrpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -6));
+
+var_dump(strripos("abc abc abc", "abc", 0));
+var_dump(strripos("abc abc abc", "abc", 3));
+var_dump(strripos("abc abc abc", "abc", 6));
+var_dump(strripos("abc abc abc", "abc", 9));
+var_dump(strripos("abc abc abc", "abc", 11));
+var_dump(strripos("abc abc abc", "abc", 12));
+var_dump(strripos("abc abc abc", "abc", -1));
+var_dump(strripos("abc abc abc", "abc", -3));
+var_dump(strripos("abc abc abc", "abc", -6));
+
+var_dump(mb_strripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 0));
+var_dump(mb_strripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 3));
+var_dump(mb_strripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 6));
+var_dump(mb_strripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 9));
+var_dump(mb_strripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 11));
+var_dump(mb_strripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 12));
+var_dump(mb_strripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -1));
+var_dump(mb_strripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -3));
+var_dump(mb_strripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -6));
+
+?>
+--EXPECTF--
+int(0)
+int(4)
+int(8)
+bool(false)
+bool(false)
+
+Warning: strpos(): Offset not contained in string in %s on line %d
+bool(false)
+
+Warning: strpos(): Offset not contained in string in %s on line %d
+bool(false)
+
+Warning: strpos(): Offset not contained in string in %s on line %d
+bool(false)
+
+Warning: strpos(): Offset not contained in string in %s on line %d
+bool(false)
+int(0)
+int(4)
+int(8)
+bool(false)
+bool(false)
+
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
+bool(false)
+
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
+bool(false)
+
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
+bool(false)
+
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
+bool(false)
+int(0)
+int(4)
+int(8)
+bool(false)
+bool(false)
+
+Warning: stripos(): Offset not contained in string in %s on line %d
+bool(false)
+
+Warning: stripos(): Offset not contained in string in %s on line %d
+bool(false)
+
+Warning: stripos(): Offset not contained in string in %s on line %d
+bool(false)
+
+Warning: stripos(): Offset not contained in string in %s on line %d
+bool(false)
+int(0)
+int(4)
+int(8)
+bool(false)
+bool(false)
+
+Warning: mb_stripos(): Offset not contained in string in %s on line %d
+bool(false)
+
+Warning: mb_stripos(): Offset not contained in string in %s on line %d
+bool(false)
+
+Warning: mb_stripos(): Offset not contained in string in %s on line %d
+bool(false)
+
+Warning: mb_stripos(): Offset not contained in string in %s on line %d
+bool(false)
+int(8)
+int(8)
+int(8)
+bool(false)
+bool(false)
+
+Warning: strrpos(): Offset is greater than the length of haystack string in %s on line %d
+bool(false)
+int(8)
+int(8)
+int(4)
+int(8)
+int(8)
+int(8)
+bool(false)
+bool(false)
+
+Warning: mb_strrpos(): Offset is greater than the length of haystack string in %s on line %d
+bool(false)
+int(8)
+int(8)
+int(4)
+int(8)
+int(8)
+int(8)
+bool(false)
+bool(false)
+
+Warning: strripos(): Offset is greater than the length of haystack string in %s on line %d
+bool(false)
+int(8)
+int(8)
+int(4)
+int(8)
+int(8)
+int(8)
+bool(false)
+bool(false)
+
+Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d
+bool(false)
+int(8)
+int(8)
+int(4)
diff --git a/ext/mbstring/tests/bug46843.phpt b/ext/mbstring/tests/bug46843.phpt
new file mode 100644
index 000000000..136195cfe
--- /dev/null
+++ b/ext/mbstring/tests/bug46843.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Bug #46843 (CP936 euro symbol is not converted properly)
+--SKIPIF--
+<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
+--FILE--
+<?php
+var_dump(bin2hex(mb_convert_encoding("\x80", 'UCS-2BE', 'CP936')));
+var_dump(bin2hex(mb_convert_encoding("\x20\xac", 'CP936', 'UCS-2BE')));
+?>
+--EXPECT--
+string(4) "20ac"
+string(2) "80"
diff --git a/ext/mbstring/tests/bug47399.phpt b/ext/mbstring/tests/bug47399.phpt
new file mode 100644
index 000000000..79618688a
--- /dev/null
+++ b/ext/mbstring/tests/bug47399.phpt
@@ -0,0 +1,523 @@
+--TEST--
+Bug #47399 (mb_check_encoding() returns true for some illegal SJIS characters)
+--FILE--
+<?php
+foreach (array("Shift_JIS", "CP932") as $enc) {
+ for ($a = 0; $a < 256; $a++) {
+ var_dump(mb_check_encoding("\x81".pack("c", $a), $enc));
+ }
+}
+?>
+--EXPECT--
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(false)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(false)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(false)
+bool(false)
+bool(false)
diff --git a/ext/mbstring/tests/mb_convert_encoding_variation1.phpt b/ext/mbstring/tests/mb_convert_encoding_variation1.phpt
new file mode 100644
index 000000000..74cd12869
--- /dev/null
+++ b/ext/mbstring/tests/mb_convert_encoding_variation1.phpt
@@ -0,0 +1,206 @@
+--TEST--
+Test mb_convert_encoding() function : usage variations - pass different data types as $to_encoding arg
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_convert_encoding') or die("skip mb_convert_encoding() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_convert_encoding(string $str, string $to_encoding [, mixed $from_encoding])
+ * Description: Returns converted string in desired encoding
+ * Source code: ext/mbstring/mbstring.c
+ */
+
+
+/*
+ * Pass different data types to $to_encoding arg to test behaviour of mb_convert_encoding
+ */
+
+echo "*** Testing mb_convert_encoding() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+mb_internal_encoding('utf-8');
+$sourcestring = b'hello, world';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+UTF-8
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $to_encoding argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+
+ // string data
+/*18*/ "UTF-8",
+ 'UTF-8',
+ $heredoc,
+
+ // object data
+/*21*/ new classA(),
+
+ // undefined data
+/*22*/ @$undefined_var,
+
+ // unset data
+/*23*/ @$unset_var,
+
+ // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of mb_convert_encoding()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(bin2hex( mb_convert_encoding($sourcestring, $input, 'ISO-8859-1') ));
+ $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_convert_encoding() : usage variations ***
+
+-- Iteration 1 --
+
+Warning: mb_convert_encoding(): Unknown encoding "0" in %s on line %d
+string(0) ""
+
+-- Iteration 2 --
+
+Warning: mb_convert_encoding(): Unknown encoding "1" in %s on line %d
+string(0) ""
+
+-- Iteration 3 --
+
+Warning: mb_convert_encoding(): Unknown encoding "12345" in %s on line %d
+string(0) ""
+
+-- Iteration 4 --
+
+Warning: mb_convert_encoding(): Unknown encoding "-2345" in %s on line %d
+string(0) ""
+
+-- Iteration 5 --
+
+Warning: mb_convert_encoding(): Unknown encoding "10.5" in %s on line %d
+string(0) ""
+
+-- Iteration 6 --
+
+Warning: mb_convert_encoding(): Unknown encoding "-10.5" in %s on line %d
+string(0) ""
+
+-- Iteration 7 --
+
+Warning: mb_convert_encoding(): Unknown encoding "123456789000" in %s on line %d
+string(0) ""
+
+-- Iteration 8 --
+
+Warning: mb_convert_encoding(): Unknown encoding "1.23456789E-9" in %s on line %d
+string(0) ""
+
+-- Iteration 9 --
+
+Warning: mb_convert_encoding(): Unknown encoding "0.5" in %s on line %d
+string(0) ""
+
+-- Iteration 10 --
+string(24) "68656c6c6f2c20776f726c64"
+
+-- Iteration 11 --
+string(24) "68656c6c6f2c20776f726c64"
+
+-- Iteration 12 --
+
+Warning: mb_convert_encoding(): Unknown encoding "1" in %s on line %d
+string(0) ""
+
+-- Iteration 13 --
+string(24) "68656c6c6f2c20776f726c64"
+
+-- Iteration 14 --
+
+Warning: mb_convert_encoding(): Unknown encoding "1" in %s on line %d
+string(0) ""
+
+-- Iteration 15 --
+string(24) "68656c6c6f2c20776f726c64"
+
+-- Iteration 16 --
+string(24) "68656c6c6f2c20776f726c64"
+
+-- Iteration 17 --
+string(24) "68656c6c6f2c20776f726c64"
+
+-- Iteration 18 --
+string(24) "68656c6c6f2c20776f726c64"
+
+-- Iteration 19 --
+string(24) "68656c6c6f2c20776f726c64"
+
+-- Iteration 20 --
+string(24) "68656c6c6f2c20776f726c64"
+
+-- Iteration 21 --
+
+Warning: mb_convert_encoding(): Unknown encoding "Class A object" in %s on line %d
+string(0) ""
+
+-- Iteration 22 --
+string(24) "68656c6c6f2c20776f726c64"
+
+-- Iteration 23 --
+string(24) "68656c6c6f2c20776f726c64"
+
+-- Iteration 24 --
+
+Warning: mb_convert_encoding(): Unknown encoding "Resource id #%d" in %s on line %d
+string(0) ""
+Done \ No newline at end of file
diff --git a/ext/mbstring/tests/mb_decode_mimeheader_basic.phpt b/ext/mbstring/tests/mb_decode_mimeheader_basic.phpt
new file mode 100644
index 000000000..5374c31c1
--- /dev/null
+++ b/ext/mbstring/tests/mb_decode_mimeheader_basic.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test mb_decode_mimeheader() function : basic functionality
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_decode_mimeheader') or die("skip mb_decode_mimeheader() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_decode_mimeheader(string string)
+ * Description: Decodes the MIME "encoded-word" in the string
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_decode_mimeheader() : basic functionality ***\n";
+mb_internal_encoding('utf-8');
+
+//the following encoded-words are identical and are UTF-8 Japanese.
+$a = "=?UTF-8?b?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=";
+$b = mb_decode_mimeheader($a);
+var_dump(bin2hex($b));
+
+$a = "=?UTF-8?Q?=E6=97=A5=E6=9C=AC=E8=AA=9E=E3=83=86=E3=82=AD=E3=82=B9=E3=83=88?=
+=?UTF-8?Q?=E3=81=A7=E3=81=99=E3=80=82?=";
+$b = mb_decode_mimeheader($a);
+var_dump(bin2hex($b));
+
+?>
+===DONE===
+--EXPECT--
+*** Testing mb_decode_mimeheader() : basic functionality ***
+string(60) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e38082"
+string(60) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e38082"
+===DONE===
diff --git a/ext/mbstring/tests/mb_decode_mimeheader_error.phpt b/ext/mbstring/tests/mb_decode_mimeheader_error.phpt
new file mode 100644
index 000000000..c40cdbd64
--- /dev/null
+++ b/ext/mbstring/tests/mb_decode_mimeheader_error.phpt
@@ -0,0 +1,42 @@
+--TEST--
+Test mb_decode_mimeheader() function : error conditions
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_decode_mimeheader') or die("skip mb_decode_mimeheader() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_decode_mimeheader(string string)
+ * Description: Decodes the MIME "encoded-word" in the string
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_decode_mimeheader() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing mb_decode_mimeheader() function with Zero arguments --\n";
+var_dump( mb_decode_mimeheader() );
+
+//Test mb_decode_mimeheader with one more than the expected number of arguments
+echo "\n-- Testing mb_decode_mimeheader() function with more than expected no. of arguments --\n";
+$string = 'string_val';
+$extra_arg = 10;
+var_dump( mb_decode_mimeheader($string, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_decode_mimeheader() : error conditions ***
+
+-- Testing mb_decode_mimeheader() function with Zero arguments --
+
+Warning: mb_decode_mimeheader() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing mb_decode_mimeheader() function with more than expected no. of arguments --
+
+Warning: mb_decode_mimeheader() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
diff --git a/ext/mbstring/tests/mb_decode_mimeheader_variation1.phpt b/ext/mbstring/tests/mb_decode_mimeheader_variation1.phpt
new file mode 100644
index 000000000..7a1c8868c
--- /dev/null
+++ b/ext/mbstring/tests/mb_decode_mimeheader_variation1.phpt
@@ -0,0 +1,209 @@
+--TEST--
+p8_only
+Title: Test mb_decode_mimeheader() function : usage variation
+Internal Reason: we output an extra warning message
+P8 only feature: Yes
+Author: D. Kelsey
+Date: 01/09/2008
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_decode_mimeheader') or die("skip mb_decode_mimeheader() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_decode_mimeheader(string string)
+ * Description: Decodes the MIME "encoded-word" in the string
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_decode_mimeheader() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for string
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( mb_decode_mimeheader($value) );
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_decode_mimeheader() : usage variation ***
+
+--int 0--
+string(1) "0"
+
+--int 1--
+string(1) "1"
+
+--int 12345--
+string(5) "12345"
+
+--int -12345--
+string(5) "-2345"
+
+--float 10.5--
+string(4) "10.5"
+
+--float -10.5--
+string(5) "-10.5"
+
+--float 12.3456789000e10--
+string(12) "123456789000"
+
+--float -12.3456789000e10--
+string(13) "-123456789000"
+
+--float .5--
+string(3) "0.5"
+
+--empty array--
+Error: 2 - mb_decode_mimeheader() expects parameter 1 to be string, array given, %s(%d)
+NULL
+
+--int indexed array--
+Error: 2 - mb_decode_mimeheader() expects parameter 1 to be string, array given, %s(%d)
+NULL
+
+--associative array--
+Error: 2 - mb_decode_mimeheader() expects parameter 1 to be string, array given, %s(%d)
+NULL
+
+--nested arrays--
+Error: 2 - mb_decode_mimeheader() expects parameter 1 to be string, array given, %s(%d)
+NULL
+
+--uppercase NULL--
+string(0) ""
+
+--lowercase null--
+string(0) ""
+
+--lowercase true--
+string(1) "1"
+
+--lowercase false--
+string(0) ""
+
+--uppercase TRUE--
+string(1) "1"
+
+--uppercase FALSE--
+string(0) ""
+
+--empty string DQ--
+string(0) ""
+
+--empty string SQ--
+string(0) ""
+
+--instance of classWithToString--
+string(14) "Class A object"
+
+--instance of classWithoutToString--
+Error: 2 - mb_decode_mimeheader() expects parameter 1 to be string, object given, %s(%d)
+NULL
+
+--undefined var--
+string(0) ""
+
+--unset var--
+string(0) ""
+
+--resource--
+Error: 2 - mb_decode_mimeheader() expects parameter 1 to be string, resource given, %s(%d)
+NULL
+===DONE===
diff --git a/ext/mbstring/tests/mb_decode_mimeheader_variation2.phpt b/ext/mbstring/tests/mb_decode_mimeheader_variation2.phpt
new file mode 100644
index 000000000..7527c9aa5
--- /dev/null
+++ b/ext/mbstring/tests/mb_decode_mimeheader_variation2.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test mb_decode_mimeheader() function : variation
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_decode_mimeheader') or die("skip mb_decode_mimeheader() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_decode_mimeheader(string string)
+ * Description: Decodes the MIME "encoded-word" in the string
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_decode_mimeheader() : variation ***\n";
+mb_internal_encoding('utf-8');
+
+//all the following are identical, we will convert to utf-8
+
+$encoded_words = array(
+"=?Shift_JIS?B?k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==?=",
+"=?Shift_JIS?Q?=93=FA=96=7B=8C=EA=83e=83L=83X=83g=82=C5=82=B7=81B=30=31=32?=
+=?Shift_JIS?Q?=33=34=82T=82U=82V=82W=82X=81B?=",
+
+"=?ISO-2022-JP?B?GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYbKEI=?=
+=?ISO-2022-JP?B?GyRCIzcjOCM5ISMbKEI=?=",
+"=?ISO-2022-JP?Q?=1B=24BF=7CK=5C=38l=25F=25-=25=39=25H=24G=24=39=1B=28B?=
+=?ISO-2022-JP?Q?=1B=24B!=23=1B=28B=30=31=32=33=34=1B=24B=23=35=1B=28B?=
+=?ISO-2022-JP?Q?=1B=24B=23=36=23=37=23=38=23=39!=23=1B=28B?=",
+
+"=?EUC-JP?B?xvzL3LjspcalraW5pcikx6S5oaMwMTIzNKO1o7ajt6O4o7mhow==?=",
+"=?EUC-JP?Q?=C6=FC=CB=DC=B8=EC=A5=C6=A5=AD=A5=B9=A5=C8=A4=C7=A4=B9=A1=A3?=
+=?EUC-JP?Q?=30=31=32=33=34=A3=B5=A3=B6=A3=B7=A3=B8=A3=B9=A1=A3?="
+ );
+
+ foreach ($encoded_words as $word) {
+ var_dump(bin2hex(mb_decode_mimeheader($word)));
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing mb_decode_mimeheader() : variation ***
+string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082"
+string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082"
+string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082"
+string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082"
+string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082"
+string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082"
+===DONE===
diff --git a/ext/mbstring/tests/mb_decode_mimeheader_variation3.phpt b/ext/mbstring/tests/mb_decode_mimeheader_variation3.phpt
new file mode 100644
index 000000000..968e76eaf
--- /dev/null
+++ b/ext/mbstring/tests/mb_decode_mimeheader_variation3.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Test mb_decode_mimeheader() function : variation
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_decode_mimeheader') or die("skip mb_decode_mimeheader() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_decode_mimeheader(string string)
+ * Description: Decodes the MIME "encoded-word" in the string
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_decode_mimeheader() : variation ***\n";
+mb_internal_encoding('iso-8859-7');
+
+//greek in UTF-8 to be converted to iso-8859-7
+$encoded_word = "=?UTF-8?B?zrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4TPhc+Gz4fPiM+J?=";
+var_dump(bin2hex(mb_decode_mimeheader($encoded_word)));
+
+
+?>
+===DONE===
+--EXPECT--
+*** Testing mb_decode_mimeheader() : variation ***
+string(48) "e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f3f4f5f6f7f8f9"
+===DONE===
diff --git a/ext/mbstring/tests/mb_encode_mimeheader_basic.phpt b/ext/mbstring/tests/mb_encode_mimeheader_basic.phpt
index fb0c28166..0487a194f 100644
--- a/ext/mbstring/tests/mb_encode_mimeheader_basic.phpt
+++ b/ext/mbstring/tests/mb_encode_mimeheader_basic.phpt
@@ -21,13 +21,22 @@ function_exists('mb_encode_mimeheader') or die("skip mb_encode_mimeheader() is n
*/
echo "*** Testing mb_encode_mimeheader() : basic ***\n";
-mb_internal_encoding('utf-8');
-$inputs = array('English' => 'This is an English string. 0123456789',
- 'Japanese' => base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC'),
+$english = array('English' => 'This is an English string. 0123456789');
+$nonEnglish = array('Japanese' => base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC'),
'Greek' => base64_decode('zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg=='));
-foreach ($inputs as $lang => $input) {
+foreach ($english as $lang => $input) {
+ echo "\nLanguage: $lang\n";
+ echo "-- Base 64: --\n";
+ var_dump(mb_encode_mimeheader($input, 'UTF-8', 'B'));
+ echo "-- Quoted-Printable --\n";
+ var_dump(mb_encode_mimeheader($input, 'UTF-8', 'Q'));
+}
+
+mb_internal_encoding('utf-8');
+
+foreach ($nonEnglish as $lang => $input) {
echo "\nLanguage: $lang\n";
echo "-- Base 64: --\n";
var_dump(mb_encode_mimeheader($input, 'UTF-8', 'B'));
diff --git a/ext/mbstring/tests/mb_encode_mimeheader_basic2.phpt b/ext/mbstring/tests/mb_encode_mimeheader_basic2.phpt
new file mode 100644
index 000000000..cd52fa526
--- /dev/null
+++ b/ext/mbstring/tests/mb_encode_mimeheader_basic2.phpt
@@ -0,0 +1,73 @@
+--TEST--
+Test mb_encode_mimeheader() function : basic functionality
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_encode_mimeheader') or die("skip mb_encode_mimeheader() is not available in this build");
+?>
+
+--FILE--
+<?php
+/* Prototype : string mb_encode_mimeheader(string $str [, string $charset
+ * [, string $transfer-encoding [, string $linefeed [, int $indent]]]])
+ * Description: Converts the string to MIME "encoded-word" in the format of =?charset?(B|Q)?encoded_string?=
+ * Source code: ext/mbstring/mbstring.c
+ */
+
+/*
+ * Test mb_encode_header() with different strings
+ */
+
+echo "*** Testing mb_encode_mimeheader() : basic2 ***\n";
+
+//All strings are the same when displayed in their respective encodings
+$sjis_string = base64_decode('k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==');
+$jis_string = base64_decode('GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==');
+$euc_jp_string = base64_decode('xvzL3LjspcalraW5pcikx6S5oaMwMTIzNKO1o7ajt6O4o7mhow==');
+
+$inputs = array('SJIS' => $sjis_string,
+ 'JIS' => $jis_string,
+ 'EUC_JP' => $euc_jp_string);
+
+foreach ($inputs as $lang => $input) {
+ echo "\nLanguage: $lang\n";
+ echo "-- Base 64: --\n";
+ mb_internal_encoding($lang);
+ $outEncoding = "UTF-8";
+ var_dump(mb_encode_mimeheader($input, $outEncoding, 'B'));
+ echo "-- Quoted-Printable --\n";
+ var_dump(mb_encode_mimeheader($input, $outEncoding, 'Q'));
+}
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_encode_mimeheader() : basic2 ***
+
+Language: SJIS
+-- Base 64: --
+string(99) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJc=?=
+ =?UTF-8?B?77yY77yZ44CC?="
+-- Quoted-Printable --
+string(201) "=?UTF-8?Q?=E6=97=A5=E6=9C=AC=E8=AA=9E=E3=83=86=E3=82=AD=E3=82=B9=E3=83=88?=
+ =?UTF-8?Q?=E3=81=A7=E3=81=99=E3=80=82=30=31=32=33=34=EF=BC=95=EF=BC=96?=
+ =?UTF-8?Q?=EF=BC=97=EF=BC=98=EF=BC=99=E3=80=82?="
+
+Language: JIS
+-- Base 64: --
+string(99) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJc=?=
+ =?UTF-8?B?77yY77yZ44CC?="
+-- Quoted-Printable --
+string(201) "=?UTF-8?Q?=E6=97=A5=E6=9C=AC=E8=AA=9E=E3=83=86=E3=82=AD=E3=82=B9=E3=83=88?=
+ =?UTF-8?Q?=E3=81=A7=E3=81=99=E3=80=82=30=31=32=33=34=EF=BC=95=EF=BC=96?=
+ =?UTF-8?Q?=EF=BC=97=EF=BC=98=EF=BC=99=E3=80=82?="
+
+Language: EUC_JP
+-- Base 64: --
+string(99) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJc=?=
+ =?UTF-8?B?77yY77yZ44CC?="
+-- Quoted-Printable --
+string(201) "=?UTF-8?Q?=E6=97=A5=E6=9C=AC=E8=AA=9E=E3=83=86=E3=82=AD=E3=82=B9=E3=83=88?=
+ =?UTF-8?Q?=E3=81=A7=E3=81=99=E3=80=82=30=31=32=33=34=EF=BC=95=EF=BC=96?=
+ =?UTF-8?Q?=EF=BC=97=EF=BC=98=EF=BC=99=E3=80=82?="
+Done
diff --git a/ext/mbstring/tests/mb_encode_mimeheader_basic3.phpt b/ext/mbstring/tests/mb_encode_mimeheader_basic3.phpt
new file mode 100644
index 000000000..b2f0c8b7d
--- /dev/null
+++ b/ext/mbstring/tests/mb_encode_mimeheader_basic3.phpt
@@ -0,0 +1,69 @@
+--TEST--
+Test mb_encode_mimeheader() function : basic functionality
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_encode_mimeheader') or die("skip mb_encode_mimeheader() is not available in this build");
+?>
+
+--FILE--
+<?php
+/* Prototype : string mb_encode_mimeheader(string $str [, string $charset
+ * [, string $transfer-encoding [, string $linefeed [, int $indent]]]])
+ * Description: Converts the string to MIME "encoded-word" in the format of =?charset?(B|Q)?encoded_string?=
+ * Source code: ext/mbstring/mbstring.c
+ */
+
+/*
+ * Test mb_encode_header() with different strings
+ */
+
+echo "*** Testing mb_encode_mimeheader() : basic2 ***\n";
+
+//All strings are the same when displayed in their respective encodings
+$sjis_string = base64_decode('k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==');
+$jis_string = base64_decode('GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==');
+$euc_jp_string = base64_decode('xvzL3LjspcalraW5pcikx6S5oaMwMTIzNKO1o7ajt6O4o7mhow==');
+
+$inputs = array('SJIS' => $sjis_string,
+ 'JIS' => $jis_string,
+ 'EUC_JP' => $euc_jp_string);
+
+foreach ($inputs as $lang => $input) {
+ echo "\nLanguage: $lang\n";
+ echo "-- Base 64: --\n";
+ mb_internal_encoding($lang);
+ $outEncoding = $lang;
+ var_dump(mb_encode_mimeheader($input, $outEncoding, 'B'));
+ echo "-- Quoted-Printable --\n";
+ var_dump(mb_encode_mimeheader($input, $outEncoding, 'Q'));
+}
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_encode_mimeheader() : basic2 ***
+
+Language: SJIS
+-- Base 64: --
+string(68) "=?Shift_JIS?B?k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==?="
+-- Quoted-Printable --
+string(124) "=?Shift_JIS?Q?=93=FA=96=7B=8C=EA=83e=83L=83X=83g=82=C5=82=B7=81B=30=31=32?=
+ =?Shift_JIS?Q?=33=34=82T=82U=82V=82W=82X=81B?="
+
+Language: JIS
+-- Base 64: --
+string(115) "=?ISO-2022-JP?B?GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYbKEI=?=
+ =?ISO-2022-JP?B?GyRCIzcjOCM5ISMbKEI=?="
+-- Quoted-Printable --
+string(209) "=?ISO-2022-JP?Q?=1B=24BF=7CK=5C=38l=25F=25-=25=39=25H=24G=24=39=1B=28B?=
+ =?ISO-2022-JP?Q?=1B=24B!=23=1B=28B=30=31=32=33=34=1B=24B=23=35=1B=28B?=
+ =?ISO-2022-JP?Q?=1B=24B=23=36=23=37=23=38=23=39!=23=1B=28B?="
+
+Language: EUC_JP
+-- Base 64: --
+string(65) "=?EUC-JP?B?xvzL3LjspcalraW5pcikx6S5oaMwMTIzNKO1o7ajt6O4o7mhow==?="
+-- Quoted-Printable --
+string(140) "=?EUC-JP?Q?=C6=FC=CB=DC=B8=EC=A5=C6=A5=AD=A5=B9=A5=C8=A4=C7=A4=B9=A1=A3?=
+ =?EUC-JP?Q?=30=31=32=33=34=A3=B5=A3=B6=A3=B7=A3=B8=A3=B9=A1=A3?="
+Done
diff --git a/ext/mbstring/tests/mb_encode_mimeheader_indent.phpt b/ext/mbstring/tests/mb_encode_mimeheader_indent.phpt
new file mode 100644
index 000000000..11fe23f53
--- /dev/null
+++ b/ext/mbstring/tests/mb_encode_mimeheader_indent.phpt
@@ -0,0 +1,901 @@
+--TEST--
+Test mb_encode_mimeheader() function : basic functionality, indent
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_encode_mimeheader') or die("skip mb_encode_mimeheader() is not available in this build");
+?>
+
+--FILE--
+<?php
+/* Prototype : string mb_encode_mimeheader
+ * (string $str [, string $charset [, string $transfer_encoding [, string $linefeed [, int $indent]]]])
+ * Description: Converts the string to MIME "encoded-word" in the format of =?charset?(B|Q)?encoded_string?=
+ * Source code: ext/mbstring/mbstring.c
+ */
+
+/*
+ * Pass different data types to $indent argument to see how mb_encode_mimeheader() behaves
+ */
+
+echo "*** Testing mb_encode_mimeheader() : indent ***\n";
+
+mb_internal_encoding('utf-8');
+
+// Initialise function arguments not being substituted
+$str = base64_decode('zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==');
+$charset = 'utf-8';
+$linefeed = "\r\n";
+
+for ($i = 0; $i < 100; $i++) {
+ echo "\n-- Iteration $i --\n";
+ var_dump( mb_encode_mimeheader($str, $charset, "B", $linefeed, $i));
+ var_dump( mb_encode_mimeheader($str, $charset, "Q", $linefeed, $i));
+};
+echo "Done";
+?>
+--EXPECT--
+*** Testing mb_encode_mimeheader() : indent ***
+
+-- Iteration 0 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 1 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 2 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 3 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 4 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrU=?=
+ =?UTF-8?B?zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9?=
+ =?UTF-8?Q?=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA?=
+ =?UTF-8?Q?=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36?=
+ =?UTF-8?Q?=37=38=39=2E?="
+
+-- Iteration 5 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrU=?=
+ =?UTF-8?B?zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9?=
+ =?UTF-8?Q?=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA?=
+ =?UTF-8?Q?=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36?=
+ =?UTF-8?Q?=37=38=39=2E?="
+
+-- Iteration 6 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrU=?=
+ =?UTF-8?B?zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9?=
+ =?UTF-8?Q?=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA?=
+ =?UTF-8?Q?=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36?=
+ =?UTF-8?Q?=37=38=39=2E?="
+
+-- Iteration 7 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrU=?=
+ =?UTF-8?B?zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1?=
+ =?UTF-8?Q?=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20?=
+ =?UTF-8?Q?=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34?=
+ =?UTF-8?Q?=35=36=37=38=39=2E?="
+
+-- Iteration 8 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66?=
+ =?UTF-8?B?zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1?=
+ =?UTF-8?Q?=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20?=
+ =?UTF-8?Q?=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34?=
+ =?UTF-8?Q?=35=36=37=38=39=2E?="
+
+-- Iteration 9 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66?=
+ =?UTF-8?B?zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1?=
+ =?UTF-8?Q?=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20?=
+ =?UTF-8?Q?=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34?=
+ =?UTF-8?Q?=35=36=37=38=39=2E?="
+
+-- Iteration 10 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66?=
+ =?UTF-8?B?zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1?=
+ =?UTF-8?Q?=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20?=
+ =?UTF-8?Q?=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34?=
+ =?UTF-8?Q?=35=36=37=38=39=2E?="
+
+-- Iteration 11 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66?=
+ =?UTF-8?B?zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1?=
+ =?UTF-8?Q?=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20?=
+ =?UTF-8?Q?=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34?=
+ =?UTF-8?Q?=35=36=37=38=39=2E?="
+
+-- Iteration 12 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+M?=
+ =?UTF-8?B?IM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1?=
+ =?UTF-8?Q?=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20?=
+ =?UTF-8?Q?=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34?=
+ =?UTF-8?Q?=35=36=37=38=39=2E?="
+
+-- Iteration 13 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+M?=
+ =?UTF-8?B?IM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD?=
+ =?UTF-8?Q?=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C?=
+ =?UTF-8?Q?=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33?=
+ =?UTF-8?Q?=34=35=36=37=38=39=2E?="
+
+-- Iteration 14 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+M?=
+ =?UTF-8?B?IM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD?=
+ =?UTF-8?Q?=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C?=
+ =?UTF-8?Q?=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33?=
+ =?UTF-8?Q?=34=35=36=37=38=39=2E?="
+
+-- Iteration 15 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+M?=
+ =?UTF-8?B?IM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD?=
+ =?UTF-8?Q?=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C?=
+ =?UTF-8?Q?=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33?=
+ =?UTF-8?Q?=34=35=36=37=38=39=2E?="
+
+-- Iteration 16 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrk=?=
+ =?UTF-8?B?zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD?=
+ =?UTF-8?Q?=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C?=
+ =?UTF-8?Q?=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33?=
+ =?UTF-8?Q?=34=35=36=37=38=39=2E?="
+
+-- Iteration 17 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrk=?=
+ =?UTF-8?B?zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD?=
+ =?UTF-8?Q?=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C?=
+ =?UTF-8?Q?=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33?=
+ =?UTF-8?Q?=34=35=36=37=38=39=2E?="
+
+-- Iteration 18 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrk=?=
+ =?UTF-8?B?zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD?=
+ =?UTF-8?Q?=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C?=
+ =?UTF-8?Q?=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33?=
+ =?UTF-8?Q?=34=35=36=37=38=39=2E?="
+
+-- Iteration 19 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrk=?=
+ =?UTF-8?B?zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF?=
+ =?UTF-8?Q?=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA?=
+ =?UTF-8?Q?=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31?=
+ =?UTF-8?Q?=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 20 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869?=
+ =?UTF-8?B?zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF?=
+ =?UTF-8?Q?=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA?=
+ =?UTF-8?Q?=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31?=
+ =?UTF-8?Q?=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 21 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869?=
+ =?UTF-8?B?zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF?=
+ =?UTF-8?Q?=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA?=
+ =?UTF-8?Q?=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31?=
+ =?UTF-8?Q?=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 22 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869?=
+ =?UTF-8?B?zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF?=
+ =?UTF-8?Q?=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA?=
+ =?UTF-8?Q?=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31?=
+ =?UTF-8?Q?=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 23 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869?=
+ =?UTF-8?B?zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF?=
+ =?UTF-8?Q?=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA?=
+ =?UTF-8?Q?=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31?=
+ =?UTF-8?Q?=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 24 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrs=?=
+ =?UTF-8?B?zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF?=
+ =?UTF-8?Q?=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA?=
+ =?UTF-8?Q?=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31?=
+ =?UTF-8?Q?=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 25 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrs=?=
+ =?UTF-8?B?zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9?=
+ =?UTF-8?Q?=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20?=
+ =?UTF-8?Q?=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 26 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrs=?=
+ =?UTF-8?B?zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9?=
+ =?UTF-8?Q?=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20?=
+ =?UTF-8?Q?=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 27 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrs=?=
+ =?UTF-8?B?zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9?=
+ =?UTF-8?Q?=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20?=
+ =?UTF-8?Q?=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 28 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67?=
+ =?UTF-8?B?zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9?=
+ =?UTF-8?Q?=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20?=
+ =?UTF-8?Q?=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 29 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67?=
+ =?UTF-8?B?zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9?=
+ =?UTF-8?Q?=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20?=
+ =?UTF-8?Q?=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 30 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67?=
+ =?UTF-8?B?zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9?=
+ =?UTF-8?Q?=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20?=
+ =?UTF-8?Q?=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 31 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67?=
+ =?UTF-8?B?zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20?=
+ =?UTF-8?Q?=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD?=
+ =?UTF-8?Q?=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF?=
+ =?UTF-8?Q?=2E=20=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 32 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSA=?=
+ =?UTF-8?B?zrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20?=
+ =?UTF-8?Q?=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD?=
+ =?UTF-8?Q?=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF?=
+ =?UTF-8?Q?=2E=20=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 33 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSA=?=
+ =?UTF-8?B?zrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20?=
+ =?UTF-8?Q?=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD?=
+ =?UTF-8?Q?=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF?=
+ =?UTF-8?Q?=2E=20=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 34 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSA=?=
+ =?UTF-8?B?zrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20?=
+ =?UTF-8?Q?=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD?=
+ =?UTF-8?Q?=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF?=
+ =?UTF-8?Q?=2E=20=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 35 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSA=?=
+ =?UTF-8?B?zrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20?=
+ =?UTF-8?Q?=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD?=
+ =?UTF-8?Q?=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF?=
+ =?UTF-8?Q?=2E=20=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 36 --
+string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrE=?=
+ =?UTF-8?B?zrkgzrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4?=
+ =?UTF-8?B?OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20?=
+ =?UTF-8?Q?=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD?=
+ =?UTF-8?Q?=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF?=
+ =?UTF-8?Q?=2E=20=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 37 --
+string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrE=?=
+ =?UTF-8?B?zrkgzrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4?=
+ =?UTF-8?B?OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C?=
+ =?UTF-8?Q?=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7?=
+ =?UTF-8?Q?=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD?=
+ =?UTF-8?Q?=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 38 --
+string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrE=?=
+ =?UTF-8?B?zrkgzrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4?=
+ =?UTF-8?B?OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C?=
+ =?UTF-8?Q?=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7?=
+ =?UTF-8?Q?=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD?=
+ =?UTF-8?Q?=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 39 --
+string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrE=?=
+ =?UTF-8?B?zrkgzrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4?=
+ =?UTF-8?B?OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C?=
+ =?UTF-8?Q?=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7?=
+ =?UTF-8?Q?=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD?=
+ =?UTF-8?Q?=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 40 --
+string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869?=
+ =?UTF-8?B?zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2?=
+ =?UTF-8?B?Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84?=
+ =?UTF-8?Q?=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB?=
+ =?UTF-8?Q?=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5?=
+ =?UTF-8?Q?=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 41 --
+string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869?=
+ =?UTF-8?B?zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2?=
+ =?UTF-8?B?Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84?=
+ =?UTF-8?Q?=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB?=
+ =?UTF-8?Q?=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5?=
+ =?UTF-8?Q?=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 42 --
+string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869?=
+ =?UTF-8?B?zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2?=
+ =?UTF-8?B?Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84?=
+ =?UTF-8?Q?=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB?=
+ =?UTF-8?Q?=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5?=
+ =?UTF-8?Q?=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 43 --
+string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869?=
+ =?UTF-8?B?zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2?=
+ =?UTF-8?B?Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84?=
+ =?UTF-8?Q?=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB?=
+ =?UTF-8?Q?=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5?=
+ =?UTF-8?Q?=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 44 --
+string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrU=?=
+ =?UTF-8?B?zq/Ovc6xzrkgzrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEy?=
+ =?UTF-8?B?MzQ1Njc4OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84?=
+ =?UTF-8?Q?=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB?=
+ =?UTF-8?Q?=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5?=
+ =?UTF-8?Q?=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 45 --
+string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrU=?=
+ =?UTF-8?B?zq/Ovc6xzrkgzrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEy?=
+ =?UTF-8?B?MzQ1Njc4OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84?=
+ =?UTF-8?Q?=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB?=
+ =?UTF-8?Q?=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5?=
+ =?UTF-8?Q?=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 46 --
+string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrU=?=
+ =?UTF-8?B?zq/Ovc6xzrkgzrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEy?=
+ =?UTF-8?B?MzQ1Njc4OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85?=
+ =?UTF-8?Q?=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB?=
+ =?UTF-8?Q?=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC?=
+ =?UTF-8?Q?=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 47 --
+string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrU=?=
+ =?UTF-8?B?zq/Ovc6xzrkgzrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEy?=
+ =?UTF-8?B?MzQ1Njc4OS4=?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85?=
+ =?UTF-8?Q?=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB?=
+ =?UTF-8?Q?=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC?=
+ =?UTF-8?Q?=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 48 --
+string(130) "=?UTF-8?B?zpHPhc+Ez4wg?=
+ =?UTF-8?B?zrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAw?=
+ =?UTF-8?B?MTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85?=
+ =?UTF-8?Q?=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB?=
+ =?UTF-8?Q?=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC?=
+ =?UTF-8?Q?=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 49 --
+string(130) "=?UTF-8?B?zpHPhc+Ez4wg?=
+ =?UTF-8?B?zrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAw?=
+ =?UTF-8?B?MTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85?=
+ =?UTF-8?Q?=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB?=
+ =?UTF-8?Q?=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC?=
+ =?UTF-8?Q?=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 50 --
+string(130) "=?UTF-8?B?zpHPhc+Ez4wg?=
+ =?UTF-8?B?zrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAw?=
+ =?UTF-8?B?MTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85?=
+ =?UTF-8?Q?=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB?=
+ =?UTF-8?Q?=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC?=
+ =?UTF-8?Q?=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?="
+
+-- Iteration 51 --
+string(118) "
+ =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(252) "
+ =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 52 --
+string(118) "
+ =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(252) "
+ =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 53 --
+string(118) "
+ =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(252) "
+ =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 54 --
+string(118) "
+ =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(252) "
+ =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 55 --
+string(118) "
+ =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(252) "
+ =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 56 --
+string(118) "
+ =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(252) "
+ =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 57 --
+string(118) "
+ =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(252) "
+ =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 58 --
+string(118) "
+ =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(252) "
+ =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 59 --
+string(118) "
+ =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(252) "
+ =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 60 --
+string(118) "
+ =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(252) "
+ =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 61 --
+string(118) "
+ =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(252) "
+ =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 62 --
+string(118) "
+ =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(252) "
+ =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 63 --
+string(118) "
+ =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(252) "
+ =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 64 --
+string(118) "
+ =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(252) "
+ =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 65 --
+string(118) "
+ =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(252) "
+ =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 66 --
+string(118) "
+ =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(252) "
+ =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 67 --
+string(118) "
+ =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(252) "
+ =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 68 --
+string(118) "
+ =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(252) "
+ =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 69 --
+string(118) "
+ =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(252) "
+ =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 70 --
+string(118) "
+ =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(252) "
+ =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 71 --
+string(118) "
+ =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(252) "
+ =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 72 --
+string(118) "
+ =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(252) "
+ =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 73 --
+string(118) "
+ =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(252) "
+ =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 74 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 75 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 76 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 77 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 78 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 79 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 80 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 81 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 82 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 83 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 84 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 85 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 86 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 87 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 88 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 89 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 90 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 91 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 92 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 93 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 94 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 95 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 96 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 97 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 98 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+
+-- Iteration 99 --
+string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=
+ =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?="
+string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?=
+ =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?=
+ =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?=
+ =?UTF-8?Q?=39=2E?="
+Done
+
diff --git a/ext/mbstring/tests/mb_encode_mimeheader_variation1.phpt b/ext/mbstring/tests/mb_encode_mimeheader_variation1.phpt
index f440e1d44..7b5bd3066 100644
--- a/ext/mbstring/tests/mb_encode_mimeheader_variation1.phpt
+++ b/ext/mbstring/tests/mb_encode_mimeheader_variation1.phpt
@@ -19,8 +19,6 @@ function_exists('mb_encode_mimeheader') or die("skip mb_encode_mimeheader() is n
echo "*** Testing mb_encode_mimeheader() : usage variations ***\n";
-mb_internal_encoding('utf-8');
-
// Initialise function arguments not being substituted
$charset = 'utf-8';
$transfer_encoding = 'B';
diff --git a/ext/mbstring/tests/mb_ereg.phpt b/ext/mbstring/tests/mb_ereg.phpt
index d069b2593..8fc5b94da 100644
--- a/ext/mbstring/tests/mb_ereg.phpt
+++ b/ext/mbstring/tests/mb_ereg.phpt
@@ -17,14 +17,13 @@ output_handler=
mb_regex_encoding( $test_enc );
$pat = mb_convert_encoding( $pat, $test_enc, $in_enc );
$str = mb_convert_encoding( $str, $test_enc, $in_enc );
-
- printf( "(%d)%s\n", mb_ereg( $pat, $str, $reg ), ( is_array( $reg )? mb_convert_encoding( implode( ' ', $reg ), $in_enc, $test_enc ) : '' ) );
+ printf( "(%d)%s\n", mb_ereg( $pat, $str, $reg ), ( is_array( $reg )? bin2hex(mb_convert_encoding( implode( b' ', $reg ), $in_enc, $test_enc )) : '' ) );
}
function do_tests( $enc ) {
- test_ereg( $enc, 'abc ([a-z]+) ([a-z]+) ([a-z]+)$', "abc def ghi jkl" );
- $pat = '([£á-£ú]+) ([ ¤¢-¤«]+)([¤«-¤Ê]+) ([¤ï-¤ó]+)$';
- test_ereg( $enc, $pat, '£á£â£ã ¤¢¤ª¤¤ ¤«¤³¤Ê ¤ï¤ñ¤ó' );
- test_ereg( $enc, $pat, '£í£ú£ø£æ£ð ¤¦¤ª¤« ¤­¤« ¤ò¤ð' );
+ test_ereg( $enc, b'abc ([a-z]+) ([a-z]+) ([a-z]+)$', b"abc def ghi jkl" );
+ $pat = b'([£á-£ú]+) ([ ¤¢-¤«]+)([¤«-¤Ê]+) ([¤ï-¤ó]+)$';
+ test_ereg( $enc, $pat, b'£á£â£ã ¤¢¤ª¤¤ ¤«¤³¤Ê ¤ï¤ñ¤ó' );
+ test_ereg( $enc, $pat, b'£í£ú£ø£æ£ð ¤¦¤ª¤« ¤­¤« ¤ò¤ð' );
}
foreach( $encs as $enc ) {
@@ -33,15 +32,15 @@ output_handler=
?>
--EXPECT--
-(15)abc def ghi jkl def ghi jkl
-(27)£á£â£ã ¤¢¤ª¤¤ ¤«¤³¤Ê ¤ï¤ñ¤ó £á£â£ã ¤¢¤ª¤¤ ¤« ¤³¤Ê ¤ï¤ñ¤ó
-(27)£í£ú£ø£æ£ð ¤¦¤ª¤« ¤­¤« ¤ò¤ð £í£ú£ø£æ£ð ¤¦¤ª¤« ¤­¤« ¤ò¤ð
-(15)abc def ghi jkl def ghi jkl
-(27)£á£â£ã ¤¢¤ª¤¤ ¤«¤³¤Ê ¤ï¤ñ¤ó £á£â£ã ¤¢¤ª¤¤ ¤« ¤³¤Ê ¤ï¤ñ¤ó
-(27)£í£ú£ø£æ£ð ¤¦¤ª¤« ¤­¤« ¤ò¤ð £í£ú£ø£æ£ð ¤¦¤ª¤« ¤­¤« ¤ò¤ð
-(15)abc def ghi jkl def ghi jkl
-(27)£á£â£ã ¤¢¤ª¤¤ ¤«¤³¤Ê ¤ï¤ñ¤ó £á£â£ã ¤¢¤ª¤¤ ¤« ¤³¤Ê ¤ï¤ñ¤ó
-(27)£í£ú£ø£æ£ð ¤¦¤ª¤« ¤­¤« ¤ò¤ð £í£ú£ø£æ£ð ¤¦¤ª¤« ¤­¤« ¤ò¤ð
-(15)abc def ghi jkl def ghi jkl
-(39)£á£â£ã ¤¢¤ª¤¤ ¤«¤³¤Ê ¤ï¤ñ¤ó £á£â£ã ¤¢¤ª¤¤ ¤« ¤³¤Ê ¤ï¤ñ¤ó
-(39)£í£ú£ø£æ£ð ¤¦¤ª¤« ¤­¤« ¤ò¤ð £í£ú£ø£æ£ð ¤¦¤ª¤« ¤­¤« ¤ò¤ð
+(15)6162632064656620676869206a6b6c2064656620676869206a6b6c
+(27)a3e1a3e2a3e320a4a2a4aaa4a420a4aba4b3a4ca20a4efa4f1a4f320a3e1a3e2a3e320a4a2a4aaa4a420a4ab20a4b3a4ca20a4efa4f1a4f3
+(27)a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab20a4ada4ab20a4f2a4f020a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab2020a4ada4ab20a4f2a4f0
+(15)6162632064656620676869206a6b6c2064656620676869206a6b6c
+(27)a3e1a3e2a3e320a4a2a4aaa4a420a4aba4b3a4ca20a4efa4f1a4f320a3e1a3e2a3e320a4a2a4aaa4a420a4ab20a4b3a4ca20a4efa4f1a4f3
+(27)a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab20a4ada4ab20a4f2a4f020a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab2020a4ada4ab20a4f2a4f0
+(15)6162632064656620676869206a6b6c2064656620676869206a6b6c
+(27)a3e1a3e2a3e320a4a2a4aaa4a420a4aba4b3a4ca20a4efa4f1a4f320a3e1a3e2a3e320a4a2a4aaa4a420a4ab20a4b3a4ca20a4efa4f1a4f3
+(27)a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab20a4ada4ab20a4f2a4f020a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab2020a4ada4ab20a4f2a4f0
+(15)6162632064656620676869206a6b6c2064656620676869206a6b6c
+(39)a3e1a3e2a3e320a4a2a4aaa4a420a4aba4b3a4ca20a4efa4f1a4f320a3e1a3e2a3e320a4a2a4aaa4a420a4ab20a4b3a4ca20a4efa4f1a4f3
+(39)a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab20a4ada4ab20a4f2a4f020a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab2020a4ada4ab20a4f2a4f0 \ No newline at end of file
diff --git a/ext/mbstring/tests/mb_ereg_basic.phpt b/ext/mbstring/tests/mb_ereg_basic.phpt
index 0bdaf74ee..db2822339 100644
--- a/ext/mbstring/tests/mb_ereg_basic.phpt
+++ b/ext/mbstring/tests/mb_ereg_basic.phpt
@@ -23,9 +23,9 @@ if(mb_regex_encoding('utf-8') == true) {
} else {
echo "Could not set regex encoding to utf-8\n";
}
-$string_ascii = 'This is an English string. 0123456789.';
-$regex_ascii1 = '(.*is)+.*\.[[:blank:]][0-9]{9}';
-$regex_ascii2 = '.*is+';
+$string_ascii = b'This is an English string. 0123456789.';
+$regex_ascii1 = b'(.*is)+.*\.[[:blank:]][0-9]{9}';
+$regex_ascii2 = b'.*is+';
$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=');
$regex_mb1 = base64_decode('KOaXpeacrOiqnikuKj8oWzEtOV0rKQ==');
@@ -37,9 +37,9 @@ var_dump(mb_ereg($regex_ascii1, $string_ascii));
var_dump(mb_ereg($regex_ascii2, $string_ascii));
echo "--With \$regs argument --\n";
var_dump(mb_ereg($regex_ascii1, $string_ascii, $regs_ascii1));
-var_dump($regs_ascii1);
+base64_encode_var_dump($regs_ascii1);
var_dump(mb_ereg($regex_ascii2, $string_ascii, $regs_ascii2));
-var_dump($regs_ascii2);
+base64_encode_var_dump($regs_ascii2);
echo "\n**-- Multibyte String --**\n";
echo "-- Without \$regs argument --\n";
@@ -76,7 +76,7 @@ function base64_encode_var_dump($regs) {
}
?>
---EXPECTF--
+--EXPECT--
*** Testing mb_ereg() : basic functionality ***
Regex encoding set to utf-8
@@ -88,14 +88,14 @@ int(1)
int(36)
array(2) {
[0]=>
- string(36) "This is an English string. 012345678"
+ string(48) "VGhpcyBpcyBhbiBFbmdsaXNoIHN0cmluZy4gMDEyMzQ1Njc4"
[1]=>
- string(17) "This is an Englis"
+ string(24) "VGhpcyBpcyBhbiBFbmdsaXM="
}
int(17)
array(1) {
[0]=>
- string(17) "This is an Englis"
+ string(24) "VGhpcyBpcyBhbiBFbmdsaXM="
}
**-- Multibyte String --**
diff --git a/ext/mbstring/tests/mb_ereg_error.phpt b/ext/mbstring/tests/mb_ereg_error.phpt
index 21216257c..3610aea4e 100644
--- a/ext/mbstring/tests/mb_ereg_error.phpt
+++ b/ext/mbstring/tests/mb_ereg_error.phpt
@@ -21,15 +21,15 @@ echo "*** Testing mb_ereg() : error conditions ***\n";
//Test mb_ereg with one more than the expected number of arguments
echo "\n-- Testing mb_ereg() function with more than expected no. of arguments --\n";
-$pattern = 'string_val';
-$string = 'string_val';
+$pattern = b'string_val';
+$string = b'string_val';
$registers = array(1, 2);
$extra_arg = 10;
var_dump( mb_ereg($pattern, $string, $registers, $extra_arg) );
// Testing mb_ereg with one less than the expected number of arguments
echo "\n-- Testing mb_ereg() function with less than expected no. of arguments --\n";
-$pattern = 'string_val';
+$pattern = b'string_val';
var_dump( mb_ereg($pattern) );
echo "Done";
diff --git a/ext/mbstring/tests/mb_ereg_match_basic.phpt b/ext/mbstring/tests/mb_ereg_match_basic.phpt
new file mode 100644
index 000000000..56710a93e
--- /dev/null
+++ b/ext/mbstring/tests/mb_ereg_match_basic.phpt
@@ -0,0 +1,59 @@
+--TEST--
+Test mb_ereg_match() function : basic functionality
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_ereg_match') or die("skip mb_ereg_match() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : bool mb_ereg_match(string $pattern, string $string [,string $option])
+ * Description: Regular expression match for multibyte string
+ * Source code: ext/mbstring/php_mbregex.c
+ */
+
+/*
+ * Test basic functionality of mb_ereg_match
+ */
+
+mb_internal_encoding('UTF-8');
+mb_regex_encoding('UTF-8');
+
+echo "*** Testing mb_ereg_match() : basic functionality ***\n";
+$string_ascii = b'abc def, 0123456789';
+$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=');
+
+//will return true as pattern matches from start of string
+echo "\n-- ASCII string 1 --\n";
+var_dump(mb_ereg_match(b'.*def', $string_ascii));
+
+//will return false as pattern would match half way through string
+echo "\n-- ASCII string 2 --\n";
+var_dump(mb_ereg_match(b'def', $string_ascii));
+
+echo "\n-- Multibyte string 1 --\n";
+$regex1 = base64_decode('5pel5pys6KqeKC4qKT9bMS05XSs=');
+var_dump(mb_ereg_match($regex1, $string_mb, b'i'));
+
+echo "\n-- Multibyte string 2 --\n";
+$regex2 = base64_decode('5LiW55WM');
+var_dump(mb_ereg_match($regex2, $string_mb));
+
+echo "Done";
+?>
+--EXPECTF--
+
+*** Testing mb_ereg_match() : basic functionality ***
+
+-- ASCII string 1 --
+bool(true)
+
+-- ASCII string 2 --
+bool(false)
+
+-- Multibyte string 1 --
+bool(true)
+
+-- Multibyte string 2 --
+bool(false)
+Done
diff --git a/ext/mbstring/tests/mb_ereg_match_error1.phpt b/ext/mbstring/tests/mb_ereg_match_error1.phpt
new file mode 100644
index 000000000..b36c68621
--- /dev/null
+++ b/ext/mbstring/tests/mb_ereg_match_error1.phpt
@@ -0,0 +1,58 @@
+--TEST--
+Test mb_ereg_match() function : error conditions - pass function incorrect number of arguments
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_ereg_match') or die("skip mb_ereg_match() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : bool mb_ereg_match(string $pattern, string $string [,string $option])
+ * Description: Regular expression match for multibyte string
+ * Source code: ext/mbstring/php_mbregex.c
+ */
+
+/*
+ * Test mb_ereg_match by passing an incorrect number of arguments
+ */
+
+echo "*** Testing mb_ereg_match() : error conditions ***\n";
+
+
+//Test mb_ereg_match with one more than the expected number of arguments
+echo "\n-- Testing mb_ereg_match() function with more than expected no. of arguments --\n";
+$pattern = b'string_val';
+$string = b'string_val';
+$option = 'string_val';
+$extra_arg = 10;
+var_dump( mb_ereg_match($pattern, $string, $option, $extra_arg) );
+
+// Testing mb_ereg_match with one less than the expected number of arguments
+echo "\n-- Testing mb_ereg_match() function with less than expected no. of arguments --\n";
+$pattern = b'string_val';
+var_dump( mb_ereg_match($pattern) );
+
+// Testing mb_ereg_match with zero arguments
+echo "\n-- Testing mb_ereg_match() function with zero arguments --\n";
+var_dump( mb_ereg_match() );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_ereg_match() : error conditions ***
+
+-- Testing mb_ereg_match() function with more than expected no. of arguments --
+
+Warning: mb_ereg_match() expects at most 3 parameters, 4 given in %s on line %d
+bool(false)
+
+-- Testing mb_ereg_match() function with less than expected no. of arguments --
+
+Warning: mb_ereg_match() expects at least 2 parameters, 1 given in %s on line %d
+bool(false)
+
+-- Testing mb_ereg_match() function with zero arguments --
+
+Warning: mb_ereg_match() expects at least 2 parameters, 0 given in %s on line %d
+bool(false)
+Done \ No newline at end of file
diff --git a/ext/mbstring/tests/mb_ereg_replace_basic.phpt b/ext/mbstring/tests/mb_ereg_replace_basic.phpt
new file mode 100644
index 000000000..5a07004d5
--- /dev/null
+++ b/ext/mbstring/tests/mb_ereg_replace_basic.phpt
@@ -0,0 +1,62 @@
+--TEST--
+Test mb_ereg_replace() function : basic
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_ereg_replace(string $pattern, string $replacement,
+ * string $string [, string o$ption])
+ * Description: Replace regular expression for multibyte string
+ * Source code: ext/mbstring/php_mbregex.c
+ */
+
+/*
+ * Test Basic Functionality of mb_ereg_replace()
+ */
+
+echo "*** Testing mb_ereg_replace() : basic functionality ***\n";
+
+mb_internal_encoding('UTF-8');
+mb_regex_encoding('UTF-8');
+
+$string_ascii = b'abc def';
+$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=');
+
+echo "\n-- ASCII string 1 --\n";
+$result_1 = mb_ereg_replace(b'(.*)def', b'\\1 123', $string_ascii);
+var_dump(bin2hex($result_1));
+
+echo "\n-- ASCII string 2 --\n";
+$result_2 = mb_ereg_replace(b'123', b'abc', $string_ascii);
+var_dump(bin2hex($result_2));
+
+echo "\n-- Multibyte string 1 --\n";
+$regex1 = base64_decode('KOaXpeacrOiqnikuKj8oWzEtOV0rKQ=='); //Japanese regex in UTF-8
+$result_3 = mb_ereg_replace($regex1, b'\\1_____\\2', $string_mb);
+var_dump(bin2hex($result_3));
+
+echo "\n-- Multibyte string 2 --\n";
+$regex2 = base64_decode('5LiW55WM');
+$result_4 = mb_ereg_replace($regex2, b'_____', $string_mb);
+var_dump(bin2hex($result_4));
+
+echo "Done";
+?>
+--EXPECT--
+*** Testing mb_ereg_replace() : basic functionality ***
+
+-- ASCII string 1 --
+string(16) "6162632020313233"
+
+-- ASCII string 2 --
+string(14) "61626320646566"
+
+-- Multibyte string 1 --
+string(72) "e697a5e69cace8aa9e5f5f5f5f5f31323334efbc95efbc96efbc97efbc98efbc99e38082"
+
+-- Multibyte string 2 --
+string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082"
+Done \ No newline at end of file
diff --git a/ext/mbstring/tests/mb_ereg_replace_error.phpt b/ext/mbstring/tests/mb_ereg_replace_error.phpt
new file mode 100644
index 000000000..bc98be8ba
--- /dev/null
+++ b/ext/mbstring/tests/mb_ereg_replace_error.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Test mb_ereg_replace() function : error conditions
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : proto string mb_ereg_replace(string pattern, string replacement, string string [, string option])
+ * Description: Replace regular expression for multibyte string
+ * Source code: ext/mbstring/php_mbregex.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_ereg_replace() : error conditions ***\n";
+
+
+//Test mb_ereg_replace with one more than the expected number of arguments
+echo "\n-- Testing mb_ereg_replace() function with more than expected no. of arguments --\n";
+$pattern = b'[a-k]';
+$replacement = b'1';
+$string = b'string_val';
+$option = '';
+$extra_arg = 10;
+var_dump( mb_ereg_replace($pattern, $replacement, $string, $option, $extra_arg) );
+
+// Testing mb_ereg_replace with one less than the expected number of arguments
+echo "\n-- Testing mb_ereg_replace() function with less than expected no. of arguments --\n";
+$pattern = b'string_val';
+$replacement = b'string_val';
+var_dump( mb_ereg_replace($pattern, $replacement) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_ereg_replace() : error conditions ***
+
+-- Testing mb_ereg_replace() function with more than expected no. of arguments --
+
+Warning: mb_ereg_replace() expects at most 4 parameters, 5 given in %s on line %d
+bool(false)
+
+-- Testing mb_ereg_replace() function with less than expected no. of arguments --
+
+Warning: mb_ereg_replace() expects at least 3 parameters, 2 given in %s on line %d
+bool(false)
+Done
diff --git a/ext/mbstring/tests/mb_ereg_replace_variation1.phpt b/ext/mbstring/tests/mb_ereg_replace_variation1.phpt
new file mode 100644
index 000000000..3e24979cd
--- /dev/null
+++ b/ext/mbstring/tests/mb_ereg_replace_variation1.phpt
@@ -0,0 +1,170 @@
+--TEST--
+Test mb_ereg_replace() function : usage variations - <type here specifics of this variation>
+--INI--
+error_reporting=E_ALL & ~E_NOTICE
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : proto string mb_ereg_replace(string pattern, string replacement, string string [, string option])
+ * Description: Replace regular expression for multibyte string
+ * Source code: ext/mbstring/php_mbregex.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_ereg_replace() : usage variations ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$replacement = 'string_val';
+$string = 'string_val';
+$option = '';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "UTF-8";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+UTF-8
+EOT;
+
+// unexpected values to be passed to $encoding argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+
+ // string data
+/*18*/ "UTF-8",
+ 'UTF-8',
+ $heredoc,
+
+ // object data
+/*21*/ new classA(),
+
+ // undefined data
+/*22*/ @$undefined_var,
+
+ // unset data
+/*23*/ @$unset_var,
+
+);
+
+// loop through each element of the array for pattern
+
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( mb_ereg_replace($input, $replacement, $string, $option) );
+ $iterator++;
+};
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_ereg_replace() : usage variations ***
+
+-- Iteration 1 --
+string(10) "string_val"
+
+-- Iteration 2 --
+string(10) "string_val"
+
+-- Iteration 3 --
+string(10) "string_val"
+
+-- Iteration 4 --
+string(10) "string_val"
+
+-- Iteration 5 --
+string(10) "string_val"
+
+-- Iteration 6 --
+string(10) "string_val"
+
+-- Iteration 7 --
+string(10) "string_val"
+
+-- Iteration 8 --
+string(10) "string_val"
+
+-- Iteration 9 --
+string(10) "string_val"
+
+-- Iteration 10 --
+string(10) "string_val"
+
+-- Iteration 11 --
+string(10) "string_val"
+
+-- Iteration 12 --
+string(10) "string_val"
+
+-- Iteration 13 --
+string(10) "string_val"
+
+-- Iteration 14 --
+string(10) "string_val"
+
+-- Iteration 15 --
+string(10) "string_val"
+
+-- Iteration 16 --
+string(120) "string_valsstring_valtstring_valrstring_valistring_valnstring_valgstring_val_string_valvstring_valastring_vallstring_val"
+
+-- Iteration 17 --
+string(120) "string_valsstring_valtstring_valrstring_valistring_valnstring_valgstring_val_string_valvstring_valastring_vallstring_val"
+
+-- Iteration 18 --
+string(10) "string_val"
+
+-- Iteration 19 --
+string(10) "string_val"
+
+-- Iteration 20 --
+string(10) "string_val"
+
+-- Iteration 21 --
+string(10) "string_val"
+
+-- Iteration 22 --
+string(10) "string_val"
+
+-- Iteration 23 --
+string(10) "string_val"
+Done
diff --git a/ext/mbstring/tests/mb_ereg_replace_variation2.phpt b/ext/mbstring/tests/mb_ereg_replace_variation2.phpt
new file mode 100644
index 000000000..37a89fcba
--- /dev/null
+++ b/ext/mbstring/tests/mb_ereg_replace_variation2.phpt
@@ -0,0 +1,178 @@
+--TEST--
+Test mb_ereg_replace() function : usage variations
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : proto string mb_ereg_replace(string pattern, string replacement, string string [, string option])
+ * Description: Replace regular expression for multibyte string
+ * Source code: ext/mbstring/php_mbregex.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_ereg_replace() : usage variations ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$pattern = '[a-z]';
+$string = 'string_val';
+$option = '';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "UTF-8";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+UTF-8
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $encoding argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+
+ // string data
+/*18*/ "UTF-8",
+ 'UTF-8',
+ $heredoc,
+
+ // object data
+/*21*/ new classA(),
+
+ // undefined data
+/*22*/ @$undefined_var,
+
+ // unset data
+/*23*/ @$unset_var,
+
+ // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of the array for pattern
+
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( mb_ereg_replace($pattern, $input, $string, $option) );
+ $iterator++;
+};
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_ereg_replace() : usage variations ***
+
+-- Iteration 1 --
+string(10) "000000_000"
+
+-- Iteration 2 --
+string(10) "111111_111"
+
+-- Iteration 3 --
+string(46) "123451234512345123451234512345_123451234512345"
+
+-- Iteration 4 --
+string(46) "-2345-2345-2345-2345-2345-2345_-2345-2345-2345"
+
+-- Iteration 5 --
+string(37) "10.510.510.510.510.510.5_10.510.510.5"
+
+-- Iteration 6 --
+string(46) "-10.5-10.5-10.5-10.5-10.5-10.5_-10.5-10.5-10.5"
+
+-- Iteration 7 --
+string(109) "123456789000123456789000123456789000123456789000123456789000123456789000_123456789000123456789000123456789000"
+
+-- Iteration 8 --
+string(118) "1.23456789E-91.23456789E-91.23456789E-91.23456789E-91.23456789E-91.23456789E-9_1.23456789E-91.23456789E-91.23456789E-9"
+
+-- Iteration 9 --
+string(28) "0.50.50.50.50.50.5_0.50.50.5"
+
+-- Iteration 10 --
+string(1) "_"
+
+-- Iteration 11 --
+string(1) "_"
+
+-- Iteration 12 --
+string(10) "111111_111"
+
+-- Iteration 13 --
+string(1) "_"
+
+-- Iteration 14 --
+string(10) "111111_111"
+
+-- Iteration 15 --
+string(1) "_"
+
+-- Iteration 16 --
+string(1) "_"
+
+-- Iteration 17 --
+string(1) "_"
+
+-- Iteration 18 --
+string(46) "UTF-8UTF-8UTF-8UTF-8UTF-8UTF-8_UTF-8UTF-8UTF-8"
+
+-- Iteration 19 --
+string(46) "UTF-8UTF-8UTF-8UTF-8UTF-8UTF-8_UTF-8UTF-8UTF-8"
+
+-- Iteration 20 --
+string(46) "UTF-8UTF-8UTF-8UTF-8UTF-8UTF-8_UTF-8UTF-8UTF-8"
+
+-- Iteration 21 --
+string(46) "UTF-8UTF-8UTF-8UTF-8UTF-8UTF-8_UTF-8UTF-8UTF-8"
+
+-- Iteration 22 --
+string(1) "_"
+
+-- Iteration 23 --
+string(1) "_"
+
+-- Iteration 24 --
+
+Warning: mb_ereg_replace() expects parameter 2 to be string, resource given in %s on line %d
+bool(false)
+Done \ No newline at end of file
diff --git a/ext/mbstring/tests/mb_ereg_replace_variation3.phpt b/ext/mbstring/tests/mb_ereg_replace_variation3.phpt
new file mode 100644
index 000000000..09da6cd3e
--- /dev/null
+++ b/ext/mbstring/tests/mb_ereg_replace_variation3.phpt
@@ -0,0 +1,179 @@
+--TEST--
+Test mb_ereg_replace() function : usage variations
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : proto string mb_ereg_replace(string pattern, string replacement, string string [, string option])
+ * Description: Replace regular expression for multibyte string
+ * Source code: ext/mbstring/php_mbregex.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_ereg_replace() : usage variations ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$pattern = '[a-z]';
+$replacement = 'string_val';
+$option = '';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "UTF-8";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+UTF-8
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $encoding argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+
+ // string data
+/*18*/ "UTF-8",
+ 'UTF-8',
+ $heredoc,
+
+ // object data
+/*21*/ new classA(),
+
+ // undefined data
+/*22*/ @$undefined_var,
+
+ // unset data
+/*23*/ @$unset_var,
+
+ // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of the array for pattern
+
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( mb_ereg_replace($pattern, $replacement, $input, $option) );
+ $iterator++;
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_ereg_replace() : usage variations ***
+
+-- Iteration 1 --
+string(1) "0"
+
+-- Iteration 2 --
+string(1) "1"
+
+-- Iteration 3 --
+string(5) "12345"
+
+-- Iteration 4 --
+string(5) "-2345"
+
+-- Iteration 5 --
+string(4) "10.5"
+
+-- Iteration 6 --
+string(5) "-10.5"
+
+-- Iteration 7 --
+string(12) "123456789000"
+
+-- Iteration 8 --
+string(13) "1.23456789E-9"
+
+-- Iteration 9 --
+string(3) "0.5"
+
+-- Iteration 10 --
+string(0) ""
+
+-- Iteration 11 --
+string(0) ""
+
+-- Iteration 12 --
+string(1) "1"
+
+-- Iteration 13 --
+string(0) ""
+
+-- Iteration 14 --
+string(1) "1"
+
+-- Iteration 15 --
+string(0) ""
+
+-- Iteration 16 --
+string(0) ""
+
+-- Iteration 17 --
+string(0) ""
+
+-- Iteration 18 --
+string(5) "UTF-8"
+
+-- Iteration 19 --
+string(5) "UTF-8"
+
+-- Iteration 20 --
+string(5) "UTF-8"
+
+-- Iteration 21 --
+string(5) "UTF-8"
+
+-- Iteration 22 --
+string(0) ""
+
+-- Iteration 23 --
+string(0) ""
+
+-- Iteration 24 --
+
+Warning: mb_ereg_replace() expects parameter 3 to be string, resource given in %s on line %d
+bool(false)
+Done
diff --git a/ext/mbstring/tests/mb_ereg_replace_variation4.phpt b/ext/mbstring/tests/mb_ereg_replace_variation4.phpt
new file mode 100644
index 000000000..05b4f60da
--- /dev/null
+++ b/ext/mbstring/tests/mb_ereg_replace_variation4.phpt
@@ -0,0 +1,179 @@
+--TEST--
+Test mb_ereg_replace() function : usage variations
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : proto string mb_ereg_replace(string pattern, string replacement, string string [, string option])
+ * Description: Replace regular expression for multibyte string
+ * Source code: ext/mbstring/php_mbregex.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_ereg_replace() : usage variations ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$pattern = '[a-k]';
+$replacement = '1';
+$string = 'string_val';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "UTF-8";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+UTF-8
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $encoding argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+
+ // string data
+/*18*/ "UTF-8",
+ 'UTF-8',
+ $heredoc,
+
+ // object data
+/*21*/ new classA(),
+
+ // undefined data
+/*22*/ @$undefined_var,
+
+ // unset data
+/*23*/ @$unset_var,
+
+ // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of the array for pattern
+
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( mb_ereg_replace($pattern, $replacement, $string, $input) );
+ $iterator++;
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_ereg_replace() : usage variations ***
+
+-- Iteration 1 --
+string(10) "str1n1_v1l"
+
+-- Iteration 2 --
+string(10) "str1n1_v1l"
+
+-- Iteration 3 --
+string(10) "str1n1_v1l"
+
+-- Iteration 4 --
+string(10) "str1n1_v1l"
+
+-- Iteration 5 --
+string(10) "str1n1_v1l"
+
+-- Iteration 6 --
+string(10) "str1n1_v1l"
+
+-- Iteration 7 --
+string(10) "str1n1_v1l"
+
+-- Iteration 8 --
+string(10) "str1n1_v1l"
+
+-- Iteration 9 --
+string(10) "str1n1_v1l"
+
+-- Iteration 10 --
+string(10) "str1n1_v1l"
+
+-- Iteration 11 --
+string(10) "str1n1_v1l"
+
+-- Iteration 12 --
+string(10) "str1n1_v1l"
+
+-- Iteration 13 --
+string(10) "str1n1_v1l"
+
+-- Iteration 14 --
+string(10) "str1n1_v1l"
+
+-- Iteration 15 --
+string(10) "str1n1_v1l"
+
+-- Iteration 16 --
+string(10) "str1n1_v1l"
+
+-- Iteration 17 --
+string(10) "str1n1_v1l"
+
+-- Iteration 18 --
+string(10) "str1n1_v1l"
+
+-- Iteration 19 --
+string(10) "str1n1_v1l"
+
+-- Iteration 20 --
+string(10) "str1n1_v1l"
+
+-- Iteration 21 --
+string(10) "str1n1_v1l"
+
+-- Iteration 22 --
+string(10) "str1n1_v1l"
+
+-- Iteration 23 --
+string(10) "str1n1_v1l"
+
+-- Iteration 24 --
+
+Warning: mb_ereg_replace() expects parameter 4 to be string, resource given in %s on line %d
+bool(false)
+Done \ No newline at end of file
diff --git a/ext/mbstring/tests/mb_ereg_variation3.phpt b/ext/mbstring/tests/mb_ereg_variation3.phpt
index 0236e4410..d30ddc786 100644
--- a/ext/mbstring/tests/mb_ereg_variation3.phpt
+++ b/ext/mbstring/tests/mb_ereg_variation3.phpt
@@ -21,18 +21,18 @@ echo "*** Testing mb_ereg() : variation ***\n";
mb_regex_encoding('utf-8'); // have to set otherwise won't match $mb properly
$mb = base64_decode('5pel5pys6Kqe');
-$character_classes = array ('aB1' => '[[:alnum:]]+', /*1*/
- 'aBcD' => '[[:alpha:]]+',
- 'ab/=' => '[[:ascii:]]+',
- " \t" => '[[:blank:]]+',
- '234' => '[[:digit:]]+', /*5*/
- "$mb" => '[[:graph:]]+',
- 'fjds' => '[[:lower:]]+',
- "$mb\t" => '[[:print:]]+',
- '.!"*@' => '[[:punct:]]+',
- "\t" => '[[:space:]]+', /*10*/
- 'IDSJV' => '[[:upper:]]+',
- '3b5D' => '[[:xdigit:]]+'); /*12*/
+$character_classes = array (b'aB1' => b'[[:alnum:]]+', /*1*/
+ b'aBcD' => b'[[:alpha:]]+',
+ b'ab/=' => b'[[:ascii:]]+',
+ b" \t" => b'[[:blank:]]+',
+ b'234' => b'[[:digit:]]+', /*5*/
+ "$mb" => b'[[:graph:]]+',
+ b'fjds' => b'[[:lower:]]+',
+ b"$mb\t" => b'[[:print:]]+',
+ b'.!"*@' => b'[[:punct:]]+',
+ b"\t" => b'[[:space:]]+', /*10*/
+ b'IDSJV' => b'[[:upper:]]+',
+ b'3b5D' => b'[[:xdigit:]]+'); /*12*/
$iterator = 1;
foreach($character_classes as $string => $pattern) {
@@ -42,11 +42,7 @@ foreach($character_classes as $string => $pattern) {
// make sure any multibyte output is in base 64
echo "\n-- Iteration $iterator --\n";
var_dump(mb_ereg($pattern, $string, $regs));
- if (strpos($string, $mb) === FALSE) {
- var_dump($regs);
- } else {
- base64_encode_var_dump($regs);
- }
+ base64_encode_var_dump($regs);
$iterator++;
}
/**
@@ -74,42 +70,42 @@ function base64_encode_var_dump($regs) {
echo "Done";
?>
---EXPECTF--
+--EXPECT--
*** Testing mb_ereg() : variation ***
-- Iteration 1 --
int(3)
array(1) {
[0]=>
- string(3) "aB1"
+ string(4) "YUIx"
}
-- Iteration 2 --
int(4)
array(1) {
[0]=>
- string(4) "aBcD"
+ string(8) "YUJjRA=="
}
-- Iteration 3 --
int(4)
array(1) {
[0]=>
- string(4) "ab/="
+ string(8) "YWIvPQ=="
}
-- Iteration 4 --
int(2)
array(1) {
[0]=>
- string(2) " "
+ string(4) "IAk="
}
-- Iteration 5 --
int(3)
array(1) {
[0]=>
- string(3) "234"
+ string(4) "MjM0"
}
-- Iteration 6 --
@@ -123,7 +119,7 @@ array(1) {
int(4)
array(1) {
[0]=>
- string(4) "fjds"
+ string(8) "Zmpkcw=="
}
-- Iteration 8 --
@@ -137,27 +133,27 @@ array(1) {
int(5)
array(1) {
[0]=>
- string(5) ".!"*@"
+ string(8) "LiEiKkA="
}
-- Iteration 10 --
int(1)
array(1) {
[0]=>
- string(1) " "
+ string(4) "CQ=="
}
-- Iteration 11 --
int(5)
array(1) {
[0]=>
- string(5) "IDSJV"
+ string(8) "SURTSlY="
}
-- Iteration 12 --
int(4)
array(1) {
[0]=>
- string(4) "3b5D"
+ string(8) "M2I1RA=="
}
Done \ No newline at end of file
diff --git a/ext/mbstring/tests/mb_ereg_variation4.phpt b/ext/mbstring/tests/mb_ereg_variation4.phpt
index 7f7d6dfc9..788d4feff 100644
--- a/ext/mbstring/tests/mb_ereg_variation4.phpt
+++ b/ext/mbstring/tests/mb_ereg_variation4.phpt
@@ -23,19 +23,19 @@ mb_regex_encoding('utf-8');
//contains japanese characters, ASCII digits and different, UTF-8 encoded digits
$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=');
-$character_classes = array ('[[:alnum:]]+', /*1*/
- '[[:alpha:]]+',
- '[[:ascii:]]+',
- '[[:blank:]]+',
- '[[:cntrl:]]+',/*5*/
- '[[:digit:]]+',
- '[[:graph:]]+',
- '[[:lower:]]+',
- '[[:print:]]+',
- '[[:punct:]]+', /*10*/
- '[[:space:]]+',
- '[[:upper:]]+',
- '[[:xdigit:]]+'); /*13*/
+$character_classes = array (b'[[:alnum:]]+', /*1*/
+ b'[[:alpha:]]+',
+ b'[[:ascii:]]+',
+ b'[[:blank:]]+',
+ b'[[:cntrl:]]+',/*5*/
+ b'[[:digit:]]+',
+ b'[[:graph:]]+',
+ b'[[:lower:]]+',
+ b'[[:print:]]+',
+ b'[[:punct:]]+', /*10*/
+ b'[[:space:]]+',
+ b'[[:upper:]]+',
+ b'[[:xdigit:]]+'); /*13*/
$iterator = 1;
foreach ($character_classes as $pattern) {
diff --git a/ext/mbstring/tests/mb_ereg_variation5.phpt b/ext/mbstring/tests/mb_ereg_variation5.phpt
index 95bc59919..1cecb0942 100644
--- a/ext/mbstring/tests/mb_ereg_variation5.phpt
+++ b/ext/mbstring/tests/mb_ereg_variation5.phpt
@@ -20,16 +20,16 @@ echo "*** Testing mb_ereg() : usage variations ***\n";
mb_regex_encoding('utf-8');
-$string_ascii = 'This is an English string. 0123456789.';
+$string_ascii = b'This is an English string. 0123456789.';
$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=');
-$regex = '^.*?[[:blank:]]?[[:punct:][:digit:]]+\.?$';
+$regex = b'^.*?[[:blank:]]?[[:punct:][:digit:]]+\.?$';
echo "\nASCII String without \$regs arg:\t\t";
var_dump(mb_ereg($regex, $string_ascii));
echo "ASCII String with \$regs arg:\n";
var_dump(mb_ereg($regex, $string_ascii, $regs_ascii));
-var_dump($regs_ascii);
+base64_encode_var_dump($regs_ascii);
echo "\nMultibyte String without \$regs arg:\t";
var_dump(mb_ereg($regex, $string_mb));
@@ -69,7 +69,7 @@ ASCII String with $regs arg:
int(38)
array(1) {
[0]=>
- string(38) "This is an English string. 0123456789."
+ string(52) "VGhpcyBpcyBhbiBFbmdsaXNoIHN0cmluZy4gMDEyMzQ1Njc4OS4="
}
Multibyte String without $regs arg: int(1)
diff --git a/ext/mbstring/tests/mb_ereg_variation6.phpt b/ext/mbstring/tests/mb_ereg_variation6.phpt
index 33d2ee571..0d8687b95 100644
--- a/ext/mbstring/tests/mb_ereg_variation6.phpt
+++ b/ext/mbstring/tests/mb_ereg_variation6.phpt
@@ -24,20 +24,27 @@ if(mb_regex_encoding('utf-8') == true) {
echo "Could not set regex encoding to utf-8\n";
}
-$regex_char = array ('\w+', '\W+', '\s+', '\S+', '\d+', '\D+', '\b', '\B');
-
-$string_ascii = 'This is an English string. 0123456789.';
+$regex_char = array ('\w+' => b'\w+',
+ '\W+' => b'\W+',
+ '\s+' => b'\s+',
+ '\S+' => b'\S+',
+ '\d+' => b'\d+',
+ '\D+' => b'\D+',
+ '\b' => b'\b',
+ '\B' => b'\B');
+
+$string_ascii = b'This is an English string. 0123456789.';
$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=');
-foreach ($regex_char as $char) {
- echo "\n--** Pattern is: $char **--\n";
+foreach ($regex_char as $displayChar => $char) {
+ echo "\n--** Pattern is: $displayChar **--\n";
if (@$regs_ascii || @$regs_mb) {
$regs_ascii = null;
$regs_mb = null;
}
echo "-- ASCII String: --\n";
var_dump(mb_ereg($char, $string_ascii, $regs_ascii));
- var_dump($regs_ascii);
+ base64_encode_var_dump($regs_ascii);
echo "-- Multibyte String: --\n";
var_dump(mb_ereg($char, $string_mb, $regs_mb));
@@ -70,7 +77,7 @@ function base64_encode_var_dump($regs) {
echo "Done";
?>
---EXPECTF--
+--EXPECT--
*** Testing mb_ereg() : usage variations ***
Regex encoding set to utf-8
@@ -79,7 +86,7 @@ Regex encoding set to utf-8
int(4)
array(1) {
[0]=>
- string(4) "This"
+ string(8) "VGhpcw=="
}
-- Multibyte String: --
int(27)
@@ -93,7 +100,7 @@ array(1) {
int(1)
array(1) {
[0]=>
- string(1) " "
+ string(4) "IA=="
}
-- Multibyte String: --
int(3)
@@ -107,7 +114,7 @@ array(1) {
int(1)
array(1) {
[0]=>
- string(1) " "
+ string(4) "IA=="
}
-- Multibyte String: --
bool(false)
@@ -118,7 +125,7 @@ NULL
int(4)
array(1) {
[0]=>
- string(4) "This"
+ string(8) "VGhpcw=="
}
-- Multibyte String: --
int(53)
@@ -132,7 +139,7 @@ array(1) {
int(10)
array(1) {
[0]=>
- string(10) "0123456789"
+ string(16) "MDEyMzQ1Njc4OQ=="
}
-- Multibyte String: --
int(20)
@@ -146,7 +153,7 @@ array(1) {
int(27)
array(1) {
[0]=>
- string(27) "This is an English string. "
+ string(36) "VGhpcyBpcyBhbiBFbmdsaXNoIHN0cmluZy4g"
}
-- Multibyte String: --
int(30)
diff --git a/ext/mbstring/tests/mb_ereg_variation7.phpt b/ext/mbstring/tests/mb_ereg_variation7.phpt
index 81c958957..170497d80 100644
--- a/ext/mbstring/tests/mb_ereg_variation7.phpt
+++ b/ext/mbstring/tests/mb_ereg_variation7.phpt
@@ -27,10 +27,10 @@ if(mb_regex_encoding('utf-8') == true) {
echo "Could not set regex encoding to utf-8\n";
}
-$string_ascii = 'This is an English string. 0123456789.';
-$regex_ascii = '([A-Z]\w{1,4}is( [aeiou]|h)) ?.*\.\s[0-9]+(5([6-9][79]){2})[[:punct:]]$';
+$string_ascii = b'This is an English string. 0123456789.';
+$regex_ascii = b'([A-Z]\w{1,4}is( [aeiou]|h)) ?.*\.\s[0-9]+(5([6-9][79]){2})[[:punct:]]$';
var_dump(mb_ereg($regex_ascii, $string_ascii, $regs_ascii));
-var_dump($regs_ascii);
+base64_encode_var_dump($regs_ascii);
$string_mb = base64_decode('zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==');
$regex_mb = base64_decode("W86RLc6pXShcdysgKSvOtVvOsS3PiVxzXSvOui4qKM+MfM6/KS4qXC5cc1swLTldKyg1KFs2LTldWzc5XSl7Mn0pW1s6cHVuY3Q6XV0k");
@@ -62,21 +62,21 @@ function base64_encode_var_dump($regs) {
echo "Done";
?>
---EXPECTF--
+--EXPECT--
*** Testing mb_ereg() : usage variations ***
Regex encoding set to utf-8
int(38)
array(5) {
[0]=>
- string(38) "This is an English string. 0123456789."
+ string(52) "VGhpcyBpcyBhbiBFbmdsaXNoIHN0cmluZy4gMDEyMzQ1Njc4OS4="
[1]=>
- string(6) "This i"
+ string(8) "VGhpcyBp"
[2]=>
- string(2) " i"
+ string(4) "IGk="
[3]=>
- string(5) "56789"
+ string(8) "NTY3ODk="
[4]=>
- string(2) "89"
+ string(4) "ODk="
}
int(64)
array(5) {
diff --git a/ext/mbstring/tests/mb_internal_encoding_ini_basic2.phpt b/ext/mbstring/tests/mb_internal_encoding_ini_basic2.phpt
new file mode 100644
index 000000000..241e1a692
--- /dev/null
+++ b/ext/mbstring/tests/mb_internal_encoding_ini_basic2.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Test INI mbstring.internal_encoding basic - encoding when valid specified
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_stripos') or die("skip mb_stripos() is not available in this build");
+?>
+--INI--
+mbstring.internal_encoding=ISO-8859-7
+--FILE--
+<?php
+
+echo "*** Testing INI mbstring.internal_encoding : basic functionality ***\n";
+
+echo mb_internal_encoding()."\n";
+echo ini_get('mbstring.internal_encoding')."\n";
+mb_internal_encoding('UTF-8');
+echo mb_internal_encoding()."\n";
+echo ini_get('mbstring.internal_encoding')."\n";
+
+?>
+===DONE===
+--EXPECT--
+*** Testing INI mbstring.internal_encoding : basic functionality ***
+ISO-8859-7
+ISO-8859-7
+UTF-8
+ISO-8859-7
+===DONE===
diff --git a/ext/mbstring/tests/mb_regex_encoding_variation2.phpt b/ext/mbstring/tests/mb_regex_encoding_variation2.phpt
new file mode 100644
index 000000000..fc9c60037
--- /dev/null
+++ b/ext/mbstring/tests/mb_regex_encoding_variation2.phpt
@@ -0,0 +1,420 @@
+--TEST--
+Test mb_regex_encoding() function : usage variations - test different encodings
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_regex_encoding([string $encoding])
+ * Description: Returns the current encoding for regex as a string.
+ * Source code: ext/mbstring/php_mbregex.c
+ */
+
+/*
+ * Test all listed encoding types from php.net to check all are known to function
+ * NB: The strings passed are *NOT* necessarily encoded in the encoding passed to the function.
+ * This test is purely to see whether the function recognises the encoding.
+ */
+
+echo "*** Testing mb_regex_encoding() : usage variations ***\n";
+
+$encoding = array('UCS-4', /*1*/
+ 'UCS-4BE',
+ 'UCS-4LE',
+ 'UCS-2',
+ 'UCS-2BE', /*5*/
+ 'UCS-2LE',
+ 'UTF-32',
+ 'UTF-32BE',
+ 'UTF-32LE',
+ 'UTF-16', /*10*/
+ 'UTF-16BE',
+ 'UTF-16LE',
+ 'UTF-7',
+ 'UTF7-IMAP',
+ 'UTF-8', /*15*/
+ 'ASCII',
+ 'EUC-JP',
+ 'SJIS',
+ 'eucJP-win',
+ 'SJIS-win', /*20*/
+ 'ISO-2022-JP',
+ 'JIS',
+ 'ISO-8859-1',
+ 'ISO-8859-2',
+ 'ISO-8859-3', /*25*/
+ 'ISO-8859-4',
+ 'ISO-8859-5',
+ 'ISO-8859-6',
+ 'ISO-8859-7',
+ 'ISO-8859-8', /*30*/
+ 'ISO-8859-9',
+ 'ISO-8859-10',
+ 'ISO-8859-13',
+ 'ISO-8859-14',
+ 'ISO-8859-15', /*35*/
+ 'byte2be',
+ 'byte2le',
+ 'byte4be',
+ 'byte4le',
+ 'BASE64', /*40*/
+ 'HTML-ENTITIES',
+ '7bit',
+ '8bit',
+ 'EUC-CN',
+ 'CP936', /*45*/
+ 'HZ',
+ 'EUC-TW',
+ 'CP950',
+ 'BIG-5',
+ 'EUC-KR', /*50*/
+ 'UHC',
+ 'ISO-2022-KR',
+ 'Windows-1251',
+ 'Windows-1252',
+ 'CP866', /*55*/
+ 'KOI8-R'); /*56*/
+
+$iterator = 1;
+foreach($encoding as $enc) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(mb_regex_encoding());
+ var_dump(mb_regex_encoding($enc));
+ var_dump(mb_regex_encoding());
+ $iterator++;
+}
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_regex_encoding() : usage variations ***
+
+-- Iteration 1 --
+string(%d) "%s"
+bool(true)
+string(5) "UCS-4"
+
+-- Iteration 2 --
+string(5) "UCS-4"
+
+Warning: mb_regex_encoding(): Unknown encoding "UCS-4BE" in %s on line %d
+bool(false)
+string(5) "UCS-4"
+
+-- Iteration 3 --
+string(5) "UCS-4"
+bool(true)
+string(7) "UCS-4LE"
+
+-- Iteration 4 --
+string(7) "UCS-4LE"
+
+Warning: mb_regex_encoding(): Unknown encoding "UCS-2" in %s on line %d
+bool(false)
+string(7) "UCS-4LE"
+
+-- Iteration 5 --
+string(7) "UCS-4LE"
+
+Warning: mb_regex_encoding(): Unknown encoding "UCS-2BE" in %s on line %d
+bool(false)
+string(7) "UCS-4LE"
+
+-- Iteration 6 --
+string(7) "UCS-4LE"
+
+Warning: mb_regex_encoding(): Unknown encoding "UCS-2LE" in %s on line %d
+bool(false)
+string(7) "UCS-4LE"
+
+-- Iteration 7 --
+string(7) "UCS-4LE"
+bool(true)
+string(5) "UCS-4"
+
+-- Iteration 8 --
+string(5) "UCS-4"
+bool(true)
+string(5) "UCS-4"
+
+-- Iteration 9 --
+string(5) "UCS-4"
+bool(true)
+string(7) "UCS-4LE"
+
+-- Iteration 10 --
+string(7) "UCS-4LE"
+bool(true)
+string(6) "UTF-16"
+
+-- Iteration 11 --
+string(6) "UTF-16"
+bool(true)
+string(6) "UTF-16"
+
+-- Iteration 12 --
+string(6) "UTF-16"
+bool(true)
+string(8) "UTF-16LE"
+
+-- Iteration 13 --
+string(8) "UTF-16LE"
+
+Warning: mb_regex_encoding(): Unknown encoding "UTF-7" in %s on line %d
+bool(false)
+string(8) "UTF-16LE"
+
+-- Iteration 14 --
+string(8) "UTF-16LE"
+
+Warning: mb_regex_encoding(): Unknown encoding "UTF7-IMAP" in %s on line %d
+bool(false)
+string(8) "UTF-16LE"
+
+-- Iteration 15 --
+string(8) "UTF-16LE"
+bool(true)
+string(5) "UTF-8"
+
+-- Iteration 16 --
+string(5) "UTF-8"
+bool(true)
+string(5) "ASCII"
+
+-- Iteration 17 --
+string(5) "ASCII"
+bool(true)
+string(6) "EUC-JP"
+
+-- Iteration 18 --
+string(6) "EUC-JP"
+bool(true)
+string(4) "SJIS"
+
+-- Iteration 19 --
+string(4) "SJIS"
+bool(true)
+string(6) "EUC-JP"
+
+-- Iteration 20 --
+string(6) "EUC-JP"
+bool(true)
+string(4) "SJIS"
+
+-- Iteration 21 --
+string(4) "SJIS"
+
+Warning: mb_regex_encoding(): Unknown encoding "ISO-2022-JP" in %s on line %d
+bool(false)
+string(4) "SJIS"
+
+-- Iteration 22 --
+string(4) "SJIS"
+
+Warning: mb_regex_encoding(): Unknown encoding "JIS" in %s on line %d
+bool(false)
+string(4) "SJIS"
+
+-- Iteration 23 --
+string(4) "SJIS"
+bool(true)
+string(10) "ISO-8859-1"
+
+-- Iteration 24 --
+string(10) "ISO-8859-1"
+bool(true)
+string(10) "ISO-8859-2"
+
+-- Iteration 25 --
+string(10) "ISO-8859-2"
+bool(true)
+string(10) "ISO-8859-3"
+
+-- Iteration 26 --
+string(10) "ISO-8859-3"
+bool(true)
+string(10) "ISO-8859-4"
+
+-- Iteration 27 --
+string(10) "ISO-8859-4"
+bool(true)
+string(10) "ISO-8859-5"
+
+-- Iteration 28 --
+string(10) "ISO-8859-5"
+bool(true)
+string(10) "ISO-8859-6"
+
+-- Iteration 29 --
+string(10) "ISO-8859-6"
+bool(true)
+string(10) "ISO-8859-7"
+
+-- Iteration 30 --
+string(10) "ISO-8859-7"
+bool(true)
+string(10) "ISO-8859-8"
+
+-- Iteration 31 --
+string(10) "ISO-8859-8"
+bool(true)
+string(10) "ISO-8859-9"
+
+-- Iteration 32 --
+string(10) "ISO-8859-9"
+bool(true)
+string(11) "ISO-8859-10"
+
+-- Iteration 33 --
+string(11) "ISO-8859-10"
+bool(true)
+string(11) "ISO-8859-13"
+
+-- Iteration 34 --
+string(11) "ISO-8859-13"
+bool(true)
+string(11) "ISO-8859-14"
+
+-- Iteration 35 --
+string(11) "ISO-8859-14"
+bool(true)
+string(11) "ISO-8859-15"
+
+-- Iteration 36 --
+string(11) "ISO-8859-15"
+
+Warning: mb_regex_encoding(): Unknown encoding "byte2be" in %s on line %d
+bool(false)
+string(11) "ISO-8859-15"
+
+-- Iteration 37 --
+string(11) "ISO-8859-15"
+
+Warning: mb_regex_encoding(): Unknown encoding "byte2le" in %s on line %d
+bool(false)
+string(11) "ISO-8859-15"
+
+-- Iteration 38 --
+string(11) "ISO-8859-15"
+
+Warning: mb_regex_encoding(): Unknown encoding "byte4be" in %s on line %d
+bool(false)
+string(11) "ISO-8859-15"
+
+-- Iteration 39 --
+string(11) "ISO-8859-15"
+
+Warning: mb_regex_encoding(): Unknown encoding "byte4le" in %s on line %d
+bool(false)
+string(11) "ISO-8859-15"
+
+-- Iteration 40 --
+string(11) "ISO-8859-15"
+
+Warning: mb_regex_encoding(): Unknown encoding "BASE64" in %s on line %d
+bool(false)
+string(11) "ISO-8859-15"
+
+-- Iteration 41 --
+string(11) "ISO-8859-15"
+
+Warning: mb_regex_encoding(): Unknown encoding "HTML-ENTITIES" in %s on line %d
+bool(false)
+string(11) "ISO-8859-15"
+
+-- Iteration 42 --
+string(11) "ISO-8859-15"
+
+Warning: mb_regex_encoding(): Unknown encoding "7bit" in %s on line %d
+bool(false)
+string(11) "ISO-8859-15"
+
+-- Iteration 43 --
+string(11) "ISO-8859-15"
+
+Warning: mb_regex_encoding(): Unknown encoding "8bit" in %s on line %d
+bool(false)
+string(11) "ISO-8859-15"
+
+-- Iteration 44 --
+string(11) "ISO-8859-15"
+bool(true)
+string(6) "EUC-CN"
+
+-- Iteration 45 --
+string(6) "EUC-CN"
+
+Warning: mb_regex_encoding(): Unknown encoding "CP936" in %s on line %d
+bool(false)
+string(6) "EUC-CN"
+
+-- Iteration 46 --
+string(6) "EUC-CN"
+
+Warning: mb_regex_encoding(): Unknown encoding "HZ" in %s on line %d
+bool(false)
+string(6) "EUC-CN"
+
+-- Iteration 47 --
+string(6) "EUC-CN"
+bool(true)
+string(6) "EUC-TW"
+
+-- Iteration 48 --
+string(6) "EUC-TW"
+
+Warning: mb_regex_encoding(): Unknown encoding "CP950" in %s on line %d
+bool(false)
+string(6) "EUC-TW"
+
+-- Iteration 49 --
+string(6) "EUC-TW"
+bool(true)
+string(4) "BIG5"
+
+-- Iteration 50 --
+string(4) "BIG5"
+bool(true)
+string(6) "EUC-KR"
+
+-- Iteration 51 --
+string(6) "EUC-KR"
+
+Warning: mb_regex_encoding(): Unknown encoding "UHC" in %s on line %d
+bool(false)
+string(6) "EUC-KR"
+
+-- Iteration 52 --
+string(6) "EUC-KR"
+
+Warning: mb_regex_encoding(): Unknown encoding "ISO-2022-KR" in %s on line %d
+bool(false)
+string(6) "EUC-KR"
+
+-- Iteration 53 --
+string(6) "EUC-KR"
+
+Warning: mb_regex_encoding(): Unknown encoding "Windows-1251" in %s on line %d
+bool(false)
+string(6) "EUC-KR"
+
+-- Iteration 54 --
+string(6) "EUC-KR"
+
+Warning: mb_regex_encoding(): Unknown encoding "Windows-1252" in %s on line %d
+bool(false)
+string(6) "EUC-KR"
+
+-- Iteration 55 --
+string(6) "EUC-KR"
+
+Warning: mb_regex_encoding(): Unknown encoding "CP866" in %s on line %d
+bool(false)
+string(6) "EUC-KR"
+
+-- Iteration 56 --
+string(6) "EUC-KR"
+bool(true)
+string(5) "KOI8R"
+Done \ No newline at end of file
diff --git a/ext/mbstring/tests/mb_split.phpt b/ext/mbstring/tests/mb_split.phpt
index abe12763e..6c0283fe8 100644
--- a/ext/mbstring/tests/mb_split.phpt
+++ b/ext/mbstring/tests/mb_split.phpt
@@ -23,15 +23,15 @@ mbstring.func_overload=0
}
}
- var_dump( mb_split( " ", "a b c d e f g" )
- == mb_split( "[[:space:]]", "a\nb\tc\nd e f g" ) );
+ var_dump( mb_split( b" ", b"a b c d e f g" )
+ == mb_split( b"[[:space:]]", b"a\nb\tc\nd e f g" ) );
for ( $i = 0; $i < 5; ++$i ) {
- verify_split( " ", "a\tb\tc\td e\tf g", $i );
+ verify_split( b" ", b"a\tb\tc\td e\tf g", $i );
}
for ( $i = 1; $i < 5; ++$i ) {
- verify_split( "\xa1\xa1+", "\xa1\xa1\xa1\xa2\xa2\xa1\xa1\xa1\xa1\xa1\xa1\xa2\xa2\xa1\xa1\xa1", $i );
+ verify_split( b"\xa1\xa1+", b"\xa1\xa1\xa1\xa2\xa2\xa1\xa1\xa1\xa1\xa1\xa1\xa2\xa2\xa1\xa1\xa1", $i );
}
?>
diff --git a/ext/mbstring/tests/mb_split_error.phpt b/ext/mbstring/tests/mb_split_error.phpt
new file mode 100644
index 000000000..b48e21520
--- /dev/null
+++ b/ext/mbstring/tests/mb_split_error.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test mb_split() function : error conditions
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_split') or die("skip mb_split() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : proto array mb_split(string pattern, string string [, int limit])
+ * Description: split multibyte string into array by regular expression
+ * Source code: ext/mbstring/php_mbregex.c
+ * Alias to functions:
+ */
+
+/*
+ * test too few and too many parameters
+ */
+
+echo "*** Testing mb_split() : error conditions ***\n";
+
+
+//Test mb_split with one more than the expected number of arguments
+echo "\n-- Testing mb_split() function with more than expected no. of arguments --\n";
+$pattern = ' ';
+$string = 'a b c d e f g';
+$limit = 0;
+$extra_arg = 10;
+var_dump( mb_split($pattern, $string, $limit, $extra_arg) );
+
+// Testing mb_split with one less than the expected number of arguments
+echo "\n-- Testing mb_split() function with less than expected no. of arguments --\n";
+$pattern = 'string_val';
+var_dump( mb_split($pattern) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_split() : error conditions ***
+
+-- Testing mb_split() function with more than expected no. of arguments --
+
+Warning: mb_split() expects at most 3 parameters, 4 given in %s on line %d
+bool(false)
+
+-- Testing mb_split() function with less than expected no. of arguments --
+
+Warning: mb_split() expects at least 2 parameters, 1 given in %s on line %d
+bool(false)
+Done
diff --git a/ext/mbstring/tests/mb_split_variation1.phpt b/ext/mbstring/tests/mb_split_variation1.phpt
new file mode 100644
index 000000000..be3230e96
--- /dev/null
+++ b/ext/mbstring/tests/mb_split_variation1.phpt
@@ -0,0 +1,262 @@
+--TEST--
+Test mb_split() function : usage variations - different parameter types for pattern
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_split') or die("skip mb_split() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : proto array mb_split(string pattern, string string [, int limit])
+ * Description: split multibyte string into array by regular expression
+ * Source code: ext/mbstring/php_mbregex.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_split() : usage variations ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$string = 'a b c d e f g';
+$limit = 10;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "UTF-8";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+UTF-8
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $encoding argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+
+ // string data
+/*18*/ "UTF-8",
+ 'UTF-8',
+ $heredoc,
+
+ // object data
+/*21*/ new classA(),
+
+ // undefined data
+/*22*/ @$undefined_var,
+
+ // unset data
+/*23*/ @$unset_var,
+
+ // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of the array for pattern
+
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( mb_split($input, $string, $limit) );
+ $iterator++;
+};
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_split() : usage variations ***
+
+-- Iteration 1 --
+array(1) {
+ [0]=>
+ string(13) "a b c d e f g"
+}
+
+-- Iteration 2 --
+array(1) {
+ [0]=>
+ string(13) "a b c d e f g"
+}
+
+-- Iteration 3 --
+array(1) {
+ [0]=>
+ string(13) "a b c d e f g"
+}
+
+-- Iteration 4 --
+array(1) {
+ [0]=>
+ string(13) "a b c d e f g"
+}
+
+-- Iteration 5 --
+array(1) {
+ [0]=>
+ string(13) "a b c d e f g"
+}
+
+-- Iteration 6 --
+array(1) {
+ [0]=>
+ string(13) "a b c d e f g"
+}
+
+-- Iteration 7 --
+array(1) {
+ [0]=>
+ string(13) "a b c d e f g"
+}
+
+-- Iteration 8 --
+array(1) {
+ [0]=>
+ string(13) "a b c d e f g"
+}
+
+-- Iteration 9 --
+array(1) {
+ [0]=>
+ string(13) "a b c d e f g"
+}
+
+-- Iteration 10 --
+
+Warning: mb_split(): Empty regular expression in %s on line %d
+array(1) {
+ [0]=>
+ string(13) "a b c d e f g"
+}
+
+-- Iteration 11 --
+
+Warning: mb_split(): Empty regular expression in %s on line %d
+array(1) {
+ [0]=>
+ string(13) "a b c d e f g"
+}
+
+-- Iteration 12 --
+array(1) {
+ [0]=>
+ string(13) "a b c d e f g"
+}
+
+-- Iteration 13 --
+
+Warning: mb_split(): Empty regular expression in %s on line %d
+array(1) {
+ [0]=>
+ string(13) "a b c d e f g"
+}
+
+-- Iteration 14 --
+array(1) {
+ [0]=>
+ string(13) "a b c d e f g"
+}
+
+-- Iteration 15 --
+
+Warning: mb_split(): Empty regular expression in %s on line %d
+array(1) {
+ [0]=>
+ string(13) "a b c d e f g"
+}
+
+-- Iteration 16 --
+
+Warning: mb_split(): Empty regular expression in %s on line %d
+array(1) {
+ [0]=>
+ string(13) "a b c d e f g"
+}
+
+-- Iteration 17 --
+
+Warning: mb_split(): Empty regular expression in %s on line %d
+array(1) {
+ [0]=>
+ string(13) "a b c d e f g"
+}
+
+-- Iteration 18 --
+array(1) {
+ [0]=>
+ string(13) "a b c d e f g"
+}
+
+-- Iteration 19 --
+array(1) {
+ [0]=>
+ string(13) "a b c d e f g"
+}
+
+-- Iteration 20 --
+array(1) {
+ [0]=>
+ string(13) "a b c d e f g"
+}
+
+-- Iteration 21 --
+array(1) {
+ [0]=>
+ string(13) "a b c d e f g"
+}
+
+-- Iteration 22 --
+
+Warning: mb_split(): Empty regular expression in %s on line %d
+array(1) {
+ [0]=>
+ string(13) "a b c d e f g"
+}
+
+-- Iteration 23 --
+
+Warning: mb_split(): Empty regular expression in %s on line %d
+array(1) {
+ [0]=>
+ string(13) "a b c d e f g"
+}
+
+-- Iteration 24 --
+
+Warning: mb_split() expects parameter 1 to be string, resource given in %s on line %d
+bool(false)
+Done \ No newline at end of file
diff --git a/ext/mbstring/tests/mb_split_variation2.phpt b/ext/mbstring/tests/mb_split_variation2.phpt
new file mode 100644
index 000000000..a6db2cc04
--- /dev/null
+++ b/ext/mbstring/tests/mb_split_variation2.phpt
@@ -0,0 +1,248 @@
+--TEST--
+Test mb_split() function : usage variations - different parameter types for string
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_split') or die("skip mb_split() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : proto array mb_split(string pattern, string string [, int limit])
+ * Description: split multibyte string into array by regular expression
+ * Source code: ext/mbstring/php_mbregex.c
+ * Alias to functions:
+ */
+
+
+echo "*** Testing mb_split() : usage variations ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$pattern = '[a-z]';
+$limit = 10;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "UTF-8";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+UTF-8
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $encoding argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+
+ // string data
+/*18*/ "UTF-8",
+ 'UTF-8',
+ $heredoc,
+
+ // object data
+/*21*/ new classA(),
+
+ // undefined data
+/*22*/ @$undefined_var,
+
+ // unset data
+/*23*/ @$unset_var,
+
+ // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of the array for pattern
+
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( mb_split($pattern, $input, $limit) );
+ $iterator++;
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_split() : usage variations ***
+
+-- Iteration 1 --
+array(1) {
+ [0]=>
+ string(1) "0"
+}
+
+-- Iteration 2 --
+array(1) {
+ [0]=>
+ string(1) "1"
+}
+
+-- Iteration 3 --
+array(1) {
+ [0]=>
+ string(5) "12345"
+}
+
+-- Iteration 4 --
+array(1) {
+ [0]=>
+ string(5) "-2345"
+}
+
+-- Iteration 5 --
+array(1) {
+ [0]=>
+ string(4) "10.5"
+}
+
+-- Iteration 6 --
+array(1) {
+ [0]=>
+ string(5) "-10.5"
+}
+
+-- Iteration 7 --
+array(1) {
+ [0]=>
+ string(12) "123456789000"
+}
+
+-- Iteration 8 --
+array(1) {
+ [0]=>
+ string(13) "1.23456789E-9"
+}
+
+-- Iteration 9 --
+array(1) {
+ [0]=>
+ string(3) "0.5"
+}
+
+-- Iteration 10 --
+array(1) {
+ [0]=>
+ string(0) ""
+}
+
+-- Iteration 11 --
+array(1) {
+ [0]=>
+ string(0) ""
+}
+
+-- Iteration 12 --
+array(1) {
+ [0]=>
+ string(1) "1"
+}
+
+-- Iteration 13 --
+array(1) {
+ [0]=>
+ string(0) ""
+}
+
+-- Iteration 14 --
+array(1) {
+ [0]=>
+ string(1) "1"
+}
+
+-- Iteration 15 --
+array(1) {
+ [0]=>
+ string(0) ""
+}
+
+-- Iteration 16 --
+array(1) {
+ [0]=>
+ string(0) ""
+}
+
+-- Iteration 17 --
+array(1) {
+ [0]=>
+ string(0) ""
+}
+
+-- Iteration 18 --
+array(1) {
+ [0]=>
+ string(5) "UTF-8"
+}
+
+-- Iteration 19 --
+array(1) {
+ [0]=>
+ string(5) "UTF-8"
+}
+
+-- Iteration 20 --
+array(1) {
+ [0]=>
+ string(5) "UTF-8"
+}
+
+-- Iteration 21 --
+array(1) {
+ [0]=>
+ string(5) "UTF-8"
+}
+
+-- Iteration 22 --
+array(1) {
+ [0]=>
+ string(0) ""
+}
+
+-- Iteration 23 --
+array(1) {
+ [0]=>
+ string(0) ""
+}
+
+-- Iteration 24 --
+
+Warning: mb_split() expects parameter 2 to be string, resource given in %s on line %d
+bool(false)
+Done
diff --git a/ext/mbstring/tests/mb_split_variation3.phpt b/ext/mbstring/tests/mb_split_variation3.phpt
new file mode 100644
index 000000000..5422b169c
--- /dev/null
+++ b/ext/mbstring/tests/mb_split_variation3.phpt
@@ -0,0 +1,331 @@
+--TEST--
+Test mb_split() function : usage variations - different parameter types for limit
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_split') or die("skip mb_split() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : proto array mb_split(string pattern, string string [, int limit])
+ * Description: split multibyte string into array by regular expression
+ * Source code: ext/mbstring/php_mbregex.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_split() : usage variations ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$pattern = '[a-z]';
+$string = 'string_val';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "UTF-8";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+UTF-8
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $encoding argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+
+ // string data
+/*18*/ "UTF-8",
+ 'UTF-8',
+ $heredoc,
+
+ // object data
+/*21*/ new classA(),
+
+ // undefined data
+/*22*/ @$undefined_var,
+
+ // unset data
+/*23*/ @$unset_var,
+
+ // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of the array for pattern
+
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( mb_split($pattern, $string, $input) );
+ $iterator++;
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_split() : usage variations ***
+
+-- Iteration 1 --
+array(1) {
+ [0]=>
+ string(10) "string_val"
+}
+
+-- Iteration 2 --
+array(1) {
+ [0]=>
+ string(10) "string_val"
+}
+
+-- Iteration 3 --
+array(10) {
+ [0]=>
+ string(0) ""
+ [1]=>
+ string(0) ""
+ [2]=>
+ string(0) ""
+ [3]=>
+ string(0) ""
+ [4]=>
+ string(0) ""
+ [5]=>
+ string(0) ""
+ [6]=>
+ string(1) "_"
+ [7]=>
+ string(0) ""
+ [8]=>
+ string(0) ""
+ [9]=>
+ string(0) ""
+}
+
+-- Iteration 4 --
+array(10) {
+ [0]=>
+ string(0) ""
+ [1]=>
+ string(0) ""
+ [2]=>
+ string(0) ""
+ [3]=>
+ string(0) ""
+ [4]=>
+ string(0) ""
+ [5]=>
+ string(0) ""
+ [6]=>
+ string(1) "_"
+ [7]=>
+ string(0) ""
+ [8]=>
+ string(0) ""
+ [9]=>
+ string(0) ""
+}
+
+-- Iteration 5 --
+array(10) {
+ [0]=>
+ string(0) ""
+ [1]=>
+ string(0) ""
+ [2]=>
+ string(0) ""
+ [3]=>
+ string(0) ""
+ [4]=>
+ string(0) ""
+ [5]=>
+ string(0) ""
+ [6]=>
+ string(1) "_"
+ [7]=>
+ string(0) ""
+ [8]=>
+ string(0) ""
+ [9]=>
+ string(0) ""
+}
+
+-- Iteration 6 --
+array(10) {
+ [0]=>
+ string(0) ""
+ [1]=>
+ string(0) ""
+ [2]=>
+ string(0) ""
+ [3]=>
+ string(0) ""
+ [4]=>
+ string(0) ""
+ [5]=>
+ string(0) ""
+ [6]=>
+ string(1) "_"
+ [7]=>
+ string(0) ""
+ [8]=>
+ string(0) ""
+ [9]=>
+ string(0) ""
+}
+
+-- Iteration 7 --
+array(10) {
+ [0]=>
+ string(0) ""
+ [1]=>
+ string(0) ""
+ [2]=>
+ string(0) ""
+ [3]=>
+ string(0) ""
+ [4]=>
+ string(0) ""
+ [5]=>
+ string(0) ""
+ [6]=>
+ string(1) "_"
+ [7]=>
+ string(0) ""
+ [8]=>
+ string(0) ""
+ [9]=>
+ string(0) ""
+}
+
+-- Iteration 8 --
+array(1) {
+ [0]=>
+ string(10) "string_val"
+}
+
+-- Iteration 9 --
+array(1) {
+ [0]=>
+ string(10) "string_val"
+}
+
+-- Iteration 10 --
+array(1) {
+ [0]=>
+ string(10) "string_val"
+}
+
+-- Iteration 11 --
+array(1) {
+ [0]=>
+ string(10) "string_val"
+}
+
+-- Iteration 12 --
+array(1) {
+ [0]=>
+ string(10) "string_val"
+}
+
+-- Iteration 13 --
+array(1) {
+ [0]=>
+ string(10) "string_val"
+}
+
+-- Iteration 14 --
+array(1) {
+ [0]=>
+ string(10) "string_val"
+}
+
+-- Iteration 15 --
+array(1) {
+ [0]=>
+ string(10) "string_val"
+}
+
+-- Iteration 16 --
+
+Warning: mb_split() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Warning: mb_split() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+
+Warning: mb_split() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 19 --
+
+Warning: mb_split() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 20 --
+
+Warning: mb_split() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 21 --
+
+Warning: mb_split() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+-- Iteration 22 --
+array(1) {
+ [0]=>
+ string(10) "string_val"
+}
+
+-- Iteration 23 --
+array(1) {
+ [0]=>
+ string(10) "string_val"
+}
+
+-- Iteration 24 --
+
+Warning: mb_split() expects parameter 3 to be long, resource given in %s on line %d
+bool(false)
+Done \ No newline at end of file
diff --git a/ext/mbstring/tests/mb_stripos.phpt b/ext/mbstring/tests/mb_stripos.phpt
new file mode 100644
index 000000000..c21cdf3a5
--- /dev/null
+++ b/ext/mbstring/tests/mb_stripos.phpt
@@ -0,0 +1,178 @@
+--TEST--
+mb_stripos()
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_stripos') or die("skip mb_stripos() is not available in this build");
+?>
+--FILE--
+<?php
+// TODO: Add more encodings
+
+//$debug=true;
+ini_set('include_path','.');
+include_once('common.inc');
+
+
+// Test string
+$euc_jp = b'0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£0123ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£';
+
+// EUC-JP - With encoding parameter
+mb_internal_encoding('UTF-8') or print("mb_internal_encoding() failed\n");
+
+echo "== POSITIVE OFFSET ==\n";
+print mb_stripos($euc_jp,b'ÆüËܸì', 0, 'EUC-JP') . "\n";
+print mb_stripos($euc_jp, b'0', 0, 'EUC-JP') . "\n";
+print mb_stripos($euc_jp, 3, 0, 'EUC-JP') . "\n";
+print mb_stripos($euc_jp, 0, 0, 'EUC-JP') . "\n";
+print mb_stripos($euc_jp,b'ÆüËܸì', 15, 'EUC-JP') . "\n";
+print mb_stripos($euc_jp, b'0', 15, 'EUC-JP') . "\n";
+print mb_stripos($euc_jp, 3, 15, 'EUC-JP') . "\n";
+print mb_stripos($euc_jp, 0, 15, 'EUC-JP') . "\n";
+
+// Negative offset
+// Note: PHP Warning - offset is negative.
+// Note: For offset(-15). It does not return position of latter string. (ie the same result as -50)
+echo "== NEGATIVE OFFSET ==\n";
+$r = mb_stripos($euc_jp,b'ÆüËܸì', -15, 'EUC-JP');
+($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
+$r = mb_stripos($euc_jp, b'0', -15, 'EUC-JP');
+($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
+$r = mb_stripos($euc_jp, 3, -15, 'EUC-JP');
+($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
+$r = mb_stripos($euc_jp, 0, -15, 'EUC-JP');
+($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
+$r = mb_stripos($euc_jp,b'ÆüËܸì', -50, 'EUC-JP');
+($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
+$r = mb_stripos($euc_jp, b'0', -50, 'EUC-JP');
+($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
+$r = mb_stripos($euc_jp, 3, -50, 'EUC-JP');
+($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
+$r = mb_stripos($euc_jp, 0, -50, 'EUC-JP');
+($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
+
+// Out of range - should return false
+print ("== OUT OF RANGE ==\n");
+$r = mb_stripos($euc_jp,b'ÆüËܸì', 40, 'EUC-JP');
+($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
+$r = mb_stripos($euc_jp, b'0', 40, 'EUC-JP');
+($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
+$r = mb_stripos($euc_jp, 3, 40, 'EUC-JP');
+($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
+$r = mb_stripos($euc_jp, 0, 40, 'EUC-JP');
+($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
+// Note: Returned NULL string
+// echo gettype($r). ' val '. $r ."\n";
+
+
+// Non-existent
+echo "== NON-EXISTENT ==\n";
+$r = mb_stripos($euc_jp, b'´Ú¹ñ¸ì', 0, 'EUC-JP');
+($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n";
+$r = mb_stripos($euc_jp, b"\n", 0, 'EUC-JP');
+($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n";
+
+
+// EUC-JP - No encoding parameter
+echo "== NO ENCODING PARAMETER ==\n";
+mb_internal_encoding('EUC-JP') or print("mb_internal_encoding() failed\n");
+
+print mb_stripos($euc_jp,b'ÆüËܸì', 0) . "\n";
+print mb_stripos($euc_jp, b'0', 0) . "\n";
+print mb_stripos($euc_jp, 3, 0) . "\n";
+print mb_stripos($euc_jp, 0, 0) . "\n";
+
+$r = mb_stripos($euc_jp,b'´Ú¹ñ¸ì', 0);
+($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n";
+$r = mb_stripos($euc_jp,b"\n", 0);
+($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n";
+
+// EUC-JP - No offset and encoding parameter
+echo "== NO OFFSET AND ENCODING PARAMETER ==\n";
+mb_internal_encoding('EUC-JP') or print("mb_internal_encoding() failed\n");
+
+print mb_stripos($euc_jp,b'ÆüËܸì') . "\n";
+print mb_stripos($euc_jp, b'0') . "\n";
+print mb_stripos($euc_jp, 3) . "\n";
+print mb_stripos($euc_jp, 0) . "\n";
+
+$r = mb_stripos($euc_jp,b'´Ú¹ñ¸ì');
+($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n";
+$r = mb_stripos($euc_jp,b"\n");
+($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n";
+
+
+// Invalid Parameters
+echo "== INVALID PARAMETER TEST ==\n";
+
+$r = mb_stripos($euc_jp,'','EUC-JP');
+($r === FALSE) ? print("OK_NULL\n") : print("NG_NULL\n");
+$r = mb_stripos($euc_jp, $t_ary, 'EUC-JP');
+($r === FALSE) ? print("OK_ARRAY\n") : print("NG_ARRAY\n");
+$r = mb_stripos($euc_jp, $t_obj, 'EUC-JP');
+($r === FALSE) ? print("OK_OBJECT\n") : print("NG_OBJECT\n");
+$r = mb_stripos($euc_jp, $t_obj, 'BAD_ENCODING');
+($r === FALSE) ? print("OK_BAD_ENCODING\n") : print("NG_BAD_ENCODING\n");
+
+
+?>
+
+--EXPECT--
+== POSITIVE OFFSET ==
+10
+0
+3
+0
+34
+30
+33
+30
+== NEGATIVE OFFSET ==
+ERR: Warning
+OK_NEGATIVE_OFFSET
+ERR: Warning
+OK_NEGATIVE_OFFSET
+ERR: Warning
+OK_NEGATIVE_OFFSET
+ERR: Warning
+OK_NEGATIVE_OFFSET
+ERR: Warning
+OK_NEGATIVE_OFFSET
+ERR: Warning
+OK_NEGATIVE_OFFSET
+ERR: Warning
+OK_NEGATIVE_OFFSET
+ERR: Warning
+OK_NEGATIVE_OFFSET
+== OUT OF RANGE ==
+OK_OUT_RANGE
+OK_OUT_RANGE
+OK_OUT_RANGE
+OK_OUT_RANGE
+== NON-EXISTENT ==
+OK_STR
+OK_NEWLINE
+== NO ENCODING PARAMETER ==
+10
+0
+3
+0
+OK_STR
+OK_NEWLINE
+== NO OFFSET AND ENCODING PARAMETER ==
+10
+0
+3
+0
+OK_STR
+OK_NEWLINE
+== INVALID PARAMETER TEST ==
+ERR: Warning
+OK_NULL
+ERR: Warning
+OK_ARRAY
+ERR: Warning
+OK_OBJECT
+ERR: Warning
+OK_BAD_ENCODING
+
diff --git a/ext/mbstring/tests/mb_stripos_basic.phpt b/ext/mbstring/tests/mb_stripos_basic.phpt
new file mode 100644
index 000000000..bb33bb107
--- /dev/null
+++ b/ext/mbstring/tests/mb_stripos_basic.phpt
@@ -0,0 +1,158 @@
+--TEST--
+Test mb_stripos() function : basic functionality
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_stripos') or die("skip mb_stripos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : int mb_stripos(string haystack, string needle [, int offset [, string encoding]])
+ * Description: Finds position of first occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+/*
+ * Test basic functionality of mb_stripos with ASCII and multibyte characters
+ */
+
+echo "*** Testing mb_stripos() : basic functionality***\n";
+
+mb_internal_encoding('UTF-8');
+
+//ascii strings
+$ascii_haystacks = array(
+ b'abc defabc def',
+ b'ABC DEFABC DEF',
+ b'Abc dEFaBC Def',
+);
+
+$ascii_needles = array(
+ // 4 good ones
+ b'DE',
+ b'de',
+ b'De',
+ b'dE',
+
+ //flag a swap between good and bad
+ '!',
+
+ // 4 bad ones
+ b'df',
+ b'Df',
+ b'dF',
+ b'DF'
+);
+
+//greek strings in UTF-8
+$greek_lower = base64_decode('zrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4TPhc+Gz4fPiM+J');
+$greek_upper = base64_decode('zpHOks6TzpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoc6jzqTOpc6mzqfOqM6p');
+$greek_mixed = base64_decode('zrHOss6TzpTOlc6WzpfOmM65zrrOu868zr3Ovs6fzqDOoc6jzqTOpc+Gz4fPiM+J');
+$greek_haystacks = array($greek_lower, $greek_upper, $greek_mixed);
+
+$greek_nlower = base64_decode('zrzOvc6+zr8=');
+$greek_nupper = base64_decode('zpzOnc6ezp8=');
+$greek_nmixed1 = base64_decode('zpzOnc6+zr8=');
+$greek_nmixed2 = base64_decode('zrzOvc6+zp8=');
+
+$greek_blower = base64_decode('zpzOns6f');
+$greek_bupper = base64_decode('zrzOvs6/');
+$greek_bmixed1 = base64_decode('zpzOvs6/');
+$greek_bmixed2 = base64_decode('zrzOvs6f');
+$greek_needles = array(
+ // 4 good ones
+ $greek_nlower, $greek_nupper, $greek_nmixed1, $greek_nmixed2,
+
+ '!', // used to flag a swap between good and bad
+
+ // 4 bad ones
+ $greek_blower, $greek_bupper, $greek_bmixed1, $greek_bmixed2,
+);
+
+// try the basic options
+echo "\n -- ASCII Strings, needle should be found --\n";
+foreach ($ascii_needles as $needle) {
+ if ($needle == '!') {
+ echo "\n -- ASCII Strings, needle should not be found --\n";
+ }
+ else {
+ foreach ($ascii_haystacks as $haystack) {
+ var_dump(mb_stripos($haystack, $needle));
+ }
+ }
+}
+
+echo "\n -- Greek Strings, needle should be found --\n";
+foreach ($greek_needles as $needle) {
+ if ($needle == '!') {
+ echo "\n -- ASCII Strings, needle should not be found --\n";
+ }
+ else {
+ foreach ($greek_haystacks as $haystack) {
+ var_dump(mb_stripos($haystack, $needle));
+ }
+ }
+}
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_stripos() : basic functionality***
+
+ -- ASCII Strings, needle should be found --
+int(4)
+int(4)
+int(4)
+int(4)
+int(4)
+int(4)
+int(4)
+int(4)
+int(4)
+int(4)
+int(4)
+int(4)
+
+ -- ASCII Strings, needle should not be found --
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+
+ -- Greek Strings, needle should be found --
+int(11)
+int(11)
+int(11)
+int(11)
+int(11)
+int(11)
+int(11)
+int(11)
+int(11)
+int(11)
+int(11)
+int(11)
+
+ -- ASCII Strings, needle should not be found --
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+Done
diff --git a/ext/mbstring/tests/mb_stripos_basic2.phpt b/ext/mbstring/tests/mb_stripos_basic2.phpt
new file mode 100644
index 000000000..f9131d987
--- /dev/null
+++ b/ext/mbstring/tests/mb_stripos_basic2.phpt
@@ -0,0 +1,129 @@
+--TEST--
+Test mb_stripos() function : basic functionality
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_stripos') or die("skip mb_stripos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : int mb_stripos(string haystack, string needle [, int offset [, string encoding]])
+ * Description: Finds position of first occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+/*
+ * Test basic functionality of mb_stripos with ASCII and multibyte characters
+ */
+
+echo "*** Testing mb_stripos() : basic functionality***\n";
+
+mb_internal_encoding('UTF-8');
+
+//ascii strings
+$ascii_haystacks = array(
+ b'abc defabc def',
+ b'ABC DEFABC DEF',
+ b'Abc dEFaBC Def',
+);
+
+$ascii_needles = array(
+ // 4 good ones
+ b'DE',
+ b'de',
+ b'De',
+ b'dE',
+);
+
+//greek strings in UTF-8
+$greek_lower = base64_decode('zrrOu868zr3Ovs6/z4DPgSDOus67zrzOvc6+zr/PgA==');
+$greek_upper = base64_decode('zprOm86czp3Ons6fzqDOoSDOms6bzpzOnc6ezp/OoA==');
+$greek_mixed = base64_decode('zrrOu868zr3Ovs6fzqDOoSDOus67zpzOnc6+zr/OoA==');
+$greek_haystacks = array($greek_lower, $greek_upper, $greek_mixed);
+
+$greek_nlower = base64_decode('zrzOvc6+zr8=');
+$greek_nupper = base64_decode('zpzOnc6ezp8=');
+$greek_nmixed1 = base64_decode('zpzOnc6+zr8=');
+$greek_nmixed2 = base64_decode('zrzOvc6+zp8=');
+
+$greek_needles = array(
+ // 4 good ones
+ $greek_nlower, $greek_nupper, $greek_nmixed1, $greek_nmixed2,
+);
+
+// try the basic options
+echo "\n -- ASCII Strings --\n";
+foreach ($ascii_needles as $needle) {
+ foreach ($ascii_haystacks as $haystack) {
+ var_dump(mb_stripos($haystack, $needle));
+ var_dump(mb_stripos($haystack, $needle, 6));
+ }
+}
+
+echo "\n -- Greek Strings --\n";
+foreach ($greek_needles as $needle) {
+ foreach ($greek_haystacks as $haystack) {
+ var_dump(mb_stripos($haystack, $needle));
+ var_dump(mb_stripos($haystack, $needle, 4));
+ }
+}
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_stripos() : basic functionality***
+
+ -- ASCII Strings --
+int(4)
+int(13)
+int(4)
+int(13)
+int(4)
+int(13)
+int(4)
+int(13)
+int(4)
+int(13)
+int(4)
+int(13)
+int(4)
+int(13)
+int(4)
+int(13)
+int(4)
+int(13)
+int(4)
+int(13)
+int(4)
+int(13)
+int(4)
+int(13)
+
+ -- Greek Strings --
+int(2)
+int(11)
+int(2)
+int(11)
+int(2)
+int(11)
+int(2)
+int(11)
+int(2)
+int(11)
+int(2)
+int(11)
+int(2)
+int(11)
+int(2)
+int(11)
+int(2)
+int(11)
+int(2)
+int(11)
+int(2)
+int(11)
+int(2)
+int(11)
+Done
+
diff --git a/ext/mbstring/tests/mb_stripos_error1.phpt b/ext/mbstring/tests/mb_stripos_error1.phpt
new file mode 100644
index 000000000..c4ea5d771
--- /dev/null
+++ b/ext/mbstring/tests/mb_stripos_error1.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test mb_stripos() function : error conditions - Pass incorrect number of args
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_stripos') or die("skip mb_stripos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : int mb_stripos(string haystack, string needle [, int offset [, string encoding]])
+ * Description: Finds position of first occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+/*
+ * Test how mb_stripos behaves when passed an incorrect number of arguments
+ */
+
+echo "*** Testing mb_stripos() : error conditions ***\n";
+
+
+//Test mb_stripos with one more than the expected number of arguments
+echo "\n-- Testing mb_stripos() function with more than expected no. of arguments --\n";
+$haystack = b'string_val';
+$needle = b'string_val';
+$offset = 10;
+$encoding = 'string_val';
+$extra_arg = 10;
+var_dump( mb_stripos($haystack, $needle, $offset, $encoding, $extra_arg) );
+
+// Testing mb_stripos with one less than the expected number of arguments
+echo "\n-- Testing mb_stripos() function with less than expected no. of arguments --\n";
+$haystack = b'string_val';
+var_dump( mb_stripos($haystack) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_stripos() : error conditions ***
+
+-- Testing mb_stripos() function with more than expected no. of arguments --
+
+Warning: mb_stripos() expects at most 4 parameters, 5 given in %s on line %d
+bool(false)
+
+-- Testing mb_stripos() function with less than expected no. of arguments --
+
+Warning: mb_stripos() expects at least 2 parameters, 1 given in %s on line %d
+bool(false)
+Done
diff --git a/ext/mbstring/tests/mb_stripos_error2.phpt b/ext/mbstring/tests/mb_stripos_error2.phpt
new file mode 100644
index 000000000..c5e5c8d3b
--- /dev/null
+++ b/ext/mbstring/tests/mb_stripos_error2.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test mb_stripos() function : error conditions - Pass unknown encoding
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_stripos') or die("skip mb_stripos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : int mb_stripos(string haystack, string needle [, int offset [, string encoding]])
+ * Description: Finds position of first occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+/*
+ * Pass an unknown encoding to mb_stripos() to test behaviour
+ */
+
+echo "*** Testing mb_stripos() : error conditions ***\n";
+$haystack = b'Hello, world';
+$needle = b'world';
+$offset = 2;
+$encoding = 'unknown-encoding';
+
+var_dump( mb_stripos($haystack, $needle, $offset, $encoding) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_stripos() : error conditions ***
+
+Warning: mb_stripos(): Unknown encoding "unknown-encoding" in %s on line %d
+bool(false)
+Done
diff --git a/ext/mbstring/tests/mb_stripos_variation1.phpt b/ext/mbstring/tests/mb_stripos_variation1.phpt
new file mode 100644
index 000000000..ab7f75ee5
--- /dev/null
+++ b/ext/mbstring/tests/mb_stripos_variation1.phpt
@@ -0,0 +1,183 @@
+--TEST--
+Test mb_stripos() function : usage variations - pass different data types to $haystack arg
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_stripos') or die("skip mb_stripos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : int mb_stripos(string haystack, string needle [, int offset [, string encoding]])
+ * Description: Finds position of first occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+/*
+ * Pass mb_stripos different data types as $haystack arg to test behaviour
+ */
+
+echo "*** Testing mb_stripos() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$needle = b'string_val';
+$offset = 0;
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $haystack argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+
+ // string data
+/*18*/ "string",
+ 'string',
+ $heredoc,
+
+ // object data
+/*21*/ new classA(),
+
+ // undefined data
+/*22*/ @$undefined_var,
+
+ // unset data
+/*23*/ @$unset_var,
+
+ // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of mb_stripos()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( mb_stripos($input, $needle, $offset, $encoding));
+ $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_stripos() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+
+Warning: mb_stripos() expects parameter 1 to be string, resource given in %s on line %d
+bool(false)
+Done \ No newline at end of file
diff --git a/ext/mbstring/tests/mb_stripos_variation2.phpt b/ext/mbstring/tests/mb_stripos_variation2.phpt
new file mode 100644
index 000000000..47a891fb7
--- /dev/null
+++ b/ext/mbstring/tests/mb_stripos_variation2.phpt
@@ -0,0 +1,183 @@
+--TEST--
+Test mb_stripos() function : usage variations - pass different data types as $needle arg
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_stripos') or die("skip mb_stripos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : int mb_stripos(string haystack, string needle [, int offset [, string encoding]])
+ * Description: Finds position of first occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+/*
+ * Pass mb_stripos different data types as $needle arg to test behaviour
+ */
+
+echo "*** Testing mb_stripos() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$haystack = b'string_val';
+$offset = 0;
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $needle argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+
+ // string data
+/*18*/ b"string",
+ b'string',
+ $heredoc,
+
+ // object data
+/*21*/ new classA(),
+
+ // undefined data
+/*22*/ @$undefined_var,
+
+ // unset data
+/*23*/ @$unset_var,
+
+ // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of mb_stripos()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( mb_stripos($haystack, $input, $offset, $encoding));
+ $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_stripos() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+int(0)
+
+-- Iteration 19 --
+int(0)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+
+Warning: mb_stripos() expects parameter 2 to be string, resource given in %s on line %d
+bool(false)
+Done \ No newline at end of file
diff --git a/ext/mbstring/tests/mb_stripos_variation3.phpt b/ext/mbstring/tests/mb_stripos_variation3.phpt
new file mode 100644
index 000000000..41a365abf
--- /dev/null
+++ b/ext/mbstring/tests/mb_stripos_variation3.phpt
@@ -0,0 +1,203 @@
+--TEST--
+Test mb_stripos() function : usage variations - pass different data types as $offset arg
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_stripos') or die("skip mb_stripos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : int mb_stripos(string haystack, string needle [, int offset [, string encoding]])
+ * Description: Finds position of first occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+/*
+ * Pass mb_stripos different data types as $offset arg to test behaviour
+ */
+
+echo "*** Testing mb_stripos() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$needle = b'A';
+$haystack = b'string_val';
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $offest argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+
+ // string data
+/*18*/ "string",
+ 'string',
+ $heredoc,
+
+ // object data
+/*21*/ new classA(),
+
+ // undefined data
+/*22*/ @$undefined_var,
+
+ // unset data
+/*23*/ @$unset_var,
+
+ // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of mb_stripos()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( mb_stripos($haystack, $needle, $input, $encoding));
+ $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_stripos() : usage variations ***
+
+-- Iteration 1 --
+int(8)
+
+-- Iteration 2 --
+int(8)
+
+-- Iteration 3 --
+
+Warning: mb_stripos(): Offset not contained in string in %s on line %d
+bool(false)
+
+-- Iteration 4 --
+
+Warning: mb_stripos(): Offset not contained in string in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+
+Warning: mb_stripos(): Offset not contained in string in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+
+Warning: mb_stripos(): Offset not contained in string in %s on line %d
+bool(false)
+
+-- Iteration 8 --
+int(8)
+
+-- Iteration 9 --
+int(8)
+
+-- Iteration 10 --
+int(8)
+
+-- Iteration 11 --
+int(8)
+
+-- Iteration 12 --
+int(8)
+
+-- Iteration 13 --
+int(8)
+
+-- Iteration 14 --
+int(8)
+
+-- Iteration 15 --
+int(8)
+
+-- Iteration 16 --
+
+Warning: mb_stripos() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Warning: mb_stripos() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+
+Warning: mb_stripos() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 19 --
+
+Warning: mb_stripos() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 20 --
+
+Warning: mb_stripos() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 21 --
+
+Warning: mb_stripos() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+-- Iteration 22 --
+int(8)
+
+-- Iteration 23 --
+int(8)
+
+-- Iteration 24 --
+
+Warning: mb_stripos() expects parameter 3 to be long, resource given in %s on line %d
+bool(false)
+Done
diff --git a/ext/mbstring/tests/mb_stripos_variation4.phpt b/ext/mbstring/tests/mb_stripos_variation4.phpt
new file mode 100644
index 000000000..f330bbdae
--- /dev/null
+++ b/ext/mbstring/tests/mb_stripos_variation4.phpt
@@ -0,0 +1,223 @@
+--TEST--
+Test mb_stripos() function : usage variations - pass different data types as $encoding arg
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_stripos') or die("skip mb_stripos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : int mb_stripos(string haystack, string needle [, int offset [, string encoding]])
+ * Description: Finds position of first occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+/*
+ * Pass mb_stripos different data types as $encoding arg to test behaviour
+ * Where possible 'UTF-8' has been entered as a string value
+ */
+
+echo "*** Testing mb_stripos() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$haystack = b'string_val';
+$needle = b'VaL';
+$offset = 0;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "UTF-8";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+UTF-8
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $input argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+
+ // string data
+/*18*/ "UTF-8",
+ 'UTF-8',
+ $heredoc,
+
+ // object data
+/*21*/ new classA(),
+
+ // undefined data
+/*22*/ @$undefined_var,
+
+ // unset data
+/*23*/ @$unset_var,
+
+ // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of mb_stripos()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( mb_stripos($haystack, $needle, $offset, $input));
+ $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+
+--EXPECTF--
+*** Testing mb_stripos() : usage variations ***
+
+-- Iteration 1 --
+
+Warning: mb_stripos(): Unknown encoding "0" in %s on line %d
+bool(false)
+
+-- Iteration 2 --
+
+Warning: mb_stripos(): Unknown encoding "1" in %s on line %d
+bool(false)
+
+-- Iteration 3 --
+
+Warning: mb_stripos(): Unknown encoding "12345" in %s on line %d
+bool(false)
+
+-- Iteration 4 --
+
+Warning: mb_stripos(): Unknown encoding "-2345" in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+
+Warning: mb_stripos(): Unknown encoding "10.5" in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Warning: mb_stripos(): Unknown encoding "-10.5" in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+
+Warning: mb_stripos(): Unknown encoding "123456789000" in %s on line %d
+bool(false)
+
+-- Iteration 8 --
+
+Warning: mb_stripos(): Unknown encoding "1.23456789E-9" in %s on line %d
+bool(false)
+
+-- Iteration 9 --
+
+Warning: mb_stripos(): Unknown encoding "0.5" in %s on line %d
+bool(false)
+
+-- Iteration 10 --
+
+Warning: mb_stripos(): Unknown encoding "" in %s on line %d
+bool(false)
+
+-- Iteration 11 --
+
+Warning: mb_stripos(): Unknown encoding "" in %s on line %d
+bool(false)
+
+-- Iteration 12 --
+
+Warning: mb_stripos(): Unknown encoding "1" in %s on line %d
+bool(false)
+
+-- Iteration 13 --
+
+Warning: mb_stripos(): Unknown encoding "" in %s on line %d
+bool(false)
+
+-- Iteration 14 --
+
+Warning: mb_stripos(): Unknown encoding "1" in %s on line %d
+bool(false)
+
+-- Iteration 15 --
+
+Warning: mb_stripos(): Unknown encoding "" in %s on line %d
+bool(false)
+
+-- Iteration 16 --
+
+Warning: mb_stripos(): Unknown encoding "" in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Warning: mb_stripos(): Unknown encoding "" in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+int(7)
+
+-- Iteration 19 --
+int(7)
+
+-- Iteration 20 --
+int(7)
+
+-- Iteration 21 --
+int(7)
+
+-- Iteration 22 --
+
+Warning: mb_stripos(): Unknown encoding "" in %s on line %d
+bool(false)
+
+-- Iteration 23 --
+
+Warning: mb_stripos(): Unknown encoding "" in %s on line %d
+bool(false)
+
+-- Iteration 24 --
+
+Warning: mb_stripos() expects parameter 4 to be string, resource given in %s on line %d
+bool(false)
+Done \ No newline at end of file
diff --git a/ext/mbstring/tests/mb_stripos_variation5_Bug45923.phpt b/ext/mbstring/tests/mb_stripos_variation5_Bug45923.phpt
new file mode 100644
index 000000000..134a4c3ec
--- /dev/null
+++ b/ext/mbstring/tests/mb_stripos_variation5_Bug45923.phpt
@@ -0,0 +1,119 @@
+--TEST--
+Test mb_stripos() function : usage variations - Pass different integers as $offset argument
+--XFAIL--
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_stripos') or die("skip mb_stripos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : int mb_stripos(string haystack, string needle [, int offset [, string encoding]])
+ * Description: Finds position of first occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+/*
+ * Test how mb_stripos() behaves when passed different integers as $offset argument
+ * The character length of $string_ascii and $string_mb is the same,
+ * and the needle appears at the same positions in both strings
+ */
+
+mb_internal_encoding('UTF-8');
+
+echo "*** Testing mb_stripos() : usage variations ***\n";
+
+$string_ascii = b'+Is an English string'; //21 chars
+$needle_ascii = b'G';
+
+$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); //21 chars
+$needle_mb = base64_decode('44CC');
+
+/*
+ * Loop through integers as multiples of ten for $offset argument
+ * mb_stripos should not be able to accept negative values as $offset.
+ * 60 is larger than *BYTE* count for $string_mb
+ */
+for ($i = -10; $i <= 60; $i += 10) {
+ echo "\n**-- Offset is: $i --**\n";
+ echo "-- ASCII String --\n";
+ var_dump(mb_stripos($string_ascii, $needle_ascii, $i));
+ echo "--Multibyte String --\n";
+ var_dump(mb_stripos($string_mb, $needle_mb, $i, 'UTF-8'));
+}
+
+echo "Done";
+?>
+
+--EXPECTF--
+*** Testing mb_stripos() : usage variations ***
+
+**-- Offset is: -10 --**
+-- ASCII String --
+
+Warning: mb_stripos(): Offset not contained in string in %s on line %d
+bool(false)
+--Multibyte String --
+
+Warning: mb_stripos(): Offset not contained in string in %s on line %d
+bool(false)
+
+**-- Offset is: 0 --**
+-- ASCII String --
+int(9)
+--Multibyte String --
+int(9)
+
+**-- Offset is: 10 --**
+-- ASCII String --
+int(20)
+--Multibyte String --
+int(20)
+
+**-- Offset is: 20 --**
+-- ASCII String --
+int(20)
+--Multibyte String --
+int(20)
+
+**-- Offset is: 30 --**
+-- ASCII String --
+
+Warning: mb_stripos(): Offset not contained in string in %s on line %d
+bool(false)
+--Multibyte String --
+
+Warning: mb_stripos(): Offset not contained in string in %s on line %d
+bool(false)
+
+**-- Offset is: 40 --**
+-- ASCII String --
+
+Warning: mb_stripos(): Offset not contained in string in %s on line %d
+bool(false)
+--Multibyte String --
+
+Warning: mb_stripos(): Offset not contained in string in %s on line %d
+bool(false)
+
+**-- Offset is: 50 --**
+-- ASCII String --
+
+Warning: mb_stripos(): Offset not contained in string in %s on line %d
+bool(false)
+--Multibyte String --
+
+Warning: mb_stripos(): Offset not contained in string in %s on line %d
+bool(false)
+
+**-- Offset is: 60 --**
+-- ASCII String --
+
+Warning: mb_stripos(): Offset not contained in string in %s on line %d
+bool(false)
+--Multibyte String --
+
+Warning: mb_stripos(): Offset not contained in string in %s on line %d
+bool(false)
+Done
diff --git a/ext/mbstring/tests/mb_stristr_basic.phpt b/ext/mbstring/tests/mb_stristr_basic.phpt
new file mode 100644
index 000000000..9340d3511
--- /dev/null
+++ b/ext/mbstring/tests/mb_stristr_basic.phpt
@@ -0,0 +1,70 @@
+--TEST--
+Test mb_stristr() function : basic functionality
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_stristr') or die("skip mb_stristr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_stristr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds first occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_stristr() : basic functionality ***\n";
+
+mb_internal_encoding('UTF-8');
+
+$string_ascii = b'abcdef';
+$needle_ascii_upper = b"BCD";
+$needle_ascii_mixed = b"bCd";
+$needle_ascii_lower = b"bcd";
+
+//Greek string in lower case UTF-8
+$string_mb = base64_decode('zrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4TPhc+Gz4fPiM+J');
+$needle_mb_upper = base64_decode('zpzOnc6ezp8=');
+$needle_mb_lower = base64_decode('zrzOvc6+zr8=');
+$needle_mb_mixed = base64_decode('zpzOnc6+zr8=');
+
+echo "\n-- ASCII string: needle exists --\n";
+var_dump(bin2hex(mb_stristr($string_ascii, $needle_ascii_upper, false, 'ISO-8859-1')));
+var_dump(bin2hex(mb_stristr($string_ascii, $needle_ascii_lower)));
+var_dump(bin2hex(mb_stristr($string_ascii, $needle_ascii_mixed, true)));
+
+
+echo "\n-- ASCII string: needle doesn't exist --\n";
+var_dump(mb_stristr($string_ascii, '123'));
+
+echo "\n-- Multibyte string: needle exists --\n";
+var_dump(bin2hex(mb_stristr($string_mb, $needle_mb_upper)));
+var_dump(bin2hex(mb_stristr($string_mb, $needle_mb_lower, false, 'utf-8')));
+var_dump(bin2hex(mb_stristr($string_mb, $needle_mb_mixed, true)));
+
+
+echo "\n-- Multibyte string: needle doesn't exist --\n";
+$needle2 = base64_decode("zrzOvs6/");
+var_dump(mb_stristr($string_mb, $needle2));
+
+?>
+===DONE===
+--EXPECT--
+*** Testing mb_stristr() : basic functionality ***
+
+-- ASCII string: needle exists --
+string(10) "6263646566"
+string(10) "6263646566"
+string(2) "61"
+
+-- ASCII string: needle doesn't exist --
+bool(false)
+
+-- Multibyte string: needle exists --
+string(52) "cebccebdcebecebfcf80cf81cf83cf84cf85cf86cf87cf88cf89"
+string(52) "cebccebdcebecebfcf80cf81cf83cf84cf85cf86cf87cf88cf89"
+string(44) "ceb1ceb2ceb3ceb4ceb5ceb6ceb7ceb8ceb9cebacebb"
+
+-- Multibyte string: needle doesn't exist --
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_stristr_error1.phpt b/ext/mbstring/tests/mb_stristr_error1.phpt
new file mode 100644
index 000000000..3c766c4fa
--- /dev/null
+++ b/ext/mbstring/tests/mb_stristr_error1.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test mb_stristr() function : error conditions
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_stristr') or die("skip mb_stristr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_stristr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds first occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_stristr() : error conditions ***\n";
+
+
+//Test mb_stristr with one more than the expected number of arguments
+echo "\n-- Testing mb_stristr() function with more than expected no. of arguments --\n";
+$haystack = b'string_val';
+$needle = b'string_val';
+$part = true;
+$encoding = 'string_val';
+$extra_arg = 10;
+var_dump( mb_stristr($haystack, $needle, $part, $encoding, $extra_arg) );
+
+// Testing mb_stristr with one less than the expected number of arguments
+echo "\n-- Testing mb_stristr() function with less than expected no. of arguments --\n";
+$haystack = b'string_val';
+var_dump( mb_stristr($haystack) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_stristr() : error conditions ***
+
+-- Testing mb_stristr() function with more than expected no. of arguments --
+
+Warning: mb_stristr() expects at most 4 parameters, 5 given in %s on line %d
+bool(false)
+
+-- Testing mb_stristr() function with less than expected no. of arguments --
+
+Warning: mb_stristr() expects at least 2 parameters, 1 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_stristr_error2.phpt b/ext/mbstring/tests/mb_stristr_error2.phpt
new file mode 100644
index 000000000..73f13dc85
--- /dev/null
+++ b/ext/mbstring/tests/mb_stristr_error2.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test mb_stristr() function : error conditions
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_stristr') or die("skip mb_stristr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_stristr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds first occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_stristr() : error conditions ***\n";
+
+
+echo "\n-- Testing mb_stristr() with unknown encoding --\n";
+$haystack = b'Hello, world';
+$needle = b'world';
+$encoding = 'unknown-encoding';
+$part = true;
+var_dump( mb_stristr($haystack, $needle, $part, $encoding) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_stristr() : error conditions ***
+
+-- Testing mb_stristr() with unknown encoding --
+
+Warning: mb_stristr(): Unknown encoding "unknown-encoding" in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_stristr_variation1.phpt b/ext/mbstring/tests/mb_stristr_variation1.phpt
new file mode 100644
index 000000000..ecea23eca
--- /dev/null
+++ b/ext/mbstring/tests/mb_stristr_variation1.phpt
@@ -0,0 +1,207 @@
+--TEST--
+Test mb_stristr() function : usage variation - various haystacks, needle won't be found
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_stristr') or die("skip mb_stristr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_stristr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds first occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_stristr() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$needle = b'string_val';
+$part = true;
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for haystack
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( mb_stristr($value, $needle, $part, $encoding) );
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_stristr() : usage variation ***
+
+--int 0--
+bool(false)
+
+--int 1--
+bool(false)
+
+--int 12345--
+bool(false)
+
+--int -12345--
+bool(false)
+
+--float 10.5--
+bool(false)
+
+--float -10.5--
+bool(false)
+
+--float 12.3456789000e10--
+bool(false)
+
+--float -12.3456789000e10--
+bool(false)
+
+--float .5--
+bool(false)
+
+--empty array--
+Error: 2 - mb_stristr() expects parameter 1 to be string, array given, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - mb_stristr() expects parameter 1 to be string, array given, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - mb_stristr() expects parameter 1 to be string, array given, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - mb_stristr() expects parameter 1 to be string, array given, %s(%d)
+bool(false)
+
+--uppercase NULL--
+bool(false)
+
+--lowercase null--
+bool(false)
+
+--lowercase true--
+bool(false)
+
+--lowercase false--
+bool(false)
+
+--uppercase TRUE--
+bool(false)
+
+--uppercase FALSE--
+bool(false)
+
+--empty string DQ--
+bool(false)
+
+--empty string SQ--
+bool(false)
+
+--instance of classWithToString--
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - mb_stristr() expects parameter 1 to be string, object given, %s(%d)
+bool(false)
+
+--undefined var--
+bool(false)
+
+--unset var--
+bool(false)
+
+--resource--
+Error: 2 - mb_stristr() expects parameter 1 to be string, resource given, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_stristr_variation2.phpt b/ext/mbstring/tests/mb_stristr_variation2.phpt
new file mode 100644
index 000000000..714c0e570
--- /dev/null
+++ b/ext/mbstring/tests/mb_stristr_variation2.phpt
@@ -0,0 +1,215 @@
+--TEST--
+Test mb_stristr() function : usage variation - different types of needle.
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_stristr') or die("skip mb_stristr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_stristr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds first occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_stristr() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$haystack = b'string_val';
+$part = true;
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for needle
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( mb_stristr($haystack, $value, $part, $encoding) );
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_stristr() : usage variation ***
+
+--int 0--
+bool(false)
+
+--int 1--
+bool(false)
+
+--int 12345--
+bool(false)
+
+--int -12345--
+bool(false)
+
+--float 10.5--
+bool(false)
+
+--float -10.5--
+bool(false)
+
+--float 12.3456789000e10--
+bool(false)
+
+--float -12.3456789000e10--
+bool(false)
+
+--float .5--
+bool(false)
+
+--empty array--
+Error: 2 - mb_stristr() expects parameter 2 to be string, array given, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - mb_stristr() expects parameter 2 to be string, array given, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - mb_stristr() expects parameter 2 to be string, array given, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - mb_stristr() expects parameter 2 to be string, array given, %s(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - mb_stristr(): Empty delimiter, %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - mb_stristr(): Empty delimiter, %s(%d)
+bool(false)
+
+--lowercase true--
+bool(false)
+
+--lowercase false--
+Error: 2 - mb_stristr(): Empty delimiter, %s(%d)
+bool(false)
+
+--uppercase TRUE--
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - mb_stristr(): Empty delimiter, %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - mb_stristr(): Empty delimiter, %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - mb_stristr(): Empty delimiter, %s(%d)
+bool(false)
+
+--instance of classWithToString--
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - mb_stristr() expects parameter 2 to be string, object given, %s(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - mb_stristr(): Empty delimiter, %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - mb_stristr(): Empty delimiter, %s(%d)
+bool(false)
+
+--resource--
+Error: 2 - mb_stristr() expects parameter 2 to be string, resource given, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_stristr_variation3.phpt b/ext/mbstring/tests/mb_stristr_variation3.phpt
new file mode 100644
index 000000000..30a7e4989
--- /dev/null
+++ b/ext/mbstring/tests/mb_stristr_variation3.phpt
@@ -0,0 +1,232 @@
+--TEST--
+Test mb_stristr() function : usage variation - different values for part
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_stristr') or die("skip mb_stristr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_stristr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds first occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_stristr() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$haystack = b'string_val';
+$needle = b'_';
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for part
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ $res = mb_stristr($haystack, $needle, $value, $encoding);
+ if ($res === false) {
+ var_dump($res);
+ }
+ else {
+ var_dump(bin2hex($res));
+ }
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_stristr() : usage variation ***
+
+--int 0--
+string(8) "5f76616c"
+
+--int 1--
+string(12) "737472696e67"
+
+--int 12345--
+string(12) "737472696e67"
+
+--int -12345--
+string(12) "737472696e67"
+
+--float 10.5--
+string(12) "737472696e67"
+
+--float -10.5--
+string(12) "737472696e67"
+
+--float 12.3456789000e10--
+string(12) "737472696e67"
+
+--float -12.3456789000e10--
+string(12) "737472696e67"
+
+--float .5--
+string(12) "737472696e67"
+
+--empty array--
+Error: 2 - mb_stristr() expects parameter 3 to be boolean, array given, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - mb_stristr() expects parameter 3 to be boolean, array given, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - mb_stristr() expects parameter 3 to be boolean, array given, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - mb_stristr() expects parameter 3 to be boolean, array given, %s(%d)
+bool(false)
+
+--uppercase NULL--
+string(8) "5f76616c"
+
+--lowercase null--
+string(8) "5f76616c"
+
+--lowercase true--
+string(12) "737472696e67"
+
+--lowercase false--
+string(8) "5f76616c"
+
+--uppercase TRUE--
+string(12) "737472696e67"
+
+--uppercase FALSE--
+string(8) "5f76616c"
+
+--empty string DQ--
+string(8) "5f76616c"
+
+--empty string SQ--
+string(8) "5f76616c"
+
+--string DQ--
+string(12) "737472696e67"
+
+--string SQ--
+string(12) "737472696e67"
+
+--mixed case string--
+string(12) "737472696e67"
+
+--heredoc--
+string(12) "737472696e67"
+
+--instance of classWithToString--
+Error: 2 - mb_stristr() expects parameter 3 to be boolean, object given, %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - mb_stristr() expects parameter 3 to be boolean, object given, %s(%d)
+bool(false)
+
+--undefined var--
+string(8) "5f76616c"
+
+--unset var--
+string(8) "5f76616c"
+
+--resource--
+Error: 2 - mb_stristr() expects parameter 3 to be boolean, resource given, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_stristr_variation4.phpt b/ext/mbstring/tests/mb_stristr_variation4.phpt
new file mode 100644
index 000000000..d547543ae
--- /dev/null
+++ b/ext/mbstring/tests/mb_stristr_variation4.phpt
@@ -0,0 +1,227 @@
+--TEST--
+Test mb_stristr() function : usage variation - different encoding types
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_stristr') or die("skip mb_stristr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_stristr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds first occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_stristr() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$haystack = b'string_val';
+$needle = b'_';
+$part = true;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "invalid";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+utf-8
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for encoding
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( mb_stristr($haystack, $needle, $part, $value) );
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_stristr() : usage variation ***
+
+--int 0--
+Error: 2 - mb_stristr(): Unknown encoding "0", %s(%d)
+bool(false)
+
+--int 1--
+Error: 2 - mb_stristr(): Unknown encoding "1", %s(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - mb_stristr(): Unknown encoding "12345", %s(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - mb_stristr(): Unknown encoding "-2345", %s(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - mb_stristr(): Unknown encoding "10.5", %s(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - mb_stristr(): Unknown encoding "-10.5", %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - mb_stristr(): Unknown encoding "123456789000", %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - mb_stristr(): Unknown encoding "-123456789000", %s(%d)
+bool(false)
+
+--float .5--
+Error: 2 - mb_stristr(): Unknown encoding "0.5", %s(%d)
+bool(false)
+
+--empty array--
+Error: 2 - mb_stristr() expects parameter 4 to be string, array given, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - mb_stristr() expects parameter 4 to be string, array given, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - mb_stristr() expects parameter 4 to be string, array given, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - mb_stristr() expects parameter 4 to be string, array given, %s(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - mb_stristr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - mb_stristr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - mb_stristr(): Unknown encoding "1", %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - mb_stristr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - mb_stristr(): Unknown encoding "1", %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - mb_stristr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - mb_stristr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - mb_stristr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - mb_stristr(): Unknown encoding "invalid", %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - mb_stristr() expects parameter 4 to be string, object given, %s(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - mb_stristr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - mb_stristr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--resource--
+Error: 2 - mb_stristr() expects parameter 4 to be string, resource given, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_stristr_variation5.phpt b/ext/mbstring/tests/mb_stristr_variation5.phpt
new file mode 100644
index 000000000..5d5482010
--- /dev/null
+++ b/ext/mbstring/tests/mb_stristr_variation5.phpt
@@ -0,0 +1,69 @@
+--TEST--
+Test mb_stristr() function : usage variation - multiple needles
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_stristr') or die("skip mb_stristr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_stristr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds first occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_stristr() : basic functionality ***\n";
+
+mb_internal_encoding('UTF-8');
+
+//ascii mixed case, multiple needles
+$string_ascii = b'abcDef zBcDyx';
+$needle_ascii_upper = b"BCD";
+$needle_ascii_mixed = b"bCd";
+$needle_ascii_lower = b"bcd";
+
+//Greek string in mixed case UTF-8 with multiple needles
+$string_mb = base64_decode('zrrOu868zr3Ovs6fzqDOoSDOus67zpzOnc6+zr/OoA==');
+$needle_mb_upper = base64_decode('zpzOnc6ezp8=');
+$needle_mb_lower = base64_decode('zrzOvc6+zr8=');
+$needle_mb_mixed = base64_decode('zpzOnc6+zr8=');
+
+echo "\n-- ASCII string: needle exists --\n";
+var_dump(bin2hex(mb_stristr($string_ascii, $needle_ascii_upper, false)));
+var_dump(bin2hex(mb_stristr($string_ascii, $needle_ascii_upper, true)));
+var_dump(bin2hex(mb_stristr($string_ascii, $needle_ascii_lower, false)));
+var_dump(bin2hex(mb_stristr($string_ascii, $needle_ascii_lower, true)));
+var_dump(bin2hex(mb_stristr($string_ascii, $needle_ascii_mixed, false)));
+var_dump(bin2hex(mb_stristr($string_ascii, $needle_ascii_mixed, true)));
+
+
+echo "\n-- Multibyte string: needle exists --\n";
+var_dump(bin2hex(mb_stristr($string_mb, $needle_mb_upper, false)));
+var_dump(bin2hex(mb_stristr($string_mb, $needle_mb_upper, true)));
+var_dump(bin2hex(mb_stristr($string_mb, $needle_mb_lower, false)));
+var_dump(bin2hex(mb_stristr($string_mb, $needle_mb_lower, true)));
+var_dump(bin2hex(mb_stristr($string_mb, $needle_mb_mixed, false)));
+var_dump(bin2hex(mb_stristr($string_mb, $needle_mb_mixed, true)));
+
+?>
+===DONE===
+--EXPECT--
+*** Testing mb_stristr() : basic functionality ***
+
+-- ASCII string: needle exists --
+string(24) "6263446566207a4263447978"
+string(2) "61"
+string(24) "6263446566207a4263447978"
+string(2) "61"
+string(24) "6263446566207a4263447978"
+string(2) "61"
+
+-- Multibyte string: needle exists --
+string(54) "cebccebdcebece9fcea0cea120cebacebbce9cce9dcebecebfcea0"
+string(8) "cebacebb"
+string(54) "cebccebdcebece9fcea0cea120cebacebbce9cce9dcebecebfcea0"
+string(8) "cebacebb"
+string(54) "cebccebdcebece9fcea0cea120cebacebbce9cce9dcebecebfcea0"
+string(8) "cebacebb"
+===DONE===
diff --git a/ext/mbstring/tests/mb_strlen_basic.phpt b/ext/mbstring/tests/mb_strlen_basic.phpt
index 6214f3069..a5dbe512b 100644
--- a/ext/mbstring/tests/mb_strlen_basic.phpt
+++ b/ext/mbstring/tests/mb_strlen_basic.phpt
@@ -18,7 +18,7 @@ function_exists('mb_strlen') or die("skip mb_strlen() is not available in this b
echo "*** Testing mb_strlen() : basic functionality***\n";
-$string_ascii = 'abc def';
+$string_ascii = b'abc def';
//Japanese string in UTF-8
$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=');
diff --git a/ext/mbstring/tests/mb_strlen_variation1.phpt b/ext/mbstring/tests/mb_strlen_variation1.phpt
index a64fad17e..3c9cfe3c8 100644
--- a/ext/mbstring/tests/mb_strlen_variation1.phpt
+++ b/ext/mbstring/tests/mb_strlen_variation1.phpt
@@ -29,12 +29,12 @@ unset ($unset_var);
class classA
{
public function __toString() {
- return "Class A object";
+ return b"Class A object";
}
}
// heredoc string
-$heredoc = <<<EOT
+$heredoc = b<<<EOT
hello world
EOT;
@@ -72,8 +72,8 @@ $inputs = array(
'',
// string data
-/*18*/ "string",
- 'string',
+/*18*/ b"string",
+ b'string',
$heredoc,
// object data
diff --git a/ext/mbstring/tests/mb_strpos.phpt b/ext/mbstring/tests/mb_strpos.phpt
index ca49599fa..1d613e9c7 100644
--- a/ext/mbstring/tests/mb_strpos.phpt
+++ b/ext/mbstring/tests/mb_strpos.phpt
@@ -12,18 +12,18 @@ include_once('common.inc');
// Test string
-$euc_jp = '0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£0123ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£';
+$euc_jp = b'0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£0123ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£';
// EUC-JP - With encoding parameter
mb_internal_encoding('UTF-8') or print("mb_internal_encoding() failed\n");
echo "== POSITIVE OFFSET ==\n";
-print mb_strpos($euc_jp,'ÆüËܸì', 0, 'EUC-JP') . "\n";
-print mb_strpos($euc_jp, '0', 0, 'EUC-JP') . "\n";
+print mb_strpos($euc_jp, b'ÆüËܸì', 0, 'EUC-JP') . "\n";
+print mb_strpos($euc_jp, b'0', 0, 'EUC-JP') . "\n";
print mb_strpos($euc_jp, 3, 0, 'EUC-JP') . "\n";
print mb_strpos($euc_jp, 0, 0, 'EUC-JP') . "\n";
-print mb_strpos($euc_jp,'ÆüËܸì', 15, 'EUC-JP') . "\n";
-print mb_strpos($euc_jp, '0', 15, 'EUC-JP') . "\n";
+print mb_strpos($euc_jp, b'ÆüËܸì', 15, 'EUC-JP') . "\n";
+print mb_strpos($euc_jp, b'0', 15, 'EUC-JP') . "\n";
print mb_strpos($euc_jp, 3, 15, 'EUC-JP') . "\n";
print mb_strpos($euc_jp, 0, 15, 'EUC-JP') . "\n";
@@ -31,17 +31,17 @@ print mb_strpos($euc_jp, 0, 15, 'EUC-JP') . "\n";
// Note: PHP Warning - offset is negative.
// Note: For offset(-15). It does not return position of latter string. (ie the same result as -50)
echo "== NEGATIVE OFFSET ==\n";
-$r = mb_strpos($euc_jp,'ÆüËܸì', -15, 'EUC-JP');
+$r = mb_strpos($euc_jp, b'ÆüËܸì', -15, 'EUC-JP');
($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
-$r = mb_strpos($euc_jp, '0', -15, 'EUC-JP');
+$r = mb_strpos($euc_jp, b'0', -15, 'EUC-JP');
($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
$r = mb_strpos($euc_jp, 3, -15, 'EUC-JP');
($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
$r = mb_strpos($euc_jp, 0, -15, 'EUC-JP');
($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
-$r = mb_strpos($euc_jp,'ÆüËܸì', -50, 'EUC-JP');
+$r = mb_strpos($euc_jp, b'ÆüËܸì', -50, 'EUC-JP');
($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
-$r = mb_strpos($euc_jp, '0', -50, 'EUC-JP');
+$r = mb_strpos($euc_jp, b'0', -50, 'EUC-JP');
($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
$r = mb_strpos($euc_jp, 3, -50, 'EUC-JP');
($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
@@ -50,9 +50,9 @@ $r = mb_strpos($euc_jp, 0, -50, 'EUC-JP');
// Out of range - should return false
print ("== OUT OF RANGE ==\n");
-$r = mb_strpos($euc_jp,'ÆüËܸì', 40, 'EUC-JP');
+$r = mb_strpos($euc_jp, b'ÆüËܸì', 40, 'EUC-JP');
($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
-$r = mb_strpos($euc_jp, '0', 40, 'EUC-JP');
+$r = mb_strpos($euc_jp, b'0', 40, 'EUC-JP');
($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
$r = mb_strpos($euc_jp, 3, 40, 'EUC-JP');
($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n";
@@ -64,9 +64,9 @@ $r = mb_strpos($euc_jp, 0, 40, 'EUC-JP');
// Non-existent
echo "== NON-EXISTENT ==\n";
-$r = mb_strpos($euc_jp, '´Ú¹ñ¸ì', 0, 'EUC-JP');
+$r = mb_strpos($euc_jp, b'´Ú¹ñ¸ì', 0, 'EUC-JP');
($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n";
-$r = mb_strpos($euc_jp, "\n", 0, 'EUC-JP');
+$r = mb_strpos($euc_jp, b"\n", 0, 'EUC-JP');
($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n";
@@ -74,28 +74,28 @@ $r = mb_strpos($euc_jp, "\n", 0, 'EUC-JP');
echo "== NO ENCODING PARAMETER ==\n";
mb_internal_encoding('EUC-JP') or print("mb_internal_encoding() failed\n");
-print mb_strpos($euc_jp,'ÆüËܸì', 0) . "\n";
-print mb_strpos($euc_jp, '0', 0) . "\n";
+print mb_strpos($euc_jp, b'ÆüËܸì', 0) . "\n";
+print mb_strpos($euc_jp, b'0', 0) . "\n";
print mb_strpos($euc_jp, 3, 0) . "\n";
print mb_strpos($euc_jp, 0, 0) . "\n";
-$r = mb_strpos($euc_jp,'´Ú¹ñ¸ì', 0);
+$r = mb_strpos($euc_jp, b'´Ú¹ñ¸ì', 0);
($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n";
-$r = mb_strpos($euc_jp,"\n", 0);
+$r = mb_strpos($euc_jp, b"\n", 0);
($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n";
// EUC-JP - No offset and encoding parameter
echo "== NO OFFSET AND ENCODING PARAMETER ==\n";
mb_internal_encoding('EUC-JP') or print("mb_internal_encoding() failed\n");
-print mb_strpos($euc_jp,'ÆüËܸì') . "\n";
-print mb_strpos($euc_jp, '0') . "\n";
+print mb_strpos($euc_jp, b'ÆüËܸì') . "\n";
+print mb_strpos($euc_jp, b'0') . "\n";
print mb_strpos($euc_jp, 3) . "\n";
print mb_strpos($euc_jp, 0) . "\n";
-$r = mb_strpos($euc_jp,'´Ú¹ñ¸ì');
+$r = mb_strpos($euc_jp, b'´Ú¹ñ¸ì');
($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n";
-$r = mb_strpos($euc_jp,"\n");
+$r = mb_strpos($euc_jp, b"\n");
($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n";
diff --git a/ext/mbstring/tests/mb_strpos_basic.phpt b/ext/mbstring/tests/mb_strpos_basic.phpt
index 4284ab805..36641b127 100644
--- a/ext/mbstring/tests/mb_strpos_basic.phpt
+++ b/ext/mbstring/tests/mb_strpos_basic.phpt
@@ -20,12 +20,12 @@ echo "*** Testing mb_strpos() : basic functionality***\n";
mb_internal_encoding('UTF-8');
-$string_ascii = 'abc def';
+$string_ascii = b'abc def';
//Japanese string in UTF-8
$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=');
echo "\n-- ASCII string 1 --\n";
-var_dump(mb_strpos($string_ascii, 'd', 2, 'ISO-8859-1'));
+var_dump(mb_strpos($string_ascii, b'd', 2, 'ISO-8859-1'));
echo "\n-- ASCII string 2 --\n";
var_dump(mb_strpos($string_ascii, '123'));
@@ -40,7 +40,7 @@ var_dump(mb_strpos($string_mb, $needle2));
echo "Done";
?>
---EXPECTF--
+--EXPECT--
*** Testing mb_strpos() : basic functionality***
-- ASCII string 1 --
diff --git a/ext/mbstring/tests/mb_strpos_variation2.phpt b/ext/mbstring/tests/mb_strpos_variation2.phpt
index ed62ea8aa..d6feb4923 100644
--- a/ext/mbstring/tests/mb_strpos_variation2.phpt
+++ b/ext/mbstring/tests/mb_strpos_variation2.phpt
@@ -19,7 +19,7 @@ function_exists('mb_strpos') or die("skip mb_strpos() is not available in this b
echo "*** Testing mb_strpos() : usage variations ***\n";
// Initialise function arguments not being substituted
-$haystack = 'string_val';
+$haystack = b'string_val';
$offset = 0;
$encoding = 'utf-8';
@@ -31,12 +31,12 @@ unset ($unset_var);
class classA
{
public function __toString() {
- return "Class A object";
+ return b"Class A object";
}
}
// heredoc string
-$heredoc = <<<EOT
+$heredoc = b<<<EOT
hello world
EOT;
@@ -74,8 +74,8 @@ $inputs = array(
'',
// string data
-/*18*/ "string",
- 'string',
+/*18*/ b"string",
+ b'string',
$heredoc,
// object data
@@ -135,12 +135,12 @@ bool(false)
-- Iteration 10 --
-Warning: mb_strpos(): Empty delimiter. in %s on line %d
+Warning: mb_strpos(): Empty delimiter in %s on line %d
bool(false)
-- Iteration 11 --
-Warning: mb_strpos(): Empty delimiter. in %s on line %d
+Warning: mb_strpos(): Empty delimiter in %s on line %d
bool(false)
-- Iteration 12 --
@@ -148,7 +148,7 @@ bool(false)
-- Iteration 13 --
-Warning: mb_strpos(): Empty delimiter. in %s on line %d
+Warning: mb_strpos(): Empty delimiter in %s on line %d
bool(false)
-- Iteration 14 --
@@ -156,17 +156,17 @@ bool(false)
-- Iteration 15 --
-Warning: mb_strpos(): Empty delimiter. in %s on line %d
+Warning: mb_strpos(): Empty delimiter in %s on line %d
bool(false)
-- Iteration 16 --
-Warning: mb_strpos(): Empty delimiter. in %s on line %d
+Warning: mb_strpos(): Empty delimiter in %s on line %d
bool(false)
-- Iteration 17 --
-Warning: mb_strpos(): Empty delimiter. in %s on line %d
+Warning: mb_strpos(): Empty delimiter in %s on line %d
bool(false)
-- Iteration 18 --
@@ -183,16 +183,16 @@ bool(false)
-- Iteration 22 --
-Warning: mb_strpos(): Empty delimiter. in %s on line %d
+Warning: mb_strpos(): Empty delimiter in %s on line %d
bool(false)
-- Iteration 23 --
-Warning: mb_strpos(): Empty delimiter. in %s on line %d
+Warning: mb_strpos(): Empty delimiter in %s on line %d
bool(false)
-- Iteration 24 --
Warning: mb_strpos() expects parameter 2 to be string, resource given in %s on line %d
bool(false)
-Done \ No newline at end of file
+Done
diff --git a/ext/mbstring/tests/mb_strpos_variation3.phpt b/ext/mbstring/tests/mb_strpos_variation3.phpt
index 8f8540ee8..65572b5f0 100644
--- a/ext/mbstring/tests/mb_strpos_variation3.phpt
+++ b/ext/mbstring/tests/mb_strpos_variation3.phpt
@@ -19,8 +19,8 @@ function_exists('mb_strpos') or die("skip mb_strpos() is not available in this b
echo "*** Testing mb_strpos() : usage variations ***\n";
// Initialise function arguments not being substituted
-$needle = 'a';
-$haystack = 'string_val';
+$needle = b'a';
+$haystack = b'string_val';
$encoding = 'utf-8';
//get an unset variable
@@ -114,12 +114,12 @@ int(8)
-- Iteration 3 --
-Warning: mb_strpos(): Offset not contained in string. in %s on line %d
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
bool(false)
-- Iteration 4 --
-Warning: mb_strpos(): Offset not contained in string. in %s on line %d
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
bool(false)
-- Iteration 5 --
@@ -127,12 +127,12 @@ bool(false)
-- Iteration 6 --
-Warning: mb_strpos(): Offset not contained in string. in %s on line %d
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
bool(false)
-- Iteration 7 --
-Warning: mb_strpos(): Offset not contained in string. in %s on line %d
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
bool(false)
-- Iteration 8 --
@@ -199,4 +199,4 @@ int(8)
Warning: mb_strpos() expects parameter 3 to be long, resource given in %s on line %d
bool(false)
-Done \ No newline at end of file
+Done
diff --git a/ext/mbstring/tests/mb_strpos_variation4.phpt b/ext/mbstring/tests/mb_strpos_variation4.phpt
index ac818c661..0fca8bb1f 100644
--- a/ext/mbstring/tests/mb_strpos_variation4.phpt
+++ b/ext/mbstring/tests/mb_strpos_variation4.phpt
@@ -20,8 +20,8 @@ function_exists('mb_strpos') or die("skip mb_strpos() is not available in this b
echo "*** Testing mb_strpos() : usage variations ***\n";
// Initialise function arguments not being substituted
-$haystack = 'string_val';
-$needle = 'val';
+$haystack = b'string_val';
+$needle = b'val';
$offset = 0;
//get an unset variable
diff --git a/ext/mbstring/tests/mb_strpos_variation5.phpt b/ext/mbstring/tests/mb_strpos_variation5.phpt
new file mode 100644
index 000000000..7a9604abe
--- /dev/null
+++ b/ext/mbstring/tests/mb_strpos_variation5.phpt
@@ -0,0 +1,117 @@
+--TEST--
+Test mb_strpos() function : usage variations - Pass different integers as $offset argument
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strpos') or die("skip mb_strpos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : int mb_strpos(string $haystack, string $needle [, int $offset [, string $encoding]])
+ * Description: Find position of first occurrence of a string within another
+ * Source code: ext/mbstring/mbstring.c
+ */
+
+/*
+ * Test how mb_strpos() behaves when passed different integers as $offset argument
+ * The character length of $string_ascii and $string_mb is the same,
+ * and the needle appears at the same positions in both strings
+ */
+
+mb_internal_encoding('UTF-8');
+
+echo "*** Testing mb_strpos() : usage variations ***\n";
+
+$string_ascii = b'+Is an English string'; //21 chars
+$needle_ascii = b'g';
+
+$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); //21 chars
+$needle_mb = base64_decode('44CC');
+
+/*
+ * Loop through integers as multiples of ten for $offset argument
+ * mb_strpos should not be able to accept negative values as $offset.
+ * 60 is larger than *BYTE* count for $string_mb
+ */
+for ($i = -10; $i <= 60; $i += 10) {
+ echo "\n**-- Offset is: $i --**\n";
+ echo "-- ASCII String --\n";
+ var_dump(mb_strpos($string_ascii, $needle_ascii, $i));
+ echo "--Multibyte String --\n";
+ var_dump(mb_strpos($string_mb, $needle_mb, $i, 'UTF-8'));
+}
+
+echo "Done";
+?>
+
+--EXPECTF--
+*** Testing mb_strpos() : usage variations ***
+
+**-- Offset is: -10 --**
+-- ASCII String --
+
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
+bool(false)
+--Multibyte String --
+
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
+bool(false)
+
+**-- Offset is: 0 --**
+-- ASCII String --
+int(9)
+--Multibyte String --
+int(9)
+
+**-- Offset is: 10 --**
+-- ASCII String --
+int(20)
+--Multibyte String --
+int(20)
+
+**-- Offset is: 20 --**
+-- ASCII String --
+int(20)
+--Multibyte String --
+int(20)
+
+**-- Offset is: 30 --**
+-- ASCII String --
+
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
+bool(false)
+--Multibyte String --
+
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
+bool(false)
+
+**-- Offset is: 40 --**
+-- ASCII String --
+
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
+bool(false)
+--Multibyte String --
+
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
+bool(false)
+
+**-- Offset is: 50 --**
+-- ASCII String --
+
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
+bool(false)
+--Multibyte String --
+
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
+bool(false)
+
+**-- Offset is: 60 --**
+-- ASCII String --
+
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
+bool(false)
+--Multibyte String --
+
+Warning: mb_strpos(): Offset not contained in string in %s on line %d
+bool(false)
+Done
diff --git a/ext/mbstring/tests/mb_strrchr_basic.phpt b/ext/mbstring/tests/mb_strrchr_basic.phpt
new file mode 100644
index 000000000..595d808d4
--- /dev/null
+++ b/ext/mbstring/tests/mb_strrchr_basic.phpt
@@ -0,0 +1,64 @@
+--TEST--
+Test mb_strrchr() function : basic functionality
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strrchr') or die("skip mb_strrchr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds the last occurrence of a character in a string within another
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strrchr() : basic functionality ***\n";
+
+mb_internal_encoding('UTF-8');
+
+$string_ascii = b'abc def';
+//Japanese string in UTF-8
+$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=');
+
+echo "\n-- ASCII string: needle exists --\n";
+var_dump(bin2hex(mb_strrchr($string_ascii, b'd', false, 'ISO-8859-1')));
+var_dump(bin2hex(mb_strrchr($string_ascii, b'd')));
+var_dump(bin2hex(mb_strrchr($string_ascii, b'd', true)));
+
+
+echo "\n-- ASCII string: needle doesn't exist --\n";
+var_dump(mb_strrchr($string_ascii, b'123'));
+
+echo "\n-- Multibyte string: needle exists --\n";
+$needle1 = base64_decode('5pel5pys6Kqe');
+var_dump(bin2hex(mb_strrchr($string_mb, $needle1)));
+var_dump(bin2hex(mb_strrchr($string_mb, $needle1, false, 'utf-8')));
+var_dump(bin2hex(mb_strrchr($string_mb, $needle1, true)));
+
+
+echo "\n-- Multibyte string: needle doesn't exist --\n";
+$needle2 = base64_decode('44GT44KT44Gr44Gh44Gv44CB5LiW55WM');
+var_dump(mb_strrchr($string_mb, $needle2));
+
+?>
+===DONE===
+--EXPECT--
+*** Testing mb_strrchr() : basic functionality ***
+
+-- ASCII string: needle exists --
+string(6) "646566"
+string(6) "646566"
+string(8) "61626320"
+
+-- ASCII string: needle doesn't exist --
+bool(false)
+
+-- Multibyte string: needle exists --
+string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082"
+string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082"
+string(0) ""
+
+-- Multibyte string: needle doesn't exist --
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/mbstring/tests/mb_strrchr_error1.phpt b/ext/mbstring/tests/mb_strrchr_error1.phpt
new file mode 100644
index 000000000..5ebb3d06f
--- /dev/null
+++ b/ext/mbstring/tests/mb_strrchr_error1.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test mb_strrchr() function : error conditions
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strrchr') or die("skip mb_strrchr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds the last occurrence of a character in a string within another
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strrchr() : error conditions ***\n";
+
+
+//Test mb_strrchr with one more than the expected number of arguments
+echo "\n-- Testing mb_strrchr() function with more than expected no. of arguments --\n";
+$haystack = b'string_val';
+$needle = b'string_val';
+$part = true;
+$encoding = 'string_val';
+$extra_arg = 10;
+var_dump( mb_strrchr($haystack, $needle, $part, $encoding, $extra_arg) );
+
+// Testing mb_strrchr with one less than the expected number of arguments
+echo "\n-- Testing mb_strrchr() function with less than expected no. of arguments --\n";
+$haystack = b'string_val';
+var_dump( mb_strrchr($haystack) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_strrchr() : error conditions ***
+
+-- Testing mb_strrchr() function with more than expected no. of arguments --
+
+Warning: mb_strrchr() expects at most 4 parameters, 5 given in %s on line %d
+bool(false)
+
+-- Testing mb_strrchr() function with less than expected no. of arguments --
+
+Warning: mb_strrchr() expects at least 2 parameters, 1 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_strrchr_error2.phpt b/ext/mbstring/tests/mb_strrchr_error2.phpt
new file mode 100644
index 000000000..cfbcd66a0
--- /dev/null
+++ b/ext/mbstring/tests/mb_strrchr_error2.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test mb_strrchr() function : error conditions
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strrchr') or die("skip mb_strrchr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds the last occurrence of a character in a string within another
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strrchr() : error conditions ***\n";
+
+
+echo "\n-- Testing mb_strrchr() with unknown encoding --\n";
+$haystack = b'Hello, world';
+$needle = b'world';
+$encoding = 'unknown-encoding';
+$part = true;
+var_dump( mb_strrchr($haystack, $needle, $part, $encoding) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_strrchr() : error conditions ***
+
+-- Testing mb_strrchr() with unknown encoding --
+
+Warning: mb_strrchr(): Unknown encoding "unknown-encoding" in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_strrchr_variation1.phpt b/ext/mbstring/tests/mb_strrchr_variation1.phpt
new file mode 100644
index 000000000..18eb52ea2
--- /dev/null
+++ b/ext/mbstring/tests/mb_strrchr_variation1.phpt
@@ -0,0 +1,207 @@
+--TEST--
+Test mb_strrchr() function : usage variation - various haystacks, needle won't be found
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strrchr') or die("skip mb_strrchr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds the last occurrence of a character in a string within another
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strrchr() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$needle = b'string_val';
+$part = true;
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for haystack
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( mb_strrchr($value, $needle, $part, $encoding) );
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_strrchr() : usage variation ***
+
+--int 0--
+bool(false)
+
+--int 1--
+bool(false)
+
+--int 12345--
+bool(false)
+
+--int -12345--
+bool(false)
+
+--float 10.5--
+bool(false)
+
+--float -10.5--
+bool(false)
+
+--float 12.3456789000e10--
+bool(false)
+
+--float -12.3456789000e10--
+bool(false)
+
+--float .5--
+bool(false)
+
+--empty array--
+Error: 2 - mb_strrchr() expects parameter 1 to be string, array given, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - mb_strrchr() expects parameter 1 to be string, array given, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - mb_strrchr() expects parameter 1 to be string, array given, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - mb_strrchr() expects parameter 1 to be string, array given, %s(%d)
+bool(false)
+
+--uppercase NULL--
+bool(false)
+
+--lowercase null--
+bool(false)
+
+--lowercase true--
+bool(false)
+
+--lowercase false--
+bool(false)
+
+--uppercase TRUE--
+bool(false)
+
+--uppercase FALSE--
+bool(false)
+
+--empty string DQ--
+bool(false)
+
+--empty string SQ--
+bool(false)
+
+--instance of classWithToString--
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - mb_strrchr() expects parameter 1 to be string, object given, %s(%d)
+bool(false)
+
+--undefined var--
+bool(false)
+
+--unset var--
+bool(false)
+
+--resource--
+Error: 2 - mb_strrchr() expects parameter 1 to be string, resource given, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_strrchr_variation2.phpt b/ext/mbstring/tests/mb_strrchr_variation2.phpt
new file mode 100644
index 000000000..f9b710783
--- /dev/null
+++ b/ext/mbstring/tests/mb_strrchr_variation2.phpt
@@ -0,0 +1,207 @@
+--TEST--
+Test mb_strrchr() function : usage variation - different types of needle.
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strrchr') or die("skip mb_strrchr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds the last occurrence of a character in a string within another
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strrchr() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$haystack = b'string_val';
+$part = true;
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for needle
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( mb_strrchr($haystack, $value, $part, $encoding) );
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_strrchr() : usage variation ***
+
+--int 0--
+bool(false)
+
+--int 1--
+bool(false)
+
+--int 12345--
+bool(false)
+
+--int -12345--
+bool(false)
+
+--float 10.5--
+bool(false)
+
+--float -10.5--
+bool(false)
+
+--float 12.3456789000e10--
+bool(false)
+
+--float -12.3456789000e10--
+bool(false)
+
+--float .5--
+bool(false)
+
+--empty array--
+Error: 2 - mb_strrchr() expects parameter 2 to be string, array given, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - mb_strrchr() expects parameter 2 to be string, array given, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - mb_strrchr() expects parameter 2 to be string, array given, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - mb_strrchr() expects parameter 2 to be string, array given, %s(%d)
+bool(false)
+
+--uppercase NULL--
+bool(false)
+
+--lowercase null--
+bool(false)
+
+--lowercase true--
+bool(false)
+
+--lowercase false--
+bool(false)
+
+--uppercase TRUE--
+bool(false)
+
+--uppercase FALSE--
+bool(false)
+
+--empty string DQ--
+bool(false)
+
+--empty string SQ--
+bool(false)
+
+--instance of classWithToString--
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - mb_strrchr() expects parameter 2 to be string, object given, %s(%d)
+bool(false)
+
+--undefined var--
+bool(false)
+
+--unset var--
+bool(false)
+
+--resource--
+Error: 2 - mb_strrchr() expects parameter 2 to be string, resource given, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_strrchr_variation3.phpt b/ext/mbstring/tests/mb_strrchr_variation3.phpt
new file mode 100644
index 000000000..4a16f55b4
--- /dev/null
+++ b/ext/mbstring/tests/mb_strrchr_variation3.phpt
@@ -0,0 +1,232 @@
+--TEST--
+Test mb_strrchr() function : usage variation - different values for part
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strrchr') or die("skip mb_strrchr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds the last occurrence of a character in a string within another
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strrchr() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$haystack = b'string_val';
+$needle = b'_';
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for part
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ $res = mb_strrchr($haystack, $needle, $value, $encoding);
+ if ($res === false) {
+ var_dump($res);
+ }
+ else {
+ var_dump(bin2hex($res));
+ }
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_strrchr() : usage variation ***
+
+--int 0--
+string(8) "5f76616c"
+
+--int 1--
+string(12) "737472696e67"
+
+--int 12345--
+string(12) "737472696e67"
+
+--int -12345--
+string(12) "737472696e67"
+
+--float 10.5--
+string(12) "737472696e67"
+
+--float -10.5--
+string(12) "737472696e67"
+
+--float 12.3456789000e10--
+string(12) "737472696e67"
+
+--float -12.3456789000e10--
+string(12) "737472696e67"
+
+--float .5--
+string(12) "737472696e67"
+
+--empty array--
+Error: 2 - mb_strrchr() expects parameter 3 to be boolean, array given, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - mb_strrchr() expects parameter 3 to be boolean, array given, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - mb_strrchr() expects parameter 3 to be boolean, array given, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - mb_strrchr() expects parameter 3 to be boolean, array given, %s(%d)
+bool(false)
+
+--uppercase NULL--
+string(8) "5f76616c"
+
+--lowercase null--
+string(8) "5f76616c"
+
+--lowercase true--
+string(12) "737472696e67"
+
+--lowercase false--
+string(8) "5f76616c"
+
+--uppercase TRUE--
+string(12) "737472696e67"
+
+--uppercase FALSE--
+string(8) "5f76616c"
+
+--empty string DQ--
+string(8) "5f76616c"
+
+--empty string SQ--
+string(8) "5f76616c"
+
+--string DQ--
+string(12) "737472696e67"
+
+--string SQ--
+string(12) "737472696e67"
+
+--mixed case string--
+string(12) "737472696e67"
+
+--heredoc--
+string(12) "737472696e67"
+
+--instance of classWithToString--
+Error: 2 - mb_strrchr() expects parameter 3 to be boolean, object given, %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - mb_strrchr() expects parameter 3 to be boolean, object given, %s(%d)
+bool(false)
+
+--undefined var--
+string(8) "5f76616c"
+
+--unset var--
+string(8) "5f76616c"
+
+--resource--
+Error: 2 - mb_strrchr() expects parameter 3 to be boolean, resource given, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_strrchr_variation4.phpt b/ext/mbstring/tests/mb_strrchr_variation4.phpt
new file mode 100644
index 000000000..b9e014706
--- /dev/null
+++ b/ext/mbstring/tests/mb_strrchr_variation4.phpt
@@ -0,0 +1,227 @@
+--TEST--
+Test mb_strrchr() function : usage variation - different encoding types
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strrchr') or die("skip mb_strrchr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds the last occurrence of a character in a string within another
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strrchr() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$haystack = b'string_val';
+$needle = b'_';
+$part = true;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "invalid";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+invalid
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for encoding
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( mb_strrchr($haystack, $needle, $part, $value) );
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_strrchr() : usage variation ***
+
+--int 0--
+Error: 2 - mb_strrchr(): Unknown encoding "0", %s(%d)
+bool(false)
+
+--int 1--
+Error: 2 - mb_strrchr(): Unknown encoding "1", %s(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - mb_strrchr(): Unknown encoding "12345", %s(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - mb_strrchr(): Unknown encoding "-2345", %s(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - mb_strrchr(): Unknown encoding "10.5", %s(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - mb_strrchr(): Unknown encoding "-10.5", %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - mb_strrchr(): Unknown encoding "123456789000", %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - mb_strrchr(): Unknown encoding "-123456789000", %s(%d)
+bool(false)
+
+--float .5--
+Error: 2 - mb_strrchr(): Unknown encoding "0.5", %s(%d)
+bool(false)
+
+--empty array--
+Error: 2 - mb_strrchr() expects parameter 4 to be string, array given, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - mb_strrchr() expects parameter 4 to be string, array given, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - mb_strrchr() expects parameter 4 to be string, array given, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - mb_strrchr() expects parameter 4 to be string, array given, %s(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - mb_strrchr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - mb_strrchr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - mb_strrchr(): Unknown encoding "1", %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - mb_strrchr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - mb_strrchr(): Unknown encoding "1", %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - mb_strrchr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - mb_strrchr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - mb_strrchr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - mb_strrchr(): Unknown encoding "invalid", %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - mb_strrchr() expects parameter 4 to be string, object given, %s(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - mb_strrchr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - mb_strrchr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--resource--
+Error: 2 - mb_strrchr() expects parameter 4 to be string, resource given, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_strrchr_variation5.phpt b/ext/mbstring/tests/mb_strrchr_variation5.phpt
new file mode 100644
index 000000000..84a73a2f5
--- /dev/null
+++ b/ext/mbstring/tests/mb_strrchr_variation5.phpt
@@ -0,0 +1,59 @@
+--TEST--
+Test mb_strrchr() function : variation - multiple needles
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strrchr') or die("skip mb_strrchr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds the last occurrence of a character in a string within another
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strrchr() : variation ***\n";
+
+mb_internal_encoding('UTF-8');
+
+//with repeated needles
+$string_ascii = b'abcdef zbcdyx';
+$needle_ascii = b"bcd";
+
+//Japanese string in UTF-8 with repeated needles
+$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OIMzTvvJXvvJbml6XmnKzoqp7jg4bjgq3jgrnjg4g=');
+$needle_mb = base64_decode('6Kqe44OG44Kt');
+
+echo "-- Ascii data --\n";
+var_dump(bin2hex(mb_strrchr($string_ascii, $needle_ascii, false)));
+var_dump(bin2hex(mb_strrchr($string_ascii, $needle_ascii, true)));
+
+echo "-- mb data in utf-8 --\n";
+$res = mb_strrchr($string_mb, $needle_mb, false);
+if ($res !== false) {
+ var_dump(bin2hex($res));
+}
+else {
+ echo "nothing found!\n";
+}
+$res = mb_strrchr($string_mb, $needle_mb, true);
+if ($res !== false) {
+ var_dump(bin2hex($res));
+}
+else {
+ echo "nothing found!\n";
+}
+
+
+?>
+===DONE===
+--EXPECT--
+*** Testing mb_strrchr() : variation ***
+-- Ascii data --
+string(10) "6263647978"
+string(16) "616263646566207a"
+-- mb data in utf-8 --
+string(30) "e8aa9ee38386e382ade382b9e38388"
+string(70) "e697a5e69cace8aa9ee38386e382ade382b9e383883334efbc95efbc96e697a5e69cac"
+===DONE===
diff --git a/ext/mbstring/tests/mb_strrchr_variation6.phpt b/ext/mbstring/tests/mb_strrchr_variation6.phpt
new file mode 100644
index 000000000..86009496e
--- /dev/null
+++ b/ext/mbstring/tests/mb_strrchr_variation6.phpt
@@ -0,0 +1,65 @@
+--TEST--
+Test mb_strrchr() function : variation - case sensitivity
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strrchr') or die("skip mb_strrchr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds the last occurrence of a character in a string within another
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strrchr() : variation ***\n";
+
+mb_internal_encoding('UTF-8');
+
+//ascii
+$string_ascii = b'abcdef';
+$needle_ascii_upper = b"BCD";
+$needle_ascii_mixed = b"bCd";
+$needle_ascii_lower = b"bcd";
+
+//Greek string in lower case UTF-8
+$string_mb = base64_decode('zrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4TPhc+Gz4fPiM+J');
+$needle_mb_upper = base64_decode('zpzOnc6ezp8=');
+$needle_mb_lower = base64_decode('zrzOvc6+zr8=');
+$needle_mb_mixed = base64_decode('zpzOnc6+zr8=');
+
+echo "-- Ascii data --\n";
+// needle should be found
+var_dump(bin2hex(mb_strrchr($string_ascii, $needle_ascii_lower)));
+// no needle should be found
+var_dump(mb_strrchr($string_ascii, $needle_ascii_upper));
+var_dump(mb_strrchr($string_ascii, $needle_ascii_mixed));
+
+echo "-- mb data in utf-8 --\n";
+// needle should be found
+$res = mb_strrchr($string_mb, $needle_mb_lower, false);
+if ($res !== false) {
+ var_dump(bin2hex($res));
+}
+else {
+ echo "nothing found!\n";
+}
+// no needle should be found
+var_dump(mb_strrchr($string_mb, $needle_mb_upper));
+var_dump(mb_strrchr($string_mb, $needle_mb_mixed));
+
+
+?>
+===DONE===
+--EXPECT--
+*** Testing mb_strrchr() : variation ***
+-- Ascii data --
+string(10) "6263646566"
+bool(false)
+bool(false)
+-- mb data in utf-8 --
+string(52) "cebccebdcebecebfcf80cf81cf83cf84cf85cf86cf87cf88cf89"
+bool(false)
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/mbstring/tests/mb_strrichr_basic.phpt b/ext/mbstring/tests/mb_strrichr_basic.phpt
new file mode 100644
index 000000000..5a38e6506
--- /dev/null
+++ b/ext/mbstring/tests/mb_strrichr_basic.phpt
@@ -0,0 +1,70 @@
+--TEST--
+Test mb_strrichr() function : basic functionality
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strrichr') or die("skip mb_strrichr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds the last occurrence of a character in a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strrichr() : basic functionality ***\n";
+
+mb_internal_encoding('UTF-8');
+
+$string_ascii = b'abcdef';
+$needle_ascii_upper = b"BCD";
+$needle_ascii_mixed = b"bCd";
+$needle_ascii_lower = b"bcd";
+
+//Greek string in lower case UTF-8
+$string_mb = base64_decode('zrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4TPhc+Gz4fPiM+J');
+$needle_mb_upper = base64_decode('zpzOnc6ezp8=');
+$needle_mb_lower = base64_decode('zrzOvc6+zr8=');
+$needle_mb_mixed = base64_decode('zpzOnc6+zr8=');
+
+echo "\n-- ASCII string: needle exists --\n";
+var_dump(bin2hex(mb_strrichr($string_ascii, $needle_ascii_upper, false, 'ISO-8859-1')));
+var_dump(bin2hex(mb_strrichr($string_ascii, $needle_ascii_lower)));
+var_dump(bin2hex(mb_strrichr($string_ascii, $needle_ascii_mixed, true)));
+
+
+echo "\n-- ASCII string: needle doesn't exist --\n";
+var_dump(mb_strrichr($string_ascii, b'123'));
+
+echo "\n-- Multibyte string: needle exists --\n";
+var_dump(bin2hex(mb_strrichr($string_mb, $needle_mb_upper)));
+var_dump(bin2hex(mb_strrichr($string_mb, $needle_mb_lower, false, 'utf-8')));
+var_dump(bin2hex(mb_strrichr($string_mb, $needle_mb_mixed, true)));
+
+
+echo "\n-- Multibyte string: needle doesn't exist --\n";
+$needle2 = base64_decode('zrzOvs6/');
+var_dump(mb_strrichr($string_mb, $needle2));
+
+?>
+===DONE===
+--EXPECT--
+*** Testing mb_strrichr() : basic functionality ***
+
+-- ASCII string: needle exists --
+string(10) "6263646566"
+string(10) "6263646566"
+string(2) "61"
+
+-- ASCII string: needle doesn't exist --
+bool(false)
+
+-- Multibyte string: needle exists --
+string(52) "cebccebdcebecebfcf80cf81cf83cf84cf85cf86cf87cf88cf89"
+string(52) "cebccebdcebecebfcf80cf81cf83cf84cf85cf86cf87cf88cf89"
+string(44) "ceb1ceb2ceb3ceb4ceb5ceb6ceb7ceb8ceb9cebacebb"
+
+-- Multibyte string: needle doesn't exist --
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_strrichr_error1.phpt b/ext/mbstring/tests/mb_strrichr_error1.phpt
new file mode 100644
index 000000000..2c2ed6114
--- /dev/null
+++ b/ext/mbstring/tests/mb_strrichr_error1.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test mb_strrichr() function : error conditions
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strrichr') or die("skip mb_strrichr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds the last occurrence of a character in a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strrichr() : error conditions ***\n";
+
+
+//Test mb_strrichr with one more than the expected number of arguments
+echo "\n-- Testing mb_strrichr() function with more than expected no. of arguments --\n";
+$haystack = b'string_val';
+$needle = b'string_val';
+$part = true;
+$encoding = 'string_val';
+$extra_arg = 10;
+var_dump( mb_strrichr($haystack, $needle, $part, $encoding, $extra_arg) );
+
+// Testing mb_strrichr with one less than the expected number of arguments
+echo "\n-- Testing mb_strrichr() function with less than expected no. of arguments --\n";
+$haystack = b'string_val';
+var_dump( mb_strrichr($haystack) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_strrichr() : error conditions ***
+
+-- Testing mb_strrichr() function with more than expected no. of arguments --
+
+Warning: mb_strrichr() expects at most 4 parameters, 5 given in %s on line %d
+bool(false)
+
+-- Testing mb_strrichr() function with less than expected no. of arguments --
+
+Warning: mb_strrichr() expects at least 2 parameters, 1 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_strrichr_error2.phpt b/ext/mbstring/tests/mb_strrichr_error2.phpt
new file mode 100644
index 000000000..e8f98ef44
--- /dev/null
+++ b/ext/mbstring/tests/mb_strrichr_error2.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test mb_strrichr() function : error conditions
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strrichr') or die("skip mb_strrichr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds the last occurrence of a character in a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strrichr() : error conditions ***\n";
+
+
+echo "\n-- Testing mb_strrichr() with unknown encoding --\n";
+$haystack = b'Hello, world';
+$needle = b'world';
+$encoding = 'unknown-encoding';
+$part = true;
+var_dump( mb_strrichr($haystack, $needle, $part, $encoding) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_strrichr() : error conditions ***
+
+-- Testing mb_strrichr() with unknown encoding --
+
+Warning: mb_strrichr(): Unknown encoding "unknown-encoding" in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_strrichr_variation1.phpt b/ext/mbstring/tests/mb_strrichr_variation1.phpt
new file mode 100644
index 000000000..d826ccf40
--- /dev/null
+++ b/ext/mbstring/tests/mb_strrichr_variation1.phpt
@@ -0,0 +1,207 @@
+--TEST--
+Test mb_strrichr() function : usage variation - various haystacks, needle won't be found
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strrichr') or die("skip mb_strrichr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds the last occurrence of a character in a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strrichr() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$needle = b'string_val';
+$part = true;
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for haystack
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( mb_strrichr($value, $needle, $part, $encoding) );
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_strrichr() : usage variation ***
+
+--int 0--
+bool(false)
+
+--int 1--
+bool(false)
+
+--int 12345--
+bool(false)
+
+--int -12345--
+bool(false)
+
+--float 10.5--
+bool(false)
+
+--float -10.5--
+bool(false)
+
+--float 12.3456789000e10--
+bool(false)
+
+--float -12.3456789000e10--
+bool(false)
+
+--float .5--
+bool(false)
+
+--empty array--
+Error: 2 - mb_strrichr() expects parameter 1 to be string, array given, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - mb_strrichr() expects parameter 1 to be string, array given, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - mb_strrichr() expects parameter 1 to be string, array given, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - mb_strrichr() expects parameter 1 to be string, array given, %s(%d)
+bool(false)
+
+--uppercase NULL--
+bool(false)
+
+--lowercase null--
+bool(false)
+
+--lowercase true--
+bool(false)
+
+--lowercase false--
+bool(false)
+
+--uppercase TRUE--
+bool(false)
+
+--uppercase FALSE--
+bool(false)
+
+--empty string DQ--
+bool(false)
+
+--empty string SQ--
+bool(false)
+
+--instance of classWithToString--
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - mb_strrichr() expects parameter 1 to be string, object given, %s(%d)
+bool(false)
+
+--undefined var--
+bool(false)
+
+--unset var--
+bool(false)
+
+--resource--
+Error: 2 - mb_strrichr() expects parameter 1 to be string, resource given, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_strrichr_variation2.phpt b/ext/mbstring/tests/mb_strrichr_variation2.phpt
new file mode 100644
index 000000000..1a4a73fe4
--- /dev/null
+++ b/ext/mbstring/tests/mb_strrichr_variation2.phpt
@@ -0,0 +1,207 @@
+--TEST--
+Test mb_strrichr() function : usage variation - different types of needle.
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strrichr') or die("skip mb_strrichr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds the last occurrence of a character in a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strrichr() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$haystack = b'string_val';
+$part = true;
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for needle
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( mb_strrichr($haystack, $value, $part, $encoding) );
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_strrichr() : usage variation ***
+
+--int 0--
+bool(false)
+
+--int 1--
+bool(false)
+
+--int 12345--
+bool(false)
+
+--int -12345--
+bool(false)
+
+--float 10.5--
+bool(false)
+
+--float -10.5--
+bool(false)
+
+--float 12.3456789000e10--
+bool(false)
+
+--float -12.3456789000e10--
+bool(false)
+
+--float .5--
+bool(false)
+
+--empty array--
+Error: 2 - mb_strrichr() expects parameter 2 to be string, array given, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - mb_strrichr() expects parameter 2 to be string, array given, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - mb_strrichr() expects parameter 2 to be string, array given, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - mb_strrichr() expects parameter 2 to be string, array given, %s(%d)
+bool(false)
+
+--uppercase NULL--
+bool(false)
+
+--lowercase null--
+bool(false)
+
+--lowercase true--
+bool(false)
+
+--lowercase false--
+bool(false)
+
+--uppercase TRUE--
+bool(false)
+
+--uppercase FALSE--
+bool(false)
+
+--empty string DQ--
+bool(false)
+
+--empty string SQ--
+bool(false)
+
+--instance of classWithToString--
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - mb_strrichr() expects parameter 2 to be string, object given, %s(%d)
+bool(false)
+
+--undefined var--
+bool(false)
+
+--unset var--
+bool(false)
+
+--resource--
+Error: 2 - mb_strrichr() expects parameter 2 to be string, resource given, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_strrichr_variation3.phpt b/ext/mbstring/tests/mb_strrichr_variation3.phpt
new file mode 100644
index 000000000..68e8083bd
--- /dev/null
+++ b/ext/mbstring/tests/mb_strrichr_variation3.phpt
@@ -0,0 +1,232 @@
+--TEST--
+Test mb_strrichr() function : usage variation - different values for part
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strrichr') or die("skip mb_strrichr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds the last occurrence of a character in a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strrichr() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$haystack = b'string_val';
+$needle = b'_';
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for part
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ $res = mb_strrichr($haystack, $needle, $value, $encoding);
+ if ($res === false) {
+ var_dump($res);
+ }
+ else {
+ var_dump(bin2hex($res));
+ }
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_strrichr() : usage variation ***
+
+--int 0--
+string(8) "5f76616c"
+
+--int 1--
+string(12) "737472696e67"
+
+--int 12345--
+string(12) "737472696e67"
+
+--int -12345--
+string(12) "737472696e67"
+
+--float 10.5--
+string(12) "737472696e67"
+
+--float -10.5--
+string(12) "737472696e67"
+
+--float 12.3456789000e10--
+string(12) "737472696e67"
+
+--float -12.3456789000e10--
+string(12) "737472696e67"
+
+--float .5--
+string(12) "737472696e67"
+
+--empty array--
+Error: 2 - mb_strrichr() expects parameter 3 to be boolean, array given, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - mb_strrichr() expects parameter 3 to be boolean, array given, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - mb_strrichr() expects parameter 3 to be boolean, array given, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - mb_strrichr() expects parameter 3 to be boolean, array given, %s(%d)
+bool(false)
+
+--uppercase NULL--
+string(8) "5f76616c"
+
+--lowercase null--
+string(8) "5f76616c"
+
+--lowercase true--
+string(12) "737472696e67"
+
+--lowercase false--
+string(8) "5f76616c"
+
+--uppercase TRUE--
+string(12) "737472696e67"
+
+--uppercase FALSE--
+string(8) "5f76616c"
+
+--empty string DQ--
+string(8) "5f76616c"
+
+--empty string SQ--
+string(8) "5f76616c"
+
+--string DQ--
+string(12) "737472696e67"
+
+--string SQ--
+string(12) "737472696e67"
+
+--mixed case string--
+string(12) "737472696e67"
+
+--heredoc--
+string(12) "737472696e67"
+
+--instance of classWithToString--
+Error: 2 - mb_strrichr() expects parameter 3 to be boolean, object given, %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - mb_strrichr() expects parameter 3 to be boolean, object given, %s(%d)
+bool(false)
+
+--undefined var--
+string(8) "5f76616c"
+
+--unset var--
+string(8) "5f76616c"
+
+--resource--
+Error: 2 - mb_strrichr() expects parameter 3 to be boolean, resource given, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_strrichr_variation4.phpt b/ext/mbstring/tests/mb_strrichr_variation4.phpt
new file mode 100644
index 000000000..d2e5754c1
--- /dev/null
+++ b/ext/mbstring/tests/mb_strrichr_variation4.phpt
@@ -0,0 +1,227 @@
+--TEST--
+Test mb_strrichr() function : usage variation - different encoding types
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strrichr') or die("skip mb_strrichr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds the last occurrence of a character in a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strrichr() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$haystack = b'string_val';
+$needle = b'_';
+$part = true;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "invalid";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+invalid
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for encoding
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( mb_strrichr($haystack, $needle, $part, $value) );
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_strrichr() : usage variation ***
+
+--int 0--
+Error: 2 - mb_strrichr(): Unknown encoding "0", %s(%d)
+bool(false)
+
+--int 1--
+Error: 2 - mb_strrichr(): Unknown encoding "1", %s(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - mb_strrichr(): Unknown encoding "12345", %s(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - mb_strrichr(): Unknown encoding "-2345", %s(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - mb_strrichr(): Unknown encoding "10.5", %s(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - mb_strrichr(): Unknown encoding "-10.5", %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - mb_strrichr(): Unknown encoding "123456789000", %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - mb_strrichr(): Unknown encoding "-123456789000", %s(%d)
+bool(false)
+
+--float .5--
+Error: 2 - mb_strrichr(): Unknown encoding "0.5", %s(%d)
+bool(false)
+
+--empty array--
+Error: 2 - mb_strrichr() expects parameter 4 to be string, array given, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - mb_strrichr() expects parameter 4 to be string, array given, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - mb_strrichr() expects parameter 4 to be string, array given, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - mb_strrichr() expects parameter 4 to be string, array given, %s(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - mb_strrichr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - mb_strrichr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - mb_strrichr(): Unknown encoding "1", %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - mb_strrichr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - mb_strrichr(): Unknown encoding "1", %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - mb_strrichr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - mb_strrichr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - mb_strrichr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - mb_strrichr(): Unknown encoding "invalid", %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - mb_strrichr() expects parameter 4 to be string, object given, %s(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - mb_strrichr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - mb_strrichr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--resource--
+Error: 2 - mb_strrichr() expects parameter 4 to be string, resource given, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_strrichr_variation5.phpt b/ext/mbstring/tests/mb_strrichr_variation5.phpt
new file mode 100644
index 000000000..417f53fde
--- /dev/null
+++ b/ext/mbstring/tests/mb_strrichr_variation5.phpt
@@ -0,0 +1,69 @@
+--TEST--
+Test mb_strrichr() function : usage variation - multiple needles
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strrichr') or die("skip mb_strrichr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds the last occurrence of a character in a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strrichr() : basic functionality ***\n";
+
+mb_internal_encoding('UTF-8');
+
+//ascii mixed case, multiple needles
+$string_ascii = b'abcDef zBcDyx';
+$needle_ascii_upper = b"BCD";
+$needle_ascii_mixed = b"bCd";
+$needle_ascii_lower = b"bcd";
+
+//Greek string in mixed case UTF-8 with multiple needles
+$string_mb = base64_decode('zrrOu868zr3Ovs6fzqDOoSDOus67zpzOnc6+zr/OoA==');
+$needle_mb_upper = base64_decode('zpzOnc6ezp8=');
+$needle_mb_lower = base64_decode('zrzOvc6+zr8=');
+$needle_mb_mixed = base64_decode('zpzOnc6+zr8=');
+
+echo "\n-- ASCII string: needle exists --\n";
+var_dump(bin2hex(mb_strrichr($string_ascii, $needle_ascii_upper, false)));
+var_dump(bin2hex(mb_strrichr($string_ascii, $needle_ascii_upper, true)));
+var_dump(bin2hex(mb_strrichr($string_ascii, $needle_ascii_lower, false)));
+var_dump(bin2hex(mb_strrichr($string_ascii, $needle_ascii_lower, true)));
+var_dump(bin2hex(mb_strrichr($string_ascii, $needle_ascii_mixed, false)));
+var_dump(bin2hex(mb_strrichr($string_ascii, $needle_ascii_mixed, true)));
+
+
+echo "\n-- Multibyte string: needle exists --\n";
+var_dump(bin2hex(mb_strrichr($string_mb, $needle_mb_upper, false)));
+var_dump(bin2hex(mb_strrichr($string_mb, $needle_mb_upper, true)));
+var_dump(bin2hex(mb_strrichr($string_mb, $needle_mb_lower, false)));
+var_dump(bin2hex(mb_strrichr($string_mb, $needle_mb_lower, true)));
+var_dump(bin2hex(mb_strrichr($string_mb, $needle_mb_mixed, false)));
+var_dump(bin2hex(mb_strrichr($string_mb, $needle_mb_mixed, true)));
+
+?>
+===DONE===
+--EXPECT--
+*** Testing mb_strrichr() : basic functionality ***
+
+-- ASCII string: needle exists --
+string(10) "4263447978"
+string(16) "616263446566207a"
+string(10) "4263447978"
+string(16) "616263446566207a"
+string(10) "4263447978"
+string(16) "616263446566207a"
+
+-- Multibyte string: needle exists --
+string(20) "ce9cce9dcebecebfcea0"
+string(42) "cebacebbcebccebdcebece9fcea0cea120cebacebb"
+string(20) "ce9cce9dcebecebfcea0"
+string(42) "cebacebbcebccebdcebece9fcea0cea120cebacebb"
+string(20) "ce9cce9dcebecebfcea0"
+string(42) "cebacebbcebccebdcebece9fcea0cea120cebacebb"
+===DONE=== \ No newline at end of file
diff --git a/ext/mbstring/tests/mb_strripos_basic.phpt b/ext/mbstring/tests/mb_strripos_basic.phpt
new file mode 100644
index 000000000..32787a6eb
--- /dev/null
+++ b/ext/mbstring/tests/mb_strripos_basic.phpt
@@ -0,0 +1,158 @@
+--TEST--
+Test mb_strripos() function : basic functionality
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strripos') or die("skip mb_strripos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : int mb_strripos(string haystack, string needle [, int offset [, string encoding]])
+ * Description: Finds position of last occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+/*
+ * Test basic functionality of mb_strripos with ASCII and multibyte characters
+ */
+
+echo "*** Testing mb_strripos() : basic functionality***\n";
+
+mb_internal_encoding('UTF-8');
+
+//ascii strings
+$ascii_haystacks = array(
+ b'abc defabc def',
+ b'ABC DEFABC DEF',
+ b'Abc dEFaBC Def',
+);
+
+$ascii_needles = array(
+ // 4 good ones
+ b'DE',
+ b'de',
+ b'De',
+ b'dE',
+
+ //flag a swap between good and bad
+ '!',
+
+ // 4 bad ones
+ b'df',
+ b'Df',
+ b'dF',
+ b'DF'
+);
+
+//greek strings in UTF-8
+$greek_lower = base64_decode('zrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4TPhc+Gz4fPiM+J');
+$greek_upper = base64_decode('zpHOks6TzpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoc6jzqTOpc6mzqfOqM6p');
+$greek_mixed = base64_decode('zrHOss6TzpTOlc6WzpfOmM65zrrOu868zr3Ovs6fzqDOoc6jzqTOpc+Gz4fPiM+J');
+$greek_haystacks = array($greek_lower, $greek_upper, $greek_mixed);
+
+$greek_nlower = base64_decode('zrzOvc6+zr8=');
+$greek_nupper = base64_decode('zpzOnc6ezp8=');
+$greek_nmixed1 = base64_decode('zpzOnc6+zr8=');
+$greek_nmixed2 = base64_decode('zrzOvc6+zp8=');
+
+$greek_blower = base64_decode('zpzOns6f');
+$greek_bupper = base64_decode('zrzOvs6/');
+$greek_bmixed1 = base64_decode('zpzOvs6/');
+$greek_bmixed2 = base64_decode('zrzOvs6f');
+$greek_needles = array(
+ // 4 good ones
+ $greek_nlower, $greek_nupper, $greek_nmixed1, $greek_nmixed2,
+
+ '!', // used to flag a swap between good and bad
+
+ // 4 bad ones
+ $greek_blower, $greek_bupper, $greek_bmixed1, $greek_bmixed2,
+);
+
+// try the basic options
+echo "\n -- ASCII Strings, needle should be found --\n";
+foreach ($ascii_needles as $needle) {
+ if ($needle == '!') {
+ echo "\n -- ASCII Strings, needle should not be found --\n";
+ }
+ else {
+ foreach ($ascii_haystacks as $haystack) {
+ var_dump(mb_strripos($haystack, $needle));
+ }
+ }
+}
+
+echo "\n -- Greek Strings, needle should be found --\n";
+foreach ($greek_needles as $needle) {
+ if ($needle == '!') {
+ echo "\n -- ASCII Strings, needle should not be found --\n";
+ }
+ else {
+ foreach ($greek_haystacks as $haystack) {
+ var_dump(mb_strripos($haystack, $needle));
+ }
+ }
+}
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_strripos() : basic functionality***
+
+ -- ASCII Strings, needle should be found --
+int(13)
+int(13)
+int(13)
+int(13)
+int(13)
+int(13)
+int(13)
+int(13)
+int(13)
+int(13)
+int(13)
+int(13)
+
+ -- ASCII Strings, needle should not be found --
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+
+ -- Greek Strings, needle should be found --
+int(11)
+int(11)
+int(11)
+int(11)
+int(11)
+int(11)
+int(11)
+int(11)
+int(11)
+int(11)
+int(11)
+int(11)
+
+ -- ASCII Strings, needle should not be found --
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+Done
diff --git a/ext/mbstring/tests/mb_strripos_basic2.phpt b/ext/mbstring/tests/mb_strripos_basic2.phpt
new file mode 100644
index 000000000..9d7befc93
--- /dev/null
+++ b/ext/mbstring/tests/mb_strripos_basic2.phpt
@@ -0,0 +1,128 @@
+--TEST--
+Test mb_strripos() function : basic functionality
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strripos') or die("skip mb_strripos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : int mb_strripos(string haystack, string needle [, int offset [, string encoding]])
+ * Description: Finds position of last occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+/*
+ * Test basic functionality of mb_strripos with ASCII and multibyte characters
+ */
+
+echo "*** Testing mb_strripos() : basic functionality***\n";
+
+mb_internal_encoding('UTF-8');
+
+//ascii strings
+$ascii_haystacks = array(
+ b'abc defabc def',
+ b'ABC DEFABC DEF',
+ b'Abc dEFaBC Def',
+);
+
+$ascii_needles = array(
+ // 4 good ones
+ b'DE',
+ b'de',
+ b'De',
+ b'dE',
+);
+
+//greek strings in UTF-8
+$greek_lower = base64_decode('zrrOu868zr3Ovs6/z4DPgSDOus67zrzOvc6+zr/PgA==');
+$greek_upper = base64_decode('zprOm86czp3Ons6fzqDOoSDOms6bzpzOnc6ezp/OoA==');
+$greek_mixed = base64_decode('zrrOu868zr3Ovs6fzqDOoSDOus67zpzOnc6+zr/OoA==');
+$greek_haystacks = array($greek_lower, $greek_upper, $greek_mixed);
+
+$greek_nlower = base64_decode('zrzOvc6+zr8=');
+$greek_nupper = base64_decode('zpzOnc6ezp8=');
+$greek_nmixed1 = base64_decode('zpzOnc6+zr8=');
+$greek_nmixed2 = base64_decode('zrzOvc6+zp8=');
+
+$greek_needles = array(
+ // 4 good ones
+ $greek_nlower, $greek_nupper, $greek_nmixed1, $greek_nmixed2,
+);
+
+// try the basic options
+echo "\n -- ASCII Strings --\n";
+foreach ($ascii_needles as $needle) {
+ foreach ($ascii_haystacks as $haystack) {
+ var_dump(mb_strripos($haystack, $needle));
+ var_dump(mb_strripos($haystack, $needle, 14));
+ }
+}
+
+echo "\n -- Greek Strings --\n";
+foreach ($greek_needles as $needle) {
+ foreach ($greek_haystacks as $haystack) {
+ var_dump(mb_strripos($haystack, $needle));
+ var_dump(mb_strripos($haystack, $needle, 12));
+ }
+}
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_strripos() : basic functionality***
+
+ -- ASCII Strings --
+int(13)
+bool(false)
+int(13)
+bool(false)
+int(13)
+bool(false)
+int(13)
+bool(false)
+int(13)
+bool(false)
+int(13)
+bool(false)
+int(13)
+bool(false)
+int(13)
+bool(false)
+int(13)
+bool(false)
+int(13)
+bool(false)
+int(13)
+bool(false)
+int(13)
+bool(false)
+
+ -- Greek Strings --
+int(11)
+bool(false)
+int(11)
+bool(false)
+int(11)
+bool(false)
+int(11)
+bool(false)
+int(11)
+bool(false)
+int(11)
+bool(false)
+int(11)
+bool(false)
+int(11)
+bool(false)
+int(11)
+bool(false)
+int(11)
+bool(false)
+int(11)
+bool(false)
+int(11)
+bool(false)
+Done
diff --git a/ext/mbstring/tests/mb_strripos_error1.phpt b/ext/mbstring/tests/mb_strripos_error1.phpt
new file mode 100644
index 000000000..9d114d55a
--- /dev/null
+++ b/ext/mbstring/tests/mb_strripos_error1.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test mb_strripos() function : error conditions - Pass incorrect number of args
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strripos') or die("skip mb_strripos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : int mb_strripos(string haystack, string needle [, int offset [, string encoding]])
+ * Description: Finds position of last occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+/*
+ * Test how mb_strripos behaves when passed an incorrect number of arguments
+ */
+
+echo "*** Testing mb_strripos() : error conditions ***\n";
+
+
+//Test mb_strripos with one more than the expected number of arguments
+echo "\n-- Testing mb_strripos() function with more than expected no. of arguments --\n";
+$haystack = b'string_val';
+$needle = b'string_val';
+$offset = 10;
+$encoding = 'string_val';
+$extra_arg = 10;
+var_dump( mb_strripos($haystack, $needle, $offset, $encoding, $extra_arg) );
+
+// Testing mb_strripos with one less than the expected number of arguments
+echo "\n-- Testing mb_strripos() function with less than expected no. of arguments --\n";
+$haystack = b'string_val';
+var_dump( mb_strripos($haystack) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_strripos() : error conditions ***
+
+-- Testing mb_strripos() function with more than expected no. of arguments --
+
+Warning: mb_strripos() expects at most 4 parameters, 5 given in %s on line %d
+bool(false)
+
+-- Testing mb_strripos() function with less than expected no. of arguments --
+
+Warning: mb_strripos() expects at least 2 parameters, 1 given in %s on line %d
+bool(false)
+Done
diff --git a/ext/mbstring/tests/mb_strripos_error2.phpt b/ext/mbstring/tests/mb_strripos_error2.phpt
new file mode 100644
index 000000000..4790ffbcb
--- /dev/null
+++ b/ext/mbstring/tests/mb_strripos_error2.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test mb_strripos() function : error conditions - Pass unknown encoding
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strripos') or die("skip mb_strripos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : int mb_strripos(string haystack, string needle [, int offset [, string encoding]])
+ * Description: Finds position of last occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+/*
+ * Pass an unknown encoding to mb_strripos() to test behaviour
+ */
+
+echo "*** Testing mb_strripos() : error conditions ***\n";
+$haystack = b'Hello, world';
+$needle = b'world';
+$offset = 2;
+$encoding = 'unknown-encoding';
+
+var_dump( mb_strripos($haystack, $needle, $offset, $encoding) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_strripos() : error conditions ***
+
+Warning: mb_strripos(): Unknown encoding "unknown-encoding" in %s on line %d
+bool(false)
+Done
diff --git a/ext/mbstring/tests/mb_strripos_variation1.phpt b/ext/mbstring/tests/mb_strripos_variation1.phpt
new file mode 100644
index 000000000..704b50177
--- /dev/null
+++ b/ext/mbstring/tests/mb_strripos_variation1.phpt
@@ -0,0 +1,183 @@
+--TEST--
+Test mb_strripos() function : usage variations - pass different data types to $haystack arg
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strripos') or die("skip mb_strripos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : int mb_strripos(string haystack, string needle [, int offset [, string encoding]])
+ * Description: Finds position of last occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+/*
+ * Pass mb_strripos different data types as $haystack arg to test behaviour
+ */
+
+echo "*** Testing mb_strripos() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$needle = b'string_val';
+$offset = 0;
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $haystack argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+
+ // string data
+/*18*/ "string",
+ 'string',
+ $heredoc,
+
+ // object data
+/*21*/ new classA(),
+
+ // undefined data
+/*22*/ @$undefined_var,
+
+ // unset data
+/*23*/ @$unset_var,
+
+ // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of mb_strripos()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( mb_strripos($input, $needle, $offset, $encoding));
+ $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_strripos() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+
+Warning: mb_strripos() expects parameter 1 to be string, resource given in %s on line %d
+bool(false)
+Done \ No newline at end of file
diff --git a/ext/mbstring/tests/mb_strripos_variation2.phpt b/ext/mbstring/tests/mb_strripos_variation2.phpt
new file mode 100644
index 000000000..61196f007
--- /dev/null
+++ b/ext/mbstring/tests/mb_strripos_variation2.phpt
@@ -0,0 +1,183 @@
+--TEST--
+Test mb_strripos() function : usage variations - pass different data types as $needle arg
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strripos') or die("skip mb_strripos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : int mb_strripos(string haystack, string needle [, int offset [, string encoding]])
+ * Description: Finds position of last occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+/*
+ * Pass mb_strripos different data types as $needle arg to test behaviour
+ */
+
+echo "*** Testing mb_strripos() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$haystack = b'string_val';
+$offset = 0;
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $needle argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+
+ // string data
+/*18*/ b"string",
+ b'string',
+ $heredoc,
+
+ // object data
+/*21*/ new classA(),
+
+ // undefined data
+/*22*/ @$undefined_var,
+
+ // unset data
+/*23*/ @$unset_var,
+
+ // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of mb_strripos()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( mb_strripos($haystack, $input, $offset, $encoding));
+ $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_strripos() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+int(0)
+
+-- Iteration 19 --
+int(0)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+
+Warning: mb_strripos() expects parameter 2 to be string, resource given in %s on line %d
+bool(false)
+Done \ No newline at end of file
diff --git a/ext/mbstring/tests/mb_strripos_variation3_Bug45923.phpt b/ext/mbstring/tests/mb_strripos_variation3_Bug45923.phpt
new file mode 100644
index 000000000..eb23d801b
--- /dev/null
+++ b/ext/mbstring/tests/mb_strripos_variation3_Bug45923.phpt
@@ -0,0 +1,206 @@
+--TEST--
+Test mb_strripos() function : usage variations - pass different data types as $offset arg
+--XFAIL--
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strripos') or die("skip mb_strripos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : int mb_strripos(string haystack, string needle [, int offset [, string encoding]])
+ * Description: Finds position of last occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+/*
+ * Pass mb_strripos different data types as $offset arg to test behaviour
+ */
+
+echo "*** Testing mb_strripos() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$needle = b'A';
+$haystack = b'string_val';
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $offest argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 12.5,
+ -12.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+
+ // string data
+/*18*/ b"string",
+ b'string',
+ $heredoc,
+
+ // object data
+/*21*/ new classA(),
+
+ // undefined data
+/*22*/ @$undefined_var,
+
+ // unset data
+/*23*/ @$unset_var,
+
+ // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of mb_strripos()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( mb_strripos($haystack, $needle, $input, $encoding));
+ $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_strripos() : usage variations ***
+
+-- Iteration 1 --
+int(8)
+
+-- Iteration 2 --
+int(8)
+
+-- Iteration 3 --
+
+Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d
+bool(false)
+
+-- Iteration 4 --
+
+Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+
+Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+
+Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d
+bool(false)
+
+-- Iteration 8 --
+int(8)
+
+-- Iteration 9 --
+int(8)
+
+-- Iteration 10 --
+int(8)
+
+-- Iteration 11 --
+int(8)
+
+-- Iteration 12 --
+int(8)
+
+-- Iteration 13 --
+int(8)
+
+-- Iteration 14 --
+int(8)
+
+-- Iteration 15 --
+int(8)
+
+-- Iteration 16 --
+
+Warning: mb_strripos() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Warning: mb_strripos() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+
+Warning: mb_strripos() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 19 --
+
+Warning: mb_strripos() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 20 --
+
+Warning: mb_strripos() expects parameter 3 to be long, string given in %s on line %d
+bool(false)
+
+-- Iteration 21 --
+
+Warning: mb_strripos() expects parameter 3 to be long, object given in %s on line %d
+bool(false)
+
+-- Iteration 22 --
+int(8)
+
+-- Iteration 23 --
+int(8)
+
+-- Iteration 24 --
+
+Warning: mb_strripos() expects parameter 3 to be long, resource given in %s on line %d
+bool(false)
+Done
diff --git a/ext/mbstring/tests/mb_strripos_variation4.phpt b/ext/mbstring/tests/mb_strripos_variation4.phpt
new file mode 100644
index 000000000..d617872ef
--- /dev/null
+++ b/ext/mbstring/tests/mb_strripos_variation4.phpt
@@ -0,0 +1,223 @@
+--TEST--
+Test mb_strripos() function : usage variations - pass different data types as $encoding arg
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strripos') or die("skip mb_strripos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : int mb_strripos(string haystack, string needle [, int offset [, string encoding]])
+ * Description: Finds position of last occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+/*
+ * Pass mb_strripos different data types as $encoding arg to test behaviour
+ * Where possible 'UTF-8' has been entered as a string value
+ */
+
+echo "*** Testing mb_strripos() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+$haystack = b'string_val';
+$needle = b'VaL';
+$offset = 0;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "UTF-8";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+UTF-8
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $input argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+
+ // string data
+/*18*/ "UTF-8",
+ 'UTF-8',
+ $heredoc,
+
+ // object data
+/*21*/ new classA(),
+
+ // undefined data
+/*22*/ @$undefined_var,
+
+ // unset data
+/*23*/ @$unset_var,
+
+ // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of mb_strripos()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( mb_strripos($haystack, $needle, $offset, $input));
+ $iterator++;
+};
+
+fclose($fp);
+
+echo "Done";
+?>
+
+--EXPECTF--
+*** Testing mb_strripos() : usage variations ***
+
+-- Iteration 1 --
+
+Warning: mb_strripos(): Unknown encoding "0" in %s on line %d
+bool(false)
+
+-- Iteration 2 --
+
+Warning: mb_strripos(): Unknown encoding "1" in %s on line %d
+bool(false)
+
+-- Iteration 3 --
+
+Warning: mb_strripos(): Unknown encoding "12345" in %s on line %d
+bool(false)
+
+-- Iteration 4 --
+
+Warning: mb_strripos(): Unknown encoding "-2345" in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+
+Warning: mb_strripos(): Unknown encoding "10.5" in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Warning: mb_strripos(): Unknown encoding "-10.5" in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+
+Warning: mb_strripos(): Unknown encoding "123456789000" in %s on line %d
+bool(false)
+
+-- Iteration 8 --
+
+Warning: mb_strripos(): Unknown encoding "1.23456789E-9" in %s on line %d
+bool(false)
+
+-- Iteration 9 --
+
+Warning: mb_strripos(): Unknown encoding "0.5" in %s on line %d
+bool(false)
+
+-- Iteration 10 --
+
+Warning: mb_strripos(): Unknown encoding "" in %s on line %d
+bool(false)
+
+-- Iteration 11 --
+
+Warning: mb_strripos(): Unknown encoding "" in %s on line %d
+bool(false)
+
+-- Iteration 12 --
+
+Warning: mb_strripos(): Unknown encoding "1" in %s on line %d
+bool(false)
+
+-- Iteration 13 --
+
+Warning: mb_strripos(): Unknown encoding "" in %s on line %d
+bool(false)
+
+-- Iteration 14 --
+
+Warning: mb_strripos(): Unknown encoding "1" in %s on line %d
+bool(false)
+
+-- Iteration 15 --
+
+Warning: mb_strripos(): Unknown encoding "" in %s on line %d
+bool(false)
+
+-- Iteration 16 --
+
+Warning: mb_strripos(): Unknown encoding "" in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Warning: mb_strripos(): Unknown encoding "" in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+int(7)
+
+-- Iteration 19 --
+int(7)
+
+-- Iteration 20 --
+int(7)
+
+-- Iteration 21 --
+int(7)
+
+-- Iteration 22 --
+
+Warning: mb_strripos(): Unknown encoding "" in %s on line %d
+bool(false)
+
+-- Iteration 23 --
+
+Warning: mb_strripos(): Unknown encoding "" in %s on line %d
+bool(false)
+
+-- Iteration 24 --
+
+Warning: mb_strripos() expects parameter 4 to be string, resource given in %s on line %d
+bool(false)
+Done \ No newline at end of file
diff --git a/ext/mbstring/tests/mb_strripos_variation5_Bug45923.phpt b/ext/mbstring/tests/mb_strripos_variation5_Bug45923.phpt
new file mode 100644
index 000000000..8c40a6fa6
--- /dev/null
+++ b/ext/mbstring/tests/mb_strripos_variation5_Bug45923.phpt
@@ -0,0 +1,115 @@
+--TEST--
+Test mb_strripos() function : usage variations - Pass different integers as $offset argument
+--XFAIL--
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strripos') or die("skip mb_strripos() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : int mb_strripos(string haystack, string needle [, int offset [, string encoding]])
+ * Description: Finds position of last occurrence of a string within another, case insensitive
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+/*
+ * Test how mb_strripos() behaves when passed different integers as $offset argument
+ * The character length of $string_ascii and $string_mb is the same,
+ * and the needle appears at the same positions in both strings
+ */
+
+mb_internal_encoding('UTF-8');
+
+echo "*** Testing mb_strripos() : usage variations ***\n";
+
+$string_ascii = b'+Is an English string'; //21 chars
+$needle_ascii = b'G';
+
+$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); //21 chars
+$needle_mb = base64_decode('44CC');
+
+/*
+ * Loop through integers as multiples of ten for $offset argument
+ * mb_strripos should not be able to accept negative values as $offset.
+ * 60 is larger than *BYTE* count for $string_mb
+ */
+for ($i = -10; $i <= 60; $i += 10) {
+ echo "\n**-- Offset is: $i --**\n";
+ echo "-- ASCII String --\n";
+ var_dump(mb_strripos($string_ascii, $needle_ascii, $i));
+ echo "--Multibyte String --\n";
+ var_dump(mb_strripos($string_mb, $needle_mb, $i, 'UTF-8'));
+}
+
+echo "Done";
+?>
+
+--EXPECTF--
+*** Testing mb_strripos() : usage variations ***
+
+**-- Offset is: -10 --**
+-- ASCII String --
+int(9)
+--Multibyte String --
+int(9)
+
+**-- Offset is: 0 --**
+-- ASCII String --
+int(20)
+--Multibyte String --
+int(20)
+
+**-- Offset is: 10 --**
+-- ASCII String --
+int(20)
+--Multibyte String --
+int(20)
+
+**-- Offset is: 20 --**
+-- ASCII String --
+int(20)
+--Multibyte String --
+int(20)
+
+**-- Offset is: 30 --**
+-- ASCII String --
+
+Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d
+bool(false)
+--Multibyte String --
+
+Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d
+bool(false)
+
+**-- Offset is: 40 --**
+-- ASCII String --
+
+Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d
+bool(false)
+--Multibyte String --
+
+Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d
+bool(false)
+
+**-- Offset is: 50 --**
+-- ASCII String --
+
+Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d
+bool(false)
+--Multibyte String --
+
+Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d
+bool(false)
+
+**-- Offset is: 60 --**
+-- ASCII String --
+
+Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d
+bool(false)
+--Multibyte String --
+
+Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d
+bool(false)
+Done
diff --git a/ext/mbstring/tests/mb_strrpos_basic.phpt b/ext/mbstring/tests/mb_strrpos_basic.phpt
index 9de0388f4..ec6b86c29 100644
--- a/ext/mbstring/tests/mb_strrpos_basic.phpt
+++ b/ext/mbstring/tests/mb_strrpos_basic.phpt
@@ -20,15 +20,15 @@ echo "*** Testing mb_strrpos() : basic ***\n";
mb_internal_encoding('UTF-8');
-$string_ascii = 'This is an English string. 0123456789.';
+$string_ascii = b'This is an English string. 0123456789.';
//Japanese string in UTF-8
$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=');
echo "\n-- ASCII string 1 --\n";
-var_dump(mb_strrpos($string_ascii, 'is', 4, 'ISO-8859-1'));
+var_dump(mb_strrpos($string_ascii, b'is', 4, 'ISO-8859-1'));
echo "\n-- ASCII string 2 --\n";
-var_dump(mb_strrpos($string_ascii, 'hello, world'));
+var_dump(mb_strrpos($string_ascii, b'hello, world'));
echo "\n-- Multibyte string 1 --\n";
$needle1 = base64_decode('44CC');
diff --git a/ext/mbstring/tests/mb_strrpos_variation1.phpt b/ext/mbstring/tests/mb_strrpos_variation1.phpt
index 922cb73fd..2d2db9003 100644
--- a/ext/mbstring/tests/mb_strrpos_variation1.phpt
+++ b/ext/mbstring/tests/mb_strrpos_variation1.phpt
@@ -19,7 +19,7 @@ function_exists('mb_strrpos') or die("skip mb_strrpos() is not available in this
echo "*** Testing mb_strrpos() : usage variations ***\n";
// Initialise function arguments not being substituted
-$needle = 'world';
+$needle = b'world';
$offset = 0;
$encoding = 'utf-8';
@@ -31,12 +31,12 @@ unset ($unset_var);
class classA
{
public function __toString() {
- return "hello, world";
+ return b"hello, world";
}
}
// heredoc string
-$heredoc = <<<EOT
+$heredoc = b<<<EOT
hello, world
EOT;
@@ -74,8 +74,8 @@ $inputs = array(
'',
// string data
-/*18*/ "hello, world",
- 'hello, world',
+/*18*/ b"hello, world",
+ b'hello, world',
$heredoc,
// object data
diff --git a/ext/mbstring/tests/mb_strrpos_variation3.phpt b/ext/mbstring/tests/mb_strrpos_variation3.phpt
index 714ea1693..95840f9e7 100644
--- a/ext/mbstring/tests/mb_strrpos_variation3.phpt
+++ b/ext/mbstring/tests/mb_strrpos_variation3.phpt
@@ -19,8 +19,8 @@ function_exists('mb_strrpos') or die("skip mb_strrpos() is not available in this
echo "*** Testing mb_strrpos() : usage variations ***\n";
// Initialise function arguments not being substituted
-$needle = 'a';
-$haystack = 'string_val';
+$needle = b'a';
+$haystack = b'string_val';
$encoding = 'utf-8';
//get an unset variable
@@ -31,12 +31,12 @@ unset ($unset_var);
class classA
{
public function __toString() {
- return "7";
+ return b"7";
}
}
// heredoc string
-$heredoc = <<<EOT
+$heredoc = b<<<EOT
hello world
EOT;
@@ -97,12 +97,12 @@ int(8)
-- Iteration 3 --
-Notice: mb_strrpos(): Offset is greater than the length of haystack string in %s on line %d
+Warning: mb_strrpos(): Offset is greater than the length of haystack string in %s on line %d
bool(false)
-- Iteration 4 --
-Notice: mb_strrpos(): Offset is greater than the length of haystack string in %s on line %d
+Warning: mb_strrpos(): Offset is greater than the length of haystack string in %s on line %d
bool(false)
-- Iteration 5 --
@@ -113,7 +113,7 @@ bool(false)
-- Iteration 7 --
-Notice: mb_strrpos(): Offset is greater than the length of haystack string in %s on line %d
+Warning: mb_strrpos(): Offset is greater than the length of haystack string in %s on line %d
bool(false)
-- Iteration 8 --
@@ -150,4 +150,4 @@ int(8)
-- Iteration 18 --
int(8)
-Done \ No newline at end of file
+Done
diff --git a/ext/mbstring/tests/mb_strrpos_variation4.phpt b/ext/mbstring/tests/mb_strrpos_variation4.phpt
index e3d3d43c0..198ce8fc7 100644
--- a/ext/mbstring/tests/mb_strrpos_variation4.phpt
+++ b/ext/mbstring/tests/mb_strrpos_variation4.phpt
@@ -20,8 +20,8 @@ function_exists('mb_strrpos') or die("skip mb_strrpos() is not available in this
echo "*** Testing mb_strrpos() : usage variations ***\n";
// Initialise function arguments not being substituted
-$haystack = 'hello, world';
-$needle = 'world';
+$haystack = b'hello, world';
+$needle = b'world';
$offset = 0;
//get an unset variable
diff --git a/ext/mbstring/tests/mb_strstr_basic.phpt b/ext/mbstring/tests/mb_strstr_basic.phpt
new file mode 100644
index 000000000..efa11056a
--- /dev/null
+++ b/ext/mbstring/tests/mb_strstr_basic.phpt
@@ -0,0 +1,64 @@
+--TEST--
+Test mb_strstr() function : basic functionality
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strstr') or die("skip mb_strstr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strstr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds first occurrence of a string within another
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strstr() : basic functionality ***\n";
+
+mb_internal_encoding('UTF-8');
+
+$string_ascii = b'abc def';
+//Japanese string in UTF-8
+$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=');
+
+echo "\n-- ASCII string: needle exists --\n";
+var_dump(bin2hex(mb_strstr($string_ascii, b'd', false, 'ISO-8859-1')));
+var_dump(bin2hex(mb_strstr($string_ascii, b'd')));
+var_dump(bin2hex(mb_strstr($string_ascii, b'd', true)));
+
+
+echo "\n-- ASCII string: needle doesn't exist --\n";
+var_dump(mb_strstr($string_ascii, b'123'));
+
+echo "\n-- Multibyte string: needle exists --\n";
+$needle1 = base64_decode('5pel5pys6Kqe');
+var_dump(bin2hex(mb_strstr($string_mb, $needle1)));
+var_dump(bin2hex(mb_strstr($string_mb, $needle1, false, 'utf-8')));
+var_dump(bin2hex(mb_strstr($string_mb, $needle1, true)));
+
+
+echo "\n-- Multibyte string: needle doesn't exist --\n";
+$needle2 = base64_decode('44GT44KT44Gr44Gh44Gv44CB5LiW55WM');
+var_dump(mb_strstr($string_mb, $needle2));
+
+?>
+===DONE===
+--EXPECT--
+*** Testing mb_strstr() : basic functionality ***
+
+-- ASCII string: needle exists --
+string(6) "646566"
+string(6) "646566"
+string(8) "61626320"
+
+-- ASCII string: needle doesn't exist --
+bool(false)
+
+-- Multibyte string: needle exists --
+string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082"
+string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082"
+string(0) ""
+
+-- Multibyte string: needle doesn't exist --
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/mbstring/tests/mb_strstr_error1.phpt b/ext/mbstring/tests/mb_strstr_error1.phpt
new file mode 100644
index 000000000..f38d5c9cc
--- /dev/null
+++ b/ext/mbstring/tests/mb_strstr_error1.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test mb_strstr() function : error conditions
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strstr') or die("skip mb_strstr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strstr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds first occurrence of a string within another
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strstr() : error conditions ***\n";
+
+
+//Test mb_strstr with one more than the expected number of arguments
+echo "\n-- Testing mb_strstr() function with more than expected no. of arguments --\n";
+$haystack = b'string_val';
+$needle = b'string_val';
+$part = true;
+$encoding = 'string_val';
+$extra_arg = 10;
+var_dump( mb_strstr($haystack, $needle, $part, $encoding, $extra_arg) );
+
+// Testing mb_strstr with one less than the expected number of arguments
+echo "\n-- Testing mb_strstr() function with less than expected no. of arguments --\n";
+$haystack = b'string_val';
+var_dump( mb_strstr($haystack) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_strstr() : error conditions ***
+
+-- Testing mb_strstr() function with more than expected no. of arguments --
+
+Warning: mb_strstr() expects at most 4 parameters, 5 given in %s on line %d
+bool(false)
+
+-- Testing mb_strstr() function with less than expected no. of arguments --
+
+Warning: mb_strstr() expects at least 2 parameters, 1 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_strstr_error2.phpt b/ext/mbstring/tests/mb_strstr_error2.phpt
new file mode 100644
index 000000000..163c80026
--- /dev/null
+++ b/ext/mbstring/tests/mb_strstr_error2.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test mb_strstr() function : error conditions
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strstr') or die("skip mb_strstr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strstr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds first occurrence of a string within another
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strstr() : error conditions ***\n";
+
+
+echo "\n-- Testing mb_strstr() with unknown encoding --\n";
+$haystack = b'Hello, world';
+$needle = b'world';
+$encoding = 'unknown-encoding';
+$part = true;
+var_dump( mb_strstr($haystack, $needle, $part, $encoding) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_strstr() : error conditions ***
+
+-- Testing mb_strstr() with unknown encoding --
+
+Warning: mb_strstr(): Unknown encoding "unknown-encoding" in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_strstr_variation1.phpt b/ext/mbstring/tests/mb_strstr_variation1.phpt
new file mode 100644
index 000000000..48e7c537e
--- /dev/null
+++ b/ext/mbstring/tests/mb_strstr_variation1.phpt
@@ -0,0 +1,207 @@
+--TEST--
+Test mb_strstr() function : usage variation - various haystacks, needle won't be found
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strstr') or die("skip mb_strstr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strstr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds first occurrence of a string within another
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strstr() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$needle = b'string_val';
+$part = true;
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for haystack
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( mb_strstr($value, $needle, $part, $encoding) );
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_strstr() : usage variation ***
+
+--int 0--
+bool(false)
+
+--int 1--
+bool(false)
+
+--int 12345--
+bool(false)
+
+--int -12345--
+bool(false)
+
+--float 10.5--
+bool(false)
+
+--float -10.5--
+bool(false)
+
+--float 12.3456789000e10--
+bool(false)
+
+--float -12.3456789000e10--
+bool(false)
+
+--float .5--
+bool(false)
+
+--empty array--
+Error: 2 - mb_strstr() expects parameter 1 to be string, array given, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - mb_strstr() expects parameter 1 to be string, array given, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - mb_strstr() expects parameter 1 to be string, array given, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - mb_strstr() expects parameter 1 to be string, array given, %s(%d)
+bool(false)
+
+--uppercase NULL--
+bool(false)
+
+--lowercase null--
+bool(false)
+
+--lowercase true--
+bool(false)
+
+--lowercase false--
+bool(false)
+
+--uppercase TRUE--
+bool(false)
+
+--uppercase FALSE--
+bool(false)
+
+--empty string DQ--
+bool(false)
+
+--empty string SQ--
+bool(false)
+
+--instance of classWithToString--
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - mb_strstr() expects parameter 1 to be string, object given, %s(%d)
+bool(false)
+
+--undefined var--
+bool(false)
+
+--unset var--
+bool(false)
+
+--resource--
+Error: 2 - mb_strstr() expects parameter 1 to be string, resource given, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_strstr_variation2.phpt b/ext/mbstring/tests/mb_strstr_variation2.phpt
new file mode 100644
index 000000000..f70bb67ad
--- /dev/null
+++ b/ext/mbstring/tests/mb_strstr_variation2.phpt
@@ -0,0 +1,215 @@
+--TEST--
+Test mb_strstr() function : usage variation - different types of needle.
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strstr') or die("skip mb_strstr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strstr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds first occurrence of a string within another
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strstr() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$haystack = b'string_val';
+$part = true;
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for needle
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( mb_strstr($haystack, $value, $part, $encoding) );
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_strstr() : usage variation ***
+
+--int 0--
+bool(false)
+
+--int 1--
+bool(false)
+
+--int 12345--
+bool(false)
+
+--int -12345--
+bool(false)
+
+--float 10.5--
+bool(false)
+
+--float -10.5--
+bool(false)
+
+--float 12.3456789000e10--
+bool(false)
+
+--float -12.3456789000e10--
+bool(false)
+
+--float .5--
+bool(false)
+
+--empty array--
+Error: 2 - mb_strstr() expects parameter 2 to be string, array given, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - mb_strstr() expects parameter 2 to be string, array given, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - mb_strstr() expects parameter 2 to be string, array given, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - mb_strstr() expects parameter 2 to be string, array given, %s(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - mb_strstr(): Empty delimiter, %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - mb_strstr(): Empty delimiter, %s(%d)
+bool(false)
+
+--lowercase true--
+bool(false)
+
+--lowercase false--
+Error: 2 - mb_strstr(): Empty delimiter, %s(%d)
+bool(false)
+
+--uppercase TRUE--
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - mb_strstr(): Empty delimiter, %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - mb_strstr(): Empty delimiter, %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - mb_strstr(): Empty delimiter, %s(%d)
+bool(false)
+
+--instance of classWithToString--
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - mb_strstr() expects parameter 2 to be string, object given, %s(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - mb_strstr(): Empty delimiter, %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - mb_strstr(): Empty delimiter, %s(%d)
+bool(false)
+
+--resource--
+Error: 2 - mb_strstr() expects parameter 2 to be string, resource given, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_strstr_variation3.phpt b/ext/mbstring/tests/mb_strstr_variation3.phpt
new file mode 100644
index 000000000..55c8f31d9
--- /dev/null
+++ b/ext/mbstring/tests/mb_strstr_variation3.phpt
@@ -0,0 +1,232 @@
+--TEST--
+Test mb_strstr() function : usage variation - different values for part
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strstr') or die("skip mb_strstr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strstr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds first occurrence of a string within another
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strstr() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$haystack = b'string_val';
+$needle = b'_';
+$encoding = 'utf-8';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for part
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ $res = mb_strstr($haystack, $needle, $value, $encoding);
+ if ($res === false) {
+ var_dump($res);
+ }
+ else {
+ var_dump(bin2hex($res));
+ }
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_strstr() : usage variation ***
+
+--int 0--
+string(8) "5f76616c"
+
+--int 1--
+string(12) "737472696e67"
+
+--int 12345--
+string(12) "737472696e67"
+
+--int -12345--
+string(12) "737472696e67"
+
+--float 10.5--
+string(12) "737472696e67"
+
+--float -10.5--
+string(12) "737472696e67"
+
+--float 12.3456789000e10--
+string(12) "737472696e67"
+
+--float -12.3456789000e10--
+string(12) "737472696e67"
+
+--float .5--
+string(12) "737472696e67"
+
+--empty array--
+Error: 2 - mb_strstr() expects parameter 3 to be boolean, array given, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - mb_strstr() expects parameter 3 to be boolean, array given, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - mb_strstr() expects parameter 3 to be boolean, array given, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - mb_strstr() expects parameter 3 to be boolean, array given, %s(%d)
+bool(false)
+
+--uppercase NULL--
+string(8) "5f76616c"
+
+--lowercase null--
+string(8) "5f76616c"
+
+--lowercase true--
+string(12) "737472696e67"
+
+--lowercase false--
+string(8) "5f76616c"
+
+--uppercase TRUE--
+string(12) "737472696e67"
+
+--uppercase FALSE--
+string(8) "5f76616c"
+
+--empty string DQ--
+string(8) "5f76616c"
+
+--empty string SQ--
+string(8) "5f76616c"
+
+--string DQ--
+string(12) "737472696e67"
+
+--string SQ--
+string(12) "737472696e67"
+
+--mixed case string--
+string(12) "737472696e67"
+
+--heredoc--
+string(12) "737472696e67"
+
+--instance of classWithToString--
+Error: 2 - mb_strstr() expects parameter 3 to be boolean, object given, %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - mb_strstr() expects parameter 3 to be boolean, object given, %s(%d)
+bool(false)
+
+--undefined var--
+string(8) "5f76616c"
+
+--unset var--
+string(8) "5f76616c"
+
+--resource--
+Error: 2 - mb_strstr() expects parameter 3 to be boolean, resource given, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_strstr_variation4.phpt b/ext/mbstring/tests/mb_strstr_variation4.phpt
new file mode 100644
index 000000000..3a208d312
--- /dev/null
+++ b/ext/mbstring/tests/mb_strstr_variation4.phpt
@@ -0,0 +1,227 @@
+--TEST--
+Test mb_strstr() function : usage variation - different encoding types
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strstr') or die("skip mb_strstr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strstr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds first occurrence of a string within another
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strstr() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$haystack = b'string_val';
+$needle = b'_';
+$part = true;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "invalid";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+invalid
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for encoding
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( mb_strstr($haystack, $needle, $part, $value) );
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_strstr() : usage variation ***
+
+--int 0--
+Error: 2 - mb_strstr(): Unknown encoding "0", %s(%d)
+bool(false)
+
+--int 1--
+Error: 2 - mb_strstr(): Unknown encoding "1", %s(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - mb_strstr(): Unknown encoding "12345", %s(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - mb_strstr(): Unknown encoding "-2345", %s(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - mb_strstr(): Unknown encoding "10.5", %s(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - mb_strstr(): Unknown encoding "-10.5", %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - mb_strstr(): Unknown encoding "123456789000", %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - mb_strstr(): Unknown encoding "-123456789000", %s(%d)
+bool(false)
+
+--float .5--
+Error: 2 - mb_strstr(): Unknown encoding "0.5", %s(%d)
+bool(false)
+
+--empty array--
+Error: 2 - mb_strstr() expects parameter 4 to be string, array given, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - mb_strstr() expects parameter 4 to be string, array given, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - mb_strstr() expects parameter 4 to be string, array given, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - mb_strstr() expects parameter 4 to be string, array given, %s(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - mb_strstr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - mb_strstr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - mb_strstr(): Unknown encoding "1", %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - mb_strstr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - mb_strstr(): Unknown encoding "1", %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - mb_strstr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - mb_strstr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - mb_strstr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - mb_strstr(): Unknown encoding "invalid", %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - mb_strstr() expects parameter 4 to be string, object given, %s(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - mb_strstr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - mb_strstr(): Unknown encoding "", %s(%d)
+bool(false)
+
+--resource--
+Error: 2 - mb_strstr() expects parameter 4 to be string, resource given, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_strstr_variation5.phpt b/ext/mbstring/tests/mb_strstr_variation5.phpt
new file mode 100644
index 000000000..3bfbd6164
--- /dev/null
+++ b/ext/mbstring/tests/mb_strstr_variation5.phpt
@@ -0,0 +1,59 @@
+--TEST--
+Test mb_strstr() function : variation - multiple needles
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strstr') or die("skip mb_strstr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strstr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds first occurrence of a string within another
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strstr() : variation ***\n";
+
+mb_internal_encoding('UTF-8');
+
+//with repeated needles
+$string_ascii = b'abcdef zbcdyx';
+$needle_ascii = b"bcd";
+
+//Japanese string in UTF-8 with repeated needles
+$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OIMzTvvJXvvJbml6XmnKzoqp7jg4bjgq3jgrnjg4g=');
+$needle_mb = base64_decode('6Kqe44OG44Kt');
+
+echo "-- Ascii data --\n";
+var_dump(bin2hex(mb_strstr($string_ascii, $needle_ascii, false)));
+var_dump(bin2hex(mb_strstr($string_ascii, $needle_ascii, true)));
+
+echo "-- mb data in utf-8 --\n";
+$res = mb_strstr($string_mb, $needle_mb, false);
+if ($res !== false) {
+ var_dump(bin2hex($res));
+}
+else {
+ echo "nothing found!\n";
+}
+$res = mb_strstr($string_mb, $needle_mb, true);
+if ($res !== false) {
+ var_dump(bin2hex($res));
+}
+else {
+ echo "nothing found!\n";
+}
+
+
+?>
+===DONE===
+--EXPECT--
+*** Testing mb_strstr() : variation ***
+-- Ascii data --
+string(24) "6263646566207a6263647978"
+string(2) "61"
+-- mb data in utf-8 --
+string(88) "e8aa9ee38386e382ade382b9e383883334efbc95efbc96e697a5e69cace8aa9ee38386e382ade382b9e38388"
+string(12) "e697a5e69cac"
+===DONE===
diff --git a/ext/mbstring/tests/mb_strstr_variation6.phpt b/ext/mbstring/tests/mb_strstr_variation6.phpt
new file mode 100644
index 000000000..1242e02d1
--- /dev/null
+++ b/ext/mbstring/tests/mb_strstr_variation6.phpt
@@ -0,0 +1,65 @@
+--TEST--
+Test mb_strstr() function : variation - case sensitivity
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_strstr') or die("skip mb_strstr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_strstr(string haystack, string needle[, bool part[, string encoding]])
+ * Description: Finds first occurrence of a string within another
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_strstr() : variation ***\n";
+
+mb_internal_encoding('UTF-8');
+
+//ascii
+$string_ascii = b'abcdef';
+$needle_ascii_upper = b"BCD";
+$needle_ascii_mixed = b"bCd";
+$needle_ascii_lower = b"bcd";
+
+//Greek string in lower case UTF-8
+$string_mb = base64_decode('zrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4TPhc+Gz4fPiM+J');
+$needle_mb_upper = base64_decode('zpzOnc6ezp8=');
+$needle_mb_lower = base64_decode('zrzOvc6+zr8=');
+$needle_mb_mixed = base64_decode('zpzOnc6+zr8=');
+
+echo "-- Ascii data --\n";
+// needle should be found
+var_dump(bin2hex(mb_strstr($string_ascii, $needle_ascii_lower)));
+// no needle should be found
+var_dump(mb_strstr($string_ascii, $needle_ascii_upper));
+var_dump(mb_strstr($string_ascii, $needle_ascii_mixed));
+
+echo "-- mb data in utf-8 --\n";
+// needle should be found
+$res = mb_strstr($string_mb, $needle_mb_lower, false);
+if ($res !== false) {
+ var_dump(bin2hex($res));
+}
+else {
+ echo "nothing found!\n";
+}
+// no needle should be found
+var_dump(mb_strstr($string_mb, $needle_mb_upper));
+var_dump(mb_strstr($string_mb, $needle_mb_mixed));
+
+
+?>
+===DONE===
+--EXPECT--
+*** Testing mb_strstr() : variation ***
+-- Ascii data --
+string(10) "6263646566"
+bool(false)
+bool(false)
+-- mb data in utf-8 --
+string(52) "cebccebdcebecebfcf80cf81cf83cf84cf85cf86cf87cf88cf89"
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_strtolower_variation1.phpt b/ext/mbstring/tests/mb_strtolower_variation1.phpt
index ac468ca0d..3b151b96c 100644
--- a/ext/mbstring/tests/mb_strtolower_variation1.phpt
+++ b/ext/mbstring/tests/mb_strtolower_variation1.phpt
@@ -18,8 +18,6 @@ function_exists('mb_strtolower') or die("skip mb_strtolower() is not available i
echo "*** Testing mb_strtolower() : usage variations ***\n";
-// Initialise function arguments not being substituted
-$encoding = 'UTF-8';
//get an unset variable
$unset_var = 10;
@@ -93,7 +91,7 @@ $inputs = array(
$iterator = 1;
foreach($inputs as $input) {
echo "\n-- Iteration $iterator --\n";
- var_dump( mb_strtolower($input, $encoding) );
+ var_dump( mb_strtolower($input) );
$iterator++;
};
diff --git a/ext/mbstring/tests/mb_strtolower_variation2.phpt b/ext/mbstring/tests/mb_strtolower_variation2.phpt
index c9a674f5c..293c9559a 100644
--- a/ext/mbstring/tests/mb_strtolower_variation2.phpt
+++ b/ext/mbstring/tests/mb_strtolower_variation2.phpt
@@ -20,7 +20,7 @@ function_exists('mb_strtolower') or die("skip mb_strtolower() is not available i
echo "*** Testing mb_strtolower() : usage variations ***\n";
// Initialise function arguments not being substituted
-$sourcestring = 'Hello, World';
+$sourcestring = b'Hello, World';
//get an unset variable
$unset_var = 10;
@@ -94,7 +94,13 @@ $inputs = array(
$iterator = 1;
foreach($inputs as $input) {
echo "\n-- Iteration $iterator --\n";
- var_dump( mb_strtolower($sourcestring, $input) );
+ $res = mb_strtolower($sourcestring, $input);
+ if ($res === false || $res == NULL) {
+ var_dump($res);
+ }
+ else {
+ var_dump(bin2hex($res));
+ }
$iterator++;
};
@@ -191,16 +197,16 @@ Warning: mb_strtolower(): Unknown encoding "" in %s on line %d
bool(false)
-- Iteration 18 --
-string(12) "hello, world"
+string(24) "68656c6c6f2c20776f726c64"
-- Iteration 19 --
-string(12) "hello, world"
+string(24) "68656c6c6f2c20776f726c64"
-- Iteration 20 --
-string(12) "hello, world"
+string(24) "68656c6c6f2c20776f726c64"
-- Iteration 21 --
-string(12) "hello, world"
+string(24) "68656c6c6f2c20776f726c64"
-- Iteration 22 --
diff --git a/ext/mbstring/tests/mb_strtolower_variation4.phpt b/ext/mbstring/tests/mb_strtolower_variation4.phpt
index f08b50879..37357a189 100644
--- a/ext/mbstring/tests/mb_strtolower_variation4.phpt
+++ b/ext/mbstring/tests/mb_strtolower_variation4.phpt
@@ -18,10 +18,10 @@ function_exists('mb_strtolower') or die("skip mb_strtolower() is not available i
echo "*** Testing mb_strtolower() : usage variations ***\n";
-$uppers = array('Basic Latin' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
+$uppers = array('Basic Latin' => b'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'Characters With Accents' => base64_decode('w4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/DkMORw5LDk8OUw5XDlg=='),
'Russian' => base64_decode('0JDQkdCS0JPQlNCV0JbQlw=='));
-$lowers = array('Basic Latin' => 'abcdefghijklmnopqrstuvwxyz',
+$lowers = array('Basic Latin' => b'abcdefghijklmnopqrstuvwxyz',
'Characters With Accents' => base64_decode('w6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtg=='),
'Russian' => base64_decode('0LDQsdCy0LPQtNC10LbQtw=='));
diff --git a/ext/mbstring/tests/mb_strtoupper_basic.phpt b/ext/mbstring/tests/mb_strtoupper_basic.phpt
index b282647f8..e77646923 100644
--- a/ext/mbstring/tests/mb_strtoupper_basic.phpt
+++ b/ext/mbstring/tests/mb_strtoupper_basic.phpt
@@ -19,14 +19,14 @@ function_exists('mb_strtoupper') or die("skip mb_strtoupper() is not available i
echo "*** Testing mb_strtoupper() : basic functionality ***\n";
mb_internal_encoding('utf-8');
-$ascii_lower = 'abcdefghijklmnopqrstuvwxyz';
-$ascii_upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
+$ascii_lower = b'abcdefghijklmnopqrstuvwxyz';
+$ascii_upper = b'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$greek_lower = base64_decode('zrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4TPhc+Gz4fPiM+J');
$greek_upper = base64_decode('zpHOks6TzpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoc6jzqTOpc6mzqfOqM6p');
echo "\n-- ASCII String --\n";
$ascii = mb_strtoupper($ascii_lower);
-var_dump($ascii);
+var_dump(base64_encode($ascii));
if($ascii == $ascii_upper) {
echo "Correctly converted\n";
@@ -47,11 +47,11 @@ if ($mb == $greek_upper) {
echo "Done";
?>
---EXPECTF--
+--EXPECT--
*** Testing mb_strtoupper() : basic functionality ***
-- ASCII String --
-string(26) "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+string(36) "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVo="
Correctly converted
-- Multibyte String --
diff --git a/ext/mbstring/tests/mb_strtoupper_variation1.phpt b/ext/mbstring/tests/mb_strtoupper_variation1.phpt
index b602f696b..efe884563 100644
--- a/ext/mbstring/tests/mb_strtoupper_variation1.phpt
+++ b/ext/mbstring/tests/mb_strtoupper_variation1.phpt
@@ -20,7 +20,6 @@ function_exists('mb_strtoupper') or die("skip mb_strtoupper() is not available i
echo "*** Testing mb_strtoupper() : usage variations ***\n";
// Initialise function arguments not being substituted
-$encoding = 'UTF-8';
//get an unset variable
$unset_var = 10;
@@ -94,7 +93,7 @@ $inputs = array(
$iterator = 1;
foreach($inputs as $input) {
echo "\n-- Iteration $iterator --\n";
- var_dump( mb_strtoupper($input, $encoding) );
+ var_dump( mb_strtoupper($input) );
$iterator++;
};
diff --git a/ext/mbstring/tests/mb_strtoupper_variation2.phpt b/ext/mbstring/tests/mb_strtoupper_variation2.phpt
index 3291ce71c..035cd63f4 100644
--- a/ext/mbstring/tests/mb_strtoupper_variation2.phpt
+++ b/ext/mbstring/tests/mb_strtoupper_variation2.phpt
@@ -20,7 +20,7 @@ function_exists('mb_strtoupper') or die("skip mb_strtoupper() is not available i
echo "*** Testing mb_strtoupper() : usage variations ***\n";
// Initialise function arguments not being substituted
-$sourcestring = 'Hello, World';
+$sourcestring = b'Hello, World';
//get an unset variable
$unset_var = 10;
@@ -94,7 +94,13 @@ $inputs = array(
$iterator = 1;
foreach($inputs as $input) {
echo "\n-- Iteration $iterator --\n";
- var_dump( mb_strtoupper($sourcestring, $input) );
+ $res = mb_strtoupper($sourcestring, $input);
+ if ($res === false || $res == NULL) {
+ var_dump($res);
+ }
+ else {
+ var_dump(bin2hex($res));
+ }
$iterator++;
};
@@ -192,16 +198,16 @@ Warning: mb_strtoupper(): Unknown encoding "" in %s on line %d
bool(false)
-- Iteration 18 --
-string(12) "HELLO, WORLD"
+string(24) "48454c4c4f2c20574f524c44"
-- Iteration 19 --
-string(12) "HELLO, WORLD"
+string(24) "48454c4c4f2c20574f524c44"
-- Iteration 20 --
-string(12) "HELLO, WORLD"
+string(24) "48454c4c4f2c20574f524c44"
-- Iteration 21 --
-string(12) "HELLO, WORLD"
+string(24) "48454c4c4f2c20574f524c44"
-- Iteration 22 --
diff --git a/ext/mbstring/tests/mb_strtoupper_variation4.phpt b/ext/mbstring/tests/mb_strtoupper_variation4.phpt
index 8f5abe726..7d91c8a2d 100644
--- a/ext/mbstring/tests/mb_strtoupper_variation4.phpt
+++ b/ext/mbstring/tests/mb_strtoupper_variation4.phpt
@@ -19,10 +19,10 @@ function_exists('mb_strtoupper') or die("skip mb_strtoupper() is not available i
echo "*** Testing mb_strtoupper() : usage variations ***\n";
-$uppers = array('Basic Latin' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
+$uppers = array('Basic Latin' => b'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'Characters With Accents' => base64_decode('w4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/DkMORw5LDk8OUw5XDlg=='),
'Russian' => base64_decode('0JDQkdCS0JPQlNCV0JbQlw=='));
-$lowers = array('Basic Latin' => 'abcdefghijklmnopqrstuvwxyz',
+$lowers = array('Basic Latin' => b'abcdefghijklmnopqrstuvwxyz',
'Characters With Accents' => base64_decode('w6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtg=='),
'Russian' => base64_decode('0LDQsdCy0LPQtNC10LbQtw=='));
diff --git a/ext/mbstring/tests/mb_substitute_character.phpt b/ext/mbstring/tests/mb_substitute_character.phpt
index 9f2131080..9f35f1d26 100644
--- a/ext/mbstring/tests/mb_substitute_character.phpt
+++ b/ext/mbstring/tests/mb_substitute_character.phpt
@@ -10,40 +10,36 @@ include_once('common.inc');
// Note: It does not return TRUE/FALSE for setting char
-// Use Unicode val
-$r = mb_substitute_character(0x3013);
-//$r = mb_substitute_character('U+3013');
-($r === TRUE) ? print "OK_UTF\n" : print("NG_UTF: ".gettype($r)." $r\n");
-print mb_substitute_character() . "\n";
+var_dump(mb_substitute_character(0x3044));
+var_dump(mb_substitute_character());
+var_dump(bin2hex(mb_convert_encoding("\xe2\x99\xa0\xe3\x81\x82", "CP932", "UTF-8")));
+var_dump(mb_substitute_character('long'));
+var_dump(mb_substitute_character());
+var_dump(bin2hex(mb_convert_encoding("\xe2\x99\xa0\xe3\x81\x82", "CP932", "UTF-8")));
-// Use "long"
-$r = mb_substitute_character('long');
-($r === TRUE) ? print "OK_LONG\n" : print("NG_LONG: ".gettype($r)." $r\n");
-print mb_substitute_character() . "\n";
+var_dump(mb_substitute_character('none'));
+var_dump(mb_substitute_character());
+var_dump(bin2hex(mb_convert_encoding("\xe2\x99\xa0\xe3\x81\x82", "CP932", "UTF-8")));
+var_dump(mb_substitute_character('entity'));
+var_dump(mb_substitute_character());
+var_dump(bin2hex(mb_convert_encoding("\xe2\x99\xa0\xe3\x81\x82", "CP932", "UTF-8")));
-// Use "none"
-$r = mb_substitute_character('none');
-($r === TRUE) ? print "OK_NONE\n" : print("NG_NONE: ".gettype($r)." $r\n");
-print mb_substitute_character() . "\n";
-
-
-// Set invalid string. Should fail.
-print "== INVALID PARAMETER ==\n";
-$r = mb_substitute_character('BAD_NAME');
-($r === FALSE) ? print "OK_BAD_NAME\n" : print("NG_BAD_NAME: ".gettype($r)." $r\n");
-
+var_dump(mb_substitute_character('BAD_NAME'));
?>
-
--EXPECT--
-OK_UTF
-12307
-OK_LONG
-long
-OK_NONE
-none
-== INVALID PARAMETER ==
+bool(true)
+int(12356)
+string(8) "82a282a0"
+bool(true)
+string(4) "long"
+string(16) "552b3236363082a0"
+bool(true)
+string(4) "none"
+string(4) "82a0"
+bool(true)
+string(6) "entity"
+string(20) "262378323636303b82a0"
ERR: Warning
-OK_BAD_NAME
-
+bool(false)
diff --git a/ext/mbstring/tests/mb_substitute_character_basic.phpt b/ext/mbstring/tests/mb_substitute_character_basic.phpt
new file mode 100644
index 000000000..30cda8a92
--- /dev/null
+++ b/ext/mbstring/tests/mb_substitute_character_basic.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test mb_substitute_character() function : basic functionality
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_substitute_character') or die("skip mb_substitute_character() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : mixed mb_substitute_character([mixed substchar])
+ * Description: Sets the current substitute_character or returns the current substitute_character
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_substitute_character() : basic functionality ***\n";
+
+
+// Initialise all required variables
+var_dump( mb_substitute_character() );
+var_dump( mb_substitute_character(66) );
+var_dump( mb_substitute_character() );
+var_dump( mb_substitute_character(1234) );
+var_dump( mb_substitute_character() );
+var_dump( mb_substitute_character("none") );
+var_dump( mb_substitute_character() );
+var_dump( mb_substitute_character("b") );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_substitute_character() : basic functionality ***
+int(63)
+bool(true)
+int(66)
+bool(true)
+int(1234)
+bool(true)
+string(4) "none"
+
+Warning: mb_substitute_character(): Unknown character. in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/mbstring/tests/mb_substitute_character_error.phpt b/ext/mbstring/tests/mb_substitute_character_error.phpt
new file mode 100644
index 000000000..7576accd8
--- /dev/null
+++ b/ext/mbstring/tests/mb_substitute_character_error.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test mb_substitute_character() function : error conditions
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_substitute_character') or die("skip mb_substitute_character() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : mixed mb_substitute_character([mixed substchar])
+ * Description: Sets the current substitute_character or returns the current substitute_character
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_substitute_character() : error conditions ***\n";
+
+
+//Test mb_substitute_character with one more than the expected number of arguments
+echo "\n-- Testing mb_substitute_character() function with more than expected no. of arguments --\n";
+$substchar = 1;
+$extra_arg = 10;
+var_dump( mb_substitute_character($substchar, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_substitute_character() : error conditions ***
+
+-- Testing mb_substitute_character() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for mb_substitute_character() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/mbstring/tests/mb_substitute_character_variation1.phpt b/ext/mbstring/tests/mb_substitute_character_variation1.phpt
new file mode 100644
index 000000000..435f95adf
--- /dev/null
+++ b/ext/mbstring/tests/mb_substitute_character_variation1.phpt
@@ -0,0 +1,238 @@
+--TEST--
+Test mb_substitute_character() function : usage variation
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_substitute_character') or die("skip mb_substitute_character() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : mixed mb_substitute_character([mixed substchar])
+ * Description: Sets the current substitute_character or returns the current substitute_character
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_substitute_character() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for substchar
+
+mb_internal_encoding('utf-8');
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( mb_substitute_character($value) );
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mb_substitute_character() : usage variation ***
+
+--int 0--
+Error: 2 - mb_substitute_character(): Unknown character., %s(%d)
+bool(false)
+
+--int 1--
+bool(true)
+
+--int 12345--
+bool(true)
+
+--int -12345--
+Error: 2 - mb_substitute_character(): Unknown character., %s(%d)
+bool(false)
+
+--float 10.5--
+bool(true)
+
+--float -10.5--
+Error: 2 - mb_substitute_character(): Unknown character., %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - mb_substitute_character(): Unknown character., %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - mb_substitute_character(): Unknown character., %s(%d)
+bool(false)
+
+--float .5--
+Error: 2 - mb_substitute_character(): Unknown character., %s(%d)
+bool(false)
+
+--empty array--
+Error: 2 - mb_substitute_character(): Unknown character., %s(%d)
+bool(false)
+
+--int indexed array--
+bool(true)
+
+--associative array--
+bool(true)
+
+--nested arrays--
+bool(true)
+
+--uppercase NULL--
+Error: 2 - mb_substitute_character(): Unknown character., %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - mb_substitute_character(): Unknown character., %s(%d)
+bool(false)
+
+--lowercase true--
+bool(true)
+
+--lowercase false--
+Error: 2 - mb_substitute_character(): Unknown character., %s(%d)
+bool(false)
+
+--uppercase TRUE--
+bool(true)
+
+--uppercase FALSE--
+Error: 2 - mb_substitute_character(): Unknown character., %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - mb_substitute_character(): Unknown character., %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - mb_substitute_character(): Unknown character., %s(%d)
+bool(false)
+
+--string DQ--
+Error: 2 - mb_substitute_character(): Unknown character., %s(%d)
+bool(false)
+
+--string SQ--
+Error: 2 - mb_substitute_character(): Unknown character., %s(%d)
+bool(false)
+
+--mixed case string--
+Error: 2 - mb_substitute_character(): Unknown character., %s(%d)
+bool(false)
+
+--heredoc--
+Error: 2 - mb_substitute_character(): Unknown character., %s(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 8 - Object of class classWithToString could not be converted to int, %s(%d)
+bool(true)
+
+--instance of classWithoutToString--
+Error: 8 - Object of class classWithoutToString could not be converted to int, %s(%d)
+bool(true)
+
+--undefined var--
+Error: 2 - mb_substitute_character(): Unknown character., %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - mb_substitute_character(): Unknown character., %s(%d)
+bool(false)
+
+--resource--
+bool(true)
+===DONE===
diff --git a/ext/mbstring/tests/mb_substitute_character_variation2.phpt b/ext/mbstring/tests/mb_substitute_character_variation2.phpt
new file mode 100644
index 000000000..202561afc
--- /dev/null
+++ b/ext/mbstring/tests/mb_substitute_character_variation2.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test mb_substitute_character() function : variation unmappable out char for convert encoding
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_substitute_character') or die("skip mb_substitute_character() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : mixed mb_substitute_character([mixed substchar])
+ * Description: Sets the current substitute_character or returns the current substitute_character
+ * Source code: ext/mbstring/mbstring.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mb_substitute_character() : variation ***\n";
+//japenese utf-8
+$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI');
+
+//output the default which is ? in ISO-8859-1, x3f
+var_dump(bin2hex(mb_convert_encoding($string_mb, "ISO-8859-1", "UTF-8")));
+
+mb_substitute_character(66); //'B' in ISO-8859-1, x42
+var_dump(bin2hex(mb_convert_encoding($string_mb, "ISO-8859-1", "UTF-8")));
+mb_substitute_character("none"); //no substitution
+var_dump(bin2hex(mb_convert_encoding($string_mb, "ISO-8859-1", "UTF-8")));
+mb_substitute_character(280); //not valid in ISO-8859-1
+var_dump(bin2hex(mb_convert_encoding($string_mb, "ISO-8859-1", "UTF-8")));
+
+
+?>
+===DONE===
+--EXPECT--
+*** Testing mb_substitute_character() : variation ***
+string(14) "3f3f3f3f3f3f3f"
+string(14) "42424242424242"
+string(0) ""
+string(0) ""
+===DONE===
diff --git a/ext/mbstring/tests/mb_substr.phpt b/ext/mbstring/tests/mb_substr.phpt
index 579e7ffb5..d9269c377 100644
--- a/ext/mbstring/tests/mb_substr.phpt
+++ b/ext/mbstring/tests/mb_substr.phpt
@@ -12,24 +12,24 @@ ini_set('include_path','.');
include_once('common.inc');
// EUC-JP
-$euc_jp = '0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£';
+$euc_jp = b'0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£';
-print "1: ". mb_substr($euc_jp, 10, 10,'EUC-JP') . "\n";
-print "2: ". mb_substr($euc_jp, 0, 100,'EUC-JP') . "\n";
+print "1: ". bin2hex(mb_substr($euc_jp, 10, 10,'EUC-JP')) . "\n";
+print "2: ". bin2hex(mb_substr($euc_jp, 0, 100,'EUC-JP')) . "\n";
$str = mb_substr($euc_jp, 100, 10,'EUC-JP');
// Note: returns last character
-($str === "") ? print "3 OK\n" : print "NG: $str\n";
+($str === "") ? print "3 OK\n" : print "NG: ".bin2hex($str)."\n";
$str = mb_substr($euc_jp, -100, 10,'EUC-JP');
-($str !== "") ? print "4 OK: $str\n" : print "NG: $str\n";
+($str !== "") ? print "4 OK: ".bin2hex($str)."\n" : print "NG: ".bin2hex($str)."\n";
?>
--EXPECT--
-1: ÆüËܸì¤Ç¤¹¡£EUC-
-2: 0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£
+1: c6fccbdcb8eca4c7a4b9a1a34555432d
+2: 30313233a4b3a4cecab8bbfacef3a4cfc6fccbdcb8eca4c7a4b9a1a34555432d4a50a4f2bbc8a4c3a4c6a4a4a4dea4b9a1a3c6fccbdcb8eca4cfccccc5ddbdada4a4a1a3
3 OK
-4 OK: 0123¤³¤Îʸ»úÎó¤Ï
+4 OK: 30313233a4b3a4cecab8bbfacef3a4cf
diff --git a/ext/mbstring/tests/mb_substr_basic.phpt b/ext/mbstring/tests/mb_substr_basic.phpt
index a43cf15bb..d6d6b75d2 100644
--- a/ext/mbstring/tests/mb_substr_basic.phpt
+++ b/ext/mbstring/tests/mb_substr_basic.phpt
@@ -5,6 +5,8 @@ Test mb_substr() function : basic functionality
extension_loaded('mbstring') or die('skip');
function_exists('mb_substr') or die("skip mb_substr() is not available in this build");
?>
+--INI--
+mbstring.internal_encoding=ISO-8859-1
--FILE--
<?php
/* Prototype : string mb_substr(string $str, int $start [, int $length [, string $encoding]])
@@ -52,4 +54,4 @@ string(12) "peacrOiqng=="
-- Multibyte string 2 --
string(28) "6Kqe44OG44Kt44K544OI44Gn44GZ"
-Done \ No newline at end of file
+Done
diff --git a/ext/mbstring/tests/mb_substr_count_variation1.phpt b/ext/mbstring/tests/mb_substr_count_variation1.phpt
index 8121b4871..cc55135ab 100644
--- a/ext/mbstring/tests/mb_substr_count_variation1.phpt
+++ b/ext/mbstring/tests/mb_substr_count_variation1.phpt
@@ -21,7 +21,6 @@ echo "*** Testing mb_substr_count() : usage variations ***\n";
// Initialise function arguments not being substituted
$needle = 'world';
-$encoding = 'utf-8';
//get an unset variable
$unset_var = 10;
@@ -95,7 +94,7 @@ $inputs = array(
$iterator = 1;
foreach($inputs as $input) {
echo "\n-- Iteration $iterator --\n";
- var_dump( mb_substr_count($input, $needle, $encoding) );
+ var_dump( mb_substr_count($input, $needle) );
$iterator++;
};
diff --git a/ext/mbstring/tests/mb_substr_count_variation2.phpt b/ext/mbstring/tests/mb_substr_count_variation2.phpt
index dac48b55a..87b5eed18 100644
--- a/ext/mbstring/tests/mb_substr_count_variation2.phpt
+++ b/ext/mbstring/tests/mb_substr_count_variation2.phpt
@@ -20,7 +20,6 @@ echo "*** Testing mb_substr_count() : usage variations ***\n";
// Initialise function arguments not being substituted (if any)
$haystack = 'hello, world';
-$encoding = 'utf-8';
//get an unset variable
$unset_var = 10;
@@ -94,7 +93,7 @@ $inputs = array(
$iterator = 1;
foreach($inputs as $input) {
echo "\n-- Iteration $iterator --\n";
- var_dump( mb_substr_count($haystack, $input, $encoding) );
+ var_dump( mb_substr_count($haystack, $input) );
$iterator++;
};
@@ -134,12 +133,12 @@ int(0)
-- Iteration 10 --
-Warning: mb_substr_count(): Empty substring. in %s on line %d
+Warning: mb_substr_count(): Empty substring in %s on line %d
bool(false)
-- Iteration 11 --
-Warning: mb_substr_count(): Empty substring. in %s on line %d
+Warning: mb_substr_count(): Empty substring in %s on line %d
bool(false)
-- Iteration 12 --
@@ -147,7 +146,7 @@ int(0)
-- Iteration 13 --
-Warning: mb_substr_count(): Empty substring. in %s on line %d
+Warning: mb_substr_count(): Empty substring in %s on line %d
bool(false)
-- Iteration 14 --
@@ -155,17 +154,17 @@ int(0)
-- Iteration 15 --
-Warning: mb_substr_count(): Empty substring. in %s on line %d
+Warning: mb_substr_count(): Empty substring in %s on line %d
bool(false)
-- Iteration 16 --
-Warning: mb_substr_count(): Empty substring. in %s on line %d
+Warning: mb_substr_count(): Empty substring in %s on line %d
bool(false)
-- Iteration 17 --
-Warning: mb_substr_count(): Empty substring. in %s on line %d
+Warning: mb_substr_count(): Empty substring in %s on line %d
bool(false)
-- Iteration 18 --
@@ -182,16 +181,16 @@ int(1)
-- Iteration 22 --
-Warning: mb_substr_count(): Empty substring. in %s on line %d
+Warning: mb_substr_count(): Empty substring in %s on line %d
bool(false)
-- Iteration 23 --
-Warning: mb_substr_count(): Empty substring. in %s on line %d
+Warning: mb_substr_count(): Empty substring in %s on line %d
bool(false)
-- Iteration 24 --
Warning: mb_substr_count() expects parameter 2 to be string, resource given in %s on line %d
NULL
-Done \ No newline at end of file
+Done
diff --git a/ext/mbstring/tests/mb_substr_count_variation3.phpt b/ext/mbstring/tests/mb_substr_count_variation3.phpt
index d2e7a6056..65c8769b0 100644
--- a/ext/mbstring/tests/mb_substr_count_variation3.phpt
+++ b/ext/mbstring/tests/mb_substr_count_variation3.phpt
@@ -20,8 +20,8 @@ function_exists('mb_substr_count') or die("skip mb_substr_count() is not availab
echo "*** Testing mb_substr_count() : usage variations ***\n";
// Initialise function arguments not being substituted (if any)
-$haystack = 'hello, world';
-$needle = 'world';
+$haystack = b'hello, world';
+$needle = b'world';
//get an unset variable
$unset_var = 10;
diff --git a/ext/mbstring/tests/mb_substr_count_variation4.phpt b/ext/mbstring/tests/mb_substr_count_variation4.phpt
new file mode 100644
index 000000000..624c95a95
--- /dev/null
+++ b/ext/mbstring/tests/mb_substr_count_variation4.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test mb_substr_count() function : variation - pass a $needle that overlaps in $haystack
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_substr_count') or die("skip mb_substr_count() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : int mb_substr_count(string $haystack, string $needle [, string $encoding])
+ * Description: Count the number of substring occurrences
+ * Source code: ext/mbstring/mbstring.c
+ */
+
+/*
+ * Pass mb_substr_count() a $needle that overlaps in $haystack and see whether
+ * it counts only the first occurrence or all other occurrences regardless whether they
+ * were part of previous match
+ */
+
+echo "*** Testing mb_substr_count() : usage variations ***\n";
+
+
+echo "\n-- ASCII String --\n";
+$string_ascii = b'abcabcabc';
+var_dump(mb_substr_count($string_ascii, b'abcabc')); //needle overlaps in haystack
+
+echo "\n-- Multibyte String --\n";
+$string_mb = base64_decode('5pel5pys6Kqe5pel5pys6Kqe5pel5pys6Kqe');
+$needle_mb = base64_decode('5pel5pys6Kqe5pel5pys6Kqe');
+var_dump(mb_substr_count($string_mb, $needle_mb, 'utf-8'));
+
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing mb_substr_count() : usage variations ***
+
+-- ASCII String --
+int(1)
+
+-- Multibyte String --
+int(1)
+Done \ No newline at end of file
diff --git a/ext/mbstring/tests/mb_substr_variation1.phpt b/ext/mbstring/tests/mb_substr_variation1.phpt
index fd9d0db47..eae73da1d 100644
--- a/ext/mbstring/tests/mb_substr_variation1.phpt
+++ b/ext/mbstring/tests/mb_substr_variation1.phpt
@@ -21,7 +21,6 @@ echo "*** Testing mb_substr() : usage variations ***\n";
// Initialise function arguments not being substituted
$start = 0;
$length = 5;
-$encoding = 'utf-8';
//get an unset variable
$unset_var = 10;
@@ -95,7 +94,7 @@ $inputs = array(
$iterator = 1;
foreach($inputs as $input) {
echo "\n-- Iteration $iterator --\n";
- var_dump( mb_substr($input, $start, $length, $encoding));
+ var_dump( mb_substr($input, $start, $length));
$iterator++;
};
diff --git a/ext/mbstring/tests/mb_substr_variation2.phpt b/ext/mbstring/tests/mb_substr_variation2.phpt
index cb8a37af5..bdfd9102b 100644
--- a/ext/mbstring/tests/mb_substr_variation2.phpt
+++ b/ext/mbstring/tests/mb_substr_variation2.phpt
@@ -20,7 +20,7 @@ function_exists('mb_substr') or die("skip mb_substr() is not available in this b
echo "*** Testing mb_substr() : usage variations ***\n";
// Initialise function arguments not being substituted
-$str = 'string_val';
+$str = b'string_val';
$start = 1;
$length = 5;
@@ -96,7 +96,13 @@ $inputs = array(
$iterator = 1;
foreach($inputs as $input) {
echo "\n-- Iteration $iterator --\n";
- var_dump( mb_substr($str, $start, $length, $input));
+ $res = mb_substr($str, $start, $length, $input);
+ if ($res === false) {
+ var_dump($res);
+ }
+ else {
+ var_dump(bin2hex($res));
+ }
$iterator++;
};
@@ -192,16 +198,16 @@ Warning: mb_substr(): Unknown encoding "" in %s on line %d
bool(false)
-- Iteration 18 --
-string(5) "tring"
+string(10) "7472696e67"
-- Iteration 19 --
-string(5) "tring"
+string(10) "7472696e67"
-- Iteration 20 --
-string(5) "tring"
+string(10) "7472696e67"
-- Iteration 21 --
-string(5) "tring"
+string(10) "7472696e67"
-- Iteration 22 --
diff --git a/ext/mbstring/tests/mb_substr_variation4.phpt b/ext/mbstring/tests/mb_substr_variation4.phpt
index d2c4de3ce..c4a723a0a 100644
--- a/ext/mbstring/tests/mb_substr_variation4.phpt
+++ b/ext/mbstring/tests/mb_substr_variation4.phpt
@@ -20,7 +20,7 @@ echo "*** Testing mb_substr() : usage variations ***\n";
mb_internal_encoding('UTF-8');
-$string_ascii = '+Is an English string'; //21 chars
+$string_ascii = b'+Is an English string'; //21 chars
$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); //21 chars
@@ -35,7 +35,8 @@ for ($i = -60; $i <= 60; $i += 10) {
}
echo "\n**-- Offset is: $i --**\n";
echo "-- ASCII String --\n";
- var_dump($a = mb_substr($string_ascii, $i, 4));
+ $a = mb_substr($string_ascii, $i, 4);
+ var_dump(base64_encode($a));
echo "--Multibyte String --\n";
$b = mb_substr($string_mb, $i, 4, 'UTF-8');
if (strlen($a) == mb_strlen($b, 'UTF-8')) { // should return same length
@@ -48,60 +49,60 @@ for ($i = -60; $i <= 60; $i += 10) {
echo "Done";
?>
---EXPECTF--
+--EXPECT--
*** Testing mb_substr() : usage variations ***
**-- Offset is: -60 --**
-- ASCII String --
-string(4) "+Is "
+string(8) "K0lzIA=="
--Multibyte String --
string(16) "5pel5pys6Kqe44OG"
**-- Offset is: -50 --**
-- ASCII String --
-string(4) "+Is "
+string(8) "K0lzIA=="
--Multibyte String --
string(16) "5pel5pys6Kqe44OG"
**-- Offset is: -40 --**
-- ASCII String --
-string(4) "+Is "
+string(8) "K0lzIA=="
--Multibyte String --
string(16) "5pel5pys6Kqe44OG"
**-- Offset is: -30 --**
-- ASCII String --
-string(4) "+Is "
+string(8) "K0lzIA=="
--Multibyte String --
string(16) "5pel5pys6Kqe44OG"
**-- Offset is: -20 --**
-- ASCII String --
-string(4) "Is a"
+string(8) "SXMgYQ=="
--Multibyte String --
string(16) "5pys6Kqe44OG44Kt"
**-- Offset is: -10 --**
-- ASCII String --
-string(4) "ish "
+string(8) "aXNoIA=="
--Multibyte String --
string(8) "MTIzNA=="
**-- Offset is: 0 --**
-- ASCII String --
-string(4) "+Is "
+string(8) "K0lzIA=="
--Multibyte String --
string(16) "5pel5pys6Kqe44OG"
**-- Offset is: 10 --**
-- ASCII String --
-string(4) "lish"
+string(8) "bGlzaA=="
--Multibyte String --
string(8) "MDEyMw=="
**-- Offset is: 20 --**
-- ASCII String --
-string(1) "g"
+string(4) "Zw=="
--Multibyte String --
string(4) "44CC"
diff --git a/ext/mbstring/tests/mb_substr_variation5.phpt b/ext/mbstring/tests/mb_substr_variation5.phpt
index 02ea6d3aa..11caa9cab 100644
--- a/ext/mbstring/tests/mb_substr_variation5.phpt
+++ b/ext/mbstring/tests/mb_substr_variation5.phpt
@@ -6,7 +6,6 @@ extension_loaded('mbstring') or die('skip');
function_exists('mb_substr') or die("skip mb_substr() is not available in this build");
?>
--FILE--
-
<?php
/* Prototype : string mb_substr(string $str, int $start [, int $length [, string $encoding]])
* Description: Returns part of a string
@@ -21,7 +20,7 @@ echo "*** Testing mb_substr() : usage variations ***\n";
mb_internal_encoding('UTF-8');
-$string_ascii = '+Is an English string'; //21 chars
+$string_ascii = b'+Is an English string'; //21 chars
//Japanese string, 21 characters
$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=');
@@ -37,7 +36,8 @@ for ($i = -60; $i <= 60; $i += 10) {
}
echo "\n**-- Offset is: $i --**\n";
echo "-- ASCII String --\n";
- var_dump($a = mb_substr($string_ascii, 1, $i));
+ $a = mb_substr($string_ascii, 1, $i);
+ var_dump(base64_encode($a));
echo "--Multibyte String --\n";
$b = mb_substr($string_mb, 1, $i, 'UTF-8');
if (strlen($a) == mb_strlen($b, 'UTF-8')) { // should return same length
@@ -50,8 +50,7 @@ for ($i = -60; $i <= 60; $i += 10) {
echo "Done";
?>
-
---EXPECTF--
+--EXPECT--
*** Testing mb_substr() : usage variations ***
**-- Offset is: -60 --**
@@ -86,7 +85,7 @@ string(0) ""
**-- Offset is: -10 --**
-- ASCII String --
-string(10) "Is an Engl"
+string(16) "SXMgYW4gRW5nbA=="
--Multibyte String --
string(40) "5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMA=="
@@ -98,37 +97,37 @@ string(0) ""
**-- Offset is: 10 --**
-- ASCII String --
-string(10) "Is an Engl"
+string(16) "SXMgYW4gRW5nbA=="
--Multibyte String --
string(40) "5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMA=="
**-- Offset is: 20 --**
-- ASCII String --
-string(20) "Is an English string"
+string(28) "SXMgYW4gRW5nbGlzaCBzdHJpbmc="
--Multibyte String --
string(68) "5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII="
**-- Offset is: 30 --**
-- ASCII String --
-string(20) "Is an English string"
+string(28) "SXMgYW4gRW5nbGlzaCBzdHJpbmc="
--Multibyte String --
string(68) "5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII="
**-- Offset is: 40 --**
-- ASCII String --
-string(20) "Is an English string"
+string(28) "SXMgYW4gRW5nbGlzaCBzdHJpbmc="
--Multibyte String --
string(68) "5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII="
**-- Offset is: 50 --**
-- ASCII String --
-string(20) "Is an English string"
+string(28) "SXMgYW4gRW5nbGlzaCBzdHJpbmc="
--Multibyte String --
string(68) "5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII="
**-- Offset is: 60 --**
-- ASCII String --
-string(20) "Is an English string"
+string(28) "SXMgYW4gRW5nbGlzaCBzdHJpbmc="
--Multibyte String --
string(68) "5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII="
Done \ No newline at end of file
diff --git a/ext/mbstring/tests/mb_substr_variation6.phpt b/ext/mbstring/tests/mb_substr_variation6.phpt
new file mode 100644
index 000000000..20ee1ec15
--- /dev/null
+++ b/ext/mbstring/tests/mb_substr_variation6.phpt
@@ -0,0 +1,137 @@
+--TEST--
+Test mb_substr() function : usage variations - pass different integers to $start arg
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_substr') or die("skip mb_substr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_substr(string $str, int $start [, int $length [, string $encoding]])
+ * Description: Returns part of a string
+ * Source code: ext/mbstring/mbstring.c
+ */
+
+/*
+ * Test how mb_substr() behaves when passed a range of integers as $start argument
+ */
+
+echo "*** Testing mb_substr() : usage variations ***\n";
+
+mb_internal_encoding('UTF-8');
+
+$string_ascii = b'+Is an English string'; //21 chars
+
+$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); //21 chars
+
+/*
+ * Loop through integers as multiples of ten for $offset argument
+ * 60 is larger than *BYTE* count for $string_mb
+ */
+for ($i = -60; $i <= 60; $i += 10) {
+ if (@$a || @$b) {
+ $a = null;
+ $b = null;
+ }
+ echo "\n**-- Offset is: $i --**\n";
+ echo "-- ASCII String --\n";
+ $a = mb_substr($string_ascii, $i, 4);
+ if ($a !== false) {
+ var_dump(bin2hex($a));
+ }
+ else {
+ var_dump($a);
+ }
+ echo "--Multibyte String --\n";
+ $b = mb_substr($string_mb, $i, 4, 'UTF-8');
+ if (strlen($a) == mb_strlen($b, 'UTF-8')) { // should return same length
+ var_dump(bin2hex($b));
+ } else {
+ echo "Difference in length of ASCII string and multibyte string\n";
+ }
+
+}
+
+echo "Done";
+?>
+--EXPECT--
+*** Testing mb_substr() : usage variations ***
+
+**-- Offset is: -60 --**
+-- ASCII String --
+string(8) "2b497320"
+--Multibyte String --
+string(24) "e697a5e69cace8aa9ee38386"
+
+**-- Offset is: -50 --**
+-- ASCII String --
+string(8) "2b497320"
+--Multibyte String --
+string(24) "e697a5e69cace8aa9ee38386"
+
+**-- Offset is: -40 --**
+-- ASCII String --
+string(8) "2b497320"
+--Multibyte String --
+string(24) "e697a5e69cace8aa9ee38386"
+
+**-- Offset is: -30 --**
+-- ASCII String --
+string(8) "2b497320"
+--Multibyte String --
+string(24) "e697a5e69cace8aa9ee38386"
+
+**-- Offset is: -20 --**
+-- ASCII String --
+string(8) "49732061"
+--Multibyte String --
+string(24) "e69cace8aa9ee38386e382ad"
+
+**-- Offset is: -10 --**
+-- ASCII String --
+string(8) "69736820"
+--Multibyte String --
+string(8) "31323334"
+
+**-- Offset is: 0 --**
+-- ASCII String --
+string(8) "2b497320"
+--Multibyte String --
+string(24) "e697a5e69cace8aa9ee38386"
+
+**-- Offset is: 10 --**
+-- ASCII String --
+string(8) "6c697368"
+--Multibyte String --
+string(8) "30313233"
+
+**-- Offset is: 20 --**
+-- ASCII String --
+string(2) "67"
+--Multibyte String --
+string(6) "e38082"
+
+**-- Offset is: 30 --**
+-- ASCII String --
+string(0) ""
+--Multibyte String --
+string(0) ""
+
+**-- Offset is: 40 --**
+-- ASCII String --
+string(0) ""
+--Multibyte String --
+string(0) ""
+
+**-- Offset is: 50 --**
+-- ASCII String --
+string(0) ""
+--Multibyte String --
+string(0) ""
+
+**-- Offset is: 60 --**
+-- ASCII String --
+string(0) ""
+--Multibyte String --
+string(0) ""
+Done \ No newline at end of file
diff --git a/ext/mbstring/tests/mb_substr_variation7.phpt b/ext/mbstring/tests/mb_substr_variation7.phpt
new file mode 100644
index 000000000..4d68097df
--- /dev/null
+++ b/ext/mbstring/tests/mb_substr_variation7.phpt
@@ -0,0 +1,138 @@
+--TEST--
+Test mb_substr() function : usage variations - pass different integers to $length arg
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip');
+function_exists('mb_substr') or die("skip mb_substr() is not available in this build");
+?>
+--FILE--
+<?php
+/* Prototype : string mb_substr(string $str, int $start [, int $length [, string $encoding]])
+ * Description: Returns part of a string
+ * Source code: ext/mbstring/mbstring.c
+ */
+
+/*
+ * Test how mb_substr() behaves when passed a range of integers as $length argument
+ */
+
+echo "*** Testing mb_substr() : usage variations ***\n";
+
+mb_internal_encoding('UTF-8');
+
+$string_ascii = b'+Is an English string'; //21 chars
+
+//Japanese string, 21 characters
+$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=');
+
+/*
+ * Loop through integers as multiples of ten for $offset argument
+ * 60 is larger than *BYTE* count for $string_mb
+ */
+for ($i = -60; $i <= 60; $i += 10) {
+ if (@$a || @$b) {
+ $a = null;
+ $b = null;
+ }
+ echo "\n**-- Offset is: $i --**\n";
+ echo "-- ASCII String --\n";
+ $a = mb_substr($string_ascii, 1, $i);
+ if ($a !== false) {
+ var_dump(bin2hex($a));
+ }
+ else {
+ var_dump($a);
+ }
+ echo "--Multibyte String --\n";
+ $b = mb_substr($string_mb, 1, $i, 'UTF-8');
+ if (strlen($a) == mb_strlen($b, 'UTF-8')) { // should return same length
+ var_dump(bin2hex($b));
+ } else {
+ echo "Difference in length of ASCII string and multibyte string\n";
+ }
+
+}
+
+echo "Done";
+?>
+--EXPECT--
+*** Testing mb_substr() : usage variations ***
+
+**-- Offset is: -60 --**
+-- ASCII String --
+string(0) ""
+--Multibyte String --
+string(0) ""
+
+**-- Offset is: -50 --**
+-- ASCII String --
+string(0) ""
+--Multibyte String --
+string(0) ""
+
+**-- Offset is: -40 --**
+-- ASCII String --
+string(0) ""
+--Multibyte String --
+string(0) ""
+
+**-- Offset is: -30 --**
+-- ASCII String --
+string(0) ""
+--Multibyte String --
+string(0) ""
+
+**-- Offset is: -20 --**
+-- ASCII String --
+string(0) ""
+--Multibyte String --
+string(0) ""
+
+**-- Offset is: -10 --**
+-- ASCII String --
+string(20) "497320616e20456e676c"
+--Multibyte String --
+string(56) "e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e3808230"
+
+**-- Offset is: 0 --**
+-- ASCII String --
+string(0) ""
+--Multibyte String --
+string(0) ""
+
+**-- Offset is: 10 --**
+-- ASCII String --
+string(20) "497320616e20456e676c"
+--Multibyte String --
+string(56) "e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e3808230"
+
+**-- Offset is: 20 --**
+-- ASCII String --
+string(40) "497320616e20456e676c69736820737472696e67"
+--Multibyte String --
+string(100) "e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082"
+
+**-- Offset is: 30 --**
+-- ASCII String --
+string(40) "497320616e20456e676c69736820737472696e67"
+--Multibyte String --
+string(100) "e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082"
+
+**-- Offset is: 40 --**
+-- ASCII String --
+string(40) "497320616e20456e676c69736820737472696e67"
+--Multibyte String --
+string(100) "e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082"
+
+**-- Offset is: 50 --**
+-- ASCII String --
+string(40) "497320616e20456e676c69736820737472696e67"
+--Multibyte String --
+string(100) "e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082"
+
+**-- Offset is: 60 --**
+-- ASCII String --
+string(40) "497320616e20456e676c69736820737472696e67"
+--Multibyte String --
+string(100) "e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082"
+Done \ No newline at end of file
diff --git a/ext/mcrypt/mcrypt.c b/ext/mcrypt/mcrypt.c
index a05b0314d..17a997ad9 100644
--- a/ext/mcrypt/mcrypt.c
+++ b/ext/mcrypt/mcrypt.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
| Derick Rethans <derick@derickrethans.nl> |
+----------------------------------------------------------------------+
*/
-/* $Id: mcrypt.c,v 1.91.2.3.2.12 2007/12/31 07:20:08 sebastian Exp $ */
+/* $Id: mcrypt.c,v 1.91.2.3.2.14 2008/12/31 11:17:39 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -1041,15 +1041,17 @@ static void php_mcrypt_do_crypt (char* cipher, zval **key, zval **data, char *mo
/* Check IV */
iv_s = NULL;
iv_size = mcrypt_enc_get_iv_size (td);
- if (argc == 5) {
- if (iv_size != Z_STRLEN_PP(iv)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, MCRYPT_IV_WRONG_SIZE);
- } else {
- iv_s = emalloc(iv_size + 1);
- memcpy(iv_s, Z_STRVAL_PP(iv), iv_size);
- }
- } else if (argc == 4) {
- if (iv_size != 0) {
+
+ /* IV is required */
+ if (mcrypt_enc_mode_has_iv(td) == 1) {
+ if (argc == 5) {
+ if (iv_size != Z_STRLEN_PP(iv)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, MCRYPT_IV_WRONG_SIZE);
+ } else {
+ iv_s = emalloc(iv_size + 1);
+ memcpy(iv_s, Z_STRVAL_PP(iv), iv_size);
+ }
+ } else if (argc == 4) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attempt to use an empty IV, which is NOT recommend");
iv_s = emalloc(iv_size + 1);
memset(iv_s, 0, iv_size + 1);
diff --git a/ext/mcrypt/php_mcrypt.h b/ext/mcrypt/php_mcrypt.h
index 428c90d00..a3ced7165 100644
--- a/ext/mcrypt/php_mcrypt.h
+++ b/ext/mcrypt/php_mcrypt.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
| Derick Rethans <derick@derickrethans.nl> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_mcrypt.h,v 1.26.2.1.2.3 2007/12/31 07:20:08 sebastian Exp $ */
+/* $Id: php_mcrypt.h,v 1.26.2.1.2.4 2008/12/31 11:17:39 sebastian Exp $ */
#ifndef PHP_MCRYPT_H
#define PHP_MCRYPT_H
diff --git a/ext/mcrypt/tests/bug46010.phpt b/ext/mcrypt/tests/bug46010.phpt
new file mode 100644
index 000000000..5aeb3119d
--- /dev/null
+++ b/ext/mcrypt/tests/bug46010.phpt
@@ -0,0 +1,14 @@
+--TEST---
+Bug #46010 (warnings incorrectly generated for iv in ecb mode)
+--FILE--
+<?php
+
+var_dump(bin2hex(mcrypt_encrypt(MCRYPT_TRIPLEDES, "key", "data", MCRYPT_MODE_ECB)));
+var_dump(bin2hex(mcrypt_encrypt(MCRYPT_TRIPLEDES, "key", "data", MCRYPT_MODE_ECB, "a")));
+var_dump(bin2hex(mcrypt_encrypt(MCRYPT_TRIPLEDES, "key", "data", MCRYPT_MODE_ECB, "12345678")));
+
+?>
+--EXPECTF--
+string(16) "372eeb4a524b8d31"
+string(16) "372eeb4a524b8d31"
+string(16) "372eeb4a524b8d31"
diff --git a/ext/mcrypt/tests/mcrypt_cbc.phpt b/ext/mcrypt/tests/mcrypt_cbc.phpt
new file mode 100644
index 000000000..f9160db01
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_cbc.phpt
@@ -0,0 +1,23 @@
+--TEST--
+mcrypt_cbc
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+$key = "FooBar";
+$secret = "PHP Testfest 2008";
+$cipher = MCRYPT_RIJNDAEL_128;
+
+$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher, MCRYPT_MODE_ECB), MCRYPT_RAND);
+$enc_data = mcrypt_cbc($cipher, $key, $secret, MCRYPT_ENCRYPT, $iv);
+
+// we have to trim as AES rounds the blocks and decrypt doesnt detect that
+echo trim(mcrypt_cbc($cipher, $key, $enc_data, MCRYPT_DECRYPT, $iv)) . "\n";
+
+// a warning must be issued if we don't use a IV on a AES cipher, that usually requires an IV
+mcrypt_cbc($cipher, $key, $enc_data, MCRYPT_DECRYPT);
+
+--EXPECTF--
+PHP Testfest 2008
+
+Warning: mcrypt_cbc(): Attempt to use an empty IV, which is NOT recommend in %s on line %d
diff --git a/ext/mcrypt/tests/mcrypt_cbc_3des_decrypt.phpt b/ext/mcrypt/tests/mcrypt_cbc_3des_decrypt.phpt
new file mode 100644
index 000000000..6df307993
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_cbc_3des_decrypt.phpt
@@ -0,0 +1,102 @@
+--TEST--
+Test mcrypt_cbc() function : basic functionality
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)
+ * Description: CBC crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_cbc() : basic functionality ***\n";
+
+
+$cipher = MCRYPT_TRIPLEDES;
+$data = b"This is the secret message which must be encrypted";
+$mode = MCRYPT_DECRYPT;
+
+// tripledes uses keys upto 192 bits (24 bytes)
+$keys = array(
+ b'12345678',
+ b'12345678901234567890',
+ b'123456789012345678901234',
+ b'12345678901234567890123456'
+);
+$data1 = array(
+ 'IleMhoxiOthmHua4tFBHOw==',
+ 'EeF1s6C+w1IiHj1gdDn81g==',
+ 'EEuXpjZPueyYoG0LGQ199Q==',
+ 'EEuXpjZPueyYoG0LGQ199Q=='
+);
+// tripledes is a block cipher of 64 bits (8 bytes)
+$ivs = array(
+ b'1234',
+ b'12345678',
+ b'123456789'
+);
+ // data represented in base64 (ascii)
+$data2 = array(
+ '+G7nGcWIxij3TZjpI9lJdQ==',
+ '3bJiFMeyScxOLQcE6mZtLg==',
+ '+G7nGcWIxij3TZjpI9lJdQ=='
+);
+
+$iv = b'12345678';
+echo "\n--- testing different key lengths\n";
+for ($i = 0; $i < sizeof($keys); $i++) {
+ echo "\nkey length=".strlen($keys[$i])."\n";
+ special_var_dump(mcrypt_cbc($cipher, $keys[$i], base64_decode($data1[$i]), $mode, $iv));
+}
+
+$key = b'1234567890123456';
+echo "\n--- testing different iv lengths\n";
+for ($i = 0; $i < sizeof($ivs); $i++) {
+ echo "\niv length=".strlen($ivs[$i])."\n";
+ special_var_dump(mcrypt_cbc($cipher, $key, base64_decode($data2[$i]), $mode, $ivs[$i]));
+}
+
+function special_var_dump($str) {
+ var_dump(bin2hex($str));
+}
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_cbc() : basic functionality ***
+
+--- testing different key lengths
+
+key length=8
+string(32) "736563726574206d6573736167650000"
+
+key length=20
+string(32) "736563726574206d6573736167650000"
+
+key length=24
+string(32) "736563726574206d6573736167650000"
+
+key length=26
+
+Warning: mcrypt_cbc(): Size of key is too large for this algorithm in %s on line %d
+string(32) "736563726574206d6573736167650000"
+
+--- testing different iv lengths
+
+iv length=4
+
+Warning: mcrypt_cbc(): The IV parameter must be as long as the blocksize in %s on line %d
+string(32) "736563726574206d6573736167650000"
+
+iv length=8
+string(32) "736563726574206d6573736167650000"
+
+iv length=9
+
+Warning: mcrypt_cbc(): The IV parameter must be as long as the blocksize in %s on line %d
+string(32) "736563726574206d6573736167650000"
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_cbc_3des_encrypt.phpt b/ext/mcrypt/tests/mcrypt_cbc_3des_encrypt.phpt
new file mode 100644
index 000000000..35fabd9ac
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_cbc_3des_encrypt.phpt
@@ -0,0 +1,85 @@
+--TEST--
+Test mcrypt_cbc() function : basic functionality
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)
+ * Description: CBC crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_cbc() : basic functionality ***\n";
+
+
+$cipher = MCRYPT_TRIPLEDES;
+$data = b"This is the secret message which must be encrypted";
+$mode = MCRYPT_ENCRYPT;
+
+// tripledes uses keys upto 192 bits (24 bytes)
+$keys = array(
+ b'12345678',
+ b'12345678901234567890',
+ b'123456789012345678901234',
+ b'12345678901234567890123456');
+// tripledes is a block cipher of 64 bits (8 bytes)
+$ivs = array(
+ b'1234',
+ b'12345678',
+ b'123456789');
+
+
+$iv = b'12345678';
+echo "\n--- testing different key lengths\n";
+foreach ($keys as $key) {
+ echo "\nkey length=".strlen($key)."\n";
+ var_dump(bin2hex(mcrypt_cbc($cipher, $key, $data, $mode, $iv)));
+}
+
+$key = b'1234567890123456';
+echo "\n--- testing different iv lengths\n";
+foreach ($ivs as $iv) {
+ echo "\niv length=".strlen($iv)."\n";
+ var_dump(bin2hex(mcrypt_cbc($cipher, $key, $data, $mode, $iv)));
+}
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_cbc() : basic functionality ***
+
+--- testing different key lengths
+
+key length=8
+string(112) "082b437d039d09418e20dc9de1dafa7ed6da5c6335b78950968441da1faf40c1f886e04da8ca177b80b376811e138c1bf51cb48dae2e7939"
+
+key length=20
+string(112) "0627351e0f8a082bf7981ae2c700a43fd3d44b270ac67b00fded1c5796eea935be0fef2a23da0b3f5e243929e62ac957bf0bf463aa90fc4f"
+
+key length=24
+string(112) "b85e21072239d60c63a80e7c9ae493cb741a1cd407e52f451c5f43a0d103f55a7b62617eb2e44213c2d44462d388bc0b8f119384b12c84ac"
+
+key length=26
+
+Warning: mcrypt_cbc(): Size of key is too large for this algorithm in %s on line %d
+string(112) "b85e21072239d60c63a80e7c9ae493cb741a1cd407e52f451c5f43a0d103f55a7b62617eb2e44213c2d44462d388bc0b8f119384b12c84ac"
+
+--- testing different iv lengths
+
+iv length=4
+
+Warning: mcrypt_cbc(): The IV parameter must be as long as the blocksize in %s on line %d
+string(112) "440a6f54601969b127aad3c217ce7583c7f7b29989693130645569301db0020b29a34a3dcd104b2d0e3ba19d6cbd8a33d352b9c27cc34ef1"
+
+iv length=8
+string(112) "bac347506bf092c5557c4363c301745d78f047028e2953e84fd66b30aeb6005812dadbe8baa871b83278341599b0c448ddaaa52b5a378ce5"
+
+iv length=9
+
+Warning: mcrypt_cbc(): The IV parameter must be as long as the blocksize in %s on line %d
+string(112) "440a6f54601969b127aad3c217ce7583c7f7b29989693130645569301db0020b29a34a3dcd104b2d0e3ba19d6cbd8a33d352b9c27cc34ef1"
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_cbc_error.phpt b/ext/mcrypt/tests/mcrypt_cbc_error.phpt
new file mode 100644
index 000000000..8b2f40316
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_cbc_error.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test mcrypt_cbc() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)
+ * Description: CBC crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_cbc() : error conditions ***\n";
+
+
+//Test mcrypt_cbc with one more than the expected number of arguments
+echo "\n-- Testing mcrypt_cbc() function with more than expected no. of arguments --\n";
+$cipher = 10;
+$key = 'string_val';
+$data = 'string_val';
+$mode = 10;
+$iv = 'string_val';
+$extra_arg = 10;
+var_dump( mcrypt_cbc($cipher, $key, $data, $mode, $iv, $extra_arg) );
+
+// Testing mcrypt_cbc with one less than the expected number of arguments
+echo "\n-- Testing mcrypt_cbc() function with less than expected no. of arguments --\n";
+$cipher = 10;
+$key = 'string_val';
+$data = 'string_val';
+var_dump( mcrypt_cbc($cipher, $key, $data) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_cbc() : error conditions ***
+
+-- Testing mcrypt_cbc() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for mcrypt_cbc() in %s on line %d
+NULL
+
+-- Testing mcrypt_cbc() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for mcrypt_cbc() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_cbc_variation1.phpt b/ext/mcrypt/tests/mcrypt_cbc_variation1.phpt
new file mode 100644
index 000000000..f20d1fd6e
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_cbc_variation1.phpt
@@ -0,0 +1,235 @@
+--TEST--
+Test mcrypt_cbc() function : usage variation
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_cbc(string cipher, string key, string data, int mode, string iv)
+ * Description: CBC crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_cbc() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$key = b'string_val';
+$data = b'string_val';
+$mode = MCRYPT_ENCRYPT;
+$iv = b'string_val';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for cipher
+
+foreach($inputs as $valueType =>$value) {
+ echo "\n--$valueType--\n";
+ var_dump( mcrypt_cbc($value, $key, $data, $mode, $iv) );
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_cbc() : usage variation ***
+
+--int 0--
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--int 1--
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--float .5--
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+
+--resource--
+Error: 2 - mcrypt_cbc(): Module initialization failed, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_cbc_variation2.phpt b/ext/mcrypt/tests/mcrypt_cbc_variation2.phpt
new file mode 100644
index 000000000..1a52af85c
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_cbc_variation2.phpt
@@ -0,0 +1,209 @@
+--TEST--
+Test mcrypt_cbc() function : usage variation
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_cbc(string cipher, string key, string data, int mode, string iv)
+ * Description: CBC crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_cbc() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$cipher = MCRYPT_TRIPLEDES;
+$data = b'string_val';
+$mode = MCRYPT_ENCRYPT;
+$iv = b'01234567';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for key
+
+foreach($inputs as $valueType =>$value) {
+ echo "\n--$valueType--\n";
+ var_dump(bin2hex(mcrypt_cbc($cipher, $value, $data, $mode, $iv)));
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_cbc() : usage variation ***
+
+--int 0--
+string(32) "bc27b3a4e33b531d5983fc7df693cd09"
+
+--int 1--
+string(32) "bc27b3a4e33b531d5983fc7df693cd09"
+
+--int 12345--
+string(32) "d109b7973383127002474ae731c4b3a8"
+
+--int -12345--
+string(32) "3e82a931cedb03a38b91a637ff8c9f9e"
+
+--float 10.5--
+string(32) "de71833586c1d7132a289960ebeeca7a"
+
+--float -10.5--
+string(32) "7d0489dd2e99ae910ecc015573f3dd16"
+
+--float 12.3456789000e10--
+string(32) "978055b42c0506a8947e3c3c8d994baf"
+
+--float -12.3456789000e10--
+string(32) "4aa84ba400c2b8ef467d4d98372b4f4e"
+
+--float .5--
+string(32) "e731dc5059b84e0c8774ac490f77d6e6"
+
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+string(32) "b31472da397dea443db438ef0a4e78d7"
+
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+string(32) "b31472da397dea443db438ef0a4e78d7"
+
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+string(32) "b31472da397dea443db438ef0a4e78d7"
+
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+string(32) "b31472da397dea443db438ef0a4e78d7"
+
+--uppercase NULL--
+string(32) "be722a5ffc361d721fbcab1eacc6acf5"
+
+--lowercase null--
+string(32) "be722a5ffc361d721fbcab1eacc6acf5"
+
+--lowercase true--
+string(32) "bc27b3a4e33b531d5983fc7df693cd09"
+
+--lowercase false--
+string(32) "be722a5ffc361d721fbcab1eacc6acf5"
+
+--uppercase TRUE--
+string(32) "bc27b3a4e33b531d5983fc7df693cd09"
+
+--uppercase FALSE--
+string(32) "be722a5ffc361d721fbcab1eacc6acf5"
+
+--empty string DQ--
+string(32) "be722a5ffc361d721fbcab1eacc6acf5"
+
+--empty string SQ--
+string(32) "be722a5ffc361d721fbcab1eacc6acf5"
+
+--instance of classWithToString--
+string(32) "19420fa26f561ee82ed84abbcd2d284b"
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+string(32) "18a3b947d8c233969284c4edd5364a08"
+
+--undefined var--
+string(32) "be722a5ffc361d721fbcab1eacc6acf5"
+
+--unset var--
+string(32) "be722a5ffc361d721fbcab1eacc6acf5"
+
+--resource--
+string(%d) %s
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_cbc_variation3.phpt b/ext/mcrypt/tests/mcrypt_cbc_variation3.phpt
new file mode 100644
index 000000000..7d0969c9f
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_cbc_variation3.phpt
@@ -0,0 +1,209 @@
+--TEST--
+Test mcrypt_cbc() function : usage variation
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_cbc(string cipher, string key, string data, int mode, string iv)
+ * Description: CBC crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_cbc() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$cipher = MCRYPT_TRIPLEDES;
+$key = b'string_val';
+$mode = MCRYPT_ENCRYPT;
+$iv = b'01234567';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for data
+
+foreach($inputs as $valueType =>$value) {
+ echo "\n--$valueType--\n";
+ var_dump(bin2hex(mcrypt_cbc($cipher, $key, $value, $mode, $iv)));
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_cbc() : usage variation ***
+
+--int 0--
+string(16) "ce5fcfe737859795"
+
+--int 1--
+string(16) "84df495f6cd82dd9"
+
+--int 12345--
+string(16) "905ab1ae27ee9991"
+
+--int -12345--
+string(16) "5835174e9c67c3e7"
+
+--float 10.5--
+string(16) "28ff0601ad9e47fa"
+
+--float -10.5--
+string(16) "ce9f2b6e2fc3d9f7"
+
+--float 12.3456789000e10--
+string(32) "24eb882ce9763e4018fba9b7f01b0c3e"
+
+--float -12.3456789000e10--
+string(32) "5eed30e428f32de1d7a7064d0ed4d3eb"
+
+--float .5--
+string(16) "bebf2a13676e1e30"
+
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+string(16) "10dc54a13dfa5318"
+
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+string(16) "10dc54a13dfa5318"
+
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+string(16) "10dc54a13dfa5318"
+
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+string(16) "10dc54a13dfa5318"
+
+--uppercase NULL--
+string(16) "206f6d3617a5ab32"
+
+--lowercase null--
+string(16) "206f6d3617a5ab32"
+
+--lowercase true--
+string(16) "84df495f6cd82dd9"
+
+--lowercase false--
+string(16) "206f6d3617a5ab32"
+
+--uppercase TRUE--
+string(16) "84df495f6cd82dd9"
+
+--uppercase FALSE--
+string(16) "206f6d3617a5ab32"
+
+--empty string DQ--
+string(16) "206f6d3617a5ab32"
+
+--empty string SQ--
+string(16) "206f6d3617a5ab32"
+
+--instance of classWithToString--
+string(32) "7c91cdf8f8c51485034a9ee528eb016b"
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+string(16) "cb03344e2baced10"
+
+--undefined var--
+string(16) "206f6d3617a5ab32"
+
+--unset var--
+string(16) "206f6d3617a5ab32"
+
+--resource--
+string(%d) %s
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_cbc_variation4.phpt b/ext/mcrypt/tests/mcrypt_cbc_variation4.phpt
new file mode 100644
index 000000000..f9a511f39
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_cbc_variation4.phpt
@@ -0,0 +1,205 @@
+--TEST--
+Test mcrypt_cbc() function : usage variation
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_cbc(string cipher, string key, string data, int mode, string iv)
+ * Description: CBC crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_cbc() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$cipher = MCRYPT_TRIPLEDES;
+$key = b'string_val';
+$data = b'string_val';
+$iv = b'01234567';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for mode
+
+foreach($inputs as $valueType =>$value) {
+ echo "\n--$valueType--\n";
+ var_dump(bin2hex(mcrypt_cbc($cipher, $key, $data, $value, $iv)));
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_cbc() : usage variation ***
+
+--float 10.5--
+string(32) "983d5edc5f77fe42e2372a0339dc22b0"
+
+--float -10.5--
+string(32) "983d5edc5f77fe42e2372a0339dc22b0"
+
+--float 12.3456789000e10--
+string(32) "983d5edc5f77fe42e2372a0339dc22b0"
+
+--float -12.3456789000e10--
+string(32) "983d5edc5f77fe42e2372a0339dc22b0"
+
+--float .5--
+string(32) "5f781523f696d596e4b809d72197a0cc"
+
+--empty array--
+string(32) "5f781523f696d596e4b809d72197a0cc"
+
+--int indexed array--
+string(32) "983d5edc5f77fe42e2372a0339dc22b0"
+
+--associative array--
+string(32) "983d5edc5f77fe42e2372a0339dc22b0"
+
+--nested arrays--
+string(32) "983d5edc5f77fe42e2372a0339dc22b0"
+
+--uppercase NULL--
+string(32) "5f781523f696d596e4b809d72197a0cc"
+
+--lowercase null--
+string(32) "5f781523f696d596e4b809d72197a0cc"
+
+--lowercase true--
+string(32) "983d5edc5f77fe42e2372a0339dc22b0"
+
+--lowercase false--
+string(32) "5f781523f696d596e4b809d72197a0cc"
+
+--uppercase TRUE--
+string(32) "983d5edc5f77fe42e2372a0339dc22b0"
+
+--uppercase FALSE--
+string(32) "5f781523f696d596e4b809d72197a0cc"
+
+--empty string DQ--
+string(32) "5f781523f696d596e4b809d72197a0cc"
+
+--empty string SQ--
+string(32) "5f781523f696d596e4b809d72197a0cc"
+
+--string DQ--
+string(32) "5f781523f696d596e4b809d72197a0cc"
+
+--string SQ--
+string(32) "5f781523f696d596e4b809d72197a0cc"
+
+--mixed case string--
+string(32) "5f781523f696d596e4b809d72197a0cc"
+
+--heredoc--
+string(32) "5f781523f696d596e4b809d72197a0cc"
+
+--instance of classWithToString--
+Error: 8 - Object of class classWithToString could not be converted to int, %s(%d)
+string(32) "983d5edc5f77fe42e2372a0339dc22b0"
+
+--instance of classWithoutToString--
+Error: 8 - Object of class classWithoutToString could not be converted to int, %s(%d)
+string(32) "983d5edc5f77fe42e2372a0339dc22b0"
+
+--undefined var--
+string(32) "5f781523f696d596e4b809d72197a0cc"
+
+--unset var--
+string(32) "5f781523f696d596e4b809d72197a0cc"
+
+--resource--
+string(%d) %s
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_cbc_variation5.phpt b/ext/mcrypt/tests/mcrypt_cbc_variation5.phpt
new file mode 100644
index 000000000..2fdc9a920
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_cbc_variation5.phpt
@@ -0,0 +1,235 @@
+--TEST--
+Test mcrypt_cbc() function : usage variation
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_cbc(string cipher, string key, string data, int mode, string iv)
+ * Description: CBC crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_cbc() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$cipher = MCRYPT_TRIPLEDES;
+$key = b'string_val';
+$data = b'string_val';
+$mode = MCRYPT_ENCRYPT;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for iv
+
+foreach($inputs as $valueType =>$value) {
+ echo "\n--$valueType--\n";
+ var_dump( bin2hex(mcrypt_cbc($cipher, $key, $data, $mode, $value)) );
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_cbc() : usage variation ***
+
+--int 0--
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--int 1--
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--int 12345--
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--int -12345--
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--float 10.5--
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--float -10.5--
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--float 12.3456789000e10--
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--float -12.3456789000e10--
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--float .5--
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--uppercase NULL--
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--lowercase null--
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--lowercase true--
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--lowercase false--
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--uppercase TRUE--
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--uppercase FALSE--
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--empty string DQ--
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--empty string SQ--
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--instance of classWithToString--
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--undefined var--
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--unset var--
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--resource--
+Error: 2 - mcrypt_cbc(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_cbf.phpt b/ext/mcrypt/tests/mcrypt_cbf.phpt
new file mode 100644
index 000000000..8ec3cd7d3
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_cbf.phpt
@@ -0,0 +1,23 @@
+--TEST--
+mcrypt_cbf
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+$key = "FooBar";
+$secret = "PHP Testfest 2008";
+$cipher = MCRYPT_RIJNDAEL_128;
+
+$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher, MCRYPT_MODE_ECB), MCRYPT_RAND);
+$enc_data = mcrypt_cfb($cipher, $key, $secret, MCRYPT_ENCRYPT, $iv);
+
+// we have to trim as AES rounds the blocks and decrypt doesnt detect that
+echo trim(mcrypt_cfb($cipher, $key, $enc_data, MCRYPT_DECRYPT, $iv)) . "\n";
+
+// a warning must be issued if we don't use a IV on a AES cipher, that usually requires an IV
+mcrypt_cfb($cipher, $key, $enc_data, MCRYPT_DECRYPT);
+
+--EXPECTF--
+PHP Testfest 2008
+
+Warning: mcrypt_cfb(): Attempt to use an empty IV, which is NOT recommend in %s on line %d \ No newline at end of file
diff --git a/ext/mcrypt/tests/mcrypt_create_iv.phpt b/ext/mcrypt/tests/mcrypt_create_iv.phpt
new file mode 100644
index 000000000..cf6456fef
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_create_iv.phpt
@@ -0,0 +1,17 @@
+--TEST--
+mcrypt_create_iv
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+$iv1 = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB), MCRYPT_RAND);
+$iv2 = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_192, MCRYPT_MODE_ECB), MCRYPT_DEV_URANDOM);
+$iv3 = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_DEV_RANDOM);
+
+echo strlen($iv1) . "\n";
+echo strlen($iv2) . "\n";
+echo strlen($iv3) . "\n";
+--EXPECT--
+16
+24
+32
diff --git a/ext/mcrypt/tests/mcrypt_decrypt.phpt b/ext/mcrypt/tests/mcrypt_decrypt.phpt
new file mode 100644
index 000000000..b4e628401
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_decrypt.phpt
@@ -0,0 +1,28 @@
+--TEST--
+mcrypt_decrypt
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+$key = "FooBar";
+$secret = "PHP Testfest 2008";
+$mode = MCRYPT_MODE_CBC;
+$cipher = MCRYPT_RIJNDAEL_128;
+
+$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher, $mode), MCRYPT_RAND);
+$enc_data = mcrypt_encrypt($cipher, $key, $secret, $mode, $iv);
+
+// we have to trim as AES rounds the blocks and decrypt doesnt detect that
+echo trim(mcrypt_decrypt($cipher, $key, $enc_data, $mode, $iv)) . "\n";
+
+// a warning must be issued if we don't use a IV on a AES cipher, that usually requires an IV
+mcrypt_decrypt($cipher, $key, $enc_data, MCRYPT_MODE_CBC);
+
+var_dump(strpos(mcrypt_decrypt(MCRYPT_BLOWFISH, "FooBar", $enc_data, MCRYPT_MODE_CBC, $iv), "Testfest") !== false);
+--EXPECTF--
+PHP Testfest 2008
+
+Warning: mcrypt_decrypt(): Attempt to use an empty IV, which is NOT recommend in %s on line %d
+
+Warning: mcrypt_decrypt(): The IV parameter must be as long as the blocksize in %s on line %d
+bool(false) \ No newline at end of file
diff --git a/ext/mcrypt/tests/mcrypt_decrypt_3des_cbc.phpt b/ext/mcrypt/tests/mcrypt_decrypt_3des_cbc.phpt
new file mode 100644
index 000000000..30d0c2baf
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_decrypt_3des_cbc.phpt
@@ -0,0 +1,101 @@
+--TEST--
+Test mcrypt_decrypt() function : basic functionality
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)
+ * Description: OFB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_decrypt() : basic functionality ***\n";
+
+
+// Initialise all required variables
+$cipher = MCRYPT_3DES;
+$mode = MCRYPT_MODE_CBC;
+
+// tripledes uses keys upto 192 bits (24 bytes)
+$keys = array(
+ b'12345678',
+ b'12345678901234567890',
+ b'123456789012345678901234',
+ b'12345678901234567890123456'
+);
+$data1 = array(
+ 'IleMhoxiOthmHua4tFBHOw==',
+ 'EeF1s6C+w1IiHj1gdDn81g==',
+ 'EEuXpjZPueyYoG0LGQ199Q==',
+ 'EEuXpjZPueyYoG0LGQ199Q=='
+);
+// tripledes is a block cipher of 64 bits (8 bytes)
+$ivs = array(
+ b'1234',
+ b'12345678',
+ b'123456789'
+);
+$data2 = array(
+ '+G7nGcWIxij3TZjpI9lJdQ==',
+ '3bJiFMeyScxOLQcE6mZtLg==',
+ '+G7nGcWIxij3TZjpI9lJdQ=='
+);
+
+$iv = b'12345678';
+echo "\n--- testing different key lengths\n";
+for ($i = 0; $i < sizeof($keys); $i++) {
+ echo "\nkey length=".strlen($keys[$i])."\n";
+ special_var_dump(mcrypt_decrypt($cipher, $keys[$i], base64_decode($data1[$i]), $mode, $iv));
+}
+
+$key = b'1234567890123456';
+echo "\n--- testing different iv lengths\n";
+for ($i = 0; $i < sizeof($ivs); $i++) {
+ echo "\niv length=".strlen($ivs[$i])."\n";
+ special_var_dump(mcrypt_decrypt($cipher, $key, base64_decode($data2[$i]), $mode, $ivs[$i]));
+}
+
+function special_var_dump($str) {
+ var_dump(bin2hex($str));
+}
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_decrypt() : basic functionality ***
+
+--- testing different key lengths
+
+key length=8
+string(32) "736563726574206d6573736167650000"
+
+key length=20
+string(32) "736563726574206d6573736167650000"
+
+key length=24
+string(32) "736563726574206d6573736167650000"
+
+key length=26
+
+Warning: mcrypt_decrypt(): Size of key is too large for this algorithm in %s on line %d
+string(32) "736563726574206d6573736167650000"
+
+--- testing different iv lengths
+
+iv length=4
+
+Warning: mcrypt_decrypt(): The IV parameter must be as long as the blocksize in %s on line %d
+string(32) "736563726574206d6573736167650000"
+
+iv length=8
+string(32) "736563726574206d6573736167650000"
+
+iv length=9
+
+Warning: mcrypt_decrypt(): The IV parameter must be as long as the blocksize in %s on line %d
+string(32) "736563726574206d6573736167650000"
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_decrypt_3des_ecb.phpt b/ext/mcrypt/tests/mcrypt_decrypt_3des_ecb.phpt
new file mode 100644
index 000000000..5f841c1b0
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_decrypt_3des_ecb.phpt
@@ -0,0 +1,96 @@
+--TEST--
+Test mcrypt_decrypt() function : basic functionality
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)
+ * Description: OFB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_decrypt() : basic functionality ***\n";
+
+
+// Initialise all required variables
+$cipher = MCRYPT_3DES;
+$mode = MCRYPT_MODE_ECB;
+
+// tripledes uses keys upto 192 bits (24 bytes)
+$keys = array(
+ b'12345678',
+ b'12345678901234567890',
+ b'123456789012345678901234',
+ b'12345678901234567890123456'
+);
+$data1 = array(
+ '0D4ArM3ejyhic9rnCcIW9A==',
+ 'q0wt1YeOjLpnKm5WsrzKEw==',
+ 'zwKEFeqHkhlj+7HZTRA/yA==',
+ 'zwKEFeqHkhlj+7HZTRA/yA=='
+);
+// tripledes is a block cipher of 64 bits (8 bytes)
+$ivs = array(
+ b'1234',
+ b'12345678',
+ b'123456789'
+);
+$data2 = array(
+ '+G7nGcWIxigQcJD+2P14HA==',
+ '+G7nGcWIxigQcJD+2P14HA==',
+ '+G7nGcWIxigQcJD+2P14HA=='
+);
+
+echo "\n--- testing different key lengths\n";
+for ($i = 0; $i < sizeof($keys); $i++) {
+ echo "\nkey length=".strlen($keys[$i])."\n";
+ special_var_dump(mcrypt_decrypt($cipher, $keys[$i], base64_decode($data1[$i]), $mode));
+}
+
+$key = b'1234567890123456';
+echo "\n--- testing different iv lengths\n";
+for ($i = 0; $i < sizeof($ivs); $i++) {
+ echo "\niv length=".strlen($ivs[$i])."\n";
+ special_var_dump(mcrypt_decrypt($cipher, $key, base64_decode($data2[$i]), $mode, $ivs[$i]));
+}
+
+function special_var_dump($str) {
+ var_dump(bin2hex($str));
+}
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_decrypt() : basic functionality ***
+
+--- testing different key lengths
+
+key length=8
+string(32) "736563726574206d6573736167650000"
+
+key length=20
+string(32) "736563726574206d6573736167650000"
+
+key length=24
+string(32) "736563726574206d6573736167650000"
+
+key length=26
+
+Warning: mcrypt_decrypt(): Size of key is too large for this algorithm in %s on line %d
+string(32) "736563726574206d6573736167650000"
+
+--- testing different iv lengths
+
+iv length=4
+string(32) "736563726574206d6573736167650000"
+
+iv length=8
+string(32) "736563726574206d6573736167650000"
+
+iv length=9
+string(32) "736563726574206d6573736167650000"
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_decrypt_error.phpt b/ext/mcrypt/tests/mcrypt_decrypt_error.phpt
new file mode 100644
index 000000000..c231c2871
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_decrypt_error.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test mcrypt_decrypt() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)
+ * Description: OFB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_decrypt() : error conditions ***\n";
+
+
+//Test mcrypt_decrypt with one more than the expected number of arguments
+echo "\n-- Testing mcrypt_decrypt() function with more than expected no. of arguments --\n";
+$cipher = 'string_val';
+$key = 'string_val';
+$data = 'string_val';
+$mode = 'string_val';
+$iv = 'string_val';
+$extra_arg = 10;
+var_dump( mcrypt_decrypt($cipher, $key, $data, $mode, $iv, $extra_arg) );
+
+// Testing mcrypt_decrypt with one less than the expected number of arguments
+echo "\n-- Testing mcrypt_decrypt() function with less than expected no. of arguments --\n";
+$cipher = 'string_val';
+$key = 'string_val';
+$data = 'string_val';
+var_dump( mcrypt_decrypt($cipher, $key, $data) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_decrypt() : error conditions ***
+
+-- Testing mcrypt_decrypt() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for mcrypt_decrypt() in %s on line %d
+NULL
+
+-- Testing mcrypt_decrypt() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for mcrypt_decrypt() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_decrypt_variation1.phpt b/ext/mcrypt/tests/mcrypt_decrypt_variation1.phpt
new file mode 100644
index 000000000..8f9b2593d
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_decrypt_variation1.phpt
@@ -0,0 +1,235 @@
+--TEST--
+Test mcrypt_decrypt() function : usage variation
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)
+ * Description: OFB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_decrypt() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$key = b'string_val';
+$data = b'string_val';
+$mode = MCRYPT_MODE_ECB;
+$iv = b'string_val';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for cipher
+
+foreach($inputs as $valueType =>$value) {
+ echo "\n--$valueType--\n";
+ var_dump( mcrypt_decrypt($value, $key, $data, $mode, $iv) );
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_decrypt() : usage variation ***
+
+--int 0--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--int 1--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--float .5--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--resource--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_decrypt_variation2.phpt b/ext/mcrypt/tests/mcrypt_decrypt_variation2.phpt
new file mode 100644
index 000000000..90a928929
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_decrypt_variation2.phpt
@@ -0,0 +1,209 @@
+--TEST--
+Test mcrypt_decrypt() function : usage variation
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)
+ * Description: OFB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_decrypt() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$cipher = MCRYPT_TRIPLEDES;
+$data = b'string_val';
+$mode = MCRYPT_MODE_ECB;
+$iv = b'01234567';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for key
+
+foreach($inputs as $valueType =>$value) {
+ echo "\n--$valueType--\n";
+ var_dump( bin2hex(mcrypt_decrypt($cipher, $value, $data, $mode, $iv)));
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_decrypt() : usage variation ***
+
+--int 0--
+string(32) "43a1ae011df36064589d06bc922ecd97"
+
+--int 1--
+string(32) "43a1ae011df36064589d06bc922ecd97"
+
+--int 12345--
+string(32) "e5885552e16c44d4eb6164f477b40200"
+
+--int -12345--
+string(32) "adf7873831a9035cda9f9dc3b7dc626b"
+
+--float 10.5--
+string(32) "08b0b9fac9c227437b7b5d0147e6153b"
+
+--float -10.5--
+string(32) "f470cc74d83471b42a3e28d4ec57799a"
+
+--float 12.3456789000e10--
+string(32) "36c618c00523fadc372b871eaa9c7b16"
+
+--float -12.3456789000e10--
+string(32) "a554a5bdb7a5ceb6ae6f20566ef02e49"
+
+--float .5--
+string(32) "bcb840ff76d3788a7911ed36f088a910"
+
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+string(32) "da1c25d8072b525eddc64d780289d3d2"
+
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+string(32) "da1c25d8072b525eddc64d780289d3d2"
+
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+string(32) "da1c25d8072b525eddc64d780289d3d2"
+
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+string(32) "da1c25d8072b525eddc64d780289d3d2"
+
+--uppercase NULL--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--lowercase null--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--lowercase true--
+string(32) "43a1ae011df36064589d06bc922ecd97"
+
+--lowercase false--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--uppercase TRUE--
+string(32) "43a1ae011df36064589d06bc922ecd97"
+
+--uppercase FALSE--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--empty string DQ--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--empty string SQ--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--instance of classWithToString--
+string(32) "478f9d080563835cc3136610802f1433"
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+string(32) "54d78c815c202f7368ff00b4bd604b48"
+
+--undefined var--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--unset var--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--resource--
+string(%s) %s
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_decrypt_variation3.phpt b/ext/mcrypt/tests/mcrypt_decrypt_variation3.phpt
new file mode 100644
index 000000000..27c325b01
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_decrypt_variation3.phpt
@@ -0,0 +1,209 @@
+--TEST--
+Test mcrypt_decrypt() function : usage variation
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)
+ * Description: OFB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_decrypt() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$cipher = MCRYPT_TRIPLEDES;
+$key = b'string_val';
+$mode = MCRYPT_MODE_ECB;
+$iv = b'01234567';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for data
+
+foreach($inputs as $valueType =>$value) {
+ echo "\n--$valueType--\n";
+ var_dump(bin2hex(mcrypt_decrypt($cipher, $key, $value, $mode, $iv)));
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_decrypt() : usage variation ***
+
+--int 0--
+string(16) "52833a00168e547f"
+
+--int 1--
+string(16) "82011a0a93098a13"
+
+--int 12345--
+string(16) "e8b71c21b6acc162"
+
+--int -12345--
+string(16) "db3c458e975563a8"
+
+--float 10.5--
+string(16) "6ee8764562f25913"
+
+--float -10.5--
+string(16) "d63b39fd5f65678e"
+
+--float 12.3456789000e10--
+string(32) "7712cc4828221be40672239d9c32e742"
+
+--float -12.3456789000e10--
+string(32) "caa892cb5d28b53c2b75b1e0799427c3"
+
+--float .5--
+string(16) "99880c86884385d9"
+
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+string(16) "262d0f1667fc7d74"
+
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+string(16) "262d0f1667fc7d74"
+
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+string(16) "262d0f1667fc7d74"
+
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+string(16) "262d0f1667fc7d74"
+
+--uppercase NULL--
+string(16) "d27689f6fd9700f4"
+
+--lowercase null--
+string(16) "d27689f6fd9700f4"
+
+--lowercase true--
+string(16) "82011a0a93098a13"
+
+--lowercase false--
+string(16) "d27689f6fd9700f4"
+
+--uppercase TRUE--
+string(16) "82011a0a93098a13"
+
+--uppercase FALSE--
+string(16) "d27689f6fd9700f4"
+
+--empty string DQ--
+string(16) "d27689f6fd9700f4"
+
+--empty string SQ--
+string(16) "d27689f6fd9700f4"
+
+--instance of classWithToString--
+string(32) "46677e368bc07ef375bd580e0c4b2594"
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+string(16) "c4595fa6833ba9e3"
+
+--undefined var--
+string(16) "d27689f6fd9700f4"
+
+--unset var--
+string(16) "d27689f6fd9700f4"
+
+--resource--
+string(%d) %s
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_decrypt_variation4.phpt b/ext/mcrypt/tests/mcrypt_decrypt_variation4.phpt
new file mode 100644
index 000000000..12e44312d
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_decrypt_variation4.phpt
@@ -0,0 +1,235 @@
+--TEST--
+Test mcrypt_decrypt() function : usage variation
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)
+ * Description: OFB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_decrypt() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$cipher = MCRYPT_TRIPLEDES;
+$key = b'string_val';
+$data = b'string_val';
+$iv = b'01234567';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for mode
+
+foreach($inputs as $valueType =>$value) {
+ echo "\n--$valueType--\n";
+ var_dump( mcrypt_decrypt($cipher, $key, $data, $value, $iv) );
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_decrypt() : usage variation ***
+
+--int 0--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--int 1--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--float .5--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--resource--
+Error: 2 - mcrypt_decrypt(): Module initialization failed, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_decrypt_variation5.phpt b/ext/mcrypt/tests/mcrypt_decrypt_variation5.phpt
new file mode 100644
index 000000000..30949f1a6
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_decrypt_variation5.phpt
@@ -0,0 +1,235 @@
+--TEST--
+Test mcrypt_decrypt() function : usage variation
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)
+ * Description: OFB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_decrypt() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$cipher = MCRYPT_TRIPLEDES;
+$key = b'string_val';
+$data = b'string_val';
+$mode = MCRYPT_MODE_CBC;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for iv
+
+foreach($inputs as $valueType =>$value) {
+ echo "\n--$valueType--\n";
+ var_dump(bin2hex(mcrypt_decrypt($cipher, $key, $data, $mode, $value)));
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_decrypt() : usage variation ***
+
+--int 0--
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--int 1--
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--int 12345--
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--int -12345--
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--float 10.5--
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--float -10.5--
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--float 12.3456789000e10--
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--float -12.3456789000e10--
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--float .5--
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--uppercase NULL--
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--lowercase null--
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--lowercase true--
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--lowercase false--
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--uppercase TRUE--
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--uppercase FALSE--
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--empty string DQ--
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--empty string SQ--
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--instance of classWithToString--
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--undefined var--
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--unset var--
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "a80c6cef6b42c875e2372a0339dc22b0"
+
+--resource--
+Error: 2 - mcrypt_decrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(%d) %s
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_ecb.phpt b/ext/mcrypt/tests/mcrypt_ecb.phpt
new file mode 100644
index 000000000..3edc40715
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_ecb.phpt
@@ -0,0 +1,23 @@
+--TEST--
+mcrypt_ecb
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+$key = "FooBar";
+$secret = "PHP Testfest 2008";
+$cipher = MCRYPT_RIJNDAEL_128;
+
+$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher, MCRYPT_MODE_ECB), MCRYPT_RAND);
+$enc_data = mcrypt_ecb($cipher, $key, $secret, MCRYPT_ENCRYPT, $iv);
+
+// we have to trim as AES rounds the blocks and decrypt doesnt detect that
+echo trim(mcrypt_ecb($cipher, $key, $enc_data, MCRYPT_DECRYPT, $iv)) . "\n";
+
+// a warning not must be issued if we don't use a IV on a AES cipher, that not requires an IV
+mcrypt_ecb($cipher, $key, $enc_data, MCRYPT_DECRYPT);
+
+--EXPECTF--
+PHP Testfest 2008
+
+
diff --git a/ext/mcrypt/tests/mcrypt_ecb_3des_decrypt.phpt b/ext/mcrypt/tests/mcrypt_ecb_3des_decrypt.phpt
new file mode 100644
index 000000000..7a5cc27f4
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_ecb_3des_decrypt.phpt
@@ -0,0 +1,97 @@
+--TEST--
+Test mcrypt_cbc() function : basic functionality
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)
+ * Description: ECB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_ecb() : basic functionality ***\n";
+
+
+$cipher = MCRYPT_TRIPLEDES;
+$data = b"This is the secret message which must be encrypted";
+$mode = MCRYPT_DECRYPT;
+
+// tripledes uses keys upto 192 bits (24 bytes)
+$keys = array(
+ b'12345678',
+ b'12345678901234567890',
+ b'123456789012345678901234',
+ b'12345678901234567890123456'
+);
+$data1 = array(
+ '0D4ArM3ejyhic9rnCcIW9A==',
+ 'q0wt1YeOjLpnKm5WsrzKEw==',
+ 'zwKEFeqHkhlj+7HZTRA/yA==',
+ 'zwKEFeqHkhlj+7HZTRA/yA=='
+);
+// tripledes is a block cipher of 64 bits (8 bytes)
+$ivs = array(
+ b'1234',
+ b'12345678',
+ b'123456789'
+);
+$data2 = array(
+ '+G7nGcWIxigQcJD+2P14HA==',
+ '+G7nGcWIxigQcJD+2P14HA==',
+ '+G7nGcWIxigQcJD+2P14HA=='
+);
+
+$iv = b'12345678';
+echo "\n--- testing different key lengths\n";
+for ($i = 0; $i < sizeof($keys); $i++) {
+ echo "\nkey length=".strlen($keys[$i])."\n";
+ special_var_dump(mcrypt_ecb($cipher, $keys[$i], base64_decode($data1[$i]), $mode, $iv));
+}
+
+$key = b'1234567890123456';
+echo "\n--- testing different iv lengths\n";
+for ($i = 0; $i < sizeof($ivs); $i++) {
+ echo "\niv length=".strlen($ivs[$i])."\n";
+ special_var_dump(mcrypt_ecb($cipher, $key, base64_decode($data2[$i]), $mode, $ivs[$i]));
+}
+
+function special_var_dump($str) {
+ var_dump(bin2hex($str));
+}
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_ecb() : basic functionality ***
+
+--- testing different key lengths
+
+key length=8
+string(32) "736563726574206d6573736167650000"
+
+key length=20
+string(32) "736563726574206d6573736167650000"
+
+key length=24
+string(32) "736563726574206d6573736167650000"
+
+key length=26
+
+Warning: mcrypt_ecb(): Size of key is too large for this algorithm in %s on line %d
+string(32) "736563726574206d6573736167650000"
+
+--- testing different iv lengths
+
+iv length=4
+string(32) "736563726574206d6573736167650000"
+
+iv length=8
+string(32) "736563726574206d6573736167650000"
+
+iv length=9
+string(32) "736563726574206d6573736167650000"
+===DONE=== \ No newline at end of file
diff --git a/ext/mcrypt/tests/mcrypt_ecb_3des_encrypt.phpt b/ext/mcrypt/tests/mcrypt_ecb_3des_encrypt.phpt
new file mode 100644
index 000000000..da26b4ba8
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_ecb_3des_encrypt.phpt
@@ -0,0 +1,82 @@
+--TEST--
+Test mcrypt_ecb() function : basic functionality
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)
+ * Description: ECB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_ecb() : basic functionality ***\n";
+
+
+$cipher = MCRYPT_TRIPLEDES;
+$data = b"This is the secret message which must be encrypted";
+$mode = MCRYPT_ENCRYPT;
+
+// tripledes uses keys upto 192 bits (24 bytes)
+$keys = array(
+ b'12345678',
+ b'12345678901234567890',
+ b'123456789012345678901234',
+ b'12345678901234567890123456'
+);
+// tripledes is a block cipher of 64 bits (8 bytes)
+$ivs = array(
+ b'1234',
+ b'12345678',
+ b'123456789'
+);
+
+$iv = b'12345678';
+echo "\n--- testing different key lengths\n";
+foreach ($keys as $key) {
+ echo "\nkey length=".strlen($key)."\n";
+ var_dump(bin2hex(mcrypt_ecb($cipher, $key, $data, $mode, $iv)));
+}
+
+$key = b'1234567890123456';
+echo "\n--- testing different iv lengths\n";
+foreach ($ivs as $iv) {
+ echo "\niv length=".strlen($iv)."\n";
+ var_dump(bin2hex(mcrypt_ecb($cipher, $key, $data, $mode, $iv)));
+}
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_ecb() : basic functionality ***
+
+--- testing different key lengths
+
+key length=8
+string(112) "05c9c4cafb9937d950bdae60ee3abcb8d9f3e1f1fac8acaaa5b11d70b7ca02f3b76d447ab3dd85a4b5df5dedb4b4654595ccdf6da97fa93f"
+
+key length=20
+string(112) "0fc7045c4fb4dbcf44baf9ed15ab40331a42ff0632318a16b12ed5873f02e7945e4f63f408d6849534cbb7419c22c8854aaa85e0e05a28e6"
+
+key length=24
+string(112) "923eedcb20e18e3efa466a6ca1b842b34e6ac46aa3690ef739d0d68a26eb64e1a6ad42e7d18312ae8a57ab927e1dc892e5ff56c061864f27"
+
+key length=26
+
+Warning: mcrypt_ecb(): Size of key is too large for this algorithm in %s on line %d
+string(112) "923eedcb20e18e3efa466a6ca1b842b34e6ac46aa3690ef739d0d68a26eb64e1a6ad42e7d18312ae8a57ab927e1dc892e5ff56c061864f27"
+
+--- testing different iv lengths
+
+iv length=4
+string(112) "440a6f54601969b15e81df09cd381ef585fede5f3620587fd1a949c520aed9f6d10ebbabf2cea3e1f04c9251c2878c0ca37d51c80d490165"
+
+iv length=8
+string(112) "440a6f54601969b15e81df09cd381ef585fede5f3620587fd1a949c520aed9f6d10ebbabf2cea3e1f04c9251c2878c0ca37d51c80d490165"
+
+iv length=9
+string(112) "440a6f54601969b15e81df09cd381ef585fede5f3620587fd1a949c520aed9f6d10ebbabf2cea3e1f04c9251c2878c0ca37d51c80d490165"
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_ecb_error.phpt b/ext/mcrypt/tests/mcrypt_ecb_error.phpt
new file mode 100644
index 000000000..7e9fe57d2
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_ecb_error.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test mcrypt_ecb() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)
+ * Description: ECB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_ecb() : error conditions ***\n";
+
+
+//Test mcrypt_ecb with one more than the expected number of arguments
+echo "\n-- Testing mcrypt_ecb() function with more than expected no. of arguments --\n";
+$cipher = 10;
+$key = 'string_val';
+$data = 'string_val';
+$mode = 10;
+$iv = 'string_val';
+$extra_arg = 10;
+var_dump( mcrypt_ecb($cipher, $key, $data, $mode, $iv, $extra_arg) );
+
+// Testing mcrypt_ecb with one less than the expected number of arguments
+echo "\n-- Testing mcrypt_ecb() function with less than expected no. of arguments --\n";
+$cipher = 10;
+$key = 'string_val';
+$data = 'string_val';
+var_dump( mcrypt_ecb($cipher, $key, $data) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_ecb() : error conditions ***
+
+-- Testing mcrypt_ecb() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for mcrypt_ecb() in %s on line %d
+NULL
+
+-- Testing mcrypt_ecb() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for mcrypt_ecb() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_ecb_variation1.phpt b/ext/mcrypt/tests/mcrypt_ecb_variation1.phpt
new file mode 100644
index 000000000..ed4480ca7
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_ecb_variation1.phpt
@@ -0,0 +1,235 @@
+--TEST--
+Test mcrypt_ecb() function : usage variation
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_ecb(string cipher, string key, string data, int mode, string iv)
+ * Description: ECB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_ecb() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$key = b'string_val';
+$data = b'string_val';
+$mode = MCRYPT_ENCRYPT;
+$iv = b'string_val';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for cipher
+
+foreach($inputs as $valueType =>$value) {
+ echo "\n--$valueType--\n";
+ var_dump( mcrypt_ecb($value, $key, $data, $mode, $iv) );
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_ecb() : usage variation ***
+
+--int 0--
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--int 1--
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--float .5--
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+
+--resource--
+Error: 2 - mcrypt_ecb(): Module initialization failed, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_ecb_variation2.phpt b/ext/mcrypt/tests/mcrypt_ecb_variation2.phpt
new file mode 100644
index 000000000..efe89d817
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_ecb_variation2.phpt
@@ -0,0 +1,209 @@
+--TEST--
+Test mcrypt_ecb() function : usage variation
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_ecb(string cipher, string key, string data, int mode, string iv)
+ * Description: ECB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_ecb() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$cipher = MCRYPT_TRIPLEDES;
+$data = b'string_val';
+$mode = MCRYPT_ENCRYPT;
+$iv = b'01234567';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for key
+
+foreach($inputs as $valueType =>$value) {
+ echo "\n--$valueType--\n";
+ var_dump(bin2hex(mcrypt_ecb($cipher, $value, $data, $mode, $iv)));
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_ecb() : usage variation ***
+
+--int 0--
+string(32) "e469e6b066f9600e1eefd8f53365f96c"
+
+--int 1--
+string(32) "e469e6b066f9600e1eefd8f53365f96c"
+
+--int 12345--
+string(32) "d74e5f51d1199bcfa61f80168e913007"
+
+--int -12345--
+string(32) "17fe485ed735abb34c1dd4455af7b79c"
+
+--float 10.5--
+string(32) "cd735509aa4013a130e011686d66ae01"
+
+--float -10.5--
+string(32) "a57d99d6d5813039abf50fc50d631e47"
+
+--float 12.3456789000e10--
+string(32) "f17ede0bfdaa4408f545f7f4c8b040d2"
+
+--float -12.3456789000e10--
+string(32) "326f64e3b9bd5a6beb0a9b52a09a5a48"
+
+--float .5--
+string(32) "2aedf7661cd4d8c7593f44c58718e2b8"
+
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+string(32) "3e67235c6c77c7795b69f7bf31ad63ec"
+
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+string(32) "3e67235c6c77c7795b69f7bf31ad63ec"
+
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+string(32) "3e67235c6c77c7795b69f7bf31ad63ec"
+
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+string(32) "3e67235c6c77c7795b69f7bf31ad63ec"
+
+--uppercase NULL--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--lowercase null--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--lowercase true--
+string(32) "e469e6b066f9600e1eefd8f53365f96c"
+
+--lowercase false--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--uppercase TRUE--
+string(32) "e469e6b066f9600e1eefd8f53365f96c"
+
+--uppercase FALSE--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--empty string DQ--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--empty string SQ--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--instance of classWithToString--
+string(32) "1fd3514d8ced44d04d9dc7511fce33ef"
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+string(32) "fb3ff12423b2c3ba38905e448d35f4c0"
+
+--undefined var--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--unset var--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--resource--
+string(%d) %s
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_ecb_variation3.phpt b/ext/mcrypt/tests/mcrypt_ecb_variation3.phpt
new file mode 100644
index 000000000..416a6b20d
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_ecb_variation3.phpt
@@ -0,0 +1,209 @@
+--TEST--
+Test mcrypt_ecb() function : usage variation
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_ecb(string cipher, string key, string data, int mode, string iv)
+ * Description: ECB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_ecb() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$cipher = MCRYPT_TRIPLEDES;
+$key = b'string_val';
+$mode = MCRYPT_ENCRYPT;
+$iv = b'01234567';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for data
+
+foreach($inputs as $valueType =>$value) {
+ echo "\n--$valueType--\n";
+ var_dump(bin2hex(mcrypt_ecb($cipher, $key, $value, $mode, $iv)));
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_ecb() : usage variation ***
+
+--int 0--
+string(16) "51dc9cd9179b718b"
+
+--int 1--
+string(16) "619c335f8c4f9cbf"
+
+--int 12345--
+string(16) "b1258d67ab73de00"
+
+--int -12345--
+string(16) "8eecf134443bd6b9"
+
+--float 10.5--
+string(16) "34b5750a793baff5"
+
+--float -10.5--
+string(16) "7a605f2aacc8a11d"
+
+--float 12.3456789000e10--
+string(32) "74a0d7026ae586f476d4b17808851e86"
+
+--float -12.3456789000e10--
+string(32) "bfb155997017986c01090afebd62c7ca"
+
+--float .5--
+string(16) "cc60ac201164b6c7"
+
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+string(16) "c5f0f5425f13ef7c"
+
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+string(16) "c5f0f5425f13ef7c"
+
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+string(16) "c5f0f5425f13ef7c"
+
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+string(16) "c5f0f5425f13ef7c"
+
+--uppercase NULL--
+string(16) "6ece228c41457539"
+
+--lowercase null--
+string(16) "6ece228c41457539"
+
+--lowercase true--
+string(16) "619c335f8c4f9cbf"
+
+--lowercase false--
+string(16) "6ece228c41457539"
+
+--uppercase TRUE--
+string(16) "619c335f8c4f9cbf"
+
+--uppercase FALSE--
+string(16) "6ece228c41457539"
+
+--empty string DQ--
+string(16) "6ece228c41457539"
+
+--empty string SQ--
+string(16) "6ece228c41457539"
+
+--instance of classWithToString--
+string(32) "749c3b4d16731d98370128754b7c930f"
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+string(16) "e8c97e08755c2169"
+
+--undefined var--
+string(16) "6ece228c41457539"
+
+--unset var--
+string(16) "6ece228c41457539"
+
+--resource--
+string(%d) %s
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_ecb_variation4.phpt b/ext/mcrypt/tests/mcrypt_ecb_variation4.phpt
new file mode 100644
index 000000000..599b4fbe7
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_ecb_variation4.phpt
@@ -0,0 +1,205 @@
+--TEST--
+Test mcrypt_ecb() function : usage variation
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_ecb(string cipher, string key, string data, int mode, string iv)
+ * Description: ECB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_ecb() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$cipher = MCRYPT_TRIPLEDES;
+$key = b'string_val';
+$data = b'string_val';
+$iv = b'01234567';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for mode
+
+foreach($inputs as $valueType =>$value) {
+ echo "\n--$valueType--\n";
+ var_dump(bin2hex(mcrypt_ecb($cipher, $key, $data, $value, $iv)));
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_ecb() : usage variation ***
+
+--float 10.5--
+string(32) "a80c6cef6b42c8759143586a57bb7dc6"
+
+--float -10.5--
+string(32) "a80c6cef6b42c8759143586a57bb7dc6"
+
+--float 12.3456789000e10--
+string(32) "a80c6cef6b42c8759143586a57bb7dc6"
+
+--float -12.3456789000e10--
+string(32) "a80c6cef6b42c8759143586a57bb7dc6"
+
+--float .5--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--empty array--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--int indexed array--
+string(32) "a80c6cef6b42c8759143586a57bb7dc6"
+
+--associative array--
+string(32) "a80c6cef6b42c8759143586a57bb7dc6"
+
+--nested arrays--
+string(32) "a80c6cef6b42c8759143586a57bb7dc6"
+
+--uppercase NULL--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--lowercase null--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--lowercase true--
+string(32) "a80c6cef6b42c8759143586a57bb7dc6"
+
+--lowercase false--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--uppercase TRUE--
+string(32) "a80c6cef6b42c8759143586a57bb7dc6"
+
+--uppercase FALSE--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--empty string DQ--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--empty string SQ--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--string DQ--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--string SQ--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--mixed case string--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--heredoc--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--instance of classWithToString--
+Error: 8 - Object of class classWithToString could not be converted to int, %s(%d)
+string(32) "a80c6cef6b42c8759143586a57bb7dc6"
+
+--instance of classWithoutToString--
+Error: 8 - Object of class classWithoutToString could not be converted to int, %s(%d)
+string(32) "a80c6cef6b42c8759143586a57bb7dc6"
+
+--undefined var--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--unset var--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--resource--
+string(%d) %s
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_ecb_variation5.phpt b/ext/mcrypt/tests/mcrypt_ecb_variation5.phpt
new file mode 100644
index 000000000..05f55153e
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_ecb_variation5.phpt
@@ -0,0 +1,209 @@
+--TEST--
+Test mcrypt_ecb() function : usage variation
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_ecb(string cipher, string key, string data, int mode, string iv)
+ * Description: ECB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_ecb() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$cipher = MCRYPT_TRIPLEDES;
+$key = b'string_val';
+$data = b'string_val';
+$mode = MCRYPT_ENCRYPT;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for iv
+
+foreach($inputs as $valueType =>$value) {
+ echo "\n--$valueType--\n";
+ var_dump(bin2hex( mcrypt_ecb($cipher, $key, $data, $mode, $value)));
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_ecb() : usage variation ***
+
+--int 0--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--int 1--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--int 12345--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--int -12345--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--float 10.5--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--float -10.5--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--float 12.3456789000e10--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--float -12.3456789000e10--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--float .5--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--uppercase NULL--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--lowercase null--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--lowercase true--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--lowercase false--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--uppercase TRUE--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--uppercase FALSE--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--empty string DQ--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--empty string SQ--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--instance of classWithToString--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--undefined var--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--unset var--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+
+--resource--
+string(32) "6438db90653c4d300909aa02fd6163c2"
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_enc_get_algorithms_name.phpt b/ext/mcrypt/tests/mcrypt_enc_get_algorithms_name.phpt
new file mode 100644
index 000000000..5b0bb01b9
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_enc_get_algorithms_name.phpt
@@ -0,0 +1,22 @@
+--TEST--
+mcrypt_enc_get_algorithms_name
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+$td = mcrypt_module_open('rijndael-128', '', MCRYPT_MODE_ECB, '');
+echo mcrypt_enc_get_algorithms_name($td) . "\n";
+$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
+echo mcrypt_enc_get_algorithms_name($td) . "\n";
+$td = mcrypt_module_open(MCRYPT_RC2, '', MCRYPT_MODE_CBC, '');
+echo mcrypt_enc_get_algorithms_name($td) . "\n";
+$td = mcrypt_module_open(MCRYPT_BLOWFISH, '', MCRYPT_MODE_CBC, '');
+echo mcrypt_enc_get_algorithms_name($td) . "\n";
+$td = mcrypt_module_open('des', '', 'ecb', '');
+echo mcrypt_enc_get_algorithms_name($td) . "\n";
+--EXPECT--
+Rijndael-128
+Rijndael-128
+RC2
+Blowfish
+DES \ No newline at end of file
diff --git a/ext/mcrypt/tests/mcrypt_enc_get_block_size.phpt b/ext/mcrypt/tests/mcrypt_enc_get_block_size.phpt
new file mode 100644
index 000000000..06f5adda7
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_enc_get_block_size.phpt
@@ -0,0 +1,16 @@
+--TEST--
+mcrypt_enc_get_block_size
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+$td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
+var_dump(mcrypt_enc_get_block_size($td));
+$td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');
+var_dump(mcrypt_enc_get_block_size($td));
+$td = mcrypt_module_open(MCRYPT_WAKE, '', MCRYPT_MODE_STREAM, '');
+var_dump(mcrypt_enc_get_block_size($td));
+--EXPECT--
+int(32)
+int(8)
+int(1)
diff --git a/ext/mcrypt/tests/mcrypt_enc_get_iv_size.phpt b/ext/mcrypt/tests/mcrypt_enc_get_iv_size.phpt
new file mode 100644
index 000000000..b4f9d6e4b
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_enc_get_iv_size.phpt
@@ -0,0 +1,16 @@
+--TEST--
+mcrypt_enc_get_iv_size
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+$td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
+var_dump(mcrypt_enc_get_iv_size($td));
+$td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');
+var_dump(mcrypt_enc_get_iv_size($td));
+$td = mcrypt_module_open(MCRYPT_WAKE, '', MCRYPT_MODE_STREAM, '');
+var_dump(mcrypt_enc_get_iv_size($td));
+--EXPECT--
+int(32)
+int(8)
+int(0)
diff --git a/ext/mcrypt/tests/mcrypt_enc_get_key_size.phpt b/ext/mcrypt/tests/mcrypt_enc_get_key_size.phpt
new file mode 100644
index 000000000..22328e14d
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_enc_get_key_size.phpt
@@ -0,0 +1,16 @@
+--TEST--
+mcrypt_enc_get_key_size
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+$td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
+var_dump(mcrypt_enc_get_key_size($td));
+$td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');
+var_dump(mcrypt_enc_get_key_size($td));
+$td = mcrypt_module_open(MCRYPT_WAKE, '', MCRYPT_MODE_STREAM, '');
+var_dump(mcrypt_enc_get_key_size($td));
+--EXPECT--
+int(32)
+int(24)
+int(32)
diff --git a/ext/mcrypt/tests/mcrypt_enc_get_mode_name.phpt b/ext/mcrypt/tests/mcrypt_enc_get_mode_name.phpt
new file mode 100644
index 000000000..21c41f98c
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_enc_get_mode_name.phpt
@@ -0,0 +1,25 @@
+--TEST--
+mcrypt_enc_get_modes_name
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+$td = mcrypt_module_open('rijndael-128', '', MCRYPT_MODE_ECB, '');
+echo mcrypt_enc_get_modes_name($td) . "\n";
+$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
+echo mcrypt_enc_get_modes_name($td) . "\n";
+$td = mcrypt_module_open(MCRYPT_WAKE, '', MCRYPT_MODE_STREAM, '');
+echo mcrypt_enc_get_modes_name($td) . "\n";
+$td = mcrypt_module_open(MCRYPT_BLOWFISH, '', MCRYPT_MODE_OFB, '');
+echo mcrypt_enc_get_modes_name($td) . "\n";
+$td = mcrypt_module_open('des', '', 'ecb', '');
+echo mcrypt_enc_get_modes_name($td) . "\n";
+$td = mcrypt_module_open('des', '', 'cbc', '');
+echo mcrypt_enc_get_modes_name($td) . "\n";
+--EXPECT--
+ECB
+CBC
+STREAM
+OFB
+ECB
+CBC
diff --git a/ext/mcrypt/tests/mcrypt_enc_get_supported_key_sizes.phpt b/ext/mcrypt/tests/mcrypt_enc_get_supported_key_sizes.phpt
new file mode 100644
index 000000000..0ce1f15cf
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_enc_get_supported_key_sizes.phpt
@@ -0,0 +1,18 @@
+--TEST--
+mcrypt_enc_get_supported_key_sizes
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+$td = mcrypt_module_open('rijndael-256', '', 'ecb', '');
+$var = mcrypt_enc_get_supported_key_sizes($td);
+var_dump($var);
+--EXPECT--
+array(3) {
+ [0]=>
+ int(16)
+ [1]=>
+ int(24)
+ [2]=>
+ int(32)
+} \ No newline at end of file
diff --git a/ext/mcrypt/tests/mcrypt_enc_is_block_algorithm.phpt b/ext/mcrypt/tests/mcrypt_enc_is_block_algorithm.phpt
new file mode 100644
index 000000000..21a0ed2b8
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_enc_is_block_algorithm.phpt
@@ -0,0 +1,16 @@
+--TEST--
+mcrypt_enc_is_block_algorithm
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+$td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
+var_dump(mcrypt_enc_is_block_algorithm($td));
+$td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');
+var_dump(mcrypt_enc_is_block_algorithm($td));
+$td = mcrypt_module_open(MCRYPT_WAKE, '', MCRYPT_MODE_STREAM, '');
+var_dump(mcrypt_enc_is_block_algorithm($td));
+--EXPECT--
+bool(true)
+bool(true)
+bool(false)
diff --git a/ext/mcrypt/tests/mcrypt_enc_is_block_algorithm_mode.phpt b/ext/mcrypt/tests/mcrypt_enc_is_block_algorithm_mode.phpt
new file mode 100644
index 000000000..69c965417
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_enc_is_block_algorithm_mode.phpt
@@ -0,0 +1,16 @@
+--TEST--
+mcrypt_enc_is_block_algorithm_mode
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+$td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_ECB, '');
+var_dump(mcrypt_enc_is_block_algorithm_mode($td));
+$td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
+var_dump(mcrypt_enc_is_block_algorithm_mode($td));
+$td = mcrypt_module_open(MCRYPT_WAKE, '', MCRYPT_MODE_STREAM, '');
+var_dump(mcrypt_enc_is_block_algorithm_mode($td));
+--EXPECT--
+bool(true)
+bool(true)
+bool(false)
diff --git a/ext/mcrypt/tests/mcrypt_enc_is_block_mode.phpt b/ext/mcrypt/tests/mcrypt_enc_is_block_mode.phpt
new file mode 100644
index 000000000..551f7a697
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_enc_is_block_mode.phpt
@@ -0,0 +1,19 @@
+--TEST--
+mcrypt_enc_is_block_mode
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+$td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
+var_dump(mcrypt_enc_is_block_mode($td));
+$td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_ECB, '');
+var_dump(mcrypt_enc_is_block_mode($td));
+$td = mcrypt_module_open(MCRYPT_ARCFOUR, '', MCRYPT_MODE_STREAM, '');
+var_dump(mcrypt_enc_is_block_mode($td));
+$td = mcrypt_module_open(MCRYPT_WAKE, '', MCRYPT_MODE_STREAM, '');
+var_dump(mcrypt_enc_is_block_mode($td));
+--EXPECT--
+bool(true)
+bool(true)
+bool(false)
+bool(false) \ No newline at end of file
diff --git a/ext/mcrypt/tests/mcrypt_enc_self_test.phpt b/ext/mcrypt/tests/mcrypt_enc_self_test.phpt
new file mode 100644
index 000000000..a161e0e02
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_enc_self_test.phpt
@@ -0,0 +1,10 @@
+--TEST--
+mcrypt_enc_self_test
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+$td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
+var_dump(mcrypt_enc_self_test($td));
+--EXPECT--
+int(0) \ No newline at end of file
diff --git a/ext/mcrypt/tests/mcrypt_encrypt_3des_cbc.phpt b/ext/mcrypt/tests/mcrypt_encrypt_3des_cbc.phpt
new file mode 100644
index 000000000..f86bd3925
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_encrypt_3des_cbc.phpt
@@ -0,0 +1,94 @@
+--TEST--
+Test mcrypt_encrypt() function : TripleDES functionality
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)
+ * Description: OFB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_encrypt() : TripleDES functionality ***\n";
+
+//test CBC, ECB modes
+//test encrypt decrypt
+//test tripledes, aes
+//test different lengths of key, iv
+//test no iv being passed on CBC, ECB
+//test upto 32 bytes with unlimited strength
+
+$cipher = MCRYPT_TRIPLEDES;
+$mode = MCRYPT_MODE_CBC;
+$data = b'This is the secret message which must be encrypted';
+
+// tripledes uses keys upto 192 bits (24 bytes)
+$keys = array(
+ b'12345678',
+ b'12345678901234567890',
+ b'123456789012345678901234',
+ b'12345678901234567890123456'
+);
+// tripledes is a block cipher of 64 bits (8 bytes)
+$ivs = array(
+ b'1234',
+ b'12345678',
+ b'123456789'
+);
+
+
+$iv = b'12345678';
+echo "\n--- testing different key lengths\n";
+foreach ($keys as $key) {
+ echo "\nkey length=".strlen($key)."\n";
+ var_dump(bin2hex(mcrypt_encrypt($cipher, $key, $data, $mode, $iv)));
+}
+
+$key = b'1234567890123456';
+echo "\n--- testing different iv lengths\n";
+foreach ($ivs as $iv) {
+ echo "\niv length=".strlen($iv)."\n";
+ var_dump(bin2hex(mcrypt_encrypt($cipher, $key, $data, $mode, $iv)));
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_encrypt() : TripleDES functionality ***
+
+--- testing different key lengths
+
+key length=8
+string(112) "082b437d039d09418e20dc9de1dafa7ed6da5c6335b78950968441da1faf40c1f886e04da8ca177b80b376811e138c1bf51cb48dae2e7939"
+
+key length=20
+string(112) "0627351e0f8a082bf7981ae2c700a43fd3d44b270ac67b00fded1c5796eea935be0fef2a23da0b3f5e243929e62ac957bf0bf463aa90fc4f"
+
+key length=24
+string(112) "b85e21072239d60c63a80e7c9ae493cb741a1cd407e52f451c5f43a0d103f55a7b62617eb2e44213c2d44462d388bc0b8f119384b12c84ac"
+
+key length=26
+
+Warning: mcrypt_encrypt(): Size of key is too large for this algorithm in %s on line %d
+string(112) "b85e21072239d60c63a80e7c9ae493cb741a1cd407e52f451c5f43a0d103f55a7b62617eb2e44213c2d44462d388bc0b8f119384b12c84ac"
+
+--- testing different iv lengths
+
+iv length=4
+
+Warning: mcrypt_encrypt(): The IV parameter must be as long as the blocksize in %s on line %d
+string(112) "440a6f54601969b127aad3c217ce7583c7f7b29989693130645569301db0020b29a34a3dcd104b2d0e3ba19d6cbd8a33d352b9c27cc34ef1"
+
+iv length=8
+string(112) "bac347506bf092c5557c4363c301745d78f047028e2953e84fd66b30aeb6005812dadbe8baa871b83278341599b0c448ddaaa52b5a378ce5"
+
+iv length=9
+
+Warning: mcrypt_encrypt(): The IV parameter must be as long as the blocksize in %s on line %d
+string(112) "440a6f54601969b127aad3c217ce7583c7f7b29989693130645569301db0020b29a34a3dcd104b2d0e3ba19d6cbd8a33d352b9c27cc34ef1"
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_encrypt_3des_ecb.phpt b/ext/mcrypt/tests/mcrypt_encrypt_3des_ecb.phpt
new file mode 100644
index 000000000..1b3188f8e
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_encrypt_3des_ecb.phpt
@@ -0,0 +1,82 @@
+--TEST--
+Test mcrypt_encrypt() function : TripleDES functionality
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)
+ * Description: OFB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_encrypt() : TripleDES functionality ***\n";
+
+$cipher = MCRYPT_TRIPLEDES;
+$mode = MCRYPT_MODE_ECB;
+$data = b'This is the secret message which must be encrypted';
+
+// tripledes uses keys upto 192 bits (24 bytes)
+$keys = array(
+ b'12345678',
+ b'12345678901234567890',
+ b'123456789012345678901234',
+ b'12345678901234567890123456'
+);
+
+echo "\n--- testing different key lengths\n";
+foreach ($keys as $key) {
+ echo "\nkey length=".strlen($key)."\n";
+ var_dump(bin2hex(mcrypt_encrypt($cipher, $key, $data, $mode)));
+}
+
+$key = b'12345678';
+$ivs = array(
+ b'1234',
+ b'12345678',
+ b'123456789'
+);
+
+// ivs should be ignored in ecb mode
+echo "\n--- testing different iv lengths\n";
+foreach ($ivs as $iv) {
+ echo "\niv length=".strlen($iv)."\n";
+ var_dump(bin2hex(mcrypt_encrypt($cipher, $key, $data, $mode, $iv)));
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_encrypt() : TripleDES functionality ***
+
+--- testing different key lengths
+
+key length=8
+string(112) "05c9c4cafb9937d950bdae60ee3abcb8d9f3e1f1fac8acaaa5b11d70b7ca02f3b76d447ab3dd85a4b5df5dedb4b4654595ccdf6da97fa93f"
+
+key length=20
+string(112) "0fc7045c4fb4dbcf44baf9ed15ab40331a42ff0632318a16b12ed5873f02e7945e4f63f408d6849534cbb7419c22c8854aaa85e0e05a28e6"
+
+key length=24
+string(112) "923eedcb20e18e3efa466a6ca1b842b34e6ac46aa3690ef739d0d68a26eb64e1a6ad42e7d18312ae8a57ab927e1dc892e5ff56c061864f27"
+
+key length=26
+
+Warning: mcrypt_encrypt(): Size of key is too large for this algorithm in %s on line %d
+string(112) "923eedcb20e18e3efa466a6ca1b842b34e6ac46aa3690ef739d0d68a26eb64e1a6ad42e7d18312ae8a57ab927e1dc892e5ff56c061864f27"
+
+--- testing different iv lengths
+
+iv length=4
+string(112) "05c9c4cafb9937d950bdae60ee3abcb8d9f3e1f1fac8acaaa5b11d70b7ca02f3b76d447ab3dd85a4b5df5dedb4b4654595ccdf6da97fa93f"
+
+iv length=8
+string(112) "05c9c4cafb9937d950bdae60ee3abcb8d9f3e1f1fac8acaaa5b11d70b7ca02f3b76d447ab3dd85a4b5df5dedb4b4654595ccdf6da97fa93f"
+
+iv length=9
+string(112) "05c9c4cafb9937d950bdae60ee3abcb8d9f3e1f1fac8acaaa5b11d70b7ca02f3b76d447ab3dd85a4b5df5dedb4b4654595ccdf6da97fa93f"
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_encrypt_error.phpt b/ext/mcrypt/tests/mcrypt_encrypt_error.phpt
new file mode 100644
index 000000000..948e42549
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_encrypt_error.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test mcrypt_encrypt() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)
+ * Description: OFB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_encrypt() : error conditions ***\n";
+
+
+//Test mcrypt_encrypt with one more than the expected number of arguments
+echo "\n-- Testing mcrypt_encrypt() function with more than expected no. of arguments --\n";
+$cipher = 'string_val';
+$key = 'string_val';
+$data = 'string_val';
+$mode = 'string_val';
+$iv = 'string_val';
+$extra_arg = 10;
+var_dump( mcrypt_encrypt($cipher, $key, $data, $mode, $iv, $extra_arg) );
+
+// Testing mcrypt_encrypt with one less than the expected number of arguments
+echo "\n-- Testing mcrypt_encrypt() function with less than expected no. of arguments --\n";
+$cipher = 'string_val';
+$key = 'string_val';
+$data = 'string_val';
+var_dump( mcrypt_encrypt($cipher, $key, $data) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_encrypt() : error conditions ***
+
+-- Testing mcrypt_encrypt() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for mcrypt_encrypt() in %s on line %d
+NULL
+
+-- Testing mcrypt_encrypt() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for mcrypt_encrypt() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_encrypt_variation1.phpt b/ext/mcrypt/tests/mcrypt_encrypt_variation1.phpt
new file mode 100644
index 000000000..c1e270086
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_encrypt_variation1.phpt
@@ -0,0 +1,235 @@
+--TEST--
+Test mcrypt_encrypt() function : usage variation - different types for cipher
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)
+ * Description: OFB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_encrypt() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$key = b'string_val';
+$data = b'string_val';
+$mode = MCRYPT_MODE_ECB;
+$iv = b'string_val';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for cipher
+
+foreach($inputs as $valueType =>$value) {
+ echo "\n--$valueType--\n";
+ var_dump( mcrypt_encrypt($value, $key, $data, $mode, $iv) );
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_encrypt() : usage variation ***
+
+--int 0--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--int 1--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--float .5--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--resource--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_encrypt_variation2.phpt b/ext/mcrypt/tests/mcrypt_encrypt_variation2.phpt
new file mode 100644
index 000000000..86d34b884
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_encrypt_variation2.phpt
@@ -0,0 +1,209 @@
+--TEST--
+Test mcrypt_encrypt() function : usage variation
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)
+ * Description: OFB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_encrypt() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$cipher = MCRYPT_TRIPLEDES;
+$data = b'string_val';
+$mode = MCRYPT_MODE_ECB;
+$iv = b'01234567';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for key
+
+foreach($inputs as $valueType =>$value) {
+ echo "\n--$valueType--\n";
+ var_dump( bin2hex(mcrypt_encrypt($cipher, $value, $data, $mode, $iv) ));
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_encrypt() : usage variation ***
+
+--int 0--
+string(32) "e469e6b066f9600e1eefd8f53365f96c"
+
+--int 1--
+string(32) "e469e6b066f9600e1eefd8f53365f96c"
+
+--int 12345--
+string(32) "d74e5f51d1199bcfa61f80168e913007"
+
+--int -12345--
+string(32) "17fe485ed735abb34c1dd4455af7b79c"
+
+--float 10.5--
+string(32) "cd735509aa4013a130e011686d66ae01"
+
+--float -10.5--
+string(32) "a57d99d6d5813039abf50fc50d631e47"
+
+--float 12.3456789000e10--
+string(32) "f17ede0bfdaa4408f545f7f4c8b040d2"
+
+--float -12.3456789000e10--
+string(32) "326f64e3b9bd5a6beb0a9b52a09a5a48"
+
+--float .5--
+string(32) "2aedf7661cd4d8c7593f44c58718e2b8"
+
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+string(32) "3e67235c6c77c7795b69f7bf31ad63ec"
+
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+string(32) "3e67235c6c77c7795b69f7bf31ad63ec"
+
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+string(32) "3e67235c6c77c7795b69f7bf31ad63ec"
+
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+string(32) "3e67235c6c77c7795b69f7bf31ad63ec"
+
+--uppercase NULL--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--lowercase null--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--lowercase true--
+string(32) "e469e6b066f9600e1eefd8f53365f96c"
+
+--lowercase false--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--uppercase TRUE--
+string(32) "e469e6b066f9600e1eefd8f53365f96c"
+
+--uppercase FALSE--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--empty string DQ--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--empty string SQ--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--instance of classWithToString--
+string(32) "1fd3514d8ced44d04d9dc7511fce33ef"
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+string(32) "fb3ff12423b2c3ba38905e448d35f4c0"
+
+--undefined var--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--unset var--
+string(32) "bfa2cb7240c8d2f6abeb34960c04f6d3"
+
+--resource--
+string(%s) %s
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_encrypt_variation3.phpt b/ext/mcrypt/tests/mcrypt_encrypt_variation3.phpt
new file mode 100644
index 000000000..33c364327
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_encrypt_variation3.phpt
@@ -0,0 +1,209 @@
+--TEST--
+Test mcrypt_encrypt() function : usage variation
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)
+ * Description: OFB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_encrypt() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$cipher = MCRYPT_TRIPLEDES;
+$key = b'string_val';
+$mode = MCRYPT_MODE_ECB;
+$iv = b'01234567';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for data
+
+foreach($inputs as $valueType =>$value) {
+ echo "\n--$valueType--\n";
+ var_dump( bin2hex(mcrypt_encrypt($cipher, $key, $value, $mode, $iv) ));
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_encrypt() : usage variation ***
+
+--int 0--
+string(16) "51dc9cd9179b718b"
+
+--int 1--
+string(16) "619c335f8c4f9cbf"
+
+--int 12345--
+string(16) "b1258d67ab73de00"
+
+--int -12345--
+string(16) "8eecf134443bd6b9"
+
+--float 10.5--
+string(16) "34b5750a793baff5"
+
+--float -10.5--
+string(16) "7a605f2aacc8a11d"
+
+--float 12.3456789000e10--
+string(32) "74a0d7026ae586f476d4b17808851e86"
+
+--float -12.3456789000e10--
+string(32) "bfb155997017986c01090afebd62c7ca"
+
+--float .5--
+string(16) "cc60ac201164b6c7"
+
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+string(16) "c5f0f5425f13ef7c"
+
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+string(16) "c5f0f5425f13ef7c"
+
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+string(16) "c5f0f5425f13ef7c"
+
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+string(16) "c5f0f5425f13ef7c"
+
+--uppercase NULL--
+string(16) "6ece228c41457539"
+
+--lowercase null--
+string(16) "6ece228c41457539"
+
+--lowercase true--
+string(16) "619c335f8c4f9cbf"
+
+--lowercase false--
+string(16) "6ece228c41457539"
+
+--uppercase TRUE--
+string(16) "619c335f8c4f9cbf"
+
+--uppercase FALSE--
+string(16) "6ece228c41457539"
+
+--empty string DQ--
+string(16) "6ece228c41457539"
+
+--empty string SQ--
+string(16) "6ece228c41457539"
+
+--instance of classWithToString--
+string(32) "749c3b4d16731d98370128754b7c930f"
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+string(16) "e8c97e08755c2169"
+
+--undefined var--
+string(16) "6ece228c41457539"
+
+--unset var--
+string(16) "6ece228c41457539"
+
+--resource--
+string(%s) %s
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_encrypt_variation4.phpt b/ext/mcrypt/tests/mcrypt_encrypt_variation4.phpt
new file mode 100644
index 000000000..4c8cef1db
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_encrypt_variation4.phpt
@@ -0,0 +1,235 @@
+--TEST--
+Test mcrypt_encrypt() function : usage variation
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)
+ * Description: OFB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_encrypt() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$cipher = MCRYPT_TRIPLEDES;
+$key = b'string_val';
+$data = b'string_val';
+$iv = b'01234567';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for mode
+
+foreach($inputs as $valueType =>$value) {
+ echo "\n--$valueType--\n";
+ var_dump( mcrypt_encrypt($cipher, $key, $data, $value, $iv) );
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_encrypt() : usage variation ***
+
+--int 0--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--int 1--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--float .5--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+
+--resource--
+Error: 2 - mcrypt_encrypt(): Module initialization failed, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_encrypt_variation5.phpt b/ext/mcrypt/tests/mcrypt_encrypt_variation5.phpt
new file mode 100644
index 000000000..f720e18ff
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_encrypt_variation5.phpt
@@ -0,0 +1,236 @@
+--TEST--
+Test mcrypt_encrypt() function : usage variation
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)
+ * Description: OFB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt_encrypt() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$cipher = MCRYPT_TRIPLEDES;
+$key = b'string_val';
+$data = b'string_val';
+//in php, it incorrectly reports problems with iv in ECB mode.
+$mode = MCRYPT_MODE_CBC;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return b"Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = b<<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for iv
+
+foreach($inputs as $valueType =>$value) {
+ echo "\n--$valueType--\n";
+ var_dump( bin2hex(mcrypt_encrypt($cipher, $key, $data, $mode, $value)));
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt_encrypt() : usage variation ***
+
+--int 0--
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--int 1--
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--int 12345--
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--int -12345--
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--float 10.5--
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--float -10.5--
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--float 12.3456789000e10--
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--float -12.3456789000e10--
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--float .5--
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--uppercase NULL--
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--lowercase null--
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--lowercase true--
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--lowercase false--
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--uppercase TRUE--
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--uppercase FALSE--
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--empty string DQ--
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--empty string SQ--
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--instance of classWithToString--
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--undefined var--
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--unset var--
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(32) "6438db90653c4d3080c3ceab43618c05"
+
+--resource--
+Error: 2 - mcrypt_encrypt(): The IV parameter must be as long as the blocksize, %s(%d)
+string(%s) %s
+===DONE===
diff --git a/ext/mcrypt/tests/mcrypt_get_block_size.phpt b/ext/mcrypt/tests/mcrypt_get_block_size.phpt
new file mode 100644
index 000000000..bf1f24df3
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_get_block_size.phpt
@@ -0,0 +1,13 @@
+--TEST--
+mcrypt_get_block_size
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+var_dump(mcrypt_get_block_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC));
+var_dump(mcrypt_get_block_size(MCRYPT_3DES, MCRYPT_MODE_CBC));
+var_dump(mcrypt_get_block_size(MCRYPT_WAKE, MCRYPT_MODE_STREAM));
+--EXPECT--
+int(32)
+int(8)
+int(1)
diff --git a/ext/mcrypt/tests/mcrypt_get_cipher_name.phpt b/ext/mcrypt/tests/mcrypt_get_cipher_name.phpt
new file mode 100644
index 000000000..9d4961ae8
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_get_cipher_name.phpt
@@ -0,0 +1,15 @@
+--TEST--
+mcrypt_get_cipher_name
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+echo mcrypt_get_cipher_name(MCRYPT_RIJNDAEL_256) . "\n";
+echo mcrypt_get_cipher_name(MCRYPT_RC2) . "\n";
+echo mcrypt_get_cipher_name(MCRYPT_ARCFOUR) . "\n";
+echo mcrypt_get_cipher_name(MCRYPT_WAKE) . "\n";
+--EXPECT--
+Rijndael-256
+RC2
+RC4
+WAKE
diff --git a/ext/mcrypt/tests/mcrypt_get_iv_size.phpt b/ext/mcrypt/tests/mcrypt_get_iv_size.phpt
new file mode 100644
index 000000000..ad3599745
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_get_iv_size.phpt
@@ -0,0 +1,17 @@
+--TEST--
+mcrypt_enc_get_iv_size
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+var_dump(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC));
+var_dump(mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_CBC));
+var_dump(mcrypt_get_iv_size(MCRYPT_WAKE, MCRYPT_MODE_STREAM));
+var_dump(mcrypt_get_iv_size(MCRYPT_XTEA, MCRYPT_MODE_STREAM));
+--EXPECTF--
+int(32)
+int(8)
+int(0)
+
+Warning: mcrypt_get_iv_size(): Module initialization failed in %s on line %d
+bool(false) \ No newline at end of file
diff --git a/ext/mcrypt/tests/mcrypt_get_key_size.phpt b/ext/mcrypt/tests/mcrypt_get_key_size.phpt
new file mode 100644
index 000000000..930cf4d64
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_get_key_size.phpt
@@ -0,0 +1,13 @@
+--TEST--
+mcrypt_get_key_size
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+var_dump(mcrypt_get_key_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC));
+var_dump(mcrypt_get_key_size(MCRYPT_3DES, MCRYPT_MODE_CBC));
+var_dump(mcrypt_get_key_size(MCRYPT_WAKE, MCRYPT_MODE_STREAM));
+--EXPECT--
+int(32)
+int(24)
+int(32)
diff --git a/ext/mcrypt/tests/mcrypt_list_algorithms.phpt b/ext/mcrypt/tests/mcrypt_list_algorithms.phpt
new file mode 100644
index 000000000..9baf9a64d
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_list_algorithms.phpt
@@ -0,0 +1,16 @@
+--TEST--
+mcrypt_list_algorithms
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+foreach (mcrypt_list_algorithms() as $algo) {
+ if (in_array($algo, array('rijndael-256', 'des', 'blowfish', 'twofish'))) {
+ echo "FOUND\n";
+ }
+}
+--EXPECT--
+FOUND
+FOUND
+FOUND
+FOUND \ No newline at end of file
diff --git a/ext/mcrypt/tests/mcrypt_list_modes.phpt b/ext/mcrypt/tests/mcrypt_list_modes.phpt
new file mode 100644
index 000000000..0e5a6ae87
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_list_modes.phpt
@@ -0,0 +1,26 @@
+--TEST--
+mcrypt_list_modes
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+var_dump(mcrypt_list_modes());
+--EXPECT--
+array(8) {
+ [0]=>
+ string(3) "cbc"
+ [1]=>
+ string(3) "cfb"
+ [2]=>
+ string(3) "ctr"
+ [3]=>
+ string(3) "ecb"
+ [4]=>
+ string(4) "ncfb"
+ [5]=>
+ string(4) "nofb"
+ [6]=>
+ string(3) "ofb"
+ [7]=>
+ string(6) "stream"
+} \ No newline at end of file
diff --git a/ext/mcrypt/tests/mcrypt_module_get_algo_block_size.phpt b/ext/mcrypt/tests/mcrypt_module_get_algo_block_size.phpt
new file mode 100644
index 000000000..c89a44ad8
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_module_get_algo_block_size.phpt
@@ -0,0 +1,19 @@
+--TEST--
+mcrypt_module_get_algo_block_size
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+var_dump(mcrypt_module_get_algo_block_size(MCRYPT_RIJNDAEL_256));
+var_dump(mcrypt_module_get_algo_block_size(MCRYPT_RIJNDAEL_192));
+var_dump(mcrypt_module_get_algo_block_size(MCRYPT_RC2));
+var_dump(mcrypt_module_get_algo_block_size(MCRYPT_XTEA));
+var_dump(mcrypt_module_get_algo_block_size(MCRYPT_CAST_128));
+var_dump(mcrypt_module_get_algo_block_size(MCRYPT_BLOWFISH));
+--EXPECT--
+int(32)
+int(24)
+int(8)
+int(8)
+int(8)
+int(8)
diff --git a/ext/mcrypt/tests/mcrypt_module_get_algo_key_size.phpt b/ext/mcrypt/tests/mcrypt_module_get_algo_key_size.phpt
new file mode 100644
index 000000000..7d3841f3e
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_module_get_algo_key_size.phpt
@@ -0,0 +1,19 @@
+--TEST--
+mcrypt_module_get_algo_key_size
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+var_dump(mcrypt_module_get_algo_key_size(MCRYPT_RIJNDAEL_256));
+var_dump(mcrypt_module_get_algo_key_size(MCRYPT_RIJNDAEL_192));
+var_dump(mcrypt_module_get_algo_key_size(MCRYPT_RC2));
+var_dump(mcrypt_module_get_algo_key_size(MCRYPT_XTEA));
+var_dump(mcrypt_module_get_algo_key_size(MCRYPT_CAST_128));
+var_dump(mcrypt_module_get_algo_key_size(MCRYPT_BLOWFISH));
+--EXPECT--
+int(32)
+int(32)
+int(128)
+int(16)
+int(16)
+int(56)
diff --git a/ext/mcrypt/tests/mcrypt_module_get_supported_key_sizes.phpt b/ext/mcrypt/tests/mcrypt_module_get_supported_key_sizes.phpt
new file mode 100644
index 000000000..bf45bb488
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_module_get_supported_key_sizes.phpt
@@ -0,0 +1,19 @@
+--TEST--
+mcrypt_module_get_supported_key_sizes
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+var_dump(mcrypt_module_get_supported_key_sizes(MCRYPT_RIJNDAEL_256));
+var_dump(mcrypt_module_get_supported_key_sizes(MCRYPT_RC2));
+--EXPECT--
+array(3) {
+ [0]=>
+ int(16)
+ [1]=>
+ int(24)
+ [2]=>
+ int(32)
+}
+array(0) {
+} \ No newline at end of file
diff --git a/ext/mcrypt/tests/mcrypt_module_is_block_algorithm.phpt b/ext/mcrypt/tests/mcrypt_module_is_block_algorithm.phpt
new file mode 100644
index 000000000..2cfc87ddf
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_module_is_block_algorithm.phpt
@@ -0,0 +1,15 @@
+--TEST--
+mcrypt_module_is_block_algorithm
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+var_dump(mcrypt_module_is_block_algorithm(MCRYPT_RIJNDAEL_128));
+var_dump(mcrypt_module_is_block_algorithm(MCRYPT_DES));
+var_dump(mcrypt_module_is_block_algorithm(MCRYPT_WAKE));
+var_dump(mcrypt_module_is_block_algorithm(MCRYPT_XTEA));
+--EXPECT--
+bool(true)
+bool(true)
+bool(false)
+bool(true) \ No newline at end of file
diff --git a/ext/mcrypt/tests/mcrypt_module_is_block_algorithm_mode.phpt b/ext/mcrypt/tests/mcrypt_module_is_block_algorithm_mode.phpt
new file mode 100644
index 000000000..292455141
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_module_is_block_algorithm_mode.phpt
@@ -0,0 +1,15 @@
+--TEST--
+mcrypt_module_is_block_algorithm_mode
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+var_dump(mcrypt_module_is_block_algorithm_mode(MCRYPT_MODE_CBC));
+var_dump(mcrypt_module_is_block_algorithm_mode(MCRYPT_MODE_ECB));
+var_dump(mcrypt_module_is_block_algorithm_mode(MCRYPT_MODE_STREAM));
+var_dump(mcrypt_module_is_block_algorithm_mode(MCRYPT_MODE_OFB));
+--EXPECT--
+bool(true)
+bool(true)
+bool(false)
+bool(true) \ No newline at end of file
diff --git a/ext/mcrypt/tests/mcrypt_module_is_block_mode.phpt b/ext/mcrypt/tests/mcrypt_module_is_block_mode.phpt
new file mode 100644
index 000000000..662279f59
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_module_is_block_mode.phpt
@@ -0,0 +1,17 @@
+--TEST--
+mcrypt_module_is_block_mode
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+var_dump(mcrypt_module_is_block_mode(MCRYPT_MODE_CBC));
+var_dump(mcrypt_module_is_block_mode(MCRYPT_MODE_ECB));
+var_dump(mcrypt_module_is_block_mode(MCRYPT_MODE_STREAM));
+var_dump(mcrypt_module_is_block_mode(MCRYPT_MODE_NOFB));
+var_dump(mcrypt_module_is_block_mode(MCRYPT_MODE_OFB));
+--EXPECT--
+bool(true)
+bool(true)
+bool(false)
+bool(false)
+bool(false) \ No newline at end of file
diff --git a/ext/mcrypt/tests/mcrypt_module_open.phpt b/ext/mcrypt/tests/mcrypt_module_open.phpt
new file mode 100644
index 000000000..92f0d555b
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_module_open.phpt
@@ -0,0 +1,14 @@
+--TEST--
+mcrypt_module_open
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+var_dump(mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, ''));
+mcrypt_module_open('', '', '', '');
+
+--EXPECTF--
+resource(%d) of type (mcrypt)
+
+Warning: mcrypt_module_open(): Could not open encryption module in %s on line %d
+
diff --git a/ext/mcrypt/tests/mcrypt_module_self_test.phpt b/ext/mcrypt/tests/mcrypt_module_self_test.phpt
new file mode 100644
index 000000000..cf07bfe6a
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_module_self_test.phpt
@@ -0,0 +1,13 @@
+--TEST--
+mcrypt_module_self_test
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+var_dump(mcrypt_module_self_test(MCRYPT_RIJNDAEL_128));
+var_dump(mcrypt_module_self_test(MCRYPT_RC2));
+var_dump(mcrypt_module_self_test(''));
+--EXPECT--
+bool(true)
+bool(true)
+bool(false)
diff --git a/ext/mcrypt/tests/mcrypt_ofb.phpt b/ext/mcrypt/tests/mcrypt_ofb.phpt
new file mode 100644
index 000000000..1532c4cf2
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_ofb.phpt
@@ -0,0 +1,21 @@
+--TEST--
+mcrypt_ofb
+--SKIPIF--
+<?php if (!extension_loaded("mcrypt")) print "skip"; ?>
+--FILE--
+<?php
+$key = "FooBar";
+$secret = "PHP Testfest 2008";
+$cipher = MCRYPT_RIJNDAEL_128;
+
+$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher, MCRYPT_MODE_ECB), MCRYPT_RAND);
+$enc_data = mcrypt_ofb($cipher, $key, $secret, MCRYPT_ENCRYPT, $iv);
+
+// we have to trim as AES rounds the blocks and decrypt doesnt detect that
+echo trim(mcrypt_ofb($cipher, $key, $enc_data, MCRYPT_DECRYPT, $iv)) . "\n";
+
+// a warning must be issued if we don't use a IV on a AES cipher, that usually requires an IV
+mcrypt_ofb($cipher, $key, $enc_data, MCRYPT_DECRYPT, $iv);
+
+--EXPECT--
+PHP Testfest 2008 \ No newline at end of file
diff --git a/ext/mcrypt/tests/mcrypt_rijndael128_128BitKey.phpt b/ext/mcrypt/tests/mcrypt_rijndael128_128BitKey.phpt
new file mode 100644
index 000000000..100352a1c
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_rijndael128_128BitKey.phpt
@@ -0,0 +1,130 @@
+--TEST--
+Test mcrypt_encrypt() function : TripleDES functionality
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)
+ * Description: OFB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+ /* Prototype : string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)
+ * Description: OFB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+ /* Prototype : string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)
+ * Description: CBC crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt : Rijndael128 functionality ***\n";
+
+$cipher = MCRYPT_RIJNDAEL_128;
+$mode = MCRYPT_MODE_CBC;
+$data = b'This is the secret message which must be encrypted';
+
+// keys upto 128 bits (16 bytes)
+$keys = array(
+ null,
+ '',
+ b'12345678',
+ b'1234567890123456'
+);
+// rijndael128 is a block cipher of 128 bits (16 bytes)
+$ivs = array(
+ null,
+ '',
+ b'12345678',
+ b'1234567890123456',
+ b'12345678901234567'
+);
+
+
+$iv = b'1234567890123456';
+echo "\n--- testing different key lengths\n";
+foreach ($keys as $key) {
+ echo "\nkey length=".strlen($key)."\n";
+ $res = mcrypt_encrypt($cipher, $key, $data, MCRYPT_MODE_CBC, $iv);
+ var_dump(bin2hex($res));
+ $res = mcrypt_cbc($cipher, $key, $res, MCRYPT_DECRYPT, $iv);
+ var_dump(bin2hex($res));
+}
+
+$key = b'1234567890123456';
+echo "\n--- testing different iv lengths\n";
+foreach ($ivs as $iv) {
+ echo "\niv length=".strlen($iv)."\n";
+ $res = mcrypt_cbc($cipher, $key, $data, $mode, $iv);
+ var_dump(bin2hex($res));
+ $res = mcrypt_decrypt($cipher, $key, $res, MCRYPT_MODE_CBC, $iv);
+ var_dump(bin2hex($res));
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt : Rijndael128 functionality ***
+
+--- testing different key lengths
+
+key length=0
+string(128) "4fbf24aaa789f5194260ade1acd9499402c1845cc517e8fe43cfb5b90a0df294db33ecd1a836c47d6bf6d8600512ba415e17008a1e1991f81056258d82099397"
+string(128) "546869732069732074686520736563726574206d657373616765207768696368206d75737420626520656e637279707465640000000000000000000000000000"
+
+key length=0
+string(128) "4fbf24aaa789f5194260ade1acd9499402c1845cc517e8fe43cfb5b90a0df294db33ecd1a836c47d6bf6d8600512ba415e17008a1e1991f81056258d82099397"
+string(128) "546869732069732074686520736563726574206d657373616765207768696368206d75737420626520656e637279707465640000000000000000000000000000"
+
+key length=8
+string(128) "d6a3042b278fa5816dc6f46152acbe5fd7d1813c3808c27cd969d8e10a64d0238724edfda0322f4512308f22d142df0e92bed861c2b732f7650e234df59183dc"
+string(128) "546869732069732074686520736563726574206d657373616765207768696368206d75737420626520656e637279707465640000000000000000000000000000"
+
+key length=16
+string(128) "dc8f957ec530acf10cd95ba7da7b6405380fe19a2941e9a8de54680512f18491bc374e5464885ae6c2ae2aa7a6cdd2fbe12a06bbc4bd59dbbfaa15f09044f101"
+string(128) "546869732069732074686520736563726574206d657373616765207768696368206d75737420626520656e637279707465640000000000000000000000000000"
+
+--- testing different iv lengths
+
+iv length=0
+
+Warning: mcrypt_cbc(): The IV parameter must be as long as the blocksize in %s on line %d
+string(128) "c082b3fabaae4c8c410eb8dba64bae10e48d79b5241fb8f24462cad43bd0b35ad2746b00817e9dcbc636b44df0ec60b46a57e7a310a308a0947724e3817a13b4"
+
+Warning: mcrypt_decrypt(): The IV parameter must be as long as the blocksize in %s on line %d
+string(128) "546869732069732074686520736563726574206d657373616765207768696368206d75737420626520656e637279707465640000000000000000000000000000"
+
+iv length=0
+
+Warning: mcrypt_cbc(): The IV parameter must be as long as the blocksize in %s on line %d
+string(128) "c082b3fabaae4c8c410eb8dba64bae10e48d79b5241fb8f24462cad43bd0b35ad2746b00817e9dcbc636b44df0ec60b46a57e7a310a308a0947724e3817a13b4"
+
+Warning: mcrypt_decrypt(): The IV parameter must be as long as the blocksize in %s on line %d
+string(128) "546869732069732074686520736563726574206d657373616765207768696368206d75737420626520656e637279707465640000000000000000000000000000"
+
+iv length=8
+
+Warning: mcrypt_cbc(): The IV parameter must be as long as the blocksize in %s on line %d
+string(128) "c082b3fabaae4c8c410eb8dba64bae10e48d79b5241fb8f24462cad43bd0b35ad2746b00817e9dcbc636b44df0ec60b46a57e7a310a308a0947724e3817a13b4"
+
+Warning: mcrypt_decrypt(): The IV parameter must be as long as the blocksize in %s on line %d
+string(128) "546869732069732074686520736563726574206d657373616765207768696368206d75737420626520656e637279707465640000000000000000000000000000"
+
+iv length=16
+string(128) "dc8f957ec530acf10cd95ba7da7b6405380fe19a2941e9a8de54680512f18491bc374e5464885ae6c2ae2aa7a6cdd2fbe12a06bbc4bd59dbbfaa15f09044f101"
+string(128) "546869732069732074686520736563726574206d657373616765207768696368206d75737420626520656e637279707465640000000000000000000000000000"
+
+iv length=17
+
+Warning: mcrypt_cbc(): The IV parameter must be as long as the blocksize in %s on line %d
+string(128) "c082b3fabaae4c8c410eb8dba64bae10e48d79b5241fb8f24462cad43bd0b35ad2746b00817e9dcbc636b44df0ec60b46a57e7a310a308a0947724e3817a13b4"
+
+Warning: mcrypt_decrypt(): The IV parameter must be as long as the blocksize in %s on line %d
+string(128) "546869732069732074686520736563726574206d657373616765207768696368206d75737420626520656e637279707465640000000000000000000000000000"
+===DONE=== \ No newline at end of file
diff --git a/ext/mcrypt/tests/mcrypt_rijndael128_256BitKey.phpt b/ext/mcrypt/tests/mcrypt_rijndael128_256BitKey.phpt
new file mode 100644
index 000000000..f69d36929
--- /dev/null
+++ b/ext/mcrypt/tests/mcrypt_rijndael128_256BitKey.phpt
@@ -0,0 +1,87 @@
+--TEST--
+Test mcrypt_encrypt() function : TripleDES functionality
+--SKIPIF--
+<?php
+if (!extension_loaded("mcrypt")) {
+ print "skip - mcrypt extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)
+ * Description: OFB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+ /* Prototype : string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)
+ * Description: OFB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+ /* Prototype : string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)
+ * Description: CBC crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+ /* Prototype : string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)
+ * Description: ECB crypt/decrypt data using key key with cipher cipher starting with iv
+ * Source code: ext/mcrypt/mcrypt.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mcrypt : Rijndael128 functionality ***\n";
+
+$cipher = MCRYPT_RIJNDAEL_128;
+$mode = MCRYPT_MODE_CBC;
+$data = b'This is the secret message which must be encrypted';
+
+// keys : 20 bytes, 24 bytes, 30 Bytes, 32 Bytes, 40 Bytes
+$keys = array(
+ b'12345678901234567890',
+ b'123456789012345678901234',
+ b'123456789012345678901234567890',
+ b'12345678901234567890123456789012',
+ b'1234567890123456789012345678901234567890'
+ );
+// rijndael128 is a block cipher of 128 bits (16 bytes)
+$iv = b'1234567890123456';
+
+echo "\n--- testing different key lengths\n";
+foreach ($keys as $key) {
+ echo "\nkey length=".strlen($key)."\n";
+ $res = mcrypt_encrypt($cipher, $key, $data, MCRYPT_MODE_CBC, $iv);
+ var_dump(bin2hex($res));
+ $res = mcrypt_decrypt($cipher, $key, $res, MCRYPT_MODE_CBC, $iv);
+ var_dump(bin2hex($res));
+}
+?>
+===DONE===
+--EXPECTF--
+*** Testing mcrypt : Rijndael128 functionality ***
+
+--- testing different key lengths
+
+key length=20
+string(128) "6369830bfc89a39c9981c9a40e349e3bbc8599c28d7ffbd7a330a67690dac6dfb76a55814e95c83cced68eb1544cdd8406d272c249bd0a60fa5b605d4aefbaa0"
+string(128) "546869732069732074686520736563726574206d657373616765207768696368206d75737420626520656e637279707465640000000000000000000000000000"
+
+key length=24
+string(128) "8ecdf1ed5742aff16ef34c819c8d22c707c54f4d9ffc18e5f6ab79fe68c25705351e2c001a0b9f29e5def67570ca9da644efb69a8bb97940cb4bec094dae8bb5"
+string(128) "546869732069732074686520736563726574206d657373616765207768696368206d75737420626520656e637279707465640000000000000000000000000000"
+
+key length=30
+string(128) "f7731f0c0ab22270b2f516c7837256ed731ba6658ca8f78cda2ab1588e204f990843719ae88474f6572711674fcda9f40d99155e4cc4f5a31aa461ad36a7871d"
+string(128) "546869732069732074686520736563726574206d657373616765207768696368206d75737420626520656e637279707465640000000000000000000000000000"
+
+key length=32
+string(128) "f23bc103bfd0859a8318acee6d96e5f43dff68f3cdeae817a1e77c33492e32bdb82c5f660fcd1a2bfda70d9de4d5d8028ce179a9e2f7f9ee7dd61c7b4b409e95"
+string(128) "546869732069732074686520736563726574206d657373616765207768696368206d75737420626520656e637279707465640000000000000000000000000000"
+
+key length=40
+
+Warning: mcrypt_encrypt(): Size of key is too large for this algorithm in %s on line %d
+string(128) "f23bc103bfd0859a8318acee6d96e5f43dff68f3cdeae817a1e77c33492e32bdb82c5f660fcd1a2bfda70d9de4d5d8028ce179a9e2f7f9ee7dd61c7b4b409e95"
+
+Warning: mcrypt_decrypt(): Size of key is too large for this algorithm in %s on line %d
+string(128) "546869732069732074686520736563726574206d657373616765207768696368206d75737420626520656e637279707465640000000000000000000000000000"
+===DONE=== \ No newline at end of file
diff --git a/ext/mhash/mhash.c b/ext/mhash/mhash.c
index dccf0158b..c699fa73c 100644
--- a/ext/mhash/mhash.c
+++ b/ext/mhash/mhash.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
| Nikos Mavroyanopoulos <nmav@hellug.gr> (HMAC, KEYGEN) |
+----------------------------------------------------------------------+
*/
-/* $Id: mhash.c,v 1.48.2.3.2.6 2007/12/31 07:20:08 sebastian Exp $ */
+/* $Id: mhash.c,v 1.48.2.3.2.7 2008/12/31 11:17:39 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/mhash/php_mhash.h b/ext/mhash/php_mhash.h
index 0258c9e3f..67435e06a 100644
--- a/ext/mhash/php_mhash.h
+++ b/ext/mhash/php_mhash.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
| Nikos Mavroyanopoulos <nmav@hellug.gr> (HMAC, KEYGEN) |
+----------------------------------------------------------------------+
*/
-/* $Id: php_mhash.h,v 1.12.2.1.2.2 2007/12/31 07:20:08 sebastian Exp $ */
+/* $Id: php_mhash.h,v 1.12.2.1.2.3 2008/12/31 11:17:39 sebastian Exp $ */
#ifndef PHP_MHASH_H
#define PHP_MHASH_H
diff --git a/ext/mime_magic/mime_magic.c b/ext/mime_magic/mime_magic.c
index f864f6079..6a4fa6b25 100644
--- a/ext/mime_magic/mime_magic.c
+++ b/ext/mime_magic/mime_magic.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -15,7 +15,7 @@
| Author: Hartmut Holzgraefe <hholzgra@php.net> |
+----------------------------------------------------------------------+
- $Id: mime_magic.c,v 1.42.2.5.2.8 2007/12/31 07:20:08 sebastian Exp $
+ $Id: mime_magic.c,v 1.42.2.5.2.9 2008/12/31 11:17:39 sebastian Exp $
This module contains a lot of stuff taken from Apache mod_mime_magic,
so the license section is a little bit longer than usual:
diff --git a/ext/mime_magic/php_mime_magic.h b/ext/mime_magic/php_mime_magic.h
index 43f576ee1..5a346f8bf 100644
--- a/ext/mime_magic/php_mime_magic.h
+++ b/ext/mime_magic/php_mime_magic.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -15,7 +15,7 @@
| Author: |
+----------------------------------------------------------------------+
- $Id: php_mime_magic.h,v 1.11.2.1.2.2 2007/12/31 07:20:08 sebastian Exp $
+ $Id: php_mime_magic.h,v 1.11.2.1.2.3 2008/12/31 11:17:39 sebastian Exp $
*/
#ifndef PHP_MIME_MAGIC_H
diff --git a/ext/mime_magic/phpmimemagic.h b/ext/mime_magic/phpmimemagic.h
index c8426722b..2b95b5a1c 100644
--- a/ext/mime_magic/phpmimemagic.h
+++ b/ext/mime_magic/phpmimemagic.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -15,7 +15,7 @@
| Author: |
+----------------------------------------------------------------------+
- $Id: phpmimemagic.h,v 1.3.2.2.2.2 2007/12/31 07:20:08 sebastian Exp $
+ $Id: phpmimemagic.h,v 1.3.2.2.2.3 2008/12/31 11:17:39 sebastian Exp $
*/
#ifndef PHPMIMEMAGIC_H
diff --git a/ext/mime_magic/tests/magic.mime b/ext/mime_magic/tests/magic.mime
new file mode 100644
index 000000000..d688e1c9d
--- /dev/null
+++ b/ext/mime_magic/tests/magic.mime
@@ -0,0 +1,590 @@
+# This file is created from the magic.mime file from php.net 5.2.4 windows releaase
+# fixing a few entries, plus taking entries from apache "magic" file.
+# The first section is from php.net - magic.mime
+0 leshort 0x602 application/x-alan-adventure-game
+0 string TADS application/x-tads-game
+0 short 0420 application/x-executable-file
+0 short 0421 application/x-executable-file
+0 leshort 0603 application/x-executable-file
+0 string Core\001 application/x-executable-file
+0 string AMANDA:\ TAPESTART\ DATE application/x-amanda-header
+0 belong 0x000003f3 application/x-executable-file
+0 belong 0x000003e7 application/x-library-file
+0 belong 0x000001b3 video/mpeg
+0 belong 0x000001ba video/mpeg
+0 beshort&0xfff0 0xfff0 audio/mpeg
+4 leshort 0xAF11 video/fli
+4 leshort 0xAF12 video/flc
+0 string MOVI video/x-sgi-movie
+4 string moov video/quicktime
+4 string mdat video/quicktime
+0 long 0100554 application/x-apl-workspace
+0 string FiLeStArTfIlEsTaRt text/x-apple-binscii
+0 string \x0aGL application/data
+0 string \x76\xff application/data
+0 string NuFile application/data
+0 string N\xf5F\xe9l\xe5 application/data
+0 belong 0x00051600 application/data
+0 belong 0x00051607 application/data
+257 string ustar\0 application/x-tar
+257 string ustar\040\040\0 application/x-gtar
+0 short 070707 application/x-cpio
+0 short 0143561 application/x-bcpio
+0 string 070707 application/x-cpio
+0 string 070701 application/x-cpio
+0 string 070702 application/x-cpio
+0 string !<arch>\ndebian application/x-dpkg
+0 long 0177555 application/x-ar
+0 short 0177555 application/data
+0 long 0177545 application/data
+0 short 0177545 application/data
+0 long 0100554 application/x-apl-workspace
+0 string =<ar> application/x-ar
+0 string !<arch>\n__________E application/x-ar
+0 string -h- application/data
+0 string !<arch> application/x-ar
+0 string \<ar> application/x-ar
+0 string =<ar> application/x-ar
+0 belong 0x65ff0000 application/x-ar
+0 belong 0x3c61723e application/x-ar
+0 long 0x213c6172 application/x-ar
+0 lelong 0177555 application/data
+0 leshort 0177555 application/data
+0 lelong 0177545 application/data
+0 leshort 0177545 application/data
+0 lelong 0x39bed application/data
+0 lelong 0x39bee application/data
+0 lelong&0x8080ffff 0x0000081a application/x-arc
+0 lelong&0x8080ffff 0x0000091a application/x-arc
+0 lelong&0x8080ffff 0x0000021a application/x-arc
+0 lelong&0x8080ffff 0x0000031a application/x-arc
+0 lelong&0x8080ffff 0x0000041a application/x-arc
+0 lelong&0x8080ffff 0x0000061a application/x-arc
+0 string \032archive application/data
+0 leshort 0xea60 application/x-arj
+0 string HPAK application/data
+0 string \351,\001JAM\ application/data
+2 string -lh0- application/x-lha
+2 string -lh1- application/x-lha
+2 string -lz4- application/x-lha
+2 string -lz5- application/x-lha
+2 string -lzs- application/x-lha
+2 string -lh\40- application/x-lha
+2 string -lhd- application/x-lha
+2 string -lh2- application/x-lha
+2 string -lh3- application/x-lha
+2 string -lh4- application/x-lha
+2 string -lh5- application/x-lha
+0 string Rar! application/x-rar
+0 string SQSH application/data
+0 string UC2\x1a application/data
+0 string PK\003\004 application/zip
+20 lelong 0xfdc4a7dc application/x-zoo
+10 string #\ This\ is\ a\ shell\ archive application/x-shar
+0 string *STA application/data
+0 string 2278 application/data
+0 beshort 0560 application/x-executable-file
+0 beshort 0561 application/x-executable-file
+0 string \000\004\036\212\200 application/core
+0 string .snd audio/basic
+0 lelong 0x0064732E audio/basic
+0 string MThd audio/midi
+0 string CTMF audio/x-cmf
+0 string SBI audio/x-sbi
+0 string Creative\ Voice\ File audio/x-voc
+0 belong 0x4e54524b audio/x-multitrack
+0 string RIFF audio/x-wav
+0 string EMOD audio/x-emod
+0 belong 0x2e7261fd audio/x-pn-realaudio
+0 string MTM audio/x-multitrack
+0 string if audio/x-669-mod
+0 string FAR audio/mod
+0 string MAS_U audio/x-multimate-mod
+0x2c string SCRM audio/x-st3-mod
+0 string GF1PATCH110\0ID#000002\0 audio/x-gus-patch
+0 string GF1PATCH100\0ID#000002\0 audio/x-gus-patch
+0 string JN audio/x-669-mod
+0 string UN05 audio/x-mikmod-uni
+0 string Extended\ Module: audio/x-ft2-mod
+21 string !SCREAM! audio/x-st2-mod
+1080 string M.K. audio/x-protracker-mod
+1080 string M!K! audio/x-protracker-mod
+1080 string FLT4 audio/x-startracker-mod
+1080 string 4CHN audio/x-fasttracker-mod
+1080 string 6CHN audio/x-fasttracker-mod
+1080 string 8CHN audio/x-fasttracker-mod
+1080 string CD81 audio/x-oktalyzer-mod
+1080 string OKTA audio/x-oktalyzer-mod
+1080 string 16CN audio/x-taketracker-mod
+1080 string 32CN audio/x-taketracker-mod
+0 string TOC audio/x-toc
+0 short 03401 application/x-executable-file
+0 long 0406 application/x-executable-file
+0 short 0406 application/x-executable-file
+0 short 03001 application/x-executable-file
+0 lelong 000000314 application/x-executable-file
+0 string // text/cpp
+0 string \\1cw\ application/data
+0 string \\1cw application/data
+0 belong&0xffffff00 0x85011400 application/data
+0 belong&0xffffff00 0x8501cb00 application/data
+0 short 0575 application/x-executable-file
+0 short 0577 application/x-executable-file
+4 string pipe application/data
+4 string prof application/data
+0 string :\ shell application/data
+0 string #!/bin/sh application/x-sh
+0 string #!\ /bin/sh application/x-sh
+0 string #!\ /bin/sh application/x-sh
+0 string #!/bin/csh application/x-csh
+0 string #!\ /bin/csh application/x-csh
+0 string #!\ /bin/csh application/x-csh
+0 string #!/bin/ksh application/x-ksh
+0 string #!\ /bin/ksh application/x-ksh
+0 string #!\ /bin/ksh application/x-ksh
+0 string #!/bin/tcsh application/x-csh
+0 string #!\ /bin/tcsh application/x-csh
+0 string #!\ /bin/tcsh application/x-csh
+0 string #!/usr/local/tcsh application/x-csh
+0 string #!\ /usr/local/tcsh application/x-csh
+0 string #!/usr/local/bin/tcsh application/x-csh
+0 string #!\ /usr/local/bin/tcsh application/x-csh
+0 string #!\ /usr/local/bin/tcsh application/x-csh
+0 string #!/usr/local/bin/zsh application/x-zsh
+0 string #!\ /usr/local/bin/zsh application/x-zsh
+0 string #!\ /usr/local/bin/zsh application/x-zsh
+0 string #!/usr/local/bin/ash application/x-sh
+0 string #!\ /usr/local/bin/ash application/x-zsh
+0 string #!\ /usr/local/bin/ash application/x-zsh
+0 string #!/usr/local/bin/ae text/script
+0 string #!\ /usr/local/bin/ae text/script
+0 string #!\ /usr/local/bin/ae text/script
+0 string #!/bin/nawk application/x-awk
+0 string #!\ /bin/nawk application/x-awk
+0 string #!\ /bin/nawk application/x-awk
+0 string #!/usr/bin/nawk application/x-awk
+0 string #!\ /usr/bin/nawk application/x-awk
+0 string #!\ /usr/bin/nawk application/x-awk
+0 string #!/usr/local/bin/nawk application/x-awk
+0 string #!\ /usr/local/bin/nawk application/x-awk
+0 string #!\ /usr/local/bin/nawk application/x-awk
+0 string #!/bin/gawk application/x-awk
+0 string #!\ /bin/gawk application/x-awk
+0 string #!\ /bin/gawk application/x-awk
+0 string #!/usr/bin/gawk application/x-awk
+0 string #!\ /usr/bin/gawk application/x-awk
+0 string #!\ /usr/bin/gawk application/x-awk
+0 string #!/usr/local/bin/gawk application/x-awk
+0 string #!\ /usr/local/bin/gawk application/x-awk
+0 string #!\ /usr/local/bin/gawk application/x-awk
+0 string #!/bin/awk application/x-awk
+0 string #!\ /bin/awk application/x-awk
+0 string #!\ /bin/awk application/x-awk
+0 string #!/usr/bin/awk application/x-awk
+0 string #!\ /usr/bin/awk application/x-awk
+0 string #!\ /usr/bin/awk application/x-awk
+0 string BEGIN application/x-awk
+0 string #!/bin/perl application/x-perl
+0 string #!\ /bin/perl application/x-perl
+0 string #!\ /bin/perl application/x-perl
+0 string eval\ "exec\ /bin/perl application/x-perl
+0 string #!/usr/bin/perl application/x-perl
+0 string #!\ /usr/bin/perl application/x-perl
+0 string #!\ /usr/bin/perl application/x-perl
+0 string eval\ "exec\ /usr/bin/perl application/x-perl
+0 string #!/usr/local/bin/perl application/x-perl
+0 string #!\ /usr/local/bin/perl application/x-perl
+0 string #!\ /usr/local/bin/perl application/x-perl
+0 string eval\ "exec\ /usr/local/bin/perl application/x-perl
+0 string #!/bin/rc text/script
+0 string #!\ /bin/rc text/script
+0 string #!\ /bin/rc text/script
+0 string #!/bin/bash application/x-sh
+0 string #!\ /bin/bash application/x-sh
+0 string #!\ /bin/bash application/x-sh
+0 string #!/usr/local/bin/bash application/x-sh
+0 string #!\ /usr/local/bin/bash application/x-sh
+0 string #!\ /usr/local/bin/bash application/x-sh
+0 string #!\ / text/script
+0 string #!\ / text/script
+0 string #!/ text/script
+0 string #!\ text/script
+0 string \037\235 application/compress
+0 string \037\213 application/x-gzip
+0 string \037\036 application/data
+0 short 017437 application/data
+0 short 0x1fff application/data
+0 string \377\037 application/data
+0 short 0145405 application/data
+0 string BZh application/x-bzip2
+0 leshort 0xFF76 application/data
+0 leshort 0xFE76 application/data
+0 leshort 0xFD76 application/x-lzh
+0 string \037\237 application/data
+0 string \037\236 application/data
+0 string \037\240 application/data
+0 string BZ application/x-bzip
+0 string \x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a application/data
+0 belong 0507 application/x-object-file
+0 belong 0513 application/x-executable-file
+0 belong 0515 application/x-executable-file
+0 belong 0517 application/x-executable-file
+0 belong 0x011257 application/core
+24 belong 60011 application/data
+24 belong 60012 application/data
+24 belong 60013 application/data
+24 belong 60014 application/data
+0 belong 0601 application/x-object-file
+0 belong application/core
+0 belong 0607 application/data
+0 belong 0x13579ace application/x-gdbm
+0 lelong 0x13579ace application/x-gdbm
+0 string GDBM application/x-gdbm
+0 belong 0x061561 application/x-db
+0 belong 0x053162 application/x-db
+0 string =<list>\n<protocol\ bbn-m application/data
+0 string diff\ text/x-patch
+0 string ***\ text/x-patch
+0 string Only\ in\ text/x-patch
+0 string Common\ subdirectories:\ text/x-patch
+0 string !<arch>\n________64E application/data
+0 leshort 0x183 application/x-executable-file
+0 leshort 0x188 application/x-executable-file
+0 leshort 0x18f application/x-object-file
+0 string \377\377\177 application/data
+0 string \377\377\174 application/data
+0 string \377\377\176 application/data
+0 string \033c\033 application/data
+0 long 04553207 image/x11
+0 string !<PDF>!\n application/x-prof
+0 short 0x0501 application/x-locale
+24 belong 60012 application/x-dump
+24 belong 60011 application/x-dump
+24 lelong 60012 application/x-dump
+24 lelong 60011 application/x-dump
+0 string \177ELF application/x-executable-file
+0 short 0x154 application/data
+0 short 0x155 application/x-executable-file
+0x438 leshort 0xEF53 application/x-linux-ext2fs
+0 string \366\366\366\366 application/x-pc-floppy
+0774 beshort 0xdabe application/data
+0x1FE leshort 0xAA55 application/data
+0x410 leshort 0x137f application/x-filesystem
+0x410 leshort 0x138f application/x-filesystem
+0x410 leshort 0x2468 application/x-filesystem
+0x410 leshort 0x2478 application/x-filesystem
+0 string -rom1fs-\0 application/x-filesystem
+0 lelong 0x1b031336 application/x-bootable
+0x18b string OS/2 application/x-bootable
+0 string FONT font/x-vfont
+0 short 0436 font/x-vfont
+0 short 017001 font/x-vfont
+0 string %!PS-AdobeFont-1.0 font/type1
+6 string %!PS-AdobeFont-1.0 font/type1
+0 belong 00000004 font/x-snf
+0 lelong 00000004 font/x-snf
+0 string STARTFONT\040 font/x-bdf
+0 string \001fcp font/x-pcf
+0 string D1.0\015 font/x-speedo
+0 string flf font/x-figlet
+0 string flc application/x-font
+0 belong 0x14025919 font/x-libgrx
+0 belong 0xff464f4e font/x-dos
+7 belong 0x00454741 font/x-dos
+7 belong 0x00564944 font/x-dos
+4098 string DOSFONT font/x-dos
+0 string \<MakerFile application/x-framemaker
+0 string \<MIFFile application/x-framemaker
+0 string \<MakerDictionary application/x-framemaker
+0 string \<MakerScreenFont font/x-framemaker
+0 string \<MML application/x-framemaker
+0 string \<BookFile application/x-framemaker
+0 string \<Maker application/x-framemaker
+0 lelong&0377777777 041400407 application/x-executable-file
+0 lelong&0377777777 041400410 application/x-executable-file
+0 lelong&0377777777 041400413 application/x-executable-file
+0 lelong&0377777777 041400314 application/x-executable-file
+7 string \357\020\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 application/core
+0 lelong 011421044151 application/data
+0 string GIMP\ Gradient application/x-gimp-gradient
+0 string gimp\ xcf application/x-gimp-image
+20 string GPAT application/x-gimp-pattern
+20 string GIMP application/x-gimp-brush
+0 string \336\22\4\225 application/x-locale
+0 string \225\4\22\336 application/x-locale
+0 beshort 0627 application/x-executable-file
+0 beshort 0624 application/x-executable-file
+0 string \000\001\000\000\000 font/ttf
+0 long 01203604016 application/data
+0 long 01702407010 application/data
+0 long 01003405017 application/data
+0 long 01602007412 application/data
+0 belong 0x02100106 application/x-object-file
+0 belong 0x02100107 application/x-executable-file
+0 belong 0x02100108 application/x-executable-file
+0 belong 0x0210010b application/x-executable-file
+0 belong 0x0210010e application/x-library-file
+0 belong 0x0210010d application/x-library-file
+0 belong 0x02140106 application/x-object-file
+0 belong 0x02140107 application/x-executable-file
+0 belong 0x02140108 application/x-executable-file
+0 belong 0x0214010b application/x-executable-file
+0 belong 0x0214010e application/x-library-file
+0 belong 0x0214010d application/x-object-file
+0 belong 0x020b0106 application/x-object-file
+0 belong 0x020b0107 application/x-executable-file
+0 belong 0x020b0108 application/x-executable-file
+0 belong 0x020b010b application/x-executable-file
+0 belong 0x020b010e application/x-library-file
+0 belong 0x020b010d application/x-library-file
+0 belong 0x213c6172 application/x-ar
+0 long 0x02080106 application/x-executable-file
+0 long 0x02080107 application/x-executable-file
+0 long 0x02080108 application/x-executable-file
+0 belong 0x020c0108 application/x-executable-file
+0 belong 0x020c0107 application/x-executable-file
+0 belong 0x020c010b application/x-executable-file
+0 belong 0x020c0106 application/x-executable-file
+0 belong 0x020a0108 application/x-executable-file
+0 belong 0x020a0107 application/x-executable-file
+0 belong 0x020c010e application/x-library-file
+0 belong 0x020c010d application/x-library-file
+0 long 0x0000ff65 application/x-library-file
+0 long 0x020aff65 application/x-library-file
+0 long 0x020cff65 application/x-library-file
+0 long 0x0208ff65 application/x-library-file
+0 long 0x015821a6 application/core
+0 long 0x4da7eee8 font/x-hp-windows
+0 string Bitmapfile image/unknown
+#0 string IMGfile CIS image/unknown
+0 long 0x020c010c application/x-lisp
+0 string msgcat01 application/x-locale
+0 string P1 image/x-portable-bitmap
+0 string P2 image/x-portable-graymap
+0 string P3 image/x-portable-pixmap
+0 string P4 image/x-portable-bitmap
+0 string P5 image/x-portable-graymap
+0 string P6 image/x-portable-pixmap
+0 string IIN1 image/x-niff
+0 string MM\x00\x2a image/tiff
+0 string II\x2a\x00 image/tiff
+0 string \x89PNG image/x-png
+1 string PNG image/x-png
+0 string GIF8 image/gif
+0 string \361\0\100\273 image/x-cmu-raster
+0 beshort 0xffd8 image/jpeg
+0 string hsi1 image/x-jpeg-proprietary
+0 string BM image/x-bmp
+0 string IC image/x-ico
+0 belong 0x59a66a95 x/x-image-sun-raster
+0 beshort 474 x/x-image-sgi
+2048 string PCD_IPI x/x-photo-cd-pack-file
+0 string PCD_OPA x/x-photo-cd-overfiew-file
+0 leshort 0510 application/x-executable-file
+0 leshort 0511 application/x-executable-file
+0 leshort =0512 application/x-executable-file
+0 leshort =0522 application/x-executable-file
+0 leshort =0514 application/x-executable-file
+0 ubelong 0xcafebabe application/java
+0 leshort 0x0436 font/linux-psf
+0 string FFIL font/ttf
+65 string FFIL font/ttf
+0 string LWFN font/type1
+65 string LWFN font/type1
+0 string Return-Path: message/rfc822
+0 string Path: message/news
+0 string Xref: message/news
+0 string From: message/rfc822
+0 string Article message/news
+0 string BABYL message/x-gnu-rmail
+0 string Received: message/rfc822
+0 string MZ application/x-ms-dos-executable
+2080 string Microsoft\ Word\ 6.0\ Document text/vnd.ms-word
+2080 string Documento\ Microsoft\ Word\ 6 text/vnd.ms-word
+2112 string MSWordDoc text/vnd.ms-word
+0 belong 0x31be0000 text/vnd.ms-word
+0 string PO^Q` text/vnd.ms-word
+2080 string Microsoft\ Excel\ 5.0\ Worksheet application/vnd.ms-excel
+2114 string Biff5 application/vnd.ms-excel
+1 string WPC text/vnd.wordperfect
+0 string StartFontMetrics font/x-sunos-news
+0 string StartFont font/x-sunos-news
+0 belong 0x137A2944 font/x-sunos-news
+0 belong 0x137A2947 font/x-sunos-news
+0 belong 0x137A2950 font/x-sunos-news
+0 belong 0x137A2951 font/x-sunos-news
+8 belong 0x137A2B45 font/x-sunos-news
+8 belong 0x137A2B48 font/x-sunos-news
+0 string %! application/postscript
+0 string \004%! application/postscript
+0 string \033E\033 image/x-pcl-hp
+0 string \<!DOCTYPE\ HTML text/html
+0 string \<!doctype\ html text/html
+0 string \<!doctype\ HTML text/html
+0 string \<!DOCTYPE\ html text/html
+0 string \<HEAD text/html
+0 string \<head text/html
+0 string \<TITLE text/html
+0 string \<title text/html
+0 string \<html text/html
+0 string \<HTML text/html
+0 string \367\203 font/x-tex
+0 string \367\131 font/x-tex
+0 string \367\312 font/x-tex
+2 string \000\021 font/x-tex-tfm
+2 string \000\022 font/x-tex-tfm
+
+#******************************
+# Taken from apache - magic
+#******************************
+# only non continuations ones added (ie entries that don't use >) as these
+# don't appear to work.
+# did not include commented out entries, or ones that already exist
+#------------------------------------------------------------------------------
+# Bytes 0-3 of AIFF, AIFF-C, & 8SVX audio files are "FORM"
+# AIFF audio data
+8 string AIFF audio/x-aiff
+# AIFF-C audio data
+8 string AIFC audio/x-aiff
+# IFF/8SVX audio data
+8 string 8SVX audio/x-aiff
+# C64 SID Music files, from Linus Walleij <triad@df.lth.se>
+0 string PSID audio/prs.sid
+
+#------------------------------------------------------------------------------
+# XPM icons (Greg Roelofs, newt@uchicago.edu)
+0 string /*\ XPM image/x-xbm 7bit
+# C or REXX program text
+0 string /* text/plain
+# C++ program text
+
+
+#------------------------------------------------------------------------------
+# html: file(1) magic for HTML (HyperText Markup Language) docs
+#
+# from Daniel Quinlan <quinlan@yggdrasil.com>
+# and Anna Shergold <anna@inext.co.uk>
+#
+0 string \<!-- text/html
+0 string \<h1 text/html
+0 string \<H1 text/html
+
+# XML eXtensible Markup Language, from Linus Walleij <triad@df.lth.se>
+0 string \<?xml text/xml
+
+#------------------------------------------------------------------------------
+# images: file(1) magic for image formats (see also "c-lang" for XPM bitmaps)
+#
+# originally from jef@helios.ee.lbl.gov (Jef Poskanzer),
+# additions by janl@ifi.uio.no as well as others. Jan also suggested
+# merging several one- and two-line files into here.
+#
+# XXX - byte order for GIF and TIFF fields?
+# [GRR: TIFF allows both byte orders; GIF is probably little-endian]
+#
+
+# PBMPLUS
+# PBM file
+0 string P1 image/x-portable-bitmap 7bit
+# PGM file
+0 string P2 image/x-portable-greymap 7bit
+# PPM file
+0 string P3 image/x-portable-pixmap 7bit
+# PBM "rawbits" file
+0 string P4 image/x-portable-bitmap
+# PGM "rawbits" file
+0 string P5 image/x-portable-greymap
+# PPM "rawbits" file
+0 string P6 image/x-portable-pixmap
+
+# possible GIF replacements; none yet released!
+# (Greg Roelofs, newt@uchicago.edu)
+#
+# GRR 950115: this was mine ("Zip GIF"):
+# ZIF image (GIF+deflate alpha)
+0 string GIF94z image/unknown
+#
+# GRR 950115: this is Jeremy Wohl's Free Graphics Format (better):
+# FGF image (GIF+deflate beta)
+0 string FGF95a image/unknown
+#
+# GRR 950115: this is Thomas Boutell's Portable Bitmap Format proposal
+# (best; not yet implemented):
+# PBF image (deflate compression)
+0 string PBF image/unknown
+
+#------------------------------------------------------------------------------
+# lisp: file(1) magic for lisp programs
+#
+# various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com)
+0 string ;; text/plain 8bit
+# Emacs 18 - this is always correct, but not very magical.
+0 string \012( application/x-elc
+# Emacs 19
+0 string ;ELC\023\000\000\000 application/x-elc
+
+#------------------------------------------------------------------------------
+# mail.news: file(1) magic for mail and news
+#
+# There are tests to ascmagic.c to cope with mail and news.
+0 string Relay-Version: message/rfc822 7bit
+0 string #!\ rnews message/rfc822 7bit
+0 string N#!\ rnews message/rfc822 7bit
+0 string Forward\ to message/rfc822 7bit
+0 string Pipe\ to message/rfc822 7bit
+#------------------------------------------------------------------------------
+# msword: file(1) magic for MS Word files
+#
+# Contributor claims:
+# Reversed-engineered MS Word magic numbers
+#
+0 string \376\067\0\043 application/msword
+0 string \333\245-\0\0\0 application/msword
+
+#------------------------------------------------------------------------------
+# printer: file(1) magic for printer-formatted files
+#
+# Acrobat
+# (due to clamen@cs.cmu.edu)
+0 string %PDF- application/pdf
+
+#------------------------------------------------------------------------------
+# sc: file(1) magic for "sc" spreadsheet
+#
+38 string Spreadsheet application/x-sc
+
+#------------------------------------------------------------------------------
+# tex: file(1) magic for TeX files
+#
+# XXX - needs byte-endian stuff (big-endian and little-endian DVI?)
+#
+# From <conklin@talisman.kaleida.com>
+
+# correct TeX magic for Linux (and maybe more)
+# from Peter Tobias (tobias@server.et-inf.fho-emden.de)
+#
+0 leshort 0x02f7 application/x-dvi
+
+# RTF - Rich Text Format
+0 string {\\rtf application/rtf
+
+#------------------------------------------------------------------------------
+# animation: file(1) magic for animation/movie formats
+#
+# animation formats, originally from vax@ccwf.cc.utexas.edu (VaX#n8)
+# MPEG file
+0 string \000\000\001\263 video/mpeg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ext/mime_magic/tests/mime_content_type_basic.phpt b/ext/mime_magic/tests/mime_content_type_basic.phpt
new file mode 100644
index 000000000..c91b343cb
--- /dev/null
+++ b/ext/mime_magic/tests/mime_content_type_basic.phpt
@@ -0,0 +1,69 @@
+--TEST--
+Test mime_content_type() function : basic test
+--SKIPIF--
+<?php if (!extension_loaded("mime_magic")) print "skip"; ?>
+--INI--
+mime_magic.magicfile = magic.mime
+mime_magic.debug = 0
+--FILE--
+<?php
+/* Prototype : string mime_content_type(string filename|resource stream)
+ * Description: Return content-type for file
+ * Source code: ext/mime_magic/mime_magic.c
+ * Alias to functions:
+ */
+chdir(dirname(__FILE__));
+echo "--- testing files ---\n";
+var_dump(mime_content_type("mime_test.jpeg"));
+var_dump(mime_content_type("mime_test.png"));
+var_dump(mime_content_type("mime_test.gif"));
+var_dump(mime_content_type("mime_test.bmp"));
+var_dump(mime_content_type("mime_test.wav"));
+var_dump(mime_content_type("mime_test.zip"));
+var_dump(mime_content_type("mime_test.html"));
+
+
+// repeat using streams
+echo "\n--- testing streams ---\n";
+$res = fopen("mime_test.jpeg", "rb");
+var_dump(mime_content_type($res));
+fclose($res);
+$res = fopen("mime_test.png", "rb");
+var_dump(mime_content_type($res));
+fclose($res);
+$res = fopen("mime_test.gif", "rb");
+var_dump(mime_content_type($res));
+fclose($res);
+$res = fopen("mime_test.bmp", "rb");
+var_dump(mime_content_type($res));
+fclose($res);
+$res = fopen("mime_test.wav", "rb");
+var_dump(mime_content_type($res));
+fclose($res);
+$res = fopen("mime_test.zip", "rb");
+var_dump(mime_content_type($res));
+fclose($res);
+$res = fopen("mime_test.html", "rb");
+var_dump(mime_content_type($res));
+fclose($res);
+echo "Done";
+?>
+--EXPECT--
+--- testing files ---
+string(10) "image/jpeg"
+string(11) "image/x-png"
+string(9) "image/gif"
+string(11) "image/x-bmp"
+string(11) "audio/x-wav"
+string(15) "application/zip"
+string(9) "text/html"
+
+--- testing streams ---
+string(10) "image/jpeg"
+string(11) "image/x-png"
+string(9) "image/gif"
+string(11) "image/x-bmp"
+string(11) "audio/x-wav"
+string(15) "application/zip"
+string(9) "text/html"
+Done \ No newline at end of file
diff --git a/ext/mime_magic/tests/mime_content_type_error.phpt b/ext/mime_magic/tests/mime_content_type_error.phpt
new file mode 100644
index 000000000..4f29d8e2a
--- /dev/null
+++ b/ext/mime_magic/tests/mime_content_type_error.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Test mime_content_type() function : error
+--SKIPIF--
+<?php if (!extension_loaded("mime_magic")) print "skip"; ?>
+--FILE--
+<?php
+/* Prototype : string mime_content_type(string filename|resource stream)
+ * Description: Return content-type for file
+ * Source code: ext/mime_magic/mime_magic.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mime_content_type() : error ***\n";
+
+// Zero arguments
+echo "\n-- Testing mime_content_type() function with Zero arguments --\n";
+var_dump( mime_content_type() );
+
+//Test mime_content_type with one more than the expected number of arguments
+echo "\n-- Testing mime_content_type() function with more than expected no. of arguments --\n";
+
+$extra_arg = 10;
+var_dump( mime_content_type("mime_test.jpg", $extra_arg) );
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mime_content_type() : error ***
+
+-- Testing mime_content_type() function with Zero arguments --
+
+Warning: mime_content_type() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing mime_content_type() function with more than expected no. of arguments --
+
+Warning: mime_content_type() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
diff --git a/ext/mime_magic/tests/mime_content_type_variation.phpt b/ext/mime_magic/tests/mime_content_type_variation.phpt
new file mode 100644
index 000000000..1a727c11e
--- /dev/null
+++ b/ext/mime_magic/tests/mime_content_type_variation.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test mime_content_type() function : variation
+--SKIPIF--
+<?php if (!extension_loaded("mime_magic")) print "skip"; ?>
+--INI--
+mime_magic.magicfile = magic.mime
+mime_magic.debug = 0
+--FILE--
+<?php
+/* Prototype : string mime_content_type(string filename|resource stream)
+ * Description: Return content-type for file
+ * Source code: ext/mime_magic/mime_magic.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mime_content_type() : variation ***\n";
+
+
+var_dump(mime_content_type("mime_test_wrong.jpeg"));
+
+// try a zero length file
+$tmpFile = __FILE__.'tmp';
+$f = fopen($tmpFile,"w");
+fclose($f);
+
+var_dump(mime_content_type($tmpFile));
+unlink($tmpFile);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing mime_content_type() : variation ***
+bool(false)
+string(10) "text/plain"
+===DONE===
diff --git a/ext/mime_magic/tests/mime_content_type_variation1.phpt b/ext/mime_magic/tests/mime_content_type_variation1.phpt
new file mode 100644
index 000000000..fda675088
--- /dev/null
+++ b/ext/mime_magic/tests/mime_content_type_variation1.phpt
@@ -0,0 +1,238 @@
+--TEST--
+Test mime_content_type() function : usage variation
+--SKIPIF--
+<?php if (!extension_loaded("mime_magic")) print "skip"; ?>
+--FILE--
+<?php
+/* Prototype : string mime_content_type(string filename|resource stream)
+ * Description: Return content-type for file
+ * Source code: ext/mime_magic/mime_magic.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mime_content_type() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//resource
+$xmlRes = xml_parser_create();
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // different type of resource
+ 'xml resource' => $xmlRes,
+);
+
+// loop through each element of the array for fp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( mime_content_type($value) );
+};
+
+xml_parser_free($xmlRes);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mime_content_type() : usage variation ***
+
+--int 0--
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+
+--int 1--
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+
+--float .5--
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+
+--empty array--
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+
+--empty string DQ--
+bool(false)
+
+--empty string SQ--
+bool(false)
+
+--string DQ--
+bool(false)
+
+--string SQ--
+bool(false)
+
+--mixed case string--
+bool(false)
+
+--heredoc--
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+
+--xml resource--
+Error: 2 - mime_content_type(): supplied resource is not a valid stream resource, %s(%d)
+Error: 2 - mime_content_type(): can only process string or stream arguments, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/mime_magic/tests/mime_test.bmp b/ext/mime_magic/tests/mime_test.bmp
new file mode 100644
index 000000000..bb6f4efad
--- /dev/null
+++ b/ext/mime_magic/tests/mime_test.bmp
Binary files differ
diff --git a/ext/mime_magic/tests/mime_test.class b/ext/mime_magic/tests/mime_test.class
new file mode 100644
index 000000000..81960e581
--- /dev/null
+++ b/ext/mime_magic/tests/mime_test.class
Binary files differ
diff --git a/ext/mime_magic/tests/mime_test.gif b/ext/mime_magic/tests/mime_test.gif
new file mode 100644
index 000000000..40aa4331c
--- /dev/null
+++ b/ext/mime_magic/tests/mime_test.gif
Binary files differ
diff --git a/ext/mime_magic/tests/mime_test.html b/ext/mime_magic/tests/mime_test.html
new file mode 100644
index 000000000..ec18b8ed8
--- /dev/null
+++ b/ext/mime_magic/tests/mime_test.html
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>mime_test</title>
+</head>
+<body>
+mime_test
+</body>
+</html> \ No newline at end of file
diff --git a/ext/mime_magic/tests/mime_test.jpeg b/ext/mime_magic/tests/mime_test.jpeg
new file mode 100644
index 000000000..7283d1a47
--- /dev/null
+++ b/ext/mime_magic/tests/mime_test.jpeg
Binary files differ
diff --git a/ext/mime_magic/tests/mime_test.png b/ext/mime_magic/tests/mime_test.png
new file mode 100644
index 000000000..f8c12dfd0
--- /dev/null
+++ b/ext/mime_magic/tests/mime_test.png
Binary files differ
diff --git a/ext/mime_magic/tests/mime_test.wav b/ext/mime_magic/tests/mime_test.wav
new file mode 100644
index 000000000..b5d5eaf12
--- /dev/null
+++ b/ext/mime_magic/tests/mime_test.wav
Binary files differ
diff --git a/ext/mime_magic/tests/mime_test.zip b/ext/mime_magic/tests/mime_test.zip
new file mode 100644
index 000000000..fef451e52
--- /dev/null
+++ b/ext/mime_magic/tests/mime_test.zip
Binary files differ
diff --git a/ext/ming/ming.c b/ext/ming/ming.c
index 0f63216fa..891a4388e 100644
--- a/ext/ming/ming.c
+++ b/ext/ming/ming.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: ming.c,v 1.79.2.4.2.9 2007/12/31 07:20:08 sebastian Exp $ */
+/* $Id: ming.c,v 1.79.2.4.2.10 2008/12/31 11:17:39 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/ming/php_ming.h b/ext/ming/php_ming.h
index 5de1ab97a..68b04c81a 100644
--- a/ext/ming/php_ming.h
+++ b/ext/ming/php_ming.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_ming.h,v 1.17.2.1.2.4 2007/12/31 07:20:08 sebastian Exp $ */
+/* $Id: php_ming.h,v 1.17.2.1.2.5 2008/12/31 11:17:40 sebastian Exp $ */
#ifndef _PHP_MING_H
#define _PHP_MING_H
diff --git a/ext/msql/php_msql.c b/ext/msql/php_msql.c
index 27440a459..3911726e3 100644
--- a/ext/msql/php_msql.c
+++ b/ext/msql/php_msql.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_msql.c,v 1.60.2.4.2.3 2007/12/31 07:20:08 sebastian Exp $ */
+/* $Id: php_msql.c,v 1.60.2.4.2.4 2008/12/31 11:17:40 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/msql/php_msql.h b/ext/msql/php_msql.h
index 4fdca4f58..b09efa0e5 100644
--- a/ext/msql/php_msql.h
+++ b/ext/msql/php_msql.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_msql.h,v 1.13.2.1.2.2 2007/12/31 07:20:08 sebastian Exp $ */
+/* $Id: php_msql.h,v 1.13.2.1.2.3 2008/12/31 11:17:40 sebastian Exp $ */
#ifndef PHP_MSQL_H
#define PHP_MSQL_H
diff --git a/ext/mssql/config.m4 b/ext/mssql/config.m4
index 841578305..482f4e3b1 100644
--- a/ext/mssql/config.m4
+++ b/ext/mssql/config.m4
@@ -1,5 +1,5 @@
dnl
-dnl $Id: config.m4,v 1.9.2.2.2.1 2007/07/03 17:25:34 sniper Exp $
+dnl $Id: config.m4,v 1.9.2.2.2.2 2008/10/04 13:19:22 felipe Exp $
dnl
PHP_ARG_WITH(mssql,for MSSQL support via FreeTDS,
@@ -10,11 +10,11 @@ if test "$PHP_MSSQL" != "no"; then
if test "$PHP_MSSQL" = "yes"; then
for i in /usr/local /usr; do
- if test -f $i/include/tds.h; then
+ if test -f $i/include/sybdb.h; then
FREETDS_INSTALLATION_DIR=$i
FREETDS_INCLUDE_DIR=$i/include
break
- elif test -f $i/include/freetds/tds.h; then
+ elif test -f $i/include/freetds/sybdb.h; then
FREETDS_INSTALLATION_DIR=$i
FREETDS_INCLUDE_DIR=$i/include/freetds
break
@@ -27,10 +27,10 @@ if test "$PHP_MSSQL" != "no"; then
elif test "$PHP_MSSQL" != "no"; then
- if test -f $PHP_MSSQL/include/tds.h; then
+ if test -f $PHP_MSSQL/include/sybdb.h; then
FREETDS_INSTALLATION_DIR=$PHP_MSSQL
FREETDS_INCLUDE_DIR=$PHP_MSSQL/include
- elif test -f $PHP_MSSQL/include/freetds/tds.h; then
+ elif test -f $PHP_MSSQL/include/freetds/sybdb.h; then
FREETDS_INSTALLATION_DIR=$PHP_MSSQL
FREETDS_INCLUDE_DIR=$PHP_MSSQL/include/freetds
else
@@ -38,8 +38,8 @@ if test "$PHP_MSSQL" != "no"; then
fi
fi
- if test ! -r "$FREETDS_INSTALLATION_DIR/$PHP_LIBDIR/libtds.a" && test ! -r "$FREETDS_INSTALLATION_DIR/$PHP_LIBDIR/libtds.so"; then
- AC_MSG_ERROR(Could not find $FREETDS_INSTALLATION_DIR/$PHP_LIBDIR/libtds.[a|so])
+ if test ! -r "$FREETDS_INSTALLATION_DIR/$PHP_LIBDIR/libsybdb.a" && test ! -r "$FREETDS_INSTALLATION_DIR/$PHP_LIBDIR/libsybdb.so"; then
+ AC_MSG_ERROR(Could not find $FREETDS_INSTALLATION_DIR/$PHP_LIBDIR/libsybdb.[a|so])
fi
PHP_ADD_INCLUDE($FREETDS_INCLUDE_DIR)
diff --git a/ext/mssql/php_mssql.c b/ext/mssql/php_mssql.c
index 549d3fd40..ed75d4071 100644
--- a/ext/mssql/php_mssql.c
+++ b/ext/mssql/php_mssql.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_mssql.c,v 1.152.2.13.2.8 2008/03/05 23:53:23 iliaa Exp $ */
+/* $Id: php_mssql.c,v 1.152.2.13.2.12 2009/02/23 21:21:23 kalle Exp $ */
#ifdef COMPILE_DL_MSSQL
#define HAVE_MSSQL 1
@@ -876,11 +876,15 @@ static void php_mssql_get_column_content_with_type(mssql_link *mssql_ptr,int off
unsigned char *res_buf;
int res_length = dbdatlen(mssql_ptr->link, offset);
- res_buf = (unsigned char *) emalloc(res_length+1);
- bin = ((DBBINARY *)dbdata(mssql_ptr->link, offset));
- memcpy(res_buf,bin,res_length);
- res_buf[res_length] = '\0';
- ZVAL_STRINGL(result, res_buf, res_length, 0);
+ if (!res_length) {
+ ZVAL_NULL(result);
+ } else {
+ bin = ((DBBINARY *)dbdata(mssql_ptr->link, offset));
+ res_buf = (unsigned char *) emalloc(res_length+1);
+ memcpy(res_buf,bin,res_length);
+ res_buf[res_length] = '\0';
+ ZVAL_STRINGL(result, res_buf, res_length, 0);
+ }
}
break;
case SQLNUMERIC:
@@ -934,7 +938,7 @@ static void php_mssql_get_column_content_with_type(mssql_link *mssql_ptr,int off
}
}
-static void php_mssql_get_column_content_without_type(mssql_link *mssql_ptr,int offset,zval *result, int column_type TSRMLS_DC)
+static void php_mssql_get_column_content_without_type(mssql_link *mssql_ptr, int offset,zval *result, int column_type TSRMLS_DC)
{
if (dbdatlen(mssql_ptr->link,offset) == 0) {
ZVAL_NULL(result);
@@ -2154,11 +2158,12 @@ PHP_FUNCTION(mssql_execute)
int num_fields;
int batchsize;
int ac = ZEND_NUM_ARGS();
+ int exec_retval;
batchsize = MS_SQL_G(batchsize);
if (ac < 1 || ac > 2 || zend_get_parameters_ex(ac, &stmt, &skip)==FAILURE) {
- WRONG_PARAM_COUNT;
- }
+ WRONG_PARAM_COUNT;
+ }
if (ac == 2) {
skip_results = Z_BVAL_PP(skip);
}
@@ -2166,10 +2171,15 @@ PHP_FUNCTION(mssql_execute)
ZEND_FETCH_RESOURCE(statement, mssql_statement *, stmt, -1, "MS SQL-Statement", le_statement);
mssql_ptr=statement->link;
+ exec_retval = dbrpcexec(mssql_ptr->link);
- if (dbrpcexec(mssql_ptr->link)==FAIL || dbsqlok(mssql_ptr->link)==FAIL) {
+ if (exec_retval == FAIL || dbsqlok(mssql_ptr->link) == FAIL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "stored procedure execution failed");
- dbcancel(mssql_ptr->link);
+
+ if (exec_retval == FAIL) {
+ dbcancel(mssql_ptr->link);
+ }
+
RETURN_FALSE;
}
diff --git a/ext/mssql/php_mssql.h b/ext/mssql/php_mssql.h
index 049d58a03..586864400 100644
--- a/ext/mssql/php_mssql.h
+++ b/ext/mssql/php_mssql.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
*/
-/* $Id: php_mssql.h,v 1.42.2.3.2.2 2007/12/31 07:20:08 sebastian Exp $ */
+/* $Id: php_mssql.h,v 1.42.2.3.2.3 2008/12/31 11:17:40 sebastian Exp $ */
#ifndef PHP_MSSQL_H
#define PHP_MSSQL_H
diff --git a/ext/mysql/php_mysql.c b/ext/mysql/php_mysql.c
index 4fa30fb4b..d5c494a64 100644
--- a/ext/mysql/php_mysql.c
+++ b/ext/mysql/php_mysql.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_mysql.c,v 1.213.2.6.2.25 2008/04/16 08:54:44 tony2001 Exp $ */
+/* $Id: php_mysql.c,v 1.213.2.6.2.26 2008/12/31 11:17:40 sebastian Exp $ */
/* TODO:
*
diff --git a/ext/mysql/php_mysql.h b/ext/mysql/php_mysql.h
index 95b5e433e..0fe1abec6 100644
--- a/ext/mysql/php_mysql.h
+++ b/ext/mysql/php_mysql.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
*/
-/* $Id: php_mysql.h,v 1.37.2.1.2.4 2007/12/31 07:20:08 sebastian Exp $ */
+/* $Id: php_mysql.h,v 1.37.2.1.2.5 2008/12/31 11:17:40 sebastian Exp $ */
#ifndef PHP_MYSQL_H
#define PHP_MYSQL_H
diff --git a/ext/mysql/php_mysql_structs.h b/ext/mysql/php_mysql_structs.h
index d4947f640..73f6be0ce 100644
--- a/ext/mysql/php_mysql_structs.h
+++ b/ext/mysql/php_mysql_structs.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
*/
-/* $Id: php_mysql_structs.h,v 1.1.4.3 2007/12/31 07:20:08 sebastian Exp $ */
+/* $Id: php_mysql_structs.h,v 1.1.4.4 2008/12/31 11:17:40 sebastian Exp $ */
#ifndef PHP_MYSQL_STRUCTS_H
#define PHP_MYSQL_STRUCTS_H
diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c
index 90d941991..9252cd6a2 100644
--- a/ext/mysqli/mysqli.c
+++ b/ext/mysqli/mysqli.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -15,7 +15,7 @@
| Author: Georg Richter <georg@php.net> |
+----------------------------------------------------------------------+
- $Id: mysqli.c,v 1.72.2.16.2.25 2008/03/08 14:59:37 andrey Exp $
+ $Id: mysqli.c,v 1.72.2.16.2.28 2009/02/17 10:40:18 johannes Exp $
*/
#ifdef HAVE_CONFIG_H
@@ -254,13 +254,6 @@ zval *mysqli_read_property(zval *object, zval *member, int type TSRMLS_DC)
}
if (ret == SUCCESS) {
- if (strcmp(obj->zo.ce->name, "mysqli_driver") &&
- (!obj->ptr || ((MYSQLI_RESOURCE *)(obj->ptr))->status < MYSQLI_STATUS_INITIALIZED)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't fetch %s", obj->zo.ce->name );
- retval = EG(uninitialized_zval_ptr);
- return(retval);
- }
-
ret = hnd->read_func(obj, &retval TSRMLS_CC);
if (ret == SUCCESS) {
/* ensure we're creating a temporary variable */
@@ -639,11 +632,13 @@ PHP_MINIT_FUNCTION(mysqli)
REGISTER_LONG_CONSTANT("MYSQLI_SET_CHARSET_NAME", MYSQL_SET_CHARSET_NAME, CONST_CS | CONST_PERSISTENT);
+#ifdef HAVE_LIBMYSQL_REPLICATION
/* replication */
REGISTER_LONG_CONSTANT("MYSQLI_RPL_MASTER", MYSQL_RPL_MASTER, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("MYSQLI_RPL_SLAVE", MYSQL_RPL_SLAVE, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("MYSQLI_RPL_ADMIN", MYSQL_RPL_ADMIN, CONST_CS | CONST_PERSISTENT);
-
+#endif
+
/* bind support */
REGISTER_LONG_CONSTANT("MYSQLI_NO_DATA", MYSQL_NO_DATA, CONST_CS | CONST_PERSISTENT);
#ifdef MYSQL_DATA_TRUNCATED
diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c
index 57cc96a88..2ea5bf7ee 100644
--- a/ext/mysqli/mysqli_api.c
+++ b/ext/mysqli/mysqli_api.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -15,7 +15,7 @@
| Author: Georg Richter <georg@php.net> |
+----------------------------------------------------------------------+
- $Id: mysqli_api.c,v 1.118.2.22.2.20 2008/01/01 16:51:09 hholzgra Exp $
+ $Id: mysqli_api.c,v 1.118.2.22.2.22 2008/12/31 11:17:40 sebastian Exp $
*/
#ifdef HAVE_CONFIG_H
@@ -1425,14 +1425,20 @@ PHP_FUNCTION(mysqli_real_connect)
/* TODO: safe mode handling */
if (PG(sql_safe_mode)) {
} else {
+ if (!socket_len || !socket) {
+ socket = MyG(default_socket);
+ }
+ if (!port) {
+ port = MyG(default_port);
+ }
if (!passwd) {
passwd = MyG(default_pw);
- if (!username){
- username = MyG(default_user);
- if (!hostname) {
- hostname = MyG(default_host);
- }
- }
+ }
+ if (!username){
+ username = MyG(default_user);
+ }
+ if (!hostname) {
+ hostname = MyG(default_host);
}
}
diff --git a/ext/mysqli/mysqli_driver.c b/ext/mysqli/mysqli_driver.c
index 6fd4fb74a..b013a808f 100644
--- a/ext/mysqli/mysqli_driver.c
+++ b/ext/mysqli/mysqli_driver.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/mysqli/mysqli_embedded.c b/ext/mysqli/mysqli_embedded.c
index 042fb42ec..15023ff19 100644
--- a/ext/mysqli/mysqli_embedded.c
+++ b/ext/mysqli/mysqli_embedded.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/mysqli/mysqli_exception.c b/ext/mysqli/mysqli_exception.c
index e523a6322..b63ab82ba 100644
--- a/ext/mysqli/mysqli_exception.c
+++ b/ext/mysqli/mysqli_exception.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/mysqli/mysqli_fe.c b/ext/mysqli/mysqli_fe.c
index 1eb2ec83b..dcff7b295 100644
--- a/ext/mysqli/mysqli_fe.c
+++ b/ext/mysqli/mysqli_fe.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -15,7 +15,7 @@
| Author: Georg Richter <georg@php.net> |
+----------------------------------------------------------------------+
- $Id: mysqli_fe.c,v 1.49.2.5.2.2 2007/12/31 07:20:08 sebastian Exp $
+ $Id: mysqli_fe.c,v 1.49.2.5.2.4 2008/12/31 11:17:40 sebastian Exp $
*/
#ifdef HAVE_CONFIG_H
@@ -62,11 +62,15 @@ zend_function_entry mysqli_functions[] = {
PHP_FE(mysqli_connect_error, NULL)
PHP_FE(mysqli_data_seek, NULL)
PHP_FE(mysqli_debug, NULL)
+#ifdef HAVE_LIBMYSQL_REPLICATION
PHP_FE(mysqli_disable_reads_from_master, NULL)
PHP_FE(mysqli_disable_rpl_parse, NULL)
+#endif
PHP_FE(mysqli_dump_debug_info, NULL)
+#ifdef HAVE_LIBMYSQL_REPLICATION
PHP_FE(mysqli_enable_reads_from_master, NULL)
PHP_FE(mysqli_enable_rpl_parse, NULL)
+#endif
PHP_FE(mysqli_embedded_server_end, NULL)
PHP_FE(mysqli_embedded_server_start, NULL)
PHP_FE(mysqli_errno, NULL)
@@ -101,7 +105,9 @@ zend_function_entry mysqli_functions[] = {
PHP_FE(mysqli_kill, NULL)
PHP_FE(mysqli_set_local_infile_default, NULL)
PHP_FE(mysqli_set_local_infile_handler, NULL)
+#ifdef HAVE_LIBMYSQL_REPLICATION
PHP_FE(mysqli_master_query, NULL)
+#endif
PHP_FE(mysqli_more_results, NULL)
PHP_FE(mysqli_multi_query, NULL)
PHP_FE(mysqli_next_result, NULL)
@@ -116,9 +122,11 @@ zend_function_entry mysqli_functions[] = {
PHP_FE(mysqli_real_escape_string, NULL)
PHP_FE(mysqli_real_query, NULL)
PHP_FE(mysqli_rollback, NULL)
+#ifdef HAVE_LIBMYSQL_REPLICATION
PHP_FE(mysqli_rpl_parse_enabled, NULL)
PHP_FE(mysqli_rpl_probe, NULL)
PHP_FE(mysqli_rpl_query_type, NULL)
+#endif
PHP_FE(mysqli_select_db, NULL)
#ifdef HAVE_MYSQLI_SET_CHARSET
PHP_FE(mysqli_set_charset, NULL)
@@ -138,8 +146,10 @@ zend_function_entry mysqli_functions[] = {
PHP_FE(mysqli_stmt_insert_id, NULL)
PHP_FE(mysqli_stmt_reset, NULL)
PHP_FE(mysqli_stmt_param_count, NULL)
+#ifdef HAVE_LIBMYSQL_REPLICATION
PHP_FE(mysqli_send_query, NULL)
PHP_FE(mysqli_slave_query, NULL)
+#endif
PHP_FE(mysqli_sqlstate, NULL)
PHP_FE(mysqli_ssl_set, NULL)
PHP_FE(mysqli_stat, NULL)
@@ -185,11 +195,15 @@ zend_function_entry mysqli_link_methods[] = {
PHP_FALIAS(commit,mysqli_commit,NULL)
PHP_FALIAS(connect,mysqli_connect,NULL)
PHP_FALIAS(debug,mysqli_debug,NULL)
+#ifdef HAVE_LIBMYSQL_REPLICATION
PHP_FALIAS(disable_reads_from_master,mysqli_disable_reads_from_master,NULL)
PHP_FALIAS(disable_rpl_parse,mysqli_disable_rpl_parse,NULL)
+#endif
PHP_FALIAS(dump_debug_info,mysqli_dump_debug_info,NULL)
+#ifdef HAVE_LIBMYSQL_REPLICATION
PHP_FALIAS(enable_reads_from_master,mysqli_enable_reads_from_master,NULL)
PHP_FALIAS(enable_rpl_parse,mysqli_enable_rpl_parse,NULL)
+#endif
#ifdef HAVE_MYSQLI_GET_CHARSET
PHP_FALIAS(get_charset,mysqli_get_charset,NULL)
#endif
@@ -200,7 +214,9 @@ zend_function_entry mysqli_link_methods[] = {
PHP_FALIAS(kill,mysqli_kill,NULL)
PHP_FALIAS(set_local_infile_default,mysqli_set_local_infile_default,NULL)
PHP_FALIAS(set_local_infile_handler,mysqli_set_local_infile_handler,NULL)
+#ifdef HAVE_LIBMYSQL_REPLICATION
PHP_FALIAS(master_query,mysqli_master_query,NULL)
+#endif
PHP_FALIAS(multi_query,mysqli_multi_query,NULL)
PHP_FALIAS(mysqli,mysqli_connect,NULL)
PHP_FALIAS(more_results,mysqli_more_results, NULL)
@@ -214,15 +230,20 @@ zend_function_entry mysqli_link_methods[] = {
PHP_FALIAS(escape_string, mysqli_real_escape_string,NULL)
PHP_FALIAS(real_query,mysqli_real_query,NULL)
PHP_FALIAS(rollback,mysqli_rollback,NULL)
+#ifdef HAVE_LIBMYSQL_REPLICATION
PHP_FALIAS(rpl_parse_enabled,mysqli_rpl_parse_enabled,NULL)
PHP_FALIAS(rpl_probe,mysqli_rpl_probe,NULL)
PHP_FALIAS(rpl_query_type,mysqli_rpl_query_type,NULL)
+#endif
PHP_FALIAS(select_db,mysqli_select_db,NULL)
#ifdef HAVE_MYSQLI_SET_CHARSET
PHP_FALIAS(set_charset,mysqli_set_charset,NULL)
#endif
PHP_FALIAS(set_opt, mysqli_options,NULL)
+#ifdef HAVE_LIBMYSQL_REPLICATION
+ PHP_FALIAS(send_query,mysqli_send_query,NULL)
PHP_FALIAS(slave_query,mysqli_slave_query,NULL)
+#endif
PHP_FALIAS(ssl_set,mysqli_ssl_set,NULL)
PHP_FALIAS(stat,mysqli_stat,NULL)
PHP_FALIAS(stmt_init,mysqli_stmt_init, NULL)
diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c
index 3bc8fc183..ae8b9e63c 100644
--- a/ext/mysqli/mysqli_nonapi.c
+++ b/ext/mysqli/mysqli_nonapi.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -15,7 +15,7 @@
| Author: Georg Richter <georg@php.net> |
+----------------------------------------------------------------------+
- $Id: mysqli_nonapi.c,v 1.54.2.7.2.6 2007/12/31 07:20:08 sebastian Exp $
+ $Id: mysqli_nonapi.c,v 1.54.2.7.2.8 2008/12/31 11:17:40 sebastian Exp $
*/
#ifdef HAVE_CONFIG_H
@@ -56,14 +56,20 @@ PHP_FUNCTION(mysqli_connect)
/* TODO: safe mode handling */
if (PG(sql_safe_mode)){
} else {
+ if (!socket_len || !socket) {
+ socket = MyG(default_socket);
+ }
+ if (!port) {
+ port = MyG(default_port);
+ }
if (!passwd) {
passwd = MyG(default_pw);
- if (!username){
- username = MyG(default_user);
- if (!hostname) {
- hostname = MyG(default_host);
- }
- }
+ }
+ if (!username){
+ username = MyG(default_user);
+ }
+ if (!hostname) {
+ hostname = MyG(default_host);
}
}
diff --git a/ext/mysqli/mysqli_prop.c b/ext/mysqli/mysqli_prop.c
index 9fc9047e0..59753f819 100644
--- a/ext/mysqli/mysqli_prop.c
+++ b/ext/mysqli/mysqli_prop.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -15,7 +15,7 @@
| Author: Georg Richter <georg@php.net> |
+----------------------------------------------------------------------+
- $Id: mysqli_prop.c,v 1.23.2.5.2.4 2007/12/31 07:20:08 sebastian Exp $
+ $Id: mysqli_prop.c,v 1.23.2.5.2.6 2009/02/17 10:40:18 johannes Exp $
*/
#ifdef HAVE_CONFIG_H
@@ -30,7 +30,7 @@
#include "php_mysqli.h"
#define CHECK_STATUS(value) \
- if (((MYSQLI_RESOURCE *)obj->ptr)->status < value ) { \
+ if (!obj->ptr || ((MYSQLI_RESOURCE *)obj->ptr)->status < value ) { \
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Property access is not allowed yet"); \
ZVAL_NULL(*retval); \
return SUCCESS; \
@@ -134,7 +134,6 @@ static int link_client_info_read(mysqli_object *obj, zval **retval TSRMLS_DC)
static int link_connect_errno_read(mysqli_object *obj, zval **retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
- CHECK_STATUS(MYSQLI_STATUS_INITIALIZED);
ZVAL_LONG(*retval, (long)MyG(error_no));
return SUCCESS;
}
@@ -144,8 +143,11 @@ static int link_connect_errno_read(mysqli_object *obj, zval **retval TSRMLS_DC)
static int link_connect_error_read(mysqli_object *obj, zval **retval TSRMLS_DC)
{
ALLOC_ZVAL(*retval);
- CHECK_STATUS(MYSQLI_STATUS_INITIALIZED);
- ZVAL_STRING(*retval, MyG(error_msg), 1);
+ if (MyG(error_msg)) {
+ ZVAL_STRING(*retval, MyG(error_msg), 1);
+ } else {
+ ZVAL_NULL(*retval);
+ }
return SUCCESS;
}
/* }}} */
diff --git a/ext/mysqli/mysqli_repl.c b/ext/mysqli/mysqli_repl.c
index bc4e89d79..977704502 100644
--- a/ext/mysqli/mysqli_repl.c
+++ b/ext/mysqli/mysqli_repl.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -15,7 +15,7 @@
| Author: Georg Richter <georg@php.net> |
+----------------------------------------------------------------------+
- $Id: mysqli_repl.c,v 1.3.2.2.2.2 2007/12/31 07:20:08 sebastian Exp $
+ $Id: mysqli_repl.c,v 1.3.2.2.2.4 2008/12/31 11:17:40 sebastian Exp $
*/
#ifdef HAVE_CONFIG_H
@@ -29,6 +29,7 @@
#include "ext/standard/info.h"
#include "php_mysqli.h"
+#ifdef HAVE_LIBMYSQL_REPLICATION
/* {{{ proto void mysqli_disable_reads_from_master(object link)
*/
PHP_FUNCTION(mysqli_disable_reads_from_master)
@@ -211,6 +212,8 @@ PHP_FUNCTION(mysqli_slave_query)
}
/* }}} */
+#endif /* HAVE_LIBMYSQL_REPLICATION */
+
/*
* Local variables:
* tab-width: 4
diff --git a/ext/mysqli/mysqli_report.c b/ext/mysqli/mysqli_report.c
index 26a6ba267..9af0860e4 100644
--- a/ext/mysqli/mysqli_report.c
+++ b/ext/mysqli/mysqli_report.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -15,7 +15,7 @@
| Author: Georg Richter <georg@php.net> |
+----------------------------------------------------------------------+
- $Id: mysqli_report.c,v 1.11.2.2.2.3 2007/12/31 07:20:08 sebastian Exp $
+ $Id: mysqli_report.c,v 1.11.2.2.2.4 2008/12/31 11:17:40 sebastian Exp $
*/
#ifdef HAVE_CONFIG_H
diff --git a/ext/mysqli/mysqli_report.h b/ext/mysqli/mysqli_report.h
index a4a9fda3d..89f912573 100644
--- a/ext/mysqli/mysqli_report.h
+++ b/ext/mysqli/mysqli_report.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -15,7 +15,7 @@
| Author: Georg Richter <georg@php.net> |
+----------------------------------------------------------------------+
- $Id: mysqli_report.h,v 1.5.2.1.2.2 2007/12/31 07:20:08 sebastian Exp $
+ $Id: mysqli_report.h,v 1.5.2.1.2.3 2008/12/31 11:17:40 sebastian Exp $
*/
#ifndef __HAVE_MYSQLI_PROFILER_H__
diff --git a/ext/mysqli/mysqli_warning.c b/ext/mysqli/mysqli_warning.c
index 5608ef1ac..f8351eb03 100644
--- a/ext/mysqli/mysqli_warning.c
+++ b/ext/mysqli/mysqli_warning.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/mysqli/php_mysqli.h b/ext/mysqli/php_mysqli.h
index e83113aee..4177bf6fd 100644
--- a/ext/mysqli/php_mysqli.h
+++ b/ext/mysqli/php_mysqli.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -15,7 +15,7 @@
| Author: Georg Richter <georg@php.net> |
+----------------------------------------------------------------------+
- $Id: php_mysqli.h,v 1.54.2.7.2.7 2007/12/31 07:20:08 sebastian Exp $
+ $Id: php_mysqli.h,v 1.54.2.7.2.9 2008/12/31 11:17:40 sebastian Exp $
*/
/* A little hack to prevent build break, when mysql is used together with
@@ -301,6 +301,11 @@ if ((MyG(report_mode) & MYSQLI_REPORT_ERROR) && stmt->last_errno) { \
php_mysqli_report_error(stmt->sqlstate, stmt->last_errno, stmt->last_error TSRMLS_CC); \
}
+#if MYSQL_VERSION_ID > 32300 && MYSQL_VERSION_ID < 60000
+#define HAVE_LIBMYSQL_REPLICATION
+#endif
+
+
PHP_MYSQLI_API void mysqli_register_link(zval *return_value, void *link TSRMLS_DC);
PHP_MYSQLI_API void mysqli_register_stmt(zval *return_value, void *stmt TSRMLS_DC);
PHP_MYSQLI_API void mysqli_register_result(zval *return_value, void *result TSRMLS_DC);
diff --git a/ext/mysqli/tests/010.phpt b/ext/mysqli/tests/010.phpt
index 6b79d62f4..40b9676cf 100644
--- a/ext/mysqli/tests/010.phpt
+++ b/ext/mysqli/tests/010.phpt
@@ -55,5 +55,5 @@ array(7) {
[5]=>
float(1)
[6]=>
- float(888888914608000)
+ float(8.88888914608E+14)
}
diff --git a/ext/mysqli/tests/bug42548.phpt b/ext/mysqli/tests/bug42548.phpt
index 541833cf9..d1e3d03b5 100644
--- a/ext/mysqli/tests/bug42548.phpt
+++ b/ext/mysqli/tests/bug42548.phpt
@@ -1,7 +1,14 @@
--TEST--
Bug #42548 PROCEDURE xxx can't return a result set in the given context (works in 5.2.3!!)
--SKIPIF--
-<?php if (!extension_loaded("mysqli")) print "skip"; ?>
+<?php
+require_once('skipif.inc');
+
+if (mysqli_get_server_version($con) <= 50000) {
+ die(sprintf('skip Needs MySQL 5.0+, found version %d.', mysqli_get_server_version($con)));
+}
+
+?>
--FILE--
<?php
include "connect.inc";
diff --git a/ext/mysqli/tests/bug45940.phpt b/ext/mysqli/tests/bug45940.phpt
new file mode 100644
index 000000000..5a8b6bb04
--- /dev/null
+++ b/ext/mysqli/tests/bug45940.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Bug #45940 MySQLI OO does not populate connect_error property on failed connect
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+include "connect.inc";
+
+//a forced username/password mismatch
+$dbo = @new mysqli($host, 'hopenotexist', 'andifheexistshehasanotherpassword', 'my_db');
+
+var_dump($dbo->connect_error);
+var_dump(mysqli_connect_error());
+?>
+--EXPECTF--
+string(71) "Access denied for user 'hopenotexist'@'localhost' (using password: YES)"
+string(71) "Access denied for user 'hopenotexist'@'localhost' (using password: YES)"
+
diff --git a/ext/ncurses/ncurses.c b/ext/ncurses/ncurses.c
index 53fdbbcca..7e61f0015 100644
--- a/ext/ncurses/ncurses.c
+++ b/ext/ncurses/ncurses.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/ncurses/ncurses_fe.c b/ext/ncurses/ncurses_fe.c
index f790aa029..02e9278b5 100644
--- a/ext/ncurses/ncurses_fe.c
+++ b/ext/ncurses/ncurses_fe.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/ncurses/ncurses_functions.c b/ext/ncurses/ncurses_functions.c
index cfce79a3c..f16bfa6ae 100644
--- a/ext/ncurses/ncurses_functions.c
+++ b/ext/ncurses/ncurses_functions.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/ncurses/php_ncurses.h b/ext/ncurses/php_ncurses.h
index 0b9d94181..d474cf0a9 100644
--- a/ext/ncurses/php_ncurses.h
+++ b/ext/ncurses/php_ncurses.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/ncurses/php_ncurses_fe.h b/ext/ncurses/php_ncurses_fe.h
index e12b6f8fb..3b21b134d 100644
--- a/ext/ncurses/php_ncurses_fe.h
+++ b/ext/ncurses/php_ncurses_fe.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/oci8/config.m4 b/ext/oci8/config.m4
index 37c99e880..3f343f3ca 100644
--- a/ext/oci8/config.m4
+++ b/ext/oci8/config.m4
@@ -1,5 +1,5 @@
dnl
-dnl $Id: config.m4,v 1.55.2.3.2.12 2008/01/16 00:42:02 sixd Exp $
+dnl $Id: config.m4,v 1.55.2.3.2.13 2008/05/13 16:06:55 sixd Exp $
dnl
if test -z "$SED"; then
@@ -371,7 +371,7 @@ dnl version in /usr/lib
AC_MSG_CHECKING([Oracle Instant Client SDK header directory])
dnl Header directory for Instant Client SDK RPM install
- OCISDKRPMINC=`echo "$PHP_OCI8_INSTANT_CLIENT" | $PHP_OCI8_SED -e 's!^/usr/lib/oracle/\(.*\)/client\(.*\)/lib/*$!/usr/include/oracle/\1/client\2!'`
+ OCISDKRPMINC=`echo "$PHP_OCI8_INSTANT_CLIENT" | $PHP_OCI8_SED -e 's!^/usr/lib/oracle/\(.*\)/client\('${LIBDIR_SUFFIX}'\)*/lib[/]*$!/usr/include/oracle/\1/client\2!'`
dnl Header directory for Instant Client SDK zip file install
OCISDKZIPINC=$PHP_OCI8_INSTANT_CLIENT/sdk/include
diff --git a/ext/oci8/oci8.c b/ext/oci8/oci8.c
index 8f8a2b8cd..6a13b162e 100644
--- a/ext/oci8/oci8.c
+++ b/ext/oci8/oci8.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -26,7 +26,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: oci8.c,v 1.269.2.16.2.43 2008/04/10 21:53:46 sixd Exp $ */
+/* $Id: oci8.c,v 1.269.2.16.2.44 2008/12/31 11:17:40 sebastian Exp $ */
/* TODO
*
* file://localhost/www/docs/oci10/ociaahan.htm#423823 - implement lob_empty() with OCI_ATTR_LOBEMPTY
@@ -674,7 +674,7 @@ PHP_MINFO_FUNCTION(oci)
php_info_print_table_start();
php_info_print_table_row(2, "OCI8 Support", "enabled");
php_info_print_table_row(2, "Version", "1.2.5");
- php_info_print_table_row(2, "Revision", "$Revision: 1.269.2.16.2.43 $");
+ php_info_print_table_row(2, "Revision", "$Revision: 1.269.2.16.2.44 $");
snprintf(buf, sizeof(buf), "%ld", OCI_G(num_persistent));
php_info_print_table_row(2, "Active Persistent Connections", buf);
diff --git a/ext/oci8/oci8_collection.c b/ext/oci8/oci8_collection.c
index 73879a674..5040ebae1 100644
--- a/ext/oci8/oci8_collection.c
+++ b/ext/oci8/oci8_collection.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -25,7 +25,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: oci8_collection.c,v 1.5.2.3.2.9 2008/02/15 23:05:19 sixd Exp $ */
+/* $Id: oci8_collection.c,v 1.5.2.3.2.10 2008/12/31 11:17:40 sebastian Exp $ */
diff --git a/ext/oci8/oci8_interface.c b/ext/oci8/oci8_interface.c
index 071bfaba4..5fa92cd5e 100644
--- a/ext/oci8/oci8_interface.c
+++ b/ext/oci8/oci8_interface.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -25,7 +25,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: oci8_interface.c,v 1.8.2.7.2.16 2008/04/02 14:56:43 tony2001 Exp $ */
+/* $Id: oci8_interface.c,v 1.8.2.7.2.17 2008/12/31 11:17:40 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/oci8/oci8_lob.c b/ext/oci8/oci8_lob.c
index 1bccf3188..0a6aa8c61 100644
--- a/ext/oci8/oci8_lob.c
+++ b/ext/oci8/oci8_lob.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -25,7 +25,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: oci8_lob.c,v 1.7.2.6.2.18 2008/02/25 23:52:10 sixd Exp $ */
+/* $Id: oci8_lob.c,v 1.7.2.6.2.20 2008/12/31 11:17:40 sebastian Exp $ */
@@ -302,6 +302,7 @@ int php_oci_lob_read (php_oci_descriptor *descriptor, long read_length, long ini
}
if (is_clob) {
+#ifdef OCI_NLS_CHARSET_MAXBYTESZ
PHP_OCI_CALL_RETURN(connection->errcode, OCINlsNumericInfoGet, (connection->env, connection->err, &bytes_per_char, OCI_NLS_CHARSET_MAXBYTESZ));
if (connection->errcode != OCI_SUCCESS) {
@@ -309,6 +310,10 @@ int php_oci_lob_read (php_oci_descriptor *descriptor, long read_length, long ini
PHP_OCI_HANDLE_ERROR(connection, connection->errcode);
return 1;
}
+#else
+ /* Oracle 8.1 doesn't define OCI_NLS_CHARSET_MAXBYTESZ, so allocate worst case size */
+ bytes_per_char = 4;
+#endif
} else {
/* BLOBs don't have encoding, so bytes_per_char == 1 */
}
diff --git a/ext/oci8/oci8_statement.c b/ext/oci8/oci8_statement.c
index 603dbe5d9..2c565cfe1 100644
--- a/ext/oci8/oci8_statement.c
+++ b/ext/oci8/oci8_statement.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -25,7 +25,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: oci8_statement.c,v 1.7.2.14.2.33 2008/04/02 14:56:43 tony2001 Exp $ */
+/* $Id: oci8_statement.c,v 1.7.2.14.2.34 2008/12/31 11:17:40 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
diff --git a/ext/oci8/package2.xml b/ext/oci8/package2.xml
index ff96be442..e80c02d31 100644
--- a/ext/oci8/package2.xml
+++ b/ext/oci8/package2.xml
@@ -6,8 +6,7 @@ http://pear.php.net/dtd/package-2.0.xsd">
<name>oci8</name>
<channel>pecl.php.net</channel>
<summary>OCI8 functions</summary>
- <description>These functions allow you to access Oracle database servers using
-the Oracle Call Interface (OCI8).
+ <description>This extension allows you to access Oracle databases using the Oracle Call Interface (OCI8). It can be built using Oracle 9.2, 10.2 or 11.1 client libraries, and allows Oracle's standard cross-version connectivity.
</description>
<lead>
<name>Antony Dovgal</name>
@@ -33,31 +32,28 @@ the Oracle Call Interface (OCI8).
<email>sixd@php.net</email>
<active>yes</active>
</lead>
- <date>2007-09-01</date>
+ <date>2008-05-12</date>
<time>15:00:00</time>
<version>
- <release>1.2.4</release>
- <api>1.2.4</api>
+ <release>1.2.5</release>
+ <api>1.2.5</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://www.php.net/license">PHP</license>
- <notes>Added Oracle 11g support.
-Fixed PECL bug #10194 (crash in Oracle client when memory limit reached in the callback).
-Fixed bug #42173 (oci_field_type fixes for INTERVAL and TIMESTAMP types).
-Fixed bug #42134 (oci_error() returns false after oci_new_collection() fails).
-Fixed bug #41917 (oci_field_precision and oci_field_scale datatypes fixed).
-Fixed bug #41711 (Null temporary lobs not supported).
-Fixed bug #41594 (Statement cache is flushed too frequently).
-Fixed bug #40415 (oci_fetch_all and nested cursors, allocate descriptors dynamically)
-Fixed segfault on rebinding and re-executing a statement with LOBs.
-Fixed compile failure in ZTS mode when collections support is missing.
-Allowed statement cache size to be set for non-persistent connections.
-Improved oci_password_change() to close persistent connections on shutdown (to update hashed connection details).
-Changed oci_pconnect() to behave like oci_connect() when SYSDBA and SYSOPER privileges are used.
-Various minor improvements.
+ <notes>
+This release is based on the OCI8 included in PHP 5.2.6, with the addition of the fix for http://pecl.php.net/bugs/bug.php?id=13523.
+--------
+Fixed bug #42496 (cursor leak selecting LOBs http://bugs.php.net/bug.php?id=42496
+Fixed bug #42841 (crash with REF CURSORS when statement caching enabled) http://bugs.php.net/bug.php?id=42841
+Fixed bug #43497 (Temporary LOB leak) http://bugs.php.net/bug.php?id=43497
+Fixed bug #44206 (OCI8 selecting ref cursors leads to ORA-1000 maximum open cursors reached).
+Fixed bug #44008 (OCI8 incorrect usage of OCI-Lob->close crashes PHP).
+Fixed bug #44113 (new collection creation can fail with OCI-22303) http://bugs.php.net/bug.php?id=44113
+Enhancement - make -with-oci8=instantclient with no directory specified look for RPM install
+Enhancement - compile with 64bit Instant Client RPMs (bug http://bugs.php.net/bug.php?id=41941, http://pecl.php.net/bugs/bug.php?id=13523)
</notes>
<contents>
<dir name="/">
@@ -97,6 +93,7 @@ Various minor improvements.
<file name="bug35973.phpt" role="test" />
<file name="bug36010.phpt" role="test" />
<file name="bug36096.phpt" role="test" />
+ <file name="bug37220.phpt" role="test" />
<file name="bug37581.phpt" role="test" />
<file name="bug38161.phpt" role="test" />
<file name="bug38173.phpt" role="test" />
@@ -104,6 +101,17 @@ Various minor improvements.
<file name="bug40415.phpt" role="test" />
<file name="bug42134.phpt" role="test" />
<file name="bug42173.phpt" role="test" />
+ <file name="bug42496_1.phpt" role="test" />
+ <file name="bug42496_2.phpt" role="test" />
+ <file name="bug42841.phpt" role="test" />
+ <file name="bug43492_2.phpt" role="test" />
+ <file name="bug43492.phpt" role="test" />
+ <file name="bug43497_92.phpt" role="test" />
+ <file name="bug43497.phpt" role="test" />
+ <file name="bug44008.phpt" role="test" />
+ <file name="bug44113.phpt" role="test" />
+ <file name="bug44206.phpt" role="test" />
+ <file name="bug6109.phpt" role="test" />
<file name="close.phpt" role="test" />
<file name="coll_001.phpt" role="test" />
<file name="coll_002_func.phpt" role="test" />
@@ -144,6 +152,14 @@ Various minor improvements.
<file name="connect.inc" role="test" />
<file name="connect_old.phpt" role="test" />
<file name="connect.phpt" role="test" />
+ <file name="connect_scope1.phpt" role="test" />
+ <file name="connect_scope2.phpt" role="test" />
+ <file name="connect_scope_try1.phpt" role="test" />
+ <file name="connect_scope_try2.phpt" role="test" />
+ <file name="connect_scope_try3.phpt" role="test" />
+ <file name="connect_scope_try4.phpt" role="test" />
+ <file name="connect_scope_try5.phpt" role="test" />
+ <file name="connect_scope_try6.phpt" role="test" />
<file name="connect_with_charset_001.phpt" role="test" />
<file name="connect_without_oracle_home_old.phpt" role="test" />
<file name="connect_without_oracle_home.phpt" role="test" />
@@ -166,6 +182,20 @@ Various minor improvements.
<file name="define.phpt" role="test" />
<file name="descriptors.phpt" role="test" />
<file name="details.inc" role="test" />
+ <file name="drcp_characterset.phpt" role="test" />
+ <file name="drcp_conn_close1.phpt" role="test" />
+ <file name="drcp_conn_close2.phpt" role="test" />
+ <file name="drcp_connect1.phpt" role="test" />
+ <file name="drcp_functions.inc" role="test" />
+ <file name="drcp_newconnect.phpt" role="test" />
+ <file name="drcp_pconn_close1.phpt" role="test" />
+ <file name="drcp_pconn_close2.phpt" role="test" />
+ <file name="drcp_privileged.phpt" role="test" />
+ <file name="drcp_scope1.phpt" role="test" />
+ <file name="drcp_scope2.phpt" role="test" />
+ <file name="drcp_scope3.phpt" role="test" />
+ <file name="drcp_scope4.phpt" role="test" />
+ <file name="drcp_scope5.phpt" role="test" />
<file name="drop_table.inc" role="test" />
<file name="drop_type.inc" role="test" />
<file name="error1.phpt" role="test" />
@@ -231,10 +261,13 @@ Various minor improvements.
<file name="lob_038.phpt" role="test" />
<file name="lob_039.phpt" role="test" />
<file name="lob_040.phpt" role="test" />
+ <file name="lob_041.phpt" role="test" />
+ <file name="lob_042.phpt" role="test" />
<file name="lob_aliases.phpt" role="test" />
<file name="lob_null.phpt" role="test" />
<file name="lob_temp1.phpt" role="test" />
<file name="lob_temp.phpt" role="test" />
+ <file name="minfo.phpt" role="test" />
<file name="num.phpt" role="test" />
<file name="oci8safemode.phpt" role="test" />
<file name="oci_execute_segfault.phpt" role="test" />
@@ -245,6 +278,7 @@ Various minor improvements.
<file name="password_new.phpt" role="test" />
<file name="password_old.phpt" role="test" />
<file name="password.phpt" role="test" />
+ <file name="pecl_bug10194_blob_64.phpt" role="test" />
<file name="pecl_bug10194_blob.phpt" role="test" />
<file name="pecl_bug10194.phpt" role="test" />
<file name="pecl_bug8816.phpt" role="test" />
@@ -253,6 +287,7 @@ Various minor improvements.
<file name="prefetch.phpt" role="test" />
<file name="privileged_connect1.phpt" role="test" />
<file name="privileged_connect.phpt" role="test" />
+ <file name="rowid_bind.phpt" role="test" />
<file name="select_null.phpt" role="test" />
<file name="serverversion.phpt" role="test" />
<file name="skipif.inc" role="test" />
@@ -260,8 +295,10 @@ Various minor improvements.
<file name="statement_type_old.phpt" role="test" />
<file name="statement_type.phpt" role="test" />
<file name="test.gif" role="test" />
+ <file name="testping.phpt" role="test" />
<file name="test.txt" role="test" />
<file name="uncommitted.phpt" role="test" />
+ <file name="xmltype_01.phpt" role="test" />
</dir> <!-- //tests -->
<file name="config.m4" role="src" />
<file name="config.w32" role="src" />
@@ -280,7 +317,7 @@ Various minor improvements.
<dependencies>
<required>
<php>
- <min>4.3.11</min>
+ <min>4.3.10</min>
<max>6.0.0</max>
<exclude>6.0.0</exclude>
</php>
@@ -294,6 +331,31 @@ Various minor improvements.
<configureoption default="autodetect" name="with-oci8" prompt="Please provide the path to ORACLE_HOME dir. Use &apos;instantclient,/path/to/instant/client/lib&apos; if you&apos;re compiling against Oracle Instant Client" />
</extsrcrelease>
<changelog>
+ <release>
+ <version>
+ <release>1.2.4</release>
+ <api>1.2.4</api>
+ </version>
+ <stability>
+ <release>stable</release>
+ <api>stable</api>
+ </stability>
+ <license uri="http://www.php.net/license">PHP</license>
+ <notes>Fixed PECL bug #10194 (crash in Oracle client when memory limit reached in the callback)
+Fixed bug #42173 (oci_field_type fixes for INTERVAL and TIMESTAMP types)
+Fixed bug #42134 (oci_error() returns false after oci_new_collection() fails)
+Fixed bug #41917 (oci_field_precision and oci_field_scale datatypes fixed)
+Fixed bug #41711 (Null temporary lobs not supported)
+Fixed bug #41594 (Statement cache is flushed too frequently)
+Fixed bug #40415 (oci_fetch_all and nested cursors, allocate descriptors dynamically)
+Fixed segfault on rebinding and re-executing a statement with LOBs.
+Fixed compile failure in ZTS mode when collections support is missing.
+Allowed statement cache size to be set for non-persistent connections.
+Improved oci_password_change() to close persistent connections on shutdown (to update hashed connection details)
+Changed oci_pconnect() to behave like oci_connect() when SYSDBA and SYSOPER privileges are used.
+Various minor improvements.
+ </notes>
+ </release>
<release>
<version>
<release>1.2.3</release>
@@ -312,6 +374,8 @@ Fixed bug #39732 (oci_bind_array_by_name doesn&apos;t work on Solaris 64bit).
Fixed PECL bug #8816 (issue in php_oci_statement_fetch with more than one piecewise column).
Various minor improvements.
</notes>
+ </release>
+ <release>
<version>
<release>1.2.2</release>
<api>1.2.2</api>
diff --git a/ext/oci8/php_oci8.h b/ext/oci8/php_oci8.h
index f4f332af7..25a744705 100644
--- a/ext/oci8/php_oci8.h
+++ b/ext/oci8/php_oci8.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -25,7 +25,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_oci8.h,v 1.36.2.2.2.2 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: php_oci8.h,v 1.36.2.2.2.3 2008/12/31 11:17:40 sebastian Exp $ */
#if HAVE_OCI8
# ifndef PHP_OCI8_H
diff --git a/ext/oci8/php_oci8_int.h b/ext/oci8/php_oci8_int.h
index 6e9ed5e93..a0a762989 100644
--- a/ext/oci8/php_oci8_int.h
+++ b/ext/oci8/php_oci8_int.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -25,7 +25,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_oci8_int.h,v 1.11.2.6.2.24 2008/02/25 23:52:10 sixd Exp $ */
+/* $Id: php_oci8_int.h,v 1.11.2.6.2.25 2008/12/31 11:17:40 sebastian Exp $ */
#if HAVE_OCI8
# ifndef PHP_OCI8_INT_H
diff --git a/ext/oci8/tests/bug37220.phpt b/ext/oci8/tests/bug37220.phpt
new file mode 100644
index 000000000..6743165b7
--- /dev/null
+++ b/ext/oci8/tests/bug37220.phpt
@@ -0,0 +1,68 @@
+--TEST--
+Bug #37220 (LOB Type mismatch when using windows & oci8.dll)
+--SKIPIF--
+<?php if (!extension_loaded("oci8")) print "skip"; ?>
+--FILE--
+<?php
+
+require dirname(__FILE__).'/connect.inc';
+
+// Initialization
+
+$stmtarray = array(
+ "create table bug37220_tab( mycolumn xmltype not null)",
+ "insert into bug37220_tab values(xmltype('<THETAG myID=\"1234\"></THETAG>'))"
+);
+
+foreach ($stmtarray as $stmt) {
+ $s = oci_parse($c, $stmt);
+ @oci_execute($s);
+}
+
+// Now let's update the row where myId = 1234 and change the tag
+// 'THETAG' to 'MYTAG' (mycolumn is an XMLTYPE datatype and
+// bug37220_tab a normal Oracle table)
+
+$query = "UPDATE bug37220_tab
+ SET bug37220_tab.mycolumn = updateXML(bug37220_tab.mycolumn,'/THETAG',xmltype.createXML(:data))
+ WHERE existsNode(bug37220_tab.mycolumn,'/THETAG[@myID=\"1234\"]') = 1";
+$stmt = oci_parse ($c, $query);
+$clob = oci_new_descriptor($c, OCI_D_LOB);
+oci_bind_by_name($stmt, ':data', $clob, -1, OCI_B_CLOB);
+$clob->writetemporary("<MYTAG/>", OCI_TEMP_CLOB);
+$success = oci_execute($stmt, OCI_COMMIT_ON_SUCCESS);
+oci_free_statement($stmt);
+$clob->close();
+
+// Query back the change
+
+$query = "select * from bug37220_tab";
+$stmt = oci_parse ($c, $query);
+
+oci_execute($stmt);
+
+while ($row = oci_fetch_array($stmt, OCI_ASSOC+OCI_RETURN_NULLS)) {
+ foreach ($row as $item) {
+ echo $item."\n";
+ }
+ echo "\n";
+}
+
+// Cleanup
+
+$stmtarray = array(
+ "drop table bug37220_tab"
+);
+
+foreach ($stmtarray as $stmt) {
+ $s = oci_parse($c, $stmt);
+ oci_execute($s);
+}
+
+echo "Done\n";
+
+?>
+--EXPECT--
+<MYTAG/>
+
+Done
diff --git a/ext/oci8/tests/bug43497.phpt b/ext/oci8/tests/bug43497.phpt
index 908fe5897..0fc6a97b3 100644
--- a/ext/oci8/tests/bug43497.phpt
+++ b/ext/oci8/tests/bug43497.phpt
@@ -1,7 +1,16 @@
--TEST--
Bug #43497 (OCI8 XML/getClobVal aka temporary LOBs leak UGA memory)
--SKIPIF--
-<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
+<?php
+if (!extension_loaded('oci8')) die ("skip no oci8 extension");
+ob_start();
+phpinfo(INFO_MODULES);
+$phpinfo = ob_get_clean();
+$ov = preg_match('/Oracle Version => 9/', $phpinfo);
+if ($ov === 1) {
+ die ("skip expected output only valid for Oracle clients from 10g onwards");
+}
+?>
--FILE--
<?php
diff --git a/ext/oci8/tests/bug43497_92.phpt b/ext/oci8/tests/bug43497_92.phpt
new file mode 100644
index 000000000..e2cb1ce48
--- /dev/null
+++ b/ext/oci8/tests/bug43497_92.phpt
@@ -0,0 +1,303 @@
+--TEST--
+Bug #43497 (OCI8 XML/getClobVal aka temporary LOBs leak UGA memory)
+--SKIPIF--
+<?php
+if (!extension_loaded('oci8')) die ("skip no oci8 extension");
+ob_start();
+phpinfo(INFO_MODULES);
+$phpinfo = ob_get_clean();
+$ov = preg_match('/Oracle Version => 9.2/', $phpinfo);
+if ($ov !== 1) {
+ die ("skip expected output only valid for Oracle 9.2 clients");
+}
+?>
+--FILE--
+<?php
+
+require dirname(__FILE__).'/connect.inc';
+
+function sessionid($c) // determines and returns current session ID
+{
+ $query = "select sid from v\$session where audsid = userenv('sessionid')";
+
+ $stmt = oci_parse($c, $query);
+
+ if (oci_execute($stmt, OCI_DEFAULT)) {
+ $row = oci_fetch($stmt);
+ return oci_result($stmt, 1);
+ }
+
+ return null;
+}
+
+
+function templobs($c, $sid) // returns number of temporary LOBs
+{
+ $query = "select abstract_lobs from v\$temporary_lobs where sid = " . $sid;
+
+ $stmt = oci_parse($c, $query);
+
+ if (oci_execute($stmt, OCI_DEFAULT)) {
+ $row = oci_fetch($stmt);
+ $val = oci_result($stmt, 1);
+ oci_free_statement($stmt);
+ return $val;
+ }
+ return null;
+}
+
+
+// Read all XML data using explicit LOB locator
+function readxmltab_ex($c)
+{
+ $stmt = oci_parse($c, "select extract(xml, '/').getclobval() from bug43497_tab");
+
+ $cntchk = 0;
+ if (oci_execute($stmt)) {
+ while ($result = oci_fetch_array($stmt, OCI_NUM)) {
+ $result[0]->free(); // cleanup properly
+ ++$cntchk;
+ }
+ }
+ echo "Loop count check = $cntchk\n";
+}
+
+// Read all XML data using explicit LOB locator but without freeing the temp lobs
+function readxmltab_ex_nofree($c)
+{
+ $stmt = oci_parse($c, "select extract(xml, '/').getclobval() from bug43497_tab");
+
+ $cntchk = 0;
+ if (oci_execute($stmt)) {
+ while ($result = oci_fetch_array($stmt, OCI_NUM)) {
+ ++$cntchk;
+ }
+ }
+ echo "Loop count check = $cntchk\n";
+}
+
+// Read all XML data using implicit LOB locator
+function readxmltab_im($c)
+{
+ $stmt = oci_parse($c, "select extract(xml, '/').getclobval() from bug43497_tab");
+
+ $cntchk = 0;
+ if (oci_execute($stmt)) {
+ while ($result = oci_fetch_array($stmt, OCI_NUM+OCI_RETURN_LOBS)) {
+ ++$cntchk;
+ }
+ }
+ echo "Loop count check = $cntchk\n";
+}
+
+function createxmltab($c) // create table w/ field of XML type
+{
+ @dropxmltab($c);
+ $stmt = oci_parse($c, "create table bug43497_tab (id number primary key, xml xmltype)");
+ oci_execute($stmt);
+}
+
+function dropxmltab($c) // delete table
+{
+ $stmt = oci_parse($c, "drop table bug43497_tab");
+ oci_execute($stmt);
+}
+
+
+function fillxmltab($c)
+{
+ for ($id = 1; $id <= 100; $id++) {
+
+ // create an XML element string with random data
+ $s = "<data>";
+ for ($j = 0; $j < 128; $j++) {
+ $s .= rand();
+ }
+ $s .= "</data>\n";
+ for ($j = 0; $j < 4; $j++) {
+ $s .= $s;
+ }
+ $data = "<?xml version=\"1.0\"?><records>" . $s . "</records>";
+
+ // insert XML data into database
+
+ $stmt = oci_parse($c, "insert into bug43497_tab(id, xml) values (:id, sys.xmltype.createxml(:xml))");
+ oci_bind_by_name($stmt, ":id", $id);
+ $clob = oci_new_descriptor($c, OCI_D_LOB);
+ oci_bind_by_name($stmt, ":xml", $clob, -1, OCI_B_CLOB);
+ $clob->writetemporary($data);
+ oci_execute($stmt);
+
+ $clob->close();
+ $clob->free();
+ }
+}
+
+
+// Initialize
+
+createxmltab($c);
+fillxmltab($c);
+
+// Run Test
+
+$sid = sessionid($c);
+
+echo "Explicit LOB use\n";
+for ($i = 1; $i <= 10; $i++) {
+ echo "\nRun = " . $i . "\n";
+ echo "Temporary LOBs = " . templobs($c, $sid) . "\n";
+ readxmltab_ex($c);
+}
+
+echo "\nImplicit LOB use\n";
+for ($i = 1; $i <= 10; $i++) {
+ echo "\nRun = " . $i . "\n";
+ echo "Temporary LOBs = " . templobs($c, $sid) . "\n";
+ readxmltab_im($c);
+}
+
+echo "\nExplicit LOB with no free (i.e. a temp lob leak)\n";
+for ($i = 1; $i <= 10; $i++) {
+ echo "\nRun = " . $i . "\n";
+ echo "Temporary LOBs = " . templobs($c, $sid) . "\n";
+ readxmltab_ex_nofree($c);
+}
+
+
+
+// Cleanup
+
+dropxmltab($c);
+
+oci_close($c);
+
+echo "Done\n";
+?>
+--EXPECT--
+Explicit LOB use
+
+Run = 1
+Temporary LOBs = 0
+Loop count check = 100
+
+Run = 2
+Temporary LOBs = 100
+Loop count check = 100
+
+Run = 3
+Temporary LOBs = 200
+Loop count check = 100
+
+Run = 4
+Temporary LOBs = 300
+Loop count check = 100
+
+Run = 5
+Temporary LOBs = 400
+Loop count check = 100
+
+Run = 6
+Temporary LOBs = 500
+Loop count check = 100
+
+Run = 7
+Temporary LOBs = 600
+Loop count check = 100
+
+Run = 8
+Temporary LOBs = 700
+Loop count check = 100
+
+Run = 9
+Temporary LOBs = 800
+Loop count check = 100
+
+Run = 10
+Temporary LOBs = 900
+Loop count check = 100
+
+Implicit LOB use
+
+Run = 1
+Temporary LOBs = 1000
+Loop count check = 100
+
+Run = 2
+Temporary LOBs = 1100
+Loop count check = 100
+
+Run = 3
+Temporary LOBs = 1200
+Loop count check = 100
+
+Run = 4
+Temporary LOBs = 1300
+Loop count check = 100
+
+Run = 5
+Temporary LOBs = 1400
+Loop count check = 100
+
+Run = 6
+Temporary LOBs = 1500
+Loop count check = 100
+
+Run = 7
+Temporary LOBs = 1600
+Loop count check = 100
+
+Run = 8
+Temporary LOBs = 1700
+Loop count check = 100
+
+Run = 9
+Temporary LOBs = 1800
+Loop count check = 100
+
+Run = 10
+Temporary LOBs = 1900
+Loop count check = 100
+
+Explicit LOB with no free (i.e. a temp lob leak)
+
+Run = 1
+Temporary LOBs = 2000
+Loop count check = 100
+
+Run = 2
+Temporary LOBs = 2100
+Loop count check = 100
+
+Run = 3
+Temporary LOBs = 2200
+Loop count check = 100
+
+Run = 4
+Temporary LOBs = 2300
+Loop count check = 100
+
+Run = 5
+Temporary LOBs = 2400
+Loop count check = 100
+
+Run = 6
+Temporary LOBs = 2500
+Loop count check = 100
+
+Run = 7
+Temporary LOBs = 2600
+Loop count check = 100
+
+Run = 8
+Temporary LOBs = 2700
+Loop count check = 100
+
+Run = 9
+Temporary LOBs = 2800
+Loop count check = 100
+
+Run = 10
+Temporary LOBs = 2900
+Loop count check = 100
+Done \ No newline at end of file
diff --git a/ext/oci8/tests/bug44113.phpt b/ext/oci8/tests/bug44113.phpt
index 646f09b7c..d6c297863 100644
--- a/ext/oci8/tests/bug44113.phpt
+++ b/ext/oci8/tests/bug44113.phpt
@@ -5,7 +5,7 @@ Bug #44113 (New collection creation can fail with OCI-22303)
--FILE--
<?php
-require dirname(__FILE__).'/connect.inc';
+require(dirname(__FILE__).'/connect.inc');
// Initialization
@@ -22,8 +22,7 @@ foreach ($stmtarray as $stmt) {
// The test can take some time to complete and can exceed PHP's test
// timout limit on slow networks.
-for ($x = 0; $x < 70000; $x++)
-{
+for ($x = 0; $x < 70000; $x++) {
if (!($var = oci_new_collection($c, 'BUG44113_LIST_T'))) {
print "Failed new collection creation on $x\n";
break;
diff --git a/ext/oci8/tests/bug44206.phpt b/ext/oci8/tests/bug44206.phpt
index ebf31f715..e5771e418 100644
--- a/ext/oci8/tests/bug44206.phpt
+++ b/ext/oci8/tests/bug44206.phpt
@@ -5,25 +5,27 @@ Bug #44206 (Test if selecting ref cursors leads to ORA-1000 maximum open cursors
--FILE--
<?php
-require(dirname(__FILE__).'/connect.inc');
+require dirname(__FILE__).'/connect.inc';
// Run Test
-for ($x = 0; $x < 400; $x++) {
+for ($x = 0; $x < 400; $x++)
+{
$stmt = "select cursor (select $x from dual) a,
- cursor (select $x from dual) b
- from dual";
+ cursor (select $x from dual) b
+ from dual";
$s = oci_parse($c, $stmt);
$r = oci_execute($s);
- if (!$r) {
- echo "Exiting $x\n";
- exit;
- }
- $result = oci_fetch_array($s, OCI_ASSOC);
+ if (!$r) {
+ echo "Exiting $x\n";
+ exit;
+ }
+ $mode = OCI_ASSOC | OCI_RETURN_NULLS;
+ $result = oci_fetch_array($s, $mode);
oci_execute($result['A']);
oci_execute($result['B']);
- oci_fetch_array($result['A'], OCI_ASSOC);
- oci_fetch_array($result['B'], OCI_ASSOC);
+ oci_fetch_array($result['A'], $mode);
+ oci_fetch_array($result['B'], $mode);
oci_free_statement($result['A']);
oci_free_statement($result['B']);
oci_free_statement($s);
diff --git a/ext/oci8/tests/connect_scope1.phpt b/ext/oci8/tests/connect_scope1.phpt
new file mode 100644
index 000000000..d6d16f17e
--- /dev/null
+++ b/ext/oci8/tests/connect_scope1.phpt
@@ -0,0 +1,93 @@
+--TEST--
+Test oci_connect end-of-scope when statement returned
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
+--FILE--
+<?php
+
+require(dirname(__FILE__).'/details.inc');
+
+// Initialization
+
+$stmtarray = array(
+ "drop table connect_scope1_tab",
+ "create table connect_scope1_tab (c1 number)",
+);
+
+if (!empty($dbase))
+ $c1 = oci_new_connect($user,$password,$dbase);
+else
+ $c1 = oci_new_connect($user,$password);
+
+foreach ($stmtarray as $stmt) {
+ $s1 = oci_parse($c1, $stmt);
+ @oci_execute($s1);
+}
+
+// Run Test
+
+echo "Test 1 - oci_connect\n";
+
+function f()
+{
+ global $user, $password, $dbase;
+
+ if (!empty($dbase))
+ $c = oci_connect($user,$password,$dbase);
+ else
+ $c = oci_connect($user,$password);
+ $s = oci_parse($c, "insert into connect_scope1_tab values (1)");
+ oci_execute($s, OCI_DEFAULT); // no commit
+ return($s); // this keeps the connection refcount positive so the connection isn't closed
+}
+
+$s2 = f();
+
+// Check nothing committed yet
+
+$s1 = oci_parse($c1, "select * from connect_scope1_tab");
+oci_execute($s1, OCI_DEFAULT);
+oci_fetch_all($s1, $r);
+var_dump($r);
+
+// insert 2nd row on returned statement, committing both rows
+oci_execute($s2);
+
+// Verify data was committed
+
+$s1 = oci_parse($c1, "select * from connect_scope1_tab");
+oci_execute($s1);
+oci_fetch_all($s1, $r);
+var_dump($r);
+
+// Cleanup
+
+$stmtarray = array(
+ "drop table connect_scope1_tab"
+);
+
+foreach ($stmtarray as $stmt) {
+ $s1 = oci_parse($c1, $stmt);
+ oci_execute($s1);
+}
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+Test 1 - oci_connect
+array(1) {
+ ["C1"]=>
+ array(0) {
+ }
+}
+array(1) {
+ ["C1"]=>
+ array(2) {
+ [0]=>
+ string(1) "1"
+ [1]=>
+ string(1) "1"
+ }
+}
+Done
diff --git a/ext/oci8/tests/connect_scope2.phpt b/ext/oci8/tests/connect_scope2.phpt
new file mode 100644
index 000000000..7017493f5
--- /dev/null
+++ b/ext/oci8/tests/connect_scope2.phpt
@@ -0,0 +1,93 @@
+--TEST--
+Test oci_pconnect end-of-scope when statement returned
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
+--FILE--
+<?php
+
+require(dirname(__FILE__).'/details.inc');
+
+// Initialization
+
+$stmtarray = array(
+ "drop table connect_scope2_tab",
+ "create table connect_scope2_tab (c1 number)",
+);
+
+if (!empty($dbase))
+ $c1 = oci_new_connect($user,$password,$dbase);
+else
+ $c1 = oci_new_connect($user,$password);
+
+foreach ($stmtarray as $stmt) {
+ $s1 = oci_parse($c1, $stmt);
+ @oci_execute($s1);
+}
+
+// Run Test
+
+echo "Test 1 - oci_pconnect\n";
+
+function f()
+{
+ global $user, $password, $dbase;
+
+ if (!empty($dbase))
+ $c = oci_pconnect($user,$password,$dbase);
+ else
+ $c = oci_pconnect($user,$password);
+ $s = oci_parse($c, "insert into connect_scope2_tab values (1)");
+ oci_execute($s, OCI_DEFAULT); // no commit
+ return($s); // this keeps the connection refcount positive so the connection isn't closed
+}
+
+$s2 = f();
+
+// Check nothing committed yet
+
+$s1 = oci_parse($c1, "select * from connect_scope2_tab");
+oci_execute($s1, OCI_DEFAULT);
+oci_fetch_all($s1, $r);
+var_dump($r);
+
+// insert 2nd row on returned statement, committing both rows
+oci_execute($s2);
+
+// Verify data was committed
+
+$s1 = oci_parse($c1, "select * from connect_scope2_tab");
+oci_execute($s1);
+oci_fetch_all($s1, $r);
+var_dump($r);
+
+// Cleanup
+
+$stmtarray = array(
+ "drop table connect_scope2_tab"
+);
+
+foreach ($stmtarray as $stmt) {
+ $s1 = oci_parse($c1, $stmt);
+ oci_execute($s1);
+}
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+Test 1 - oci_pconnect
+array(1) {
+ ["C1"]=>
+ array(0) {
+ }
+}
+array(1) {
+ ["C1"]=>
+ array(2) {
+ [0]=>
+ string(1) "1"
+ [1]=>
+ string(1) "1"
+ }
+}
+Done
diff --git a/ext/oci8/tests/connect_scope_try1.phpt b/ext/oci8/tests/connect_scope_try1.phpt
new file mode 100644
index 000000000..a881ea6ea
--- /dev/null
+++ b/ext/oci8/tests/connect_scope_try1.phpt
@@ -0,0 +1,100 @@
+--TEST--
+Check oci_connect try/catch end-of-scope with old_oci_close_semantics Off
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
+--INI--
+oci8.old_oci_close_semantics=0
+--FILE--
+<?php
+
+require(dirname(__FILE__).'/details.inc');
+
+// Initialization
+
+$stmtarray = array(
+ "drop table scope_try1_tab",
+ "create table scope_try1_tab (c1 number)"
+);
+
+if (!empty($dbase))
+ $c1 = oci_new_connect($user,$password,$dbase);
+else
+ $c1 = oci_new_connect($user,$password);
+
+foreach ($stmtarray as $stmt) {
+ $s1 = oci_parse($c1, $stmt);
+ @oci_execute($s1);
+}
+
+// Run Test
+
+echo "Test 1\n";
+
+// Make errors throw exceptions
+
+set_error_handler(create_function('$x, $y', 'throw new Exception($y, $x);'));
+
+try
+{
+ if (!empty($dbase))
+ $c = oci_connect($user,$password,$dbase);
+ else
+ $c = oci_connect($user,$password);
+ $s = oci_parse($c, "insert into scope_try1_tab values (1)");
+ oci_execute($s, OCI_DEFAULT); // no commit
+ $s = oci_parse($c, "insert into scope_try1_tab values (ABC)"); // syntax error -> throws exception
+ oci_execute($s, OCI_DEFAULT); // no commit
+}
+catch (Exception $e)
+{
+ echo "Caught Exception: ". $e->getMessage(), "\n";
+ var_dump($c);
+
+ // Verify data is not yet committed
+ $s1 = oci_parse($c1, "select * from scope_try1_tab");
+ oci_execute($s1);
+ oci_fetch_all($s1, $r);
+ var_dump($r);
+
+ // Now commit
+ oci_commit($c);
+}
+
+// Verify data was committed in the Catch block
+
+$s1 = oci_parse($c1, "select * from scope_try1_tab");
+oci_execute($s1);
+oci_fetch_all($s1, $r);
+var_dump($r);
+
+// Cleanup
+
+$stmtarray = array(
+ "drop table scope_try1_tab"
+);
+
+foreach ($stmtarray as $stmt) {
+ $s1 = oci_parse($c1, $stmt);
+ oci_execute($s1);
+}
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+Test 1
+Caught Exception: oci_execute(): ORA-00984: %s
+resource(%d) of type (oci8 connection)
+array(1) {
+ ["C1"]=>
+ array(0) {
+ }
+}
+array(1) {
+ ["C1"]=>
+ array(1) {
+ [0]=>
+ string(1) "1"
+ }
+}
+Done
diff --git a/ext/oci8/tests/connect_scope_try2.phpt b/ext/oci8/tests/connect_scope_try2.phpt
new file mode 100644
index 000000000..9e6b5ce2e
--- /dev/null
+++ b/ext/oci8/tests/connect_scope_try2.phpt
@@ -0,0 +1,100 @@
+--TEST--
+Check oci_connect try/catch end-of-scope with old_oci_close_semantics On
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
+--INI--
+oci8.old_oci_close_semantics=1
+--FILE--
+<?php
+
+require(dirname(__FILE__).'/details.inc');
+
+// Initialization
+
+$stmtarray = array(
+ "drop table scope_try2_tab",
+ "create table scope_try2_tab (c1 number)"
+);
+
+if (!empty($dbase))
+ $c1 = oci_new_connect($user,$password,$dbase);
+else
+ $c1 = oci_new_connect($user,$password);
+
+foreach ($stmtarray as $stmt) {
+ $s1 = oci_parse($c1, $stmt);
+ @oci_execute($s1);
+}
+
+// Run Test
+
+echo "Test 1\n";
+
+// Make errors throw exceptions
+
+set_error_handler(create_function('$x, $y', 'throw new Exception($y, $x);'));
+
+try
+{
+ if (!empty($dbase))
+ $c = oci_connect($user,$password,$dbase);
+ else
+ $c = oci_connect($user,$password);
+ $s = oci_parse($c, "insert into scope_try2_tab values (1)");
+ oci_execute($s, OCI_DEFAULT); // no commit
+ $s = oci_parse($c, "insert into scope_try2_tab values (ABC)"); // syntax error -> throws exception
+ oci_execute($s, OCI_DEFAULT); // no commit
+}
+catch (Exception $e)
+{
+ echo "Caught Exception: ". $e->getMessage(), "\n";
+ var_dump($c);
+
+ // Verify data is not yet committed
+ $s1 = oci_parse($c1, "select * from scope_try2_tab");
+ oci_execute($s1);
+ oci_fetch_all($s1, $r);
+ var_dump($r);
+
+ // Now commit
+ oci_commit($c);
+}
+
+// Verify data was committed in the Catch block
+
+$s1 = oci_parse($c1, "select * from scope_try2_tab");
+oci_execute($s1);
+oci_fetch_all($s1, $r);
+var_dump($r);
+
+// Cleanup
+
+$stmtarray = array(
+ "drop table scope_try2_tab"
+);
+
+foreach ($stmtarray as $stmt) {
+ $s1 = oci_parse($c1, $stmt);
+ oci_execute($s1);
+}
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+Test 1
+Caught Exception: oci_execute(): ORA-00984: %s
+resource(%d) of type (oci8 connection)
+array(1) {
+ ["C1"]=>
+ array(0) {
+ }
+}
+array(1) {
+ ["C1"]=>
+ array(1) {
+ [0]=>
+ string(1) "1"
+ }
+}
+Done
diff --git a/ext/oci8/tests/connect_scope_try3.phpt b/ext/oci8/tests/connect_scope_try3.phpt
new file mode 100644
index 000000000..1cd44b021
--- /dev/null
+++ b/ext/oci8/tests/connect_scope_try3.phpt
@@ -0,0 +1,100 @@
+--TEST--
+Check oci_new_connect try/catch end-of-scope with old_oci_close_semantics Off
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
+--INI--
+oci8.old_oci_close_semantics=0
+--FILE--
+<?php
+
+require(dirname(__FILE__).'/details.inc');
+
+// Initialization
+
+$stmtarray = array(
+ "drop table scope_try3_tab",
+ "create table scope_try3_tab (c1 number)"
+);
+
+if (!empty($dbase))
+ $c1 = oci_new_connect($user,$password,$dbase);
+else
+ $c1 = oci_new_connect($user,$password);
+
+foreach ($stmtarray as $stmt) {
+ $s1 = oci_parse($c1, $stmt);
+ @oci_execute($s1);
+}
+
+// Run Test
+
+echo "Test 1\n";
+
+// Make errors throw exceptions
+
+set_error_handler(create_function('$x, $y', 'throw new Exception($y, $x);'));
+
+try
+{
+ if (!empty($dbase))
+ $c = oci_new_connect($user,$password,$dbase);
+ else
+ $c = oci_new_connect($user,$password);
+ $s = oci_parse($c, "insert into scope_try3_tab values (1)");
+ oci_execute($s, OCI_DEFAULT); // no commit
+ $s = oci_parse($c, "insert into scope_try3_tab values (ABC)"); // syntax error -> throws exception
+ oci_execute($s, OCI_DEFAULT); // no commit
+}
+catch (Exception $e)
+{
+ echo "Caught Exception: ". $e->getMessage(), "\n";
+ var_dump($c);
+
+ // Verify data is not yet committed
+ $s1 = oci_parse($c1, "select * from scope_try3_tab");
+ oci_execute($s1);
+ oci_fetch_all($s1, $r);
+ var_dump($r);
+
+ // Now commit
+ oci_commit($c);
+}
+
+// Verify data was committed in the Catch block
+
+$s1 = oci_parse($c1, "select * from scope_try3_tab");
+oci_execute($s1);
+oci_fetch_all($s1, $r);
+var_dump($r);
+
+// Cleanup
+
+$stmtarray = array(
+ "drop table scope_try3_tab"
+);
+
+foreach ($stmtarray as $stmt) {
+ $s1 = oci_parse($c1, $stmt);
+ oci_execute($s1);
+}
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+Test 1
+Caught Exception: oci_execute(): ORA-00984: %s
+resource(%d) of type (oci8 connection)
+array(1) {
+ ["C1"]=>
+ array(0) {
+ }
+}
+array(1) {
+ ["C1"]=>
+ array(1) {
+ [0]=>
+ string(1) "1"
+ }
+}
+Done
diff --git a/ext/oci8/tests/connect_scope_try4.phpt b/ext/oci8/tests/connect_scope_try4.phpt
new file mode 100644
index 000000000..9b4cd1f27
--- /dev/null
+++ b/ext/oci8/tests/connect_scope_try4.phpt
@@ -0,0 +1,100 @@
+--TEST--
+Check oci_new_connect try/catch end-of-scope with old_oci_close_semantics On
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
+--INI--
+oci8.old_oci_close_semantics=1
+--FILE--
+<?php
+
+require(dirname(__FILE__).'/details.inc');
+
+// Initialization
+
+$stmtarray = array(
+ "drop table scope_try4_tab",
+ "create table scope_try4_tab (c1 number)"
+);
+
+if (!empty($dbase))
+ $c1 = oci_new_connect($user,$password,$dbase);
+else
+ $c1 = oci_new_connect($user,$password);
+
+foreach ($stmtarray as $stmt) {
+ $s1 = oci_parse($c1, $stmt);
+ @oci_execute($s1);
+}
+
+// Run Test
+
+echo "Test 1\n";
+
+// Make errors throw exceptions
+
+set_error_handler(create_function('$x, $y', 'throw new Exception($y, $x);'));
+
+try
+{
+ if (!empty($dbase))
+ $c = oci_new_connect($user,$password,$dbase);
+ else
+ $c = oci_new_connect($user,$password);
+ $s = oci_parse($c, "insert into scope_try4_tab values (1)");
+ oci_execute($s, OCI_DEFAULT); // no commit
+ $s = oci_parse($c, "insert into scope_try4_tab values (ABC)"); // syntax error -> throws exception
+ oci_execute($s, OCI_DEFAULT); // no commit
+}
+catch (Exception $e)
+{
+ echo "Caught Exception: ". $e->getMessage(), "\n";
+ var_dump($c);
+
+ // Verify data is not yet committed
+ $s1 = oci_parse($c1, "select * from scope_try4_tab");
+ oci_execute($s1);
+ oci_fetch_all($s1, $r);
+ var_dump($r);
+
+ // Now commit
+ oci_commit($c);
+}
+
+// Verify data was committed in the Catch block
+
+$s1 = oci_parse($c1, "select * from scope_try4_tab");
+oci_execute($s1);
+oci_fetch_all($s1, $r);
+var_dump($r);
+
+// Cleanup
+
+$stmtarray = array(
+ "drop table scope_try4_tab"
+);
+
+foreach ($stmtarray as $stmt) {
+ $s1 = oci_parse($c1, $stmt);
+ oci_execute($s1);
+}
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+Test 1
+Caught Exception: oci_execute(): ORA-00984: %s
+resource(%d) of type (oci8 connection)
+array(1) {
+ ["C1"]=>
+ array(0) {
+ }
+}
+array(1) {
+ ["C1"]=>
+ array(1) {
+ [0]=>
+ string(1) "1"
+ }
+}
+Done
diff --git a/ext/oci8/tests/connect_scope_try5.phpt b/ext/oci8/tests/connect_scope_try5.phpt
new file mode 100644
index 000000000..121fb33dc
--- /dev/null
+++ b/ext/oci8/tests/connect_scope_try5.phpt
@@ -0,0 +1,100 @@
+--TEST--
+Check oci_pconnect try/catch end-of-scope with old_oci_close_semantics Off
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
+--INI--
+oci8.old_oci_close_semantics=0
+--FILE--
+<?php
+
+require(dirname(__FILE__).'/details.inc');
+
+// Initialization
+
+$stmtarray = array(
+ "drop table scope_try5_tab",
+ "create table scope_try5_tab (c1 number)"
+);
+
+if (!empty($dbase))
+ $c1 = oci_new_connect($user,$password,$dbase);
+else
+ $c1 = oci_new_connect($user,$password);
+
+foreach ($stmtarray as $stmt) {
+ $s1 = oci_parse($c1, $stmt);
+ @oci_execute($s1);
+}
+
+// Run Test
+
+echo "Test 1\n";
+
+// Make errors throw exceptions
+
+set_error_handler(create_function('$x, $y', 'throw new Exception($y, $x);'));
+
+try
+{
+ if (!empty($dbase))
+ $c = oci_pconnect($user,$password,$dbase);
+ else
+ $c = oci_pconnect($user,$password);
+ $s = oci_parse($c, "insert into scope_try5_tab values (1)");
+ oci_execute($s, OCI_DEFAULT); // no commit
+ $s = oci_parse($c, "insert into scope_try5_tab values (ABC)"); // syntax error -> throws exception
+ oci_execute($s, OCI_DEFAULT); // no commit
+}
+catch (Exception $e)
+{
+ echo "Caught Exception: ". $e->getMessage(), "\n";
+ var_dump($c);
+
+ // Verify data is not yet committed
+ $s1 = oci_parse($c1, "select * from scope_try5_tab");
+ oci_execute($s1);
+ oci_fetch_all($s1, $r);
+ var_dump($r);
+
+ // Now commit
+ oci_commit($c);
+}
+
+// Verify data was committed in the Catch block
+
+$s1 = oci_parse($c1, "select * from scope_try5_tab");
+oci_execute($s1);
+oci_fetch_all($s1, $r);
+var_dump($r);
+
+// Cleanup
+
+$stmtarray = array(
+ "drop table scope_try5_tab"
+);
+
+foreach ($stmtarray as $stmt) {
+ $s1 = oci_parse($c1, $stmt);
+ oci_execute($s1);
+}
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+Test 1
+Caught Exception: oci_execute(): ORA-00984: %s
+resource(%d) of type (oci8 persistent connection)
+array(1) {
+ ["C1"]=>
+ array(0) {
+ }
+}
+array(1) {
+ ["C1"]=>
+ array(1) {
+ [0]=>
+ string(1) "1"
+ }
+}
+Done
diff --git a/ext/oci8/tests/connect_scope_try6.phpt b/ext/oci8/tests/connect_scope_try6.phpt
new file mode 100644
index 000000000..3347543ab
--- /dev/null
+++ b/ext/oci8/tests/connect_scope_try6.phpt
@@ -0,0 +1,100 @@
+--TEST--
+Check oci_pconnect try/catch end-of-scope with old_oci_close_semantics On
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
+--INI--
+oci8.old_oci_close_semantics=1
+--FILE--
+<?php
+
+require(dirname(__FILE__).'/details.inc');
+
+// Initialization
+
+$stmtarray = array(
+ "drop table scope_try6_tab",
+ "create table scope_try6_tab (c1 number)"
+);
+
+if (!empty($dbase))
+ $c1 = oci_new_connect($user,$password,$dbase);
+else
+ $c1 = oci_new_connect($user,$password);
+
+foreach ($stmtarray as $stmt) {
+ $s1 = oci_parse($c1, $stmt);
+ @oci_execute($s1);
+}
+
+// Run Test
+
+echo "Test 1\n";
+
+// Make errors throw exceptions
+
+set_error_handler(create_function('$x, $y', 'throw new Exception($y, $x);'));
+
+try
+{
+ if (!empty($dbase))
+ $c = oci_pconnect($user,$password,$dbase);
+ else
+ $c = oci_pconnect($user,$password);
+ $s = oci_parse($c, "insert into scope_try6_tab values (1)");
+ oci_execute($s, OCI_DEFAULT); // no commit
+ $s = oci_parse($c, "insert into scope_try6_tab values (ABC)"); // syntax error -> throws exception
+ oci_execute($s, OCI_DEFAULT); // no commit
+}
+catch (Exception $e)
+{
+ echo "Caught Exception: ". $e->getMessage(), "\n";
+ var_dump($c);
+
+ // Verify data is not yet committed
+ $s1 = oci_parse($c1, "select * from scope_try6_tab");
+ oci_execute($s1);
+ oci_fetch_all($s1, $r);
+ var_dump($r);
+
+ // Now commit
+ oci_commit($c);
+}
+
+// Verify data was committed in the Catch block
+
+$s1 = oci_parse($c1, "select * from scope_try6_tab");
+oci_execute($s1);
+oci_fetch_all($s1, $r);
+var_dump($r);
+
+// Cleanup
+
+$stmtarray = array(
+ "drop table scope_try6_tab"
+);
+
+foreach ($stmtarray as $stmt) {
+ $s1 = oci_parse($c1, $stmt);
+ oci_execute($s1);
+}
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+Test 1
+Caught Exception: oci_execute(): ORA-00984: %s
+resource(%d) of type (oci8 persistent connection)
+array(1) {
+ ["C1"]=>
+ array(0) {
+ }
+}
+array(1) {
+ ["C1"]=>
+ array(1) {
+ [0]=>
+ string(1) "1"
+ }
+}
+Done
diff --git a/ext/oci8/tests/drcp_characterset.phpt b/ext/oci8/tests/drcp_characterset.phpt
new file mode 100644
index 000000000..657d4c5ba
--- /dev/null
+++ b/ext/oci8/tests/drcp_characterset.phpt
@@ -0,0 +1,61 @@
+--TEST--
+DRCP: oci_pconnect() and oci_connect() with different character sets
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die("skip no oci8 extension"); ?>
+--FILE--
+<?php
+
+require dirname(__FILE__)."/details.inc";
+
+// Create connections with oci_connect and oci_pconnect with UTF8 as Charset
+
+$c1 = oci_connect($user,$password,$dbase,"UTF8");
+var_dump($c1);
+
+// Now with oci_pconnect()
+
+$p1 = oci_pconnect($user,$password,$dbase,"UTF8");
+var_dump($p1);
+
+// Create two more connections with character set US7ASCII
+
+$c2 = oci_connect($user,$password,$dbase,"US7ASCII");
+var_dump($c2);
+
+// Now with oci_pconnect()
+
+$p2 = oci_pconnect($user,$password,$dbase,"US7ASCII");
+var_dump($p2);
+
+// The two connections c1 and c2 should not share resources as they use different
+//character sets
+
+if((int)$c1 === (int)$c2)
+ echo "First and third connections share a resource: NOT OK\n";
+else
+ echo "First and third connections are different: OK\n";
+
+// The two connections p1 and p2 should not share resources as they use different
+//character sets
+
+if((int)$p1 === (int)$p2)
+ echo "Second and fourth connections share a resource: NOT OK\n";
+else
+ echo "Second and fourth connections are different: OK\n";
+
+// Close all the connections
+oci_close($c1);
+oci_close($c2);
+oci_close($p1);
+oci_close($p2);
+
+echo "Done\n";
+?>
+--EXPECTF--
+resource(%d) of type (oci8 connection)
+resource(%d) of type (oci8 persistent connection)
+resource(%d) of type (oci8 connection)
+resource(%d) of type (oci8 persistent connection)
+First and third connections are different: OK
+Second and fourth connections are different: OK
+Done
diff --git a/ext/oci8/tests/drcp_conn_close1.phpt b/ext/oci8/tests/drcp_conn_close1.phpt
new file mode 100644
index 000000000..697b7e357
--- /dev/null
+++ b/ext/oci8/tests/drcp_conn_close1.phpt
@@ -0,0 +1,45 @@
+--TEST--
+DRCP: oci_connect() with oci_close() and oci8.old_oci_close_semantics ON
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die("skip no oci8 extension"); ?>
+--INI--
+oci8.old_oci_close_semantics=1
+oci8.connection_class=test
+--FILE--
+<?php
+
+require dirname(__FILE__)."/details.inc";
+
+// Test will open a connection
+// Close the connection
+// Open another connection
+// With oci_close() being a no-op, the same conneciton will be returned
+
+
+echo "This is with a OCI_CONNECT\n";
+var_dump($conn1 = oci_connect($user,$password,$dbase));
+$rn1 = (int)$conn1;
+oci_close($conn1);
+
+// Open another connection
+
+var_dump($conn2 = oci_connect($user,$password,$dbase));
+$rn2 = (int)$conn2;
+oci_close($conn2);
+
+// Compare the resource numbers
+
+if ($rn1 === $rn2)
+ echo "Both connections share a resource : OK \n";
+else
+ echo "Both connections are different : NOT OK \n";
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+This is with a OCI_CONNECT
+resource(%d) of type (oci8 connection)
+resource(%d) of type (oci8 connection)
+Both connections share a resource : OK
+Done
diff --git a/ext/oci8/tests/drcp_conn_close2.phpt b/ext/oci8/tests/drcp_conn_close2.phpt
new file mode 100644
index 000000000..0d3f8247f
--- /dev/null
+++ b/ext/oci8/tests/drcp_conn_close2.phpt
@@ -0,0 +1,46 @@
+--TEST--
+DRCP: oci_connect() with oci_close() and oci8.old_oci_close_semantics OFF
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die("skip no oci8 extension"); ?>
+--INI--
+oci8.old_oci_close_semantics=0
+oci8.connection_class=test
+--FILE--
+<?php
+
+require dirname(__FILE__)."/details.inc";
+
+// Test will open a connection
+// Close the connection
+// Open another connection
+// With oci_close() the connection is released to the pool and hence the
+// the second conneciton will be different
+
+
+// OCI_CONNECT
+echo "This is with a OCI_CONNECT\n";
+var_dump($conn1 = oci_connect($user,$password,$dbase));
+$rn1 = (int)$conn1;
+oci_close($conn1);
+
+// Open another connection
+var_dump($conn2 = oci_connect($user,$password,$dbase));
+$rn2 = (int)$conn2;
+oci_close($conn2);
+
+// Compare the resource numbers
+
+if ($rn1 === $rn2)
+ echo "Both connections share a resource : NOT OK \n";
+else
+ echo "Both connections are different : OK \n";
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+This is with a OCI_CONNECT
+resource(%d) of type (oci8 connection)
+resource(%d) of type (oci8 connection)
+Both connections are different : OK
+Done
diff --git a/ext/oci8/tests/drcp_connect1.phpt b/ext/oci8/tests/drcp_connect1.phpt
new file mode 100644
index 000000000..bf619a4ef
--- /dev/null
+++ b/ext/oci8/tests/drcp_connect1.phpt
@@ -0,0 +1,86 @@
+--TEST--
+DRCP: oci_connect()
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die("skip no oci8 extension"); ?>
+--INI--
+oci8.connection_class=test
+oci8.old_oci_close_semantics=0
+--FILE--
+<?php
+
+require dirname(__FILE__)."/details.inc";
+require dirname(__FILE__)."/drcp_functions.inc";
+
+// Open a number of connections with oci_connect and oci_pconnect and verify
+// whether we get a used session with DRCP.
+// To verify this, we change the value of a PL/SQL package variable in one
+// session and query for this through another connection
+
+var_dump($conn1 = oci_connect($user,$password,$dbase));
+// Create the package
+drcp_create_package($conn1);
+
+// OCI_CONNECT
+echo " This is with OCI_CONNECT.....\n";
+drcp_select_packagevar($conn1); // Returns 0
+drcp_set_packagevar($conn1,1000);
+oci_close($conn1);
+echo " Connection conn1 closed....\n";
+
+// Second connection should return 0 for the package variable.
+var_dump($conn2 = oci_connect($user,$password,$dbase));
+echo " Select with connection 2 \n";
+drcp_select_packagevar($conn2); // Returns 0
+drcp_set_packagevar($conn2,100);
+
+// Third connection. There is no oci_close() for conn2 hence this should
+// return the value set by conn2.
+var_dump($conn3 = oci_connect($user,$password,$dbase));
+echo " Select with connection 3 \n";
+drcp_select_packagevar($conn3); // Returns 100
+
+// Close all the connections
+oci_close($conn2);
+oci_close($conn3);
+
+// OCI_PCONNECT
+echo "\n This is with oci_pconnect().....\n";
+var_dump($pconn1 = oci_pconnect($user,$password,$dbase));
+drcp_set_packagevar($pconn1,1000);
+oci_close($pconn1);
+echo " Connection pconn1 closed....\n";
+
+// Second connection with oci_pconnect should return the same session hence the
+// value returned is what is set by pconn1
+
+var_dump($pconn2 = oci_pconnect($user,$password,$dbase));
+echo " Select with persistent connection 2 \n";
+drcp_select_packagevar($pconn2); // Returns 1000
+oci_close($pconn2);
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+resource(%d) of type (oci8 connection)
+ This is with OCI_CONNECT.....
+ The value of the package variable is 0
+ Package variable value set to 1000
+ Connection conn1 closed....
+resource(%d) of type (oci8 connection)
+ Select with connection 2
+ The value of the package variable is 0
+ Package variable value set to 100
+resource(%d) of type (oci8 connection)
+ Select with connection 3
+ The value of the package variable is 100
+
+ This is with oci_pconnect().....
+resource(%d) of type (oci8 persistent connection)
+ Package variable value set to 1000
+ Connection pconn1 closed....
+resource(%d) of type (oci8 persistent connection)
+ Select with persistent connection 2
+ The value of the package variable is 1000
+Done
+
diff --git a/ext/oci8/tests/drcp_functions.inc b/ext/oci8/tests/drcp_functions.inc
new file mode 100644
index 000000000..26adb21f3
--- /dev/null
+++ b/ext/oci8/tests/drcp_functions.inc
@@ -0,0 +1,93 @@
+<?php
+
+/* This file contains functions required by the DRCP tests */
+
+function drcp_create_table($conn)
+{
+ $create_sql = "CREATE TABLE DRCPTEST (id NUMBER, name VARCHAR2(10), dept VARCHAR2(10))";
+ $statement = oci_parse($conn, $create_sql);
+ oci_execute($statement);
+
+ $id_values = array(100,101,102,103,104,105,106,107,108);
+ $name_values = array("WIILIAMS","JOHN","SMITH","JONES","ADAMS","ROBERT",
+ "BILL","LAWSON","MARY");
+ $dept_values = array("ACCOUNTS","HR","HR","ADMIN","ACCOUNTS","HR",
+ "ACCOUNTS","HR","ACCOUNTS");
+ for($i=0; $i<8; $i++) {
+ $insert = "INSERT INTO DRCPTEST VALUES('".$id_values[$i]."','". $name_values[$i]."','".$dept_values[$i]."')";
+ $s = oci_parse($conn, $insert);
+ oci_execute($s);
+ }
+}
+
+function drcp_drop_table($conn)
+{
+ $ora_sql = "DROP TABLE DRCPTEST";
+ $statement = oci_parse($conn, $ora_sql);
+ oci_execute($statement);
+}
+
+function drcp_update_table($conn)
+{
+ $update_stmt ="Update drcptest set dept ='NEWDEPT' where id = 105";
+ $s1 = oci_parse($conn,$update_stmt);
+ oci_execute($s1,OCI_DEFAULT);
+ echo "Update done-- DEPT value has been set to NEWDEPT\n";
+}
+
+function drcp_select_value($conn)
+{
+ $sel_stmt="select dept from drcptest where id=105";
+ $s2 = oci_parse($conn,$sel_stmt);
+ oci_execute($s2,OCI_DEFAULT);
+ while(oci_fetch($s2)) {
+ echo "The value of DEPT for id 105 is ".oci_result($s2,1)."\n";
+ }
+}
+
+function drcp_select_packagevar($conn)
+{
+ $sel_stmt="select drcp_test_package.f1 as f1 from dual";
+ $s2 = oci_parse($conn, $sel_stmt);
+ oci_define_by_name($s2,'f1',$ret_num);
+ oci_execute($s2);
+ while(oci_fetch($s2)) {
+ echo " The value of the package variable is ".oci_result($s2,1)."\n";
+ }
+}
+
+
+function drcp_set_packagevar($conn,$num)
+{
+ $set_stmt = "begin drcp_test_package.p1($num); end;";
+ $s1 = oci_parse($conn,$set_stmt);
+ oci_execute($s1);
+ echo " Package variable value set to " .$num."\n";
+}
+
+function drcp_create_package($c)
+{
+ $create_package_stmt = "create or replace package drcp_test_package as
+ var int :=0;
+ procedure p1(var1 int);
+ function f1 return number;
+ end;";
+ $s1 = oci_parse($c, $create_package_stmt);
+ oci_execute($s1);
+
+ $package_body = "create or replace package body drcp_test_package as
+ procedure p1(var1 int) is
+ begin
+ var :=var1;
+ end;
+ function f1 return number is
+ begin
+ return drcp_test_package.var;
+ end;
+ end;";
+
+ $s2 = oci_parse($c, $package_body);
+ oci_execute($s2);
+}
+
+?>
diff --git a/ext/oci8/tests/drcp_newconnect.phpt b/ext/oci8/tests/drcp_newconnect.phpt
new file mode 100644
index 000000000..79718f4ee
--- /dev/null
+++ b/ext/oci8/tests/drcp_newconnect.phpt
@@ -0,0 +1,43 @@
+--TEST--
+DRCP: oci_new_connect()
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die("skip no oci8 extension"); ?>
+--INI--
+oci8.connection_class=test
+oci8.old_oci_close_semantics=0
+--FILE--
+<?php
+
+require dirname(__FILE__)."/details.inc";
+
+// Open two connections with oci_new_connect
+// Verify they are different by comparing the resource ids
+
+var_dump($c1 = oci_new_connect($user,$password,$dbase));
+$rn1 = (int)$c1;
+
+// Another connection now
+
+var_dump($c2 = oci_new_connect($user,$password,$dbase));
+$rn2 = (int)$c2;
+
+// rn1 and rn2 should be different.
+
+if ($rn1 === $rn2)
+ echo "First and second connections share a resource: Not OK\n";
+else
+ echo "First and second connections are different OK\n";
+
+// Close the connections
+oci_close($c1);
+oci_close($c2);
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+resource(%d) of type (oci8 connection)
+resource(%d) of type (oci8 connection)
+First and second connections are different OK
+Done
+
diff --git a/ext/oci8/tests/drcp_pconn_close1.phpt b/ext/oci8/tests/drcp_pconn_close1.phpt
new file mode 100644
index 000000000..a9b912b26
--- /dev/null
+++ b/ext/oci8/tests/drcp_pconn_close1.phpt
@@ -0,0 +1,44 @@
+--TEST--
+DRCP: oci_pconnect() with oci_close() and oci8.old_oci_close_semantics ON
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die("skip no oci8 extension"); ?>
+--INI--
+oci8.old_oci_close_semantics=1
+oci8.connection_class=test
+--FILE--
+<?php
+
+require dirname(__FILE__)."/details.inc";
+
+// Test will open a persistent connection
+// Close the connection
+// Open another connection
+// With oci_close() being a no-op, the same conneciton will be returned
+
+echo "This is with a OCI_PCONNECT\n";
+var_dump($conn1 = oci_pconnect($user,$password,$dbase));
+$rn1 = (int)$conn1;
+oci_close($conn1);
+
+// Open another connection
+
+var_dump($conn2 = oci_pconnect($user,$password,$dbase));
+$rn2 = (int)$conn2;
+oci_close($conn2);
+
+// Compare the resource numbers
+
+if ($rn1 === $rn2)
+ echo "Both connections share a resource : OK \n";
+else
+ echo "Both connections are different : NOT OK \n";
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+This is with a OCI_PCONNECT
+resource(%d) of type (oci8 persistent connection)
+resource(%d) of type (oci8 persistent connection)
+Both connections share a resource : OK
+Done
diff --git a/ext/oci8/tests/drcp_pconn_close2.phpt b/ext/oci8/tests/drcp_pconn_close2.phpt
new file mode 100644
index 000000000..5fd2c2355
--- /dev/null
+++ b/ext/oci8/tests/drcp_pconn_close2.phpt
@@ -0,0 +1,46 @@
+--TEST--
+DRCP: oci_pconnect() with oci_close() and oci8.old_oci_close_semantics OFF
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die("skip no oci8 extension"); ?>
+--INI--
+oci8.old_oci_close_semantics=0
+oci8.connection_class=test
+--FILE--
+<?php
+
+require dirname(__FILE__)."/details.inc";
+
+// Test will open a persistent connection
+// Close the connection
+// Open another connection
+// With oci_close() the connection is released to the pool and hence the
+// the second connection will be different
+
+
+echo "This is with a OCI_PCONNECT\n";
+var_dump($conn1 = oci_pconnect($user,$password,$dbase));
+$rn1 = (int)$conn1;
+oci_close($conn1);
+
+// Query for the row updated. The new value should be returned
+
+var_dump($conn2 = oci_pconnect($user,$password,$dbase));
+$rn2 = (int)$conn2;
+oci_close($conn2);
+
+// Compare the resource numbers
+
+if ($rn1 === $rn2)
+ echo "Both connections share a resource : NOT OK \n";
+else
+ echo "Both connections are different : OK \n";
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+This is with a OCI_PCONNECT
+resource(%d) of type (oci8 persistent connection)
+resource(%d) of type (oci8 persistent connection)
+Both connections are different : OK
+Done
diff --git a/ext/oci8/tests/drcp_privileged.phpt b/ext/oci8/tests/drcp_privileged.phpt
new file mode 100644
index 000000000..9af20625e
--- /dev/null
+++ b/ext/oci8/tests/drcp_privileged.phpt
@@ -0,0 +1,47 @@
+--TEST--
+DRCP: privileged connect
+--SKIPIF--
+<?php
+if (!extension_loaded('oci8')) die("skip no oci8 extension");
+if (strcasecmp($user, "system") && strcasecmp($user, "sys")) die("skip needs to be run as a DBA user");
+require(dirname(__FILE__)."/details.inc");
+if (empty($oracle_on_localhost)) die("skip this test is unlikely to work with remote Oracle - unless an Oracle password file has been created");
+?>
+--INI--
+oci8.privileged_connect=1
+--FILE--
+<?php
+
+// Connecting as SYSDBA or SYSOPER through DRCP will give ORA-1031
+
+require dirname(__FILE__)."/details.inc";
+var_dump(oci_connect($user,$password,$dbase,false,OCI_SYSDBA));
+var_dump(oci_connect($user,$password,$dbase,false,OCI_SYSOPER));
+var_dump(oci_new_connect($user,$password,$dbase,false,OCI_SYSDBA));
+var_dump(oci_new_connect($user,$password,$dbase,false,OCI_SYSOPER));
+var_dump(oci_pconnect($user,$password,$dbase,false,OCI_SYSDBA));
+var_dump(oci_pconnect($user,$password,$dbase,false,OCI_SYSOPER));
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+Warning: oci_connect(): ORA-01031: insufficient privileges in %s on line %d
+bool(false)
+
+Warning: oci_connect(): ORA-01031: insufficient privileges in %s on line %d
+bool(false)
+
+Warning: oci_new_connect(): ORA-01031: insufficient privileges in %s on line %d
+bool(false)
+
+Warning: oci_new_connect(): ORA-01031: insufficient privileges in %s on line %d
+bool(false)
+
+Warning: oci_pconnect(): ORA-01031: insufficient privileges in %s on line %d
+bool(false)
+
+Warning: oci_pconnect(): ORA-01031: insufficient privileges in %s on line %d
+bool(false)
+Done
+
diff --git a/ext/oci8/tests/drcp_scope1.phpt b/ext/oci8/tests/drcp_scope1.phpt
new file mode 100644
index 000000000..57f1abe32
--- /dev/null
+++ b/ext/oci8/tests/drcp_scope1.phpt
@@ -0,0 +1,92 @@
+--TEST--
+DRCP: oci_new_connect() and oci_connect() with scope end when oci8.old_oci_close_semantics ON
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die("skip no oci8 extension"); ?>
+--INI--
+oci8.old_oci_close_semantics=1
+--FILE--
+<?php
+
+require dirname(__FILE__)."/drcp_functions.inc";
+require dirname(__FILE__)."/details.inc";
+
+// Scope considered here is the functional scope
+// Test will open a connection within a function (function 1).
+// Update a table
+// Open another connection from function 2.
+// When the scope ends the txn is rolled back and hence the updated value
+// will not be reflected for oci_connect and oci_new_connect.
+
+// Create the table
+$c = oci_new_connect($user,$password,$dbase);
+@drcp_drop_table($c);
+drcp_create_table($c);
+
+// OCI_NEW_CONNECT
+$conn_type = 1;
+echo "This is with a OCI_NEW_CONNECT\n";
+function1($user,$password,$dbase,$conn_type);
+
+// Should return the OLD value
+function2($user,$password,$dbase,$conn_type);
+
+// OCI_CONNECT
+$conn_type = 2;
+echo "\n\nThis is with a OCI_CONNECT\n";
+function1($user,$password,$dbase,$conn_type);
+
+// Should return the OLD value
+function2($user,$password,$dbase,$conn_type);
+
+//This is the first scope for the script
+
+function function1($user,$password,$dbase,$conn_type)
+{
+ switch($conn_type)
+ {
+ case 1:
+ var_dump($conn1 = oci_new_connect($user,$password,$dbase));
+ break;
+ case 2:
+ var_dump($conn1 = oci_connect($user,$password,$dbase));
+ break;
+ }
+ drcp_update_table($conn1);
+}
+
+// This is the second scope
+
+function function2($user,$password,$dbase,$conn_type)
+{
+ switch($conn_type)
+ {
+ case 1:
+ var_dump($conn1 = oci_new_connect($user,$password,$dbase));
+ break;
+ case 2:
+ var_dump($conn1 = oci_connect($user,$password,$dbase));
+ break;
+ }
+ drcp_select_value($conn1);
+}
+
+drcp_drop_table($c);
+oci_close($c);
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+This is with a OCI_NEW_CONNECT
+resource(%d) of type (oci8 connection)
+Update done-- DEPT value has been set to NEWDEPT
+resource(%d) of type (oci8 connection)
+The value of DEPT for id 105 is HR
+
+
+This is with a OCI_CONNECT
+resource(%d) of type (oci8 connection)
+Update done-- DEPT value has been set to NEWDEPT
+resource(%d) of type (oci8 connection)
+The value of DEPT for id 105 is HR
+Done
diff --git a/ext/oci8/tests/drcp_scope2.phpt b/ext/oci8/tests/drcp_scope2.phpt
new file mode 100644
index 000000000..b72e00dbb
--- /dev/null
+++ b/ext/oci8/tests/drcp_scope2.phpt
@@ -0,0 +1,91 @@
+--TEST--
+DRCP: oci_new_connect() and oci_connect with scope end when oci8.old_oci_close_semantics OFF
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die("skip no oci8 extension"); ?>
+--INI--
+oci8.old_oci_close_semantics=0
+--FILE--
+<?php
+
+require dirname(__FILE__)."/drcp_functions.inc";
+require dirname(__FILE__)."/details.inc";
+
+// Scope considered here is the functional scope
+// Test will open a connection within a function (function 1).
+// Update a table
+// Open another connection from function 2.
+// When the scope ends the txn is rolled back and hence the updated value
+// will not be reflected for oci_connect and oci_new_connect.
+
+// Create the table
+$c = oci_new_connect($user,$password,$dbase);
+@drcp_drop_table($c);
+drcp_create_table($c);
+
+// OCI_NEW_CONNECT
+$conn_type = 1;
+echo "This is with a OCI_NEW_CONNECT\n";
+function1($user,$password,$dbase,$conn_type);
+
+// Should return the OLD value
+function2($user,$password,$dbase,$conn_type);
+
+// OCI_CONNECT
+$conn_type = 2;
+echo "\n\nThis is with a OCI_CONNECT\n";
+function1($user,$password,$dbase,$conn_type);
+
+// Should return the OLD value
+function2($user,$password,$dbase,$conn_type);
+
+//This is the first scope for the script
+
+function function1($user,$password,$dbase,$conn_type)
+{
+ switch($conn_type)
+ {
+ case 1:
+ var_dump($conn1 = oci_new_connect($user,$password,$dbase));
+ break;
+ case 2:
+ var_dump($conn1 = oci_connect($user,$password,$dbase));
+ break;
+ }
+ drcp_update_table($conn1);
+}
+
+// This is the second scope
+
+function function2($user,$password,$dbase,$conn_type)
+{
+ switch($conn_type)
+ {
+ case 1:
+ var_dump($conn1 = oci_new_connect($user,$password,$dbase));
+ break;
+ case 2:
+ var_dump($conn1 = oci_connect($user,$password,$dbase));
+ break;
+ }
+ drcp_select_value($conn1);
+}
+drcp_drop_table($c);
+oci_close($c);
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+This is with a OCI_NEW_CONNECT
+resource(%d) of type (oci8 connection)
+Update done-- DEPT value has been set to NEWDEPT
+resource(%d) of type (oci8 connection)
+The value of DEPT for id 105 is HR
+
+
+This is with a OCI_CONNECT
+resource(%d) of type (oci8 connection)
+Update done-- DEPT value has been set to NEWDEPT
+resource(%d) of type (oci8 connection)
+The value of DEPT for id 105 is HR
+Done
diff --git a/ext/oci8/tests/drcp_scope3.phpt b/ext/oci8/tests/drcp_scope3.phpt
new file mode 100644
index 000000000..b448a518a
--- /dev/null
+++ b/ext/oci8/tests/drcp_scope3.phpt
@@ -0,0 +1,61 @@
+--TEST--
+DRCP: oci_pconnect() with scope end when oci8.old_oci_close_semantics ON
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die("skip no oci8 extension"); ?>
+--INI--
+oci8.old_oci_close_semantics=1
+--FILE--
+<?php
+
+require dirname(__FILE__)."/drcp_functions.inc";
+require dirname(__FILE__)."/details.inc";
+
+// The test opens a connection within function1 and updates a table
+// (without committing). Another connection is opened from function
+// 2, and the table queried. When function1 ends, the connection from
+// function1 is not closed, so the updated value will be seen in
+// function2. Also the table can't be dropped because an uncommitted
+// transaction exists.
+
+// Create the table
+$c = oci_new_connect($user,$password,$dbase);
+@drcp_drop_table($c);
+drcp_create_table($c);
+
+echo "This is with a OCI_PCONNECT\n";
+function1($user,$password,$dbase);
+
+// Should return the OLD value
+function2($user,$password,$dbase);
+
+// This is the first scope for the script
+
+function function1($user,$password,$dbase)
+{
+ var_dump($c = oci_pconnect($user,$password,$dbase));
+ drcp_update_table($c);
+}
+
+// This is the second scope
+
+function function2($user,$password,$dbase)
+{
+ var_dump($c = oci_pconnect($user,$password,$dbase));
+ drcp_select_value($c);
+}
+
+drcp_drop_table($c);
+oci_close($c);
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+This is with a OCI_PCONNECT
+resource(%d) of type (oci8 persistent connection)
+Update done-- DEPT value has been set to NEWDEPT
+resource(%d) of type (oci8 persistent connection)
+The value of DEPT for id 105 is NEWDEPT
+
+Warning: oci_execute(): ORA-00054: %s
+Done \ No newline at end of file
diff --git a/ext/oci8/tests/drcp_scope4.phpt b/ext/oci8/tests/drcp_scope4.phpt
new file mode 100644
index 000000000..182704b67
--- /dev/null
+++ b/ext/oci8/tests/drcp_scope4.phpt
@@ -0,0 +1,62 @@
+--TEST--
+DRCP: oci_pconnect() with scope end when oci8.old_oci_close_semantics OFF
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die("skip no oci8 extension"); ?>
+--INI--
+oci8.old_oci_close_semantics=0
+--FILE--
+<?php
+
+require dirname(__FILE__)."/drcp_functions.inc";
+require dirname(__FILE__)."/details.inc";
+
+// The expected behavior of this test is different between PHP 5.2 and
+// PHP 5.3
+//
+// In PHP 5.2, the test opens a connection within function1 and
+// updates a table (without committing). Another connection is opened
+// from function 2, and the table queried. The connections should
+// share the same resource, so the new data is visible in function2.
+
+// Create the table
+$c = oci_new_connect($user,$password,$dbase);
+@drcp_drop_table($c);
+drcp_create_table($c);
+
+echo "This is with a OCI_PCONNECT\n";
+function1($user,$password,$dbase);
+
+// Should return the OLD value
+function2($user,$password,$dbase);
+
+// This is the first scope for the script
+
+function function1($user,$password,$dbase)
+{
+ var_dump($c = oci_pconnect($user,$password,$dbase));
+ drcp_update_table($c);
+}
+
+// This is the second scope
+
+function function2($user,$password,$dbase)
+{
+ var_dump($c = oci_pconnect($user,$password,$dbase));
+ drcp_select_value($c);
+}
+
+drcp_drop_table($c);
+oci_close($c);
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+This is with a OCI_PCONNECT
+resource(%d) of type (oci8 persistent connection)
+Update done-- DEPT value has been set to NEWDEPT
+resource(%d) of type (oci8 persistent connection)
+The value of DEPT for id 105 is NEWDEPT
+
+Warning: oci_execute(): ORA-00054: %s
+Done
diff --git a/ext/oci8/tests/drcp_scope5.phpt b/ext/oci8/tests/drcp_scope5.phpt
new file mode 100644
index 000000000..832e6aa8c
--- /dev/null
+++ b/ext/oci8/tests/drcp_scope5.phpt
@@ -0,0 +1,63 @@
+--TEST--
+DRCP: oci_pconnect() with scope end when oci8.old_oci_close_semantics ON
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die("skip no oci8 extension"); ?>
+--INI--
+oci8.old_oci_close_semantics=1
+--FILE--
+<?php
+
+require dirname(__FILE__)."/drcp_functions.inc";
+require dirname(__FILE__)."/details.inc";
+
+// Similar to drcp_scope3.phpt but does a commit before end of
+// function2, allowing the table to be dropped cleanly at the end.
+
+// The test opens a connection within function1 and updates a table
+// (without committing). Another connection is opened from function
+// 2, and the table queried. When function1 ends, the connection from
+// function1 is not closed, so the updated value will be seen in
+// function2. Also the table can't be dropped because an uncommitted
+// transaction exists.
+
+// Create the table
+$c = oci_new_connect($user,$password,$dbase);
+@drcp_drop_table($c);
+drcp_create_table($c);
+
+echo "This is with a OCI_PCONNECT\n";
+function1($user,$password,$dbase);
+
+// Should return the OLD value
+function2($user,$password,$dbase);
+
+// This is the first scope for the script
+
+function function1($user,$password,$dbase)
+{
+ var_dump($c = oci_pconnect($user,$password,$dbase));
+ drcp_update_table($c);
+}
+
+// This is the second scope
+
+function function2($user,$password,$dbase)
+{
+ var_dump($c = oci_pconnect($user,$password,$dbase));
+ drcp_select_value($c);
+ oci_commit($c);
+}
+
+drcp_drop_table($c);
+oci_close($c);
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+This is with a OCI_PCONNECT
+resource(%d) of type (oci8 persistent connection)
+Update done-- DEPT value has been set to NEWDEPT
+resource(%d) of type (oci8 persistent connection)
+The value of DEPT for id 105 is NEWDEPT
+Done \ No newline at end of file
diff --git a/ext/oci8/tests/lob_042.phpt b/ext/oci8/tests/lob_042.phpt
index d79b4846e..25309d6fc 100644
--- a/ext/oci8/tests/lob_042.phpt
+++ b/ext/oci8/tests/lob_042.phpt
@@ -5,8 +5,6 @@ Check various LOB error messages
--FILE--
<?php
-// test some LOB error messages
-
require(dirname(__FILE__).'/connect.inc');
require(dirname(__FILE__).'/create_table.inc');
diff --git a/ext/oci8/tests/minfo.phpt b/ext/oci8/tests/minfo.phpt
new file mode 100644
index 000000000..f6b95ff29
--- /dev/null
+++ b/ext/oci8/tests/minfo.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Code coverage for PHP_MINFO_FUNCTION(oci)
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
+--FILE--
+<?php
+
+ob_start();
+phpinfo(INFO_MODULES);
+$v = ob_get_clean();
+$r = strpos($v, 'OCI8 Support => enabled');
+var_dump($r);
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+int(%d)
+Done
diff --git a/ext/oci8/tests/password.phpt b/ext/oci8/tests/password.phpt
index a31843cfd..2741f9d3b 100644
--- a/ext/oci8/tests/password.phpt
+++ b/ext/oci8/tests/password.phpt
@@ -1,24 +1,74 @@
--TEST--
-oci_password_change()
+oci_password_change() for non-persistent connections
--SKIPIF--
-<?php if (!extension_loaded('oci8')) die("skip no oci8 extension"); ?>
+<?php
+if (!extension_loaded('oci8')) die("skip no oci8 extension");
+require(dirname(__FILE__)."/details.inc");
+if (empty($dbase)) die ("skip requires database connection string be set");
+if (strcasecmp($user, "system") && strcasecmp($user, "sys")) die("skip needs to be run as a DBA user");
+?>
--FILE--
<?php
-require dirname(__FILE__)."/connect.inc";
+require(dirname(__FILE__)."/details.inc");
+
+// Create a user we can stuff around with and not affect subsequent tests
+$c0 = oci_connect($user, $password, $dbase);
+$stmts = array(
+ "drop user testuser",
+ "begin
+ execute immediate 'create user testuser identified by testuserpwd';
+ execute immediate 'grant connect, create session to testuser';
+ end;");
+foreach ($stmts as $sql) {
+ $s = oci_parse($c0, $sql);
+ @oci_execute($s);
+}
+
+// Connect and change the password
+$c1 = oci_connect("testuser", "testuserpwd", $dbase);
+var_dump($c1);
+$rn1 = (int)$c1;
+
+oci_password_change($c1, "testuser", "testuserpwd", "testuserpwd2");
-$new_password = "test";
-var_dump(oci_password_change($dbase, $user, $password, $new_password));
+// Second connect should return a new resource because the hash string will be different from $c1
+$c2 = oci_connect("testuser", "testuserpwd2", $dbase);
+var_dump($c2);
+$rn2 = (int)$c2;
+
+// Despite using the old password this connect should succeed and return the original resource
+$c3 = oci_connect("testuser", "testuserpwd", $dbase);
+var_dump($c3);
+$rn3 = (int)$c3;
+
+// Connections should differ
+if ($rn1 == $rn2) {
+ echo "First and second connections share a resource: Not OK\n";
+ var_dump($c1);
+}
+else {
+ echo "First and second connections are different: OK\n";
+}
-if (!empty($dbase)) {
- var_dump($new_c = ocilogon($user,$new_password,$dbase));
+// Connections should be the same
+if ($rn1 == $rn3) {
+ echo "First and third connections share a resource: OK\n";
}
else {
- var_dump($new_c = ocilogon($user,$new_password));
+ echo "First and third connections are different: Not OK\n";
+ var_dump($c1);
+ var_dump($c2);
}
-var_dump(oci_password_change($dbase, $user, $new_password, $password));
+// Clean up
+oci_close($c1);
+oci_close($c2);
+oci_close($c3);
+// Clean up
+$s = oci_parse($c0, "drop user cascade testuser");
+@oci_execute($s);
echo "Done\n";
@@ -27,4 +77,6 @@ echo "Done\n";
resource(%d) of type (oci8 connection)
resource(%d) of type (oci8 connection)
resource(%d) of type (oci8 connection)
+First and second connections are different: OK
+First and third connections share a resource: OK
Done
diff --git a/ext/oci8/tests/password_2.phpt b/ext/oci8/tests/password_2.phpt
index be5cb8540..9b6c09afb 100644
--- a/ext/oci8/tests/password_2.phpt
+++ b/ext/oci8/tests/password_2.phpt
@@ -4,6 +4,7 @@ oci_password_change() for persistent connections
<?php
if (!extension_loaded('oci8')) die("skip no oci8 extension");
require(dirname(__FILE__)."/details.inc");
+if (empty($dbase)) die ("skip requires database connection string be set");
if (strcasecmp($user, "system") && strcasecmp($user, "sys")) die("skip needs to be run as a DBA user");
?>
--FILE--
@@ -27,34 +28,19 @@ foreach ($stmts as $sql) {
// Connect (persistent) and change the password
$c1 = oci_pconnect("testuser", "testuserpwd", $dbase);
var_dump($c1);
-
-ob_start();
-var_dump($c1);
-$r1 = ob_get_clean();
-preg_match("/resource\(([0-9])\) of.*/", $r1, $matches);
-$rn1 = $matches[1]; /* resource number */
+$rn1 = (int)$c1;
oci_password_change($c1, "testuser", "testuserpwd", "testuserpwd2");
// Second connect should return a new resource because the hash string will be different from $c1
$c2 = oci_pconnect("testuser", "testuserpwd2", $dbase);
var_dump($c2);
-
-ob_start();
-var_dump($c2);
-$r2 = ob_get_clean();
-preg_match("/resource\(([0-9])\) of.*/", $r2, $matches);
-$rn2 = $matches[1]; /* resource number */
+$rn2 = (int)$c2;
// Despite using the old password this connect should succeed and return the original resource
$c3 = oci_pconnect("testuser", "testuserpwd", $dbase);
var_dump($c3);
-
-ob_start();
-var_dump($c3);
-$r3 = ob_get_clean();
-preg_match("/resource\(([0-9])\) of.*/", $r3, $matches);
-$rn3 = $matches[1]; /* resource number */
+$rn3 = (int)$c3;
// Connections should differ
if ($rn1 == $rn2) {
@@ -76,10 +62,12 @@ else {
}
// Clean up
-// Can't drop a user that is connected and can't close a persistent
-// connection. So this test will leave the dummy user around, but the
-// schema will not be usable..
-$s = oci_parse($c0, "revoke connect, create session from testuser");
+oci_close($c1);
+oci_close($c2);
+oci_close($c3);
+
+// Clean up
+$s = oci_parse($c0, "drop user cascade testuser");
@oci_execute($s);
echo "Done\n";
diff --git a/ext/oci8/tests/password_new.phpt b/ext/oci8/tests/password_new.phpt
index a31843cfd..49c21dd34 100644
--- a/ext/oci8/tests/password_new.phpt
+++ b/ext/oci8/tests/password_new.phpt
@@ -1,7 +1,25 @@
--TEST--
oci_password_change()
--SKIPIF--
-<?php if (!extension_loaded('oci8')) die("skip no oci8 extension"); ?>
+<?php
+if (!extension_loaded('oci8')) die("skip no oci8 extension");
+require dirname(__FILE__)."/connect.inc";
+if (empty($dbase)) die ("skip requires database connection string be set");
+
+// This test is known to fail with Oracle 10g client libraries
+// connecting to Oracle Database 11.1.0.6 (Oracle bug 6277160)
+$sv = oci_server_version($c);
+$sv = preg_match('/11.1/', $sv, $matches);
+if ($sv === 1) {
+ ob_start();
+ phpinfo(INFO_MODULES);
+ $phpinfo = ob_get_clean();
+ $iv = preg_match('/Oracle .*Version => 10/', $phpinfo);
+ if ($iv === 1) {
+ die ("skip test known to fail using Oracle 10gR2 client libs connecting to Oracle 11.1 (6277160)");
+ }
+}
+?>
--FILE--
<?php
diff --git a/ext/oci8/tests/password_old.phpt b/ext/oci8/tests/password_old.phpt
index d293fce87..8ed1d3d43 100644
--- a/ext/oci8/tests/password_old.phpt
+++ b/ext/oci8/tests/password_old.phpt
@@ -1,14 +1,32 @@
--TEST--
ocipasswordchange()
--SKIPIF--
-<?php if (!extension_loaded('oci8')) die("skip no oci8 extension"); ?>
+<?php
+if (!extension_loaded('oci8')) die("skip no oci8 extension");
+require dirname(__FILE__)."/connect.inc";
+if (empty($dbase)) die ("skip requires database connection string be set");
+
+// This test is known to fail with Oracle 10g client libraries
+// connecting to Oracle Database 11.1.0.6 (Oracle bug 6277160)
+$sv = oci_server_version($c);
+$sv = preg_match('/11.1/', $sv, $matches);
+if ($sv === 1) {
+ ob_start();
+ phpinfo(INFO_MODULES);
+ $phpinfo = ob_get_clean();
+ $iv = preg_match('/Oracle .*Version => 10/', $phpinfo);
+ if ($iv === 1) {
+ die ("skip test known to fail using Oracle 10gR2 client libs connecting to Oracle 11.1 (6277160)");
+ }
+}
+?>
--FILE--
<?php
require dirname(__FILE__)."/connect.inc";
$new_password = "test";
-var_dump(ocipasswordchange($c, $user, $password, $new_password));
+var_dump(ocipasswordchange($dbase, $user, $password, $new_password));
if (!empty($dbase)) {
var_dump($new_c = ocilogon($user,$new_password,$dbase));
@@ -17,14 +35,14 @@ else {
var_dump($new_c = ocilogon($user,$new_password));
}
-var_dump(ocipasswordchange($new_c, $user, $new_password, $password));
+var_dump(ocipasswordchange($dbase, $user, $new_password, $password));
echo "Done\n";
?>
--EXPECTF--
-bool(true)
resource(%d) of type (oci8 connection)
-bool(true)
+resource(%d) of type (oci8 connection)
+resource(%d) of type (oci8 connection)
Done
diff --git a/ext/oci8/tests/pecl_bug10194_blob.phpt b/ext/oci8/tests/pecl_bug10194_blob.phpt
index 1a44e4494..4c6aa4f1c 100644
--- a/ext/oci8/tests/pecl_bug10194_blob.phpt
+++ b/ext/oci8/tests/pecl_bug10194_blob.phpt
@@ -1,19 +1,22 @@
--TEST--
PECL Bug #10194 (segfault in Instant Client when memory_limit is reached inside the callback)
--SKIPIF--
-<?php if (!extension_loaded('oci8')) die("skip no oci8 extension"); ?>
+<?php
+if (!extension_loaded('oci8')) die("skip no oci8 extension");
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platforms only");
+?>
--INI--
-memory_limit=10M
+memory_limit=3M
--FILE--
<?php
+
+// This test is dependent on the behavior of the memory manager
require dirname(__FILE__).'/connect.inc';
require dirname(__FILE__).'/create_table.inc';
-$ora_sql = "INSERT INTO
- ".$schema.$table_name." (blob)
- VALUES (empty_blob())
- ";
+$ora_sql = "INSERT INTO ".$schema.$table_name." (blob)
+ VALUES (empty_blob())";
$statement = oci_parse($c,$ora_sql);
oci_execute($statement);
@@ -32,10 +35,12 @@ for ($i = 0; $i < 8; $i++) {
oci_commit($c);
-$ora_sql = "SELECT blob FROM ".$schema.$table_name."";
+$ora_sql = "SELECT blob FROM ".$schema.$table_name;
$statement = oci_parse($c,$ora_sql);
oci_execute($statement);
+echo "Before load()\n";
+
$row = oci_fetch_assoc($statement);
var_dump(strlen($row['BLOB']->load())); /* here it should fail */
@@ -44,4 +49,6 @@ require dirname(__FILE__).'/drop_table.inc';
echo "Done\n";
?>
--EXPECTF--
+Before load()
+
Fatal error: Allowed memory size of %d bytes exhausted%s(tried to allocate %d bytes) in %s on line %d
diff --git a/ext/oci8/tests/pecl_bug10194_blob_64.phpt b/ext/oci8/tests/pecl_bug10194_blob_64.phpt
new file mode 100644
index 000000000..433d586a4
--- /dev/null
+++ b/ext/oci8/tests/pecl_bug10194_blob_64.phpt
@@ -0,0 +1,54 @@
+--TEST--
+PECL Bug #10194 (segfault in Instant Client when memory_limit is reached inside the callback)
+--SKIPIF--
+<?php
+if (!extension_loaded('oci8')) die("skip no oci8 extension");
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platforms only");
+?>
+--INI--
+memory_limit=6M
+--FILE--
+<?php
+
+// This test is dependent on the behavior of the memory manager
+
+require dirname(__FILE__).'/connect.inc';
+require dirname(__FILE__).'/create_table.inc';
+
+$ora_sql = "INSERT INTO ".$schema.$table_name." (blob)
+ VALUES (empty_blob())";
+
+$statement = oci_parse($c,$ora_sql);
+oci_execute($statement);
+
+$ora_sql = "SELECT blob FROM ".$schema.$table_name." FOR UPDATE";
+$statement = oci_parse($c,$ora_sql);
+oci_execute($statement, OCI_DEFAULT);
+
+$row = oci_fetch_assoc($statement);
+
+$string = str_repeat("test", 32768*4*4);
+
+for ($i = 0; $i < 8; $i++) {
+ $row['BLOB']->write($string);
+}
+
+oci_commit($c);
+
+$ora_sql = "SELECT blob FROM ".$schema.$table_name;
+$statement = oci_parse($c,$ora_sql);
+oci_execute($statement);
+
+echo "Before load()\n";
+
+$row = oci_fetch_assoc($statement);
+var_dump(strlen($row['BLOB']->load())); /* here it should fail */
+
+require dirname(__FILE__).'/drop_table.inc';
+
+echo "Done\n";
+?>
+--EXPECTF--
+Before load()
+
+Fatal error: Allowed memory size of %d bytes exhausted%s(tried to allocate %d bytes) in %s on line %d
diff --git a/ext/oci8/tests/testping.phpt b/ext/oci8/tests/testping.phpt
new file mode 100644
index 000000000..a0d65a30c
--- /dev/null
+++ b/ext/oci8/tests/testping.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Exercise OCIPing functionality on reconnect (code coverage test)
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
+--INI--
+oci8.ping_interval=0
+--FILE--
+<?php
+
+require(dirname(__FILE__).'/details.inc');
+
+for ($i = 0; $i < 2; $i++) {
+ if (!empty($dbase)) {
+ $c = oci_pconnect($user,$password,$dbase);
+ }
+ else {
+ $c = oci_pconnect($user,$password);
+ }
+}
+
+echo "Done\n";
+
+?>
+--EXPECTF--
+Done
diff --git a/ext/odbc/birdstep.c b/ext/odbc/birdstep.c
index a7ab2753c..c359fab3b 100644
--- a/ext/odbc/birdstep.c
+++ b/ext/odbc/birdstep.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: birdstep.c,v 1.13.2.2.2.3 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: birdstep.c,v 1.13.2.2.2.4 2008/12/31 11:17:40 sebastian Exp $ */
/*
* TODO:
diff --git a/ext/odbc/php_birdstep.h b/ext/odbc/php_birdstep.h
index 5fbb72ff2..69fc46d39 100644
--- a/ext/odbc/php_birdstep.h
+++ b/ext/odbc/php_birdstep.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_birdstep.h,v 1.5.2.1.2.2 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: php_birdstep.h,v 1.5.2.1.2.3 2008/12/31 11:17:40 sebastian Exp $ */
#ifndef PHP_BIRDSTEP_H
#define PHP_BIRDSTEP_H
diff --git a/ext/odbc/php_odbc.c b/ext/odbc/php_odbc.c
index 47fcd4514..4724439d3 100644
--- a/ext/odbc/php_odbc.c
+++ b/ext/odbc/php_odbc.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -20,7 +20,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_odbc.c,v 1.189.2.4.2.8 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: php_odbc.c,v 1.189.2.4.2.11 2008/12/31 11:17:40 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -64,7 +64,7 @@ void odbc_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent);
static int le_result, le_conn, le_pconn;
-#define SAFE_SQL_NTS(n) ((SWORD) ((n)?(SQL_NTS):0))
+#define SAFE_SQL_NTS(n) ((SQLSMALLINT) ((n)?(SQL_NTS):0))
/* {{{ odbc_functions[]
*/
@@ -180,7 +180,7 @@ static void _free_odbc_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
if (res->stmt) {
#if defined(HAVE_SOLID) || defined(HAVE_SOLID_30) || defined(HAVE_SOLID_35)
SQLTransact(res->conn_ptr->henv, res->conn_ptr->hdbc,
- (UWORD)SQL_COMMIT);
+ (SQLUSMALLINT) SQL_COMMIT);
#endif
rc = SQLFreeStmt(res->stmt,SQL_DROP);
/* We don't want the connection to be closed after the last statment has been closed
@@ -380,6 +380,50 @@ static PHP_INI_DISP(display_lrl)
}
/* }}} */
+
+/* {{{ PHP_INI_DISP(display_cursortype)
+ */
+static PHP_INI_DISP(display_cursortype)
+{
+ char *value;
+ TSRMLS_FETCH();
+
+ if (type == PHP_INI_DISPLAY_ORIG && ini_entry->modified) {
+ value = ini_entry->orig_value;
+ } else if (ini_entry->value) {
+ value = ini_entry->value;
+ } else {
+ value = NULL;
+ }
+
+ if (value) {
+ switch (atoi (value))
+ {
+ case SQL_CURSOR_FORWARD_ONLY:
+ PUTS ("Forward Only cursor");
+ break;
+
+ case SQL_CURSOR_STATIC:
+ PUTS ("Static cursor");
+ break;
+
+ case SQL_CURSOR_KEYSET_DRIVEN:
+ PUTS ("Keyset driven cursor");
+ break;
+
+ case SQL_CURSOR_DYNAMIC:
+ PUTS ("Dynamic cursor");
+ break;
+
+ default:
+ php_printf("Unknown cursor model %s", value);
+ break;
+ }
+ }
+}
+
+/* }}} */
+
/* {{{ PHP_INI_BEGIN
*/
PHP_INI_BEGIN()
@@ -401,6 +445,8 @@ PHP_INI_BEGIN()
defaultbinmode, zend_odbc_globals, odbc_globals, display_binmode)
STD_PHP_INI_BOOLEAN("odbc.check_persistent", "1", PHP_INI_SYSTEM, OnUpdateLong,
check_persistent, zend_odbc_globals, odbc_globals)
+ STD_PHP_INI_ENTRY_EX("odbc.default_cursortype", "3", PHP_INI_ALL, OnUpdateLong,
+ default_cursortype, zend_odbc_globals, odbc_globals, display_cursortype)
PHP_INI_END()
/* }}} */
@@ -565,9 +611,9 @@ PHP_MINFO_FUNCTION(odbc)
void odbc_sql_error(ODBC_SQL_ERROR_PARAMS)
{
char state[6];
- SDWORD error; /* Not used */
+ SQLINTEGER error; /* Not used */
char errormsg[SQL_MAX_MESSAGE_LENGTH];
- SWORD errormsgsize; /* Not used */
+ SQLSMALLINT errormsgsize; /* Not used */
RETCODE rc;
ODBC_SQL_ENV_T henv;
ODBC_SQL_CONN_T conn;
@@ -641,8 +687,8 @@ int odbc_bindcols(odbc_result *result TSRMLS_DC)
{
RETCODE rc;
int i;
- SWORD colnamelen; /* Not used */
- SDWORD displaysize;
+ SQLSMALLINT colnamelen; /* Not used */
+ SQLLEN displaysize;
result->values = (odbc_result_value *) safe_emalloc(sizeof(odbc_result_value), result->numcols, 0);
@@ -650,9 +696,9 @@ int odbc_bindcols(odbc_result *result TSRMLS_DC)
result->binmode = ODBCG(defaultbinmode);
for(i = 0; i < result->numcols; i++) {
- rc = SQLColAttributes(result->stmt, (UWORD)(i+1), SQL_COLUMN_NAME,
+ rc = SQLColAttributes(result->stmt, (SQLUSMALLINT)(i+1), SQL_COLUMN_NAME,
result->values[i].name, sizeof(result->values[i].name), &colnamelen, 0);
- rc = SQLColAttributes(result->stmt, (UWORD)(i+1), SQL_COLUMN_TYPE,
+ rc = SQLColAttributes(result->stmt, (SQLUSMALLINT)(i+1), SQL_COLUMN_TYPE,
NULL, 0, NULL, &result->values[i].coltype);
/* Don't bind LONG / BINARY columns, so that fetch behaviour can
@@ -670,17 +716,17 @@ int odbc_bindcols(odbc_result *result TSRMLS_DC)
#ifdef HAVE_ADABAS
case SQL_TIMESTAMP:
result->values[i].value = (char *)emalloc(27);
- SQLBindCol(result->stmt, (UWORD)(i+1), SQL_C_CHAR, result->values[i].value,
+ SQLBindCol(result->stmt, (SQLUSMALLINT)(i+1), SQL_C_CHAR, result->values[i].value,
27, &result->values[i].vallen);
break;
#endif /* HAVE_ADABAS */
default:
- rc = SQLColAttributes(result->stmt, (UWORD)(i+1), SQL_COLUMN_DISPLAY_SIZE,
+ rc = SQLColAttributes(result->stmt, (SQLUSMALLINT)(i+1), SQL_COLUMN_DISPLAY_SIZE,
NULL, 0, NULL, &displaysize);
displaysize = displaysize <= result->longreadlen ? displaysize :
result->longreadlen;
result->values[i].value = (char *)emalloc(displaysize + 1);
- rc = SQLBindCol(result->stmt, (UWORD)(i+1), SQL_C_CHAR, result->values[i].value,
+ rc = SQLBindCol(result->stmt, (SQLUSMALLINT)(i+1), SQL_C_CHAR, result->values[i].value,
displaysize + 1, &result->values[i].vallen);
break;
}
@@ -702,7 +748,7 @@ void odbc_transact(INTERNAL_FUNCTION_PARAMETERS, int type)
ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_conn, -1, "ODBC-Link", le_conn, le_pconn);
- rc = SQLTransact(conn->henv, conn->hdbc, (UWORD)((type)?SQL_COMMIT:SQL_ROLLBACK));
+ rc = SQLTransact(conn->henv, conn->hdbc, (SQLUSMALLINT)((type)?SQL_COMMIT:SQL_ROLLBACK));
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLTransact");
RETURN_FALSE;
@@ -727,7 +773,7 @@ static int _close_pconn_with_id(zend_rsrc_list_entry *le, int *id TSRMLS_DC)
void odbc_column_lengths(INTERNAL_FUNCTION_PARAMETERS, int type)
{
odbc_result *result;
-#if defined(HAVE_SOLID) || defined(HAVE_SOLID_30) || defined(HAVE_OPENLINK)
+#if defined(HAVE_SOLID) || defined(HAVE_SOLID_30)
/* this seems to be necessary for Solid2.3 ( tested by
* tammy@synchronis.com) and Solid 3.0 (tested by eric@terra.telemediair.nl)
* Solid does not seem to declare a SQLINTEGER, but it does declare a
@@ -736,7 +782,7 @@ void odbc_column_lengths(INTERNAL_FUNCTION_PARAMETERS, int type)
*/
SDWORD len;
#else
- SQLINTEGER len;
+ SQLLEN len;
#endif
zval **pv_res, **pv_num;
@@ -763,7 +809,7 @@ void odbc_column_lengths(INTERNAL_FUNCTION_PARAMETERS, int type)
RETURN_FALSE;
}
- SQLColAttributes(result->stmt, (UWORD)Z_LVAL_PP(pv_num),
+ SQLColAttributes(result->stmt, (SQLUSMALLINT)Z_LVAL_PP(pv_num),
(SQLUSMALLINT) (type?SQL_COLUMN_SCALE:SQL_COLUMN_PRECISION),
NULL, 0, NULL, &len);
@@ -841,7 +887,7 @@ PHP_FUNCTION(odbc_prepare)
odbc_connection *conn;
RETCODE rc;
#ifdef HAVE_SQL_EXTENDED_FETCH
- UDWORD scrollopts;
+ SQLUINTEGER scrollopts;
#endif
if (zend_get_parameters_ex(2, &pv_conn, &pv_query) == FAILURE) {
@@ -879,8 +925,8 @@ PHP_FUNCTION(odbc_prepare)
/* Try to set CURSOR_TYPE to dynamic. Driver will replace this with other
type if not possible.
*/
- if (SQLSetStmtOption(result->stmt, SQL_CURSOR_TYPE, SQL_CURSOR_DYNAMIC)
- == SQL_ERROR) {
+ int cursortype = ODBCG(default_cursortype);
+ if (SQLSetStmtOption(result->stmt, SQL_CURSOR_TYPE, cursortype) == SQL_ERROR) {
odbc_sql_error(conn, result->stmt, " SQLSetStmtOption");
SQLFreeStmt(result->stmt, SQL_DROP);
efree(result);
@@ -932,15 +978,15 @@ PHP_FUNCTION(odbc_execute)
{
zval **pv_res, **pv_param_arr, **tmp;
typedef struct params_t {
- SDWORD vallen;
+ SQLLEN vallen;
int fp;
} params_t;
params_t *params = NULL;
char *filename;
unsigned char otype;
- SWORD sqltype, ctype, scale;
- SWORD nullable;
- UDWORD precision;
+ SQLSMALLINT sqltype, ctype, scale;
+ SQLSMALLINT nullable;
+ SQLULEN precision;
odbc_result *result;
int numArgs, i, ne;
RETCODE rc;
@@ -997,7 +1043,7 @@ PHP_FUNCTION(odbc_execute)
RETURN_FALSE;
}
- SQLDescribeParam(result->stmt, (UWORD)i, &sqltype, &precision,
+ SQLDescribeParam(result->stmt, (SQLUSMALLINT)i, &sqltype, &precision,
&scale, &nullable);
params[i-1].vallen = Z_STRLEN_PP(tmp);
params[i-1].fp = -1;
@@ -1044,7 +1090,7 @@ PHP_FUNCTION(odbc_execute)
params[i-1].vallen = SQL_LEN_DATA_AT_EXEC(0);
- rc = SQLBindParameter(result->stmt, (UWORD)i, SQL_PARAM_INPUT,
+ rc = SQLBindParameter(result->stmt, (SQLUSMALLINT)i, SQL_PARAM_INPUT,
ctype, sqltype, precision, scale,
(void *)params[i-1].fp, 0,
&params[i-1].vallen);
@@ -1056,7 +1102,7 @@ PHP_FUNCTION(odbc_execute)
params[i-1].vallen = SQL_NULL_DATA;
}
- rc = SQLBindParameter(result->stmt, (UWORD)i, SQL_PARAM_INPUT,
+ rc = SQLBindParameter(result->stmt, (SQLUSMALLINT)i, SQL_PARAM_INPUT,
ctype, sqltype, precision, scale,
Z_STRVAL_PP(tmp), 0,
&params[i-1].vallen);
@@ -1131,7 +1177,8 @@ PHP_FUNCTION(odbc_execute)
PHP_FUNCTION(odbc_cursor)
{
zval **pv_res;
- SWORD len, max_len;
+ SQLUSMALLINT max_len;
+ SQLSMALLINT len;
char *cursorname;
odbc_result *result;
RETCODE rc;
@@ -1150,12 +1197,12 @@ PHP_FUNCTION(odbc_cursor)
if (max_len > 0) {
cursorname = emalloc(max_len + 1);
- rc = SQLGetCursorName(result->stmt,cursorname,(SWORD)max_len,&len);
+ rc = SQLGetCursorName(result->stmt,cursorname,(SQLSMALLINT)max_len,&len);
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
char state[6]; /* Not used */
- SDWORD error; /* Not used */
- char errormsg[255];
- SWORD errormsgsize; /* Not used */
+ SQLINTEGER error; /* Not used */
+ char errormsg[SQL_MAX_MESSAGE_LENGTH];
+ SQLSMALLINT errormsgsize; /* Not used */
SQLError( result->conn_ptr->henv, result->conn_ptr->hdbc,
result->stmt, state, &error, errormsg,
@@ -1257,7 +1304,7 @@ PHP_FUNCTION(odbc_exec)
odbc_connection *conn;
RETCODE rc;
#ifdef HAVE_SQL_EXTENDED_FETCH
- UDWORD scrollopts;
+ SQLUINTEGER scrollopts;
#endif
numArgs = ZEND_NUM_ARGS();
@@ -1299,8 +1346,8 @@ PHP_FUNCTION(odbc_exec)
/* Try to set CURSOR_TYPE to dynamic. Driver will replace this with other
type if not possible.
*/
- if (SQLSetStmtOption(result->stmt, SQL_CURSOR_TYPE, SQL_CURSOR_DYNAMIC)
- == SQL_ERROR) {
+ int cursortype = ODBCG(default_cursortype);
+ if (SQLSetStmtOption(result->stmt, SQL_CURSOR_TYPE, cursortype) == SQL_ERROR) {
odbc_sql_error(conn, result->stmt, " SQLSetStmtOption");
SQLFreeStmt(result->stmt, SQL_DROP);
efree(result);
@@ -1351,12 +1398,12 @@ static void php_odbc_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type)
int i;
odbc_result *result;
RETCODE rc;
- SWORD sql_c_type;
+ SQLSMALLINT sql_c_type;
char *buf = NULL;
#ifdef HAVE_SQL_EXTENDED_FETCH
- UDWORD crow;
- UWORD RowStatus[1];
- SDWORD rownum = -1;
+ SQLULEN crow;
+ SQLUSMALLINT RowStatus[1];
+ SQLLEN rownum = -1;
zval **pv_res, **pv_row, *tmp;
switch(ZEND_NUM_ARGS()) {
@@ -1435,7 +1482,7 @@ static void php_odbc_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type)
break;
}
if (buf == NULL) buf = emalloc(result->longreadlen + 1);
- rc = SQLGetData(result->stmt, (UWORD)(i + 1), sql_c_type,
+ rc = SQLGetData(result->stmt, (SQLUSMALLINT)(i + 1), sql_c_type,
buf, result->longreadlen + 1, &result->values[i].vallen);
if (rc == SQL_ERROR) {
@@ -1509,14 +1556,14 @@ PHP_FUNCTION(odbc_fetch_into)
int numArgs, i;
odbc_result *result;
RETCODE rc;
- SWORD sql_c_type;
+ SQLSMALLINT sql_c_type;
char *buf = NULL;
zval **pv_res, **pv_res_arr, *tmp;
#ifdef HAVE_SQL_EXTENDED_FETCH
zval **pv_row;
- UDWORD crow;
- UWORD RowStatus[1];
- SDWORD rownum = -1;
+ SQLULEN crow;
+ SQLUSMALLINT RowStatus[1];
+ SQLLEN rownum = -1;
#endif /* HAVE_SQL_EXTENDED_FETCH */
numArgs = ZEND_NUM_ARGS();
@@ -1595,7 +1642,7 @@ PHP_FUNCTION(odbc_fetch_into)
}
if (buf == NULL) buf = emalloc(result->longreadlen + 1);
- rc = SQLGetData(result->stmt, (UWORD)(i + 1),sql_c_type,
+ rc = SQLGetData(result->stmt, (SQLUSMALLINT)(i + 1),sql_c_type,
buf, result->longreadlen + 1, &result->values[i].vallen);
if (rc == SQL_ERROR) {
@@ -1666,13 +1713,13 @@ PHP_FUNCTION(solid_fetch_prev)
PHP_FUNCTION(odbc_fetch_row)
{
int numArgs;
- SDWORD rownum = 1;
+ SQLLEN rownum = 1;
odbc_result *result;
RETCODE rc;
zval **pv_res, **pv_row;
#ifdef HAVE_SQL_EXTENDED_FETCH
- UDWORD crow;
- UWORD RowStatus[1];
+ SQLULEN crow;
+ SQLUSMALLINT RowStatus[1];
#endif
numArgs = ZEND_NUM_ARGS();
@@ -1728,15 +1775,15 @@ PHP_FUNCTION(odbc_result)
{
char *field;
int field_ind;
- SWORD sql_c_type = SQL_C_CHAR;
+ SQLSMALLINT sql_c_type = SQL_C_CHAR;
odbc_result *result;
int i = 0;
RETCODE rc;
- SDWORD fieldsize;
+ SQLLEN fieldsize;
zval **pv_res, **pv_field;
#ifdef HAVE_SQL_EXTENDED_FETCH
- UDWORD crow;
- UWORD RowStatus[1];
+ SQLULEN crow;
+ SQLUSMALLINT RowStatus[1];
#endif
field_ind = -1;
@@ -1814,8 +1861,8 @@ PHP_FUNCTION(odbc_result)
else
fieldsize = result->longreadlen;
} else {
- SQLColAttributes(result->stmt, (UWORD)(field_ind + 1),
- (UWORD)((sql_c_type == SQL_C_BINARY) ? SQL_COLUMN_LENGTH :
+ SQLColAttributes(result->stmt, (SQLUSMALLINT)(field_ind + 1),
+ (SQLUSMALLINT)((sql_c_type == SQL_C_BINARY) ? SQL_COLUMN_LENGTH :
SQL_COLUMN_DISPLAY_SIZE),
NULL, 0, NULL, &fieldsize);
}
@@ -1826,7 +1873,7 @@ PHP_FUNCTION(odbc_result)
/* SQLGetData will truncate CHAR data to fieldsize - 1 bytes and append \0.
* For binary data it is truncated to fieldsize bytes.
*/
- rc = SQLGetData(result->stmt, (UWORD)(field_ind + 1), sql_c_type,
+ rc = SQLGetData(result->stmt, (SQLUSMALLINT)(field_ind + 1), sql_c_type,
field, fieldsize, &result->values[field_ind].vallen);
if (rc == SQL_ERROR) {
@@ -1869,7 +1916,7 @@ PHP_FUNCTION(odbc_result)
/* Call SQLGetData() until SQL_SUCCESS is returned */
while(1) {
- rc = SQLGetData(result->stmt, (UWORD)(field_ind + 1),sql_c_type,
+ rc = SQLGetData(result->stmt, (SQLUSMALLINT)(field_ind + 1),sql_c_type,
field, fieldsize, &result->values[field_ind].vallen);
if (rc == SQL_ERROR) {
@@ -1904,10 +1951,10 @@ PHP_FUNCTION(odbc_result_all)
odbc_result *result;
RETCODE rc;
zval **pv_res, **pv_format;
- SWORD sql_c_type;
+ SQLSMALLINT sql_c_type;
#ifdef HAVE_SQL_EXTENDED_FETCH
- UDWORD crow;
- UWORD RowStatus[1];
+ SQLULEN crow;
+ SQLUSMALLINT RowStatus[1];
#endif
numArgs = ZEND_NUM_ARGS();
@@ -1973,7 +2020,7 @@ PHP_FUNCTION(odbc_result_all)
if (buf == NULL) buf = emalloc(result->longreadlen);
- rc = SQLGetData(result->stmt, (UWORD)(i + 1),sql_c_type,
+ rc = SQLGetData(result->stmt, (SQLUSMALLINT)(i + 1),sql_c_type,
buf, result->longreadlen, &result->values[i].vallen);
php_printf("<td>");
@@ -2139,7 +2186,7 @@ int odbc_sqlconnect(odbc_connection **conn, char *db, char *uid, char *pwd, int
}
/* Possible fix for bug #10250
* Needs testing on UnixODBC < 2.0.5 though. */
-#if defined(HAVE_EMPRESS) || defined(HAVE_UNIXODBC) || defined(PHP_WIN32)
+#if defined(HAVE_EMPRESS) || defined(HAVE_UNIXODBC) || defined(PHP_WIN32) || defined (HAVE_IODBC)
/* * Uncomment the line above, and comment line below to fully test
* #ifdef HAVE_EMPRESS */
{
@@ -2315,7 +2362,7 @@ try_and_get_another_connection:
if(ODBCG(check_persistent)){
RETCODE ret;
UCHAR d_name[32];
- SWORD len;
+ SQLSMALLINT len;
ret = SQLGetInfo(db_conn->hdbc,
SQL_DATA_SOURCE_READ_ONLY,
@@ -2431,7 +2478,7 @@ PHP_FUNCTION(odbc_close)
PHP_FUNCTION(odbc_num_rows)
{
odbc_result *result;
- SDWORD rows;
+ SQLLEN rows;
zval **pv_res;
if (zend_get_parameters_ex(1, &pv_res) == FAILURE) {
@@ -2547,7 +2594,7 @@ PHP_FUNCTION(odbc_field_type)
{
odbc_result *result;
char tmp[32];
- SWORD tmplen;
+ SQLSMALLINT tmplen;
zval **pv_res, **pv_num;
if (zend_get_parameters_ex(2, &pv_res, &pv_num) == FAILURE) {
@@ -2573,7 +2620,7 @@ PHP_FUNCTION(odbc_field_type)
RETURN_FALSE;
}
- SQLColAttributes(result->stmt, (UWORD)Z_LVAL_PP(pv_num),
+ SQLColAttributes(result->stmt, (SQLUSMALLINT)Z_LVAL_PP(pv_num),
SQL_COLUMN_TYPE_NAME, tmp, 31, &tmplen, NULL);
RETURN_STRING(tmp,1)
}
@@ -2667,7 +2714,7 @@ PHP_FUNCTION(odbc_autocommit)
}
RETVAL_TRUE;
} else {
- SDWORD status;
+ SQLINTEGER status;
rc = SQLGetConnectOption(conn->hdbc, SQL_AUTOCOMMIT, (PTR)&status);
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
@@ -2898,7 +2945,7 @@ PHP_FUNCTION(odbc_columns)
odbc_result *result = NULL;
odbc_connection *conn;
char *cat = NULL, *schema = NULL, *table = NULL, *column = NULL;
- SWORD cat_len=0, schema_len=0, table_len=0, column_len=0;
+ SQLSMALLINT cat_len=0, schema_len=0, table_len=0, column_len=0;
RETCODE rc;
int argc;
@@ -3157,7 +3204,7 @@ PHP_FUNCTION(odbc_gettypeinfo)
odbc_connection *conn;
RETCODE rc;
int argc;
- SWORD data_type = SQL_ALL_TYPES;
+ SQLSMALLINT data_type = SQL_ALL_TYPES;
argc = ZEND_NUM_ARGS();
if (argc == 1) {
@@ -3169,7 +3216,7 @@ PHP_FUNCTION(odbc_gettypeinfo)
WRONG_PARAM_COUNT;
}
convert_to_long_ex(pv_data_type);
- data_type = (SWORD) Z_LVAL_PP(pv_data_type);
+ data_type = (SQLSMALLINT) Z_LVAL_PP(pv_data_type);
} else {
WRONG_PARAM_COUNT;
}
@@ -3453,8 +3500,8 @@ PHP_FUNCTION(odbc_specialcolumns)
odbc_result *result = NULL;
odbc_connection *conn;
char *cat = NULL, *schema = NULL, *name = NULL;
- UWORD type;
- UWORD scope, nullable;
+ SQLUSMALLINT type;
+ SQLUSMALLINT scope, nullable;
RETCODE rc;
int argc;
@@ -3465,7 +3512,7 @@ PHP_FUNCTION(odbc_specialcolumns)
WRONG_PARAM_COUNT;
}
convert_to_long_ex(pv_type);
- type = (UWORD) Z_LVAL_PP(pv_type);
+ type = (SQLUSMALLINT) Z_LVAL_PP(pv_type);
convert_to_string_ex(pv_cat);
cat = Z_STRVAL_PP(pv_cat);
convert_to_string_ex(pv_schema);
@@ -3473,9 +3520,9 @@ PHP_FUNCTION(odbc_specialcolumns)
convert_to_string_ex(pv_name);
name = Z_STRVAL_PP(pv_name);
convert_to_long_ex(pv_scope);
- scope = (UWORD) Z_LVAL_PP(pv_scope);
+ scope = (SQLUSMALLINT) Z_LVAL_PP(pv_scope);
convert_to_long_ex(pv_nullable);
- nullable = (UWORD) Z_LVAL_PP(pv_nullable);
+ nullable = (SQLUSMALLINT) Z_LVAL_PP(pv_nullable);
} else {
WRONG_PARAM_COUNT;
}
@@ -3537,7 +3584,7 @@ PHP_FUNCTION(odbc_statistics)
odbc_result *result = NULL;
odbc_connection *conn;
char *cat = NULL, *schema = NULL, *name = NULL;
- UWORD unique, reserved;
+ SQLUSMALLINT unique, reserved;
RETCODE rc;
int argc;
@@ -3554,9 +3601,9 @@ PHP_FUNCTION(odbc_statistics)
convert_to_string_ex(pv_name);
name = Z_STRVAL_PP(pv_name);
convert_to_long_ex(pv_unique);
- unique = (UWORD) Z_LVAL_PP(pv_unique);
+ unique = (SQLUSMALLINT) Z_LVAL_PP(pv_unique);
convert_to_long_ex(pv_reserved);
- reserved = (UWORD) Z_LVAL_PP(pv_reserved);
+ reserved = (SQLUSMALLINT) Z_LVAL_PP(pv_reserved);
} else {
WRONG_PARAM_COUNT;
}
diff --git a/ext/odbc/php_odbc.h b/ext/odbc/php_odbc.h
index 5f0b1e1aa..d9e617c5e 100644
--- a/ext/odbc/php_odbc.h
+++ b/ext/odbc/php_odbc.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_odbc.h,v 1.60.2.1.2.2 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: php_odbc.h,v 1.60.2.1.2.4 2008/12/31 11:17:40 sebastian Exp $ */
#ifndef PHP_ODBC_H
#define PHP_ODBC_H
@@ -33,7 +33,7 @@
extern zend_module_entry odbc_module_entry;
#define odbc_module_ptr &odbc_module_entry
-#if defined(HAVE_DBMAKER) || defined(PHP_WIN32) || defined(HAVE_IBMDB2) || defined(HAVE_UNIXODBC) || defined(HAVE_BIRDSTEP)
+#if defined(HAVE_DBMAKER) || defined(PHP_WIN32) || defined(HAVE_IBMDB2) || defined(HAVE_UNIXODBC) || defined(HAVE_BIRDSTEP) || defined(HAVE_IODBC)
# define PHP_ODBC_HAVE_FETCH_HASH 1
#endif
diff --git a/ext/odbc/php_odbc_includes.h b/ext/odbc/php_odbc_includes.h
index 9ccbd7b76..a5f8244e9 100644
--- a/ext/odbc/php_odbc_includes.h
+++ b/ext/odbc/php_odbc_includes.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_odbc_includes.h,v 1.12.2.1.2.5 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: php_odbc_includes.h,v 1.12.2.1.2.8 2008/12/31 11:17:40 sebastian Exp $ */
#ifndef PHP_ODBC_INCLUDES_H
#define PHP_ODBC_INCLUDES_H
@@ -90,19 +90,19 @@ PHP_FUNCTION(solid_fetch_prev);
#elif defined(HAVE_IODBC) /* iODBC library */
+#ifdef CHAR
+#undef CHAR
+#endif
+
+#ifdef SQLCHAR
+#undef SQLCHAR
+#endif
+
#define ODBC_TYPE "iODBC"
-#include <isql.h>
-#include <isqlext.h>
+#include <sql.h>
+#include <sqlext.h>
+#include <iodbcext.h>
#define HAVE_SQL_EXTENDED_FETCH 1
-#define SQL_FD_FETCH_ABSOLUTE 0x00000010L
-#define SQL_CURSOR_DYNAMIC 2UL
-#define SQL_NO_TOTAL (-4)
-#define SQL_SO_DYNAMIC 0x00000004L
-#define SQL_LEN_DATA_AT_EXEC_OFFSET (-100)
-#define SQL_LEN_DATA_AT_EXEC(length) (-(length)+SQL_LEN_DATA_AT_EXEC_OFFSET)
-#ifndef SQL_SUCCEEDED
-#define SQL_SUCCEEDED(rc) (((rc)&(~1))==0)
-#endif
#elif defined(HAVE_UNIXODBC) /* unixODBC library */
@@ -148,8 +148,12 @@ PHP_FUNCTION(solid_fetch_prev);
#include <isqlext.h>
#include <udbcext.h>
#define HAVE_SQL_EXTENDED_FETCH 1
+#ifndef SQLSMALLINT
#define SQLSMALLINT SWORD
+#endif
+#ifndef SQLUSMALLINT
#define SQLUSMALLINT UWORD
+#endif
#elif defined(HAVE_BIRDSTEP) /* Raima Birdstep */
@@ -204,7 +208,7 @@ PHP_FUNCTION(solid_fetch_prev);
/* Common defines */
-#if defined( HAVE_IBMDB2 ) || defined( HAVE_UNIXODBC )
+#if defined( HAVE_IBMDB2 ) || defined( HAVE_UNIXODBC ) || defined (HAVE_IODBC)
#define ODBC_SQL_ENV_T SQLHANDLE
#define ODBC_SQL_CONN_T SQLHANDLE
#define ODBC_SQL_STMT_T SQLHANDLE
@@ -230,15 +234,15 @@ typedef struct odbc_connection {
typedef struct odbc_result_value {
char name[32];
char *value;
- SDWORD vallen;
- SDWORD coltype;
+ SQLLEN vallen;
+ SQLLEN coltype;
} odbc_result_value;
typedef struct odbc_result {
ODBC_SQL_STMT_T stmt;
odbc_result_value *values;
- SWORD numcols;
- SWORD numparams;
+ SQLSMALLINT numcols;
+ SQLSMALLINT numparams;
# if HAVE_SQL_EXTENDED_FETCH
int fetch_abs;
# endif
@@ -261,6 +265,7 @@ ZEND_BEGIN_MODULE_GLOBALS(odbc)
int defConn;
long defaultlrl;
long defaultbinmode;
+ long default_cursortype;
char laststate[6];
char lasterrormsg[SQL_MAX_MESSAGE_LENGTH];
HashTable *resource_list;
diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c
index 516ff1748..52627ad4c 100644
--- a/ext/openssl/openssl.c
+++ b/ext/openssl/openssl.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -20,7 +20,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: openssl.c,v 1.98.2.5.2.45 2008/04/07 10:44:03 tony2001 Exp $ */
+/* $Id: openssl.c,v 1.98.2.5.2.51 2008/12/31 11:17:41 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -56,6 +56,7 @@
#define OPENSSL_ALGO_MD5 2
#define OPENSSL_ALGO_MD4 3
#define OPENSSL_ALGO_MD2 4
+#define OPENSSL_ALGO_DSS1 5
#define DEBUG_SMIME 0
@@ -641,6 +642,9 @@ static EVP_MD * php_openssl_get_evp_md_from_algo(long algo) { /* {{{ */
case OPENSSL_ALGO_MD2:
mdtype = (EVP_MD *) EVP_md2();
break;
+ case OPENSSL_ALGO_DSS1:
+ mdtype = (EVP_MD *) EVP_dss1();
+ break;
default:
return NULL;
break;
@@ -692,6 +696,7 @@ PHP_MINIT_FUNCTION(openssl)
REGISTER_LONG_CONSTANT("OPENSSL_ALGO_MD5", OPENSSL_ALGO_MD5, CONST_CS|CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("OPENSSL_ALGO_MD4", OPENSSL_ALGO_MD4, CONST_CS|CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("OPENSSL_ALGO_MD2", OPENSSL_ALGO_MD2, CONST_CS|CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("OPENSSL_ALGO_DSS1", OPENSSL_ALGO_DSS1, CONST_CS|CONST_PERSISTENT);
/* flags for S/MIME */
REGISTER_LONG_CONSTANT("PKCS7_DETACHED", PKCS7_DETACHED, CONST_CS|CONST_PERSISTENT);
@@ -1200,7 +1205,7 @@ PHP_FUNCTION(openssl_x509_checkpurpose)
STACK_OF(X509) * untrustedchain = NULL;
long purpose;
char * untrusted = NULL;
- int untrusted_len;
+ int untrusted_len, ret;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Zl|a!s", &zcert, &purpose, &zcainfo, &untrusted, &untrusted_len)
== FAILURE) {
@@ -1224,7 +1229,15 @@ PHP_FUNCTION(openssl_x509_checkpurpose)
if (cert == NULL) {
goto clean_exit;
}
- RETVAL_LONG(check_cert(cainfo, cert, untrustedchain, purpose));
+
+ ret = check_cert(cainfo, cert, untrustedchain, purpose);
+
+ if (ret != 0 && ret != 1) {
+ RETVAL_LONG(ret);
+ } else {
+ RETVAL_BOOL(ret);
+ }
+
clean_exit:
if (certresource == 1 && cert) {
@@ -2086,7 +2099,7 @@ cleanup:
}
/* }}} */
-/* {{{ proto bool openssl_csr_new(array dn, resource &privkey [, array configargs, array extraattribs])
+/* {{{ proto bool openssl_csr_new(array dn, resource &privkey [, array configargs [, array extraattribs]])
Generates a privkey and CSR */
PHP_FUNCTION(openssl_csr_new)
{
@@ -3010,7 +3023,7 @@ PHP_FUNCTION(openssl_pkcs7_encrypt)
}
}
- BIO_reset(infile);
+ (void)BIO_reset(infile);
/* write the encrypted data */
SMIME_write_PKCS7(outfile, p7, infile, flags);
@@ -3099,7 +3112,7 @@ PHP_FUNCTION(openssl_pkcs7_sign)
goto clean_exit;
}
- BIO_reset(infile);
+ (void)BIO_reset(infile);
/* tack on extra headers */
if (zheaders) {
@@ -3522,7 +3535,9 @@ PHP_FUNCTION(openssl_sign)
efree(sigbuf);
RETVAL_FALSE;
}
+#if OPENSSL_VERSION_NUMBER >= 0x0090700fL
EVP_MD_CTX_cleanup(&md_ctx);
+#endif
if (keyresource == -1) {
EVP_PKEY_free(pkey);
}
@@ -3562,7 +3577,9 @@ PHP_FUNCTION(openssl_verify)
EVP_VerifyInit (&md_ctx, mdtype);
EVP_VerifyUpdate (&md_ctx, data, data_len);
err = EVP_VerifyFinal (&md_ctx, (unsigned char *)signature, signature_len, pkey);
+#if OPENSSL_VERSION_NUMBER >= 0x0090700fL
EVP_MD_CTX_cleanup(&md_ctx);
+#endif
if (keyresource == -1) {
EVP_PKEY_free(pkey);
@@ -3918,30 +3935,33 @@ SSL *php_SSL_new_from_context(SSL_CTX *ctx, php_stream *stream TSRMLS_DC) /* {{{
X509 *cert = NULL;
EVP_PKEY *key = NULL;
SSL *tmpssl;
+ char resolved_path_buff[MAXPATHLEN];
- /* a certificate to use for authentication */
- if (SSL_CTX_use_certificate_chain_file(ctx, certfile) != 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to set local cert chain file `%s'; Check that your cafile/capath settings include details of your certificate and its issuer", certfile);
- return NULL;
- }
+ if (VCWD_REALPATH(certfile, resolved_path_buff)) {
+ /* a certificate to use for authentication */
+ if (SSL_CTX_use_certificate_chain_file(ctx, resolved_path_buff) != 1) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to set local cert chain file `%s'; Check that your cafile/capath settings include details of your certificate and its issuer", certfile);
+ return NULL;
+ }
- if (SSL_CTX_use_PrivateKey_file(ctx, certfile, SSL_FILETYPE_PEM) != 1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to set private key file `%s'", certfile);
- return NULL;
- }
+ if (SSL_CTX_use_PrivateKey_file(ctx, resolved_path_buff, SSL_FILETYPE_PEM) != 1) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to set private key file `%s'", resolved_path_buff);
+ return NULL;
+ }
- tmpssl = SSL_new(ctx);
- cert = SSL_get_certificate(tmpssl);
+ tmpssl = SSL_new(ctx);
+ cert = SSL_get_certificate(tmpssl);
- if (cert) {
- key = X509_get_pubkey(cert);
- EVP_PKEY_copy_parameters(key, SSL_get_privatekey(tmpssl));
- EVP_PKEY_free(key);
- }
- SSL_free(tmpssl);
+ if (cert) {
+ key = X509_get_pubkey(cert);
+ EVP_PKEY_copy_parameters(key, SSL_get_privatekey(tmpssl));
+ EVP_PKEY_free(key);
+ }
+ SSL_free(tmpssl);
- if (!SSL_CTX_check_private_key(ctx)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Private key does not match certificate!");
+ if (!SSL_CTX_check_private_key(ctx)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Private key does not match certificate!");
+ }
}
}
if (ok) {
diff --git a/ext/openssl/php_openssl.h b/ext/openssl/php_openssl.h
index 83a42867e..e7448f731 100644
--- a/ext/openssl/php_openssl.h
+++ b/ext/openssl/php_openssl.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_openssl.h,v 1.16.2.1.2.5 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: php_openssl.h,v 1.16.2.1.2.6 2008/12/31 11:17:41 sebastian Exp $ */
#ifndef PHP_OPENSSL_H
#define PHP_OPENSSL_H
diff --git a/ext/openssl/tests/bug41033.pem b/ext/openssl/tests/bug41033.pem
new file mode 100644
index 000000000..4ae74b9a5
--- /dev/null
+++ b/ext/openssl/tests/bug41033.pem
@@ -0,0 +1,12 @@
+-----BEGIN DSA PRIVATE KEY-----
+MIIBuwIBAAKBgQCrQ/By/Y5OQRmmc/e+W+eFVoeR5y8WPOkykwS2hc21aSNY5X3q
+8ZHdV467thFd/QCoR55hHTRGRbYmfOkXSiscotU08ISlxIH39EEhFSzwqzkxFfak
+cgHEu41AUOIfJ2Dz+vcmuasME159pDP0d0gt55pKRPcXoh916p2VS/FBiQIVAMnQ
+C6W+K1brelHqpUqwQ1cdNJklAoGAN858gG/UIF+U3CYTcgl5/OUAqOzvitMV2ue+
+AkDEkGNEZs3KUAjpqHduf1E3znl7hJJIRr+33sul9USxn0vczDBkEJPralQjNX2C
+dnYKDDhJ+UKlAFG2JZint4CBKPFiZC0tVo04iDQQUUfDC4c8K3cS5uzypebJyoLo
+e5b8rScCgYBedJg6vklhMWv2wZD10hbQaXEX5r8T6EQujbfO0RcKpuaJziPPrXO8
+QwPtLt0f40yjTmPxN3LcpgMymiun9UCSTZ3MhVKekCmSNzs5+lQpCm1VlDrCg+jn
+djw0VCX8Cm0lOPIyQ4eCNAB6nQLtBnXFWaqYuUS8iVDE7wmT0iwnkAIVAMKogWVA
+ZOKwjTj9Yztv3lGj7VTa
+-----END DSA PRIVATE KEY-----
diff --git a/ext/openssl/tests/bug41033.phpt b/ext/openssl/tests/bug41033.phpt
new file mode 100644
index 000000000..4aeae66f4
--- /dev/null
+++ b/ext/openssl/tests/bug41033.phpt
@@ -0,0 +1,27 @@
+--TEST--
+#41033, enable signing with DSA keys
+--SKIPIF--
+<?php
+if (!extension_loaded("openssl")) die("skip, openssl required");
+if (OPENSSL_VERSION_NUMBER < 0x009070af) die("skip");
+?>
+--FILE--
+<?php
+$prv = 'file://' . dirname(__FILE__) . '/' . 'bug41033.pem';
+$pub = 'file://' . dirname(__FILE__) . '/' . 'bug41033pub.pem';
+
+
+$prkeyid = openssl_get_privatekey($prv, "1234");
+$ct = "Hello I am some text!";
+openssl_sign($ct, $signature, $prkeyid, OPENSSL_ALGO_DSS1);
+echo "Signature: ".base64_encode($signature) . "\n";
+
+$pukeyid = openssl_get_publickey($pub);
+$valid = openssl_verify($ct, $signature, $pukeyid, OPENSSL_ALGO_DSS1);
+echo "Signature validity: " . $valid . "\n";
+
+
+?>
+--EXPECTF--
+Signature: %s
+Signature validity: 1
diff --git a/ext/openssl/tests/bug41033pub.pem b/ext/openssl/tests/bug41033pub.pem
new file mode 100644
index 000000000..0d4ab27ff
--- /dev/null
+++ b/ext/openssl/tests/bug41033pub.pem
@@ -0,0 +1,12 @@
+-----BEGIN PUBLIC KEY-----
+MIIBtjCCASsGByqGSM44BAEwggEeAoGBAKtD8HL9jk5BGaZz975b54VWh5HnLxY8
+6TKTBLaFzbVpI1jlferxkd1Xjru2EV39AKhHnmEdNEZFtiZ86RdKKxyi1TTwhKXE
+gff0QSEVLPCrOTEV9qRyAcS7jUBQ4h8nYPP69ya5qwwTXn2kM/R3SC3nmkpE9xei
+H3XqnZVL8UGJAhUAydALpb4rVut6UeqlSrBDVx00mSUCgYA3znyAb9QgX5TcJhNy
+CXn85QCo7O+K0xXa574CQMSQY0RmzcpQCOmod25/UTfOeXuEkkhGv7fey6X1RLGf
+S9zMMGQQk+tqVCM1fYJ2dgoMOEn5QqUAUbYlmKe3gIEo8WJkLS1WjTiINBBRR8ML
+hzwrdxLm7PKl5snKguh7lvytJwOBhAACgYBedJg6vklhMWv2wZD10hbQaXEX5r8T
+6EQujbfO0RcKpuaJziPPrXO8QwPtLt0f40yjTmPxN3LcpgMymiun9UCSTZ3MhVKe
+kCmSNzs5+lQpCm1VlDrCg+jndjw0VCX8Cm0lOPIyQ4eCNAB6nQLtBnXFWaqYuUS8
+iVDE7wmT0iwnkA==
+-----END PUBLIC KEY-----
diff --git a/ext/openssl/tests/bug46127.pem b/ext/openssl/tests/bug46127.pem
new file mode 100644
index 000000000..9d754d460
--- /dev/null
+++ b/ext/openssl/tests/bug46127.pem
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIC5jCCAk+gAwIBAgIBADANBgkqhkiG9w0BAQQFADBcMQswCQYDVQQGEwJBVTET
+MBEGA1UECBMKUXVlZW5zbGFuZDEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQx
+HDAaBgNVBAMTE1Rlc3QgUENBICgxMDI0IGJpdCkwHhcNOTkxMjAyMjEzNTQ4WhcN
+MDUwNzExMjEzNTQ4WjBcMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFu
+ZDEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxHDAaBgNVBAMTE1Rlc3QgUENB
+ICgxMDI0IGJpdCkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJ2haT/f5Zwy
+V+MiuSDjSR62adBoSiBB7Usty44lXqsp9RICw+DCCxpsn/CfxPEDXLLd4olsWXc6
+JRcxGynbYmnzk+Z6aIPPJQhK3CTvaqGnWKZsA1m+WaUIUqJCuNTK4N+7hMAGaf6S
+S3e9HVgEQ4a34gXJ7VQFVIBNV1EnZRWHAgMBAAGjgbcwgbQwHQYDVR0OBBYEFE0R
+aEcrj18q1dw+G6nJbsTWR213MIGEBgNVHSMEfTB7gBRNEWhHK49fKtXcPhupyW7E
+1kdtd6FgpF4wXDELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
+BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYDVQQDExNUZXN0IFBDQSAoMTAy
+NCBiaXQpggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAUa8B3pho
++Mvxeq9HsEzJxHIFQla05S5J/e/V+DQTYoKiRFchKPrDAdrzYSEvP3h4QJEtsNqQ
+JfOxg5M42uLFq7aPGWkF6ZZqZsYS+zA9IVT14g7gNA6Ne+5QtJqQtH9HA24st0T0
+Tga/lZ9M2ovImovaxSL/kRHbpCWcqWVxpOw=
+-----END CERTIFICATE-----
+-----BEGIN RSA PRIVATE KEY-----
+MIICXAIBAAKBgQCdoWk/3+WcMlfjIrkg40ketmnQaEogQe1LLcuOJV6rKfUSAsPg
+wgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp22Jp85PmemiDzyUIStwk72qhp1imbANZ
+vlmlCFKiQrjUyuDfu4TABmn+kkt3vR1YBEOGt+IFye1UBVSATVdRJ2UVhwIDAQAB
+AoGAba4fTtuap5l7/8ZsbE7Z1O32KJY4ZcOZukLOLUUhXxXduT+FTgGWujc0/rgc
+z9qYCLlNZHOouMYTgtSfYvuMuLZ11VIt0GYH+nRioLShE59Yy+zCRyC+gPigS1kz
+xvo14AsOIPYV14Tk/SsHyq6E0eTk7VzaIE197giiINUERPECQQDSKmtPTh/lRKw7
+HSZSM0I1mFWn/1zqrAbontRQY5w98QWIOe5qmzYyFbPXYT3d9BzlsMyhgiRNoBbD
+yvohSHXJAkEAwAHx6ezAZeWWzD5yXD36nyjpkVCw7Tk7TSmOceLJMWt1QcrCfqlS
+xA5jjpQ6Z8suU5DdtWAryM2sAir1WisYzwJAd6Zcx56jvAQ3xcPXsE6scBTVFzrj
+7FqZ6E+cclPzfLQ+QQsyOBE7bpI6e/FJppY26XGZXo3YGzV8IGXrt40oOQJALETG
+h86EFXo3qGOFbmsDy4pdP5nBERCu8X1xUCSfintiD4c2DInxgS5oGclnJeMcjTvL
+QjQoJCX3UJCi/OUO1QJBAKgcDHWjMvt+l1pjJBsSEZ0HX9AAIIVx0RQmbFGS+F2Q
+hhu5l77WnnZOQ9vvhV5u7NPCUF9nhU3jh60qWWO8mkc=
+-----END RSA PRIVATE KEY-----
diff --git a/ext/openssl/tests/bug46127.phpt b/ext/openssl/tests/bug46127.phpt
new file mode 100644
index 000000000..a70a5d490
--- /dev/null
+++ b/ext/openssl/tests/bug46127.phpt
@@ -0,0 +1,58 @@
+--TEST--
+#46127, openssl_sign/verify: accept different algos
+--SKIPIF--
+<?php
+if (!extension_loaded("openssl")) die("skip, openssl required");
+if (!extension_loaded("pcntl")) die("skip, pcntl required");
+if (OPENSSL_VERSION_NUMBER < 0x009070af) die("skip");
+?>
+--FILE--
+<?php
+
+function ssl_server($port) {
+ $pem = dirname(__FILE__) . '/bug46127.pem';
+ $ssl = array(
+ 'verify_peer' => false,
+ 'allow_self_signed' => true,
+ 'local_cert' => $pem,
+ // 'passphrase' => '',
+ );
+ $context = stream_context_create(array('ssl' => $ssl));
+ $sock = stream_socket_server('ssl://127.0.0.1:'.$port, $errno, $errstr, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN, $context);
+ if (!$sock) return false;
+
+ $link = stream_socket_accept($sock);
+ if (!$link) return false; // bad link?
+
+ fputs($link, "Sending bug 46127\n");
+
+ // close stuff
+ fclose($link);
+ fclose($sock);
+
+ exit;
+}
+
+echo "Running bug46127\n";
+
+$port = rand(15000, 32000);
+
+$pid = pcntl_fork();
+if ($pid == 0) { // child
+ ssl_server($port);
+ exit;
+}
+
+// client or failed
+sleep(1);
+$sock = fsockopen('ssl://127.0.0.1', $port, $errno, $errstr);
+if (!$sock) exit;
+
+echo fgets($sock);
+
+pcntl_waitpid($pid, $status);
+
+?>
+--EXPECTF--
+Running bug46127
+Sending bug 46127
diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c
index fc29a82b6..c31a5052f 100644
--- a/ext/openssl/xp_ssl.c
+++ b/ext/openssl/xp_ssl.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: xp_ssl.c,v 1.22.2.3.2.11 2008/04/08 14:11:49 jorton Exp $ */
+/* $Id: xp_ssl.c,v 1.22.2.3.2.16 2008/12/31 11:17:41 sebastian Exp $ */
#include "php.h"
#include "ext/standard/file.h"
@@ -152,9 +152,10 @@ static int handle_ssl_error(php_stream *stream, int nr_bytes, zend_bool is_init
ERR_error_string_n(ecode, esbuf, sizeof(esbuf) - 1);
}
code = strlen(esbuf);
- esbuf[code] = '\0';
ebuf = erealloc(ebuf, ebuf_size + code + 1);
+ ebuf_size += code;
+
if (wptr == NULL) {
wptr = ebuf;
}
@@ -198,14 +199,13 @@ static size_t php_openssl_sockop_write(php_stream *stream, const char *buf, size
break;
}
} while(retry);
-
+
+ if (didwrite > 0) {
+ php_stream_notify_progress_increment(stream->context, didwrite, 0);
+ }
} else {
didwrite = php_stream_socket_ops.write(stream, buf, count TSRMLS_CC);
}
-
- if (didwrite > 0) {
- php_stream_notify_progress_increment(stream->context, didwrite, 0);
- }
if (didwrite < 0) {
didwrite = 0;
@@ -234,16 +234,16 @@ static size_t php_openssl_sockop_read(php_stream *stream, char *buf, size_t coun
break;
}
} while (retry);
+
+ if (nr_bytes > 0) {
+ php_stream_notify_progress_increment(stream->context, nr_bytes, 0);
+ }
}
else
{
nr_bytes = php_stream_socket_ops.read(stream, buf, count TSRMLS_CC);
}
- if (nr_bytes > 0) {
- php_stream_notify_progress_increment(stream->context, nr_bytes, 0);
- }
-
if (nr_bytes < 0) {
nr_bytes = 0;
}
@@ -418,7 +418,7 @@ static inline int php_openssl_enable_crypto(php_stream *stream,
n = SSL_connect(sslsock->ssl_handle);
gettimeofday(&tve, &tz);
- timeout -= (tve.tv_sec + tve.tv_usec / 1000000) - (tvs.tv_sec + tvs.tv_usec / 1000000);
+ timeout -= (tve.tv_sec + (float) tve.tv_usec / 1000000) - (tvs.tv_sec + (float) tvs.tv_usec / 1000000);
if (timeout < 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "SSL: connection timeout");
return -1;
@@ -558,6 +558,9 @@ static inline int php_openssl_tcp_sockop_accept(php_stream *stream, php_openssl_
xparam->outputs.client = php_stream_alloc_rel(stream->ops, clisockdata, NULL, "r+");
if (xparam->outputs.client) {
xparam->outputs.client->context = stream->context;
+ if (stream->context) {
+ zend_list_addref(stream->context->rsrc_id);
+ }
}
}
diff --git a/ext/pcntl/EXPERIMENTAL b/ext/pcntl/EXPERIMENTAL
deleted file mode 100644
index 6443e9964..000000000
--- a/ext/pcntl/EXPERIMENTAL
+++ /dev/null
@@ -1,5 +0,0 @@
-this extension is experimental,
-its functions may change their names
-or move to extension all together
-so do not rely to much on them
-you have been warned!
diff --git a/ext/pcntl/config.m4 b/ext/pcntl/config.m4
index da5b3528d..8a0769f51 100644
--- a/ext/pcntl/config.m4
+++ b/ext/pcntl/config.m4
@@ -1,12 +1,9 @@
dnl
-dnl $Id: config.m4,v 1.10 2003/10/28 17:08:18 gschlossnagle Exp $
+dnl $Id: config.m4,v 1.10.6.1 2008/08/07 13:11:28 tony2001 Exp $
dnl
-dnl Process Control (pcntl) extentsion --EXPERIMENTAL--
-dnl TODO - Add platform checks
-
PHP_ARG_ENABLE(pcntl, whether to enable pcntl support,
-[ --enable-pcntl Enable experimental pcntl support (CLI/CGI only)])
+[ --enable-pcntl Enable pcntl support (CLI/CGI only)])
if test "$PHP_PCNTL" != "no"; then
diff --git a/ext/pcntl/pcntl.c b/ext/pcntl/pcntl.c
index 153502700..f14358feb 100755
--- a/ext/pcntl/pcntl.c
+++ b/ext/pcntl/pcntl.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pcntl.c,v 1.48.2.2.2.6 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: pcntl.c,v 1.48.2.2.2.7 2008/12/31 11:17:41 sebastian Exp $ */
#define PCNTL_DEBUG 0
diff --git a/ext/pcntl/php_pcntl.h b/ext/pcntl/php_pcntl.h
index c7c46bf60..0f15934ce 100644
--- a/ext/pcntl/php_pcntl.h
+++ b/ext/pcntl/php_pcntl.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pcntl.h,v 1.20.2.1.2.2 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: php_pcntl.h,v 1.20.2.1.2.3 2008/12/31 11:17:41 sebastian Exp $ */
#ifndef PHP_PCNTL_H
#define PHP_PCNTL_H
diff --git a/ext/pcntl/php_signal.c b/ext/pcntl/php_signal.c
index c6c5208de..893494bd4 100644
--- a/ext/pcntl/php_signal.c
+++ b/ext/pcntl/php_signal.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_signal.c,v 1.9.2.1.2.2 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: php_signal.c,v 1.9.2.1.2.3 2008/12/31 11:17:41 sebastian Exp $ */
#include "php_signal.h"
diff --git a/ext/pcntl/php_signal.h b/ext/pcntl/php_signal.h
index 2a2a0556a..97f714d1d 100644
--- a/ext/pcntl/php_signal.h
+++ b/ext/pcntl/php_signal.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_signal.h,v 1.9.2.1.2.2 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: php_signal.h,v 1.9.2.1.2.3 2008/12/31 11:17:41 sebastian Exp $ */
#include <signal.h>
#ifndef PHP_SIGNAL_H
diff --git a/ext/pcre/config.w32 b/ext/pcre/config.w32
index cc779a2a3..333417d72 100644
--- a/ext/pcre/config.w32
+++ b/ext/pcre/config.w32
@@ -1,14 +1,11 @@
-// $Id: config.w32,v 1.4.2.5.2.7 2007/09/11 16:17:33 nlopess Exp $
+// $Id: config.w32,v 1.4.2.5.2.9 2009/01/02 05:00:35 andi Exp $
// vim:ft=javascript
-ARG_WITH("pcre-regex", "Perl Compatible Regular Expressions", "yes");
+EXTENSION("pcre", "php_pcre.c", false /* never shared */,
+ "-Iext/pcre/pcrelib");
+ADD_SOURCES("ext/pcre/pcrelib", "pcre_chartables.c pcre_ucd.c pcre_compile.c pcre_config.c pcre_exec.c pcre_fullinfo.c pcre_get.c pcre_globals.c pcre_info.c pcre_maketables.c pcre_newline.c pcre_ord2utf8.c pcre_refcount.c pcre_study.c pcre_tables.c pcre_try_flipped.c pcre_valid_utf8.c pcre_version.c pcre_xclass.c", "pcre");
+ADD_DEF_FILE("ext\\pcre\\php_pcre.def");
-if (PHP_PCRE_REGEX == "yes") {
- EXTENSION("pcre", "php_pcre.c", PHP_PCRE_REGEX_SHARED,
- "-DNO_RECURSE -Iext/pcre/pcrelib");
- ADD_SOURCES("ext/pcre/pcrelib", "pcre_chartables.c pcre_ucp_searchfuncs.c pcre_compile.c pcre_config.c pcre_exec.c pcre_fullinfo.c pcre_get.c pcre_globals.c pcre_info.c pcre_maketables.c pcre_newline.c pcre_ord2utf8.c pcre_refcount.c pcre_study.c pcre_tables.c pcre_try_flipped.c pcre_valid_utf8.c pcre_version.c pcre_xclass.c", "pcre");
- ADD_DEF_FILE("ext\\pcre\\php_pcre.def");
-
- AC_DEFINE('HAVE_BUNDLED_PCRE', 1, 'Using bundled PCRE library');
- AC_DEFINE('HAVE_PCRE', 1, 'Have PCRE library');
-}
+AC_DEFINE('HAVE_BUNDLED_PCRE', 1, 'Using bundled PCRE library');
+AC_DEFINE('HAVE_PCRE', 1, 'Have PCRE library');
+PHP_PCRE="yes";
diff --git a/ext/pcre/config0.m4 b/ext/pcre/config0.m4
index 0d87053ba..1d25b9c34 100644
--- a/ext/pcre/config0.m4
+++ b/ext/pcre/config0.m4
@@ -1,5 +1,5 @@
dnl
-dnl $Id: config0.m4,v 1.38.2.3.2.10 2007/09/11 16:17:33 nlopess Exp $
+dnl $Id: config0.m4,v 1.38.2.3.2.12 2008/12/29 15:27:11 scottmac Exp $
dnl
dnl By default we'll compile and link against the bundled PCRE library
@@ -11,7 +11,7 @@ PHP_ARG_WITH(pcre-regex,for PCRE support,
if test "$PHP_PCRE_REGEX" != "no"; then
if test "$PHP_PCRE_REGEX" = "yes"; then
- PHP_NEW_EXTENSION(pcre, pcrelib/pcre_chartables.c pcrelib/pcre_ucp_searchfuncs.c pcrelib/pcre_compile.c pcrelib/pcre_config.c pcrelib/pcre_exec.c pcrelib/pcre_fullinfo.c pcrelib/pcre_get.c pcrelib/pcre_globals.c pcrelib/pcre_info.c pcrelib/pcre_maketables.c pcrelib/pcre_newline.c pcrelib/pcre_ord2utf8.c pcrelib/pcre_refcount.c pcrelib/pcre_study.c pcrelib/pcre_tables.c pcrelib/pcre_try_flipped.c pcrelib/pcre_valid_utf8.c pcrelib/pcre_version.c pcrelib/pcre_xclass.c php_pcre.c, $ext_shared,,-I@ext_srcdir@/pcrelib)
+ PHP_NEW_EXTENSION(pcre, pcrelib/pcre_chartables.c pcrelib/pcre_ucd.c pcrelib/pcre_compile.c pcrelib/pcre_config.c pcrelib/pcre_exec.c pcrelib/pcre_fullinfo.c pcrelib/pcre_get.c pcrelib/pcre_globals.c pcrelib/pcre_info.c pcrelib/pcre_maketables.c pcrelib/pcre_newline.c pcrelib/pcre_ord2utf8.c pcrelib/pcre_refcount.c pcrelib/pcre_study.c pcrelib/pcre_tables.c pcrelib/pcre_try_flipped.c pcrelib/pcre_valid_utf8.c pcrelib/pcre_version.c pcrelib/pcre_xclass.c php_pcre.c, $ext_shared,,-I@ext_srcdir@/pcrelib)
PHP_ADD_BUILD_DIR($ext_builddir/pcrelib)
PHP_INSTALL_HEADERS([ext/pcre], [php_pcre.h pcrelib/])
AC_DEFINE(HAVE_BUNDLED_PCRE, 1, [ ])
diff --git a/ext/pcre/pcrelib/ChangeLog b/ext/pcre/pcrelib/ChangeLog
index 3ebbb4522..fa137fb74 100644
--- a/ext/pcre/pcrelib/ChangeLog
+++ b/ext/pcre/pcrelib/ChangeLog
@@ -1,6 +1,192 @@
ChangeLog for PCRE
------------------
+Version 7.8 05-Sep-08
+---------------------
+
+1. Replaced UCP searching code with optimized version as implemented for Ad
+ Muncher (http://www.admuncher.com/) by Peter Kankowski. This uses a two-
+ stage table and inline lookup instead of a function, giving speed ups of 2
+ to 5 times on some simple patterns that I tested. Permission was given to
+ distribute the MultiStage2.py script that generates the tables (it's not in
+ the tarball, but is in the Subversion repository).
+
+2. Updated the Unicode datatables to Unicode 5.1.0. This adds yet more
+ scripts.
+
+3. Change 12 for 7.7 introduced a bug in pcre_study() when a pattern contained
+ a group with a zero qualifier. The result of the study could be incorrect,
+ or the function might crash, depending on the pattern.
+
+4. Caseless matching was not working for non-ASCII characters in back
+ references. For example, /(\x{de})\1/8i was not matching \x{de}\x{fe}.
+ It now works when Unicode Property Support is available.
+
+5. In pcretest, an escape such as \x{de} in the data was always generating
+ a UTF-8 string, even in non-UTF-8 mode. Now it generates a single byte in
+ non-UTF-8 mode. If the value is greater than 255, it gives a warning about
+ truncation.
+
+6. Minor bugfix in pcrecpp.cc (change "" == ... to NULL == ...).
+
+7. Added two (int) casts to pcregrep when printing the difference of two
+ pointers, in case they are 64-bit values.
+
+8. Added comments about Mac OS X stack usage to the pcrestack man page and to
+ test 2 if it fails.
+
+9. Added PCRE_CALL_CONVENTION just before the names of all exported functions,
+ and a #define of that name to empty if it is not externally set. This is to
+ allow users of MSVC to set it if necessary.
+
+10. The PCRE_EXP_DEFN macro which precedes exported functions was missing from
+ the convenience functions in the pcre_get.c source file.
+
+11. An option change at the start of a pattern that had top-level alternatives
+ could cause overwriting and/or a crash. This command provoked a crash in
+ some environments:
+
+ printf "/(?i)[\xc3\xa9\xc3\xbd]|[\xc3\xa9\xc3\xbdA]/8\n" | pcretest
+
+ This potential security problem was recorded as CVE-2008-2371.
+
+12. For a pattern where the match had to start at the beginning or immediately
+ after a newline (e.g /.*anything/ without the DOTALL flag), pcre_exec() and
+ pcre_dfa_exec() could read past the end of the passed subject if there was
+ no match. To help with detecting such bugs (e.g. with valgrind), I modified
+ pcretest so that it places the subject at the end of its malloc-ed buffer.
+
+13. The change to pcretest in 12 above threw up a couple more cases when pcre_
+ exec() might read past the end of the data buffer in UTF-8 mode.
+
+14. A similar bug to 7.3/2 existed when the PCRE_FIRSTLINE option was set and
+ the data contained the byte 0x85 as part of a UTF-8 character within its
+ first line. This applied both to normal and DFA matching.
+
+15. Lazy qualifiers were not working in some cases in UTF-8 mode. For example,
+ /^[^d]*?$/8 failed to match "abc".
+
+16. Added a missing copyright notice to pcrecpp_internal.h.
+
+17. Make it more clear in the documentation that values returned from
+ pcre_exec() in ovector are byte offsets, not character counts.
+
+18. Tidied a few places to stop certain compilers from issuing warnings.
+
+19. Updated the Virtual Pascal + BCC files to compile the latest v7.7, as
+ supplied by Stefan Weber. I made a further small update for 7.8 because
+ there is a change of source arrangements: the pcre_searchfuncs.c module is
+ replaced by pcre_ucd.c.
+
+
+Version 7.7 07-May-08
+---------------------
+
+1. Applied Craig's patch to sort out a long long problem: "If we can't convert
+ a string to a long long, pretend we don't even have a long long." This is
+ done by checking for the strtoq, strtoll, and _strtoi64 functions.
+
+2. Applied Craig's patch to pcrecpp.cc to restore ABI compatibility with
+ pre-7.6 versions, which defined a global no_arg variable instead of putting
+ it in the RE class. (See also #8 below.)
+
+3. Remove a line of dead code, identified by coverity and reported by Nuno
+ Lopes.
+
+4. Fixed two related pcregrep bugs involving -r with --include or --exclude:
+
+ (1) The include/exclude patterns were being applied to the whole pathnames
+ of files, instead of just to the final components.
+
+ (2) If there was more than one level of directory, the subdirectories were
+ skipped unless they satisfied the include/exclude conditions. This is
+ inconsistent with GNU grep (and could even be seen as contrary to the
+ pcregrep specification - which I improved to make it absolutely clear).
+ The action now is always to scan all levels of directory, and just
+ apply the include/exclude patterns to regular files.
+
+5. Added the --include_dir and --exclude_dir patterns to pcregrep, and used
+ --exclude_dir in the tests to avoid scanning .svn directories.
+
+6. Applied Craig's patch to the QuoteMeta function so that it escapes the
+ NUL character as backslash + 0 rather than backslash + NUL, because PCRE
+ doesn't support NULs in patterns.
+
+7. Added some missing "const"s to declarations of static tables in
+ pcre_compile.c and pcre_dfa_exec.c.
+
+8. Applied Craig's patch to pcrecpp.cc to fix a problem in OS X that was
+ caused by fix #2 above. (Subsequently also a second patch to fix the
+ first patch. And a third patch - this was a messy problem.)
+
+9. Applied Craig's patch to remove the use of push_back().
+
+10. Applied Alan Lehotsky's patch to add REG_STARTEND support to the POSIX
+ matching function regexec().
+
+11. Added support for the Oniguruma syntax \g<name>, \g<n>, \g'name', \g'n',
+ which, however, unlike Perl's \g{...}, are subroutine calls, not back
+ references. PCRE supports relative numbers with this syntax (I don't think
+ Oniguruma does).
+
+12. Previously, a group with a zero repeat such as (...){0} was completely
+ omitted from the compiled regex. However, this means that if the group
+ was called as a subroutine from elsewhere in the pattern, things went wrong
+ (an internal error was given). Such groups are now left in the compiled
+ pattern, with a new opcode that causes them to be skipped at execution
+ time.
+
+13. Added the PCRE_JAVASCRIPT_COMPAT option. This makes the following changes
+ to the way PCRE behaves:
+
+ (a) A lone ] character is dis-allowed (Perl treats it as data).
+
+ (b) A back reference to an unmatched subpattern matches an empty string
+ (Perl fails the current match path).
+
+ (c) A data ] in a character class must be notated as \] because if the
+ first data character in a class is ], it defines an empty class. (In
+ Perl it is not possible to have an empty class.) The empty class []
+ never matches; it forces failure and is equivalent to (*FAIL) or (?!).
+ The negative empty class [^] matches any one character, independently
+ of the DOTALL setting.
+
+14. A pattern such as /(?2)[]a()b](abc)/ which had a forward reference to a
+ non-existent subpattern following a character class starting with ']' and
+ containing () gave an internal compiling error instead of "reference to
+ non-existent subpattern". Fortunately, when the pattern did exist, the
+ compiled code was correct. (When scanning forwards to check for the
+ existencd of the subpattern, it was treating the data ']' as terminating
+ the class, so got the count wrong. When actually compiling, the reference
+ was subsequently set up correctly.)
+
+15. The "always fail" assertion (?!) is optimzed to (*FAIL) by pcre_compile;
+ it was being rejected as not supported by pcre_dfa_exec(), even though
+ other assertions are supported. I have made pcre_dfa_exec() support
+ (*FAIL).
+
+16. The implementation of 13c above involved the invention of a new opcode,
+ OP_ALLANY, which is like OP_ANY but doesn't check the /s flag. Since /s
+ cannot be changed at match time, I realized I could make a small
+ improvement to matching performance by compiling OP_ALLANY instead of
+ OP_ANY for "." when DOTALL was set, and then removing the runtime tests
+ on the OP_ANY path.
+
+17. Compiling pcretest on Windows with readline support failed without the
+ following two fixes: (1) Make the unistd.h include conditional on
+ HAVE_UNISTD_H; (2) #define isatty and fileno as _isatty and _fileno.
+
+18. Changed CMakeLists.txt and cmake/FindReadline.cmake to arrange for the
+ ncurses library to be included for pcretest when ReadLine support is
+ requested, but also to allow for it to be overridden. This patch came from
+ Daniel Bergström.
+
+19. There was a typo in the file ucpinternal.h where f0_rangeflag was defined
+ as 0x00f00000 instead of 0x00800000. Luckily, this would not have caused
+ any errors with the current Unicode tables. Thanks to Peter Kankowski for
+ spotting this.
+
+
Version 7.6 28-Jan-08
---------------------
diff --git a/ext/pcre/pcrelib/HACKING b/ext/pcre/pcrelib/HACKING
index c946cd2bd..1f30d4c48 100644
--- a/ext/pcre/pcrelib/HACKING
+++ b/ext/pcre/pcrelib/HACKING
@@ -125,7 +125,8 @@ Opcodes with no following data
These items are all just one byte long
OP_END end of pattern
- OP_ANY match any character
+ OP_ANY match any one character other than newline
+ OP_ALLANY match any one character, including newline
OP_ANYBYTE match any single byte, even in UTF-8 mode
OP_SOD match start of data: \A
OP_SOM, start of match (subject + offset): \G
@@ -318,9 +319,12 @@ maximally respectively. All three are followed by LINK_SIZE bytes giving (as a
positive number) the offset back to the matching bracket opcode.
If a subpattern is quantified such that it is permitted to match zero times, it
-is preceded by one of OP_BRAZERO or OP_BRAMINZERO. These are single-byte
-opcodes which tell the matcher that skipping this subpattern entirely is a
-valid branch.
+is preceded by one of OP_BRAZERO, OP_BRAMINZERO, or OP_SKIPZERO. These are
+single-byte opcodes that tell the matcher that skipping the following
+subpattern entirely is a valid branch. In the case of the first two, not
+skipping the pattern is also valid (greedy and non-greedy). The third is used
+when a pattern has the quantifier {0,0}. It cannot be entirely discarded,
+because it may be called as a subroutine from elsewhere in the regex.
A subpattern with an indefinite maximum repetition is replicated in the
compiled data its minimum number of times (or once with OP_BRAZERO if the
@@ -411,4 +415,4 @@ at compile time, and so does not cause anything to be put into the compiled
data.
Philip Hazel
-August 2007
+April 2008
diff --git a/ext/pcre/pcrelib/NEWS b/ext/pcre/pcrelib/NEWS
index d274541ba..43e47b6ed 100644
--- a/ext/pcre/pcrelib/NEWS
+++ b/ext/pcre/pcrelib/NEWS
@@ -1,6 +1,21 @@
News about PCRE releases
------------------------
+
+Release 7.8 05-Sep-08
+---------------------
+
+More bug fixes, plus a performance improvement in Unicode character property
+lookup.
+
+
+Release 7.7 07-May-08
+---------------------
+
+This is once again mainly a bug-fix release, but there are a couple of new
+features.
+
+
Release 7.6 28-Jan-08
---------------------
diff --git a/ext/pcre/pcrelib/NON-UNIX-USE b/ext/pcre/pcrelib/NON-UNIX-USE
index e6726faaa..bf5c41a5e 100644
--- a/ext/pcre/pcrelib/NON-UNIX-USE
+++ b/ext/pcre/pcrelib/NON-UNIX-USE
@@ -85,8 +85,6 @@ The following are generic comments about building the PCRE C library "by hand".
pcre_internal.h
ucp.h
- ucpinternal.h
- ucptable.h
(5) Also ensure that you have the following file, which is #included as source
when building a debugging version of PCRE, and is also used by pcretest.
@@ -113,7 +111,7 @@ The following are generic comments about building the PCRE C library "by hand".
pcre_study.c
pcre_tables.c
pcre_try_flipped.c
- pcre_ucp_searchfuncs.c
+ pcre_ucd.c
pcre_valid_utf8.c
pcre_version.c
pcre_xclass.c
@@ -190,6 +188,17 @@ otherwise the pcre_malloc() and pcre_free() exported functions will be declared
__declspec(dllimport), with unwanted results.
+CALLING CONVENTIONS IN WINDOWS ENVIRONMENTS
+
+It is possible to compile programs to use different calling conventions using
+MSVC. Search the web for "calling conventions" for more information. To make it
+easier to change the calling convention for the exported functions in the
+PCRE library, the macro PCRE_CALL_CONVENTION is present in all the external
+definitions. It can be set externally when compiling (e.g. in CFLAGS). If it is
+not set, it defaults to empty; the default calling convention is then used
+(which is what is wanted most of the time).
+
+
COMMENTS ABOUT WIN32 BUILDS (see also "BUILDING PCRE WITH CMAKE" below)
There are two ways of building PCRE using the "configure, make, make install"
@@ -428,5 +437,5 @@ $! Locale could not be set to fr
$!
=========================
-Last Updated: 25 January 2008
+Last Updated: 05 September 2008
****
diff --git a/ext/pcre/pcrelib/README b/ext/pcre/pcrelib/README
index 98d52f13a..387903893 100644
--- a/ext/pcre/pcrelib/README
+++ b/ext/pcre/pcrelib/README
@@ -1,9 +1,12 @@
README file for PCRE (Perl-compatible regular expression library)
-----------------------------------------------------------------
-The latest release of PCRE is always available from
+The latest release of PCRE is always available in three alternative formats
+from:
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-xxx.tar.gz
+ ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-xxx.tar.bz2
+ ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-xxx.zip
There is a mailing list for discussion about the development of PCRE at
@@ -276,6 +279,15 @@ library. You can read more about them in the pcrebuild man page.
Note that libreadline is GPL-licenced, so if you distribute a binary of
pcretest linked in this way, there may be licensing issues.
+ Setting this option causes the -lreadline option to be added to the pcretest
+ build. In many operating environments with a sytem-installed readline
+ library this is sufficient. However, in some environments (e.g. if an
+ unmodified distribution version of readline is in use), it may be necessary
+ to specify something like LIBS="-lncurses" as well. This is because, to quote
+ the readline INSTALL, "Readline uses the termcap functions, but does not link
+ with the termcap or curses library itself, allowing applications which link
+ with readline the to choose an appropriate library."
+
The "configure" script builds the following files for the basic C library:
. Makefile is the makefile that builds the library
@@ -631,7 +643,7 @@ The distribution should contain the following files:
pcre_study.c )
pcre_tables.c )
pcre_try_flipped.c )
- pcre_ucp_searchfuncs.c )
+ pcre_ucd.c )
pcre_valid_utf8.c )
pcre_version.c )
pcre_xclass.c )
@@ -640,9 +652,7 @@ The distribution should contain the following files:
pcre.h.in template for pcre.h when built by "configure"
pcreposix.h header for the external POSIX wrapper API
pcre_internal.h header for internal use
- ucp.h ) headers concerned with
- ucpinternal.h ) Unicode property handling
- ucptable.h ) (this one is the data table)
+ ucp.h header for Unicode property handling
config.h.in template for config.h, which is built by "configure"
@@ -716,6 +726,9 @@ The distribution should contain the following files:
(D) Auxiliary files for cmake support
+ cmake/COPYING-CMAKE-SCRIPTS
+ cmake/FindPackageHandleStandardArgs.cmake
+ cmake/FindReadline.cmake
CMakeLists.txt
config-cmake.h.in
@@ -740,4 +753,4 @@ The distribution should contain the following files:
Philip Hazel
Email local part: ph10
Email domain: cam.ac.uk
-Last updated: 25 January 2008
+Last updated: 05 September 2008
diff --git a/ext/pcre/pcrelib/config.h b/ext/pcre/pcrelib/config.h
index 0b753d686..dc6f26753 100644
--- a/ext/pcre/pcrelib/config.h
+++ b/ext/pcre/pcrelib/config.h
@@ -132,9 +132,7 @@ them both to 0; an emulation function will be used. */
#endif
/* Define to 1 if you have the `strtoll' function. */
-#ifndef HAVE_STRTOLL
-#define HAVE_STRTOLL 1
-#endif
+/* #undef HAVE_STRTOLL */
/* Define to 1 if you have the `strtoq' function. */
#ifndef HAVE_STRTOQ
@@ -251,13 +249,13 @@ them both to 0; an emulation function will be used. */
#define PACKAGE_NAME "PCRE"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "PCRE 7.6"
+#define PACKAGE_STRING "PCRE 7.8"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "pcre"
/* Define to the version of this package. */
-#define PACKAGE_VERSION "7.6"
+#define PACKAGE_VERSION "7.8"
/* If you are compiling for a system other than a Unix-like system or
@@ -310,7 +308,7 @@ them both to 0; an emulation function will be used. */
/* Version number of package */
#ifndef VERSION
-#define VERSION "7.6"
+#define VERSION "7.8"
#endif
/* Define to empty if `const' does not conform to ANSI C. */
diff --git a/ext/pcre/pcrelib/dftables.c b/ext/pcre/pcrelib/dftables.c
index 63fc7074e..9593e6456 100644
--- a/ext/pcre/pcrelib/dftables.c
+++ b/ext/pcre/pcrelib/dftables.c
@@ -6,7 +6,7 @@
and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
- Copyright (c) 1997-2008 University of Cambridge
+ Copyright (c) 1997-2009 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
diff --git a/ext/pcre/pcrelib/doc/pcre.txt b/ext/pcre/pcrelib/doc/pcre.txt
index 9be2c6f36..d07bfea00 100644
--- a/ext/pcre/pcrelib/doc/pcre.txt
+++ b/ext/pcre/pcrelib/doc/pcre.txt
@@ -18,9 +18,11 @@ INTRODUCTION
The PCRE library is a set of functions that implement regular expres-
sion pattern matching using the same syntax and semantics as Perl, with
- just a few differences. (Certain features that appeared in Python and
+ just a few differences. Certain features that appeared in Python and
PCRE before they appeared in Perl are also available using the Python
- syntax.)
+ syntax. There is also some support for certain .NET and Oniguruma syn-
+ tax items, and there is an option for requesting some minor changes
+ that give better JavaScript compatibility.
The current implementation of PCRE (release 7.x) corresponds approxi-
mately with Perl 5.10, including support for UTF-8 encoded strings and
@@ -256,8 +258,8 @@ AUTHOR
REVISION
- Last updated: 09 August 2007
- Copyright (c) 1997-2007 University of Cambridge.
+ Last updated: 12 April 2008
+ Copyright (c) 1997-2008 University of Cambridge.
------------------------------------------------------------------------------
@@ -543,6 +545,24 @@ PCRETEST OPTION FOR LIBREADLINE SUPPORT
Note that libreadline is GPL-licenced, so if you distribute a binary of
pcretest linked in this way, there may be licensing issues.
+ Setting this option causes the -lreadline option to be added to the
+ pcretest build. In many operating environments with a sytem-installed
+ libreadline this is sufficient. However, in some environments (e.g. if
+ an unmodified distribution version of readline is in use), some extra
+ configuration may be necessary. The INSTALL file for libreadline says
+ this:
+
+ "Readline uses the termcap functions, but does not link with the
+ termcap or curses library itself, allowing applications which link
+ with readline the to choose an appropriate library."
+
+ If your environment has not been set up so that an appropriate library
+ is automatically included, you may need to add something like
+
+ LIBS="-ncurses"
+
+ immediately before the configure command.
+
SEE ALSO
@@ -558,8 +578,8 @@ AUTHOR
REVISION
- Last updated: 18 December 2007
- Copyright (c) 1997-2007 University of Cambridge.
+ Last updated: 13 April 2008
+ Copyright (c) 1997-2008 University of Cambridge.
------------------------------------------------------------------------------
@@ -707,29 +727,30 @@ THE ALTERNATIVE MATCHING ALGORITHM
tive algorithm moves through the subject string one character at a
time, for all active paths through the tree.
- 8. None of the backtracking control verbs such as (*PRUNE) are sup-
- ported.
+ 8. Except for (*FAIL), the backtracking control verbs such as (*PRUNE)
+ are not supported. (*FAIL) is supported, and behaves like a failing
+ negative assertion.
ADVANTAGES OF THE ALTERNATIVE ALGORITHM
- Using the alternative matching algorithm provides the following advan-
+ Using the alternative matching algorithm provides the following advan-
tages:
1. All possible matches (at a single point in the subject) are automat-
- ically found, and in particular, the longest match is found. To find
+ ically found, and in particular, the longest match is found. To find
more than one match using the standard algorithm, you have to do kludgy
things with callouts.
- 2. There is much better support for partial matching. The restrictions
- on the content of the pattern that apply when using the standard algo-
- rithm for partial matching do not apply to the alternative algorithm.
- For non-anchored patterns, the starting position of a partial match is
+ 2. There is much better support for partial matching. The restrictions
+ on the content of the pattern that apply when using the standard algo-
+ rithm for partial matching do not apply to the alternative algorithm.
+ For non-anchored patterns, the starting position of a partial match is
available.
- 3. Because the alternative algorithm scans the subject string just
- once, and never needs to backtrack, it is possible to pass very long
- subject strings to the matching function in several pieces, checking
+ 3. Because the alternative algorithm scans the subject string just
+ once, and never needs to backtrack, it is possible to pass very long
+ subject strings to the matching function in several pieces, checking
for partial matching each time.
@@ -737,8 +758,8 @@ DISADVANTAGES OF THE ALTERNATIVE ALGORITHM
The alternative algorithm suffers from a number of disadvantages:
- 1. It is substantially slower than the standard algorithm. This is
- partly because it has to search for all possible matches, but is also
+ 1. It is substantially slower than the standard algorithm. This is
+ partly because it has to search for all possible matches, but is also
because it is less susceptible to optimization.
2. Capturing parentheses and back references are not supported.
@@ -756,8 +777,8 @@ AUTHOR
REVISION
- Last updated: 08 August 2007
- Copyright (c) 1997-2007 University of Cambridge.
+ Last updated: 19 April 2008
+ Copyright (c) 1997-2008 University of Cambridge.
------------------------------------------------------------------------------
@@ -1244,21 +1265,38 @@ COMPILING A PATTERN
before or at the first newline in the subject string, though the
matched text may continue over the newline.
+ PCRE_JAVASCRIPT_COMPAT
+
+ If this option is set, PCRE's behaviour is changed in some ways so that
+ it is compatible with JavaScript rather than Perl. The changes are as
+ follows:
+
+ (1) A lone closing square bracket in a pattern causes a compile-time
+ error, because this is illegal in JavaScript (by default it is treated
+ as a data character). Thus, the pattern AB]CD becomes illegal when this
+ option is set.
+
+ (2) At run time, a back reference to an unset subpattern group matches
+ an empty string (by default this causes the current matching alterna-
+ tive to fail). A pattern such as (\1)(a) succeeds when this option is
+ set (assuming it can find an "a" in the subject), whereas it fails by
+ default, for Perl compatibility.
+
PCRE_MULTILINE
- By default, PCRE treats the subject string as consisting of a single
- line of characters (even if it actually contains newlines). The "start
- of line" metacharacter (^) matches only at the start of the string,
- while the "end of line" metacharacter ($) matches only at the end of
+ By default, PCRE treats the subject string as consisting of a single
+ line of characters (even if it actually contains newlines). The "start
+ of line" metacharacter (^) matches only at the start of the string,
+ while the "end of line" metacharacter ($) matches only at the end of
the string, or before a terminating newline (unless PCRE_DOLLAR_ENDONLY
is set). This is the same as Perl.
- When PCRE_MULTILINE it is set, the "start of line" and "end of line"
- constructs match immediately following or immediately before internal
- newlines in the subject string, respectively, as well as at the very
- start and end. This is equivalent to Perl's /m option, and it can be
+ When PCRE_MULTILINE it is set, the "start of line" and "end of line"
+ constructs match immediately following or immediately before internal
+ newlines in the subject string, respectively, as well as at the very
+ start and end. This is equivalent to Perl's /m option, and it can be
changed within a pattern by a (?m) option setting. If there are no new-
- lines in a subject string, or no occurrences of ^ or $ in a pattern,
+ lines in a subject string, or no occurrences of ^ or $ in a pattern,
setting PCRE_MULTILINE has no effect.
PCRE_NEWLINE_CR
@@ -1267,81 +1305,81 @@ COMPILING A PATTERN
PCRE_NEWLINE_ANYCRLF
PCRE_NEWLINE_ANY
- These options override the default newline definition that was chosen
- when PCRE was built. Setting the first or the second specifies that a
- newline is indicated by a single character (CR or LF, respectively).
- Setting PCRE_NEWLINE_CRLF specifies that a newline is indicated by the
- two-character CRLF sequence. Setting PCRE_NEWLINE_ANYCRLF specifies
+ These options override the default newline definition that was chosen
+ when PCRE was built. Setting the first or the second specifies that a
+ newline is indicated by a single character (CR or LF, respectively).
+ Setting PCRE_NEWLINE_CRLF specifies that a newline is indicated by the
+ two-character CRLF sequence. Setting PCRE_NEWLINE_ANYCRLF specifies
that any of the three preceding sequences should be recognized. Setting
- PCRE_NEWLINE_ANY specifies that any Unicode newline sequence should be
+ PCRE_NEWLINE_ANY specifies that any Unicode newline sequence should be
recognized. The Unicode newline sequences are the three just mentioned,
- plus the single characters VT (vertical tab, U+000B), FF (formfeed,
- U+000C), NEL (next line, U+0085), LS (line separator, U+2028), and PS
- (paragraph separator, U+2029). The last two are recognized only in
+ plus the single characters VT (vertical tab, U+000B), FF (formfeed,
+ U+000C), NEL (next line, U+0085), LS (line separator, U+2028), and PS
+ (paragraph separator, U+2029). The last two are recognized only in
UTF-8 mode.
- The newline setting in the options word uses three bits that are
+ The newline setting in the options word uses three bits that are
treated as a number, giving eight possibilities. Currently only six are
- used (default plus the five values above). This means that if you set
- more than one newline option, the combination may or may not be sensi-
+ used (default plus the five values above). This means that if you set
+ more than one newline option, the combination may or may not be sensi-
ble. For example, PCRE_NEWLINE_CR with PCRE_NEWLINE_LF is equivalent to
- PCRE_NEWLINE_CRLF, but other combinations may yield unused numbers and
+ PCRE_NEWLINE_CRLF, but other combinations may yield unused numbers and
cause an error.
- The only time that a line break is specially recognized when compiling
- a pattern is if PCRE_EXTENDED is set, and an unescaped # outside a
- character class is encountered. This indicates a comment that lasts
- until after the next line break sequence. In other circumstances, line
- break sequences are treated as literal data, except that in
+ The only time that a line break is specially recognized when compiling
+ a pattern is if PCRE_EXTENDED is set, and an unescaped # outside a
+ character class is encountered. This indicates a comment that lasts
+ until after the next line break sequence. In other circumstances, line
+ break sequences are treated as literal data, except that in
PCRE_EXTENDED mode, both CR and LF are treated as whitespace characters
and are therefore ignored.
The newline option that is set at compile time becomes the default that
- is used for pcre_exec() and pcre_dfa_exec(), but it can be overridden.
+ is used for pcre_exec() and pcre_dfa_exec(), but it can be overridden.
PCRE_NO_AUTO_CAPTURE
If this option is set, it disables the use of numbered capturing paren-
- theses in the pattern. Any opening parenthesis that is not followed by
- ? behaves as if it were followed by ?: but named parentheses can still
- be used for capturing (and they acquire numbers in the usual way).
+ theses in the pattern. Any opening parenthesis that is not followed by
+ ? behaves as if it were followed by ?: but named parentheses can still
+ be used for capturing (and they acquire numbers in the usual way).
There is no equivalent of this option in Perl.
PCRE_UNGREEDY
- This option inverts the "greediness" of the quantifiers so that they
- are not greedy by default, but become greedy if followed by "?". It is
- not compatible with Perl. It can also be set by a (?U) option setting
+ This option inverts the "greediness" of the quantifiers so that they
+ are not greedy by default, but become greedy if followed by "?". It is
+ not compatible with Perl. It can also be set by a (?U) option setting
within the pattern.
PCRE_UTF8
- This option causes PCRE to regard both the pattern and the subject as
- strings of UTF-8 characters instead of single-byte character strings.
- However, it is available only when PCRE is built to include UTF-8 sup-
- port. If not, the use of this option provokes an error. Details of how
- this option changes the behaviour of PCRE are given in the section on
+ This option causes PCRE to regard both the pattern and the subject as
+ strings of UTF-8 characters instead of single-byte character strings.
+ However, it is available only when PCRE is built to include UTF-8 sup-
+ port. If not, the use of this option provokes an error. Details of how
+ this option changes the behaviour of PCRE are given in the section on
UTF-8 support in the main pcre page.
PCRE_NO_UTF8_CHECK
When PCRE_UTF8 is set, the validity of the pattern as a UTF-8 string is
- automatically checked. There is a discussion about the validity of
- UTF-8 strings in the main pcre page. If an invalid UTF-8 sequence of
- bytes is found, pcre_compile() returns an error. If you already know
+ automatically checked. There is a discussion about the validity of
+ UTF-8 strings in the main pcre page. If an invalid UTF-8 sequence of
+ bytes is found, pcre_compile() returns an error. If you already know
that your pattern is valid, and you want to skip this check for perfor-
- mance reasons, you can set the PCRE_NO_UTF8_CHECK option. When it is
- set, the effect of passing an invalid UTF-8 string as a pattern is
- undefined. It may cause your program to crash. Note that this option
- can also be passed to pcre_exec() and pcre_dfa_exec(), to suppress the
+ mance reasons, you can set the PCRE_NO_UTF8_CHECK option. When it is
+ set, the effect of passing an invalid UTF-8 string as a pattern is
+ undefined. It may cause your program to crash. Note that this option
+ can also be passed to pcre_exec() and pcre_dfa_exec(), to suppress the
UTF-8 validity checking of subject strings.
COMPILATION ERROR CODES
- The following table lists the error codes than may be returned by
- pcre_compile2(), along with the error messages that may be returned by
- both compiling functions. As PCRE has developed, some error codes have
+ The following table lists the error codes than may be returned by
+ pcre_compile2(), along with the error messages that may be returned by
+ both compiling functions. As PCRE has developed, some error codes have
fallen out of use. To avoid confusion, they have not been re-used.
0 no error
@@ -1397,21 +1435,22 @@ COMPILATION ERROR CODES
50 [this code is not in use]
51 octal value is greater than \377 (not in UTF-8 mode)
52 internal error: overran compiling workspace
- 53 internal error: previously-checked referenced subpattern not
+ 53 internal error: previously-checked referenced subpattern not
found
54 DEFINE group contains more than one branch
55 repeating a DEFINE group is not allowed
56 inconsistent NEWLINE options
- 57 \g is not followed by a braced name or an optionally braced
- non-zero number
- 58 (?+ or (?- or (?(+ or (?(- must be followed by a non-zero number
+ 57 \g is not followed by a braced, angle-bracketed, or quoted
+ name/number or by a plain number
+ 58 a numbered reference must not be zero
59 (*VERB) with an argument is not supported
60 (*VERB) not recognized
61 number is too big
62 subpattern name expected
63 digit expected after (?+
+ 64 ] is an invalid data character in JavaScript compatibility mode
- The numbers 32 and 10000 in errors 48 and 49 are defaults; different
+ The numbers 32 and 10000 in errors 48 and 49 are defaults; different
values may be used if the limits were changed when PCRE was built.
@@ -1420,32 +1459,32 @@ STUDYING A PATTERN
pcre_extra *pcre_study(const pcre *code, int options
const char **errptr);
- If a compiled pattern is going to be used several times, it is worth
+ If a compiled pattern is going to be used several times, it is worth
spending more time analyzing it in order to speed up the time taken for
- matching. The function pcre_study() takes a pointer to a compiled pat-
+ matching. The function pcre_study() takes a pointer to a compiled pat-
tern as its first argument. If studying the pattern produces additional
- information that will help speed up matching, pcre_study() returns a
- pointer to a pcre_extra block, in which the study_data field points to
+ information that will help speed up matching, pcre_study() returns a
+ pointer to a pcre_extra block, in which the study_data field points to
the results of the study.
The returned value from pcre_study() can be passed directly to
- pcre_exec(). However, a pcre_extra block also contains other fields
- that can be set by the caller before the block is passed; these are
+ pcre_exec(). However, a pcre_extra block also contains other fields
+ that can be set by the caller before the block is passed; these are
described below in the section on matching a pattern.
- If studying the pattern does not produce any additional information
+ If studying the pattern does not produce any additional information
pcre_study() returns NULL. In that circumstance, if the calling program
- wants to pass any of the other fields to pcre_exec(), it must set up
+ wants to pass any of the other fields to pcre_exec(), it must set up
its own pcre_extra block.
- The second argument of pcre_study() contains option bits. At present,
+ The second argument of pcre_study() contains option bits. At present,
no options are defined, and this argument should always be zero.
- The third argument for pcre_study() is a pointer for an error message.
- If studying succeeds (even if no data is returned), the variable it
- points to is set to NULL. Otherwise it is set to point to a textual
+ The third argument for pcre_study() is a pointer for an error message.
+ If studying succeeds (even if no data is returned), the variable it
+ points to is set to NULL. Otherwise it is set to point to a textual
error message. This is a static string that is part of the library. You
- must not try to free it. You should test the error pointer for NULL
+ must not try to free it. You should test the error pointer for NULL
after calling pcre_study(), to be sure that it has run successfully.
This is a typical call to pcre_study():
@@ -1457,62 +1496,62 @@ STUDYING A PATTERN
&error); /* set to NULL or points to a message */
At present, studying a pattern is useful only for non-anchored patterns
- that do not have a single fixed starting character. A bitmap of possi-
+ that do not have a single fixed starting character. A bitmap of possi-
ble starting bytes is created.
LOCALE SUPPORT
- PCRE handles caseless matching, and determines whether characters are
- letters, digits, or whatever, by reference to a set of tables, indexed
- by character value. When running in UTF-8 mode, this applies only to
- characters with codes less than 128. Higher-valued codes never match
- escapes such as \w or \d, but can be tested with \p if PCRE is built
- with Unicode character property support. The use of locales with Uni-
- code is discouraged. If you are handling characters with codes greater
- than 128, you should either use UTF-8 and Unicode, or use locales, but
+ PCRE handles caseless matching, and determines whether characters are
+ letters, digits, or whatever, by reference to a set of tables, indexed
+ by character value. When running in UTF-8 mode, this applies only to
+ characters with codes less than 128. Higher-valued codes never match
+ escapes such as \w or \d, but can be tested with \p if PCRE is built
+ with Unicode character property support. The use of locales with Uni-
+ code is discouraged. If you are handling characters with codes greater
+ than 128, you should either use UTF-8 and Unicode, or use locales, but
not try to mix the two.
- PCRE contains an internal set of tables that are used when the final
- argument of pcre_compile() is NULL. These are sufficient for many
+ PCRE contains an internal set of tables that are used when the final
+ argument of pcre_compile() is NULL. These are sufficient for many
applications. Normally, the internal tables recognize only ASCII char-
acters. However, when PCRE is built, it is possible to cause the inter-
nal tables to be rebuilt in the default "C" locale of the local system,
which may cause them to be different.
- The internal tables can always be overridden by tables supplied by the
+ The internal tables can always be overridden by tables supplied by the
application that calls PCRE. These may be created in a different locale
- from the default. As more and more applications change to using Uni-
+ from the default. As more and more applications change to using Uni-
code, the need for this locale support is expected to die away.
- External tables are built by calling the pcre_maketables() function,
- which has no arguments, in the relevant locale. The result can then be
- passed to pcre_compile() or pcre_exec() as often as necessary. For
- example, to build and use tables that are appropriate for the French
- locale (where accented characters with values greater than 128 are
+ External tables are built by calling the pcre_maketables() function,
+ which has no arguments, in the relevant locale. The result can then be
+ passed to pcre_compile() or pcre_exec() as often as necessary. For
+ example, to build and use tables that are appropriate for the French
+ locale (where accented characters with values greater than 128 are
treated as letters), the following code could be used:
setlocale(LC_CTYPE, "fr_FR");
tables = pcre_maketables();
re = pcre_compile(..., tables);
- The locale name "fr_FR" is used on Linux and other Unix-like systems;
+ The locale name "fr_FR" is used on Linux and other Unix-like systems;
if you are using Windows, the name for the French locale is "french".
- When pcre_maketables() runs, the tables are built in memory that is
- obtained via pcre_malloc. It is the caller's responsibility to ensure
- that the memory containing the tables remains available for as long as
+ When pcre_maketables() runs, the tables are built in memory that is
+ obtained via pcre_malloc. It is the caller's responsibility to ensure
+ that the memory containing the tables remains available for as long as
it is needed.
The pointer that is passed to pcre_compile() is saved with the compiled
- pattern, and the same tables are used via this pointer by pcre_study()
+ pattern, and the same tables are used via this pointer by pcre_study()
and normally also by pcre_exec(). Thus, by default, for any single pat-
tern, compilation, studying and matching all happen in the same locale,
but different patterns can be compiled in different locales.
- It is possible to pass a table pointer or NULL (indicating the use of
- the internal tables) to pcre_exec(). Although not intended for this
- purpose, this facility could be used to match a pattern in a different
+ It is possible to pass a table pointer or NULL (indicating the use of
+ the internal tables) to pcre_exec(). Although not intended for this
+ purpose, this facility could be used to match a pattern in a different
locale from the one in which it was compiled. Passing table pointers at
run time is discussed below in the section on matching a pattern.
@@ -1522,15 +1561,15 @@ INFORMATION ABOUT A PATTERN
int pcre_fullinfo(const pcre *code, const pcre_extra *extra,
int what, void *where);
- The pcre_fullinfo() function returns information about a compiled pat-
+ The pcre_fullinfo() function returns information about a compiled pat-
tern. It replaces the obsolete pcre_info() function, which is neverthe-
less retained for backwards compability (and is documented below).
- The first argument for pcre_fullinfo() is a pointer to the compiled
- pattern. The second argument is the result of pcre_study(), or NULL if
- the pattern was not studied. The third argument specifies which piece
- of information is required, and the fourth argument is a pointer to a
- variable to receive the data. The yield of the function is zero for
+ The first argument for pcre_fullinfo() is a pointer to the compiled
+ pattern. The second argument is the result of pcre_study(), or NULL if
+ the pattern was not studied. The third argument specifies which piece
+ of information is required, and the fourth argument is a pointer to a
+ variable to receive the data. The yield of the function is zero for
success, or one of the following negative numbers:
PCRE_ERROR_NULL the argument code was NULL
@@ -1538,9 +1577,9 @@ INFORMATION ABOUT A PATTERN
PCRE_ERROR_BADMAGIC the "magic number" was not found
PCRE_ERROR_BADOPTION the value of what was invalid
- The "magic number" is placed at the start of each compiled pattern as
- an simple check against passing an arbitrary memory pointer. Here is a
- typical call of pcre_fullinfo(), to obtain the length of the compiled
+ The "magic number" is placed at the start of each compiled pattern as
+ an simple check against passing an arbitrary memory pointer. Here is a
+ typical call of pcre_fullinfo(), to obtain the length of the compiled
pattern:
int rc;
@@ -1551,76 +1590,76 @@ INFORMATION ABOUT A PATTERN
PCRE_INFO_SIZE, /* what is required */
&length); /* where to put the data */
- The possible values for the third argument are defined in pcre.h, and
+ The possible values for the third argument are defined in pcre.h, and
are as follows:
PCRE_INFO_BACKREFMAX
- Return the number of the highest back reference in the pattern. The
- fourth argument should point to an int variable. Zero is returned if
+ Return the number of the highest back reference in the pattern. The
+ fourth argument should point to an int variable. Zero is returned if
there are no back references.
PCRE_INFO_CAPTURECOUNT
- Return the number of capturing subpatterns in the pattern. The fourth
+ Return the number of capturing subpatterns in the pattern. The fourth
argument should point to an int variable.
PCRE_INFO_DEFAULT_TABLES
- Return a pointer to the internal default character tables within PCRE.
- The fourth argument should point to an unsigned char * variable. This
+ Return a pointer to the internal default character tables within PCRE.
+ The fourth argument should point to an unsigned char * variable. This
information call is provided for internal use by the pcre_study() func-
- tion. External callers can cause PCRE to use its internal tables by
+ tion. External callers can cause PCRE to use its internal tables by
passing a NULL table pointer.
PCRE_INFO_FIRSTBYTE
- Return information about the first byte of any matched string, for a
- non-anchored pattern. The fourth argument should point to an int vari-
- able. (This option used to be called PCRE_INFO_FIRSTCHAR; the old name
+ Return information about the first byte of any matched string, for a
+ non-anchored pattern. The fourth argument should point to an int vari-
+ able. (This option used to be called PCRE_INFO_FIRSTCHAR; the old name
is still recognized for backwards compatibility.)
- If there is a fixed first byte, for example, from a pattern such as
+ If there is a fixed first byte, for example, from a pattern such as
(cat|cow|coyote), its value is returned. Otherwise, if either
- (a) the pattern was compiled with the PCRE_MULTILINE option, and every
+ (a) the pattern was compiled with the PCRE_MULTILINE option, and every
branch starts with "^", or
(b) every branch of the pattern starts with ".*" and PCRE_DOTALL is not
set (if it were set, the pattern would be anchored),
- -1 is returned, indicating that the pattern matches only at the start
- of a subject string or after any newline within the string. Otherwise
+ -1 is returned, indicating that the pattern matches only at the start
+ of a subject string or after any newline within the string. Otherwise
-2 is returned. For anchored patterns, -2 is returned.
PCRE_INFO_FIRSTTABLE
- If the pattern was studied, and this resulted in the construction of a
+ If the pattern was studied, and this resulted in the construction of a
256-bit table indicating a fixed set of bytes for the first byte in any
- matching string, a pointer to the table is returned. Otherwise NULL is
- returned. The fourth argument should point to an unsigned char * vari-
+ matching string, a pointer to the table is returned. Otherwise NULL is
+ returned. The fourth argument should point to an unsigned char * vari-
able.
PCRE_INFO_HASCRORLF
- Return 1 if the pattern contains any explicit matches for CR or LF
- characters, otherwise 0. The fourth argument should point to an int
- variable. An explicit match is either a literal CR or LF character, or
+ Return 1 if the pattern contains any explicit matches for CR or LF
+ characters, otherwise 0. The fourth argument should point to an int
+ variable. An explicit match is either a literal CR or LF character, or
\r or \n.
PCRE_INFO_JCHANGED
- Return 1 if the (?J) or (?-J) option setting is used in the pattern,
- otherwise 0. The fourth argument should point to an int variable. (?J)
+ Return 1 if the (?J) or (?-J) option setting is used in the pattern,
+ otherwise 0. The fourth argument should point to an int variable. (?J)
and (?-J) set and unset the local PCRE_DUPNAMES option, respectively.
PCRE_INFO_LASTLITERAL
- Return the value of the rightmost literal byte that must exist in any
- matched string, other than at its start, if such a byte has been
+ Return the value of the rightmost literal byte that must exist in any
+ matched string, other than at its start, if such a byte has been
recorded. The fourth argument should point to an int variable. If there
- is no such byte, -1 is returned. For anchored patterns, a last literal
- byte is recorded only if it follows something of variable length. For
+ is no such byte, -1 is returned. For anchored patterns, a last literal
+ byte is recorded only if it follows something of variable length. For
example, for the pattern /^a\d+z\d+/ the returned value is "z", but for
/^a\dz\d/ the returned value is -1.
@@ -1628,34 +1667,34 @@ INFORMATION ABOUT A PATTERN
PCRE_INFO_NAMEENTRYSIZE
PCRE_INFO_NAMETABLE
- PCRE supports the use of named as well as numbered capturing parenthe-
- ses. The names are just an additional way of identifying the parenthe-
+ PCRE supports the use of named as well as numbered capturing parenthe-
+ ses. The names are just an additional way of identifying the parenthe-
ses, which still acquire numbers. Several convenience functions such as
- pcre_get_named_substring() are provided for extracting captured sub-
- strings by name. It is also possible to extract the data directly, by
- first converting the name to a number in order to access the correct
+ pcre_get_named_substring() are provided for extracting captured sub-
+ strings by name. It is also possible to extract the data directly, by
+ first converting the name to a number in order to access the correct
pointers in the output vector (described with pcre_exec() below). To do
- the conversion, you need to use the name-to-number map, which is
+ the conversion, you need to use the name-to-number map, which is
described by these three values.
The map consists of a number of fixed-size entries. PCRE_INFO_NAMECOUNT
gives the number of entries, and PCRE_INFO_NAMEENTRYSIZE gives the size
- of each entry; both of these return an int value. The entry size
- depends on the length of the longest name. PCRE_INFO_NAMETABLE returns
- a pointer to the first entry of the table (a pointer to char). The
+ of each entry; both of these return an int value. The entry size
+ depends on the length of the longest name. PCRE_INFO_NAMETABLE returns
+ a pointer to the first entry of the table (a pointer to char). The
first two bytes of each entry are the number of the capturing parenthe-
- sis, most significant byte first. The rest of the entry is the corre-
- sponding name, zero terminated. The names are in alphabetical order.
+ sis, most significant byte first. The rest of the entry is the corre-
+ sponding name, zero terminated. The names are in alphabetical order.
When PCRE_DUPNAMES is set, duplicate names are in order of their paren-
- theses numbers. For example, consider the following pattern (assume
- PCRE_EXTENDED is set, so white space - including newlines - is
+ theses numbers. For example, consider the following pattern (assume
+ PCRE_EXTENDED is set, so white space - including newlines - is
ignored):
(?<date> (?<year>(\d\d)?\d\d) -
(?<month>\d\d) - (?<day>\d\d) )
- There are four named subpatterns, so the table has four entries, and
- each entry in the table is eight bytes long. The table is as follows,
+ There are four named subpatterns, so the table has four entries, and
+ each entry in the table is eight bytes long. The table is as follows,
with non-printing bytes shows in hexadecimal, and undefined bytes shown
as ??:
@@ -1664,29 +1703,29 @@ INFORMATION ABOUT A PATTERN
00 04 m o n t h 00
00 02 y e a r 00 ??
- When writing code to extract data from named subpatterns using the
- name-to-number map, remember that the length of the entries is likely
+ When writing code to extract data from named subpatterns using the
+ name-to-number map, remember that the length of the entries is likely
to be different for each compiled pattern.
PCRE_INFO_OKPARTIAL
- Return 1 if the pattern can be used for partial matching, otherwise 0.
- The fourth argument should point to an int variable. The pcrepartial
- documentation lists the restrictions that apply to patterns when par-
+ Return 1 if the pattern can be used for partial matching, otherwise 0.
+ The fourth argument should point to an int variable. The pcrepartial
+ documentation lists the restrictions that apply to patterns when par-
tial matching is used.
PCRE_INFO_OPTIONS
- Return a copy of the options with which the pattern was compiled. The
- fourth argument should point to an unsigned long int variable. These
+ Return a copy of the options with which the pattern was compiled. The
+ fourth argument should point to an unsigned long int variable. These
option bits are those specified in the call to pcre_compile(), modified
by any top-level option settings at the start of the pattern itself. In
- other words, they are the options that will be in force when matching
- starts. For example, if the pattern /(?im)abc(?-i)d/ is compiled with
- the PCRE_EXTENDED option, the result is PCRE_CASELESS, PCRE_MULTILINE,
+ other words, they are the options that will be in force when matching
+ starts. For example, if the pattern /(?im)abc(?-i)d/ is compiled with
+ the PCRE_EXTENDED option, the result is PCRE_CASELESS, PCRE_MULTILINE,
and PCRE_EXTENDED.
- A pattern is automatically anchored by PCRE if all of its top-level
+ A pattern is automatically anchored by PCRE if all of its top-level
alternatives begin with one of the following:
^ unless PCRE_MULTILINE is set
@@ -1700,7 +1739,7 @@ INFORMATION ABOUT A PATTERN
PCRE_INFO_SIZE
- Return the size of the compiled pattern, that is, the value that was
+ Return the size of the compiled pattern, that is, the value that was
passed as the argument to pcre_malloc() when PCRE was getting memory in
which to place the compiled data. The fourth argument should point to a
size_t variable.
@@ -1708,9 +1747,9 @@ INFORMATION ABOUT A PATTERN
PCRE_INFO_STUDYSIZE
Return the size of the data block pointed to by the study_data field in
- a pcre_extra block. That is, it is the value that was passed to
+ a pcre_extra block. That is, it is the value that was passed to
pcre_malloc() when PCRE was getting memory into which to place the data
- created by pcre_study(). The fourth argument should point to a size_t
+ created by pcre_study(). The fourth argument should point to a size_t
variable.
@@ -1718,21 +1757,21 @@ OBSOLETE INFO FUNCTION
int pcre_info(const pcre *code, int *optptr, int *firstcharptr);
- The pcre_info() function is now obsolete because its interface is too
- restrictive to return all the available data about a compiled pattern.
- New programs should use pcre_fullinfo() instead. The yield of
- pcre_info() is the number of capturing subpatterns, or one of the fol-
+ The pcre_info() function is now obsolete because its interface is too
+ restrictive to return all the available data about a compiled pattern.
+ New programs should use pcre_fullinfo() instead. The yield of
+ pcre_info() is the number of capturing subpatterns, or one of the fol-
lowing negative numbers:
PCRE_ERROR_NULL the argument code was NULL
PCRE_ERROR_BADMAGIC the "magic number" was not found
- If the optptr argument is not NULL, a copy of the options with which
- the pattern was compiled is placed in the integer it points to (see
+ If the optptr argument is not NULL, a copy of the options with which
+ the pattern was compiled is placed in the integer it points to (see
PCRE_INFO_OPTIONS above).
- If the pattern is not anchored and the firstcharptr argument is not
- NULL, it is used to pass back information about the first character of
+ If the pattern is not anchored and the firstcharptr argument is not
+ NULL, it is used to pass back information about the first character of
any matched string (see PCRE_INFO_FIRSTBYTE above).
@@ -1740,21 +1779,21 @@ REFERENCE COUNTS
int pcre_refcount(pcre *code, int adjust);
- The pcre_refcount() function is used to maintain a reference count in
+ The pcre_refcount() function is used to maintain a reference count in
the data block that contains a compiled pattern. It is provided for the
- benefit of applications that operate in an object-oriented manner,
+ benefit of applications that operate in an object-oriented manner,
where different parts of the application may be using the same compiled
pattern, but you want to free the block when they are all done.
When a pattern is compiled, the reference count field is initialized to
- zero. It is changed only by calling this function, whose action is to
- add the adjust value (which may be positive or negative) to it. The
+ zero. It is changed only by calling this function, whose action is to
+ add the adjust value (which may be positive or negative) to it. The
yield of the function is the new value. However, the value of the count
- is constrained to lie between 0 and 65535, inclusive. If the new value
+ is constrained to lie between 0 and 65535, inclusive. If the new value
is outside these limits, it is forced to the appropriate limit value.
- Except when it is zero, the reference count is not correctly preserved
- if a pattern is compiled on one host and then transferred to a host
+ Except when it is zero, the reference count is not correctly preserved
+ if a pattern is compiled on one host and then transferred to a host
whose byte-order is different. (This seems a highly unlikely scenario.)
@@ -1764,18 +1803,18 @@ MATCHING A PATTERN: THE TRADITIONAL FUNCTION
const char *subject, int length, int startoffset,
int options, int *ovector, int ovecsize);
- The function pcre_exec() is called to match a subject string against a
- compiled pattern, which is passed in the code argument. If the pattern
+ The function pcre_exec() is called to match a subject string against a
+ compiled pattern, which is passed in the code argument. If the pattern
has been studied, the result of the study should be passed in the extra
- argument. This function is the main matching facility of the library,
+ argument. This function is the main matching facility of the library,
and it operates in a Perl-like manner. For specialist use there is also
- an alternative matching function, which is described below in the sec-
+ an alternative matching function, which is described below in the sec-
tion about the pcre_dfa_exec() function.
- In most applications, the pattern will have been compiled (and option-
- ally studied) in the same process that calls pcre_exec(). However, it
+ In most applications, the pattern will have been compiled (and option-
+ ally studied) in the same process that calls pcre_exec(). However, it
is possible to save compiled patterns and study data, and then use them
- later in different processes, possibly even on different hosts. For a
+ later in different processes, possibly even on different hosts. For a
discussion about this, see the pcreprecompile documentation.
Here is an example of a simple call to pcre_exec():
@@ -1794,10 +1833,10 @@ MATCHING A PATTERN: THE TRADITIONAL FUNCTION
Extra data for pcre_exec()
- If the extra argument is not NULL, it must point to a pcre_extra data
- block. The pcre_study() function returns such a block (when it doesn't
- return NULL), but you can also create one for yourself, and pass addi-
- tional information in it. The pcre_extra block contains the following
+ If the extra argument is not NULL, it must point to a pcre_extra data
+ block. The pcre_study() function returns such a block (when it doesn't
+ return NULL), but you can also create one for yourself, and pass addi-
+ tional information in it. The pcre_extra block contains the following
fields (not necessarily in this order):
unsigned long int flags;
@@ -1807,7 +1846,7 @@ MATCHING A PATTERN: THE TRADITIONAL FUNCTION
void *callout_data;
const unsigned char *tables;
- The flags field is a bitmap that specifies which of the other fields
+ The flags field is a bitmap that specifies which of the other fields
are set. The flag bits are:
PCRE_EXTRA_STUDY_DATA
@@ -1816,83 +1855,83 @@ MATCHING A PATTERN: THE TRADITIONAL FUNCTION
PCRE_EXTRA_CALLOUT_DATA
PCRE_EXTRA_TABLES
- Other flag bits should be set to zero. The study_data field is set in
- the pcre_extra block that is returned by pcre_study(), together with
+ Other flag bits should be set to zero. The study_data field is set in
+ the pcre_extra block that is returned by pcre_study(), together with
the appropriate flag bit. You should not set this yourself, but you may
- add to the block by setting the other fields and their corresponding
+ add to the block by setting the other fields and their corresponding
flag bits.
The match_limit field provides a means of preventing PCRE from using up
- a vast amount of resources when running patterns that are not going to
- match, but which have a very large number of possibilities in their
- search trees. The classic example is the use of nested unlimited
+ a vast amount of resources when running patterns that are not going to
+ match, but which have a very large number of possibilities in their
+ search trees. The classic example is the use of nested unlimited
repeats.
- Internally, PCRE uses a function called match() which it calls repeat-
- edly (sometimes recursively). The limit set by match_limit is imposed
- on the number of times this function is called during a match, which
- has the effect of limiting the amount of backtracking that can take
+ Internally, PCRE uses a function called match() which it calls repeat-
+ edly (sometimes recursively). The limit set by match_limit is imposed
+ on the number of times this function is called during a match, which
+ has the effect of limiting the amount of backtracking that can take
place. For patterns that are not anchored, the count restarts from zero
for each position in the subject string.
- The default value for the limit can be set when PCRE is built; the
- default default is 10 million, which handles all but the most extreme
- cases. You can override the default by suppling pcre_exec() with a
- pcre_extra block in which match_limit is set, and
- PCRE_EXTRA_MATCH_LIMIT is set in the flags field. If the limit is
+ The default value for the limit can be set when PCRE is built; the
+ default default is 10 million, which handles all but the most extreme
+ cases. You can override the default by suppling pcre_exec() with a
+ pcre_extra block in which match_limit is set, and
+ PCRE_EXTRA_MATCH_LIMIT is set in the flags field. If the limit is
exceeded, pcre_exec() returns PCRE_ERROR_MATCHLIMIT.
- The match_limit_recursion field is similar to match_limit, but instead
+ The match_limit_recursion field is similar to match_limit, but instead
of limiting the total number of times that match() is called, it limits
- the depth of recursion. The recursion depth is a smaller number than
- the total number of calls, because not all calls to match() are recur-
+ the depth of recursion. The recursion depth is a smaller number than
+ the total number of calls, because not all calls to match() are recur-
sive. This limit is of use only if it is set smaller than match_limit.
- Limiting the recursion depth limits the amount of stack that can be
+ Limiting the recursion depth limits the amount of stack that can be
used, or, when PCRE has been compiled to use memory on the heap instead
of the stack, the amount of heap memory that can be used.
- The default value for match_limit_recursion can be set when PCRE is
- built; the default default is the same value as the default for
- match_limit. You can override the default by suppling pcre_exec() with
- a pcre_extra block in which match_limit_recursion is set, and
- PCRE_EXTRA_MATCH_LIMIT_RECURSION is set in the flags field. If the
+ The default value for match_limit_recursion can be set when PCRE is
+ built; the default default is the same value as the default for
+ match_limit. You can override the default by suppling pcre_exec() with
+ a pcre_extra block in which match_limit_recursion is set, and
+ PCRE_EXTRA_MATCH_LIMIT_RECURSION is set in the flags field. If the
limit is exceeded, pcre_exec() returns PCRE_ERROR_RECURSIONLIMIT.
- The pcre_callout field is used in conjunction with the "callout" fea-
+ The pcre_callout field is used in conjunction with the "callout" fea-
ture, which is described in the pcrecallout documentation.
- The tables field is used to pass a character tables pointer to
- pcre_exec(); this overrides the value that is stored with the compiled
- pattern. A non-NULL value is stored with the compiled pattern only if
- custom tables were supplied to pcre_compile() via its tableptr argu-
+ The tables field is used to pass a character tables pointer to
+ pcre_exec(); this overrides the value that is stored with the compiled
+ pattern. A non-NULL value is stored with the compiled pattern only if
+ custom tables were supplied to pcre_compile() via its tableptr argu-
ment. If NULL is passed to pcre_exec() using this mechanism, it forces
- PCRE's internal tables to be used. This facility is helpful when re-
- using patterns that have been saved after compiling with an external
- set of tables, because the external tables might be at a different
- address when pcre_exec() is called. See the pcreprecompile documenta-
+ PCRE's internal tables to be used. This facility is helpful when re-
+ using patterns that have been saved after compiling with an external
+ set of tables, because the external tables might be at a different
+ address when pcre_exec() is called. See the pcreprecompile documenta-
tion for a discussion of saving compiled patterns for later use.
Option bits for pcre_exec()
- The unused bits of the options argument for pcre_exec() must be zero.
- The only bits that may be set are PCRE_ANCHORED, PCRE_NEWLINE_xxx,
+ The unused bits of the options argument for pcre_exec() must be zero.
+ The only bits that may be set are PCRE_ANCHORED, PCRE_NEWLINE_xxx,
PCRE_NOTBOL, PCRE_NOTEOL, PCRE_NOTEMPTY, PCRE_NO_UTF8_CHECK and
PCRE_PARTIAL.
PCRE_ANCHORED
- The PCRE_ANCHORED option limits pcre_exec() to matching at the first
- matching position. If a pattern was compiled with PCRE_ANCHORED, or
- turned out to be anchored by virtue of its contents, it cannot be made
+ The PCRE_ANCHORED option limits pcre_exec() to matching at the first
+ matching position. If a pattern was compiled with PCRE_ANCHORED, or
+ turned out to be anchored by virtue of its contents, it cannot be made
unachored at matching time.
PCRE_BSR_ANYCRLF
PCRE_BSR_UNICODE
These options (which are mutually exclusive) control what the \R escape
- sequence matches. The choice is either to match only CR, LF, or CRLF,
- or to match any Unicode newline sequence. These options override the
+ sequence matches. The choice is either to match only CR, LF, or CRLF,
+ or to match any Unicode newline sequence. These options override the
choice that was made or defaulted when the pattern was compiled.
PCRE_NEWLINE_CR
@@ -1901,118 +1940,119 @@ MATCHING A PATTERN: THE TRADITIONAL FUNCTION
PCRE_NEWLINE_ANYCRLF
PCRE_NEWLINE_ANY
- These options override the newline definition that was chosen or
- defaulted when the pattern was compiled. For details, see the descrip-
- tion of pcre_compile() above. During matching, the newline choice
- affects the behaviour of the dot, circumflex, and dollar metacharac-
- ters. It may also alter the way the match position is advanced after a
+ These options override the newline definition that was chosen or
+ defaulted when the pattern was compiled. For details, see the descrip-
+ tion of pcre_compile() above. During matching, the newline choice
+ affects the behaviour of the dot, circumflex, and dollar metacharac-
+ ters. It may also alter the way the match position is advanced after a
match failure for an unanchored pattern.
- When PCRE_NEWLINE_CRLF, PCRE_NEWLINE_ANYCRLF, or PCRE_NEWLINE_ANY is
- set, and a match attempt for an unanchored pattern fails when the cur-
- rent position is at a CRLF sequence, and the pattern contains no
- explicit matches for CR or LF characters, the match position is
+ When PCRE_NEWLINE_CRLF, PCRE_NEWLINE_ANYCRLF, or PCRE_NEWLINE_ANY is
+ set, and a match attempt for an unanchored pattern fails when the cur-
+ rent position is at a CRLF sequence, and the pattern contains no
+ explicit matches for CR or LF characters, the match position is
advanced by two characters instead of one, in other words, to after the
CRLF.
The above rule is a compromise that makes the most common cases work as
- expected. For example, if the pattern is .+A (and the PCRE_DOTALL
+ expected. For example, if the pattern is .+A (and the PCRE_DOTALL
option is not set), it does not match the string "\r\nA" because, after
- failing at the start, it skips both the CR and the LF before retrying.
- However, the pattern [\r\n]A does match that string, because it con-
+ failing at the start, it skips both the CR and the LF before retrying.
+ However, the pattern [\r\n]A does match that string, because it con-
tains an explicit CR or LF reference, and so advances only by one char-
acter after the first failure.
An explicit match for CR of LF is either a literal appearance of one of
- those characters, or one of the \r or \n escape sequences. Implicit
- matches such as [^X] do not count, nor does \s (which includes CR and
+ those characters, or one of the \r or \n escape sequences. Implicit
+ matches such as [^X] do not count, nor does \s (which includes CR and
LF in the characters that it matches).
- Notwithstanding the above, anomalous effects may still occur when CRLF
+ Notwithstanding the above, anomalous effects may still occur when CRLF
is a valid newline sequence and explicit \r or \n escapes appear in the
pattern.
PCRE_NOTBOL
This option specifies that first character of the subject string is not
- the beginning of a line, so the circumflex metacharacter should not
- match before it. Setting this without PCRE_MULTILINE (at compile time)
- causes circumflex never to match. This option affects only the behav-
+ the beginning of a line, so the circumflex metacharacter should not
+ match before it. Setting this without PCRE_MULTILINE (at compile time)
+ causes circumflex never to match. This option affects only the behav-
iour of the circumflex metacharacter. It does not affect \A.
PCRE_NOTEOL
This option specifies that the end of the subject string is not the end
- of a line, so the dollar metacharacter should not match it nor (except
- in multiline mode) a newline immediately before it. Setting this with-
+ of a line, so the dollar metacharacter should not match it nor (except
+ in multiline mode) a newline immediately before it. Setting this with-
out PCRE_MULTILINE (at compile time) causes dollar never to match. This
- option affects only the behaviour of the dollar metacharacter. It does
+ option affects only the behaviour of the dollar metacharacter. It does
not affect \Z or \z.
PCRE_NOTEMPTY
An empty string is not considered to be a valid match if this option is
- set. If there are alternatives in the pattern, they are tried. If all
- the alternatives match the empty string, the entire match fails. For
+ set. If there are alternatives in the pattern, they are tried. If all
+ the alternatives match the empty string, the entire match fails. For
example, if the pattern
a?b?
- is applied to a string not beginning with "a" or "b", it matches the
- empty string at the start of the subject. With PCRE_NOTEMPTY set, this
+ is applied to a string not beginning with "a" or "b", it matches the
+ empty string at the start of the subject. With PCRE_NOTEMPTY set, this
match is not valid, so PCRE searches further into the string for occur-
rences of "a" or "b".
Perl has no direct equivalent of PCRE_NOTEMPTY, but it does make a spe-
- cial case of a pattern match of the empty string within its split()
- function, and when using the /g modifier. It is possible to emulate
+ cial case of a pattern match of the empty string within its split()
+ function, and when using the /g modifier. It is possible to emulate
Perl's behaviour after matching a null string by first trying the match
again at the same offset with PCRE_NOTEMPTY and PCRE_ANCHORED, and then
- if that fails by advancing the starting offset (see below) and trying
+ if that fails by advancing the starting offset (see below) and trying
an ordinary match again. There is some code that demonstrates how to do
this in the pcredemo.c sample program.
PCRE_NO_UTF8_CHECK
When PCRE_UTF8 is set at compile time, the validity of the subject as a
- UTF-8 string is automatically checked when pcre_exec() is subsequently
- called. The value of startoffset is also checked to ensure that it
- points to the start of a UTF-8 character. There is a discussion about
- the validity of UTF-8 strings in the section on UTF-8 support in the
- main pcre page. If an invalid UTF-8 sequence of bytes is found,
- pcre_exec() returns the error PCRE_ERROR_BADUTF8. If startoffset con-
+ UTF-8 string is automatically checked when pcre_exec() is subsequently
+ called. The value of startoffset is also checked to ensure that it
+ points to the start of a UTF-8 character. There is a discussion about
+ the validity of UTF-8 strings in the section on UTF-8 support in the
+ main pcre page. If an invalid UTF-8 sequence of bytes is found,
+ pcre_exec() returns the error PCRE_ERROR_BADUTF8. If startoffset con-
tains an invalid value, PCRE_ERROR_BADUTF8_OFFSET is returned.
- If you already know that your subject is valid, and you want to skip
- these checks for performance reasons, you can set the
- PCRE_NO_UTF8_CHECK option when calling pcre_exec(). You might want to
- do this for the second and subsequent calls to pcre_exec() if you are
- making repeated calls to find all the matches in a single subject
- string. However, you should be sure that the value of startoffset
- points to the start of a UTF-8 character. When PCRE_NO_UTF8_CHECK is
- set, the effect of passing an invalid UTF-8 string as a subject, or a
- value of startoffset that does not point to the start of a UTF-8 char-
+ If you already know that your subject is valid, and you want to skip
+ these checks for performance reasons, you can set the
+ PCRE_NO_UTF8_CHECK option when calling pcre_exec(). You might want to
+ do this for the second and subsequent calls to pcre_exec() if you are
+ making repeated calls to find all the matches in a single subject
+ string. However, you should be sure that the value of startoffset
+ points to the start of a UTF-8 character. When PCRE_NO_UTF8_CHECK is
+ set, the effect of passing an invalid UTF-8 string as a subject, or a
+ value of startoffset that does not point to the start of a UTF-8 char-
acter, is undefined. Your program may crash.
PCRE_PARTIAL
- This option turns on the partial matching feature. If the subject
- string fails to match the pattern, but at some point during the match-
- ing process the end of the subject was reached (that is, the subject
- partially matches the pattern and the failure to match occurred only
- because there were not enough subject characters), pcre_exec() returns
- PCRE_ERROR_PARTIAL instead of PCRE_ERROR_NOMATCH. When PCRE_PARTIAL is
- used, there are restrictions on what may appear in the pattern. These
+ This option turns on the partial matching feature. If the subject
+ string fails to match the pattern, but at some point during the match-
+ ing process the end of the subject was reached (that is, the subject
+ partially matches the pattern and the failure to match occurred only
+ because there were not enough subject characters), pcre_exec() returns
+ PCRE_ERROR_PARTIAL instead of PCRE_ERROR_NOMATCH. When PCRE_PARTIAL is
+ used, there are restrictions on what may appear in the pattern. These
are discussed in the pcrepartial documentation.
The string to be matched by pcre_exec()
- The subject string is passed to pcre_exec() as a pointer in subject, a
- length in length, and a starting byte offset in startoffset. In UTF-8
- mode, the byte offset must point to the start of a UTF-8 character.
- Unlike the pattern string, the subject may contain binary zero bytes.
- When the starting offset is zero, the search for a match starts at the
- beginning of the subject, and this is by far the most common case.
+ The subject string is passed to pcre_exec() as a pointer in subject, a
+ length (in bytes) in length, and a starting byte offset in startoffset.
+ In UTF-8 mode, the byte offset must point to the start of a UTF-8 char-
+ acter. Unlike the pattern string, the subject may contain binary zero
+ bytes. When the starting offset is zero, the search for a match starts
+ at the beginning of the subject, and this is by far the most common
+ case.
A non-zero starting offset is useful when searching for another match
in the same subject by calling pcre_exec() again after a previous suc-
@@ -2048,70 +2088,73 @@ MATCHING A PATTERN: THE TRADITIONAL FUNCTION
string. PCRE supports several other kinds of parenthesized subpattern
that do not cause substrings to be captured.
- Captured substrings are returned to the caller via a vector of integer
- offsets whose address is passed in ovector. The number of elements in
- the vector is passed in ovecsize, which must be a non-negative number.
- Note: this argument is NOT the size of ovector in bytes.
+ Captured substrings are returned to the caller via a vector of integers
+ whose address is passed in ovector. The number of elements in the vec-
+ tor is passed in ovecsize, which must be a non-negative number. Note:
+ this argument is NOT the size of ovector in bytes.
The first two-thirds of the vector is used to pass back captured sub-
strings, each substring using a pair of integers. The remaining third
of the vector is used as workspace by pcre_exec() while matching cap-
turing subpatterns, and is not available for passing back information.
- The length passed in ovecsize should always be a multiple of three. If
+ The number passed in ovecsize should always be a multiple of three. If
it is not, it is rounded down.
When a match is successful, information about captured substrings is
returned in pairs of integers, starting at the beginning of ovector,
and continuing up to two-thirds of its length at the most. The first
- element of a pair is set to the offset of the first character in a sub-
- string, and the second is set to the offset of the first character
- after the end of a substring. The first pair, ovector[0] and ovec-
- tor[1], identify the portion of the subject string matched by the
- entire pattern. The next pair is used for the first capturing subpat-
- tern, and so on. The value returned by pcre_exec() is one more than the
- highest numbered pair that has been set. For example, if two substrings
- have been captured, the returned value is 3. If there are no capturing
- subpatterns, the return value from a successful match is 1, indicating
- that just the first pair of offsets has been set.
+ element of each pair is set to the byte offset of the first character
+ in a substring, and the second is set to the byte offset of the first
+ character after the end of a substring. Note: these values are always
+ byte offsets, even in UTF-8 mode. They are not character counts.
+
+ The first pair of integers, ovector[0] and ovector[1], identify the
+ portion of the subject string matched by the entire pattern. The next
+ pair is used for the first capturing subpattern, and so on. The value
+ returned by pcre_exec() is one more than the highest numbered pair that
+ has been set. For example, if two substrings have been captured, the
+ returned value is 3. If there are no capturing subpatterns, the return
+ value from a successful match is 1, indicating that just the first pair
+ of offsets has been set.
If a capturing subpattern is matched repeatedly, it is the last portion
of the string that it matched that is returned.
- If the vector is too small to hold all the captured substring offsets,
+ If the vector is too small to hold all the captured substring offsets,
it is used as far as possible (up to two-thirds of its length), and the
- function returns a value of zero. In particular, if the substring off-
- sets are not of interest, pcre_exec() may be called with ovector passed
- as NULL and ovecsize as zero. However, if the pattern contains back
- references and the ovector is not big enough to remember the related
- substrings, PCRE has to get additional memory for use during matching.
- Thus it is usually advisable to supply an ovector.
-
- The pcre_info() function can be used to find out how many capturing
- subpatterns there are in a compiled pattern. The smallest size for
- ovector that will allow for n captured substrings, in addition to the
+ function returns a value of zero. If the substring offsets are not of
+ interest, pcre_exec() may be called with ovector passed as NULL and
+ ovecsize as zero. However, if the pattern contains back references and
+ the ovector is not big enough to remember the related substrings, PCRE
+ has to get additional memory for use during matching. Thus it is usu-
+ ally advisable to supply an ovector.
+
+ The pcre_info() function can be used to find out how many capturing
+ subpatterns there are in a compiled pattern. The smallest size for
+ ovector that will allow for n captured substrings, in addition to the
offsets of the substring matched by the whole pattern, is (n+1)*3.
- It is possible for capturing subpattern number n+1 to match some part
+ It is possible for capturing subpattern number n+1 to match some part
of the subject when subpattern n has not been used at all. For example,
- if the string "abc" is matched against the pattern (a|(z))(bc) the
+ if the string "abc" is matched against the pattern (a|(z))(bc) the
return from the function is 4, and subpatterns 1 and 3 are matched, but
- 2 is not. When this happens, both values in the offset pairs corre-
+ 2 is not. When this happens, both values in the offset pairs corre-
sponding to unused subpatterns are set to -1.
- Offset values that correspond to unused subpatterns at the end of the
- expression are also set to -1. For example, if the string "abc" is
- matched against the pattern (abc)(x(yz)?)? subpatterns 2 and 3 are not
- matched. The return from the function is 2, because the highest used
+ Offset values that correspond to unused subpatterns at the end of the
+ expression are also set to -1. For example, if the string "abc" is
+ matched against the pattern (abc)(x(yz)?)? subpatterns 2 and 3 are not
+ matched. The return from the function is 2, because the highest used
capturing subpattern number is 1. However, you can refer to the offsets
- for the second and third capturing subpatterns if you wish (assuming
+ for the second and third capturing subpatterns if you wish (assuming
the vector is large enough, of course).
- Some convenience functions are provided for extracting the captured
+ Some convenience functions are provided for extracting the captured
substrings as separate strings. These are described below.
Error return values from pcre_exec()
- If pcre_exec() fails, it returns a negative number. The following are
+ If pcre_exec() fails, it returns a negative number. The following are
defined in the header file:
PCRE_ERROR_NOMATCH (-1)
@@ -2120,7 +2163,7 @@ MATCHING A PATTERN: THE TRADITIONAL FUNCTION
PCRE_ERROR_NULL (-2)
- Either code or subject was passed as NULL, or ovector was NULL and
+ Either code or subject was passed as NULL, or ovector was NULL and
ovecsize was not zero.
PCRE_ERROR_BADOPTION (-3)
@@ -2129,79 +2172,79 @@ MATCHING A PATTERN: THE TRADITIONAL FUNCTION
PCRE_ERROR_BADMAGIC (-4)
- PCRE stores a 4-byte "magic number" at the start of the compiled code,
+ PCRE stores a 4-byte "magic number" at the start of the compiled code,
to catch the case when it is passed a junk pointer and to detect when a
pattern that was compiled in an environment of one endianness is run in
- an environment with the other endianness. This is the error that PCRE
+ an environment with the other endianness. This is the error that PCRE
gives when the magic number is not present.
PCRE_ERROR_UNKNOWN_OPCODE (-5)
While running the pattern match, an unknown item was encountered in the
- compiled pattern. This error could be caused by a bug in PCRE or by
+ compiled pattern. This error could be caused by a bug in PCRE or by
overwriting of the compiled pattern.
PCRE_ERROR_NOMEMORY (-6)
- If a pattern contains back references, but the ovector that is passed
+ If a pattern contains back references, but the ovector that is passed
to pcre_exec() is not big enough to remember the referenced substrings,
- PCRE gets a block of memory at the start of matching to use for this
- purpose. If the call via pcre_malloc() fails, this error is given. The
+ PCRE gets a block of memory at the start of matching to use for this
+ purpose. If the call via pcre_malloc() fails, this error is given. The
memory is automatically freed at the end of matching.
PCRE_ERROR_NOSUBSTRING (-7)
- This error is used by the pcre_copy_substring(), pcre_get_substring(),
+ This error is used by the pcre_copy_substring(), pcre_get_substring(),
and pcre_get_substring_list() functions (see below). It is never
returned by pcre_exec().
PCRE_ERROR_MATCHLIMIT (-8)
- The backtracking limit, as specified by the match_limit field in a
- pcre_extra structure (or defaulted) was reached. See the description
+ The backtracking limit, as specified by the match_limit field in a
+ pcre_extra structure (or defaulted) was reached. See the description
above.
PCRE_ERROR_CALLOUT (-9)
This error is never generated by pcre_exec() itself. It is provided for
- use by callout functions that want to yield a distinctive error code.
+ use by callout functions that want to yield a distinctive error code.
See the pcrecallout documentation for details.
PCRE_ERROR_BADUTF8 (-10)
- A string that contains an invalid UTF-8 byte sequence was passed as a
+ A string that contains an invalid UTF-8 byte sequence was passed as a
subject.
PCRE_ERROR_BADUTF8_OFFSET (-11)
The UTF-8 byte sequence that was passed as a subject was valid, but the
- value of startoffset did not point to the beginning of a UTF-8 charac-
+ value of startoffset did not point to the beginning of a UTF-8 charac-
ter.
PCRE_ERROR_PARTIAL (-12)
- The subject string did not match, but it did match partially. See the
+ The subject string did not match, but it did match partially. See the
pcrepartial documentation for details of partial matching.
PCRE_ERROR_BADPARTIAL (-13)
- The PCRE_PARTIAL option was used with a compiled pattern containing
- items that are not supported for partial matching. See the pcrepartial
+ The PCRE_PARTIAL option was used with a compiled pattern containing
+ items that are not supported for partial matching. See the pcrepartial
documentation for details of partial matching.
PCRE_ERROR_INTERNAL (-14)
- An unexpected internal error has occurred. This error could be caused
+ An unexpected internal error has occurred. This error could be caused
by a bug in PCRE or by overwriting of the compiled pattern.
PCRE_ERROR_BADCOUNT (-15)
- This error is given if the value of the ovecsize argument is negative.
+ This error is given if the value of the ovecsize argument is negative.
PCRE_ERROR_RECURSIONLIMIT (-21)
The internal recursion limit, as specified by the match_limit_recursion
- field in a pcre_extra structure (or defaulted) was reached. See the
+ field in a pcre_extra structure (or defaulted) was reached. See the
description above.
PCRE_ERROR_BADNEWLINE (-23)
@@ -2224,78 +2267,78 @@ EXTRACTING CAPTURED SUBSTRINGS BY NUMBER
int pcre_get_substring_list(const char *subject,
int *ovector, int stringcount, const char ***listptr);
- Captured substrings can be accessed directly by using the offsets
- returned by pcre_exec() in ovector. For convenience, the functions
+ Captured substrings can be accessed directly by using the offsets
+ returned by pcre_exec() in ovector. For convenience, the functions
pcre_copy_substring(), pcre_get_substring(), and pcre_get_sub-
- string_list() are provided for extracting captured substrings as new,
- separate, zero-terminated strings. These functions identify substrings
- by number. The next section describes functions for extracting named
+ string_list() are provided for extracting captured substrings as new,
+ separate, zero-terminated strings. These functions identify substrings
+ by number. The next section describes functions for extracting named
substrings.
- A substring that contains a binary zero is correctly extracted and has
- a further zero added on the end, but the result is not, of course, a C
- string. However, you can process such a string by referring to the
- length that is returned by pcre_copy_substring() and pcre_get_sub-
+ A substring that contains a binary zero is correctly extracted and has
+ a further zero added on the end, but the result is not, of course, a C
+ string. However, you can process such a string by referring to the
+ length that is returned by pcre_copy_substring() and pcre_get_sub-
string(). Unfortunately, the interface to pcre_get_substring_list() is
- not adequate for handling strings containing binary zeros, because the
+ not adequate for handling strings containing binary zeros, because the
end of the final string is not independently indicated.
- The first three arguments are the same for all three of these func-
- tions: subject is the subject string that has just been successfully
+ The first three arguments are the same for all three of these func-
+ tions: subject is the subject string that has just been successfully
matched, ovector is a pointer to the vector of integer offsets that was
passed to pcre_exec(), and stringcount is the number of substrings that
- were captured by the match, including the substring that matched the
+ were captured by the match, including the substring that matched the
entire regular expression. This is the value returned by pcre_exec() if
- it is greater than zero. If pcre_exec() returned zero, indicating that
- it ran out of space in ovector, the value passed as stringcount should
+ it is greater than zero. If pcre_exec() returned zero, indicating that
+ it ran out of space in ovector, the value passed as stringcount should
be the number of elements in the vector divided by three.
- The functions pcre_copy_substring() and pcre_get_substring() extract a
- single substring, whose number is given as stringnumber. A value of
- zero extracts the substring that matched the entire pattern, whereas
- higher values extract the captured substrings. For pcre_copy_sub-
- string(), the string is placed in buffer, whose length is given by
- buffersize, while for pcre_get_substring() a new block of memory is
- obtained via pcre_malloc, and its address is returned via stringptr.
- The yield of the function is the length of the string, not including
+ The functions pcre_copy_substring() and pcre_get_substring() extract a
+ single substring, whose number is given as stringnumber. A value of
+ zero extracts the substring that matched the entire pattern, whereas
+ higher values extract the captured substrings. For pcre_copy_sub-
+ string(), the string is placed in buffer, whose length is given by
+ buffersize, while for pcre_get_substring() a new block of memory is
+ obtained via pcre_malloc, and its address is returned via stringptr.
+ The yield of the function is the length of the string, not including
the terminating zero, or one of these error codes:
PCRE_ERROR_NOMEMORY (-6)
- The buffer was too small for pcre_copy_substring(), or the attempt to
+ The buffer was too small for pcre_copy_substring(), or the attempt to
get memory failed for pcre_get_substring().
PCRE_ERROR_NOSUBSTRING (-7)
There is no substring whose number is stringnumber.
- The pcre_get_substring_list() function extracts all available sub-
- strings and builds a list of pointers to them. All this is done in a
+ The pcre_get_substring_list() function extracts all available sub-
+ strings and builds a list of pointers to them. All this is done in a
single block of memory that is obtained via pcre_malloc. The address of
- the memory block is returned via listptr, which is also the start of
- the list of string pointers. The end of the list is marked by a NULL
- pointer. The yield of the function is zero if all went well, or the
+ the memory block is returned via listptr, which is also the start of
+ the list of string pointers. The end of the list is marked by a NULL
+ pointer. The yield of the function is zero if all went well, or the
error code
PCRE_ERROR_NOMEMORY (-6)
if the attempt to get the memory block failed.
- When any of these functions encounter a substring that is unset, which
- can happen when capturing subpattern number n+1 matches some part of
- the subject, but subpattern n has not been used at all, they return an
+ When any of these functions encounter a substring that is unset, which
+ can happen when capturing subpattern number n+1 matches some part of
+ the subject, but subpattern n has not been used at all, they return an
empty string. This can be distinguished from a genuine zero-length sub-
- string by inspecting the appropriate offset in ovector, which is nega-
+ string by inspecting the appropriate offset in ovector, which is nega-
tive for unset substrings.
- The two convenience functions pcre_free_substring() and pcre_free_sub-
- string_list() can be used to free the memory returned by a previous
+ The two convenience functions pcre_free_substring() and pcre_free_sub-
+ string_list() can be used to free the memory returned by a previous
call of pcre_get_substring() or pcre_get_substring_list(), respec-
- tively. They do nothing more than call the function pointed to by
- pcre_free, which of course could be called directly from a C program.
- However, PCRE is used in some situations where it is linked via a spe-
- cial interface to another programming language that cannot use
- pcre_free directly; it is for these cases that the functions are pro-
+ tively. They do nothing more than call the function pointed to by
+ pcre_free, which of course could be called directly from a C program.
+ However, PCRE is used in some situations where it is linked via a spe-
+ cial interface to another programming language that cannot use
+ pcre_free directly; it is for these cases that the functions are pro-
vided.
@@ -2314,7 +2357,7 @@ EXTRACTING CAPTURED SUBSTRINGS BY NAME
int stringcount, const char *stringname,
const char **stringptr);
- To extract a substring by name, you first have to find associated num-
+ To extract a substring by name, you first have to find associated num-
ber. For example, for this pattern
(a+)b(?<xxx>\d+)...
@@ -2323,27 +2366,27 @@ EXTRACTING CAPTURED SUBSTRINGS BY NAME
be unique (PCRE_DUPNAMES was not set), you can find the number from the
name by calling pcre_get_stringnumber(). The first argument is the com-
piled pattern, and the second is the name. The yield of the function is
- the subpattern number, or PCRE_ERROR_NOSUBSTRING (-7) if there is no
+ the subpattern number, or PCRE_ERROR_NOSUBSTRING (-7) if there is no
subpattern of that name.
Given the number, you can extract the substring directly, or use one of
the functions described in the previous section. For convenience, there
are also two functions that do the whole job.
- Most of the arguments of pcre_copy_named_substring() and
- pcre_get_named_substring() are the same as those for the similarly
- named functions that extract by number. As these are described in the
- previous section, they are not re-described here. There are just two
+ Most of the arguments of pcre_copy_named_substring() and
+ pcre_get_named_substring() are the same as those for the similarly
+ named functions that extract by number. As these are described in the
+ previous section, they are not re-described here. There are just two
differences:
- First, instead of a substring number, a substring name is given. Sec-
+ First, instead of a substring number, a substring name is given. Sec-
ond, there is an extra argument, given at the start, which is a pointer
- to the compiled pattern. This is needed in order to gain access to the
+ to the compiled pattern. This is needed in order to gain access to the
name-to-number translation table.
- These functions call pcre_get_stringnumber(), and if it succeeds, they
- then call pcre_copy_substring() or pcre_get_substring(), as appropri-
- ate. NOTE: If PCRE_DUPNAMES is set and there are duplicate names, the
+ These functions call pcre_get_stringnumber(), and if it succeeds, they
+ then call pcre_copy_substring() or pcre_get_substring(), as appropri-
+ ate. NOTE: If PCRE_DUPNAMES is set and there are duplicate names, the
behaviour may not be what you want (see the next section).
@@ -2352,47 +2395,47 @@ DUPLICATE SUBPATTERN NAMES
int pcre_get_stringtable_entries(const pcre *code,
const char *name, char **first, char **last);
- When a pattern is compiled with the PCRE_DUPNAMES option, names for
- subpatterns are not required to be unique. Normally, patterns with
- duplicate names are such that in any one match, only one of the named
- subpatterns participates. An example is shown in the pcrepattern docu-
+ When a pattern is compiled with the PCRE_DUPNAMES option, names for
+ subpatterns are not required to be unique. Normally, patterns with
+ duplicate names are such that in any one match, only one of the named
+ subpatterns participates. An example is shown in the pcrepattern docu-
mentation.
- When duplicates are present, pcre_copy_named_substring() and
- pcre_get_named_substring() return the first substring corresponding to
- the given name that is set. If none are set, PCRE_ERROR_NOSUBSTRING
- (-7) is returned; no data is returned. The pcre_get_stringnumber()
- function returns one of the numbers that are associated with the name,
+ When duplicates are present, pcre_copy_named_substring() and
+ pcre_get_named_substring() return the first substring corresponding to
+ the given name that is set. If none are set, PCRE_ERROR_NOSUBSTRING
+ (-7) is returned; no data is returned. The pcre_get_stringnumber()
+ function returns one of the numbers that are associated with the name,
but it is not defined which it is.
- If you want to get full details of all captured substrings for a given
- name, you must use the pcre_get_stringtable_entries() function. The
+ If you want to get full details of all captured substrings for a given
+ name, you must use the pcre_get_stringtable_entries() function. The
first argument is the compiled pattern, and the second is the name. The
- third and fourth are pointers to variables which are updated by the
+ third and fourth are pointers to variables which are updated by the
function. After it has run, they point to the first and last entries in
- the name-to-number table for the given name. The function itself
- returns the length of each entry, or PCRE_ERROR_NOSUBSTRING (-7) if
- there are none. The format of the table is described above in the sec-
- tion entitled Information about a pattern. Given all the relevant
- entries for the name, you can extract each of their numbers, and hence
+ the name-to-number table for the given name. The function itself
+ returns the length of each entry, or PCRE_ERROR_NOSUBSTRING (-7) if
+ there are none. The format of the table is described above in the sec-
+ tion entitled Information about a pattern. Given all the relevant
+ entries for the name, you can extract each of their numbers, and hence
the captured data, if any.
FINDING ALL POSSIBLE MATCHES
- The traditional matching function uses a similar algorithm to Perl,
+ The traditional matching function uses a similar algorithm to Perl,
which stops when it finds the first match, starting at a given point in
- the subject. If you want to find all possible matches, or the longest
- possible match, consider using the alternative matching function (see
- below) instead. If you cannot use the alternative function, but still
- need to find all possible matches, you can kludge it up by making use
+ the subject. If you want to find all possible matches, or the longest
+ possible match, consider using the alternative matching function (see
+ below) instead. If you cannot use the alternative function, but still
+ need to find all possible matches, you can kludge it up by making use
of the callout facility, which is described in the pcrecallout documen-
tation.
What you have to do is to insert a callout right at the end of the pat-
- tern. When your callout function is called, extract and save the cur-
- rent matched substring. Then return 1, which forces pcre_exec() to
- backtrack and try other alternatives. Ultimately, when it runs out of
+ tern. When your callout function is called, extract and save the cur-
+ rent matched substring. Then return 1, which forces pcre_exec() to
+ backtrack and try other alternatives. Ultimately, when it runs out of
matches, pcre_exec() will yield PCRE_ERROR_NOMATCH.
@@ -2403,25 +2446,25 @@ MATCHING A PATTERN: THE ALTERNATIVE FUNCTION
int options, int *ovector, int ovecsize,
int *workspace, int wscount);
- The function pcre_dfa_exec() is called to match a subject string
- against a compiled pattern, using a matching algorithm that scans the
- subject string just once, and does not backtrack. This has different
- characteristics to the normal algorithm, and is not compatible with
- Perl. Some of the features of PCRE patterns are not supported. Never-
- theless, there are times when this kind of matching can be useful. For
+ The function pcre_dfa_exec() is called to match a subject string
+ against a compiled pattern, using a matching algorithm that scans the
+ subject string just once, and does not backtrack. This has different
+ characteristics to the normal algorithm, and is not compatible with
+ Perl. Some of the features of PCRE patterns are not supported. Never-
+ theless, there are times when this kind of matching can be useful. For
a discussion of the two matching algorithms, see the pcrematching docu-
mentation.
- The arguments for the pcre_dfa_exec() function are the same as for
+ The arguments for the pcre_dfa_exec() function are the same as for
pcre_exec(), plus two extras. The ovector argument is used in a differ-
- ent way, and this is described below. The other common arguments are
- used in the same way as for pcre_exec(), so their description is not
+ ent way, and this is described below. The other common arguments are
+ used in the same way as for pcre_exec(), so their description is not
repeated here.
- The two additional arguments provide workspace for the function. The
- workspace vector should contain at least 20 elements. It is used for
+ The two additional arguments provide workspace for the function. The
+ workspace vector should contain at least 20 elements. It is used for
keeping track of multiple paths through the pattern tree. More
- workspace will be needed for patterns and subjects where there are a
+ workspace will be needed for patterns and subjects where there are a
lot of potential matches.
Here is an example of a simple call to pcre_dfa_exec():
@@ -2443,47 +2486,47 @@ MATCHING A PATTERN: THE ALTERNATIVE FUNCTION
Option bits for pcre_dfa_exec()
- The unused bits of the options argument for pcre_dfa_exec() must be
- zero. The only bits that may be set are PCRE_ANCHORED, PCRE_NEW-
- LINE_xxx, PCRE_NOTBOL, PCRE_NOTEOL, PCRE_NOTEMPTY, PCRE_NO_UTF8_CHECK,
+ The unused bits of the options argument for pcre_dfa_exec() must be
+ zero. The only bits that may be set are PCRE_ANCHORED, PCRE_NEW-
+ LINE_xxx, PCRE_NOTBOL, PCRE_NOTEOL, PCRE_NOTEMPTY, PCRE_NO_UTF8_CHECK,
PCRE_PARTIAL, PCRE_DFA_SHORTEST, and PCRE_DFA_RESTART. All but the last
three of these are the same as for pcre_exec(), so their description is
not repeated here.
PCRE_PARTIAL
- This has the same general effect as it does for pcre_exec(), but the
- details are slightly different. When PCRE_PARTIAL is set for
- pcre_dfa_exec(), the return code PCRE_ERROR_NOMATCH is converted into
- PCRE_ERROR_PARTIAL if the end of the subject is reached, there have
+ This has the same general effect as it does for pcre_exec(), but the
+ details are slightly different. When PCRE_PARTIAL is set for
+ pcre_dfa_exec(), the return code PCRE_ERROR_NOMATCH is converted into
+ PCRE_ERROR_PARTIAL if the end of the subject is reached, there have
been no complete matches, but there is still at least one matching pos-
- sibility. The portion of the string that provided the partial match is
+ sibility. The portion of the string that provided the partial match is
set as the first matching string.
PCRE_DFA_SHORTEST
- Setting the PCRE_DFA_SHORTEST option causes the matching algorithm to
+ Setting the PCRE_DFA_SHORTEST option causes the matching algorithm to
stop as soon as it has found one match. Because of the way the alterna-
- tive algorithm works, this is necessarily the shortest possible match
+ tive algorithm works, this is necessarily the shortest possible match
at the first possible matching point in the subject string.
PCRE_DFA_RESTART
- When pcre_dfa_exec() is called with the PCRE_PARTIAL option, and
- returns a partial match, it is possible to call it again, with addi-
- tional subject characters, and have it continue with the same match.
- The PCRE_DFA_RESTART option requests this action; when it is set, the
- workspace and wscount options must reference the same vector as before
- because data about the match so far is left in them after a partial
- match. There is more discussion of this facility in the pcrepartial
+ When pcre_dfa_exec() is called with the PCRE_PARTIAL option, and
+ returns a partial match, it is possible to call it again, with addi-
+ tional subject characters, and have it continue with the same match.
+ The PCRE_DFA_RESTART option requests this action; when it is set, the
+ workspace and wscount options must reference the same vector as before
+ because data about the match so far is left in them after a partial
+ match. There is more discussion of this facility in the pcrepartial
documentation.
Successful returns from pcre_dfa_exec()
- When pcre_dfa_exec() succeeds, it may have matched more than one sub-
+ When pcre_dfa_exec() succeeds, it may have matched more than one sub-
string in the subject. Note, however, that all the matches from one run
- of the function start at the same point in the subject. The shorter
- matches are all initial substrings of the longer matches. For example,
+ of the function start at the same point in the subject. The shorter
+ matches are all initial substrings of the longer matches. For example,
if the pattern
<.*>
@@ -2498,62 +2541,62 @@ MATCHING A PATTERN: THE ALTERNATIVE FUNCTION
<something> <something else>
<something> <something else> <something further>
- On success, the yield of the function is a number greater than zero,
- which is the number of matched substrings. The substrings themselves
- are returned in ovector. Each string uses two elements; the first is
- the offset to the start, and the second is the offset to the end. In
- fact, all the strings have the same start offset. (Space could have
- been saved by giving this only once, but it was decided to retain some
- compatibility with the way pcre_exec() returns data, even though the
+ On success, the yield of the function is a number greater than zero,
+ which is the number of matched substrings. The substrings themselves
+ are returned in ovector. Each string uses two elements; the first is
+ the offset to the start, and the second is the offset to the end. In
+ fact, all the strings have the same start offset. (Space could have
+ been saved by giving this only once, but it was decided to retain some
+ compatibility with the way pcre_exec() returns data, even though the
meaning of the strings is different.)
The strings are returned in reverse order of length; that is, the long-
- est matching string is given first. If there were too many matches to
- fit into ovector, the yield of the function is zero, and the vector is
+ est matching string is given first. If there were too many matches to
+ fit into ovector, the yield of the function is zero, and the vector is
filled with the longest matches.
Error returns from pcre_dfa_exec()
- The pcre_dfa_exec() function returns a negative number when it fails.
- Many of the errors are the same as for pcre_exec(), and these are
- described above. There are in addition the following errors that are
+ The pcre_dfa_exec() function returns a negative number when it fails.
+ Many of the errors are the same as for pcre_exec(), and these are
+ described above. There are in addition the following errors that are
specific to pcre_dfa_exec():
PCRE_ERROR_DFA_UITEM (-16)
- This return is given if pcre_dfa_exec() encounters an item in the pat-
- tern that it does not support, for instance, the use of \C or a back
+ This return is given if pcre_dfa_exec() encounters an item in the pat-
+ tern that it does not support, for instance, the use of \C or a back
reference.
PCRE_ERROR_DFA_UCOND (-17)
- This return is given if pcre_dfa_exec() encounters a condition item
- that uses a back reference for the condition, or a test for recursion
+ This return is given if pcre_dfa_exec() encounters a condition item
+ that uses a back reference for the condition, or a test for recursion
in a specific group. These are not supported.
PCRE_ERROR_DFA_UMLIMIT (-18)
- This return is given if pcre_dfa_exec() is called with an extra block
+ This return is given if pcre_dfa_exec() is called with an extra block
that contains a setting of the match_limit field. This is not supported
(it is meaningless).
PCRE_ERROR_DFA_WSSIZE (-19)
- This return is given if pcre_dfa_exec() runs out of space in the
+ This return is given if pcre_dfa_exec() runs out of space in the
workspace vector.
PCRE_ERROR_DFA_RECURSE (-20)
- When a recursive subpattern is processed, the matching function calls
- itself recursively, using private vectors for ovector and workspace.
- This error is given if the output vector is not large enough. This
+ When a recursive subpattern is processed, the matching function calls
+ itself recursively, using private vectors for ovector and workspace.
+ This error is given if the output vector is not large enough. This
should be extremely rare, as a vector of size 1000 is used.
SEE ALSO
- pcrebuild(3), pcrecallout(3), pcrecpp(3)(3), pcrematching(3), pcrepar-
- tial(3), pcreposix(3), pcreprecompile(3), pcresample(3), pcrestack(3).
+ pcrebuild(3), pcrecallout(3), pcrecpp(3)(3), pcrematching(3), pcrepar-
+ tial(3), pcreposix(3), pcreprecompile(3), pcresample(3), pcrestack(3).
AUTHOR
@@ -2565,7 +2608,7 @@ AUTHOR
REVISION
- Last updated: 23 January 2008
+ Last updated: 24 August 2008
Copyright (c) 1997-2008 University of Cambridge.
------------------------------------------------------------------------------
@@ -2893,12 +2936,18 @@ PCRE REGULAR EXPRESSION DETAILS
The syntax and semantics of the regular expressions that are supported
by PCRE are described in detail below. There is a quick-reference syn-
- tax summary in the pcresyntax page. Perl's regular expressions are
- described in its own documentation, and regular expressions in general
- are covered in a number of books, some of which have copious examples.
- Jeffrey Friedl's "Mastering Regular Expressions", published by
- O'Reilly, covers regular expressions in great detail. This description
- of PCRE's regular expressions is intended as reference material.
+ tax summary in the pcresyntax page. PCRE tries to match Perl syntax and
+ semantics as closely as it can. PCRE also supports some alternative
+ regular expression syntax (which does not conflict with the Perl syn-
+ tax) in order to provide some compatibility with regular expressions in
+ Python, .NET, and Oniguruma.
+
+ Perl's regular expressions are described in its own documentation, and
+ regular expressions in general are covered in a number of books, some
+ of which have copious examples. Jeffrey Friedl's "Mastering Regular
+ Expressions", published by O'Reilly, covers regular expressions in
+ great detail. This description of PCRE's regular expressions is
+ intended as reference material.
The original operation of PCRE was on strings of one-byte characters.
However, there is now also support for UTF-8 character strings. To use
@@ -3145,6 +3194,15 @@ BACKSLASH
named back reference can be coded as \g{name}. Back references are dis-
cussed later, following the discussion of parenthesized subpatterns.
+ Absolute and relative subroutine calls
+
+ For compatibility with Oniguruma, the non-Perl syntax \g followed by a
+ name or a number enclosed either in angle brackets or single quotes, is
+ an alternative syntax for referencing a subpattern as a "subroutine".
+ Details are discussed later. Note that \g{...} (Perl syntax) and
+ \g<...> (Oniguruma syntax) are not synonymous. The former is a back
+ reference; the latter is a subroutine call.
+
Generic character types
Another use of backslash is for specifying generic character types. The
@@ -3162,28 +3220,28 @@ BACKSLASH
\W any "non-word" character
Each pair of escape sequences partitions the complete set of characters
- into two disjoint sets. Any given character matches one, and only one,
+ into two disjoint sets. Any given character matches one, and only one,
of each pair.
These character type sequences can appear both inside and outside char-
- acter classes. They each match one character of the appropriate type.
- If the current matching point is at the end of the subject string, all
+ acter classes. They each match one character of the appropriate type.
+ If the current matching point is at the end of the subject string, all
of them fail, since there is no character to match.
- For compatibility with Perl, \s does not match the VT character (code
- 11). This makes it different from the the POSIX "space" class. The \s
- characters are HT (9), LF (10), FF (12), CR (13), and space (32). If
+ For compatibility with Perl, \s does not match the VT character (code
+ 11). This makes it different from the the POSIX "space" class. The \s
+ characters are HT (9), LF (10), FF (12), CR (13), and space (32). If
"use locale;" is included in a Perl script, \s may match the VT charac-
ter. In PCRE, it never does.
- In UTF-8 mode, characters with values greater than 128 never match \d,
+ In UTF-8 mode, characters with values greater than 128 never match \d,
\s, or \w, and always match \D, \S, and \W. This is true even when Uni-
- code character property support is available. These sequences retain
+ code character property support is available. These sequences retain
their original meanings from before UTF-8 support was available, mainly
for efficiency reasons.
The sequences \h, \H, \v, and \V are Perl 5.10 features. In contrast to
- the other sequences, these do match certain high-valued codepoints in
+ the other sequences, these do match certain high-valued codepoints in
UTF-8 mode. The horizontal space characters are:
U+0009 Horizontal tab
@@ -3217,41 +3275,41 @@ BACKSLASH
U+2029 Paragraph separator
A "word" character is an underscore or any character less than 256 that
- is a letter or digit. The definition of letters and digits is con-
- trolled by PCRE's low-valued character tables, and may vary if locale-
- specific matching is taking place (see "Locale support" in the pcreapi
- page). For example, in a French locale such as "fr_FR" in Unix-like
- systems, or "french" in Windows, some character codes greater than 128
- are used for accented letters, and these are matched by \w. The use of
+ is a letter or digit. The definition of letters and digits is con-
+ trolled by PCRE's low-valued character tables, and may vary if locale-
+ specific matching is taking place (see "Locale support" in the pcreapi
+ page). For example, in a French locale such as "fr_FR" in Unix-like
+ systems, or "french" in Windows, some character codes greater than 128
+ are used for accented letters, and these are matched by \w. The use of
locales with Unicode is discouraged.
Newline sequences
- Outside a character class, by default, the escape sequence \R matches
+ Outside a character class, by default, the escape sequence \R matches
any Unicode newline sequence. This is a Perl 5.10 feature. In non-UTF-8
mode \R is equivalent to the following:
(?>\r\n|\n|\x0b|\f|\r|\x85)
- This is an example of an "atomic group", details of which are given
+ This is an example of an "atomic group", details of which are given
below. This particular group matches either the two-character sequence
- CR followed by LF, or one of the single characters LF (linefeed,
+ CR followed by LF, or one of the single characters LF (linefeed,
U+000A), VT (vertical tab, U+000B), FF (formfeed, U+000C), CR (carriage
return, U+000D), or NEL (next line, U+0085). The two-character sequence
is treated as a single unit that cannot be split.
- In UTF-8 mode, two additional characters whose codepoints are greater
+ In UTF-8 mode, two additional characters whose codepoints are greater
than 255 are added: LS (line separator, U+2028) and PS (paragraph sepa-
- rator, U+2029). Unicode character property support is not needed for
+ rator, U+2029). Unicode character property support is not needed for
these characters to be recognized.
It is possible to restrict \R to match only CR, LF, or CRLF (instead of
- the complete set of Unicode line endings) by setting the option
+ the complete set of Unicode line endings) by setting the option
PCRE_BSR_ANYCRLF either at compile time or when the pattern is matched.
(BSR is an abbrevation for "backslash R".) This can be made the default
- when PCRE is built; if this is the case, the other behaviour can be
- requested via the PCRE_BSR_UNICODE option. It is also possible to
- specify these settings by starting a pattern string with one of the
+ when PCRE is built; if this is the case, the other behaviour can be
+ requested via the PCRE_BSR_UNICODE option. It is also possible to
+ specify these settings by starting a pattern string with one of the
following sequences:
(*BSR_ANYCRLF) CR, LF, or CRLF only
@@ -3260,9 +3318,9 @@ BACKSLASH
These override the default and the options given to pcre_compile(), but
they can be overridden by options given to pcre_exec(). Note that these
special settings, which are not Perl-compatible, are recognized only at
- the very start of a pattern, and that they must be in upper case. If
- more than one of them is present, the last one is used. They can be
- combined with a change of newline convention, for example, a pattern
+ the very start of a pattern, and that they must be in upper case. If
+ more than one of them is present, the last one is used. They can be
+ combined with a change of newline convention, for example, a pattern
can start with:
(*ANY)(*BSR_ANYCRLF)
@@ -3272,49 +3330,49 @@ BACKSLASH
Unicode character properties
When PCRE is built with Unicode character property support, three addi-
- tional escape sequences that match characters with specific properties
- are available. When not in UTF-8 mode, these sequences are of course
- limited to testing characters whose codepoints are less than 256, but
+ tional escape sequences that match characters with specific properties
+ are available. When not in UTF-8 mode, these sequences are of course
+ limited to testing characters whose codepoints are less than 256, but
they do work in this mode. The extra escape sequences are:
\p{xx} a character with the xx property
\P{xx} a character without the xx property
\X an extended Unicode sequence
- The property names represented by xx above are limited to the Unicode
+ The property names represented by xx above are limited to the Unicode
script names, the general category properties, and "Any", which matches
any character (including newline). Other properties such as "InMusical-
- Symbols" are not currently supported by PCRE. Note that \P{Any} does
+ Symbols" are not currently supported by PCRE. Note that \P{Any} does
not match any characters, so always causes a match failure.
Sets of Unicode characters are defined as belonging to certain scripts.
- A character from one of these sets can be matched using a script name.
+ A character from one of these sets can be matched using a script name.
For example:
\p{Greek}
\P{Han}
- Those that are not part of an identified script are lumped together as
+ Those that are not part of an identified script are lumped together as
"Common". The current list of scripts is:
Arabic, Armenian, Balinese, Bengali, Bopomofo, Braille, Buginese,
- Buhid, Canadian_Aboriginal, Cherokee, Common, Coptic, Cuneiform,
+ Buhid, Canadian_Aboriginal, Cherokee, Common, Coptic, Cuneiform,
Cypriot, Cyrillic, Deseret, Devanagari, Ethiopic, Georgian, Glagolitic,
- Gothic, Greek, Gujarati, Gurmukhi, Han, Hangul, Hanunoo, Hebrew, Hira-
- gana, Inherited, Kannada, Katakana, Kharoshthi, Khmer, Lao, Latin,
+ Gothic, Greek, Gujarati, Gurmukhi, Han, Hangul, Hanunoo, Hebrew, Hira-
+ gana, Inherited, Kannada, Katakana, Kharoshthi, Khmer, Lao, Latin,
Limbu, Linear_B, Malayalam, Mongolian, Myanmar, New_Tai_Lue, Nko,
- Ogham, Old_Italic, Old_Persian, Oriya, Osmanya, Phags_Pa, Phoenician,
+ Ogham, Old_Italic, Old_Persian, Oriya, Osmanya, Phags_Pa, Phoenician,
Runic, Shavian, Sinhala, Syloti_Nagri, Syriac, Tagalog, Tagbanwa,
Tai_Le, Tamil, Telugu, Thaana, Thai, Tibetan, Tifinagh, Ugaritic, Yi.
- Each character has exactly one general category property, specified by
+ Each character has exactly one general category property, specified by
a two-letter abbreviation. For compatibility with Perl, negation can be
- specified by including a circumflex between the opening brace and the
+ specified by including a circumflex between the opening brace and the
property name. For example, \p{^Lu} is the same as \P{Lu}.
If only one letter is specified with \p or \P, it includes all the gen-
- eral category properties that start with that letter. In this case, in
- the absence of negation, the curly brackets in the escape sequence are
+ eral category properties that start with that letter. In this case, in
+ the absence of negation, the curly brackets in the escape sequence are
optional; these two examples have the same effect:
\p{L}
@@ -3366,57 +3424,57 @@ BACKSLASH
Zp Paragraph separator
Zs Space separator
- The special property L& is also supported: it matches a character that
- has the Lu, Ll, or Lt property, in other words, a letter that is not
+ The special property L& is also supported: it matches a character that
+ has the Lu, Ll, or Lt property, in other words, a letter that is not
classified as a modifier or "other".
- The Cs (Surrogate) property applies only to characters in the range
- U+D800 to U+DFFF. Such characters are not valid in UTF-8 strings (see
+ The Cs (Surrogate) property applies only to characters in the range
+ U+D800 to U+DFFF. Such characters are not valid in UTF-8 strings (see
RFC 3629) and so cannot be tested by PCRE, unless UTF-8 validity check-
- ing has been turned off (see the discussion of PCRE_NO_UTF8_CHECK in
+ ing has been turned off (see the discussion of PCRE_NO_UTF8_CHECK in
the pcreapi page).
- The long synonyms for these properties that Perl supports (such as
- \p{Letter}) are not supported by PCRE, nor is it permitted to prefix
+ The long synonyms for these properties that Perl supports (such as
+ \p{Letter}) are not supported by PCRE, nor is it permitted to prefix
any of these properties with "Is".
No character that is in the Unicode table has the Cn (unassigned) prop-
erty. Instead, this property is assumed for any code point that is not
in the Unicode table.
- Specifying caseless matching does not affect these escape sequences.
+ Specifying caseless matching does not affect these escape sequences.
For example, \p{Lu} always matches only upper case letters.
- The \X escape matches any number of Unicode characters that form an
+ The \X escape matches any number of Unicode characters that form an
extended Unicode sequence. \X is equivalent to
(?>\PM\pM*)
- That is, it matches a character without the "mark" property, followed
- by zero or more characters with the "mark" property, and treats the
- sequence as an atomic group (see below). Characters with the "mark"
- property are typically accents that affect the preceding character.
- None of them have codepoints less than 256, so in non-UTF-8 mode \X
+ That is, it matches a character without the "mark" property, followed
+ by zero or more characters with the "mark" property, and treats the
+ sequence as an atomic group (see below). Characters with the "mark"
+ property are typically accents that affect the preceding character.
+ None of them have codepoints less than 256, so in non-UTF-8 mode \X
matches any one character.
- Matching characters by Unicode property is not fast, because PCRE has
- to search a structure that contains data for over fifteen thousand
+ Matching characters by Unicode property is not fast, because PCRE has
+ to search a structure that contains data for over fifteen thousand
characters. That is why the traditional escape sequences such as \d and
\w do not use Unicode properties in PCRE.
Resetting the match start
The escape sequence \K, which is a Perl 5.10 feature, causes any previ-
- ously matched characters not to be included in the final matched
+ ously matched characters not to be included in the final matched
sequence. For example, the pattern:
foo\Kbar
- matches "foobar", but reports that it has matched "bar". This feature
- is similar to a lookbehind assertion (described below). However, in
- this case, the part of the subject before the real match does not have
- to be of fixed length, as lookbehind assertions do. The use of \K does
- not interfere with the setting of captured substrings. For example,
+ matches "foobar", but reports that it has matched "bar". This feature
+ is similar to a lookbehind assertion (described below). However, in
+ this case, the part of the subject before the real match does not have
+ to be of fixed length, as lookbehind assertions do. The use of \K does
+ not interfere with the setting of captured substrings. For example,
when the pattern
(foo)\Kbar
@@ -3425,10 +3483,10 @@ BACKSLASH
Simple assertions
- The final use of backslash is for certain simple assertions. An asser-
- tion specifies a condition that has to be met at a particular point in
- a match, without consuming any characters from the subject string. The
- use of subpatterns for more complicated assertions is described below.
+ The final use of backslash is for certain simple assertions. An asser-
+ tion specifies a condition that has to be met at a particular point in
+ a match, without consuming any characters from the subject string. The
+ use of subpatterns for more complicated assertions is described below.
The backslashed assertions are:
\b matches at a word boundary
@@ -3439,41 +3497,41 @@ BACKSLASH
\z matches only at the end of the subject
\G matches at the first matching position in the subject
- These assertions may not appear in character classes (but note that \b
+ These assertions may not appear in character classes (but note that \b
has a different meaning, namely the backspace character, inside a char-
acter class).
- A word boundary is a position in the subject string where the current
- character and the previous character do not both match \w or \W (i.e.
- one matches \w and the other matches \W), or the start or end of the
+ A word boundary is a position in the subject string where the current
+ character and the previous character do not both match \w or \W (i.e.
+ one matches \w and the other matches \W), or the start or end of the
string if the first or last character matches \w, respectively.
- The \A, \Z, and \z assertions differ from the traditional circumflex
+ The \A, \Z, and \z assertions differ from the traditional circumflex
and dollar (described in the next section) in that they only ever match
- at the very start and end of the subject string, whatever options are
- set. Thus, they are independent of multiline mode. These three asser-
+ at the very start and end of the subject string, whatever options are
+ set. Thus, they are independent of multiline mode. These three asser-
tions are not affected by the PCRE_NOTBOL or PCRE_NOTEOL options, which
- affect only the behaviour of the circumflex and dollar metacharacters.
- However, if the startoffset argument of pcre_exec() is non-zero, indi-
+ affect only the behaviour of the circumflex and dollar metacharacters.
+ However, if the startoffset argument of pcre_exec() is non-zero, indi-
cating that matching is to start at a point other than the beginning of
- the subject, \A can never match. The difference between \Z and \z is
+ the subject, \A can never match. The difference between \Z and \z is
that \Z matches before a newline at the end of the string as well as at
the very end, whereas \z matches only at the end.
- The \G assertion is true only when the current matching position is at
- the start point of the match, as specified by the startoffset argument
- of pcre_exec(). It differs from \A when the value of startoffset is
- non-zero. By calling pcre_exec() multiple times with appropriate argu-
+ The \G assertion is true only when the current matching position is at
+ the start point of the match, as specified by the startoffset argument
+ of pcre_exec(). It differs from \A when the value of startoffset is
+ non-zero. By calling pcre_exec() multiple times with appropriate argu-
ments, you can mimic Perl's /g option, and it is in this kind of imple-
mentation where \G can be useful.
- Note, however, that PCRE's interpretation of \G, as the start of the
+ Note, however, that PCRE's interpretation of \G, as the start of the
current match, is subtly different from Perl's, which defines it as the
- end of the previous match. In Perl, these can be different when the
- previously matched string was empty. Because PCRE does just one match
+ end of the previous match. In Perl, these can be different when the
+ previously matched string was empty. Because PCRE does just one match
at a time, it cannot reproduce this behaviour.
- If all the alternatives of a pattern begin with \G, the expression is
+ If all the alternatives of a pattern begin with \G, the expression is
anchored to the starting match position, and the "anchored" flag is set
in the compiled regular expression.
@@ -3481,90 +3539,90 @@ BACKSLASH
CIRCUMFLEX AND DOLLAR
Outside a character class, in the default matching mode, the circumflex
- character is an assertion that is true only if the current matching
- point is at the start of the subject string. If the startoffset argu-
- ment of pcre_exec() is non-zero, circumflex can never match if the
- PCRE_MULTILINE option is unset. Inside a character class, circumflex
+ character is an assertion that is true only if the current matching
+ point is at the start of the subject string. If the startoffset argu-
+ ment of pcre_exec() is non-zero, circumflex can never match if the
+ PCRE_MULTILINE option is unset. Inside a character class, circumflex
has an entirely different meaning (see below).
- Circumflex need not be the first character of the pattern if a number
- of alternatives are involved, but it should be the first thing in each
- alternative in which it appears if the pattern is ever to match that
- branch. If all possible alternatives start with a circumflex, that is,
- if the pattern is constrained to match only at the start of the sub-
- ject, it is said to be an "anchored" pattern. (There are also other
+ Circumflex need not be the first character of the pattern if a number
+ of alternatives are involved, but it should be the first thing in each
+ alternative in which it appears if the pattern is ever to match that
+ branch. If all possible alternatives start with a circumflex, that is,
+ if the pattern is constrained to match only at the start of the sub-
+ ject, it is said to be an "anchored" pattern. (There are also other
constructs that can cause a pattern to be anchored.)
- A dollar character is an assertion that is true only if the current
- matching point is at the end of the subject string, or immediately
+ A dollar character is an assertion that is true only if the current
+ matching point is at the end of the subject string, or immediately
before a newline at the end of the string (by default). Dollar need not
- be the last character of the pattern if a number of alternatives are
- involved, but it should be the last item in any branch in which it
+ be the last character of the pattern if a number of alternatives are
+ involved, but it should be the last item in any branch in which it
appears. Dollar has no special meaning in a character class.
- The meaning of dollar can be changed so that it matches only at the
- very end of the string, by setting the PCRE_DOLLAR_ENDONLY option at
+ The meaning of dollar can be changed so that it matches only at the
+ very end of the string, by setting the PCRE_DOLLAR_ENDONLY option at
compile time. This does not affect the \Z assertion.
The meanings of the circumflex and dollar characters are changed if the
- PCRE_MULTILINE option is set. When this is the case, a circumflex
- matches immediately after internal newlines as well as at the start of
- the subject string. It does not match after a newline that ends the
- string. A dollar matches before any newlines in the string, as well as
- at the very end, when PCRE_MULTILINE is set. When newline is specified
- as the two-character sequence CRLF, isolated CR and LF characters do
+ PCRE_MULTILINE option is set. When this is the case, a circumflex
+ matches immediately after internal newlines as well as at the start of
+ the subject string. It does not match after a newline that ends the
+ string. A dollar matches before any newlines in the string, as well as
+ at the very end, when PCRE_MULTILINE is set. When newline is specified
+ as the two-character sequence CRLF, isolated CR and LF characters do
not indicate newlines.
- For example, the pattern /^abc$/ matches the subject string "def\nabc"
- (where \n represents a newline) in multiline mode, but not otherwise.
- Consequently, patterns that are anchored in single line mode because
- all branches start with ^ are not anchored in multiline mode, and a
- match for circumflex is possible when the startoffset argument of
- pcre_exec() is non-zero. The PCRE_DOLLAR_ENDONLY option is ignored if
+ For example, the pattern /^abc$/ matches the subject string "def\nabc"
+ (where \n represents a newline) in multiline mode, but not otherwise.
+ Consequently, patterns that are anchored in single line mode because
+ all branches start with ^ are not anchored in multiline mode, and a
+ match for circumflex is possible when the startoffset argument of
+ pcre_exec() is non-zero. The PCRE_DOLLAR_ENDONLY option is ignored if
PCRE_MULTILINE is set.
- Note that the sequences \A, \Z, and \z can be used to match the start
- and end of the subject in both modes, and if all branches of a pattern
- start with \A it is always anchored, whether or not PCRE_MULTILINE is
+ Note that the sequences \A, \Z, and \z can be used to match the start
+ and end of the subject in both modes, and if all branches of a pattern
+ start with \A it is always anchored, whether or not PCRE_MULTILINE is
set.
FULL STOP (PERIOD, DOT)
Outside a character class, a dot in the pattern matches any one charac-
- ter in the subject string except (by default) a character that signi-
- fies the end of a line. In UTF-8 mode, the matched character may be
+ ter in the subject string except (by default) a character that signi-
+ fies the end of a line. In UTF-8 mode, the matched character may be
more than one byte long.
- When a line ending is defined as a single character, dot never matches
- that character; when the two-character sequence CRLF is used, dot does
- not match CR if it is immediately followed by LF, but otherwise it
- matches all characters (including isolated CRs and LFs). When any Uni-
- code line endings are being recognized, dot does not match CR or LF or
+ When a line ending is defined as a single character, dot never matches
+ that character; when the two-character sequence CRLF is used, dot does
+ not match CR if it is immediately followed by LF, but otherwise it
+ matches all characters (including isolated CRs and LFs). When any Uni-
+ code line endings are being recognized, dot does not match CR or LF or
any of the other line ending characters.
- The behaviour of dot with regard to newlines can be changed. If the
- PCRE_DOTALL option is set, a dot matches any one character, without
+ The behaviour of dot with regard to newlines can be changed. If the
+ PCRE_DOTALL option is set, a dot matches any one character, without
exception. If the two-character sequence CRLF is present in the subject
string, it takes two dots to match it.
- The handling of dot is entirely independent of the handling of circum-
- flex and dollar, the only relationship being that they both involve
+ The handling of dot is entirely independent of the handling of circum-
+ flex and dollar, the only relationship being that they both involve
newlines. Dot has no special meaning in a character class.
MATCHING A SINGLE BYTE
Outside a character class, the escape sequence \C matches any one byte,
- both in and out of UTF-8 mode. Unlike a dot, it always matches any
- line-ending characters. The feature is provided in Perl in order to
- match individual bytes in UTF-8 mode. Because it breaks up UTF-8 char-
- acters into individual bytes, what remains in the string may be a mal-
- formed UTF-8 string. For this reason, the \C escape sequence is best
+ both in and out of UTF-8 mode. Unlike a dot, it always matches any
+ line-ending characters. The feature is provided in Perl in order to
+ match individual bytes in UTF-8 mode. Because it breaks up UTF-8 char-
+ acters into individual bytes, what remains in the string may be a mal-
+ formed UTF-8 string. For this reason, the \C escape sequence is best
avoided.
- PCRE does not allow \C to appear in lookbehind assertions (described
- below), because in UTF-8 mode this would make it impossible to calcu-
+ PCRE does not allow \C to appear in lookbehind assertions (described
+ below), because in UTF-8 mode this would make it impossible to calcu-
late the length of the lookbehind.
@@ -3573,96 +3631,96 @@ SQUARE BRACKETS AND CHARACTER CLASSES
An opening square bracket introduces a character class, terminated by a
closing square bracket. A closing square bracket on its own is not spe-
cial. If a closing square bracket is required as a member of the class,
- it should be the first data character in the class (after an initial
+ it should be the first data character in the class (after an initial
circumflex, if present) or escaped with a backslash.
- A character class matches a single character in the subject. In UTF-8
- mode, the character may occupy more than one byte. A matched character
+ A character class matches a single character in the subject. In UTF-8
+ mode, the character may occupy more than one byte. A matched character
must be in the set of characters defined by the class, unless the first
- character in the class definition is a circumflex, in which case the
- subject character must not be in the set defined by the class. If a
- circumflex is actually required as a member of the class, ensure it is
+ character in the class definition is a circumflex, in which case the
+ subject character must not be in the set defined by the class. If a
+ circumflex is actually required as a member of the class, ensure it is
not the first character, or escape it with a backslash.
- For example, the character class [aeiou] matches any lower case vowel,
- while [^aeiou] matches any character that is not a lower case vowel.
+ For example, the character class [aeiou] matches any lower case vowel,
+ while [^aeiou] matches any character that is not a lower case vowel.
Note that a circumflex is just a convenient notation for specifying the
- characters that are in the class by enumerating those that are not. A
- class that starts with a circumflex is not an assertion: it still con-
- sumes a character from the subject string, and therefore it fails if
+ characters that are in the class by enumerating those that are not. A
+ class that starts with a circumflex is not an assertion: it still con-
+ sumes a character from the subject string, and therefore it fails if
the current pointer is at the end of the string.
- In UTF-8 mode, characters with values greater than 255 can be included
- in a class as a literal string of bytes, or by using the \x{ escaping
+ In UTF-8 mode, characters with values greater than 255 can be included
+ in a class as a literal string of bytes, or by using the \x{ escaping
mechanism.
- When caseless matching is set, any letters in a class represent both
- their upper case and lower case versions, so for example, a caseless
- [aeiou] matches "A" as well as "a", and a caseless [^aeiou] does not
- match "A", whereas a caseful version would. In UTF-8 mode, PCRE always
- understands the concept of case for characters whose values are less
- than 128, so caseless matching is always possible. For characters with
- higher values, the concept of case is supported if PCRE is compiled
- with Unicode property support, but not otherwise. If you want to use
- caseless matching for characters 128 and above, you must ensure that
- PCRE is compiled with Unicode property support as well as with UTF-8
+ When caseless matching is set, any letters in a class represent both
+ their upper case and lower case versions, so for example, a caseless
+ [aeiou] matches "A" as well as "a", and a caseless [^aeiou] does not
+ match "A", whereas a caseful version would. In UTF-8 mode, PCRE always
+ understands the concept of case for characters whose values are less
+ than 128, so caseless matching is always possible. For characters with
+ higher values, the concept of case is supported if PCRE is compiled
+ with Unicode property support, but not otherwise. If you want to use
+ caseless matching for characters 128 and above, you must ensure that
+ PCRE is compiled with Unicode property support as well as with UTF-8
support.
- Characters that might indicate line breaks are never treated in any
- special way when matching character classes, whatever line-ending
- sequence is in use, and whatever setting of the PCRE_DOTALL and
+ Characters that might indicate line breaks are never treated in any
+ special way when matching character classes, whatever line-ending
+ sequence is in use, and whatever setting of the PCRE_DOTALL and
PCRE_MULTILINE options is used. A class such as [^a] always matches one
of these characters.
- The minus (hyphen) character can be used to specify a range of charac-
- ters in a character class. For example, [d-m] matches any letter
- between d and m, inclusive. If a minus character is required in a
- class, it must be escaped with a backslash or appear in a position
- where it cannot be interpreted as indicating a range, typically as the
+ The minus (hyphen) character can be used to specify a range of charac-
+ ters in a character class. For example, [d-m] matches any letter
+ between d and m, inclusive. If a minus character is required in a
+ class, it must be escaped with a backslash or appear in a position
+ where it cannot be interpreted as indicating a range, typically as the
first or last character in the class.
It is not possible to have the literal character "]" as the end charac-
- ter of a range. A pattern such as [W-]46] is interpreted as a class of
- two characters ("W" and "-") followed by a literal string "46]", so it
- would match "W46]" or "-46]". However, if the "]" is escaped with a
- backslash it is interpreted as the end of range, so [W-\]46] is inter-
- preted as a class containing a range followed by two other characters.
- The octal or hexadecimal representation of "]" can also be used to end
+ ter of a range. A pattern such as [W-]46] is interpreted as a class of
+ two characters ("W" and "-") followed by a literal string "46]", so it
+ would match "W46]" or "-46]". However, if the "]" is escaped with a
+ backslash it is interpreted as the end of range, so [W-\]46] is inter-
+ preted as a class containing a range followed by two other characters.
+ The octal or hexadecimal representation of "]" can also be used to end
a range.
- Ranges operate in the collating sequence of character values. They can
- also be used for characters specified numerically, for example
- [\000-\037]. In UTF-8 mode, ranges can include characters whose values
+ Ranges operate in the collating sequence of character values. They can
+ also be used for characters specified numerically, for example
+ [\000-\037]. In UTF-8 mode, ranges can include characters whose values
are greater than 255, for example [\x{100}-\x{2ff}].
If a range that includes letters is used when caseless matching is set,
it matches the letters in either case. For example, [W-c] is equivalent
- to [][\\^_`wxyzabc], matched caselessly, and in non-UTF-8 mode, if
- character tables for a French locale are in use, [\xc8-\xcb] matches
- accented E characters in both cases. In UTF-8 mode, PCRE supports the
- concept of case for characters with values greater than 128 only when
+ to [][\\^_`wxyzabc], matched caselessly, and in non-UTF-8 mode, if
+ character tables for a French locale are in use, [\xc8-\xcb] matches
+ accented E characters in both cases. In UTF-8 mode, PCRE supports the
+ concept of case for characters with values greater than 128 only when
it is compiled with Unicode property support.
- The character types \d, \D, \p, \P, \s, \S, \w, and \W may also appear
- in a character class, and add the characters that they match to the
+ The character types \d, \D, \p, \P, \s, \S, \w, and \W may also appear
+ in a character class, and add the characters that they match to the
class. For example, [\dABCDEF] matches any hexadecimal digit. A circum-
- flex can conveniently be used with the upper case character types to
- specify a more restricted set of characters than the matching lower
- case type. For example, the class [^\W_] matches any letter or digit,
+ flex can conveniently be used with the upper case character types to
+ specify a more restricted set of characters than the matching lower
+ case type. For example, the class [^\W_] matches any letter or digit,
but not underscore.
- The only metacharacters that are recognized in character classes are
- backslash, hyphen (only where it can be interpreted as specifying a
- range), circumflex (only at the start), opening square bracket (only
- when it can be interpreted as introducing a POSIX class name - see the
- next section), and the terminating closing square bracket. However,
+ The only metacharacters that are recognized in character classes are
+ backslash, hyphen (only where it can be interpreted as specifying a
+ range), circumflex (only at the start), opening square bracket (only
+ when it can be interpreted as introducing a POSIX class name - see the
+ next section), and the terminating closing square bracket. However,
escaping other non-alphanumeric characters does no harm.
POSIX CHARACTER CLASSES
Perl supports the POSIX notation for character classes. This uses names
- enclosed by [: and :] within the enclosing square brackets. PCRE also
+ enclosed by [: and :] within the enclosing square brackets. PCRE also
supports this notation. For example,
[01[:alpha:]%]
@@ -3685,18 +3743,18 @@ POSIX CHARACTER CLASSES
word "word" characters (same as \w)
xdigit hexadecimal digits
- The "space" characters are HT (9), LF (10), VT (11), FF (12), CR (13),
- and space (32). Notice that this list includes the VT character (code
+ The "space" characters are HT (9), LF (10), VT (11), FF (12), CR (13),
+ and space (32). Notice that this list includes the VT character (code
11). This makes "space" different to \s, which does not include VT (for
Perl compatibility).
- The name "word" is a Perl extension, and "blank" is a GNU extension
- from Perl 5.8. Another Perl extension is negation, which is indicated
+ The name "word" is a Perl extension, and "blank" is a GNU extension
+ from Perl 5.8. Another Perl extension is negation, which is indicated
by a ^ character after the colon. For example,
[12[:^digit:]]
- matches "1", "2", or any non-digit. PCRE (and Perl) also recognize the
+ matches "1", "2", or any non-digit. PCRE (and Perl) also recognize the
POSIX syntax [.ch.] and [=ch=] where "ch" is a "collating element", but
these are not supported, and an error is given if they are encountered.
@@ -3706,24 +3764,24 @@ POSIX CHARACTER CLASSES
VERTICAL BAR
- Vertical bar characters are used to separate alternative patterns. For
+ Vertical bar characters are used to separate alternative patterns. For
example, the pattern
gilbert|sullivan
- matches either "gilbert" or "sullivan". Any number of alternatives may
- appear, and an empty alternative is permitted (matching the empty
+ matches either "gilbert" or "sullivan". Any number of alternatives may
+ appear, and an empty alternative is permitted (matching the empty
string). The matching process tries each alternative in turn, from left
- to right, and the first one that succeeds is used. If the alternatives
- are within a subpattern (defined below), "succeeds" means matching the
- rest of the main pattern as well as the alternative in the subpattern.
+ to right, and the first one that succeeds is used. If the alternatives
+ are within a subpattern (defined below), "succeeds" means matching the
+ rest of the main pattern as well as the alternative in the subpattern.
INTERNAL OPTION SETTING
- The settings of the PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, and
- PCRE_EXTENDED options (which are Perl-compatible) can be changed from
- within the pattern by a sequence of Perl option letters enclosed
+ The settings of the PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, and
+ PCRE_EXTENDED options (which are Perl-compatible) can be changed from
+ within the pattern by a sequence of Perl option letters enclosed
between "(?" and ")". The option letters are
i for PCRE_CASELESS
@@ -3733,44 +3791,44 @@ INTERNAL OPTION SETTING
For example, (?im) sets caseless, multiline matching. It is also possi-
ble to unset these options by preceding the letter with a hyphen, and a
- combined setting and unsetting such as (?im-sx), which sets PCRE_CASE-
- LESS and PCRE_MULTILINE while unsetting PCRE_DOTALL and PCRE_EXTENDED,
- is also permitted. If a letter appears both before and after the
+ combined setting and unsetting such as (?im-sx), which sets PCRE_CASE-
+ LESS and PCRE_MULTILINE while unsetting PCRE_DOTALL and PCRE_EXTENDED,
+ is also permitted. If a letter appears both before and after the
hyphen, the option is unset.
- The PCRE-specific options PCRE_DUPNAMES, PCRE_UNGREEDY, and PCRE_EXTRA
- can be changed in the same way as the Perl-compatible options by using
+ The PCRE-specific options PCRE_DUPNAMES, PCRE_UNGREEDY, and PCRE_EXTRA
+ can be changed in the same way as the Perl-compatible options by using
the characters J, U and X respectively.
- When an option change occurs at top level (that is, not inside subpat-
- tern parentheses), the change applies to the remainder of the pattern
+ When an option change occurs at top level (that is, not inside subpat-
+ tern parentheses), the change applies to the remainder of the pattern
that follows. If the change is placed right at the start of a pattern,
PCRE extracts it into the global options (and it will therefore show up
in data extracted by the pcre_fullinfo() function).
- An option change within a subpattern (see below for a description of
+ An option change within a subpattern (see below for a description of
subpatterns) affects only that part of the current pattern that follows
it, so
(a(?i)b)c
matches abc and aBc and no other strings (assuming PCRE_CASELESS is not
- used). By this means, options can be made to have different settings
- in different parts of the pattern. Any changes made in one alternative
- do carry on into subsequent branches within the same subpattern. For
+ used). By this means, options can be made to have different settings
+ in different parts of the pattern. Any changes made in one alternative
+ do carry on into subsequent branches within the same subpattern. For
example,
(a(?i)b|c)
- matches "ab", "aB", "c", and "C", even though when matching "C" the
- first branch is abandoned before the option setting. This is because
- the effects of option settings happen at compile time. There would be
+ matches "ab", "aB", "c", and "C", even though when matching "C" the
+ first branch is abandoned before the option setting. This is because
+ the effects of option settings happen at compile time. There would be
some very weird behaviour otherwise.
- Note: There are other PCRE-specific options that can be set by the
- application when the compile or match functions are called. In some
- cases the pattern can contain special leading sequences to override
- what the application has set or what has been defaulted. Details are
+ Note: There are other PCRE-specific options that can be set by the
+ application when the compile or match functions are called. In some
+ cases the pattern can contain special leading sequences to override
+ what the application has set or what has been defaulted. Details are
given in the section entitled "Newline sequences" above.
@@ -3783,18 +3841,18 @@ SUBPATTERNS
cat(aract|erpillar|)
- matches one of the words "cat", "cataract", or "caterpillar". Without
- the parentheses, it would match "cataract", "erpillar" or an empty
+ matches one of the words "cat", "cataract", or "caterpillar". Without
+ the parentheses, it would match "cataract", "erpillar" or an empty
string.
- 2. It sets up the subpattern as a capturing subpattern. This means
- that, when the whole pattern matches, that portion of the subject
+ 2. It sets up the subpattern as a capturing subpattern. This means
+ that, when the whole pattern matches, that portion of the subject
string that matched the subpattern is passed back to the caller via the
- ovector argument of pcre_exec(). Opening parentheses are counted from
- left to right (starting from 1) to obtain numbers for the capturing
+ ovector argument of pcre_exec(). Opening parentheses are counted from
+ left to right (starting from 1) to obtain numbers for the capturing
subpatterns.
- For example, if the string "the red king" is matched against the pat-
+ For example, if the string "the red king" is matched against the pat-
tern
the ((red|white) (king|queen))
@@ -3802,12 +3860,12 @@ SUBPATTERNS
the captured substrings are "red king", "red", and "king", and are num-
bered 1, 2, and 3, respectively.
- The fact that plain parentheses fulfil two functions is not always
- helpful. There are often times when a grouping subpattern is required
- without a capturing requirement. If an opening parenthesis is followed
- by a question mark and a colon, the subpattern does not do any captur-
- ing, and is not counted when computing the number of any subsequent
- capturing subpatterns. For example, if the string "the white queen" is
+ The fact that plain parentheses fulfil two functions is not always
+ helpful. There are often times when a grouping subpattern is required
+ without a capturing requirement. If an opening parenthesis is followed
+ by a question mark and a colon, the subpattern does not do any captur-
+ ing, and is not counted when computing the number of any subsequent
+ capturing subpatterns. For example, if the string "the white queen" is
matched against the pattern
the ((?:red|white) (king|queen))
@@ -3815,80 +3873,80 @@ SUBPATTERNS
the captured substrings are "white queen" and "queen", and are numbered
1 and 2. The maximum number of capturing subpatterns is 65535.
- As a convenient shorthand, if any option settings are required at the
- start of a non-capturing subpattern, the option letters may appear
+ As a convenient shorthand, if any option settings are required at the
+ start of a non-capturing subpattern, the option letters may appear
between the "?" and the ":". Thus the two patterns
(?i:saturday|sunday)
(?:(?i)saturday|sunday)
match exactly the same set of strings. Because alternative branches are
- tried from left to right, and options are not reset until the end of
- the subpattern is reached, an option setting in one branch does affect
- subsequent branches, so the above patterns match "SUNDAY" as well as
+ tried from left to right, and options are not reset until the end of
+ the subpattern is reached, an option setting in one branch does affect
+ subsequent branches, so the above patterns match "SUNDAY" as well as
"Saturday".
DUPLICATE SUBPATTERN NUMBERS
Perl 5.10 introduced a feature whereby each alternative in a subpattern
- uses the same numbers for its capturing parentheses. Such a subpattern
- starts with (?| and is itself a non-capturing subpattern. For example,
+ uses the same numbers for its capturing parentheses. Such a subpattern
+ starts with (?| and is itself a non-capturing subpattern. For example,
consider this pattern:
(?|(Sat)ur|(Sun))day
- Because the two alternatives are inside a (?| group, both sets of cap-
- turing parentheses are numbered one. Thus, when the pattern matches,
- you can look at captured substring number one, whichever alternative
- matched. This construct is useful when you want to capture part, but
+ Because the two alternatives are inside a (?| group, both sets of cap-
+ turing parentheses are numbered one. Thus, when the pattern matches,
+ you can look at captured substring number one, whichever alternative
+ matched. This construct is useful when you want to capture part, but
not all, of one of a number of alternatives. Inside a (?| group, paren-
- theses are numbered as usual, but the number is reset at the start of
- each branch. The numbers of any capturing buffers that follow the sub-
- pattern start after the highest number used in any branch. The follow-
- ing example is taken from the Perl documentation. The numbers under-
+ theses are numbered as usual, but the number is reset at the start of
+ each branch. The numbers of any capturing buffers that follow the sub-
+ pattern start after the highest number used in any branch. The follow-
+ ing example is taken from the Perl documentation. The numbers under-
neath show in which buffer the captured content will be stored.
# before ---------------branch-reset----------- after
/ ( a ) (?| x ( y ) z | (p (q) r) | (t) u (v) ) ( z ) /x
# 1 2 2 3 2 3 4
- A backreference or a recursive call to a numbered subpattern always
+ A backreference or a recursive call to a numbered subpattern always
refers to the first one in the pattern with the given number.
- An alternative approach to using this "branch reset" feature is to use
+ An alternative approach to using this "branch reset" feature is to use
duplicate named subpatterns, as described in the next section.
NAMED SUBPATTERNS
- Identifying capturing parentheses by number is simple, but it can be
- very hard to keep track of the numbers in complicated regular expres-
- sions. Furthermore, if an expression is modified, the numbers may
- change. To help with this difficulty, PCRE supports the naming of sub-
+ Identifying capturing parentheses by number is simple, but it can be
+ very hard to keep track of the numbers in complicated regular expres-
+ sions. Furthermore, if an expression is modified, the numbers may
+ change. To help with this difficulty, PCRE supports the naming of sub-
patterns. This feature was not added to Perl until release 5.10. Python
- had the feature earlier, and PCRE introduced it at release 4.0, using
- the Python syntax. PCRE now supports both the Perl and the Python syn-
+ had the feature earlier, and PCRE introduced it at release 4.0, using
+ the Python syntax. PCRE now supports both the Perl and the Python syn-
tax.
- In PCRE, a subpattern can be named in one of three ways: (?<name>...)
- or (?'name'...) as in Perl, or (?P<name>...) as in Python. References
+ In PCRE, a subpattern can be named in one of three ways: (?<name>...)
+ or (?'name'...) as in Perl, or (?P<name>...) as in Python. References
to capturing parentheses from other parts of the pattern, such as back-
- references, recursion, and conditions, can be made by name as well as
+ references, recursion, and conditions, can be made by name as well as
by number.
- Names consist of up to 32 alphanumeric characters and underscores.
- Named capturing parentheses are still allocated numbers as well as
- names, exactly as if the names were not present. The PCRE API provides
+ Names consist of up to 32 alphanumeric characters and underscores.
+ Named capturing parentheses are still allocated numbers as well as
+ names, exactly as if the names were not present. The PCRE API provides
function calls for extracting the name-to-number translation table from
a compiled pattern. There is also a convenience function for extracting
a captured substring by name.
- By default, a name must be unique within a pattern, but it is possible
+ By default, a name must be unique within a pattern, but it is possible
to relax this constraint by setting the PCRE_DUPNAMES option at compile
- time. This can be useful for patterns where only one instance of the
- named parentheses can match. Suppose you want to match the name of a
- weekday, either as a 3-letter abbreviation or as the full name, and in
+ time. This can be useful for patterns where only one instance of the
+ named parentheses can match. Suppose you want to match the name of a
+ weekday, either as a 3-letter abbreviation or as the full name, and in
both cases you want to extract the abbreviation. This pattern (ignoring
the line breaks) does the job:
@@ -3898,22 +3956,22 @@ NAMED SUBPATTERNS
(?<DN>Thu)(?:rsday)?|
(?<DN>Sat)(?:urday)?
- There are five capturing substrings, but only one is ever set after a
+ There are five capturing substrings, but only one is ever set after a
match. (An alternative way of solving this problem is to use a "branch
reset" subpattern, as described in the previous section.)
- The convenience function for extracting the data by name returns the
- substring for the first (and in this example, the only) subpattern of
- that name that matched. This saves searching to find which numbered
- subpattern it was. If you make a reference to a non-unique named sub-
- pattern from elsewhere in the pattern, the one that corresponds to the
- lowest number is used. For further details of the interfaces for han-
+ The convenience function for extracting the data by name returns the
+ substring for the first (and in this example, the only) subpattern of
+ that name that matched. This saves searching to find which numbered
+ subpattern it was. If you make a reference to a non-unique named sub-
+ pattern from elsewhere in the pattern, the one that corresponds to the
+ lowest number is used. For further details of the interfaces for han-
dling named subpatterns, see the pcreapi documentation.
REPETITION
- Repetition is specified by quantifiers, which can follow any of the
+ Repetition is specified by quantifiers, which can follow any of the
following items:
a literal data character
@@ -3926,17 +3984,17 @@ REPETITION
a back reference (see next section)
a parenthesized subpattern (unless it is an assertion)
- The general repetition quantifier specifies a minimum and maximum num-
- ber of permitted matches, by giving the two numbers in curly brackets
- (braces), separated by a comma. The numbers must be less than 65536,
+ The general repetition quantifier specifies a minimum and maximum num-
+ ber of permitted matches, by giving the two numbers in curly brackets
+ (braces), separated by a comma. The numbers must be less than 65536,
and the first must be less than or equal to the second. For example:
z{2,4}
- matches "zz", "zzz", or "zzzz". A closing brace on its own is not a
- special character. If the second number is omitted, but the comma is
- present, there is no upper limit; if the second number and the comma
- are both omitted, the quantifier specifies an exact number of required
+ matches "zz", "zzz", or "zzzz". A closing brace on its own is not a
+ special character. If the second number is omitted, but the comma is
+ present, there is no upper limit; if the second number and the comma
+ are both omitted, the quantifier specifies an exact number of required
matches. Thus
[aeiou]{3,}
@@ -3945,20 +4003,23 @@ REPETITION
\d{8}
- matches exactly 8 digits. An opening curly bracket that appears in a
- position where a quantifier is not allowed, or one that does not match
- the syntax of a quantifier, is taken as a literal character. For exam-
+ matches exactly 8 digits. An opening curly bracket that appears in a
+ position where a quantifier is not allowed, or one that does not match
+ the syntax of a quantifier, is taken as a literal character. For exam-
ple, {,6} is not a quantifier, but a literal string of four characters.
- In UTF-8 mode, quantifiers apply to UTF-8 characters rather than to
+ In UTF-8 mode, quantifiers apply to UTF-8 characters rather than to
individual bytes. Thus, for example, \x{100}{2} matches two UTF-8 char-
acters, each of which is represented by a two-byte sequence. Similarly,
when Unicode property support is available, \X{3} matches three Unicode
- extended sequences, each of which may be several bytes long (and they
+ extended sequences, each of which may be several bytes long (and they
may be of different lengths).
The quantifier {0} is permitted, causing the expression to behave as if
- the previous item and the quantifier were not present.
+ the previous item and the quantifier were not present. This may be use-
+ ful for subpatterns that are referenced as subroutines from elsewhere
+ in the pattern. Items other than subpatterns that have a {0} quantifier
+ are omitted from the compiled pattern.
For convenience, the three most common quantifiers have single-charac-
ter abbreviations:
@@ -4736,54 +4797,76 @@ SUBPATTERNS AS SUBROUTINES
processing option does not affect the called subpattern.
+ONIGURUMA SUBROUTINE SYNTAX
+
+ For compatibility with Oniguruma, the non-Perl syntax \g followed by a
+ name or a number enclosed either in angle brackets or single quotes, is
+ an alternative syntax for referencing a subpattern as a subroutine,
+ possibly recursively. Here are two of the examples used above, rewrit-
+ ten using this syntax:
+
+ (?<pn> \( ( (?>[^()]+) | \g<pn> )* \) )
+ (sens|respons)e and \g'1'ibility
+
+ PCRE supports an extension to Oniguruma: if a number is preceded by a
+ plus or a minus sign it is taken as a relative reference. For example:
+
+ (abc)(?i:\g<-1>)
+
+ Note that \g{...} (Perl syntax) and \g<...> (Oniguruma syntax) are not
+ synonymous. The former is a back reference; the latter is a subroutine
+ call.
+
+
CALLOUTS
Perl has a feature whereby using the sequence (?{...}) causes arbitrary
- Perl code to be obeyed in the middle of matching a regular expression.
+ Perl code to be obeyed in the middle of matching a regular expression.
This makes it possible, amongst other things, to extract different sub-
strings that match the same pair of parentheses when there is a repeti-
tion.
PCRE provides a similar feature, but of course it cannot obey arbitrary
Perl code. The feature is called "callout". The caller of PCRE provides
- an external function by putting its entry point in the global variable
- pcre_callout. By default, this variable contains NULL, which disables
+ an external function by putting its entry point in the global variable
+ pcre_callout. By default, this variable contains NULL, which disables
all calling out.
- Within a regular expression, (?C) indicates the points at which the
- external function is to be called. If you want to identify different
- callout points, you can put a number less than 256 after the letter C.
- The default value is zero. For example, this pattern has two callout
+ Within a regular expression, (?C) indicates the points at which the
+ external function is to be called. If you want to identify different
+ callout points, you can put a number less than 256 after the letter C.
+ The default value is zero. For example, this pattern has two callout
points:
(?C1)abc(?C2)def
If the PCRE_AUTO_CALLOUT flag is passed to pcre_compile(), callouts are
- automatically installed before each item in the pattern. They are all
+ automatically installed before each item in the pattern. They are all
numbered 255.
During matching, when PCRE reaches a callout point (and pcre_callout is
- set), the external function is called. It is provided with the number
- of the callout, the position in the pattern, and, optionally, one item
- of data originally supplied by the caller of pcre_exec(). The callout
- function may cause matching to proceed, to backtrack, or to fail alto-
+ set), the external function is called. It is provided with the number
+ of the callout, the position in the pattern, and, optionally, one item
+ of data originally supplied by the caller of pcre_exec(). The callout
+ function may cause matching to proceed, to backtrack, or to fail alto-
gether. A complete description of the interface to the callout function
is given in the pcrecallout documentation.
BACKTRACKING CONTROL
- Perl 5.10 introduced a number of "Special Backtracking Control Verbs",
+ Perl 5.10 introduced a number of "Special Backtracking Control Verbs",
which are described in the Perl documentation as "experimental and sub-
- ject to change or removal in a future version of Perl". It goes on to
- say: "Their usage in production code should be noted to avoid problems
+ ject to change or removal in a future version of Perl". It goes on to
+ say: "Their usage in production code should be noted to avoid problems
during upgrades." The same remarks apply to the PCRE features described
in this section.
- Since these verbs are specifically related to backtracking, they can be
- used only when the pattern is to be matched using pcre_exec(), which
- uses a backtracking algorithm. They cause an error if encountered by
- pcre_dfa_exec().
+ Since these verbs are specifically related to backtracking, most of
+ them can be used only when the pattern is to be matched using
+ pcre_exec(), which uses a backtracking algorithm. With the exception of
+ (*FAIL), which behaves like a failing negative assertion, they cause an
+ error if encountered by pcre_dfa_exec().
The new verbs make use of what was previously invalid syntax: an open-
ing parenthesis followed by an asterisk. In Perl, they are generally of
@@ -4902,8 +4985,8 @@ AUTHOR
REVISION
- Last updated: 17 September 2007
- Copyright (c) 1997-2007 University of Cambridge.
+ Last updated: 19 April 2008
+ Copyright (c) 1997-2008 University of Cambridge.
------------------------------------------------------------------------------
@@ -5161,6 +5244,14 @@ SUBROUTINE REFERENCES (POSSIBLY RECURSIVE)
(?-n) call subpattern by relative number
(?&name) call subpattern by name (Perl)
(?P>name) call subpattern by name (Python)
+ \g<name> call subpattern by name (Oniguruma)
+ \g'name' call subpattern by name (Oniguruma)
+ \g<n> call subpattern by absolute number (Oniguruma)
+ \g'n' call subpattern by absolute number (Oniguruma)
+ \g<+n> call subpattern by relative number (PCRE extension)
+ \g'+n' call subpattern by relative number (PCRE extension)
+ \g<-n> call subpattern by relative number (PCRE extension)
+ \g'-n' call subpattern by relative number (PCRE extension)
CONDITIONAL PATTERNS
@@ -5240,8 +5331,8 @@ AUTHOR
REVISION
- Last updated: 14 November 2007
- Copyright (c) 1997-2007 University of Cambridge.
+ Last updated: 09 April 2008
+ Copyright (c) 1997-2008 University of Cambridge.
------------------------------------------------------------------------------
@@ -5896,8 +5987,9 @@ MATCHING NEWLINE CHARACTERS
MATCHING A PATTERN
The function regexec() is called to match a compiled pattern preg
- against a given string, which is terminated by a zero byte, subject to
- the options in eflags. These can be:
+ against a given string, which is by default terminated by a zero byte
+ (but see REG_STARTEND below), subject to the options in eflags. These
+ can be:
REG_NOTBOL
@@ -5909,6 +6001,17 @@ MATCHING A PATTERN
The PCRE_NOTEOL option is set when calling the underlying PCRE matching
function.
+ REG_STARTEND
+
+ The string is considered to start at string + pmatch[0].rm_so and to
+ have a terminating NUL located at string + pmatch[0].rm_eo (there need
+ not actually be a NUL at that location), regardless of the value of
+ nmatch. This is a BSD extension, compatible with but not specified by
+ IEEE Standard 1003.2 (POSIX.2), and should be used with caution in
+ software intended to be portable to other systems. Note that a non-zero
+ rm_so does not imply REG_NOTBOL; REG_STARTEND affects only the location
+ of the string, not how it is matched.
+
If the pattern was compiled with the REG_NOSUB flag, no data about any
matched strings is returned. The nmatch and pmatch arguments of
regexec() are ignored.
@@ -5955,8 +6058,8 @@ AUTHOR
REVISION
- Last updated: 06 March 2007
- Copyright (c) 1997-2007 University of Cambridge.
+ Last updated: 05 April 2008
+ Copyright (c) 1997-2008 University of Cambridge.
------------------------------------------------------------------------------
@@ -6437,6 +6540,8 @@ PCRE DISCUSSION OF STACK USAGE
ing long subject strings is to write repeated parenthesized subpatterns
to match more than one character whenever possible.
+ Compiling PCRE to use heap instead of stack
+
In environments where stack memory is constrained, you might want to
compile PCRE to use heap memory instead of stack for remembering back-
up points. This makes it run a lot more slowly, however. Details of how
@@ -6449,6 +6554,24 @@ PCRE DISCUSSION OF STACK USAGE
freed in reverse order, it may be possible to implement customized mem-
ory handlers that are more efficient than the standard functions.
+ Limiting PCRE's stack usage
+
+ PCRE has an internal counter that can be used to limit the depth of
+ recursion, and thus cause pcre_exec() to give an error code before it
+ runs out of stack. By default, the limit is very large, and unlikely
+ ever to operate. It can be changed when PCRE is built, and it can also
+ be set when pcre_exec() is called. For details of these interfaces, see
+ the pcrebuild and pcreapi documentation.
+
+ As a very rough rule of thumb, you should reckon on about 500 bytes per
+ recursion. Thus, if you want to limit your stack usage to 8Mb, you
+ should set the limit at 16000 recursions. A 64Mb stack, on the other
+ hand, can support around 128000 recursions. The pcretest test program
+ has a command line option (-S) that can be used to increase the size of
+ its stack.
+
+ Changing stack size in Unix-like systems
+
In Unix-like environments, there is not often a problem with the stack
unless very long strings are involved, though the default limit on
stack size varies from system to system. Values from 8Mb to 64Mb are
@@ -6469,19 +6592,12 @@ PCRE DISCUSSION OF STACK USAGE
attempts to increase the soft limit to 100Mb using setrlimit(). You
must do this before calling pcre_exec().
- PCRE has an internal counter that can be used to limit the depth of
- recursion, and thus cause pcre_exec() to give an error code before it
- runs out of stack. By default, the limit is very large, and unlikely
- ever to operate. It can be changed when PCRE is built, and it can also
- be set when pcre_exec() is called. For details of these interfaces, see
- the pcrebuild and pcreapi documentation.
+ Changing stack size in Mac OS X
- As a very rough rule of thumb, you should reckon on about 500 bytes per
- recursion. Thus, if you want to limit your stack usage to 8Mb, you
- should set the limit at 16000 recursions. A 64Mb stack, on the other
- hand, can support around 128000 recursions. The pcretest test program
- has a command line option (-S) that can be used to increase the size of
- its stack.
+ Using setrlimit(), as described above, should also work on Mac OS X. It
+ is also possible to set a stack size when linking a program. There is a
+ discussion about stack sizes in Mac OS X at this web site:
+ http://developer.apple.com/qa/qa2005/qa1419.html.
AUTHOR
@@ -6493,8 +6609,8 @@ AUTHOR
REVISION
- Last updated: 05 June 2007
- Copyright (c) 1997-2007 University of Cambridge.
+ Last updated: 09 July 2008
+ Copyright (c) 1997-2008 University of Cambridge.
------------------------------------------------------------------------------
diff --git a/ext/pcre/pcrelib/pcre.h b/ext/pcre/pcrelib/pcre.h
index c85c32ea3..efd105a40 100644
--- a/ext/pcre/pcrelib/pcre.h
+++ b/ext/pcre/pcrelib/pcre.h
@@ -5,7 +5,7 @@
/* This is the public header file for the PCRE library, to be #included by
applications that call the PCRE functions.
- Copyright (c) 1997-2008 University of Cambridge
+ Copyright (c) 1997-2009 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -42,9 +42,9 @@ POSSIBILITY OF SUCH DAMAGE.
/* The current PCRE version information. */
#define PCRE_MAJOR 7
-#define PCRE_MINOR 6
+#define PCRE_MINOR 8
#define PCRE_PRERELEASE
-#define PCRE_DATE 2008-01-28
+#define PCRE_DATE 2008-09-05
/* When an application links to a PCRE DLL in Windows, the symbols that are
imported have to be identified as such. When building PCRE, the appropriate
@@ -124,6 +124,7 @@ extern "C" {
#define PCRE_NEWLINE_ANYCRLF 0x00500000
#define PCRE_BSR_ANYCRLF 0x00800000
#define PCRE_BSR_UNICODE 0x01000000
+#define PCRE_JAVASCRIPT_COMPAT 0x02000000
/* Exec-time and get/set-time error codes */
diff --git a/ext/pcre/pcrelib/pcre_compile.c b/ext/pcre/pcrelib/pcre_compile.c
index 07b6369d6..b079d1962 100644
--- a/ext/pcre/pcrelib/pcre_compile.c
+++ b/ext/pcre/pcrelib/pcre_compile.c
@@ -6,7 +6,7 @@
and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
- Copyright (c) 1997-2008 University of Cambridge
+ Copyright (c) 1997-2009 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -156,7 +156,7 @@ static const char verbnames[] =
"SKIP\0"
"THEN";
-static verbitem verbs[] = {
+static const verbitem verbs[] = {
{ 6, OP_ACCEPT },
{ 6, OP_COMMIT },
{ 1, OP_FAIL },
@@ -166,7 +166,7 @@ static verbitem verbs[] = {
{ 4, OP_THEN }
};
-static int verbcount = sizeof(verbs)/sizeof(verbitem);
+static const int verbcount = sizeof(verbs)/sizeof(verbitem);
/* Tables of names of POSIX character classes and their lengths. The names are
@@ -293,14 +293,15 @@ static const char error_texts[] =
/* 55 */
"repeating a DEFINE group is not allowed\0"
"inconsistent NEWLINE options\0"
- "\\g is not followed by a braced name or an optionally braced non-zero number\0"
- "(?+ or (?- or (?(+ or (?(- must be followed by a non-zero number\0"
+ "\\g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number\0"
+ "a numbered reference must not be zero\0"
"(*VERB) with an argument is not supported\0"
/* 60 */
"(*VERB) not recognized\0"
"number is too big\0"
"subpattern name expected\0"
- "digit expected after (?+";
+ "digit expected after (?+\0"
+ "] is an invalid data character in JavaScript compatibility mode";
/* Table to identify digits and hex digits. This is used when compiling
@@ -452,7 +453,7 @@ static const char *
find_error_text(int n)
{
const char *s = error_texts;
-for (; n > 0; n--) while (*s++ != 0);
+for (; n > 0; n--) while (*s++ != 0) {};
return s;
}
@@ -529,14 +530,31 @@ else
*errorcodeptr = ERR37;
break;
- /* \g must be followed by a number, either plain or braced. If positive, it
- is an absolute backreference. If negative, it is a relative backreference.
- This is a Perl 5.10 feature. Perl 5.10 also supports \g{name} as a
- reference to a named group. This is part of Perl's movement towards a
- unified syntax for back references. As this is synonymous with \k{name}, we
- fudge it up by pretending it really was \k. */
+ /* \g must be followed by one of a number of specific things:
+
+ (1) A number, either plain or braced. If positive, it is an absolute
+ backreference. If negative, it is a relative backreference. This is a Perl
+ 5.10 feature.
+
+ (2) Perl 5.10 also supports \g{name} as a reference to a named group. This
+ is part of Perl's movement towards a unified syntax for back references. As
+ this is synonymous with \k{name}, we fudge it up by pretending it really
+ was \k.
+
+ (3) For Oniguruma compatibility we also support \g followed by a name or a
+ number either in angle brackets or in single quotes. However, these are
+ (possibly recursive) subroutine calls, _not_ backreferences. Just return
+ the -ESC_g code (cf \k). */
case 'g':
+ if (ptr[1] == '<' || ptr[1] == '\'')
+ {
+ c = -ESC_g;
+ break;
+ }
+
+ /* Handle the Perl-compatible cases */
+
if (ptr[1] == '{')
{
const uschar *p;
@@ -563,18 +581,24 @@ else
while ((digitab[ptr[1]] & ctype_digit) != 0)
c = c * 10 + *(++ptr) - '0';
- if (c < 0)
+ if (c < 0) /* Integer overflow */
{
*errorcodeptr = ERR61;
break;
}
- if (c == 0 || (braced && *(++ptr) != '}'))
+ if (braced && *(++ptr) != '}')
{
*errorcodeptr = ERR57;
break;
}
+ if (c == 0)
+ {
+ *errorcodeptr = ERR58;
+ break;
+ }
+
if (negated)
{
if (c > bracount)
@@ -609,7 +633,7 @@ else
c -= '0';
while ((digitab[ptr[1]] & ctype_digit) != 0)
c = c * 10 + *(++ptr) - '0';
- if (c < 0)
+ if (c < 0) /* Integer overflow */
{
*errorcodeptr = ERR61;
break;
@@ -950,7 +974,7 @@ be terminated by '>' because that is checked in the first pass.
Arguments:
ptr current position in the pattern
- count current count of capturing parens so far encountered
+ cd compile background data
name name to seek, or NULL if seeking a numbered subpattern
lorn name length, or subpattern number if name is NULL
xmode TRUE if we are in /x mode
@@ -959,10 +983,11 @@ Returns: the number of the named subpattern, or -1 if not found
*/
static int
-find_parens(const uschar *ptr, int count, const uschar *name, int lorn,
+find_parens(const uschar *ptr, compile_data *cd, const uschar *name, int lorn,
BOOL xmode)
{
const uschar *thisname;
+int count = cd->bracount;
for (; *ptr != 0; ptr++)
{
@@ -975,17 +1000,41 @@ for (; *ptr != 0; ptr++)
if (*(++ptr) == 0) return -1;
if (*ptr == 'Q') for (;;)
{
- while (*(++ptr) != 0 && *ptr != '\\');
+ while (*(++ptr) != 0 && *ptr != '\\') {};
if (*ptr == 0) return -1;
if (*(++ptr) == 'E') break;
}
continue;
}
- /* Skip over character classes */
+ /* Skip over character classes; this logic must be similar to the way they
+ are handled for real. If the first character is '^', skip it. Also, if the
+ first few characters (either before or after ^) are \Q\E or \E we skip them
+ too. This makes for compatibility with Perl. */
if (*ptr == '[')
{
+ BOOL negate_class = FALSE;
+ for (;;)
+ {
+ int c = *(++ptr);
+ if (c == '\\')
+ {
+ if (ptr[1] == 'E') ptr++;
+ else if (strncmp((const char *)ptr+1, "Q\\E", 3) == 0) ptr += 3;
+ else break;
+ }
+ else if (!negate_class && c == '^')
+ negate_class = TRUE;
+ else break;
+ }
+
+ /* If the next character is ']', it is a data character that must be
+ skipped, except in JavaScript compatibility mode. */
+
+ if (ptr[1] == ']' && (cd->external_options & PCRE_JAVASCRIPT_COMPAT) == 0)
+ ptr++;
+
while (*(++ptr) != ']')
{
if (*ptr == 0) return -1;
@@ -994,7 +1043,7 @@ for (; *ptr != 0; ptr++)
if (*(++ptr) == 0) return -1;
if (*ptr == 'Q') for (;;)
{
- while (*(++ptr) != 0 && *ptr != '\\');
+ while (*(++ptr) != 0 && *ptr != '\\') {};
if (*ptr == 0) return -1;
if (*(++ptr) == 'E') break;
}
@@ -1008,7 +1057,7 @@ for (; *ptr != 0; ptr++)
if (xmode && *ptr == '#')
{
- while (*(++ptr) != 0 && *ptr != '\n');
+ while (*(++ptr) != 0 && *ptr != '\n') {};
if (*ptr == 0) return -1;
continue;
}
@@ -1250,6 +1299,7 @@ for (;;)
case OP_NOT_WORDCHAR:
case OP_WORDCHAR:
case OP_ANY:
+ case OP_ALLANY:
branchlength++;
cc++;
break;
@@ -1398,6 +1448,8 @@ for (;;)
if (code[-1] >= 0xc0) code += _pcre_utf8_table4[code[-1] & 0x3f];
break;
}
+#else
+ (void)(utf8); /* Keep compiler happy by referencing function argument */
#endif
}
}
@@ -1491,6 +1543,8 @@ for (;;)
if (code[-1] >= 0xc0) code += _pcre_utf8_table4[code[-1] & 0x3f];
break;
}
+#else
+ (void)(utf8); /* Keep compiler happy by referencing function argument */
#endif
}
}
@@ -1542,7 +1596,7 @@ for (code = first_significant_code(code + _pcre_OP_lengths[*code], NULL, 0, TRUE
/* Groups with zero repeats can of course be empty; skip them. */
- if (c == OP_BRAZERO || c == OP_BRAMINZERO)
+ if (c == OP_BRAZERO || c == OP_BRAMINZERO || c == OP_SKIPZERO)
{
code += _pcre_OP_lengths[c];
do code += GET(code, 1); while (*code == OP_ALT);
@@ -1628,6 +1682,7 @@ for (code = first_significant_code(code + _pcre_OP_lengths[*code], NULL, 0, TRUE
case OP_NOT_WORDCHAR:
case OP_WORDCHAR:
case OP_ANY:
+ case OP_ALLANY:
case OP_ANYBYTE:
case OP_CHAR:
case OP_CHARNC:
@@ -1822,11 +1877,12 @@ return -1;
that is referenced. This means that groups can be replicated for fixed
repetition simply by copying (because the recursion is allowed to refer to
earlier groups that are outside the current group). However, when a group is
-optional (i.e. the minimum quantifier is zero), OP_BRAZERO is inserted before
-it, after it has been compiled. This means that any OP_RECURSE items within it
-that refer to the group itself or any contained groups have to have their
-offsets adjusted. That one of the jobs of this function. Before it is called,
-the partially compiled regex must be temporarily terminated with OP_END.
+optional (i.e. the minimum quantifier is zero), OP_BRAZERO or OP_SKIPZERO is
+inserted before it, after it has been compiled. This means that any OP_RECURSE
+items within it that refer to the group itself or any contained groups have to
+have their offsets adjusted. That one of the jobs of this function. Before it
+is called, the partially compiled regex must be temporarily terminated with
+OP_END.
This function has been extended with the possibility of forward references for
recursions and subroutine calls. It must also check the list of such references
@@ -1961,7 +2017,7 @@ get_othercase_range(unsigned int *cptr, unsigned int d, unsigned int *ocptr,
unsigned int c, othercase, next;
for (c = *cptr; c <= d; c++)
- { if ((othercase = _pcre_ucp_othercase(c)) != NOTACHAR) break; }
+ { if ((othercase = UCD_OTHERCASE(c)) != c) break; }
if (c > d) return FALSE;
@@ -1970,7 +2026,7 @@ next = othercase + 1;
for (++c; c <= d; c++)
{
- if (_pcre_ucp_othercase(c) != next) break;
+ if (UCD_OTHERCASE(c) != next) break;
next++;
}
@@ -2080,6 +2136,8 @@ if (next >= 0) switch(op_code)
case OP_CHAR:
#ifdef SUPPORT_UTF8
if (utf8 && item > 127) { GETCHAR(item, utf8_char); }
+#else
+ (void)(utf8_char); /* Keep compiler happy by referencing function argument */
#endif
return item != next;
@@ -2098,7 +2156,7 @@ if (next >= 0) switch(op_code)
unsigned int othercase;
if (next < 128) othercase = cd->fcc[next]; else
#ifdef SUPPORT_UCP
- othercase = _pcre_ucp_othercase((unsigned int)next);
+ othercase = UCD_OTHERCASE((unsigned int)next);
#else
othercase = NOTACHAR;
#endif
@@ -2111,7 +2169,6 @@ if (next >= 0) switch(op_code)
/* For OP_NOT, "item" must be a single-byte character. */
case OP_NOT:
- if (next < 0) return FALSE; /* Not a character */
if (item == next) return TRUE;
if ((options & PCRE_CASELESS) == 0) return FALSE;
#ifdef SUPPORT_UTF8
@@ -2120,7 +2177,7 @@ if (next >= 0) switch(op_code)
unsigned int othercase;
if (next < 128) othercase = cd->fcc[next]; else
#ifdef SUPPORT_UCP
- othercase = _pcre_ucp_othercase(next);
+ othercase = UCD_OTHERCASE(next);
#else
othercase = NOTACHAR;
#endif
@@ -2614,7 +2671,7 @@ for (;; ptr++)
zerofirstbyte = firstbyte;
zeroreqbyte = reqbyte;
previous = code;
- *code++ = OP_ANY;
+ *code++ = ((options & PCRE_DOTALL) != 0)? OP_ALLANY: OP_ANY;
break;
@@ -2629,7 +2686,17 @@ for (;; ptr++)
opcode is compiled. It may optionally have a bit map for characters < 256,
but those above are are explicitly listed afterwards. A flag byte tells
whether the bitmap is present, and whether this is a negated class or not.
- */
+
+ In JavaScript compatibility mode, an isolated ']' causes an error. In
+ default (Perl) mode, it is treated as a data character. */
+
+ case ']':
+ if ((cd->external_options & PCRE_JAVASCRIPT_COMPAT) != 0)
+ {
+ *errorcodeptr = ERR64;
+ goto FAILED;
+ }
+ goto NORMAL_CHAR;
case '[':
previous = code;
@@ -2663,6 +2730,19 @@ for (;; ptr++)
else break;
}
+ /* Empty classes are allowed in JavaScript compatibility mode. Otherwise,
+ an initial ']' is taken as a data character -- the code below handles
+ that. In JS mode, [] must always fail, so generate OP_FAIL, whereas
+ [^] must match any character, so generate OP_ALLANY. */
+
+ if (c ==']' && (cd->external_options & PCRE_JAVASCRIPT_COMPAT) != 0)
+ {
+ *code++ = negate_class? OP_ALLANY : OP_FAIL;
+ if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
+ zerofirstbyte = firstbyte;
+ break;
+ }
+
/* If a class contains a negative special such as \S, we need to flip the
negation flag at the end, so that support for characters > 255 works
correctly (they are all included in the class). */
@@ -3263,7 +3343,7 @@ for (;; ptr++)
if ((options & PCRE_CASELESS) != 0)
{
unsigned int othercase;
- if ((othercase = _pcre_ucp_othercase(c)) != NOTACHAR)
+ if ((othercase = UCD_OTHERCASE(c)) != c)
{
*class_utf8data++ = XCL_SINGLE;
class_utf8data += _pcre_ord2utf8(othercase, class_utf8data);
@@ -3818,28 +3898,38 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
if (repeat_min == 0)
{
- /* If the maximum is also zero, we just omit the group from the output
- altogether. */
-
- if (repeat_max == 0)
- {
- code = previous;
- goto END_REPEAT;
- }
-
- /* If the maximum is 1 or unlimited, we just have to stick in the
- BRAZERO and do no more at this point. However, we do need to adjust
- any OP_RECURSE calls inside the group that refer to the group itself or
- any internal or forward referenced group, because the offset is from
- the start of the whole regex. Temporarily terminate the pattern while
- doing this. */
-
- if (repeat_max <= 1)
+ /* If the maximum is also zero, we used to just omit the group from the
+ output altogether, like this:
+
+ ** if (repeat_max == 0)
+ ** {
+ ** code = previous;
+ ** goto END_REPEAT;
+ ** }
+
+ However, that fails when a group is referenced as a subroutine from
+ elsewhere in the pattern, so now we stick in OP_SKIPZERO in front of it
+ so that it is skipped on execution. As we don't have a list of which
+ groups are referenced, we cannot do this selectively.
+
+ If the maximum is 1 or unlimited, we just have to stick in the BRAZERO
+ and do no more at this point. However, we do need to adjust any
+ OP_RECURSE calls inside the group that refer to the group itself or any
+ internal or forward referenced group, because the offset is from the
+ start of the whole regex. Temporarily terminate the pattern while doing
+ this. */
+
+ if (repeat_max <= 1) /* Covers 0, 1, and unlimited */
{
*code = OP_END;
adjust_recurse(previous, 1, utf8, cd, save_hwm);
memmove(previous+1, previous, len);
code++;
+ if (repeat_max == 0)
+ {
+ *previous++ = OP_SKIPZERO;
+ goto END_REPEAT;
+ }
*previous++ = OP_BRAZERO + repeat_type;
}
@@ -4034,6 +4124,13 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
}
}
+ /* If previous is OP_FAIL, it was generated by an empty class [] in
+ JavaScript mode. The other ways in which OP_FAIL can be generated, that is
+ by (*FAIL) or (?!) set previous to NULL, which gives a "nothing to repeat"
+ error above. We can just ignore the repeat in JS case. */
+
+ else if (*previous == OP_FAIL) goto END_REPEAT;
+
/* Else there's some kind of shambles */
else
@@ -4123,7 +4220,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
const char *vn = verbnames;
const uschar *name = ++ptr;
previous = NULL;
- while ((cd->ctypes[*++ptr] & ctype_letter) != 0);
+ while ((cd->ctypes[*++ptr] & ctype_letter) != 0) {};
if (*ptr == ':')
{
*errorcodeptr = ERR59; /* Not supported */
@@ -4320,7 +4417,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
/* Search the pattern for a forward reference */
- else if ((i = find_parens(ptr, cd->bracount, name, namelen,
+ else if ((i = find_parens(ptr, cd, name, namelen,
(options & PCRE_EXTENDED) != 0)) > 0)
{
PUT2(code, 2+LINK_SIZE, i);
@@ -4566,7 +4663,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
references (?P=name) and recursion (?P>name), as well as falling
through from the Perl recursion syntax (?&name). We also come here from
the Perl \k<name> or \k'name' back reference syntax and the \k{name}
- .NET syntax. */
+ .NET syntax, and the Oniguruma \g<...> and \g'...' subroutine syntax. */
NAMED_REF_OR_RECURSE:
name = ++ptr;
@@ -4617,7 +4714,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
recno = GET2(slot, 0);
}
else if ((recno = /* Forward back reference */
- find_parens(ptr, cd->bracount, name, namelen,
+ find_parens(ptr, cd, name, namelen,
(options & PCRE_EXTENDED) != 0)) <= 0)
{
*errorcodeptr = ERR15;
@@ -4644,6 +4741,15 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
case '5': case '6': case '7': case '8': case '9': /* subroutine */
{
const uschar *called;
+ terminator = ')';
+
+ /* Come here from the \g<...> and \g'...' code (Oniguruma
+ compatibility). However, the syntax has been checked to ensure that
+ the ... are a (signed) number, so that neither ERR63 nor ERR29 will
+ be called on this path, nor with the jump to OTHER_CHAR_AFTER_QUERY
+ ever be taken. */
+
+ HANDLE_NUMERICAL_RECURSION:
if ((refsign = *ptr) == '+')
{
@@ -4665,7 +4771,7 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
while((digitab[*ptr] & ctype_digit) != 0)
recno = recno * 10 + *ptr++ - '0';
- if (*ptr != ')')
+ if (*ptr != terminator)
{
*errorcodeptr = ERR29;
goto FAILED;
@@ -4718,8 +4824,8 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
if (called == NULL)
{
- if (find_parens(ptr, cd->bracount, NULL, recno,
- (options & PCRE_EXTENDED) != 0) < 0)
+ if (find_parens(ptr, cd, NULL, recno,
+ (options & PCRE_EXTENDED) != 0) < 0)
{
*errorcodeptr = ERR15;
goto FAILED;
@@ -4818,10 +4924,8 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
both phases.
If we are not at the pattern start, compile code to change the ims
- options if this setting actually changes any of them. We also pass the
- new setting back so that it can be put at the start of any following
- branches, and when this group ends (if we are in a group), a resetting
- item can be compiled. */
+ options if this setting actually changes any of them, and reset the
+ greedy defaults and the case value for firstbyte and reqbyte. */
if (*ptr == ')')
{
@@ -4829,7 +4933,6 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
(lengthptr == NULL || *lengthptr == 2 + 2*LINK_SIZE))
{
cd->external_options = newoptions;
- options = newoptions;
}
else
{
@@ -4838,17 +4941,17 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
*code++ = OP_OPT;
*code++ = newoptions & PCRE_IMS;
}
-
- /* Change options at this level, and pass them back for use
- in subsequent branches. Reset the greedy defaults and the case
- value for firstbyte and reqbyte. */
-
- *optionsptr = options = newoptions;
greedy_default = ((newoptions & PCRE_UNGREEDY) != 0);
greedy_non_default = greedy_default ^ 1;
- req_caseopt = ((options & PCRE_CASELESS) != 0)? REQ_CASELESS : 0;
+ req_caseopt = ((newoptions & PCRE_CASELESS) != 0)? REQ_CASELESS : 0;
}
+ /* Change options at this level, and pass them back for use
+ in subsequent branches. When not at the start of the pattern, this
+ information is also necessary so that a resetting item can be
+ compiled at the end of a group (if we are in a group). */
+
+ *optionsptr = options = newoptions;
previous = NULL; /* This item can't be repeated */
continue; /* It is complete */
}
@@ -5089,6 +5192,64 @@ we set the flag only if there is a literal "\r" or "\n" in the class. */
zerofirstbyte = firstbyte;
zeroreqbyte = reqbyte;
+ /* \g<name> or \g'name' is a subroutine call by name and \g<n> or \g'n'
+ is a subroutine call by number (Oniguruma syntax). In fact, the value
+ -ESC_g is returned only for these cases. So we don't need to check for <
+ or ' if the value is -ESC_g. For the Perl syntax \g{n} the value is
+ -ESC_REF+n, and for the Perl syntax \g{name} the result is -ESC_k (as
+ that is a synonym for a named back reference). */
+
+ if (-c == ESC_g)
+ {
+ const uschar *p;
+ save_hwm = cd->hwm; /* Normally this is set when '(' is read */
+ terminator = (*(++ptr) == '<')? '>' : '\'';
+
+ /* These two statements stop the compiler for warning about possibly
+ unset variables caused by the jump to HANDLE_NUMERICAL_RECURSION. In
+ fact, because we actually check for a number below, the paths that
+ would actually be in error are never taken. */
+
+ skipbytes = 0;
+ reset_bracount = FALSE;
+
+ /* Test for a name */
+
+ if (ptr[1] != '+' && ptr[1] != '-')
+ {
+ BOOL isnumber = TRUE;
+ for (p = ptr + 1; *p != 0 && *p != terminator; p++)
+ {
+ if ((cd->ctypes[*p] & ctype_digit) == 0) isnumber = FALSE;
+ if ((cd->ctypes[*p] & ctype_word) == 0) break;
+ }
+ if (*p != terminator)
+ {
+ *errorcodeptr = ERR57;
+ break;
+ }
+ if (isnumber)
+ {
+ ptr++;
+ goto HANDLE_NUMERICAL_RECURSION;
+ }
+ is_recurse = TRUE;
+ goto NAMED_REF_OR_RECURSE;
+ }
+
+ /* Test a signed number in angle brackets or quotes. */
+
+ p = ptr + 2;
+ while ((digitab[*p] & ctype_digit) != 0) p++;
+ if (*p != terminator)
+ {
+ *errorcodeptr = ERR57;
+ break;
+ }
+ ptr++;
+ goto HANDLE_NUMERICAL_RECURSION;
+ }
+
/* \k<name> or \k'name' is a back reference by name (Perl syntax).
We also support \k{name} (.NET syntax) */
@@ -5595,14 +5756,14 @@ do {
if (!is_anchored(scode, options, bracket_map, backref_map)) return FALSE;
}
- /* .* is not anchored unless DOTALL is set and it isn't in brackets that
- are or may be referenced. */
+ /* .* is not anchored unless DOTALL is set (which generates OP_ALLANY) and
+ it isn't in brackets that are or may be referenced. */
else if ((op == OP_TYPESTAR || op == OP_TYPEMINSTAR ||
- op == OP_TYPEPOSSTAR) &&
- (*options & PCRE_DOTALL) != 0)
+ op == OP_TYPEPOSSTAR))
{
- if (scode[1] != OP_ANY || (bracket_map & backref_map) != 0) return FALSE;
+ if (scode[1] != OP_ALLANY || (bracket_map & backref_map) != 0)
+ return FALSE;
}
/* Check for explicit anchoring */
@@ -5784,7 +5945,7 @@ Returns: pointer to compiled data block, or NULL on error,
with errorptr and erroroffset set
*/
-PCRE_EXP_DEFN pcre *
+PCRE_EXP_DEFN pcre * PCRE_CALL_CONVENTION
pcre_compile(const char *pattern, int options, const char **errorptr,
int *erroroffset, const unsigned char *tables)
{
@@ -5792,7 +5953,7 @@ return pcre_compile2(pattern, options, NULL, errorptr, erroroffset, tables);
}
-PCRE_EXP_DEFN pcre *
+PCRE_EXP_DEFN pcre * PCRE_CALL_CONVENTION
pcre_compile2(const char *pattern, int options, int *errorcodeptr,
const char **errorptr, int *erroroffset, const unsigned char *tables)
{
diff --git a/ext/pcre/pcrelib/pcre_config.c b/ext/pcre/pcrelib/pcre_config.c
index 32f9047b0..5796f75d7 100644
--- a/ext/pcre/pcrelib/pcre_config.c
+++ b/ext/pcre/pcrelib/pcre_config.c
@@ -6,7 +6,7 @@
and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
- Copyright (c) 1997-2008 University of Cambridge
+ Copyright (c) 1997-2009 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -60,7 +60,7 @@ Arguments:
Returns: 0 if data returned, negative on error
*/
-PCRE_EXP_DEFN int
+PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
pcre_config(int what, void *where)
{
switch (what)
diff --git a/ext/pcre/pcrelib/pcre_exec.c b/ext/pcre/pcrelib/pcre_exec.c
index 5520d153b..91b504773 100644
--- a/ext/pcre/pcrelib/pcre_exec.c
+++ b/ext/pcre/pcrelib/pcre_exec.c
@@ -6,7 +6,7 @@
and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
- Copyright (c) 1997-2008 University of Cambridge
+ Copyright (c) 1997-2009 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -156,13 +156,39 @@ printf("\n");
if (length > md->end_subject - eptr) return FALSE;
-/* Separate the caselesss case for speed */
+/* Separate the caseless case for speed. In UTF-8 mode we can only do this
+properly if Unicode properties are supported. Otherwise, we can check only
+ASCII characters. */
if ((ims & PCRE_CASELESS) != 0)
{
+#ifdef SUPPORT_UTF8
+#ifdef SUPPORT_UCP
+ if (md->utf8)
+ {
+ USPTR endptr = eptr + length;
+ while (eptr < endptr)
+ {
+ int c, d;
+ GETCHARINC(c, eptr);
+ GETCHARINC(d, p);
+ if (c != d && c != UCD_OTHERCASE(d)) return FALSE;
+ }
+ }
+ else
+#endif
+#endif
+
+ /* The same code works when not in UTF-8 mode and in UTF-8 mode when there
+ is no UCP support. */
+
while (length-- > 0)
- if (md->lcc[*p++] != md->lcc[*eptr++]) return FALSE;
+ { if (md->lcc[*p++] != md->lcc[*eptr++]) return FALSE; }
}
+
+/* In the caseful case, we can just compare the bytes, whether or not we
+are in UTF-8 mode. */
+
else
{ while (length-- > 0) if (*p++ != *eptr++) return FALSE; }
@@ -1146,11 +1172,11 @@ for (;;)
do ecode += GET(ecode,1); while (*ecode == OP_ALT);
break;
- /* BRAZERO and BRAMINZERO occur just before a bracket group, indicating
- that it may occur zero times. It may repeat infinitely, or not at all -
- i.e. it could be ()* or ()? in the pattern. Brackets with fixed upper
- repeat limits are compiled as a number of copies, with the optional ones
- preceded by BRAZERO or BRAMINZERO. */
+ /* BRAZERO, BRAMINZERO and SKIPZERO occur just before a bracket group,
+ indicating that it may occur zero times. It may repeat infinitely, or not
+ at all - i.e. it could be ()* or ()? or even (){0} in the pattern. Brackets
+ with fixed upper repeat limits are compiled as a number of copies, with the
+ optional ones preceded by BRAZERO or BRAMINZERO. */
case OP_BRAZERO:
{
@@ -1172,6 +1198,14 @@ for (;;)
}
break;
+ case OP_SKIPZERO:
+ {
+ next = ecode+1;
+ do next += GET(next,1); while (*next == OP_ALT);
+ ecode = next + 1 + LINK_SIZE;
+ }
+ break;
+
/* End of a group, repeated or non-repeating. */
case OP_KET:
@@ -1419,13 +1453,12 @@ for (;;)
/* Match a single character type; inline for speed */
case OP_ANY:
- if ((ims & PCRE_DOTALL) == 0)
- {
- if (IS_NEWLINE(eptr)) RRETURN(MATCH_NOMATCH);
- }
+ if (IS_NEWLINE(eptr)) RRETURN(MATCH_NOMATCH);
+ /* Fall through */
+
+ case OP_ALLANY:
if (eptr++ >= md->end_subject) RRETURN(MATCH_NOMATCH);
- if (utf8)
- while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
+ if (utf8) while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
ecode++;
break;
@@ -1644,8 +1677,7 @@ for (;;)
if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
GETCHARINCTEST(c, eptr);
{
- int chartype, script;
- int category = _pcre_ucp_findprop(c, &chartype, &script);
+ const ucd_record * prop = GET_UCD(c);
switch(ecode[1])
{
@@ -1654,24 +1686,24 @@ for (;;)
break;
case PT_LAMP:
- if ((chartype == ucp_Lu ||
- chartype == ucp_Ll ||
- chartype == ucp_Lt) == (op == OP_NOTPROP))
+ if ((prop->chartype == ucp_Lu ||
+ prop->chartype == ucp_Ll ||
+ prop->chartype == ucp_Lt) == (op == OP_NOTPROP))
RRETURN(MATCH_NOMATCH);
break;
case PT_GC:
- if ((ecode[2] != category) == (op == OP_PROP))
+ if ((ecode[2] != _pcre_ucp_gentype[prop->chartype]) == (op == OP_PROP))
RRETURN(MATCH_NOMATCH);
break;
case PT_PC:
- if ((ecode[2] != chartype) == (op == OP_PROP))
+ if ((ecode[2] != prop->chartype) == (op == OP_PROP))
RRETURN(MATCH_NOMATCH);
break;
case PT_SC:
- if ((ecode[2] != script) == (op == OP_PROP))
+ if ((ecode[2] != prop->script) == (op == OP_PROP))
RRETURN(MATCH_NOMATCH);
break;
@@ -1690,8 +1722,7 @@ for (;;)
if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
GETCHARINCTEST(c, eptr);
{
- int chartype, script;
- int category = _pcre_ucp_findprop(c, &chartype, &script);
+ int category = UCD_CATEGORY(c);
if (category == ucp_M) RRETURN(MATCH_NOMATCH);
while (eptr < md->end_subject)
{
@@ -1700,7 +1731,7 @@ for (;;)
{
GETCHARLEN(c, eptr, len);
}
- category = _pcre_ucp_findprop(c, &chartype, &script);
+ category = UCD_CATEGORY(c);
if (category != ucp_M) break;
eptr += len;
}
@@ -1721,16 +1752,25 @@ for (;;)
case OP_REF:
{
offset = GET2(ecode, 1) << 1; /* Doubled ref number */
- ecode += 3; /* Advance past item */
+ ecode += 3;
- /* If the reference is unset, set the length to be longer than the amount
- of subject left; this ensures that every attempt at a match fails. We
- can't just fail here, because of the possibility of quantifiers with zero
- minima. */
+ /* If the reference is unset, there are two possibilities:
- length = (offset >= offset_top || md->offset_vector[offset] < 0)?
- md->end_subject - eptr + 1 :
- md->offset_vector[offset+1] - md->offset_vector[offset];
+ (a) In the default, Perl-compatible state, set the length to be longer
+ than the amount of subject left; this ensures that every attempt at a
+ match fails. We can't just fail here, because of the possibility of
+ quantifiers with zero minima.
+
+ (b) If the JavaScript compatibility flag is set, set the length to zero
+ so that the back reference matches an empty string.
+
+ Otherwise, set the length to the length of what was matched by the
+ referenced subpattern. */
+
+ if (offset >= offset_top || md->offset_vector[offset] < 0)
+ length = (md->jscript_compat)? 0 : md->end_subject - eptr + 1;
+ else
+ length = md->offset_vector[offset+1] - md->offset_vector[offset];
/* Set up for repetition, or handle the non-repeated case */
@@ -2156,7 +2196,7 @@ for (;;)
if (fc != dc)
{
#ifdef SUPPORT_UCP
- if (dc != _pcre_ucp_othercase(fc))
+ if (dc != UCD_OTHERCASE(fc))
#endif
RRETURN(MATCH_NOMATCH);
}
@@ -2247,7 +2287,7 @@ for (;;)
#ifdef SUPPORT_UCP
unsigned int othercase;
if ((ims & PCRE_CASELESS) != 0 &&
- (othercase = _pcre_ucp_othercase(fc)) != NOTACHAR)
+ (othercase = UCD_OTHERCASE(fc)) != fc)
oclength = _pcre_ord2utf8(othercase, occhars);
else oclength = 0;
#endif /* SUPPORT_UCP */
@@ -2567,10 +2607,11 @@ for (;;)
{
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM28);
if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+ if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
GETCHARINC(d, eptr);
if (d < 256) d = md->lcc[d];
- if (fi >= max || eptr >= md->end_subject || fc == d)
- RRETURN(MATCH_NOMATCH);
+ if (fc == d) RRETURN(MATCH_NOMATCH);
+
}
}
else
@@ -2676,9 +2717,9 @@ for (;;)
{
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM32);
if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+ if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
GETCHARINC(d, eptr);
- if (fi >= max || eptr >= md->end_subject || fc == d)
- RRETURN(MATCH_NOMATCH);
+ if (fc == d) RRETURN(MATCH_NOMATCH);
}
}
else
@@ -2852,7 +2893,7 @@ for (;;)
{
if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
GETCHARINCTEST(c, eptr);
- prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script);
+ prop_chartype = UCD_CHARTYPE(c);
if ((prop_chartype == ucp_Lu ||
prop_chartype == ucp_Ll ||
prop_chartype == ucp_Lt) == prop_fail_result)
@@ -2865,7 +2906,7 @@ for (;;)
{
if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
GETCHARINCTEST(c, eptr);
- prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script);
+ prop_category = UCD_CATEGORY(c);
if ((prop_category == prop_value) == prop_fail_result)
RRETURN(MATCH_NOMATCH);
}
@@ -2876,7 +2917,7 @@ for (;;)
{
if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
GETCHARINCTEST(c, eptr);
- prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script);
+ prop_chartype = UCD_CHARTYPE(c);
if ((prop_chartype == prop_value) == prop_fail_result)
RRETURN(MATCH_NOMATCH);
}
@@ -2887,7 +2928,7 @@ for (;;)
{
if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
GETCHARINCTEST(c, eptr);
- prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script);
+ prop_script = UCD_SCRIPT(c);
if ((prop_script == prop_value) == prop_fail_result)
RRETURN(MATCH_NOMATCH);
}
@@ -2906,7 +2947,7 @@ for (;;)
for (i = 1; i <= min; i++)
{
GETCHARINCTEST(c, eptr);
- prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script);
+ prop_category = UCD_CATEGORY(c);
if (prop_category == ucp_M) RRETURN(MATCH_NOMATCH);
while (eptr < md->end_subject)
{
@@ -2915,7 +2956,7 @@ for (;;)
{
GETCHARLEN(c, eptr, len);
}
- prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script);
+ prop_category = UCD_CATEGORY(c);
if (prop_category != ucp_M) break;
eptr += len;
}
@@ -2933,14 +2974,22 @@ for (;;)
case OP_ANY:
for (i = 1; i <= min; i++)
{
- if (eptr >= md->end_subject ||
- ((ims & PCRE_DOTALL) == 0 && IS_NEWLINE(eptr)))
+ if (eptr >= md->end_subject || IS_NEWLINE(eptr))
RRETURN(MATCH_NOMATCH);
eptr++;
while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
}
break;
+ case OP_ALLANY:
+ for (i = 1; i <= min; i++)
+ {
+ if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+ eptr++;
+ while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
+ }
+ break;
+
case OP_ANYBYTE:
eptr += min;
break;
@@ -3149,15 +3198,15 @@ for (;;)
switch(ctype)
{
case OP_ANY:
- if ((ims & PCRE_DOTALL) == 0)
+ for (i = 1; i <= min; i++)
{
- for (i = 1; i <= min; i++)
- {
- if (IS_NEWLINE(eptr)) RRETURN(MATCH_NOMATCH);
- eptr++;
- }
+ if (IS_NEWLINE(eptr)) RRETURN(MATCH_NOMATCH);
+ eptr++;
}
- else eptr += min;
+ break;
+
+ case OP_ALLANY:
+ eptr += min;
break;
case OP_ANYBYTE:
@@ -3323,7 +3372,7 @@ for (;;)
if (rrc != MATCH_NOMATCH) RRETURN(rrc);
if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
GETCHARINC(c, eptr);
- prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script);
+ prop_chartype = UCD_CHARTYPE(c);
if ((prop_chartype == ucp_Lu ||
prop_chartype == ucp_Ll ||
prop_chartype == ucp_Lt) == prop_fail_result)
@@ -3338,7 +3387,7 @@ for (;;)
if (rrc != MATCH_NOMATCH) RRETURN(rrc);
if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
GETCHARINC(c, eptr);
- prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script);
+ prop_category = UCD_CATEGORY(c);
if ((prop_category == prop_value) == prop_fail_result)
RRETURN(MATCH_NOMATCH);
}
@@ -3351,7 +3400,7 @@ for (;;)
if (rrc != MATCH_NOMATCH) RRETURN(rrc);
if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
GETCHARINC(c, eptr);
- prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script);
+ prop_chartype = UCD_CHARTYPE(c);
if ((prop_chartype == prop_value) == prop_fail_result)
RRETURN(MATCH_NOMATCH);
}
@@ -3364,7 +3413,7 @@ for (;;)
if (rrc != MATCH_NOMATCH) RRETURN(rrc);
if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
GETCHARINC(c, eptr);
- prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script);
+ prop_script = UCD_SCRIPT(c);
if ((prop_script == prop_value) == prop_fail_result)
RRETURN(MATCH_NOMATCH);
}
@@ -3386,7 +3435,7 @@ for (;;)
if (rrc != MATCH_NOMATCH) RRETURN(rrc);
if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
GETCHARINCTEST(c, eptr);
- prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script);
+ prop_category = UCD_CATEGORY(c);
if (prop_category == ucp_M) RRETURN(MATCH_NOMATCH);
while (eptr < md->end_subject)
{
@@ -3395,7 +3444,7 @@ for (;;)
{
GETCHARLEN(c, eptr, len);
}
- prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script);
+ prop_category = UCD_CATEGORY(c);
if (prop_category != ucp_M) break;
eptr += len;
}
@@ -3414,16 +3463,14 @@ for (;;)
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM42);
if (rrc != MATCH_NOMATCH) RRETURN(rrc);
if (fi >= max || eptr >= md->end_subject ||
- (ctype == OP_ANY && (ims & PCRE_DOTALL) == 0 &&
- IS_NEWLINE(eptr)))
+ (ctype == OP_ANY && IS_NEWLINE(eptr)))
RRETURN(MATCH_NOMATCH);
GETCHARINC(c, eptr);
switch(ctype)
{
- case OP_ANY: /* This is the DOTALL case */
- break;
-
+ case OP_ANY: /* This is the non-NL case */
+ case OP_ALLANY:
case OP_ANYBYTE:
break;
@@ -3575,15 +3622,14 @@ for (;;)
RMATCH(eptr, ecode, offset_top, md, ims, eptrb, 0, RM43);
if (rrc != MATCH_NOMATCH) RRETURN(rrc);
if (fi >= max || eptr >= md->end_subject ||
- ((ims & PCRE_DOTALL) == 0 && IS_NEWLINE(eptr)))
+ (ctype == OP_ANY && IS_NEWLINE(eptr)))
RRETURN(MATCH_NOMATCH);
c = *eptr++;
switch(ctype)
{
- case OP_ANY: /* This is the DOTALL case */
- break;
-
+ case OP_ANY: /* This is the non-NL case */
+ case OP_ALLANY:
case OP_ANYBYTE:
break;
@@ -3716,7 +3762,7 @@ for (;;)
int len = 1;
if (eptr >= md->end_subject) break;
GETCHARLEN(c, eptr, len);
- prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script);
+ prop_chartype = UCD_CHARTYPE(c);
if ((prop_chartype == ucp_Lu ||
prop_chartype == ucp_Ll ||
prop_chartype == ucp_Lt) == prop_fail_result)
@@ -3731,7 +3777,7 @@ for (;;)
int len = 1;
if (eptr >= md->end_subject) break;
GETCHARLEN(c, eptr, len);
- prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script);
+ prop_category = UCD_CATEGORY(c);
if ((prop_category == prop_value) == prop_fail_result)
break;
eptr+= len;
@@ -3744,7 +3790,7 @@ for (;;)
int len = 1;
if (eptr >= md->end_subject) break;
GETCHARLEN(c, eptr, len);
- prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script);
+ prop_chartype = UCD_CHARTYPE(c);
if ((prop_chartype == prop_value) == prop_fail_result)
break;
eptr+= len;
@@ -3757,7 +3803,7 @@ for (;;)
int len = 1;
if (eptr >= md->end_subject) break;
GETCHARLEN(c, eptr, len);
- prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script);
+ prop_script = UCD_SCRIPT(c);
if ((prop_script == prop_value) == prop_fail_result)
break;
eptr+= len;
@@ -3786,7 +3832,7 @@ for (;;)
{
if (eptr >= md->end_subject) break;
GETCHARINCTEST(c, eptr);
- prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script);
+ prop_category = UCD_CATEGORY(c);
if (prop_category == ucp_M) break;
while (eptr < md->end_subject)
{
@@ -3795,7 +3841,7 @@ for (;;)
{
GETCHARLEN(c, eptr, len);
}
- prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script);
+ prop_category = UCD_CATEGORY(c);
if (prop_category != ucp_M) break;
eptr += len;
}
@@ -3817,7 +3863,7 @@ for (;;)
BACKCHAR(eptr);
GETCHARLEN(c, eptr, len);
}
- prop_category = _pcre_ucp_findprop(c, &prop_chartype, &prop_script);
+ prop_category = UCD_CATEGORY(c);
if (prop_category != ucp_M) break;
eptr--;
}
@@ -3837,23 +3883,11 @@ for (;;)
case OP_ANY:
if (max < INT_MAX)
{
- if ((ims & PCRE_DOTALL) == 0)
- {
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || IS_NEWLINE(eptr)) break;
- eptr++;
- while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
- }
- }
- else
+ for (i = min; i < max; i++)
{
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject) break;
- eptr++;
- while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
- }
+ if (eptr >= md->end_subject || IS_NEWLINE(eptr)) break;
+ eptr++;
+ while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
}
}
@@ -3861,20 +3895,26 @@ for (;;)
else
{
- if ((ims & PCRE_DOTALL) == 0)
+ for (i = min; i < max; i++)
{
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || IS_NEWLINE(eptr)) break;
- eptr++;
- while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
- }
+ if (eptr >= md->end_subject || IS_NEWLINE(eptr)) break;
+ eptr++;
+ while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
}
- else
+ }
+ break;
+
+ case OP_ALLANY:
+ if (max < INT_MAX)
+ {
+ for (i = min; i < max; i++)
{
- eptr = md->end_subject;
+ if (eptr >= md->end_subject) break;
+ eptr++;
+ while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
}
}
+ else eptr = md->end_subject; /* Unlimited UTF-8 repeat */
break;
/* The byte case is the same as non-UTF8 */
@@ -4062,17 +4102,14 @@ for (;;)
switch(ctype)
{
case OP_ANY:
- if ((ims & PCRE_DOTALL) == 0)
+ for (i = min; i < max; i++)
{
- for (i = min; i < max; i++)
- {
- if (eptr >= md->end_subject || IS_NEWLINE(eptr)) break;
- eptr++;
- }
- break;
+ if (eptr >= md->end_subject || IS_NEWLINE(eptr)) break;
+ eptr++;
}
- /* For DOTALL case, fall through and treat as \C */
+ break;
+ case OP_ALLANY:
case OP_ANYBYTE:
c = max - min;
if (c > (unsigned int)(md->end_subject - eptr))
@@ -4346,7 +4383,7 @@ Returns: > 0 => success; value is the number of elements filled in
< -1 => some kind of unexpected problem
*/
-PCRE_EXP_DEFN int
+PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
pcre_exec(const pcre *argument_re, const pcre_extra *extra_data,
PCRE_SPTR subject, int length, int start_offset, int options, int *offsets,
int offsetcount)
@@ -4448,6 +4485,7 @@ end_subject = md->end_subject;
md->endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0;
utf8 = md->utf8 = (re->options & PCRE_UTF8) != 0;
+md->jscript_compat = (re->options & PCRE_JAVASCRIPT_COMPAT) != 0;
md->notbol = (options & PCRE_NOTBOL) != 0;
md->noteol = (options & PCRE_NOTEOL) != 0;
@@ -4657,31 +4695,53 @@ for(;;)
if (firstline)
{
USPTR t = start_match;
+#ifdef SUPPORT_UTF8
+ if (utf8)
+ {
+ while (t < md->end_subject && !IS_NEWLINE(t))
+ {
+ t++;
+ while (t < end_subject && (*t & 0xc0) == 0x80) t++;
+ }
+ }
+ else
+#endif
while (t < md->end_subject && !IS_NEWLINE(t)) t++;
end_subject = t;
}
- /* Now test for a unique first byte */
+ /* Now advance to a unique first byte if there is one. */
if (first_byte >= 0)
{
if (first_byte_caseless)
- while (start_match < end_subject &&
- md->lcc[*start_match] != first_byte)
- { NEXTCHAR(start_match); }
+ while (start_match < end_subject && md->lcc[*start_match] != first_byte)
+ start_match++;
else
while (start_match < end_subject && *start_match != first_byte)
- { NEXTCHAR(start_match); }
+ start_match++;
}
- /* Or to just after a linebreak for a multiline match if possible */
+ /* Or to just after a linebreak for a multiline match */
else if (startline)
{
if (start_match > md->start_subject + start_offset)
{
- while (start_match <= end_subject && !WAS_NEWLINE(start_match))
- { NEXTCHAR(start_match); }
+#ifdef SUPPORT_UTF8
+ if (utf8)
+ {
+ while (start_match < end_subject && !WAS_NEWLINE(start_match))
+ {
+ start_match++;
+ while(start_match < end_subject && (*start_match & 0xc0) == 0x80)
+ start_match++;
+ }
+ }
+ else
+#endif
+ while (start_match < end_subject && !WAS_NEWLINE(start_match))
+ start_match++;
/* If we have just passed a CR and the newline option is ANY or ANYCRLF,
and we are now at a LF, advance the match position by one more character.
@@ -4695,16 +4755,15 @@ for(;;)
}
}
- /* Or to a non-unique first char after study */
+ /* Or to a non-unique first byte after study */
else if (start_bits != NULL)
{
while (start_match < end_subject)
{
register unsigned int c = *start_match;
- if ((start_bits[c/8] & (1 << (c&7))) == 0)
- { NEXTCHAR(start_match); }
- else break;
+ if ((start_bits[c/8] & (1 << (c&7))) == 0) start_match++;
+ else break;
}
}
diff --git a/ext/pcre/pcrelib/pcre_fullinfo.c b/ext/pcre/pcrelib/pcre_fullinfo.c
index b91ea035e..4012b7a4e 100644
--- a/ext/pcre/pcrelib/pcre_fullinfo.c
+++ b/ext/pcre/pcrelib/pcre_fullinfo.c
@@ -6,7 +6,7 @@
and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
- Copyright (c) 1997-2008 University of Cambridge
+ Copyright (c) 1997-2009 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -63,7 +63,7 @@ Arguments:
Returns: 0 if data returned, negative on error
*/
-PCRE_EXP_DEFN int
+PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
pcre_fullinfo(const pcre *argument_re, const pcre_extra *extra_data, int what,
void *where)
{
diff --git a/ext/pcre/pcrelib/pcre_get.c b/ext/pcre/pcrelib/pcre_get.c
index c185c331a..65a81c99b 100644
--- a/ext/pcre/pcrelib/pcre_get.c
+++ b/ext/pcre/pcrelib/pcre_get.c
@@ -6,7 +6,7 @@
and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
- Copyright (c) 1997-2008 University of Cambridge
+ Copyright (c) 1997-2009 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -63,7 +63,7 @@ Returns: the number of the named parentheses, or a negative number
(PCRE_ERROR_NOSUBSTRING) if not found
*/
-int
+PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
pcre_get_stringnumber(const pcre *code, const char *stringname)
{
int rc;
@@ -112,7 +112,7 @@ Returns: the length of each entry, or a negative number
(PCRE_ERROR_NOSUBSTRING) if not found
*/
-int
+PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
pcre_get_stringtable_entries(const pcre *code, const char *stringname,
char **firstptr, char **lastptr)
{
@@ -229,7 +229,7 @@ Returns: if successful:
PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
*/
-int
+PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
pcre_copy_substring(const char *subject, int *ovector, int stringcount,
int stringnumber, char *buffer, int size)
{
@@ -274,7 +274,7 @@ Returns: if successful:
PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
*/
-int
+PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
pcre_copy_named_substring(const pcre *code, const char *subject, int *ovector,
int stringcount, const char *stringname, char *buffer, int size)
{
@@ -306,7 +306,7 @@ Returns: if successful: 0
PCRE_ERROR_NOMEMORY (-6) failed to get store
*/
-int
+PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
pcre_get_substring_list(const char *subject, int *ovector, int stringcount,
const char ***listptr)
{
@@ -351,7 +351,7 @@ Argument: the result of a previous pcre_get_substring_list()
Returns: nothing
*/
-void
+PCRE_EXP_DEFN void PCRE_CALL_CONVENTION
pcre_free_substring_list(const char **pointer)
{
(pcre_free)((void *)pointer);
@@ -384,7 +384,7 @@ Returns: if successful:
PCRE_ERROR_NOSUBSTRING (-7) substring not present
*/
-int
+PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
pcre_get_substring(const char *subject, int *ovector, int stringcount,
int stringnumber, const char **stringptr)
{
@@ -431,7 +431,7 @@ Returns: if successful:
PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
*/
-int
+PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
pcre_get_named_substring(const pcre *code, const char *subject, int *ovector,
int stringcount, const char *stringname, const char **stringptr)
{
@@ -454,7 +454,7 @@ Argument: the result of a previous pcre_get_substring()
Returns: nothing
*/
-void
+PCRE_EXP_DEFN void PCRE_CALL_CONVENTION
pcre_free_substring(const char *pointer)
{
(pcre_free)((void *)pointer);
diff --git a/ext/pcre/pcrelib/pcre_globals.c b/ext/pcre/pcrelib/pcre_globals.c
index aa3ef90a2..f684edbe3 100644
--- a/ext/pcre/pcrelib/pcre_globals.c
+++ b/ext/pcre/pcrelib/pcre_globals.c
@@ -6,7 +6,7 @@
and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
- Copyright (c) 1997-2008 University of Cambridge
+ Copyright (c) 1997-2009 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
diff --git a/ext/pcre/pcrelib/pcre_info.c b/ext/pcre/pcrelib/pcre_info.c
index f653d70bd..0e0a02f59 100644
--- a/ext/pcre/pcrelib/pcre_info.c
+++ b/ext/pcre/pcrelib/pcre_info.c
@@ -6,7 +6,7 @@
and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
- Copyright (c) 1997-2008 University of Cambridge
+ Copyright (c) 1997-2009 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -70,7 +70,7 @@ Returns: number of capturing subpatterns
or negative values on error
*/
-PCRE_EXP_DEFN int
+PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
pcre_info(const pcre *argument_re, int *optptr, int *first_byte)
{
real_pcre internal_re;
diff --git a/ext/pcre/pcrelib/pcre_internal.h b/ext/pcre/pcrelib/pcre_internal.h
index caf7b831d..c652ed9de 100644
--- a/ext/pcre/pcrelib/pcre_internal.h
+++ b/ext/pcre/pcrelib/pcre_internal.h
@@ -7,7 +7,7 @@
and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
- Copyright (c) 1997-2008 University of Cambridge
+ Copyright (c) 1997-2009 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -132,6 +132,20 @@ PCRE_EXP_DATA_DEFN only if they are not already set. */
# endif
#endif
+/* When compiling with the MSVC compiler, it is sometimes necessary to include
+a "calling convention" before exported function names. (This is secondhand
+information; I know nothing about MSVC myself). For example, something like
+
+ void __cdecl function(....)
+
+might be needed. In order so make this easy, all the exported functions have
+PCRE_CALL_CONVENTION just before their names. It is rarely needed; if not
+set, we ensure here that it has no effect. */
+
+#ifndef PCRE_CALL_CONVENTION
+#define PCRE_CALL_CONVENTION
+#endif
+
/* We need to have types that specify unsigned 16-bit and 32-bit integers. We
cannot determine these outside the compilation (e.g. by running a program as
part of "configure") because PCRE is often cross-compiled for use on other
@@ -140,16 +154,20 @@ preprocessor time in standard C environments. */
#if USHRT_MAX == 65535
typedef unsigned short pcre_uint16;
+ typedef short pcre_int16;
#elif UINT_MAX == 65535
typedef unsigned int pcre_uint16;
+ typedef int pcre_int16;
#else
#error Cannot determine a type for 16-bit unsigned integers
#endif
#if UINT_MAX == 4294967295
typedef unsigned int pcre_uint32;
+ typedef int pcre_int32;
#elif ULONG_MAX == 4294967295
typedef unsigned long int pcre_uint32;
+ typedef long int pcre_int32;
#else
#error Cannot determine a type for 32-bit unsigned integers
#endif
@@ -363,7 +381,6 @@ never be called in byte mode. To make sure it can never even appear when UTF-8
support is omitted, we don't even define it. */
#ifndef SUPPORT_UTF8
-#define NEXTCHAR(p) p++;
#define GETCHAR(c, eptr) c = *eptr;
#define GETCHARTEST(c, eptr) c = *eptr;
#define GETCHARINC(c, eptr) c = *eptr++;
@@ -373,13 +390,6 @@ support is omitted, we don't even define it. */
#else /* SUPPORT_UTF8 */
-/* Advance a character pointer one byte in non-UTF-8 mode and by one character
-in UTF-8 mode. */
-
-#define NEXTCHAR(p) \
- p++; \
- if (utf8) { while((*p & 0xc0) == 0x80) p++; }
-
/* Get the next UTF-8 character, not advancing the pointer. This is called when
we know we are in UTF-8 mode. */
@@ -514,7 +524,8 @@ time, run time, or study time, respectively. */
(PCRE_CASELESS|PCRE_EXTENDED|PCRE_ANCHORED|PCRE_MULTILINE| \
PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8| \
PCRE_NO_AUTO_CAPTURE|PCRE_NO_UTF8_CHECK|PCRE_AUTO_CALLOUT|PCRE_FIRSTLINE| \
- PCRE_DUPNAMES|PCRE_NEWLINE_BITS|PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE)
+ PCRE_DUPNAMES|PCRE_NEWLINE_BITS|PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE| \
+ PCRE_JAVASCRIPT_COMPAT)
#define PUBLIC_EXEC_OPTIONS \
(PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NO_UTF8_CHECK| \
@@ -548,12 +559,15 @@ variable-length repeat, or a anything other than literal characters. */
#define REQ_CASELESS 0x0100 /* indicates caselessness */
#define REQ_VARY 0x0200 /* reqbyte followed non-literal item */
-/* Miscellaneous definitions */
+/* Miscellaneous definitions. The #ifndef is to pacify compiler warnings in
+environments where these macros are defined elsewhere. */
+#ifndef FALSE
typedef int BOOL;
#define FALSE 0
#define TRUE 1
+#endif
/* Escape items that are just an encoding of a particular data value. */
@@ -604,16 +618,20 @@ contain UTF-8 characters with values greater than 255. */
value such as \n. They must have non-zero values, as check_escape() returns
their negation. Also, they must appear in the same order as in the opcode
definitions below, up to ESC_z. There's a dummy for OP_ANY because it
-corresponds to "." rather than an escape sequence. The final one must be
-ESC_REF as subsequent values are used for backreferences (\1, \2, \3, etc).
-There are two tests in the code for an escape greater than ESC_b and less than
-ESC_Z to detect the types that may be repeated. These are the types that
-consume characters. If any new escapes are put in between that don't consume a
-character, that code will have to change. */
+corresponds to "." rather than an escape sequence, and another for OP_ALLANY
+(which is used for [^] in JavaScript compatibility mode).
+
+The final escape must be ESC_REF as subsequent values are used for
+backreferences (\1, \2, \3, etc). There are two tests in the code for an escape
+greater than ESC_b and less than ESC_Z to detect the types that may be
+repeated. These are the types that consume characters. If any new escapes are
+put in between that don't consume a character, that code will have to change.
+*/
enum { ESC_A = 1, ESC_G, ESC_K, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s,
- ESC_W, ESC_w, ESC_dum1, ESC_C, ESC_P, ESC_p, ESC_R, ESC_H, ESC_h,
- ESC_V, ESC_v, ESC_X, ESC_Z, ESC_z, ESC_E, ESC_Q, ESC_k, ESC_REF };
+ ESC_W, ESC_w, ESC_dum1, ESC_dum2, ESC_C, ESC_P, ESC_p, ESC_R, ESC_H,
+ ESC_h, ESC_V, ESC_v, ESC_X, ESC_Z, ESC_z, ESC_E, ESC_Q, ESC_g, ESC_k,
+ ESC_REF };
/* Opcode table: Starting from 1 (i.e. after OP_END), the values up to
@@ -639,141 +657,146 @@ enum {
OP_WHITESPACE, /* 9 \s */
OP_NOT_WORDCHAR, /* 10 \W */
OP_WORDCHAR, /* 11 \w */
- OP_ANY, /* 12 Match any character */
- OP_ANYBYTE, /* 13 Match any byte (\C); different to OP_ANY for UTF-8 */
- OP_NOTPROP, /* 14 \P (not Unicode property) */
- OP_PROP, /* 15 \p (Unicode property) */
- OP_ANYNL, /* 16 \R (any newline sequence) */
- OP_NOT_HSPACE, /* 17 \H (not horizontal whitespace) */
- OP_HSPACE, /* 18 \h (horizontal whitespace) */
- OP_NOT_VSPACE, /* 19 \V (not vertical whitespace) */
- OP_VSPACE, /* 20 \v (vertical whitespace) */
- OP_EXTUNI, /* 21 \X (extended Unicode sequence */
- OP_EODN, /* 22 End of data or \n at end of data: \Z. */
- OP_EOD, /* 23 End of data: \z */
-
- OP_OPT, /* 24 Set runtime options */
- OP_CIRC, /* 25 Start of line - varies with multiline switch */
- OP_DOLL, /* 26 End of line - varies with multiline switch */
- OP_CHAR, /* 27 Match one character, casefully */
- OP_CHARNC, /* 28 Match one character, caselessly */
- OP_NOT, /* 29 Match one character, not the following one */
-
- OP_STAR, /* 30 The maximizing and minimizing versions of */
- OP_MINSTAR, /* 31 these six opcodes must come in pairs, with */
- OP_PLUS, /* 32 the minimizing one second. */
- OP_MINPLUS, /* 33 This first set applies to single characters.*/
- OP_QUERY, /* 34 */
- OP_MINQUERY, /* 35 */
-
- OP_UPTO, /* 36 From 0 to n matches */
- OP_MINUPTO, /* 37 */
- OP_EXACT, /* 38 Exactly n matches */
-
- OP_POSSTAR, /* 39 Possessified star */
- OP_POSPLUS, /* 40 Possessified plus */
- OP_POSQUERY, /* 41 Posesssified query */
- OP_POSUPTO, /* 42 Possessified upto */
-
- OP_NOTSTAR, /* 43 The maximizing and minimizing versions of */
- OP_NOTMINSTAR, /* 44 these six opcodes must come in pairs, with */
- OP_NOTPLUS, /* 45 the minimizing one second. They must be in */
- OP_NOTMINPLUS, /* 46 exactly the same order as those above. */
- OP_NOTQUERY, /* 47 This set applies to "not" single characters. */
- OP_NOTMINQUERY, /* 48 */
-
- OP_NOTUPTO, /* 49 From 0 to n matches */
- OP_NOTMINUPTO, /* 50 */
- OP_NOTEXACT, /* 51 Exactly n matches */
-
- OP_NOTPOSSTAR, /* 52 Possessified versions */
- OP_NOTPOSPLUS, /* 53 */
- OP_NOTPOSQUERY, /* 54 */
- OP_NOTPOSUPTO, /* 55 */
-
- OP_TYPESTAR, /* 56 The maximizing and minimizing versions of */
- OP_TYPEMINSTAR, /* 57 these six opcodes must come in pairs, with */
- OP_TYPEPLUS, /* 58 the minimizing one second. These codes must */
- OP_TYPEMINPLUS, /* 59 be in exactly the same order as those above. */
- OP_TYPEQUERY, /* 60 This set applies to character types such as \d */
- OP_TYPEMINQUERY, /* 61 */
-
- OP_TYPEUPTO, /* 62 From 0 to n matches */
- OP_TYPEMINUPTO, /* 63 */
- OP_TYPEEXACT, /* 64 Exactly n matches */
-
- OP_TYPEPOSSTAR, /* 65 Possessified versions */
- OP_TYPEPOSPLUS, /* 66 */
- OP_TYPEPOSQUERY, /* 67 */
- OP_TYPEPOSUPTO, /* 68 */
-
- OP_CRSTAR, /* 69 The maximizing and minimizing versions of */
- OP_CRMINSTAR, /* 70 all these opcodes must come in pairs, with */
- OP_CRPLUS, /* 71 the minimizing one second. These codes must */
- OP_CRMINPLUS, /* 72 be in exactly the same order as those above. */
- OP_CRQUERY, /* 73 These are for character classes and back refs */
- OP_CRMINQUERY, /* 74 */
- OP_CRRANGE, /* 75 These are different to the three sets above. */
- OP_CRMINRANGE, /* 76 */
-
- OP_CLASS, /* 77 Match a character class, chars < 256 only */
- OP_NCLASS, /* 78 Same, but the bitmap was created from a negative
+ OP_ANY, /* 12 Match any character (subject to DOTALL) */
+ OP_ALLANY, /* 13 Match any character (not subject to DOTALL) */
+ OP_ANYBYTE, /* 14 Match any byte (\C); different to OP_ANY for UTF-8 */
+ OP_NOTPROP, /* 15 \P (not Unicode property) */
+ OP_PROP, /* 16 \p (Unicode property) */
+ OP_ANYNL, /* 17 \R (any newline sequence) */
+ OP_NOT_HSPACE, /* 18 \H (not horizontal whitespace) */
+ OP_HSPACE, /* 19 \h (horizontal whitespace) */
+ OP_NOT_VSPACE, /* 20 \V (not vertical whitespace) */
+ OP_VSPACE, /* 21 \v (vertical whitespace) */
+ OP_EXTUNI, /* 22 \X (extended Unicode sequence */
+ OP_EODN, /* 23 End of data or \n at end of data: \Z. */
+ OP_EOD, /* 24 End of data: \z */
+
+ OP_OPT, /* 25 Set runtime options */
+ OP_CIRC, /* 26 Start of line - varies with multiline switch */
+ OP_DOLL, /* 27 End of line - varies with multiline switch */
+ OP_CHAR, /* 28 Match one character, casefully */
+ OP_CHARNC, /* 29 Match one character, caselessly */
+ OP_NOT, /* 30 Match one character, not the following one */
+
+ OP_STAR, /* 31 The maximizing and minimizing versions of */
+ OP_MINSTAR, /* 32 these six opcodes must come in pairs, with */
+ OP_PLUS, /* 33 the minimizing one second. */
+ OP_MINPLUS, /* 34 This first set applies to single characters.*/
+ OP_QUERY, /* 35 */
+ OP_MINQUERY, /* 36 */
+
+ OP_UPTO, /* 37 From 0 to n matches */
+ OP_MINUPTO, /* 38 */
+ OP_EXACT, /* 39 Exactly n matches */
+
+ OP_POSSTAR, /* 40 Possessified star */
+ OP_POSPLUS, /* 41 Possessified plus */
+ OP_POSQUERY, /* 42 Posesssified query */
+ OP_POSUPTO, /* 43 Possessified upto */
+
+ OP_NOTSTAR, /* 44 The maximizing and minimizing versions of */
+ OP_NOTMINSTAR, /* 45 these six opcodes must come in pairs, with */
+ OP_NOTPLUS, /* 46 the minimizing one second. They must be in */
+ OP_NOTMINPLUS, /* 47 exactly the same order as those above. */
+ OP_NOTQUERY, /* 48 This set applies to "not" single characters. */
+ OP_NOTMINQUERY, /* 49 */
+
+ OP_NOTUPTO, /* 50 From 0 to n matches */
+ OP_NOTMINUPTO, /* 51 */
+ OP_NOTEXACT, /* 52 Exactly n matches */
+
+ OP_NOTPOSSTAR, /* 53 Possessified versions */
+ OP_NOTPOSPLUS, /* 54 */
+ OP_NOTPOSQUERY, /* 55 */
+ OP_NOTPOSUPTO, /* 56 */
+
+ OP_TYPESTAR, /* 57 The maximizing and minimizing versions of */
+ OP_TYPEMINSTAR, /* 58 these six opcodes must come in pairs, with */
+ OP_TYPEPLUS, /* 59 the minimizing one second. These codes must */
+ OP_TYPEMINPLUS, /* 60 be in exactly the same order as those above. */
+ OP_TYPEQUERY, /* 61 This set applies to character types such as \d */
+ OP_TYPEMINQUERY, /* 62 */
+
+ OP_TYPEUPTO, /* 63 From 0 to n matches */
+ OP_TYPEMINUPTO, /* 64 */
+ OP_TYPEEXACT, /* 65 Exactly n matches */
+
+ OP_TYPEPOSSTAR, /* 66 Possessified versions */
+ OP_TYPEPOSPLUS, /* 67 */
+ OP_TYPEPOSQUERY, /* 68 */
+ OP_TYPEPOSUPTO, /* 69 */
+
+ OP_CRSTAR, /* 70 The maximizing and minimizing versions of */
+ OP_CRMINSTAR, /* 71 all these opcodes must come in pairs, with */
+ OP_CRPLUS, /* 72 the minimizing one second. These codes must */
+ OP_CRMINPLUS, /* 73 be in exactly the same order as those above. */
+ OP_CRQUERY, /* 74 These are for character classes and back refs */
+ OP_CRMINQUERY, /* 75 */
+ OP_CRRANGE, /* 76 These are different to the three sets above. */
+ OP_CRMINRANGE, /* 77 */
+
+ OP_CLASS, /* 78 Match a character class, chars < 256 only */
+ OP_NCLASS, /* 79 Same, but the bitmap was created from a negative
class - the difference is relevant only when a UTF-8
character > 255 is encountered. */
- OP_XCLASS, /* 79 Extended class for handling UTF-8 chars within the
+ OP_XCLASS, /* 80 Extended class for handling UTF-8 chars within the
class. This does both positive and negative. */
- OP_REF, /* 80 Match a back reference */
- OP_RECURSE, /* 81 Match a numbered subpattern (possibly recursive) */
- OP_CALLOUT, /* 82 Call out to external function if provided */
+ OP_REF, /* 81 Match a back reference */
+ OP_RECURSE, /* 82 Match a numbered subpattern (possibly recursive) */
+ OP_CALLOUT, /* 83 Call out to external function if provided */
- OP_ALT, /* 83 Start of alternation */
- OP_KET, /* 84 End of group that doesn't have an unbounded repeat */
- OP_KETRMAX, /* 85 These two must remain together and in this */
- OP_KETRMIN, /* 86 order. They are for groups the repeat for ever. */
+ OP_ALT, /* 84 Start of alternation */
+ OP_KET, /* 85 End of group that doesn't have an unbounded repeat */
+ OP_KETRMAX, /* 86 These two must remain together and in this */
+ OP_KETRMIN, /* 87 order. They are for groups the repeat for ever. */
/* The assertions must come before BRA, CBRA, ONCE, and COND.*/
- OP_ASSERT, /* 87 Positive lookahead */
- OP_ASSERT_NOT, /* 88 Negative lookahead */
- OP_ASSERTBACK, /* 89 Positive lookbehind */
- OP_ASSERTBACK_NOT, /* 90 Negative lookbehind */
- OP_REVERSE, /* 91 Move pointer back - used in lookbehind assertions */
+ OP_ASSERT, /* 88 Positive lookahead */
+ OP_ASSERT_NOT, /* 89 Negative lookahead */
+ OP_ASSERTBACK, /* 90 Positive lookbehind */
+ OP_ASSERTBACK_NOT, /* 91 Negative lookbehind */
+ OP_REVERSE, /* 92 Move pointer back - used in lookbehind assertions */
/* ONCE, BRA, CBRA, and COND must come after the assertions, with ONCE first,
as there's a test for >= ONCE for a subpattern that isn't an assertion. */
- OP_ONCE, /* 92 Atomic group */
- OP_BRA, /* 93 Start of non-capturing bracket */
- OP_CBRA, /* 94 Start of capturing bracket */
- OP_COND, /* 95 Conditional group */
+ OP_ONCE, /* 93 Atomic group */
+ OP_BRA, /* 94 Start of non-capturing bracket */
+ OP_CBRA, /* 95 Start of capturing bracket */
+ OP_COND, /* 96 Conditional group */
/* These three must follow the previous three, in the same order. There's a
check for >= SBRA to distinguish the two sets. */
- OP_SBRA, /* 96 Start of non-capturing bracket, check empty */
- OP_SCBRA, /* 97 Start of capturing bracket, check empty */
- OP_SCOND, /* 98 Conditional group, check empty */
+ OP_SBRA, /* 97 Start of non-capturing bracket, check empty */
+ OP_SCBRA, /* 98 Start of capturing bracket, check empty */
+ OP_SCOND, /* 99 Conditional group, check empty */
- OP_CREF, /* 99 Used to hold a capture number as condition */
- OP_RREF, /* 100 Used to hold a recursion number as condition */
- OP_DEF, /* 101 The DEFINE condition */
+ OP_CREF, /* 100 Used to hold a capture number as condition */
+ OP_RREF, /* 101 Used to hold a recursion number as condition */
+ OP_DEF, /* 102 The DEFINE condition */
- OP_BRAZERO, /* 102 These two must remain together and in this */
- OP_BRAMINZERO, /* 103 order. */
+ OP_BRAZERO, /* 103 These two must remain together and in this */
+ OP_BRAMINZERO, /* 104 order. */
/* These are backtracking control verbs */
- OP_PRUNE, /* 104 */
- OP_SKIP, /* 105 */
- OP_THEN, /* 106 */
- OP_COMMIT, /* 107 */
+ OP_PRUNE, /* 105 */
+ OP_SKIP, /* 106 */
+ OP_THEN, /* 107 */
+ OP_COMMIT, /* 108 */
/* These are forced failure and success verbs */
- OP_FAIL, /* 108 */
- OP_ACCEPT /* 109 */
+ OP_FAIL, /* 109 */
+ OP_ACCEPT, /* 110 */
+
+ /* This is used to skip a subpattern with a {0} quantifier */
+
+ OP_SKIPZERO /* 111 */
};
@@ -782,7 +805,7 @@ for debugging. The macro is referenced only in pcre_printint.c. */
#define OP_NAME_LIST \
"End", "\\A", "\\G", "\\K", "\\B", "\\b", "\\D", "\\d", \
- "\\S", "\\s", "\\W", "\\w", "Any", "Anybyte", \
+ "\\S", "\\s", "\\W", "\\w", "Any", "AllAny", "Anybyte", \
"notprop", "prop", "\\R", "\\H", "\\h", "\\V", "\\v", \
"extuni", "\\Z", "\\z", \
"Opt", "^", "$", "char", "charnc", "not", \
@@ -798,7 +821,8 @@ for debugging. The macro is referenced only in pcre_printint.c. */
"AssertB", "AssertB not", "Reverse", \
"Once", "Bra", "CBra", "Cond", "SBra", "SCBra", "SCond", \
"Cond ref", "Cond rec", "Cond def", "Brazero", "Braminzero", \
- "*PRUNE", "*SKIP", "*THEN", "*COMMIT", "*FAIL", "*ACCEPT"
+ "*PRUNE", "*SKIP", "*THEN", "*COMMIT", "*FAIL", "*ACCEPT", \
+ "Skip zero"
/* This macro defines the length of fixed length operations in the compiled
@@ -814,7 +838,7 @@ in UTF-8 mode. The code that uses this table must know about such things. */
1, /* End */ \
1, 1, 1, 1, 1, /* \A, \G, \K, \B, \b */ \
1, 1, 1, 1, 1, 1, /* \D, \d, \S, \s, \W, \w */ \
- 1, 1, /* Any, Anybyte */ \
+ 1, 1, 1, /* Any, AllAny, Anybyte */ \
3, 3, 1, /* NOTPROP, PROP, EXTUNI */ \
1, 1, 1, 1, 1, /* \R, \H, \h, \V, \v */ \
1, 1, 2, 1, 1, /* \Z, \z, Opt, ^, $ */ \
@@ -863,7 +887,7 @@ in UTF-8 mode. The code that uses this table must know about such things. */
1, /* DEF */ \
1, 1, /* BRAZERO, BRAMINZERO */ \
1, 1, 1, 1, /* PRUNE, SKIP, THEN, COMMIT, */ \
- 1, 1 /* FAIL, ACCEPT */
+ 1, 1, 1 /* FAIL, ACCEPT, SKIPZERO */
/* A magic value for OP_RREF to indicate the "any recursion" condition. */
@@ -879,7 +903,7 @@ enum { ERR0, ERR1, ERR2, ERR3, ERR4, ERR5, ERR6, ERR7, ERR8, ERR9,
ERR30, ERR31, ERR32, ERR33, ERR34, ERR35, ERR36, ERR37, ERR38, ERR39,
ERR40, ERR41, ERR42, ERR43, ERR44, ERR45, ERR46, ERR47, ERR48, ERR49,
ERR50, ERR51, ERR52, ERR53, ERR54, ERR55, ERR56, ERR57, ERR58, ERR59,
- ERR60, ERR61, ERR62, ERR63 };
+ ERR60, ERR61, ERR62, ERR63, ERR64 };
/* The real format of the start of the pcre block; the index of names and the
code vector run on as long as necessary after the end. We store an explicit
@@ -1004,6 +1028,7 @@ typedef struct match_data {
BOOL notbol; /* NOTBOL flag */
BOOL noteol; /* NOTEOL flag */
BOOL utf8; /* UTF8 flag */
+ BOOL jscript_compat; /* JAVASCRIPT_COMPAT flag */
BOOL endonly; /* Dollar not before final \n */
BOOL notempty; /* Empty string match not wanted */
BOOL partial; /* PARTIAL flag */
@@ -1114,13 +1139,38 @@ extern BOOL _pcre_is_newline(const uschar *, int, const uschar *,
extern int _pcre_ord2utf8(int, uschar *);
extern real_pcre *_pcre_try_flipped(const real_pcre *, real_pcre *,
const pcre_study_data *, pcre_study_data *);
-extern int _pcre_ucp_findprop(const unsigned int, int *, int *);
-extern unsigned int _pcre_ucp_othercase(const unsigned int);
extern int _pcre_valid_utf8(const uschar *, int);
extern BOOL _pcre_was_newline(const uschar *, int, const uschar *,
int *, BOOL);
extern BOOL _pcre_xclass(int, const uschar *);
+
+/* Unicode character database (UCD) */
+
+typedef struct {
+ uschar script;
+ uschar chartype;
+ pcre_int32 other_case;
+} ucd_record;
+
+extern const ucd_record _pcre_ucd_records[];
+extern const uschar _pcre_ucd_stage1[];
+extern const pcre_uint16 _pcre_ucd_stage2[];
+extern const int _pcre_ucp_gentype[];
+
+
+/* UCD access macros */
+
+#define UCD_BLOCK_SIZE 128
+#define GET_UCD(ch) (_pcre_ucd_records + \
+ _pcre_ucd_stage2[_pcre_ucd_stage1[(ch) / UCD_BLOCK_SIZE] * \
+ UCD_BLOCK_SIZE + ch % UCD_BLOCK_SIZE])
+
+#define UCD_CHARTYPE(ch) GET_UCD(ch)->chartype
+#define UCD_SCRIPT(ch) GET_UCD(ch)->script
+#define UCD_CATEGORY(ch) _pcre_ucp_gentype[UCD_CHARTYPE(ch)]
+#define UCD_OTHERCASE(ch) (ch + GET_UCD(ch)->other_case)
+
#endif
/* End of pcre_internal.h */
diff --git a/ext/pcre/pcrelib/pcre_maketables.c b/ext/pcre/pcrelib/pcre_maketables.c
index 2ba612cec..5b1232209 100644
--- a/ext/pcre/pcrelib/pcre_maketables.c
+++ b/ext/pcre/pcrelib/pcre_maketables.c
@@ -6,7 +6,7 @@
and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
- Copyright (c) 1997-2008 University of Cambridge
+ Copyright (c) 1997-2009 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
diff --git a/ext/pcre/pcrelib/pcre_newline.c b/ext/pcre/pcrelib/pcre_newline.c
index e4223cbb6..0b682437b 100644
--- a/ext/pcre/pcrelib/pcre_newline.c
+++ b/ext/pcre/pcrelib/pcre_newline.c
@@ -6,7 +6,7 @@
and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
- Copyright (c) 1997-2008 University of Cambridge
+ Copyright (c) 1997-2009 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
diff --git a/ext/pcre/pcrelib/pcre_ord2utf8.c b/ext/pcre/pcrelib/pcre_ord2utf8.c
index dfd88bcdb..c0a574cc8 100644
--- a/ext/pcre/pcrelib/pcre_ord2utf8.c
+++ b/ext/pcre/pcrelib/pcre_ord2utf8.c
@@ -6,7 +6,7 @@
and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
- Copyright (c) 1997-2008 University of Cambridge
+ Copyright (c) 1997-2009 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -76,8 +76,10 @@ for (j = i; j > 0; j--)
*buffer = _pcre_utf8_table2[i] | cvalue;
return i + 1;
#else
-return 0; /* Keep compiler happy; this function won't ever be */
-#endif /* called when SUPPORT_UTF8 is not defined. */
+(void)(cvalue); /* Keep compiler happy; this function won't ever be */
+(void)(buffer); /* called when SUPPORT_UTF8 is not defined. */
+return 0;
+#endif
}
/* End of pcre_ord2utf8.c */
diff --git a/ext/pcre/pcrelib/pcre_refcount.c b/ext/pcre/pcrelib/pcre_refcount.c
index f31399ea2..2cc5a9d9f 100644
--- a/ext/pcre/pcrelib/pcre_refcount.c
+++ b/ext/pcre/pcrelib/pcre_refcount.c
@@ -6,7 +6,7 @@
and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
- Copyright (c) 1997-2008 University of Cambridge
+ Copyright (c) 1997-2009 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -66,7 +66,7 @@ Returns: the (possibly updated) count value (a non-negative number), or
a negative error number
*/
-PCRE_EXP_DEFN int
+PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
pcre_refcount(pcre *argument_re, int adjust)
{
real_pcre *re = (real_pcre *)argument_re;
diff --git a/ext/pcre/pcrelib/pcre_study.c b/ext/pcre/pcrelib/pcre_study.c
index b396d7218..97e3a92f7 100644
--- a/ext/pcre/pcrelib/pcre_study.c
+++ b/ext/pcre/pcrelib/pcre_study.c
@@ -6,7 +6,7 @@
and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
- Copyright (c) 1997-2008 University of Cambridge
+ Copyright (c) 1997-2009 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -215,6 +215,14 @@ do
tcode += 1 + LINK_SIZE;
break;
+ /* SKIPZERO skips the bracket. */
+
+ case OP_SKIPZERO:
+ tcode++;
+ do tcode += GET(tcode,1); while (*tcode == OP_ALT);
+ tcode += 1 + LINK_SIZE;
+ break;
+
/* Single-char * or ? sets the bit and tries the next item */
case OP_STAR:
@@ -339,6 +347,7 @@ do
switch(tcode[1])
{
case OP_ANY:
+ case OP_ALLANY:
return SSB_FAIL;
case OP_NOT_DIGIT:
@@ -493,7 +502,7 @@ Returns: pointer to a pcre_extra block, with study_data filled in and the
NULL on error or if no optimization possible
*/
-PCRE_EXP_DEFN pcre_extra *
+PCRE_EXP_DEFN pcre_extra * PCRE_CALL_CONVENTION
pcre_study(const pcre *external_re, int options, const char **errorptr)
{
uschar start_bits[32];
diff --git a/ext/pcre/pcrelib/pcre_tables.c b/ext/pcre/pcrelib/pcre_tables.c
index 646ddb568..08e5a4a84 100644
--- a/ext/pcre/pcrelib/pcre_tables.c
+++ b/ext/pcre/pcrelib/pcre_tables.c
@@ -6,7 +6,7 @@
and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
- Copyright (c) 1997-2008 University of Cambridge
+ Copyright (c) 1997-2009 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -85,6 +85,19 @@ const uschar _pcre_utf8_table4[] = {
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 };
+/* Table to translate from particular type value to the general value. */
+
+const int _pcre_ucp_gentype[] = {
+ ucp_C, ucp_C, ucp_C, ucp_C, ucp_C, /* Cc, Cf, Cn, Co, Cs */
+ ucp_L, ucp_L, ucp_L, ucp_L, ucp_L, /* Ll, Lu, Lm, Lo, Lt */
+ ucp_M, ucp_M, ucp_M, /* Mc, Me, Mn */
+ ucp_N, ucp_N, ucp_N, /* Nd, Nl, No */
+ ucp_P, ucp_P, ucp_P, ucp_P, ucp_P, /* Pc, Pd, Pe, Pf, Pi */
+ ucp_P, ucp_P, /* Ps, Po */
+ ucp_S, ucp_S, ucp_S, ucp_S, /* Sc, Sk, Sm, So */
+ ucp_Z, ucp_Z, ucp_Z /* Zl, Zp, Zs */
+};
+
/* The pcre_utt[] table below translates Unicode property names into type and
code values. It is searched by binary chop, so must be in collating sequence of
name. Originally, the table contained pointers to the name strings in the first
@@ -92,7 +105,10 @@ field of each entry. However, that leads to a large number of relocations when
a shared library is dynamically loaded. A significant reduction is made by
putting all the names into a single, large string and then using offsets in the
table itself. Maintenance is more error-prone, but frequent changes to this
-data is unlikely. */
+data are unlikely.
+
+July 2008: There is now a script called maint/GenerateUtt.py which can be used
+to generate this data instead of maintaining it entirely by hand. */
const char _pcre_utt_names[] =
"Any\0"
@@ -106,8 +122,10 @@ const char _pcre_utt_names[] =
"Buhid\0"
"C\0"
"Canadian_Aboriginal\0"
+ "Carian\0"
"Cc\0"
"Cf\0"
+ "Cham\0"
"Cherokee\0"
"Cn\0"
"Co\0"
@@ -134,12 +152,14 @@ const char _pcre_utt_names[] =
"Inherited\0"
"Kannada\0"
"Katakana\0"
+ "Kayah_Li\0"
"Kharoshthi\0"
"Khmer\0"
"L\0"
"L&\0"
"Lao\0"
"Latin\0"
+ "Lepcha\0"
"Limbu\0"
"Linear_B\0"
"Ll\0"
@@ -147,6 +167,8 @@ const char _pcre_utt_names[] =
"Lo\0"
"Lt\0"
"Lu\0"
+ "Lycian\0"
+ "Lydian\0"
"M\0"
"Malayalam\0"
"Mc\0"
@@ -161,6 +183,7 @@ const char _pcre_utt_names[] =
"Nl\0"
"No\0"
"Ogham\0"
+ "Ol_Chiki\0"
"Old_Italic\0"
"Old_Persian\0"
"Oriya\0"
@@ -175,14 +198,17 @@ const char _pcre_utt_names[] =
"Pi\0"
"Po\0"
"Ps\0"
+ "Rejang\0"
"Runic\0"
"S\0"
+ "Saurashtra\0"
"Sc\0"
"Shavian\0"
"Sinhala\0"
"Sk\0"
"Sm\0"
"So\0"
+ "Sundanese\0"
"Syloti_Nagri\0"
"Syriac\0"
"Tagalog\0"
@@ -195,6 +221,7 @@ const char _pcre_utt_names[] =
"Tibetan\0"
"Tifinagh\0"
"Ugaritic\0"
+ "Vai\0"
"Yi\0"
"Z\0"
"Zl\0"
@@ -202,111 +229,122 @@ const char _pcre_utt_names[] =
"Zs\0";
const ucp_type_table _pcre_utt[] = {
- { 0, PT_ANY, 0 },
- { 4, PT_SC, ucp_Arabic },
- { 11, PT_SC, ucp_Armenian },
- { 20, PT_SC, ucp_Balinese },
- { 29, PT_SC, ucp_Bengali },
- { 37, PT_SC, ucp_Bopomofo },
- { 46, PT_SC, ucp_Braille },
- { 54, PT_SC, ucp_Buginese },
- { 63, PT_SC, ucp_Buhid },
- { 69, PT_GC, ucp_C },
- { 71, PT_SC, ucp_Canadian_Aboriginal },
- { 91, PT_PC, ucp_Cc },
- { 94, PT_PC, ucp_Cf },
- { 97, PT_SC, ucp_Cherokee },
- { 106, PT_PC, ucp_Cn },
- { 109, PT_PC, ucp_Co },
- { 112, PT_SC, ucp_Common },
- { 119, PT_SC, ucp_Coptic },
- { 126, PT_PC, ucp_Cs },
- { 129, PT_SC, ucp_Cuneiform },
- { 139, PT_SC, ucp_Cypriot },
- { 147, PT_SC, ucp_Cyrillic },
- { 156, PT_SC, ucp_Deseret },
- { 164, PT_SC, ucp_Devanagari },
- { 175, PT_SC, ucp_Ethiopic },
- { 184, PT_SC, ucp_Georgian },
- { 193, PT_SC, ucp_Glagolitic },
- { 204, PT_SC, ucp_Gothic },
- { 211, PT_SC, ucp_Greek },
- { 217, PT_SC, ucp_Gujarati },
- { 226, PT_SC, ucp_Gurmukhi },
- { 235, PT_SC, ucp_Han },
- { 239, PT_SC, ucp_Hangul },
- { 246, PT_SC, ucp_Hanunoo },
- { 254, PT_SC, ucp_Hebrew },
- { 261, PT_SC, ucp_Hiragana },
- { 270, PT_SC, ucp_Inherited },
- { 280, PT_SC, ucp_Kannada },
- { 288, PT_SC, ucp_Katakana },
- { 297, PT_SC, ucp_Kharoshthi },
- { 308, PT_SC, ucp_Khmer },
- { 314, PT_GC, ucp_L },
- { 316, PT_LAMP, 0 },
- { 319, PT_SC, ucp_Lao },
- { 323, PT_SC, ucp_Latin },
- { 329, PT_SC, ucp_Limbu },
- { 335, PT_SC, ucp_Linear_B },
- { 344, PT_PC, ucp_Ll },
- { 347, PT_PC, ucp_Lm },
- { 350, PT_PC, ucp_Lo },
- { 353, PT_PC, ucp_Lt },
- { 356, PT_PC, ucp_Lu },
- { 359, PT_GC, ucp_M },
- { 361, PT_SC, ucp_Malayalam },
- { 371, PT_PC, ucp_Mc },
- { 374, PT_PC, ucp_Me },
- { 377, PT_PC, ucp_Mn },
- { 380, PT_SC, ucp_Mongolian },
- { 390, PT_SC, ucp_Myanmar },
- { 398, PT_GC, ucp_N },
- { 400, PT_PC, ucp_Nd },
- { 403, PT_SC, ucp_New_Tai_Lue },
- { 415, PT_SC, ucp_Nko },
- { 419, PT_PC, ucp_Nl },
- { 422, PT_PC, ucp_No },
- { 425, PT_SC, ucp_Ogham },
- { 431, PT_SC, ucp_Old_Italic },
- { 442, PT_SC, ucp_Old_Persian },
- { 454, PT_SC, ucp_Oriya },
- { 460, PT_SC, ucp_Osmanya },
- { 468, PT_GC, ucp_P },
- { 470, PT_PC, ucp_Pc },
- { 473, PT_PC, ucp_Pd },
- { 476, PT_PC, ucp_Pe },
- { 479, PT_PC, ucp_Pf },
- { 482, PT_SC, ucp_Phags_Pa },
- { 491, PT_SC, ucp_Phoenician },
- { 502, PT_PC, ucp_Pi },
- { 505, PT_PC, ucp_Po },
- { 508, PT_PC, ucp_Ps },
- { 511, PT_SC, ucp_Runic },
- { 517, PT_GC, ucp_S },
- { 519, PT_PC, ucp_Sc },
- { 522, PT_SC, ucp_Shavian },
- { 530, PT_SC, ucp_Sinhala },
- { 538, PT_PC, ucp_Sk },
- { 541, PT_PC, ucp_Sm },
- { 544, PT_PC, ucp_So },
- { 547, PT_SC, ucp_Syloti_Nagri },
- { 560, PT_SC, ucp_Syriac },
- { 567, PT_SC, ucp_Tagalog },
- { 575, PT_SC, ucp_Tagbanwa },
- { 584, PT_SC, ucp_Tai_Le },
- { 591, PT_SC, ucp_Tamil },
- { 597, PT_SC, ucp_Telugu },
- { 604, PT_SC, ucp_Thaana },
- { 611, PT_SC, ucp_Thai },
- { 616, PT_SC, ucp_Tibetan },
- { 624, PT_SC, ucp_Tifinagh },
- { 633, PT_SC, ucp_Ugaritic },
- { 642, PT_SC, ucp_Yi },
- { 645, PT_GC, ucp_Z },
- { 647, PT_PC, ucp_Zl },
- { 650, PT_PC, ucp_Zp },
- { 653, PT_PC, ucp_Zs }
+ { 0, PT_ANY, 0 },
+ { 4, PT_SC, ucp_Arabic },
+ { 11, PT_SC, ucp_Armenian },
+ { 20, PT_SC, ucp_Balinese },
+ { 29, PT_SC, ucp_Bengali },
+ { 37, PT_SC, ucp_Bopomofo },
+ { 46, PT_SC, ucp_Braille },
+ { 54, PT_SC, ucp_Buginese },
+ { 63, PT_SC, ucp_Buhid },
+ { 69, PT_GC, ucp_C },
+ { 71, PT_SC, ucp_Canadian_Aboriginal },
+ { 91, PT_SC, ucp_Carian },
+ { 98, PT_PC, ucp_Cc },
+ { 101, PT_PC, ucp_Cf },
+ { 104, PT_SC, ucp_Cham },
+ { 109, PT_SC, ucp_Cherokee },
+ { 118, PT_PC, ucp_Cn },
+ { 121, PT_PC, ucp_Co },
+ { 124, PT_SC, ucp_Common },
+ { 131, PT_SC, ucp_Coptic },
+ { 138, PT_PC, ucp_Cs },
+ { 141, PT_SC, ucp_Cuneiform },
+ { 151, PT_SC, ucp_Cypriot },
+ { 159, PT_SC, ucp_Cyrillic },
+ { 168, PT_SC, ucp_Deseret },
+ { 176, PT_SC, ucp_Devanagari },
+ { 187, PT_SC, ucp_Ethiopic },
+ { 196, PT_SC, ucp_Georgian },
+ { 205, PT_SC, ucp_Glagolitic },
+ { 216, PT_SC, ucp_Gothic },
+ { 223, PT_SC, ucp_Greek },
+ { 229, PT_SC, ucp_Gujarati },
+ { 238, PT_SC, ucp_Gurmukhi },
+ { 247, PT_SC, ucp_Han },
+ { 251, PT_SC, ucp_Hangul },
+ { 258, PT_SC, ucp_Hanunoo },
+ { 266, PT_SC, ucp_Hebrew },
+ { 273, PT_SC, ucp_Hiragana },
+ { 282, PT_SC, ucp_Inherited },
+ { 292, PT_SC, ucp_Kannada },
+ { 300, PT_SC, ucp_Katakana },
+ { 309, PT_SC, ucp_Kayah_Li },
+ { 318, PT_SC, ucp_Kharoshthi },
+ { 329, PT_SC, ucp_Khmer },
+ { 335, PT_GC, ucp_L },
+ { 337, PT_LAMP, 0 },
+ { 340, PT_SC, ucp_Lao },
+ { 344, PT_SC, ucp_Latin },
+ { 350, PT_SC, ucp_Lepcha },
+ { 357, PT_SC, ucp_Limbu },
+ { 363, PT_SC, ucp_Linear_B },
+ { 372, PT_PC, ucp_Ll },
+ { 375, PT_PC, ucp_Lm },
+ { 378, PT_PC, ucp_Lo },
+ { 381, PT_PC, ucp_Lt },
+ { 384, PT_PC, ucp_Lu },
+ { 387, PT_SC, ucp_Lycian },
+ { 394, PT_SC, ucp_Lydian },
+ { 401, PT_GC, ucp_M },
+ { 403, PT_SC, ucp_Malayalam },
+ { 413, PT_PC, ucp_Mc },
+ { 416, PT_PC, ucp_Me },
+ { 419, PT_PC, ucp_Mn },
+ { 422, PT_SC, ucp_Mongolian },
+ { 432, PT_SC, ucp_Myanmar },
+ { 440, PT_GC, ucp_N },
+ { 442, PT_PC, ucp_Nd },
+ { 445, PT_SC, ucp_New_Tai_Lue },
+ { 457, PT_SC, ucp_Nko },
+ { 461, PT_PC, ucp_Nl },
+ { 464, PT_PC, ucp_No },
+ { 467, PT_SC, ucp_Ogham },
+ { 473, PT_SC, ucp_Ol_Chiki },
+ { 482, PT_SC, ucp_Old_Italic },
+ { 493, PT_SC, ucp_Old_Persian },
+ { 505, PT_SC, ucp_Oriya },
+ { 511, PT_SC, ucp_Osmanya },
+ { 519, PT_GC, ucp_P },
+ { 521, PT_PC, ucp_Pc },
+ { 524, PT_PC, ucp_Pd },
+ { 527, PT_PC, ucp_Pe },
+ { 530, PT_PC, ucp_Pf },
+ { 533, PT_SC, ucp_Phags_Pa },
+ { 542, PT_SC, ucp_Phoenician },
+ { 553, PT_PC, ucp_Pi },
+ { 556, PT_PC, ucp_Po },
+ { 559, PT_PC, ucp_Ps },
+ { 562, PT_SC, ucp_Rejang },
+ { 569, PT_SC, ucp_Runic },
+ { 575, PT_GC, ucp_S },
+ { 577, PT_SC, ucp_Saurashtra },
+ { 588, PT_PC, ucp_Sc },
+ { 591, PT_SC, ucp_Shavian },
+ { 599, PT_SC, ucp_Sinhala },
+ { 607, PT_PC, ucp_Sk },
+ { 610, PT_PC, ucp_Sm },
+ { 613, PT_PC, ucp_So },
+ { 616, PT_SC, ucp_Sundanese },
+ { 626, PT_SC, ucp_Syloti_Nagri },
+ { 639, PT_SC, ucp_Syriac },
+ { 646, PT_SC, ucp_Tagalog },
+ { 654, PT_SC, ucp_Tagbanwa },
+ { 663, PT_SC, ucp_Tai_Le },
+ { 670, PT_SC, ucp_Tamil },
+ { 676, PT_SC, ucp_Telugu },
+ { 683, PT_SC, ucp_Thaana },
+ { 690, PT_SC, ucp_Thai },
+ { 695, PT_SC, ucp_Tibetan },
+ { 703, PT_SC, ucp_Tifinagh },
+ { 712, PT_SC, ucp_Ugaritic },
+ { 721, PT_SC, ucp_Vai },
+ { 725, PT_SC, ucp_Yi },
+ { 728, PT_GC, ucp_Z },
+ { 730, PT_PC, ucp_Zl },
+ { 733, PT_PC, ucp_Zp },
+ { 736, PT_PC, ucp_Zs }
};
const int _pcre_utt_size = sizeof(_pcre_utt)/sizeof(ucp_type_table);
diff --git a/ext/pcre/pcrelib/pcre_try_flipped.c b/ext/pcre/pcrelib/pcre_try_flipped.c
index 5e67943cc..6a8a770da 100644
--- a/ext/pcre/pcrelib/pcre_try_flipped.c
+++ b/ext/pcre/pcrelib/pcre_try_flipped.c
@@ -6,7 +6,7 @@
and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
- Copyright (c) 1997-2008 University of Cambridge
+ Copyright (c) 1997-2009 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
diff --git a/ext/pcre/pcrelib/pcre_ucd.c b/ext/pcre/pcrelib/pcre_ucd.c
new file mode 100644
index 000000000..33394a039
--- /dev/null
+++ b/ext/pcre/pcrelib/pcre_ucd.c
@@ -0,0 +1,2608 @@
+#include "config.h"
+#include "pcre_internal.h"
+
+/* Unicode character database. */
+/* This file was autogenerated by the MultiStage2.py script. */
+/* Total size: 52808 bytes, block size: 128. */
+/* When recompiling tables with a new Unicode version,
+please check types in the structure definition from pcre_internal.h:
+typedef struct {
+uschar property_0;
+uschar property_1;
+pcre_int32 property_2;
+} ucd_record; */
+
+
+const ucd_record _pcre_ucd_records[] = { /* 3656 bytes, record size 8 */
+ { 9, 0, 0, }, /* 0 */
+ { 9, 29, 0, }, /* 1 */
+ { 9, 21, 0, }, /* 2 */
+ { 9, 23, 0, }, /* 3 */
+ { 9, 22, 0, }, /* 4 */
+ { 9, 18, 0, }, /* 5 */
+ { 9, 25, 0, }, /* 6 */
+ { 9, 17, 0, }, /* 7 */
+ { 9, 13, 0, }, /* 8 */
+ { 33, 9, 32, }, /* 9 */
+ { 9, 24, 0, }, /* 10 */
+ { 9, 16, 0, }, /* 11 */
+ { 33, 5, -32, }, /* 12 */
+ { 9, 26, 0, }, /* 13 */
+ { 33, 5, 0, }, /* 14 */
+ { 9, 20, 0, }, /* 15 */
+ { 9, 1, 0, }, /* 16 */
+ { 9, 15, 0, }, /* 17 */
+ { 9, 5, 743, }, /* 18 */
+ { 9, 19, 0, }, /* 19 */
+ { 33, 5, 121, }, /* 20 */
+ { 33, 9, 1, }, /* 21 */
+ { 33, 5, -1, }, /* 22 */
+ { 33, 9, -199, }, /* 23 */
+ { 33, 5, -232, }, /* 24 */
+ { 33, 9, -121, }, /* 25 */
+ { 33, 5, -300, }, /* 26 */
+ { 33, 5, 195, }, /* 27 */
+ { 33, 9, 210, }, /* 28 */
+ { 33, 9, 206, }, /* 29 */
+ { 33, 9, 205, }, /* 30 */
+ { 33, 9, 79, }, /* 31 */
+ { 33, 9, 202, }, /* 32 */
+ { 33, 9, 203, }, /* 33 */
+ { 33, 9, 207, }, /* 34 */
+ { 33, 5, 97, }, /* 35 */
+ { 33, 9, 211, }, /* 36 */
+ { 33, 9, 209, }, /* 37 */
+ { 33, 5, 163, }, /* 38 */
+ { 33, 9, 213, }, /* 39 */
+ { 33, 5, 130, }, /* 40 */
+ { 33, 9, 214, }, /* 41 */
+ { 33, 9, 218, }, /* 42 */
+ { 33, 9, 217, }, /* 43 */
+ { 33, 9, 219, }, /* 44 */
+ { 33, 7, 0, }, /* 45 */
+ { 33, 5, 56, }, /* 46 */
+ { 33, 9, 2, }, /* 47 */
+ { 33, 8, -1, }, /* 48 */
+ { 33, 5, -2, }, /* 49 */
+ { 33, 5, -79, }, /* 50 */
+ { 33, 9, -97, }, /* 51 */
+ { 33, 9, -56, }, /* 52 */
+ { 33, 9, -130, }, /* 53 */
+ { 33, 9, 10795, }, /* 54 */
+ { 33, 9, -163, }, /* 55 */
+ { 33, 9, 10792, }, /* 56 */
+ { 33, 9, -195, }, /* 57 */
+ { 33, 9, 69, }, /* 58 */
+ { 33, 9, 71, }, /* 59 */
+ { 33, 5, 10783, }, /* 60 */
+ { 33, 5, 10780, }, /* 61 */
+ { 33, 5, -210, }, /* 62 */
+ { 33, 5, -206, }, /* 63 */
+ { 33, 5, -205, }, /* 64 */
+ { 33, 5, -202, }, /* 65 */
+ { 33, 5, -203, }, /* 66 */
+ { 33, 5, -207, }, /* 67 */
+ { 33, 5, -209, }, /* 68 */
+ { 33, 5, -211, }, /* 69 */
+ { 33, 5, 10743, }, /* 70 */
+ { 33, 5, 10749, }, /* 71 */
+ { 33, 5, -213, }, /* 72 */
+ { 33, 5, -214, }, /* 73 */
+ { 33, 5, 10727, }, /* 74 */
+ { 33, 5, -218, }, /* 75 */
+ { 33, 5, -69, }, /* 76 */
+ { 33, 5, -217, }, /* 77 */
+ { 33, 5, -71, }, /* 78 */
+ { 33, 5, -219, }, /* 79 */
+ { 33, 6, 0, }, /* 80 */
+ { 9, 6, 0, }, /* 81 */
+ { 27, 12, 0, }, /* 82 */
+ { 27, 12, 84, }, /* 83 */
+ { 19, 9, 1, }, /* 84 */
+ { 19, 5, -1, }, /* 85 */
+ { 19, 24, 0, }, /* 86 */
+ { 9, 2, 0, }, /* 87 */
+ { 19, 6, 0, }, /* 88 */
+ { 19, 5, 130, }, /* 89 */
+ { 19, 9, 38, }, /* 90 */
+ { 19, 9, 37, }, /* 91 */
+ { 19, 9, 64, }, /* 92 */
+ { 19, 9, 63, }, /* 93 */
+ { 19, 5, 0, }, /* 94 */
+ { 19, 9, 32, }, /* 95 */
+ { 19, 5, -38, }, /* 96 */
+ { 19, 5, -37, }, /* 97 */
+ { 19, 5, -32, }, /* 98 */
+ { 19, 5, -31, }, /* 99 */
+ { 19, 5, -64, }, /* 100 */
+ { 19, 5, -63, }, /* 101 */
+ { 19, 9, 8, }, /* 102 */
+ { 19, 5, -62, }, /* 103 */
+ { 19, 5, -57, }, /* 104 */
+ { 19, 9, 0, }, /* 105 */
+ { 19, 5, -47, }, /* 106 */
+ { 19, 5, -54, }, /* 107 */
+ { 19, 5, -8, }, /* 108 */
+ { 10, 9, 1, }, /* 109 */
+ { 10, 5, -1, }, /* 110 */
+ { 19, 5, -86, }, /* 111 */
+ { 19, 5, -80, }, /* 112 */
+ { 19, 5, 7, }, /* 113 */
+ { 19, 9, -60, }, /* 114 */
+ { 19, 5, -96, }, /* 115 */
+ { 19, 25, 0, }, /* 116 */
+ { 19, 9, -7, }, /* 117 */
+ { 19, 9, -130, }, /* 118 */
+ { 12, 9, 80, }, /* 119 */
+ { 12, 9, 32, }, /* 120 */
+ { 12, 5, -32, }, /* 121 */
+ { 12, 5, -80, }, /* 122 */
+ { 12, 9, 1, }, /* 123 */
+ { 12, 5, -1, }, /* 124 */
+ { 12, 26, 0, }, /* 125 */
+ { 12, 12, 0, }, /* 126 */
+ { 12, 11, 0, }, /* 127 */
+ { 12, 9, 15, }, /* 128 */
+ { 12, 5, -15, }, /* 129 */
+ { 1, 9, 48, }, /* 130 */
+ { 1, 6, 0, }, /* 131 */
+ { 1, 21, 0, }, /* 132 */
+ { 1, 5, -48, }, /* 133 */
+ { 1, 5, 0, }, /* 134 */
+ { 1, 17, 0, }, /* 135 */
+ { 25, 12, 0, }, /* 136 */
+ { 25, 17, 0, }, /* 137 */
+ { 25, 21, 0, }, /* 138 */
+ { 25, 7, 0, }, /* 139 */
+ { 0, 25, 0, }, /* 140 */
+ { 0, 21, 0, }, /* 141 */
+ { 0, 23, 0, }, /* 142 */
+ { 0, 26, 0, }, /* 143 */
+ { 0, 12, 0, }, /* 144 */
+ { 0, 7, 0, }, /* 145 */
+ { 0, 11, 0, }, /* 146 */
+ { 0, 6, 0, }, /* 147 */
+ { 0, 13, 0, }, /* 148 */
+ { 49, 21, 0, }, /* 149 */
+ { 49, 1, 0, }, /* 150 */
+ { 49, 7, 0, }, /* 151 */
+ { 49, 12, 0, }, /* 152 */
+ { 55, 7, 0, }, /* 153 */
+ { 55, 12, 0, }, /* 154 */
+ { 63, 13, 0, }, /* 155 */
+ { 63, 7, 0, }, /* 156 */
+ { 63, 12, 0, }, /* 157 */
+ { 63, 6, 0, }, /* 158 */
+ { 63, 26, 0, }, /* 159 */
+ { 63, 21, 0, }, /* 160 */
+ { 14, 12, 0, }, /* 161 */
+ { 14, 10, 0, }, /* 162 */
+ { 14, 7, 0, }, /* 163 */
+ { 14, 13, 0, }, /* 164 */
+ { 14, 6, 0, }, /* 165 */
+ { 2, 12, 0, }, /* 166 */
+ { 2, 10, 0, }, /* 167 */
+ { 2, 7, 0, }, /* 168 */
+ { 2, 13, 0, }, /* 169 */
+ { 2, 23, 0, }, /* 170 */
+ { 2, 15, 0, }, /* 171 */
+ { 2, 26, 0, }, /* 172 */
+ { 21, 12, 0, }, /* 173 */
+ { 21, 10, 0, }, /* 174 */
+ { 21, 7, 0, }, /* 175 */
+ { 21, 13, 0, }, /* 176 */
+ { 20, 12, 0, }, /* 177 */
+ { 20, 10, 0, }, /* 178 */
+ { 20, 7, 0, }, /* 179 */
+ { 20, 13, 0, }, /* 180 */
+ { 20, 23, 0, }, /* 181 */
+ { 43, 12, 0, }, /* 182 */
+ { 43, 10, 0, }, /* 183 */
+ { 43, 7, 0, }, /* 184 */
+ { 43, 13, 0, }, /* 185 */
+ { 43, 26, 0, }, /* 186 */
+ { 53, 12, 0, }, /* 187 */
+ { 53, 7, 0, }, /* 188 */
+ { 53, 10, 0, }, /* 189 */
+ { 53, 13, 0, }, /* 190 */
+ { 53, 15, 0, }, /* 191 */
+ { 53, 26, 0, }, /* 192 */
+ { 53, 23, 0, }, /* 193 */
+ { 54, 10, 0, }, /* 194 */
+ { 54, 7, 0, }, /* 195 */
+ { 54, 12, 0, }, /* 196 */
+ { 54, 13, 0, }, /* 197 */
+ { 54, 15, 0, }, /* 198 */
+ { 54, 26, 0, }, /* 199 */
+ { 28, 10, 0, }, /* 200 */
+ { 28, 7, 0, }, /* 201 */
+ { 28, 12, 0, }, /* 202 */
+ { 28, 13, 0, }, /* 203 */
+ { 36, 10, 0, }, /* 204 */
+ { 36, 7, 0, }, /* 205 */
+ { 36, 12, 0, }, /* 206 */
+ { 36, 13, 0, }, /* 207 */
+ { 36, 15, 0, }, /* 208 */
+ { 36, 26, 0, }, /* 209 */
+ { 47, 10, 0, }, /* 210 */
+ { 47, 7, 0, }, /* 211 */
+ { 47, 12, 0, }, /* 212 */
+ { 47, 21, 0, }, /* 213 */
+ { 56, 7, 0, }, /* 214 */
+ { 56, 12, 0, }, /* 215 */
+ { 56, 6, 0, }, /* 216 */
+ { 56, 21, 0, }, /* 217 */
+ { 56, 13, 0, }, /* 218 */
+ { 32, 7, 0, }, /* 219 */
+ { 32, 12, 0, }, /* 220 */
+ { 32, 6, 0, }, /* 221 */
+ { 32, 13, 0, }, /* 222 */
+ { 57, 7, 0, }, /* 223 */
+ { 57, 26, 0, }, /* 224 */
+ { 57, 21, 0, }, /* 225 */
+ { 57, 12, 0, }, /* 226 */
+ { 57, 13, 0, }, /* 227 */
+ { 57, 15, 0, }, /* 228 */
+ { 57, 22, 0, }, /* 229 */
+ { 57, 18, 0, }, /* 230 */
+ { 57, 10, 0, }, /* 231 */
+ { 38, 7, 0, }, /* 232 */
+ { 38, 10, 0, }, /* 233 */
+ { 38, 12, 0, }, /* 234 */
+ { 38, 13, 0, }, /* 235 */
+ { 38, 21, 0, }, /* 236 */
+ { 38, 26, 0, }, /* 237 */
+ { 16, 9, 7264, }, /* 238 */
+ { 16, 7, 0, }, /* 239 */
+ { 16, 6, 0, }, /* 240 */
+ { 23, 7, 0, }, /* 241 */
+ { 15, 7, 0, }, /* 242 */
+ { 15, 12, 0, }, /* 243 */
+ { 15, 26, 0, }, /* 244 */
+ { 15, 21, 0, }, /* 245 */
+ { 15, 15, 0, }, /* 246 */
+ { 8, 7, 0, }, /* 247 */
+ { 7, 7, 0, }, /* 248 */
+ { 7, 21, 0, }, /* 249 */
+ { 40, 29, 0, }, /* 250 */
+ { 40, 7, 0, }, /* 251 */
+ { 40, 22, 0, }, /* 252 */
+ { 40, 18, 0, }, /* 253 */
+ { 45, 7, 0, }, /* 254 */
+ { 45, 14, 0, }, /* 255 */
+ { 50, 7, 0, }, /* 256 */
+ { 50, 12, 0, }, /* 257 */
+ { 24, 7, 0, }, /* 258 */
+ { 24, 12, 0, }, /* 259 */
+ { 6, 7, 0, }, /* 260 */
+ { 6, 12, 0, }, /* 261 */
+ { 51, 7, 0, }, /* 262 */
+ { 51, 12, 0, }, /* 263 */
+ { 31, 7, 0, }, /* 264 */
+ { 31, 1, 0, }, /* 265 */
+ { 31, 10, 0, }, /* 266 */
+ { 31, 12, 0, }, /* 267 */
+ { 31, 21, 0, }, /* 268 */
+ { 31, 6, 0, }, /* 269 */
+ { 31, 23, 0, }, /* 270 */
+ { 31, 13, 0, }, /* 271 */
+ { 31, 15, 0, }, /* 272 */
+ { 37, 21, 0, }, /* 273 */
+ { 37, 17, 0, }, /* 274 */
+ { 37, 12, 0, }, /* 275 */
+ { 37, 29, 0, }, /* 276 */
+ { 37, 13, 0, }, /* 277 */
+ { 37, 7, 0, }, /* 278 */
+ { 37, 6, 0, }, /* 279 */
+ { 34, 7, 0, }, /* 280 */
+ { 34, 12, 0, }, /* 281 */
+ { 34, 10, 0, }, /* 282 */
+ { 34, 26, 0, }, /* 283 */
+ { 34, 21, 0, }, /* 284 */
+ { 34, 13, 0, }, /* 285 */
+ { 52, 7, 0, }, /* 286 */
+ { 39, 7, 0, }, /* 287 */
+ { 39, 10, 0, }, /* 288 */
+ { 39, 13, 0, }, /* 289 */
+ { 39, 21, 0, }, /* 290 */
+ { 31, 26, 0, }, /* 291 */
+ { 5, 7, 0, }, /* 292 */
+ { 5, 12, 0, }, /* 293 */
+ { 5, 10, 0, }, /* 294 */
+ { 5, 21, 0, }, /* 295 */
+ { 61, 12, 0, }, /* 296 */
+ { 61, 10, 0, }, /* 297 */
+ { 61, 7, 0, }, /* 298 */
+ { 61, 13, 0, }, /* 299 */
+ { 61, 21, 0, }, /* 300 */
+ { 61, 26, 0, }, /* 301 */
+ { 75, 12, 0, }, /* 302 */
+ { 75, 10, 0, }, /* 303 */
+ { 75, 7, 0, }, /* 304 */
+ { 75, 13, 0, }, /* 305 */
+ { 69, 7, 0, }, /* 306 */
+ { 69, 10, 0, }, /* 307 */
+ { 69, 12, 0, }, /* 308 */
+ { 69, 21, 0, }, /* 309 */
+ { 69, 13, 0, }, /* 310 */
+ { 72, 13, 0, }, /* 311 */
+ { 72, 7, 0, }, /* 312 */
+ { 72, 6, 0, }, /* 313 */
+ { 72, 21, 0, }, /* 314 */
+ { 12, 5, 0, }, /* 315 */
+ { 12, 6, 0, }, /* 316 */
+ { 33, 5, 35332, }, /* 317 */
+ { 33, 5, 3814, }, /* 318 */
+ { 33, 5, -59, }, /* 319 */
+ { 33, 9, -7615, }, /* 320 */
+ { 19, 5, 8, }, /* 321 */
+ { 19, 9, -8, }, /* 322 */
+ { 19, 5, 74, }, /* 323 */
+ { 19, 5, 86, }, /* 324 */
+ { 19, 5, 100, }, /* 325 */
+ { 19, 5, 128, }, /* 326 */
+ { 19, 5, 112, }, /* 327 */
+ { 19, 5, 126, }, /* 328 */
+ { 19, 8, -8, }, /* 329 */
+ { 19, 5, 9, }, /* 330 */
+ { 19, 9, -74, }, /* 331 */
+ { 19, 8, -9, }, /* 332 */
+ { 19, 5, -7205, }, /* 333 */
+ { 19, 9, -86, }, /* 334 */
+ { 19, 9, -100, }, /* 335 */
+ { 19, 9, -112, }, /* 336 */
+ { 19, 9, -128, }, /* 337 */
+ { 19, 9, -126, }, /* 338 */
+ { 27, 1, 0, }, /* 339 */
+ { 9, 27, 0, }, /* 340 */
+ { 9, 28, 0, }, /* 341 */
+ { 27, 11, 0, }, /* 342 */
+ { 9, 9, 0, }, /* 343 */
+ { 9, 5, 0, }, /* 344 */
+ { 19, 9, -7517, }, /* 345 */
+ { 33, 9, -8383, }, /* 346 */
+ { 33, 9, -8262, }, /* 347 */
+ { 33, 9, 28, }, /* 348 */
+ { 9, 7, 0, }, /* 349 */
+ { 33, 5, -28, }, /* 350 */
+ { 33, 14, 16, }, /* 351 */
+ { 33, 14, -16, }, /* 352 */
+ { 33, 14, 0, }, /* 353 */
+ { 9, 26, 26, }, /* 354 */
+ { 9, 26, -26, }, /* 355 */
+ { 4, 26, 0, }, /* 356 */
+ { 17, 9, 48, }, /* 357 */
+ { 17, 5, -48, }, /* 358 */
+ { 33, 9, -10743, }, /* 359 */
+ { 33, 9, -3814, }, /* 360 */
+ { 33, 9, -10727, }, /* 361 */
+ { 33, 5, -10795, }, /* 362 */
+ { 33, 5, -10792, }, /* 363 */
+ { 33, 9, -10780, }, /* 364 */
+ { 33, 9, -10749, }, /* 365 */
+ { 33, 9, -10783, }, /* 366 */
+ { 10, 5, 0, }, /* 367 */
+ { 10, 26, 0, }, /* 368 */
+ { 10, 21, 0, }, /* 369 */
+ { 10, 15, 0, }, /* 370 */
+ { 16, 5, -7264, }, /* 371 */
+ { 58, 7, 0, }, /* 372 */
+ { 58, 6, 0, }, /* 373 */
+ { 22, 26, 0, }, /* 374 */
+ { 22, 6, 0, }, /* 375 */
+ { 22, 14, 0, }, /* 376 */
+ { 26, 7, 0, }, /* 377 */
+ { 26, 6, 0, }, /* 378 */
+ { 29, 7, 0, }, /* 379 */
+ { 29, 6, 0, }, /* 380 */
+ { 3, 7, 0, }, /* 381 */
+ { 23, 26, 0, }, /* 382 */
+ { 29, 26, 0, }, /* 383 */
+ { 22, 7, 0, }, /* 384 */
+ { 60, 7, 0, }, /* 385 */
+ { 60, 6, 0, }, /* 386 */
+ { 60, 26, 0, }, /* 387 */
+ { 76, 7, 0, }, /* 388 */
+ { 76, 6, 0, }, /* 389 */
+ { 76, 21, 0, }, /* 390 */
+ { 76, 13, 0, }, /* 391 */
+ { 12, 7, 0, }, /* 392 */
+ { 12, 21, 0, }, /* 393 */
+ { 33, 9, -35332, }, /* 394 */
+ { 48, 7, 0, }, /* 395 */
+ { 48, 12, 0, }, /* 396 */
+ { 48, 10, 0, }, /* 397 */
+ { 48, 26, 0, }, /* 398 */
+ { 64, 7, 0, }, /* 399 */
+ { 64, 21, 0, }, /* 400 */
+ { 74, 10, 0, }, /* 401 */
+ { 74, 7, 0, }, /* 402 */
+ { 74, 12, 0, }, /* 403 */
+ { 74, 21, 0, }, /* 404 */
+ { 74, 13, 0, }, /* 405 */
+ { 68, 13, 0, }, /* 406 */
+ { 68, 7, 0, }, /* 407 */
+ { 68, 12, 0, }, /* 408 */
+ { 68, 21, 0, }, /* 409 */
+ { 73, 7, 0, }, /* 410 */
+ { 73, 12, 0, }, /* 411 */
+ { 73, 10, 0, }, /* 412 */
+ { 73, 21, 0, }, /* 413 */
+ { 67, 7, 0, }, /* 414 */
+ { 67, 12, 0, }, /* 415 */
+ { 67, 10, 0, }, /* 416 */
+ { 67, 13, 0, }, /* 417 */
+ { 67, 21, 0, }, /* 418 */
+ { 9, 4, 0, }, /* 419 */
+ { 9, 3, 0, }, /* 420 */
+ { 25, 25, 0, }, /* 421 */
+ { 35, 7, 0, }, /* 422 */
+ { 19, 14, 0, }, /* 423 */
+ { 19, 15, 0, }, /* 424 */
+ { 19, 26, 0, }, /* 425 */
+ { 70, 7, 0, }, /* 426 */
+ { 66, 7, 0, }, /* 427 */
+ { 41, 7, 0, }, /* 428 */
+ { 41, 15, 0, }, /* 429 */
+ { 18, 7, 0, }, /* 430 */
+ { 18, 14, 0, }, /* 431 */
+ { 59, 7, 0, }, /* 432 */
+ { 59, 21, 0, }, /* 433 */
+ { 42, 7, 0, }, /* 434 */
+ { 42, 21, 0, }, /* 435 */
+ { 42, 14, 0, }, /* 436 */
+ { 13, 9, 40, }, /* 437 */
+ { 13, 5, -40, }, /* 438 */
+ { 46, 7, 0, }, /* 439 */
+ { 44, 7, 0, }, /* 440 */
+ { 44, 13, 0, }, /* 441 */
+ { 11, 7, 0, }, /* 442 */
+ { 65, 7, 0, }, /* 443 */
+ { 65, 15, 0, }, /* 444 */
+ { 65, 21, 0, }, /* 445 */
+ { 71, 7, 0, }, /* 446 */
+ { 71, 21, 0, }, /* 447 */
+ { 30, 7, 0, }, /* 448 */
+ { 30, 12, 0, }, /* 449 */
+ { 30, 15, 0, }, /* 450 */
+ { 30, 21, 0, }, /* 451 */
+ { 62, 7, 0, }, /* 452 */
+ { 62, 14, 0, }, /* 453 */
+ { 62, 21, 0, }, /* 454 */
+ { 9, 10, 0, }, /* 455 */
+ { 19, 12, 0, }, /* 456 */
+};
+
+const uschar _pcre_ucd_stage1[] = { /* 8704 bytes */
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, /* U+0000 */
+ 16, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, /* U+0800 */
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 40, 40, 41, 42, 43, 44, /* U+1000 */
+ 45, 46, 47, 48, 49, 16, 50, 51, 52, 16, 53, 54, 55, 56, 57, 58, /* U+1800 */
+ 59, 60, 61, 62, 63, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, /* U+2000 */
+ 74, 74, 63, 75, 63, 63, 76, 16, 77, 78, 79, 80, 81, 82, 83, 84, /* U+2800 */
+ 85, 86, 87, 88, 89, 90, 91, 68, 92, 92, 92, 92, 92, 92, 92, 92, /* U+3000 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+3800 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+4000 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 93, 92, 92, 92, 92, /* U+4800 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+5000 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+5800 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+6000 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+6800 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+7000 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+7800 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+8000 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+8800 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+9000 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 94, /* U+9800 */
+ 95, 96, 96, 96, 96, 96, 96, 96, 96, 97, 98, 98, 99,100,101,102, /* U+A000 */
+103,104,105, 16,106, 16, 16, 16,107,107,107,107,107,107,107,107, /* U+A800 */
+107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107, /* U+B000 */
+107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107, /* U+B800 */
+107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107, /* U+C000 */
+107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107, /* U+C800 */
+107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,108, /* U+D000 */
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109, /* U+D800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+E000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+E800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+F000 */
+110,110, 92, 92,111,112,113,114,115,115,116,117,118,119,120,121, /* U+F800 */
+122,123,124,125, 16,126,127,128,129,130, 16, 16, 16, 16, 16, 16, /* U+10000 */
+131, 16,132, 16,133, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+10800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+11000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+11800 */
+134,134,134,134,134,134,135, 16,136, 16, 16, 16, 16, 16, 16, 16, /* U+12000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+12800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+13000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+13800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+14000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+14800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+15000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+15800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+16000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+16800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+17000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+17800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+18000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+18800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+19000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+19800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+1A000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+1A800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+1B000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+1B800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+1C000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+1C800 */
+ 68,137,138,139,140, 16,141, 16,142,143,144,145,146,147,148,149, /* U+1D000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+1D800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+1E000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+1E800 */
+150,151, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+1F000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+1F800 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+20000 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+20800 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+21000 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+21800 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+22000 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+22800 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+23000 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+23800 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+24000 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+24800 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+25000 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+25800 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+26000 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+26800 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+27000 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+27800 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+28000 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+28800 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+29000 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, /* U+29800 */
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,152, 16, 16, /* U+2A000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+2A800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+2B000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+2B800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+2C000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+2C800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+2D000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+2D800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+2E000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+2E800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+2F000 */
+ 92, 92, 92, 92,153, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+2F800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+30000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+30800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+31000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+31800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+32000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+32800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+33000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+33800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+34000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+34800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+35000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+35800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+36000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+36800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+37000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+37800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+38000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+38800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+39000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+39800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+3A000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+3A800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+3B000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+3B800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+3C000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+3C800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+3D000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+3D800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+3E000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+3E800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+3F000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+3F800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+40000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+40800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+41000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+41800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+42000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+42800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+43000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+43800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+44000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+44800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+45000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+45800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+46000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+46800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+47000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+47800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+48000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+48800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+49000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+49800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+4A000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+4A800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+4B000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+4B800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+4C000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+4C800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+4D000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+4D800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+4E000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+4E800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+4F000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+4F800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+50000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+50800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+51000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+51800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+52000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+52800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+53000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+53800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+54000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+54800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+55000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+55800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+56000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+56800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+57000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+57800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+58000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+58800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+59000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+59800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+5A000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+5A800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+5B000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+5B800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+5C000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+5C800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+5D000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+5D800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+5E000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+5E800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+5F000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+5F800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+60000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+60800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+61000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+61800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+62000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+62800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+63000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+63800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+64000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+64800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+65000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+65800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+66000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+66800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+67000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+67800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+68000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+68800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+69000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+69800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+6A000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+6A800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+6B000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+6B800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+6C000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+6C800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+6D000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+6D800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+6E000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+6E800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+6F000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+6F800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+70000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+70800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+71000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+71800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+72000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+72800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+73000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+73800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+74000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+74800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+75000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+75800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+76000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+76800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+77000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+77800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+78000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+78800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+79000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+79800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+7A000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+7A800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+7B000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+7B800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+7C000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+7C800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+7D000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+7D800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+7E000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+7E800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+7F000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+7F800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+80000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+80800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+81000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+81800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+82000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+82800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+83000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+83800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+84000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+84800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+85000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+85800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+86000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+86800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+87000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+87800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+88000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+88800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+89000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+89800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+8A000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+8A800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+8B000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+8B800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+8C000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+8C800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+8D000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+8D800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+8E000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+8E800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+8F000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+8F800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+90000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+90800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+91000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+91800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+92000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+92800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+93000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+93800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+94000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+94800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+95000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+95800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+96000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+96800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+97000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+97800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+98000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+98800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+99000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+99800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+9A000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+9A800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+9B000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+9B800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+9C000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+9C800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+9D000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+9D800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+9E000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+9E800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+9F000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+9F800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+A0000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+A0800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+A1000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+A1800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+A2000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+A2800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+A3000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+A3800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+A4000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+A4800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+A5000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+A5800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+A6000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+A6800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+A7000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+A7800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+A8000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+A8800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+A9000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+A9800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+AA000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+AA800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+AB000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+AB800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+AC000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+AC800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+AD000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+AD800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+AE000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+AE800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+AF000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+AF800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+B0000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+B0800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+B1000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+B1800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+B2000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+B2800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+B3000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+B3800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+B4000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+B4800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+B5000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+B5800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+B6000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+B6800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+B7000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+B7800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+B8000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+B8800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+B9000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+B9800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+BA000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+BA800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+BB000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+BB800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+BC000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+BC800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+BD000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+BD800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+BE000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+BE800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+BF000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+BF800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+C0000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+C0800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+C1000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+C1800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+C2000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+C2800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+C3000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+C3800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+C4000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+C4800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+C5000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+C5800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+C6000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+C6800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+C7000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+C7800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+C8000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+C8800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+C9000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+C9800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+CA000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+CA800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+CB000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+CB800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+CC000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+CC800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+CD000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+CD800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+CE000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+CE800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+CF000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+CF800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+D0000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+D0800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+D1000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+D1800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+D2000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+D2800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+D3000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+D3800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+D4000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+D4800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+D5000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+D5800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+D6000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+D6800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+D7000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+D7800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+D8000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+D8800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+D9000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+D9800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+DA000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+DA800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+DB000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+DB800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+DC000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+DC800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+DD000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+DD800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+DE000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+DE800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+DF000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+DF800 */
+154, 16,155,156, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+E0000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+E0800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+E1000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+E1800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+E2000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+E2800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+E3000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+E3800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+E4000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+E4800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+E5000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+E5800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+E6000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+E6800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+E7000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+E7800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+E8000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+E8800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+E9000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+E9800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+EA000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+EA800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+EB000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+EB800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+EC000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+EC800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+ED000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+ED800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+EE000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+EE800 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+EF000 */
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* U+EF800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+F0000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+F0800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+F1000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+F1800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+F2000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+F2800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+F3000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+F3800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+F4000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+F4800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+F5000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+F5800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+F6000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+F6800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+F7000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+F7800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+F8000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+F8800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+F9000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+F9800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+FA000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+FA800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+FB000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+FB800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+FC000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+FC800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+FD000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+FD800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+FE000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+FE800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+FF000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,157, /* U+FF800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+100000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+100800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+101000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+101800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+102000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+102800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+103000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+103800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+104000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+104800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+105000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+105800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+106000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+106800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+107000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+107800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+108000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+108800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+109000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+109800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+10A000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+10A800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+10B000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+10B800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+10C000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+10C800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+10D000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+10D800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+10E000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+10E800 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, /* U+10F000 */
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,157, /* U+10F800 */
+};
+
+const pcre_uint16 _pcre_ucd_stage2[] = { /* 40448 bytes, block = 128 */
+/* block 0 */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 2, 2, 3, 2, 2, 2, 4, 5, 2, 6, 2, 7, 2, 2,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 2, 2, 6, 6, 6, 2,
+ 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 4, 2, 5, 10, 11,
+ 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 4, 6, 5, 6, 0,
+
+/* block 1 */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 3, 3, 3, 13, 13, 10, 13, 14, 15, 6, 16, 13, 10,
+ 13, 6, 17, 17, 10, 18, 13, 2, 10, 17, 14, 19, 17, 17, 17, 2,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 6, 9, 9, 9, 9, 9, 9, 9, 14,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 6, 12, 12, 12, 12, 12, 12, 12, 20,
+
+/* block 2 */
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 23, 24, 21, 22, 21, 22, 21, 22, 14, 21, 22, 21, 22, 21, 22, 21,
+ 22, 21, 22, 21, 22, 21, 22, 21, 22, 14, 21, 22, 21, 22, 21, 22,
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 21, 22, 21, 22, 21, 22, 21, 22, 25, 21, 22, 21, 22, 21, 22, 26,
+
+/* block 3 */
+ 27, 28, 21, 22, 21, 22, 29, 21, 22, 30, 30, 21, 22, 14, 31, 32,
+ 33, 21, 22, 30, 34, 35, 36, 37, 21, 22, 38, 14, 36, 39, 40, 41,
+ 21, 22, 21, 22, 21, 22, 42, 21, 22, 42, 14, 14, 21, 22, 42, 21,
+ 22, 43, 43, 21, 22, 21, 22, 44, 21, 22, 14, 45, 21, 22, 14, 46,
+ 45, 45, 45, 45, 47, 48, 49, 47, 48, 49, 47, 48, 49, 21, 22, 21,
+ 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 50, 21, 22,
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 14, 47, 48, 49, 21, 22, 51, 52, 21, 22, 21, 22, 21, 22, 21, 22,
+
+/* block 4 */
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 53, 14, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 21, 22, 21, 22, 14, 14, 14, 14, 14, 14, 54, 21, 22, 55, 56, 14,
+ 14, 21, 22, 57, 58, 59, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 60, 61, 14, 62, 63, 14, 64, 64, 14, 65, 14, 66, 14, 14, 14, 14,
+ 64, 14, 14, 67, 14, 14, 14, 14, 68, 69, 14, 70, 14, 14, 14, 69,
+ 14, 71, 72, 14, 14, 73, 14, 14, 14, 14, 14, 14, 14, 74, 14, 14,
+
+/* block 5 */
+ 75, 14, 14, 75, 14, 14, 14, 14, 75, 76, 77, 77, 78, 14, 14, 14,
+ 14, 14, 79, 14, 45, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 10, 10, 10, 10, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 80, 80, 80, 80, 80, 10, 10, 10, 10, 10, 10, 10, 81, 10, 81, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+
+/* block 6 */
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 83, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 84, 85, 84, 85, 81, 86, 84, 85, 87, 87, 88, 89, 89, 89, 2, 87,
+
+/* block 7 */
+ 87, 87, 87, 87, 86, 10, 90, 2, 91, 91, 91, 87, 92, 87, 93, 93,
+ 94, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
+ 95, 95, 87, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 97, 97, 97,
+ 94, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 99, 98, 98, 98, 98, 98, 98, 98, 98, 98,100,101,101,102,
+103,104,105,105,105,106,107,108, 84, 85, 84, 85, 84, 85, 84, 85,
+ 84, 85,109,110,109,110,109,110,109,110,109,110,109,110,109,110,
+111,112,113, 94,114,115,116, 84, 85,117, 84, 85, 94,118,118,118,
+
+/* block 8 */
+119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,
+121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,
+122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,
+123,124,123,124,123,124,123,124,123,124,123,124,123,124,123,124,
+123,124,123,124,123,124,123,124,123,124,123,124,123,124,123,124,
+
+/* block 9 */
+123,124,125,126,126,126,126,126,127,127,123,124,123,124,123,124,
+123,124,123,124,123,124,123,124,123,124,123,124,123,124,123,124,
+123,124,123,124,123,124,123,124,123,124,123,124,123,124,123,124,
+123,124,123,124,123,124,123,124,123,124,123,124,123,124,123,124,
+128,123,124,123,124,123,124,123,124,123,124,123,124,123,124,129,
+123,124,123,124,123,124,123,124,123,124,123,124,123,124,123,124,
+123,124,123,124,123,124,123,124,123,124,123,124,123,124,123,124,
+123,124,123,124,123,124,123,124,123,124,123,124,123,124,123,124,
+
+/* block 10 */
+123,124,123,124,123,124,123,124,123,124,123,124,123,124,123,124,
+123,124,123,124,123,124,123,124,123,124,123,124,123,124,123,124,
+123,124,123,124, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
+130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
+130,130,130,130,130,130,130, 87, 87,131,132,132,132,132,132,132,
+ 87,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
+133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
+
+/* block 11 */
+133,133,133,133,133,133,133,134, 87, 2,135, 87, 87, 87, 87, 87,
+ 87,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
+136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
+136,136,136,136,136,136,136,136,136,136,136,136,136,136,137,136,
+138,136,136,138,136,136,138,136, 87, 87, 87, 87, 87, 87, 87, 87,
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
+139,139,139,139,139,139,139,139,139,139,139, 87, 87, 87, 87, 87,
+139,139,139,138,138, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 12 */
+ 16, 16, 16, 16, 87, 87,140,140,140,141,141,142, 2,141,143,143,
+144,144,144,144,144,144,144,144,144,144,144, 2, 87, 87,141, 2,
+ 87,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+ 81,145,145,145,145,145,145,145,145,145,145, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82,144,144,144,144,144,144,144,144,144, 87,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,141,141,141,141,145,145,
+ 82,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+
+/* block 13 */
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,141,145,144,144,144,144,144,144,144, 16,146,144,
+144,144,144,144,144,147,147,144,144,143,144,144,144,144,145,145,
+148,148,148,148,148,148,148,148,148,148,145,145,145,143,143,145,
+
+/* block 14 */
+149,149,149,149,149,149,149,149,149,149,149,149,149,149, 87,150,
+151,152,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
+151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
+152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
+152,152,152,152,152,152,152,152,152,152,152, 87, 87,151,151,151,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+
+/* block 15 */
+153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+153,153,153,153,153,153,154,154,154,154,154,154,154,154,154,154,
+154,153, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+155,155,155,155,155,155,155,155,155,155,156,156,156,156,156,156,
+156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,
+156,156,156,156,156,156,156,156,156,156,156,157,157,157,157,157,
+157,157,157,157,158,158,159,160,160,160,158, 87, 87, 87, 87, 87,
+
+/* block 16 */
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 17 */
+ 87,161,161,162,163,163,163,163,163,163,163,163,163,163,163,163,
+163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
+163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
+163,163,163,163,163,163,163,163,163,163, 87, 87,161,163,162,162,
+162,161,161,161,161,161,161,161,161,162,162,162,162,161, 87, 87,
+163, 82, 82,161,161, 87, 87, 87,163,163,163,163,163,163,163,163,
+163,163,161,161, 2, 2,164,164,164,164,164,164,164,164,164,164,
+ 2,165,163, 87, 87, 87, 87, 87, 87, 87, 87,163,163,163,163,163,
+
+/* block 18 */
+ 87,166,167,167, 87,168,168,168,168,168,168,168,168, 87, 87,168,
+168, 87, 87,168,168,168,168,168,168,168,168,168,168,168,168,168,
+168,168,168,168,168,168,168,168,168, 87,168,168,168,168,168,168,
+168, 87,168, 87, 87, 87,168,168,168,168, 87, 87,166,168,167,167,
+167,166,166,166,166, 87, 87,167,167, 87, 87,167,167,166,168, 87,
+ 87, 87, 87, 87, 87, 87, 87,167, 87, 87, 87, 87,168,168, 87,168,
+168,168,166,166, 87, 87,169,169,169,169,169,169,169,169,169,169,
+168,168,170,170,171,171,171,171,171,171,172, 87, 87, 87, 87, 87,
+
+/* block 19 */
+ 87,173,173,174, 87,175,175,175,175,175,175, 87, 87, 87, 87,175,
+175, 87, 87,175,175,175,175,175,175,175,175,175,175,175,175,175,
+175,175,175,175,175,175,175,175,175, 87,175,175,175,175,175,175,
+175, 87,175,175, 87,175,175, 87,175,175, 87, 87,173, 87,174,174,
+174,173,173, 87, 87, 87, 87,173,173, 87, 87,173,173,173, 87, 87,
+ 87,173, 87, 87, 87, 87, 87, 87, 87,175,175,175,175, 87,175, 87,
+ 87, 87, 87, 87, 87, 87,176,176,176,176,176,176,176,176,176,176,
+173,173,175,175,175,173, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 20 */
+ 87,177,177,178, 87,179,179,179,179,179,179,179,179,179, 87,179,
+179,179, 87,179,179,179,179,179,179,179,179,179,179,179,179,179,
+179,179,179,179,179,179,179,179,179, 87,179,179,179,179,179,179,
+179, 87,179,179, 87,179,179,179,179,179, 87, 87,177,179,178,178,
+178,177,177,177,177,177, 87,177,177,178, 87,178,178,177, 87, 87,
+179, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+179,179,177,177, 87, 87,180,180,180,180,180,180,180,180,180,180,
+ 87,181, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 21 */
+ 87,182,183,183, 87,184,184,184,184,184,184,184,184, 87, 87,184,
+184, 87, 87,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,184,184,184,184,184,184,184,184, 87,184,184,184,184,184,184,
+184, 87,184,184, 87,184,184,184,184,184, 87, 87,182,184,183,182,
+183,182,182,182,182, 87, 87,183,183, 87, 87,183,183,182, 87, 87,
+ 87, 87, 87, 87, 87, 87,182,183, 87, 87, 87, 87,184,184, 87,184,
+184,184,182,182, 87, 87,185,185,185,185,185,185,185,185,185,185,
+186,184, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 22 */
+ 87, 87,187,188, 87,188,188,188,188,188,188, 87, 87, 87,188,188,
+188, 87,188,188,188,188, 87, 87, 87,188,188, 87,188, 87,188,188,
+ 87, 87, 87,188,188, 87, 87, 87,188,188,188, 87, 87, 87,188,188,
+188,188,188,188,188,188,188,188,188,188, 87, 87, 87, 87,189,189,
+187,189,189, 87, 87, 87,189,189,189, 87,189,189,189,187, 87, 87,
+188, 87, 87, 87, 87, 87, 87,189, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87,190,190,190,190,190,190,190,190,190,190,
+191,191,191,192,192,192,192,192,192,193,192, 87, 87, 87, 87, 87,
+
+/* block 23 */
+ 87,194,194,194, 87,195,195,195,195,195,195,195,195, 87,195,195,
+195, 87,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195, 87,195,195,195,195,195,195,
+195,195,195,195, 87,195,195,195,195,195, 87, 87, 87,195,196,196,
+196,194,194,194,194, 87,196,196,196, 87,196,196,196,196, 87, 87,
+ 87, 87, 87, 87, 87,196,196, 87,195,195, 87, 87, 87, 87, 87, 87,
+195,195,196,196, 87, 87,197,197,197,197,197,197,197,197,197,197,
+ 87, 87, 87, 87, 87, 87, 87, 87,198,198,198,198,198,198,198,199,
+
+/* block 24 */
+ 87, 87,200,200, 87,201,201,201,201,201,201,201,201, 87,201,201,
+201, 87,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201, 87,201,201,201,201,201,201,
+201,201,201,201, 87,201,201,201,201,201, 87, 87,202,201,200,202,
+200,200,200,200,200, 87,202,200,200, 87,200,200,202,202, 87, 87,
+ 87, 87, 87, 87, 87,200,200, 87, 87, 87, 87, 87, 87, 87,201, 87,
+201,201,202,202, 87, 87,203,203,203,203,203,203,203,203,203,203,
+ 87, 13, 13, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 25 */
+ 87, 87,204,204, 87,205,205,205,205,205,205,205,205, 87,205,205,
+205, 87,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205, 87,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205, 87, 87, 87,205,204,204,
+204,206,206,206,206, 87,204,204,204, 87,204,204,204,206, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87,204, 87, 87, 87, 87, 87, 87, 87, 87,
+205,205,206,206, 87, 87,207,207,207,207,207,207,207,207,207,207,
+208,208,208,208,208,208, 87, 87, 87,209,205,205,205,205,205,205,
+
+/* block 26 */
+ 87, 87,210,210, 87,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211, 87, 87, 87,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211, 87,211,211,211,211,211,211,211,211,211, 87,211, 87, 87,
+211,211,211,211,211,211,211, 87, 87, 87,212, 87, 87, 87, 87,210,
+210,210,212,212,212, 87,212, 87,210,210,210,210,210,210,210,210,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87,210,210,213, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 27 */
+ 87,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,215,214,214,215,215,215,215,215,215,215, 87, 87, 87, 87, 3,
+214,214,214,214,214,214,216,215,215,215,215,215,215,215,215,217,
+218,218,218,218,218,218,218,218,218,218,217,217, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 28 */
+ 87,219,219, 87,219, 87, 87,219,219, 87,219, 87, 87,219, 87, 87,
+ 87, 87, 87, 87,219,219,219,219, 87,219,219,219,219,219,219,219,
+ 87,219,219,219, 87,219, 87,219, 87, 87,219,219, 87,219,219,219,
+219,220,219,219,220,220,220,220,220,220, 87,220,220,219, 87, 87,
+219,219,219,219,219, 87,221, 87,220,220,220,220,220,220, 87, 87,
+222,222,222,222,222,222,222,222,222,222, 87, 87,219,219, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 29 */
+223,224,224,224,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,224,224,224,224,224,226,226,224,224,224,224,224,224,
+227,227,227,227,227,227,227,227,227,227,228,228,228,228,228,228,
+228,228,228,228,224,226,224,226,224,226,229,230,229,230,231,231,
+223,223,223,223,223,223,223,223, 87,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223, 87, 87, 87,
+ 87,226,226,226,226,226,226,226,226,226,226,226,226,226,226,231,
+
+/* block 30 */
+226,226,226,226,226,225,226,226,223,223,223,223, 87, 87, 87, 87,
+226,226,226,226,226,226,226,226, 87,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226, 87,224,224,
+224,224,224,224,224,224,226,224,224,224,224,224,224, 87,224,224,
+225,225,225,225,225, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 31 */
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,233,233,234,234,234,
+234,233,234,234,234,234,234,234,233,234,234,233,233,234,234,232,
+235,235,235,235,235,235,235,235,235,235,236,236,236,236,236,236,
+232,232,232,232,232,232,233,233,234,234,232,232,232,232,234,234,
+234,232,233,233,233,232,232,233,233,233,233,233,233,233,232,232,
+232,234,234,234,234,232,232,232,232,232,232,232,232,232,232,232,
+
+/* block 32 */
+232,232,234,233,233,234,234,233,233,233,233,233,233,234,232,233,
+235,235,235,235,235,235,235,235,235,235, 87, 87, 87, 87,237,237,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239, 2,240, 87, 87, 87,
+
+/* block 33 */
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241, 87, 87, 87, 87, 87,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+
+/* block 34 */
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241, 87, 87, 87, 87, 87,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241, 87, 87, 87, 87, 87, 87,
+
+/* block 35 */
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242, 87,242,242,242,242, 87, 87,
+242,242,242,242,242,242,242, 87,242, 87,242,242,242,242, 87, 87,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+
+/* block 36 */
+242,242,242,242,242,242,242,242,242, 87,242,242,242,242, 87, 87,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242, 87,242,242,242,242, 87, 87,242,242,242,242,242,242,242, 87,
+242, 87,242,242,242,242, 87, 87,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242, 87,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+
+/* block 37 */
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242, 87,242,242,242,242, 87, 87,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242, 87, 87, 87, 87,243,
+244,245,245,245,245,245,245,245,245,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246, 87, 87, 87,
+
+/* block 38 */
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+244,244,244,244,244,244,244,244,244,244, 87, 87, 87, 87, 87, 87,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 39 */
+ 87,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+
+/* block 40 */
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+
+/* block 41 */
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,249,249,248,
+248,248,248,248,248,248,248, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 42 */
+250,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,252,253, 87, 87, 87,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254, 2, 2, 2,255,255,
+255, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 43 */
+256,256,256,256,256,256,256,256,256,256,256,256,256, 87,256,256,
+256,256,257,257,257, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,
+258,258,259,259,259, 2, 2, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,
+260,260,261,261, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+262,262,262,262,262,262,262,262,262,262,262,262,262, 87,262,262,
+262, 87,263,263, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 44 */
+264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,
+264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,
+264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,
+264,264,264,264,265,265,266,267,267,267,267,267,267,267,266,266,
+266,266,266,266,266,266,267,266,266,267,267,267,267,267,267,267,
+267,267,267,267,268,268,268,269,268,268,268,270,264,267, 87, 87,
+271,271,271,271,271,271,271,271,271,271, 87, 87, 87, 87, 87, 87,
+272,272,272,272,272,272,272,272,272,272, 87, 87, 87, 87, 87, 87,
+
+/* block 45 */
+273,273, 2, 2,273, 2,274,273,273,273,273,275,275,275,276, 87,
+277,277,277,277,277,277,277,277,277,277, 87, 87, 87, 87, 87, 87,
+278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,
+278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,
+278,278,278,279,278,278,278,278,278,278,278,278,278,278,278,278,
+278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,
+278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,
+278,278,278,278,278,278,278,278, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 46 */
+278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,
+278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,
+278,278,278,278,278,278,278,278,278,275,278, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 47 */
+280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,
+280,280,280,280,280,280,280,280,280,280,280,280,280, 87, 87, 87,
+281,281,281,282,282,282,282,281,281,282,282,282, 87, 87, 87, 87,
+282,282,281,282,282,282,282,282,282,281,281,281, 87, 87, 87, 87,
+283, 87, 87, 87,284,284,285,285,285,285,285,285,285,285,285,285,
+286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,
+286,286,286,286,286,286,286,286,286,286,286,286,286,286, 87, 87,
+286,286,286,286,286, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 48 */
+287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,
+287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,
+287,287,287,287,287,287,287,287,287,287, 87, 87, 87, 87, 87, 87,
+288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,
+288,287,287,287,287,287,287,287,288,288, 87, 87, 87, 87, 87, 87,
+289,289,289,289,289,289,289,289,289,289, 87, 87, 87, 87,290,290,
+291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,
+291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,
+
+/* block 49 */
+292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,
+292,292,292,292,292,292,292,293,293,294,294,294, 87, 87,295,295,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 50 */
+296,296,296,296,297,298,298,298,298,298,298,298,298,298,298,298,
+298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,
+298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,
+298,298,298,298,296,297,296,296,296,296,296,297,296,297,297,297,
+297,297,296,297,297,298,298,298,298,298,298,298, 87, 87, 87, 87,
+299,299,299,299,299,299,299,299,299,299,300,300,300,300,300,300,
+300,301,301,301,301,301,301,301,301,301,301,296,296,296,296,296,
+296,296,296,296,301,301,301,301,301,301,301,301,301, 87, 87, 87,
+
+/* block 51 */
+302,302,303,304,304,304,304,304,304,304,304,304,304,304,304,304,
+304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,
+304,303,302,302,302,302,303,303,302,302,303, 87, 87, 87,304,304,
+305,305,305,305,305,305,305,305,305,305, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 52 */
+306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,
+306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,
+306,306,306,306,307,307,307,307,307,307,307,307,308,308,308,308,
+308,308,308,308,307,307,308,308, 87, 87, 87,309,309,309,309,309,
+310,310,310,310,310,310,310,310,310,310, 87, 87, 87,306,306,306,
+311,311,311,311,311,311,311,311,311,311,312,312,312,312,312,312,
+312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,
+312,312,312,312,312,312,312,312,313,313,313,313,313,313,314,314,
+
+/* block 53 */
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 94, 94, 94, 94, 94,315, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 88, 88, 88,
+ 88, 88, 14, 14, 14, 14, 94, 94, 94, 94, 94, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14,316,317, 14, 14, 14,318, 14, 14,
+
+/* block 54 */
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 88,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 82, 82,
+
+/* block 55 */
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+
+/* block 56 */
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 21, 22, 21, 22, 21, 22, 14, 14, 14, 14, 14,319, 14, 14,320, 14,
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+
+/* block 57 */
+321,321,321,321,321,321,321,321,322,322,322,322,322,322,322,322,
+321,321,321,321,321,321, 87, 87,322,322,322,322,322,322, 87, 87,
+321,321,321,321,321,321,321,321,322,322,322,322,322,322,322,322,
+321,321,321,321,321,321,321,321,322,322,322,322,322,322,322,322,
+321,321,321,321,321,321, 87, 87,322,322,322,322,322,322, 87, 87,
+ 94,321, 94,321, 94,321, 94,321, 87,322, 87,322, 87,322, 87,322,
+321,321,321,321,321,321,321,321,322,322,322,322,322,322,322,322,
+323,323,324,324,324,324,325,325,326,326,327,327,328,328, 87, 87,
+
+/* block 58 */
+321,321,321,321,321,321,321,321,329,329,329,329,329,329,329,329,
+321,321,321,321,321,321,321,321,329,329,329,329,329,329,329,329,
+321,321,321,321,321,321,321,321,329,329,329,329,329,329,329,329,
+321,321, 94,330, 94, 87, 94, 94,322,322,331,331,332, 86,333, 86,
+ 86, 86, 94,330, 94, 87, 94, 94,334,334,334,334,332, 86, 86, 86,
+321,321, 94, 94, 87, 87, 94, 94,322,322,335,335, 87, 86, 86, 86,
+321,321, 94, 94, 94,113, 94, 94,322,322,336,336,117, 86, 86, 86,
+ 87, 87, 94,330, 94, 87, 94, 94,337,337,338,338,332, 86, 86, 87,
+
+/* block 59 */
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16,339,339, 16, 16,
+ 7, 7, 7, 7, 7, 7, 2, 2, 15, 19, 4, 15, 15, 19, 4, 15,
+ 2, 2, 2, 2, 2, 2, 2, 2,340,341, 16, 16, 16, 16, 16, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 19, 2, 2, 2, 2, 11,
+ 11, 2, 2, 2, 6, 4, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 6, 2, 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1,
+ 16, 16, 16, 16, 16, 87, 87, 87, 87, 87, 16, 16, 16, 16, 16, 16,
+ 17, 14, 87, 87, 17, 17, 17, 17, 17, 17, 6, 6, 6, 4, 5, 14,
+
+/* block 60 */
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 6, 6, 6, 4, 5, 87,
+ 80, 80, 80, 80, 80, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,342,342,342,
+342, 82,342,342,342, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 61 */
+ 13, 13,343, 13, 13, 13, 13,343, 13, 13,344,343,343,343,344,344,
+343,343,343,344, 13,343, 13, 13, 13,343,343,343,343,343, 13, 13,
+ 13, 13, 13, 13,343, 13,345, 13,343, 13,346,347,343,343, 13,344,
+343,343,348,343,344,349,349,349,349,344, 13, 13,344,344,343,343,
+ 6, 6, 6, 6, 6,343,344,344,344,344, 13, 6, 13, 13,350, 13,
+ 87, 87, 87, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,
+352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,
+
+/* block 62 */
+353,353,353, 21, 22,353,353,353,353, 87, 87, 87, 87, 87, 87, 87,
+ 6, 6, 6, 6, 6, 13, 13, 13, 13, 13, 6, 6, 13, 13, 13, 13,
+ 6, 13, 13, 6, 13, 13, 6, 13, 13, 13, 13, 13, 13, 13, 6, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 6, 6,
+ 13, 13, 6, 13, 6, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+
+/* block 63 */
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+
+/* block 64 */
+ 13, 13, 13, 13, 13, 13, 13, 13, 6, 6, 6, 6, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 6, 6, 13, 13, 13, 13, 13, 13, 13, 4, 5, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 6, 13, 13, 13,
+
+/* block 65 */
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 6, 6, 6, 6,
+ 6, 6, 13, 13, 13, 13, 13, 13, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 66 */
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+
+/* block 67 */
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13,354,354,354,354,354,354,354,354,354,354,
+354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,
+355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,
+355,355,355,355,355,355,355,355,355,355, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+
+/* block 68 */
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+
+/* block 69 */
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 6, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 6, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 6, 6, 6, 6, 6, 6, 6, 6,
+
+/* block 70 */
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 6,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+
+/* block 71 */
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 87, 87,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 87, 87, 87,
+ 13, 13, 13, 13, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 72 */
+ 87, 13, 13, 13, 13, 87, 13, 13, 13, 13, 87, 87, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 87, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 87, 13, 87, 13,
+ 13, 13, 13, 87, 87, 87, 13, 87, 13, 13, 13, 13, 13, 13, 13, 87,
+ 87, 13, 13, 13, 13, 13, 13, 13, 4, 5, 4, 5, 4, 5, 4, 5,
+ 4, 5, 4, 5, 4, 5, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+
+/* block 73 */
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 13, 87, 87, 87, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 87, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 87,
+ 6, 6, 6, 6, 6, 4, 5, 6, 6, 6, 6, 87, 6, 87, 87, 87,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+
+/* block 74 */
+356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,
+356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,
+356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,
+356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,
+356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,
+356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,
+356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,
+356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,
+
+/* block 75 */
+ 6, 6, 6, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4,
+ 5, 4, 5, 4, 5, 4, 5, 4, 5, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 4, 5, 4, 5, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 5, 6, 6,
+
+/* block 76 */
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 13, 13, 6, 6, 6, 6, 6, 6, 87, 87, 87,
+ 13, 13, 13, 13, 13, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 77 */
+357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,
+357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,
+357,357,357,357,357,357,357,357,357,357,357,357,357,357,357, 87,
+358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,
+358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,
+358,358,358,358,358,358,358,358,358,358,358,358,358,358,358, 87,
+ 21, 22,359,360,361,362,363, 21, 22, 21, 22, 21, 22,364,365,366,
+ 87, 14, 21, 22, 14, 21, 22, 14, 14, 14, 14, 14, 14, 80, 87, 87,
+
+/* block 78 */
+109,110,109,110,109,110,109,110,109,110,109,110,109,110,109,110,
+109,110,109,110,109,110,109,110,109,110,109,110,109,110,109,110,
+109,110,109,110,109,110,109,110,109,110,109,110,109,110,109,110,
+109,110,109,110,109,110,109,110,109,110,109,110,109,110,109,110,
+109,110,109,110,109,110,109,110,109,110,109,110,109,110,109,110,
+109,110,109,110,109,110,109,110,109,110,109,110,109,110,109,110,
+109,110,109,110,367,368,368,368,368,368,368, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87,369,369,369,369,370,369,369,
+
+/* block 79 */
+371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,
+371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,
+371,371,371,371,371,371, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,
+372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,
+372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,
+372,372,372,372,372,372, 87, 87, 87, 87, 87, 87, 87, 87, 87,373,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 80 */
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+242,242,242,242,242,242,242, 87,242,242,242,242,242,242,242, 87,
+242,242,242,242,242,242,242, 87,242,242,242,242,242,242,242, 87,
+242,242,242,242,242,242,242, 87,242,242,242,242,242,242,242, 87,
+242,242,242,242,242,242,242, 87,242,242,242,242,242,242,242, 87,
+126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,
+126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,
+
+/* block 81 */
+ 2, 2, 15, 19, 15, 19, 2, 2, 2, 15, 19, 2, 15, 19, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 7, 2, 2, 7, 2, 15, 19, 2, 2,
+ 15, 19, 4, 5, 4, 5, 4, 5, 4, 5, 2, 2, 2, 2, 2, 81,
+ 2, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 82 */
+374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,
+374,374,374,374,374,374,374,374,374,374, 87,374,374,374,374,374,
+374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,
+374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,
+374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,
+374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,
+374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,
+374,374,374,374, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 83 */
+374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,
+374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,
+374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,
+374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,
+374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,
+374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,
+374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,
+374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,
+
+/* block 84 */
+374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,
+374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,
+374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,
+374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,
+374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,
+374,374,374,374,374,374, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 87, 87, 87, 87,
+
+/* block 85 */
+ 1, 2, 2, 2, 13,375,349,376, 4, 5, 4, 5, 4, 5, 4, 5,
+ 4, 5, 13, 13, 4, 5, 4, 5, 4, 5, 4, 5, 7, 4, 5, 5,
+ 13,376,376,376,376,376,376,376,376,376, 82, 82, 82, 82, 82, 82,
+ 7, 81, 81, 81, 81, 81, 13, 13,376,376,376,375,349, 2, 13, 13,
+ 87,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,
+377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,
+377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,
+377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,
+
+/* block 86 */
+377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,
+377,377,377,377,377,377,377, 87, 87, 82, 82, 10, 10,378,378,377,
+ 7,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,
+379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,
+379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,
+379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,
+379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,
+379,379,379,379,379,379,379,379,379,379,379, 2, 81,380,380,379,
+
+/* block 87 */
+ 87, 87, 87, 87, 87,381,381,381,381,381,381,381,381,381,381,381,
+381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,
+381,381,381,381,381,381,381,381,381,381,381,381,381,381, 87, 87,
+ 87,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+
+/* block 88 */
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, 87,
+ 13, 13, 17, 17, 17, 17, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,
+381,381,381,381,381,381,381,381, 87, 87, 87, 87, 87, 87, 87, 87,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,
+
+/* block 89 */
+382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,
+382,382,382,382,382,382,382,382,382,382,382,382,382,382,382, 87,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 13, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,
+382,382,382,382,382,382,382,382,382,382,382,382,382,382,382, 13,
+
+/* block 90 */
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,
+383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,
+383,383,383,383,383,383,383,383,383,383,383,383,383,383,383, 87,
+
+/* block 91 */
+383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,
+383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,
+383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,
+383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,
+383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,
+383,383,383,383,383,383,383,383, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+
+/* block 92 */
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+
+/* block 93 */
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+
+/* block 94 */
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 95 */
+385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,
+385,385,385,385,385,386,385,385,385,385,385,385,385,385,385,385,
+385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,
+385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,
+385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,
+385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,
+385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,
+385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,
+
+/* block 96 */
+385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,
+385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,
+385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,
+385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,
+385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,
+385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,
+385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,
+385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,
+
+/* block 97 */
+385,385,385,385,385,385,385,385,385,385,385,385,385, 87, 87, 87,
+387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,
+387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,
+387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,
+387,387,387,387,387,387,387, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 98 */
+388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,
+388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,
+388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,
+388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,
+388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,
+388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,
+388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,
+388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,
+
+/* block 99 */
+388,388,388,388,388,388,388,388,388,388,388,388,389,390,390,390,
+388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,
+391,391,391,391,391,391,391,391,391,391,388,388, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+123,124,123,124,123,124,123,124,123,124,123,124,123,124,123,124,
+123,124,123,124,123,124,123,124,123,124,123,124,123,124,123,124,
+ 87, 87,123,124,123,124,123,124,123,124,123,124,123,124,392,126,
+127,127,127,393, 87, 87, 87, 87, 87, 87, 87, 87,126,126,393,316,
+
+/* block 100 */
+123,124,123,124,123,124,123,124,123,124,123,124,123,124,123,124,
+123,124,123,124,123,124,123,124, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 101 */
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 10, 10, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 14, 14, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22, 21, 22,
+ 80, 14, 14, 14, 14, 14, 14, 14, 14, 21, 22, 21, 22,394, 21, 22,
+
+/* block 102 */
+ 21, 22, 21, 22, 21, 22, 21, 22, 81, 10, 10, 21, 22, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 45, 45, 45, 45, 45,
+
+/* block 103 */
+395,395,396,395,395,395,396,395,395,395,395,396,395,395,395,395,
+395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,
+395,395,395,397,397,396,396,397,398,398,398,398, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+399,399,399,399,399,399,399,399,399,399,399,399,399,399,399,399,
+399,399,399,399,399,399,399,399,399,399,399,399,399,399,399,399,
+399,399,399,399,399,399,399,399,399,399,399,399,399,399,399,399,
+399,399,399,399,400,400,400,400, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 104 */
+401,401,402,402,402,402,402,402,402,402,402,402,402,402,402,402,
+402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,
+402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,
+402,402,402,402,401,401,401,401,401,401,401,401,401,401,401,401,
+401,401,401,401,403, 87, 87, 87, 87, 87, 87, 87, 87, 87,404,404,
+405,405,405,405,405,405,405,405,405,405, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 105 */
+406,406,406,406,406,406,406,406,406,406,407,407,407,407,407,407,
+407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,
+407,407,407,407,407,407,408,408,408,408,408,408,408,408,409,409,
+410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,
+410,410,410,410,410,410,410,411,411,411,411,411,411,411,411,411,
+411,411,412,412, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,413,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 106 */
+414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,
+414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,
+414,414,414,414,414,414,414,414,414,415,415,415,415,415,415,416,
+416,415,415,416,416,415,415, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+414,414,414,415,414,414,414,414,414,414,414,414,415,416, 87, 87,
+417,417,417,417,417,417,417,417,417,417, 87, 87,418,418,418,418,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 107 */
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+
+/* block 108 */
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 109 */
+419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,
+419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,
+419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,
+419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,
+419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,
+419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,
+419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,
+419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,
+
+/* block 110 */
+420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,
+420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,
+420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,
+420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,
+420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,
+420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,
+420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,
+420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,
+
+/* block 111 */
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384, 87, 87,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384, 87, 87, 87, 87, 87,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+
+/* block 112 */
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 113 */
+ 14, 14, 14, 14, 14, 14, 14, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87,134,134,134,134,134, 87, 87, 87, 87, 87,139,136,139,
+139,139,139,139,139,139,139,139,139,421,139,139,139,139,139,139,
+139,139,139,139,139,139,139, 87,139,139,139,139,139, 87,139, 87,
+139,139, 87,139,139, 87,139,139,139,139,139,139,139,139,139,139,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+
+/* block 114 */
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+
+/* block 115 */
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+
+/* block 116 */
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145, 4, 5,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+
+/* block 117 */
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+ 87, 87,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+145,145,145,145,145,145,145,145,145,145,145,145,142, 13, 87, 87,
+
+/* block 118 */
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 2, 2, 2, 2, 2, 2, 2, 4, 5, 2, 87, 87, 87, 87, 87, 87,
+ 82, 82, 82, 82, 82, 82, 82, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 2, 7, 7, 11, 11, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4,
+ 5, 4, 5, 4, 5, 2, 2, 4, 5, 2, 2, 2, 2, 11, 11, 11,
+ 2, 2, 2, 87, 2, 2, 2, 2, 7, 4, 5, 4, 5, 4, 5, 2,
+ 2, 2, 6, 7, 6, 6, 6, 87, 2, 3, 2, 2, 87, 87, 87, 87,
+145,145,145,145,145, 87,145,145,145,145,145,145,145,145,145,145,
+
+/* block 119 */
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145, 87, 87, 16,
+
+/* block 120 */
+ 87, 2, 2, 2, 3, 2, 2, 2, 4, 5, 2, 6, 2, 7, 2, 2,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 2, 2, 6, 6, 6, 2,
+ 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 4, 2, 5, 10, 11,
+ 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 4, 6, 5, 6, 4,
+ 5, 2, 4, 5, 2, 2,379,379,379,379,379,379,379,379,379,379,
+ 81,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,
+
+/* block 121 */
+379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,
+379,379,379,379,379,379,379,379,379,379,379,379,379,379, 81, 81,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, 87,
+ 87, 87,241,241,241,241,241,241, 87, 87,241,241,241,241,241,241,
+ 87, 87,241,241,241,241,241,241, 87, 87,241,241,241, 87, 87, 87,
+ 3, 3, 6, 10, 13, 3, 3, 87, 13, 6, 6, 6, 6, 13, 13, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 16, 16, 16, 13, 13, 87, 87,
+
+/* block 122 */
+422,422,422,422,422,422,422,422,422,422,422,422, 87,422,422,422,
+422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,
+422,422,422,422,422,422,422, 87,422,422,422,422,422,422,422,422,
+422,422,422,422,422,422,422,422,422,422,422, 87,422,422, 87,422,
+422,422,422,422,422,422,422,422,422,422,422,422,422,422, 87, 87,
+422,422,422,422,422,422,422,422,422,422,422,422,422,422, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 123 */
+422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,
+422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,
+422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,
+422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,
+422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,
+422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,
+422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,
+422,422,422,422,422,422,422,422,422,422,422, 87, 87, 87, 87, 87,
+
+/* block 124 */
+ 2, 2, 13, 87, 87, 87, 87, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 87, 87, 87, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,
+423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,
+423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,
+423,423,423,423,423,424,424,424,424,425,425,425,425,425,425,425,
+
+/* block 125 */
+425,425,425,425,425,425,425,425,425,425,424, 87, 87, 87, 87, 87,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 82, 87, 87,
+
+/* block 126 */
+426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,
+426,426,426,426,426,426,426,426,426,426,426,426,426, 87, 87, 87,
+427,427,427,427,427,427,427,427,427,427,427,427,427,427,427,427,
+427,427,427,427,427,427,427,427,427,427,427,427,427,427,427,427,
+427,427,427,427,427,427,427,427,427,427,427,427,427,427,427,427,
+427, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 127 */
+428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,
+428,428,428,428,428,428,428,428,428,428,428,428,428,428,428, 87,
+429,429,429,429, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+430,430,430,430,430,430,430,430,430,430,430,430,430,430,430,430,
+430,431,430,430,430,430,430,430,430,430,431, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 128 */
+432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,
+432,432,432,432,432,432,432,432,432,432,432,432,432,432, 87,433,
+434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,
+434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,
+434,434,434,434, 87, 87, 87, 87,434,434,434,434,434,434,434,434,
+435,436,436,436,436,436, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 129 */
+437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,
+437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,
+437,437,437,437,437,437,437,437,438,438,438,438,438,438,438,438,
+438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,
+438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,
+439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,
+439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,
+439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,
+
+/* block 130 */
+440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,
+440,440,440,440,440,440,440,440,440,440,440,440,440,440, 87, 87,
+441,441,441,441,441,441,441,441,441,441, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 131 */
+442,442,442,442,442,442, 87, 87,442, 87,442,442,442,442,442,442,
+442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,
+442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,
+442,442,442,442,442,442, 87,442,442, 87, 87, 87,442, 87, 87,442,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 132 */
+443,443,443,443,443,443,443,443,443,443,443,443,443,443,443,443,
+443,443,443,443,443,443,444,444,444,444, 87, 87, 87, 87, 87,445,
+446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,
+446,446,446,446,446,446,446,446,446,446, 87, 87, 87, 87, 87,447,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 133 */
+448,449,449,449, 87,449,449, 87, 87, 87, 87, 87,449,449,449,449,
+448,448,448,448, 87,448,448,448, 87,448,448,448,448,448,448,448,
+448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,
+448,448,448,448, 87, 87, 87, 87,449,449,449, 87, 87, 87, 87,449,
+450,450,450,450,450,450,450,450, 87, 87, 87, 87, 87, 87, 87, 87,
+451,451,451,451,451,451,451,451,451, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 134 */
+452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,
+452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,
+452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,
+452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,
+452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,
+452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,
+452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,
+452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,
+
+/* block 135 */
+452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,
+452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,
+452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,
+452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,
+452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,
+452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,
+452,452,452,452,452,452,452,452,452,452,452,452,452,452,452, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 136 */
+453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,
+453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,
+453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,
+453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,
+453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,
+453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,
+453,453,453, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+454,454,454,454, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 137 */
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 138 */
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 87, 87, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13,455,455, 82, 82, 82, 13, 13, 13,455,455,455,
+455,455,455, 16, 16, 16, 16, 16, 16, 16, 16, 82, 82, 82, 82, 82,
+
+/* block 139 */
+ 82, 82, 82, 13, 13, 82, 82, 82, 82, 82, 82, 82, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 82, 82, 82, 82, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 140 */
+425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,
+425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,
+425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,
+425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,
+425,425,456,456,456,425, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 141 */
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 142 */
+343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,
+343,343,343,343,343,343,343,343,343,343,344,344,344,344,344,344,
+344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
+344,344,344,344,343,343,343,343,343,343,343,343,343,343,343,343,
+343,343,343,343,343,343,343,343,343,343,343,343,343,343,344,344,
+344,344,344,344,344, 87,344,344,344,344,344,344,344,344,344,344,
+344,344,344,344,344,344,344,344,343,343,343,343,343,343,343,343,
+343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,
+
+/* block 143 */
+343,343,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
+344,344,344,344,344,344,344,344,344,344,344,344,343, 87,343,343,
+ 87, 87,343, 87, 87,343,343, 87, 87,343,343,343,343, 87,343,343,
+343,343,343,343,343,343,344,344,344,344, 87,344, 87,344,344,344,
+344,344,344,344, 87,344,344,344,344,344,344,344,344,344,344,344,
+343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,
+343,343,343,343,343,343,343,343,343,343,344,344,344,344,344,344,
+344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
+
+/* block 144 */
+344,344,344,344,343,343, 87,343,343,343,343, 87, 87,343,343,343,
+343,343,343,343,343, 87,343,343,343,343,343,343,343, 87,344,344,
+344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
+344,344,344,344,344,344,344,344,343,343, 87,343,343,343,343, 87,
+343,343,343,343,343, 87,343, 87, 87, 87,343,343,343,343,343,343,
+343, 87,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
+344,344,344,344,344,344,344,344,344,344,344,344,343,343,343,343,
+343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,
+
+/* block 145 */
+343,343,343,343,343,343,344,344,344,344,344,344,344,344,344,344,
+344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
+343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,
+343,343,343,343,343,343,343,343,343,343,344,344,344,344,344,344,
+344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
+344,344,344,344,343,343,343,343,343,343,343,343,343,343,343,343,
+343,343,343,343,343,343,343,343,343,343,343,343,343,343,344,344,
+344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
+
+/* block 146 */
+344,344,344,344,344,344,344,344,343,343,343,343,343,343,343,343,
+343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,
+343,343,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
+344,344,344,344,344,344,344,344,344,344,344,344,343,343,343,343,
+343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,
+343,343,343,343,343,343,344,344,344,344,344,344,344,344,344,344,
+344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
+343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,
+
+/* block 147 */
+343,343,343,343,343,343,343,343,343,343,344,344,344,344,344,344,
+344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
+344,344,344,344,344,344, 87, 87,343,343,343,343,343,343,343,343,
+343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,
+343, 6,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
+344,344,344,344,344,344,344,344,344,344,344, 6,344,344,344,344,
+344,344,343,343,343,343,343,343,343,343,343,343,343,343,343,343,
+343,343,343,343,343,343,343,343,343,343,343, 6,344,344,344,344,
+
+/* block 148 */
+344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
+344,344,344,344,344, 6,344,344,344,344,344,344,343,343,343,343,
+343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,
+343,343,343,343,343, 6,344,344,344,344,344,344,344,344,344,344,
+344,344,344,344,344,344,344,344,344,344,344,344,344,344,344, 6,
+344,344,344,344,344,344,343,343,343,343,343,343,343,343,343,343,
+343,343,343,343,343,343,343,343,343,343,343,343,343,343,343, 6,
+344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
+
+/* block 149 */
+344,344,344,344,344,344,344,344,344, 6,344,344,344,344,344,344,
+343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,
+343,343,343,343,343,343,343,343,343, 6,344,344,344,344,344,344,
+344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
+344,344,344, 6,344,344,344,344,344,344,343,344, 87, 87, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+
+/* block 150 */
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 87, 87, 87, 87,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+
+/* block 151 */
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 152 */
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 153 */
+384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
+384,384,384,384,384,384,384,384,384,384,384,384,384,384, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 154 */
+ 87, 16, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+
+/* block 155 */
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+
+/* block 156 */
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+
+/* block 157 */
+420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,
+420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,
+420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,
+420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,
+420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,
+420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,
+420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,
+420,420,420,420,420,420,420,420,420,420,420,420,420,420, 87, 87,
+
+};
+
+#if UCD_BLOCK_SIZE != 128
+#error Please correct UCD_BLOCK_SIZE in pcre_internal.h
+#endif
diff --git a/ext/pcre/pcrelib/pcre_ucp_searchfuncs.c b/ext/pcre/pcrelib/pcre_ucp_searchfuncs.c
deleted file mode 100644
index 668ae154d..000000000
--- a/ext/pcre/pcrelib/pcre_ucp_searchfuncs.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/*************************************************
-* Perl-Compatible Regular Expressions *
-*************************************************/
-
-/* PCRE is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language.
-
- Written by Philip Hazel
- Copyright (c) 1997-2008 University of Cambridge
-
------------------------------------------------------------------------------
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- * Neither the name of the University of Cambridge nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
------------------------------------------------------------------------------
-*/
-
-
-/* This module contains code for searching the table of Unicode character
-properties. */
-
-#include "config.h"
-
-#include "pcre_internal.h"
-
-#include "ucp.h" /* Category definitions */
-#include "ucpinternal.h" /* Internal table details */
-#include "ucptable.h" /* The table itself */
-
-
-/* Table to translate from particular type value to the general value. */
-
-static const int ucp_gentype[] = {
- ucp_C, ucp_C, ucp_C, ucp_C, ucp_C, /* Cc, Cf, Cn, Co, Cs */
- ucp_L, ucp_L, ucp_L, ucp_L, ucp_L, /* Ll, Lu, Lm, Lo, Lt */
- ucp_M, ucp_M, ucp_M, /* Mc, Me, Mn */
- ucp_N, ucp_N, ucp_N, /* Nd, Nl, No */
- ucp_P, ucp_P, ucp_P, ucp_P, ucp_P, /* Pc, Pd, Pe, Pf, Pi */
- ucp_P, ucp_P, /* Ps, Po */
- ucp_S, ucp_S, ucp_S, ucp_S, /* Sc, Sk, Sm, So */
- ucp_Z, ucp_Z, ucp_Z /* Zl, Zp, Zs */
-};
-
-
-
-/*************************************************
-* Search table and return type *
-*************************************************/
-
-/* Three values are returned: the category is ucp_C, ucp_L, etc. The detailed
-character type is ucp_Lu, ucp_Nd, etc. The script is ucp_Latin, etc.
-
-Arguments:
- c the character value
- type_ptr the detailed character type is returned here
- script_ptr the script is returned here
-
-Returns: the character type category
-*/
-
-int
-_pcre_ucp_findprop(const unsigned int c, int *type_ptr, int *script_ptr)
-{
-int bot = 0;
-int top = sizeof(ucp_table)/sizeof(cnode);
-int mid;
-
-/* The table is searched using a binary chop. You might think that using
-intermediate variables to hold some of the common expressions would speed
-things up, but tests with gcc 3.4.4 on Linux showed that, on the contrary, it
-makes things a lot slower. */
-
-for (;;)
- {
- if (top <= bot)
- {
- *type_ptr = ucp_Cn;
- *script_ptr = ucp_Common;
- return ucp_C;
- }
- mid = (bot + top) >> 1;
- if (c == (ucp_table[mid].f0 & f0_charmask)) break;
- if (c < (ucp_table[mid].f0 & f0_charmask)) top = mid;
- else
- {
- if ((ucp_table[mid].f0 & f0_rangeflag) != 0 &&
- c <= (ucp_table[mid].f0 & f0_charmask) +
- (ucp_table[mid].f1 & f1_rangemask)) break;
- bot = mid + 1;
- }
- }
-
-/* Found an entry in the table. Set the script and detailed type values, and
-return the general type. */
-
-*script_ptr = (ucp_table[mid].f0 & f0_scriptmask) >> f0_scriptshift;
-*type_ptr = (ucp_table[mid].f1 & f1_typemask) >> f1_typeshift;
-
-return ucp_gentype[*type_ptr];
-}
-
-
-
-/*************************************************
-* Search table and return other case *
-*************************************************/
-
-/* If the given character is a letter, and there is another case for the
-letter, return the other case. Otherwise, return -1.
-
-Arguments:
- c the character value
-
-Returns: the other case or NOTACHAR if none
-*/
-
-unsigned int
-_pcre_ucp_othercase(const unsigned int c)
-{
-int bot = 0;
-int top = sizeof(ucp_table)/sizeof(cnode);
-int mid, offset;
-
-/* The table is searched using a binary chop. You might think that using
-intermediate variables to hold some of the common expressions would speed
-things up, but tests with gcc 3.4.4 on Linux showed that, on the contrary, it
-makes things a lot slower. */
-
-for (;;)
- {
- if (top <= bot) return -1;
- mid = (bot + top) >> 1;
- if (c == (ucp_table[mid].f0 & f0_charmask)) break;
- if (c < (ucp_table[mid].f0 & f0_charmask)) top = mid;
- else
- {
- if ((ucp_table[mid].f0 & f0_rangeflag) != 0 &&
- c <= (ucp_table[mid].f0 & f0_charmask) +
- (ucp_table[mid].f1 & f1_rangemask)) break;
- bot = mid + 1;
- }
- }
-
-/* Found an entry in the table. Return NOTACHAR for a range entry. Otherwise
-return the other case if there is one, else NOTACHAR. */
-
-if ((ucp_table[mid].f0 & f0_rangeflag) != 0) return NOTACHAR;
-
-offset = ucp_table[mid].f1 & f1_casemask;
-if ((offset & f1_caseneg) != 0) offset |= f1_caseneg;
-return (offset == 0)? NOTACHAR : c + offset;
-}
-
-
-/* End of pcre_ucp_searchfuncs.c */
diff --git a/ext/pcre/pcrelib/pcre_valid_utf8.c b/ext/pcre/pcrelib/pcre_valid_utf8.c
index 6b341c195..62f47b952 100644
--- a/ext/pcre/pcrelib/pcre_valid_utf8.c
+++ b/ext/pcre/pcrelib/pcre_valid_utf8.c
@@ -6,7 +6,7 @@
and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
- Copyright (c) 1997-2008 University of Cambridge
+ Copyright (c) 1997-2009 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -152,6 +152,9 @@ for (p = string; length-- > 0; p++)
if ((*(++p) & 0xc0) != 0x80) return p - string;
}
}
+#else
+(void)(string); /* Keep picky compilers happy */
+(void)(length);
#endif
return -1;
diff --git a/ext/pcre/pcrelib/pcre_version.c b/ext/pcre/pcrelib/pcre_version.c
index 36ee93e71..13330d1a5 100644
--- a/ext/pcre/pcrelib/pcre_version.c
+++ b/ext/pcre/pcrelib/pcre_version.c
@@ -6,7 +6,7 @@
and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
- Copyright (c) 1997-2008 University of Cambridge
+ Copyright (c) 1997-2009 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -77,7 +77,7 @@ I could find no way of detecting that a macro is defined as an empty string at
pre-processor time. This hack uses a standard trick for avoiding calling
the STRING macro with an empty argument when doing the test. */
-PCRE_EXP_DEFN const char *
+PCRE_EXP_DEFN const char * PCRE_CALL_CONVENTION
pcre_version(void)
{
return (XSTRING(Z PCRE_PRERELEASE)[1] == 0)?
diff --git a/ext/pcre/pcrelib/pcre_xclass.c b/ext/pcre/pcrelib/pcre_xclass.c
index d22d9e648..c939662f0 100644
--- a/ext/pcre/pcrelib/pcre_xclass.c
+++ b/ext/pcre/pcrelib/pcre_xclass.c
@@ -6,7 +6,7 @@
and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
- Copyright (c) 1997-2008 University of Cambridge
+ Copyright (c) 1997-2009 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -102,8 +102,7 @@ while ((t = *data++) != XCL_END)
#ifdef SUPPORT_UCP
else /* XCL_PROP & XCL_NOTPROP */
{
- int chartype, script;
- int category = _pcre_ucp_findprop(c, &chartype, &script);
+ const ucd_record * prop = GET_UCD(c);
switch(*data)
{
@@ -112,20 +111,20 @@ while ((t = *data++) != XCL_END)
break;
case PT_LAMP:
- if ((chartype == ucp_Lu || chartype == ucp_Ll || chartype == ucp_Lt) ==
+ if ((prop->chartype == ucp_Lu || prop->chartype == ucp_Ll || prop->chartype == ucp_Lt) ==
(t == XCL_PROP)) return !negated;
break;
case PT_GC:
- if ((data[1] == category) == (t == XCL_PROP)) return !negated;
+ if ((data[1] == _pcre_ucp_gentype[prop->chartype]) == (t == XCL_PROP)) return !negated;
break;
case PT_PC:
- if ((data[1] == chartype) == (t == XCL_PROP)) return !negated;
+ if ((data[1] == prop->chartype) == (t == XCL_PROP)) return !negated;
break;
case PT_SC:
- if ((data[1] == script) == (t == XCL_PROP)) return !negated;
+ if ((data[1] == prop->script) == (t == XCL_PROP)) return !negated;
break;
/* This should never occur, but compilers may mutter if there is no
diff --git a/ext/pcre/pcrelib/pcregrep.c b/ext/pcre/pcrelib/pcregrep.c
index f192f0c0c..f6774a9da 100644
--- a/ext/pcre/pcrelib/pcregrep.c
+++ b/ext/pcre/pcrelib/pcregrep.c
@@ -6,7 +6,7 @@
its pattern matching. On a Unix or Win32 system it can recurse into
directories.
- Copyright (c) 1997-2008 University of Cambridge
+ Copyright (c) 1997-2009 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -137,9 +137,13 @@ static pcre_extra **hints_list = NULL;
static char *include_pattern = NULL;
static char *exclude_pattern = NULL;
+static char *include_dir_pattern = NULL;
+static char *exclude_dir_pattern = NULL;
static pcre *include_compiled = NULL;
static pcre *exclude_compiled = NULL;
+static pcre *include_dir_compiled = NULL;
+static pcre *exclude_dir_compiled = NULL;
static int after_context = 0;
static int before_context = 0;
@@ -179,15 +183,17 @@ typedef struct option_item {
/* Options without a single-letter equivalent get a negative value. This can be
used to identify them. */
-#define N_COLOUR (-1)
-#define N_EXCLUDE (-2)
-#define N_HELP (-3)
-#define N_INCLUDE (-4)
-#define N_LABEL (-5)
-#define N_LOCALE (-6)
-#define N_NULL (-7)
-#define N_LOFFSETS (-8)
-#define N_FOFFSETS (-9)
+#define N_COLOUR (-1)
+#define N_EXCLUDE (-2)
+#define N_EXCLUDE_DIR (-3)
+#define N_HELP (-4)
+#define N_INCLUDE (-5)
+#define N_INCLUDE_DIR (-6)
+#define N_LABEL (-7)
+#define N_LOCALE (-8)
+#define N_NULL (-9)
+#define N_LOFFSETS (-10)
+#define N_FOFFSETS (-11)
static option_item optionlist[] = {
{ OP_NODATA, N_NULL, NULL, "", " terminate options" },
@@ -220,6 +226,8 @@ static option_item optionlist[] = {
{ OP_NODATA, 'r', NULL, "recursive", "recursively scan sub-directories" },
{ OP_STRING, N_EXCLUDE,&exclude_pattern, "exclude=pattern","exclude matching files when recursing" },
{ OP_STRING, N_INCLUDE,&include_pattern, "include=pattern","include matching files when recursing" },
+ { OP_STRING, N_EXCLUDE_DIR,&exclude_dir_pattern, "exclude_dir=pattern","exclude matching directories when recursing" },
+ { OP_STRING, N_INCLUDE_DIR,&include_dir_pattern, "include_dir=pattern","include matching directories when recursing" },
#ifdef JFRIEDL_DEBUG
{ OP_OP_NUMBER, 'S', &S_arg, "jeffS", "replace matched (sub)string with X" },
#endif
@@ -1044,10 +1052,10 @@ while (ptr < endptr)
if (printname != NULL) fprintf(stdout, "%s:", printname);
if (number) fprintf(stdout, "%d:", linenumber);
if (line_offsets)
- fprintf(stdout, "%d,%d", matchptr + offsets[0] - ptr,
+ fprintf(stdout, "%d,%d", (int)(matchptr + offsets[0] - ptr),
offsets[1] - offsets[0]);
else if (file_offsets)
- fprintf(stdout, "%d,%d", filepos + matchptr + offsets[0] - ptr,
+ fprintf(stdout, "%d,%d", (int)(filepos + matchptr + offsets[0] - ptr),
offsets[1] - offsets[0]);
else
fwrite(matchptr + offsets[0], 1, offsets[1] - offsets[0], stdout);
@@ -1359,8 +1367,9 @@ if (strcmp(pathname, "-") == 0)
}
/* If the file is a directory, skip if skipping or if we are recursing, scan
-each file within it, subject to any include or exclude patterns that were set.
-The scanning code is localized so it can be made system-specific. */
+each file and directory within it, subject to any include or exclude patterns
+that were set. The scanning code is localized so it can be made
+system-specific. */
if ((sep = isdirectory(pathname)) != 0)
{
@@ -1381,17 +1390,30 @@ if ((sep = isdirectory(pathname)) != 0)
while ((nextfile = readdirectory(dir)) != NULL)
{
- int frc, blen;
+ int frc, nflen;
sprintf(buffer, "%.512s%c%.128s", pathname, sep, nextfile);
- blen = strlen(buffer);
+ nflen = strlen(nextfile);
- if (exclude_compiled != NULL &&
- pcre_exec(exclude_compiled, NULL, buffer, blen, 0, 0, NULL, 0) >= 0)
- continue;
+ if (isdirectory(buffer))
+ {
+ if (exclude_dir_compiled != NULL &&
+ pcre_exec(exclude_dir_compiled, NULL, nextfile, nflen, 0, 0, NULL, 0) >= 0)
+ continue;
- if (include_compiled != NULL &&
- pcre_exec(include_compiled, NULL, buffer, blen, 0, 0, NULL, 0) < 0)
- continue;
+ if (include_dir_compiled != NULL &&
+ pcre_exec(include_dir_compiled, NULL, nextfile, nflen, 0, 0, NULL, 0) < 0)
+ continue;
+ }
+ else
+ {
+ if (exclude_compiled != NULL &&
+ pcre_exec(exclude_compiled, NULL, nextfile, nflen, 0, 0, NULL, 0) >= 0)
+ continue;
+
+ if (include_compiled != NULL &&
+ pcre_exec(include_compiled, NULL, nextfile, nflen, 0, 0, NULL, 0) < 0)
+ continue;
+ }
frc = grep_or_recurse(buffer, dir_recurse, FALSE);
if (frc > 1) rc = frc;
@@ -2287,6 +2309,30 @@ if (include_pattern != NULL)
}
}
+if (exclude_dir_pattern != NULL)
+ {
+ exclude_dir_compiled = pcre_compile(exclude_dir_pattern, 0, &error, &errptr,
+ pcretables);
+ if (exclude_dir_compiled == NULL)
+ {
+ fprintf(stderr, "pcregrep: Error in 'exclude_dir' regex at offset %d: %s\n",
+ errptr, error);
+ goto EXIT2;
+ }
+ }
+
+if (include_dir_pattern != NULL)
+ {
+ include_dir_compiled = pcre_compile(include_dir_pattern, 0, &error, &errptr,
+ pcretables);
+ if (include_dir_compiled == NULL)
+ {
+ fprintf(stderr, "pcregrep: Error in 'include_dir' regex at offset %d: %s\n",
+ errptr, error);
+ goto EXIT2;
+ }
+ }
+
/* If there are no further arguments, do the business on stdin and exit. */
if (i >= argc)
diff --git a/ext/pcre/pcrelib/pcreposix.c b/ext/pcre/pcrelib/pcreposix.c
index 4cb5e12a1..87c695b2a 100644
--- a/ext/pcre/pcrelib/pcreposix.c
+++ b/ext/pcre/pcrelib/pcreposix.c
@@ -6,7 +6,7 @@
and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
- Copyright (c) 1997-2008 University of Cambridge
+ Copyright (c) 1997-2009 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -124,7 +124,8 @@ static const int eint[] = {
REG_BADPAT, /* (?+ or (?- must be followed by a non-zero number */
REG_BADPAT, /* number is too big */
REG_BADPAT, /* subpattern name expected */
- REG_BADPAT /* digit expected after (?+ */
+ REG_BADPAT, /* digit expected after (?+ */
+ REG_BADPAT /* ] is an invalid data character in JavaScript compatibility mode */
};
/* Table of texts corresponding to POSIX error codes */
@@ -157,7 +158,7 @@ static const char *const pstring[] = {
* Translate error code to string *
*************************************************/
-PCREPOSIX_EXP_DEFN size_t
+PCREPOSIX_EXP_DEFN size_t PCRE_CALL_CONVENTION
regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size)
{
const char *message, *addmessage;
@@ -192,7 +193,7 @@ return length + addlength;
* Free store held by a regex *
*************************************************/
-PCREPOSIX_EXP_DEFN void
+PCREPOSIX_EXP_DEFN void PCRE_CALL_CONVENTION
regfree(regex_t *preg)
{
(pcre_free)(preg->re_pcre);
@@ -215,7 +216,7 @@ Returns: 0 on success
various non-zero codes on failure
*/
-PCREPOSIX_EXP_DEFN int
+PCREPOSIX_EXP_DEFN int PCRE_CALL_CONVENTION
regcomp(regex_t *preg, const char *pattern, int cflags)
{
const char *errorptr;
@@ -257,11 +258,11 @@ If REG_NOSUB was specified at compile time, the PCRE_NO_AUTO_CAPTURE flag will
be set. When this is the case, the nmatch and pmatch arguments are ignored, and
the only result is yes/no/error. */
-PCREPOSIX_EXP_DEFN int
+PCREPOSIX_EXP_DEFN int PCRE_CALL_CONVENTION
regexec(const regex_t *preg, const char *string, size_t nmatch,
regmatch_t pmatch[], int eflags)
{
-int rc;
+int rc, so, eo;
int options = 0;
int *ovector = NULL;
int small_ovector[POSIX_MALLOC_THRESHOLD * 3];
@@ -294,7 +295,23 @@ else if (nmatch > 0)
}
}
-rc = pcre_exec((const pcre *)preg->re_pcre, NULL, string, (int)strlen(string),
+/* REG_STARTEND is a BSD extension, to allow for non-NUL-terminated strings.
+The man page from OS X says "REG_STARTEND affects only the location of the
+string, not how it is matched". That is why the "so" value is used to bump the
+start location rather than being passed as a PCRE "starting offset". */
+
+if ((eflags & REG_STARTEND) != 0)
+ {
+ so = pmatch[0].rm_so;
+ eo = pmatch[0].rm_eo;
+ }
+else
+ {
+ so = 0;
+ eo = strlen(string);
+ }
+
+rc = pcre_exec((const pcre *)preg->re_pcre, NULL, string + so, (eo - so),
0, options, ovector, nmatch * 3);
if (rc == 0) rc = nmatch; /* All captured slots were filled in */
diff --git a/ext/pcre/pcrelib/pcreposix.h b/ext/pcre/pcrelib/pcreposix.h
index 109376d90..4f59d918e 100644
--- a/ext/pcre/pcrelib/pcreposix.h
+++ b/ext/pcre/pcrelib/pcreposix.h
@@ -9,7 +9,7 @@
Compatible Regular Expression library. It defines the things POSIX says should
be there. I hope.
- Copyright (c) 1997-2008 University of Cambridge
+ Copyright (c) 1997-2009 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -59,6 +59,7 @@ extern "C" {
#define REG_DOTALL 0x0010 /* NOT defined by POSIX. */
#define REG_NOSUB 0x0020
#define REG_UTF8 0x0040 /* NOT defined by POSIX. */
+#define REG_STARTEND 0x0080 /* BSD feature: pass subject string by so,eo */
/* This is not used by PCRE, but by defining it we make it easier
to slot PCRE into existing programs that make POSIX calls. */
diff --git a/ext/pcre/pcrelib/testdata/testinput1 b/ext/pcre/pcrelib/testdata/testinput1
index 91554ffc4..081575bc7 100644
--- a/ext/pcre/pcrelib/testdata/testinput1
+++ b/ext/pcre/pcrelib/testdata/testinput1
@@ -4036,4 +4036,7 @@
]
p
+/.*[op][xyz]/
+ fooabcfoo
+
/ End of testinput1 /
diff --git a/ext/pcre/pcrelib/testdata/testinput2 b/ext/pcre/pcrelib/testdata/testinput2
index 1a13fa8dd..2b64546a8 100644
--- a/ext/pcre/pcrelib/testdata/testinput2
+++ b/ext/pcre/pcrelib/testdata/testinput2
@@ -1988,10 +1988,10 @@ a random value. /Ix
a\rb\<anycrlf>
/^abc./mgx<any>
- abc1 \x0aabc2 \x0babc3xx \x0cabc4 \x0dabc5xx \x0d\x0aabc6 \x85abc7 \x{2028}abc8 \x{2029}abc9 JUNK
+ abc1 \x0aabc2 \x0babc3xx \x0cabc4 \x0dabc5xx \x0d\x0aabc6 \x85abc7 JUNK
/abc.$/mgx<any>
- abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc7\x{2028} abc8\x{2029} abc9
+ abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc7 abc9
/a/<cr><any>
@@ -2147,7 +2147,7 @@ a random value. /Ix
abc\r\n\r\n
/abc.$/mgx<anycrlf>
- abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc7\x{2028} abc8\x{2029} abc9
+ abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc9
/^X/m
XABC
@@ -2589,4 +2589,141 @@ a random value. /Ix
/[[:a\dz:]]/
+/^(?<name>a|b\g<name>c)/
+ aaaa
+ bacxxx
+ bbaccxxx
+ bbbacccxx
+
+/^(?<name>a|b\g'name'c)/
+ aaaa
+ bacxxx
+ bbaccxxx
+ bbbacccxx
+
+/^(a|b\g<1>c)/
+ aaaa
+ bacxxx
+ bbaccxxx
+ bbbacccxx
+
+/^(a|b\g'1'c)/
+ aaaa
+ bacxxx
+ bbaccxxx
+ bbbacccxx
+
+/^(a|b\g'-1'c)/
+ aaaa
+ bacxxx
+ bbaccxxx
+ bbbacccxx
+
+/(^(a|b\g<-1>c))/
+ aaaa
+ bacxxx
+ bbaccxxx
+ bbbacccxx
+
+/(^(a|b\g<-1'c))/
+
+/(^(a|b\g{-1}))/
+ bacxxx
+
+/(?-i:\g<name>)(?i:(?<name>a))/
+ XaaX
+ XAAX
+
+/(?i:\g<name>)(?-i:(?<name>a))/
+ XaaX
+ ** Failers
+ XAAX
+
+/(?-i:\g<+1>)(?i:(a))/
+ XaaX
+ XAAX
+
+/(?=(?<regex>(?#simplesyntax)\$(?<name>[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)(?:\[(?<index>[a-zA-Z0-9_\x{7f}-\x{ff}]+|\$\g<name>)\]|->\g<name>(\(.*?\))?)?|(?#simple syntax withbraces)\$\{(?:\g<name>(?<indices>\[(?:\g<index>|'(?:\\.|[^'\\])*'|"(?:\g<regex>|\\.|[^"\\])*")\])?|\g<complex>|\$\{\g<complex>\})\}|(?#complexsyntax)\{(?<complex>\$(?<segment>\g<name>(\g<indices>*|\(.*?\))?)(?:->\g<segment>)*|\$\g<complex>|\$\{\g<complex>\})\}))\{/
+
+/(?<n>a|b|c)\g<n>*/
+ abc
+ accccbbb
+
+/^(?+1)(?<a>x|y){0}z/
+ xzxx
+ yzyy
+ ** Failers
+ xxz
+
+/(\3)(\1)(a)/
+ cat
+
+/(\3)(\1)(a)/<JS>
+ cat
+
+/TA]/
+ The ACTA] comes
+
+/TA]/<JS>
+ The ACTA] comes
+
+/(?2)[]a()b](abc)/
+ abcbabc
+
+/(?2)[^]a()b](abc)/
+ abcbabc
+
+/(?1)[]a()b](abc)/
+ abcbabc
+ ** Failers
+ abcXabc
+
+/(?1)[^]a()b](abc)/
+ abcXabc
+ ** Failers
+ abcbabc
+
+/(?2)[]a()b](abc)(xyz)/
+ xyzbabcxyz
+
+/(?&N)[]a(?<N>)](?<M>abc)/
+ abc<abc
+
+/(?&N)[]a(?<N>)](abc)/
+ abc<abc
+
+/a[]b/
+
+/a[^]b/
+
+/a[]b/<JS>
+ ** Failers
+ ab
+
+/a[]+b/<JS>
+ ** Failers
+ ab
+
+/a[]*+b/<JS>
+ ** Failers
+ ab
+
+/a[^]b/<JS>
+ aXb
+ a\nb
+ ** Failers
+ ab
+
+/a[^]+b/<JS>
+ aXb
+ a\nX\nXb
+ ** Failers
+ ab
+
+/a(?!)+b/
+
+/a(*FAIL)+b/
+
+/(abc|pqr|123){0}[xyz]/SI
+
/ End of testinput2 /
diff --git a/ext/pcre/pcrelib/testdata/testinput4 b/ext/pcre/pcrelib/testdata/testinput4
index c98c08520..e5f61946e 100644
--- a/ext/pcre/pcrelib/testdata/testinput4
+++ b/ext/pcre/pcrelib/testdata/testinput4
@@ -609,4 +609,18 @@
/[^ABCDEFGHIJKLMNOPQRSTUVWXYZÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔÕÖØÙÚÛÜÃÞĀĂĄĆĈĊČĎÄĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮİIJĴĶĹĻĽĿÅŃŅŇŊŌŎÅŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸŹŻŽÆƂƄƆƇƉƊƋƎÆÆƑƓƔƖƗƘƜÆƟƠƢƤƦƧƩƬƮƯƱƲƳƵƷƸƼDŽLJNJÇÇǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮDZǴǶǷǸǺǼǾȀȂȄȆȈȊȌȎÈȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺȻȽȾÉΆΈΉΊΌΎÎΑΒΓΔΕΖΗΘΙΚΛΜÎΞΟΠΡΣΤΥΦΧΨΩΪΫϒϓϔϘϚϜϞϠϢϤϦϨϪϬϮϴϷϹϺϽϾϿЀÐЂЃЄЅІЇЈЉЊЋЌÐÐŽÐÐБВГДЕЖЗИЙКЛМÐОПРСТУФХЦЧШЩЪЫЬЭЮЯѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎÒҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӀÓÓƒÓ…Ó‡Ó‰Ó‹ÓÓӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӶӸԀԂԄԆԈԊԌԎԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿՀÕÕ‚ÕƒÕ„Õ…Õ†Õ‡ÕˆÕ‰ÕŠÕ‹ÕŒÕÕŽÕÕՑՒՓՔՕՖႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿჀáƒáƒ‚ჃჄჅḀḂḄḆḈḊḌḎá¸á¸’ḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎá¹á¹’ṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎáºáº’ẔẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎá»á»’ỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸἈἉἊἋἌá¼á¼Žá¼á¼˜á¼™á¼šá¼›á¼œá¼á¼¨á¼©á¼ªá¼«á¼¬á¼­á¼®á¼¯á¼¸á¼¹á¼ºá¼»á¼¼á¼½á¼¾á¼¿á½ˆá½‰á½Šá½‹á½Œá½á½™á½›á½á½Ÿá½¨á½©á½ªá½«á½¬á½­á½®á½¯á¾¸á¾¹á¾ºá¾»á¿ˆá¿‰á¿Šá¿‹á¿˜á¿™á¿šá¿›á¿¨á¿©á¿ªá¿«á¿¬á¿¸á¿¹á¿ºá¿»abcdefghijklmnopqrstuvwxyzªµºßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿÄăąćĉċÄÄđēĕėęěÄğġģĥħĩīĭįıijĵķĸĺļľŀłńņňʼnŋÅÅőœŕŗřśÅşšţťŧũūŭůűųŵŷźżžſƀƃƅƈƌƃƕƙƚƛƞơƣƥƨƪƫƭưƴƶƹƺƽƾƿdžljnjǎÇǒǔǖǘǚǜÇǟǡǣǥǧǩǫǭǯǰdzǵǹǻǽǿÈȃȅȇȉȋÈÈȑȓȕȗșțÈȟȡȣȥȧȩȫȭȯȱȳȴȵȶȷȸȹȼȿɀÉɑɒɓɔɕɖɗɘəɚɛɜÉɞɟɠɡɢɣɤɥɦɧɨɩɪɫɬɭɮɯɰɱɲɳɴɵɶɷɸɹɺɻɼɽɾɿʀÊʂʃʄʅʆʇʈʉʊʋʌÊÊŽÊÊʑʒʓʔʕʖʗʘʙʚʛʜÊʞʟʠʡʢʣʤʥʦʧʨʩʪʫʬʭʮʯÎάέήίΰαβγδεζηθικλμνξοπÏςστυφχψωϊϋόÏÏŽÏϑϕϖϗϙϛÏϟϡϣϥϧϩϫϭϯϰϱϲϳϵϸϻϼабвгдежзийклмнопрÑтуфхцчшщъыьÑÑŽÑÑёђѓєѕіїјљњћќÑўџѡѣѥѧѩѫѭѯѱѳѵѷѹѻѽѿÒÒ‹ÒÒÒ‘Ò“Ò•Ò—Ò™Ò›ÒҟҡңҥҧҩҫҭүұҳҵҷҹһҽҿӂӄӆӈӊӌӎӑӓӕӗәӛÓÓŸÓ¡Ó£Ó¥Ó§Ó©Ó«Ó­Ó¯Ó±Ó³ÓµÓ·Ó¹ÔÔƒÔ…Ô‡Ô‰Ô‹ÔÔÕ¡Õ¢Õ£Õ¤Õ¥Õ¦Õ§Õ¨Õ©ÕªÕ«Õ¬Õ­Õ®Õ¯Õ°Õ±Õ²Õ³Õ´ÕµÕ¶Õ·Õ¸Õ¹ÕºÕ»Õ¼Õ½Õ¾Õ¿Ö€Öւփքօֆևᴀá´á´‚ᴃᴄᴅᴆᴇᴈᴉᴊᴋᴌá´á´Žá´á´á´‘ᴒᴓᴔᴕᴖᴗᴘᴙᴚᴛᴜá´á´žá´Ÿá´ á´¡á´¢á´£á´¤á´¥á´¦á´§á´¨á´©á´ªá´«áµ¢áµ£áµ¤áµ¥áµ¦áµ§áµ¨áµ©áµªáµ«áµ¬áµ­áµ®áµ¯áµ°áµ±áµ²áµ³áµ´áµµáµ¶áµ·áµ¹áµºáµ»áµ¼áµ½áµ¾áµ¿á¶€á¶á¶‚ᶃᶄᶅᶆᶇᶈᶉᶊᶋᶌá¶á¶Žá¶á¶á¶‘ᶒᶓᶔᶕᶖᶗᶘᶙᶚá¸á¸ƒá¸…ḇḉḋá¸á¸á¸‘ḓḕḗḙḛá¸á¸Ÿá¸¡á¸£á¸¥á¸§á¸©á¸«á¸­á¸¯á¸±á¸³á¸µá¸·á¸¹á¸»á¸½á¸¿á¹á¹ƒá¹…ṇṉṋá¹á¹á¹‘ṓṕṗṙṛá¹á¹Ÿá¹¡á¹£á¹¥á¹§á¹©á¹«á¹­á¹¯á¹±á¹³á¹µá¹·á¹¹á¹»á¹½á¹¿áºáºƒáº…ẇẉẋáºáºáº‘ẓẕẖẗẘẙẚẛạảấầẩẫậắằẳẵặẹẻẽếá»á»ƒá»…ệỉịá»á»á»‘ồổỗộớá»á»Ÿá»¡á»£á»¥á»§á»©á»«á»­á»¯á»±á»³á»µá»·á»¹á¼€á¼á¼‚ἃἄἅἆἇá¼á¼‘ἒἓἔἕἠἡἢἣἤἥἦἧἰἱἲἳἴἵἶἷὀá½á½‚ὃὄὅá½á½‘ὒὓὔὕὖὗὠὡὢὣὤὥὦὧὰάὲέὴήὶίὸόὺύὼώᾀá¾á¾‚ᾃᾄᾅᾆᾇá¾á¾‘ᾒᾓᾔᾕᾖᾗᾠᾡᾢᾣᾤᾥᾦᾧᾰᾱᾲᾳᾴᾶᾷιῂῃῄῆῇá¿á¿‘ῒΐῖῗῠῡῢΰῤῥῦῧῲῳῴῶῷâ²â²ƒâ²…ⲇⲉⲋâ²â²â²‘ⲓⲕⲗⲙⲛâ²â²Ÿâ²¡â²£â²¥â²§â²©â²«â²­â²¯â²±â²³â²µâ²·â²¹â²»â²½â²¿â³â³ƒâ³…ⳇⳉⳋâ³â³â³‘ⳓⳕⳗⳙⳛâ³â³Ÿâ³¡â³£â³¤â´€â´â´‚ⴃⴄⴅⴆⴇⴈⴉⴊⴋⴌâ´â´Žâ´â´â´‘ⴒⴓⴔⴕⴖⴗⴘⴙⴚⴛⴜâ´â´žâ´Ÿâ´ â´¡â´¢â´£â´¤â´¥ï¬€ï¬ï¬‚ffifflſtstﬓﬔﬕﬖﬗ\d-_^]/8
+/^[^d]*?$/
+ abc
+
+/^[^d]*?$/8
+ abc
+
+/^[^d]*?$/i
+ abc
+
+/^[^d]*?$/8i
+ abc
+
+/(?i)[\xc3\xa9\xc3\xbd]|[\xc3\xa9\xc3\xbdA]/8
+
/ End of testinput4 /
diff --git a/ext/pcre/pcrelib/testdata/testinput5 b/ext/pcre/pcrelib/testdata/testinput5
index 75a4857b4..7d64b436f 100644
--- a/ext/pcre/pcrelib/testdata/testinput5
+++ b/ext/pcre/pcrelib/testdata/testinput5
@@ -461,4 +461,23 @@ can't tell the difference.) --/
/[[:a\x{100}b:]]/8
+/a[^]b/<JS>8
+ a\x{1234}b
+ a\nb
+ ** Failers
+ ab
+
+/a[^]+b/<JS>8
+ aXb
+ a\nX\nX\x{1234}b
+ ** Failers
+ ab
+
+/(\x{de})\1/
+ \x{de}\x{de}
+ \x{123}
+
+/X/8f<any>
+ A\x{1ec5}ABCXYZ
+
/ End of testinput5 /
diff --git a/ext/pcre/pcrelib/testdata/testinput6 b/ext/pcre/pcrelib/testdata/testinput6
index 0204a7aca..a8640f992 100644
--- a/ext/pcre/pcrelib/testdata/testinput6
+++ b/ext/pcre/pcrelib/testdata/testinput6
@@ -763,7 +763,7 @@ of case for anything other than the ASCII letters. /
\x{1b00}\x{12000}\x{7c0}\x{a840}\x{10900}
/The next two are special cases where the lengths of the different cases of the
-same character differ. The first went wrong with heap fram storage; the 2nd
+same character differ. The first went wrong with heap frame storage; the 2nd
was broken in all cases./
/^\x{023a}+?(\x{0130}+)/8i
@@ -907,4 +907,40 @@ was broken in all cases./
/\p{Cc}{2}+/8BZ
+/\x{c0}+\x{116}+/8i
+ \x{c0}\x{e0}\x{116}\x{117}
+
+/[\x{c0}\x{116}]+/8i
+ \x{c0}\x{e0}\x{116}\x{117}
+
+/\p{Carian}\p{Cham}\p{Kayah_Li}\p{Lepcha}\p{Lycian}\p{Lydian}\p{Ol_Chiki}\p{Rejang}\p{Saurashtra}\p{Sundanese}\p{Vai}/8
+ \x{102A4}\x{AA52}\x{A91D}\x{1C46}\x{10283}\x{1092E}\x{1C6B}\x{A93B}\x{A8BF}\x{1BA0}\x{A50A}====
+
+/\x{a77d}\x{1d79}/8i
+ \x{a77d}\x{1d79}
+ \x{1d79}\x{a77d}
+
+/\x{a77d}\x{1d79}/8
+ \x{a77d}\x{1d79}
+ ** Failers
+ \x{1d79}\x{a77d}
+
+/(A)\1/8i
+ AA
+ Aa
+ aa
+ aA
+
+/(\x{de})\1/8i
+ \x{de}\x{de}
+ \x{de}\x{fe}
+ \x{fe}\x{fe}
+ \x{fe}\x{de}
+
+/(\x{10a})\1/8i
+ \x{10a}\x{10a}
+ \x{10a}\x{10b}
+ \x{10b}\x{10b}
+ \x{10b}\x{10a}
+
/ End of testinput6 /
diff --git a/ext/pcre/pcrelib/testdata/testinput7 b/ext/pcre/pcrelib/testdata/testinput7
index 221bc938b..5ec48270b 100644
--- a/ext/pcre/pcrelib/testdata/testinput7
+++ b/ext/pcre/pcrelib/testdata/testinput7
@@ -4151,10 +4151,10 @@
a\rb\<any>
/^abc./mgx<any>
- abc1 \x0aabc2 \x0babc3xx \x0cabc4 \x0dabc5xx \x0d\x0aabc6 \x85abc7 \x{2028}abc8 \x{2029}abc9 JUNK
+ abc1 \x0aabc2 \x0babc3xx \x0cabc4 \x0dabc5xx \x0d\x0aabc6 \x85abc7 JUNK
/abc.$/mgx<any>
- abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc7\x{2028} abc8\x{2029} abc9
+ abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc9
/^a\Rb/<bsr_unicode>
a\nb
@@ -4364,5 +4364,32 @@
a\r\r\r\r\rb
a\x85\85b\<bsr_anycrlf>
a\x0b\0bb\<bsr_anycrlf>
+
+/a(?!)|\wbc/
+ abc
+
+/a[]b/<JS>
+ ** Failers
+ ab
+
+/a[]+b/<JS>
+ ** Failers
+ ab
+
+/a[]*+b/<JS>
+ ** Failers
+ ab
+
+/a[^]b/<JS>
+ aXb
+ a\nb
+ ** Failers
+ ab
+
+/a[^]+b/<JS>
+ aXb
+ a\nX\nXb
+ ** Failers
+ ab
/ End of testinput7 /
diff --git a/ext/pcre/pcrelib/testdata/testinput8 b/ext/pcre/pcrelib/testdata/testinput8
index 5bcfab5c0..11884adf6 100644
--- a/ext/pcre/pcrelib/testdata/testinput8
+++ b/ext/pcre/pcrelib/testdata/testinput8
@@ -664,4 +664,7 @@
a\x{85}b\<bsr_anycrlf>
a\x0bb\<bsr_anycrlf>
+/X/8f<any>
+ A\x{1ec5}ABCXYZ
+
/ End of testinput 8 /
diff --git a/ext/pcre/pcrelib/testdata/testinput9 b/ext/pcre/pcrelib/testdata/testinput9
index 8a606318b..ab044558d 100644
--- a/ext/pcre/pcrelib/testdata/testinput9
+++ b/ext/pcre/pcrelib/testdata/testinput9
@@ -819,10 +819,28 @@
/^\x{023a}+([^X])/8i
\x{023a}\x{2c65}X
+/\x{c0}+\x{116}+/8i
+ \x{c0}\x{e0}\x{116}\x{117}
+
+/[\x{c0}\x{116}]+/8i
+ \x{c0}\x{e0}\x{116}\x{117}
+
/Check property support in non-UTF-8 mode/
/\p{L}{4}/
123abcdefg
123abc\xc4\xc5zz
+/\p{Carian}\p{Cham}\p{Kayah_Li}\p{Lepcha}\p{Lycian}\p{Lydian}\p{Ol_Chiki}\p{Rejang}\p{Saurashtra}\p{Sundanese}\p{Vai}/8
+ \x{102A4}\x{AA52}\x{A91D}\x{1C46}\x{10283}\x{1092E}\x{1C6B}\x{A93B}\x{A8BF}\x{1BA0}\x{A50A}====
+
+/\x{a77d}\x{1d79}/8i
+ \x{a77d}\x{1d79}
+ \x{1d79}\x{a77d}
+
+/\x{a77d}\x{1d79}/8
+ \x{a77d}\x{1d79}
+ ** Failers
+ \x{1d79}\x{a77d}
+
/ End /
diff --git a/ext/pcre/pcrelib/testdata/testoutput1 b/ext/pcre/pcrelib/testdata/testoutput1
index 9b8b268ed..208df49bc 100644
--- a/ext/pcre/pcrelib/testdata/testoutput1
+++ b/ext/pcre/pcrelib/testdata/testoutput1
@@ -6605,4 +6605,8 @@ No match
p
0: p
+/.*[op][xyz]/
+ fooabcfoo
+No match
+
/ End of testinput1 /
diff --git a/ext/pcre/pcrelib/testdata/testoutput10 b/ext/pcre/pcrelib/testdata/testoutput10
index dbd59241a..4eaaa3918 100644
--- a/ext/pcre/pcrelib/testdata/testoutput10
+++ b/ext/pcre/pcrelib/testdata/testoutput10
@@ -21,7 +21,7 @@ Memory allocation (code space): 25
------------------------------------------------------------------
0 21 Bra
3 9 CBra 1
- 8 Any*
+ 8 AllAny*
10 X
12 6 Alt
15 ^
@@ -37,7 +37,7 @@ Memory allocation (code space): 29
0 25 Bra
3 9 Bra
6 04 Opt
- 8 Any*
+ 8 AllAny*
10 X
12 8 Alt
15 04 Opt
diff --git a/ext/pcre/pcrelib/testdata/testoutput2 b/ext/pcre/pcrelib/testdata/testoutput2
index dba227f50..2ac018b3b 100644
--- a/ext/pcre/pcrelib/testdata/testoutput2
+++ b/ext/pcre/pcrelib/testdata/testoutput2
@@ -1126,7 +1126,7 @@ Need char = 'X'
/.*X/IDZs
------------------------------------------------------------------
Bra
- Any*
+ AllAny*
X
Ket
End
@@ -1160,7 +1160,7 @@ No need char
------------------------------------------------------------------
Bra
CBra 1
- Any*
+ AllAny*
X
Alt
^
@@ -1179,7 +1179,7 @@ No need char
------------------------------------------------------------------
Bra
CBra 1
- Any*
+ AllAny*
X
Alt
^
@@ -1199,7 +1199,7 @@ No need char
Bra
Bra
04 Opt
- Any*
+ AllAny*
X
Alt
04 Opt
@@ -1212,8 +1212,8 @@ No need char
------------------------------------------------------------------
Capturing subpattern count = 0
Partial matching not supported
-No options
-First char at start or follows newline
+Options: anchored
+No first char
No need char
/\Biss\B/I+
@@ -7851,7 +7851,7 @@ No match
No match
/^abc./mgx<any>
- abc1 \x0aabc2 \x0babc3xx \x0cabc4 \x0dabc5xx \x0d\x0aabc6 \x85abc7 \x{2028}abc8 \x{2029}abc9 JUNK
+ abc1 \x0aabc2 \x0babc3xx \x0cabc4 \x0dabc5xx \x0d\x0aabc6 \x85abc7 JUNK
0: abc1
0: abc2
0: abc3
@@ -7861,7 +7861,7 @@ No match
0: abc7
/abc.$/mgx<any>
- abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc7\x{2028} abc8\x{2029} abc9
+ abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc7 abc9
0: abc1
0: abc2
0: abc3
@@ -8074,13 +8074,13 @@ No match
Failed: reference to non-existent subpattern at offset 7
/^(a)\g/
-Failed: \g is not followed by a braced name or an optionally braced non-zero number at offset 5
+Failed: a numbered reference must not be zero at offset 5
/^(a)\g{0}/
-Failed: \g is not followed by a braced name or an optionally braced non-zero number at offset 7
+Failed: a numbered reference must not be zero at offset 8
/^(a)\g{3/
-Failed: \g is not followed by a braced name or an optionally braced non-zero number at offset 8
+Failed: \g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number at offset 8
/^(a)\g{4a}/
Failed: reference to non-existent subpattern at offset 9
@@ -8163,7 +8163,7 @@ No match
0+
/abc.$/mgx<anycrlf>
- abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc7\x{2028} abc8\x{2029} abc9
+ abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc9
0: abc1
0: abc4
0: abc5
@@ -8217,13 +8217,13 @@ No match
No match
/x(?-0)y/
-Failed: (?+ or (?- or (?(+ or (?(- must be followed by a non-zero number at offset 5
+Failed: a numbered reference must not be zero at offset 5
/x(?-1)y/
Failed: reference to non-existent subpattern at offset 5
/x(?+0)y/
-Failed: (?+ or (?- or (?(+ or (?(- must be followed by a non-zero number at offset 5
+Failed: a numbered reference must not be zero at offset 5
/x(?+1)y/
Failed: reference to non-existent subpattern at offset 5
@@ -9385,4 +9385,257 @@ Failed: unknown POSIX class name at offset 6
/[[:a\dz:]]/
Failed: unknown POSIX class name at offset 3
+/^(?<name>a|b\g<name>c)/
+ aaaa
+ 0: a
+ 1: a
+ bacxxx
+ 0: bac
+ 1: bac
+ bbaccxxx
+ 0: bbacc
+ 1: bbacc
+ bbbacccxx
+ 0: bbbaccc
+ 1: bbbaccc
+
+/^(?<name>a|b\g'name'c)/
+ aaaa
+ 0: a
+ 1: a
+ bacxxx
+ 0: bac
+ 1: bac
+ bbaccxxx
+ 0: bbacc
+ 1: bbacc
+ bbbacccxx
+ 0: bbbaccc
+ 1: bbbaccc
+
+/^(a|b\g<1>c)/
+ aaaa
+ 0: a
+ 1: a
+ bacxxx
+ 0: bac
+ 1: bac
+ bbaccxxx
+ 0: bbacc
+ 1: bbacc
+ bbbacccxx
+ 0: bbbaccc
+ 1: bbbaccc
+
+/^(a|b\g'1'c)/
+ aaaa
+ 0: a
+ 1: a
+ bacxxx
+ 0: bac
+ 1: bac
+ bbaccxxx
+ 0: bbacc
+ 1: bbacc
+ bbbacccxx
+ 0: bbbaccc
+ 1: bbbaccc
+
+/^(a|b\g'-1'c)/
+ aaaa
+ 0: a
+ 1: a
+ bacxxx
+ 0: bac
+ 1: bac
+ bbaccxxx
+ 0: bbacc
+ 1: bbacc
+ bbbacccxx
+ 0: bbbaccc
+ 1: bbbaccc
+
+/(^(a|b\g<-1>c))/
+ aaaa
+ 0: a
+ 1: a
+ 2: a
+ bacxxx
+ 0: bac
+ 1: bac
+ 2: bac
+ bbaccxxx
+ 0: bbacc
+ 1: bbacc
+ 2: bbacc
+ bbbacccxx
+ 0: bbbaccc
+ 1: bbbaccc
+ 2: bbbaccc
+
+/(^(a|b\g<-1'c))/
+Failed: \g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number at offset 15
+
+/(^(a|b\g{-1}))/
+ bacxxx
+No match
+
+/(?-i:\g<name>)(?i:(?<name>a))/
+ XaaX
+ 0: aa
+ 1: a
+ XAAX
+ 0: AA
+ 1: A
+
+/(?i:\g<name>)(?-i:(?<name>a))/
+ XaaX
+ 0: aa
+ 1: a
+ ** Failers
+No match
+ XAAX
+No match
+
+/(?-i:\g<+1>)(?i:(a))/
+ XaaX
+ 0: aa
+ 1: a
+ XAAX
+ 0: AA
+ 1: A
+
+/(?=(?<regex>(?#simplesyntax)\$(?<name>[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)(?:\[(?<index>[a-zA-Z0-9_\x{7f}-\x{ff}]+|\$\g<name>)\]|->\g<name>(\(.*?\))?)?|(?#simple syntax withbraces)\$\{(?:\g<name>(?<indices>\[(?:\g<index>|'(?:\\.|[^'\\])*'|"(?:\g<regex>|\\.|[^"\\])*")\])?|\g<complex>|\$\{\g<complex>\})\}|(?#complexsyntax)\{(?<complex>\$(?<segment>\g<name>(\g<indices>*|\(.*?\))?)(?:->\g<segment>)*|\$\g<complex>|\$\{\g<complex>\})\}))\{/
+
+/(?<n>a|b|c)\g<n>*/
+ abc
+ 0: abc
+ 1: a
+ accccbbb
+ 0: accccbbb
+ 1: a
+
+/^(?+1)(?<a>x|y){0}z/
+ xzxx
+ 0: xz
+ 1: <unset>
+ yzyy
+ 0: yz
+ 1: <unset>
+ ** Failers
+No match
+ xxz
+No match
+
+/(\3)(\1)(a)/
+ cat
+No match
+
+/(\3)(\1)(a)/<JS>
+ cat
+ 0: a
+ 1:
+ 2:
+ 3: a
+
+/TA]/
+ The ACTA] comes
+ 0: TA]
+
+/TA]/<JS>
+Failed: ] is an invalid data character in JavaScript compatibility mode at offset 2
+
+/(?2)[]a()b](abc)/
+Failed: reference to non-existent subpattern at offset 3
+
+/(?2)[^]a()b](abc)/
+Failed: reference to non-existent subpattern at offset 3
+
+/(?1)[]a()b](abc)/
+ abcbabc
+ 0: abcbabc
+ 1: abc
+ ** Failers
+No match
+ abcXabc
+No match
+
+/(?1)[^]a()b](abc)/
+ abcXabc
+ 0: abcXabc
+ 1: abc
+ ** Failers
+No match
+ abcbabc
+No match
+
+/(?2)[]a()b](abc)(xyz)/
+ xyzbabcxyz
+ 0: xyzbabcxyz
+ 1: abc
+ 2: xyz
+
+/(?&N)[]a(?<N>)](?<M>abc)/
+Failed: reference to non-existent subpattern at offset 4
+
+/(?&N)[]a(?<N>)](abc)/
+Failed: reference to non-existent subpattern at offset 4
+
+/a[]b/
+Failed: missing terminating ] for character class at offset 4
+
+/a[^]b/
+Failed: missing terminating ] for character class at offset 5
+
+/a[]b/<JS>
+ ** Failers
+No match
+ ab
+No match
+
+/a[]+b/<JS>
+ ** Failers
+No match
+ ab
+No match
+
+/a[]*+b/<JS>
+ ** Failers
+No match
+ ab
+No match
+
+/a[^]b/<JS>
+ aXb
+ 0: aXb
+ a\nb
+ 0: a\x0ab
+ ** Failers
+No match
+ ab
+No match
+
+/a[^]+b/<JS>
+ aXb
+ 0: aXb
+ a\nX\nXb
+ 0: a\x0aX\x0aXb
+ ** Failers
+No match
+ ab
+No match
+
+/a(?!)+b/
+Failed: nothing to repeat at offset 5
+
+/a(*FAIL)+b/
+Failed: nothing to repeat at offset 8
+
+/(abc|pqr|123){0}[xyz]/SI
+Capturing subpattern count = 1
+No options
+No first char
+No need char
+Starting byte set: x y z
+
/ End of testinput2 /
diff --git a/ext/pcre/pcrelib/testdata/testoutput4 b/ext/pcre/pcrelib/testdata/testoutput4
index d87ea4bcc..e67a95895 100644
--- a/ext/pcre/pcrelib/testdata/testoutput4
+++ b/ext/pcre/pcrelib/testdata/testoutput4
@@ -1071,4 +1071,22 @@ No match
/[^ABCDEFGHIJKLMNOPQRSTUVWXYZÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔÕÖØÙÚÛÜÃÞĀĂĄĆĈĊČĎÄĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮİIJĴĶĹĻĽĿÅŃŅŇŊŌŎÅŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸŹŻŽÆƂƄƆƇƉƊƋƎÆÆƑƓƔƖƗƘƜÆƟƠƢƤƦƧƩƬƮƯƱƲƳƵƷƸƼDŽLJNJÇÇǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮDZǴǶǷǸǺǼǾȀȂȄȆȈȊȌȎÈȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺȻȽȾÉΆΈΉΊΌΎÎΑΒΓΔΕΖΗΘΙΚΛΜÎΞΟΠΡΣΤΥΦΧΨΩΪΫϒϓϔϘϚϜϞϠϢϤϦϨϪϬϮϴϷϹϺϽϾϿЀÐЂЃЄЅІЇЈЉЊЋЌÐÐŽÐÐБВГДЕЖЗИЙКЛМÐОПРСТУФХЦЧШЩЪЫЬЭЮЯѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎÒҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӀÓÓƒÓ…Ó‡Ó‰Ó‹ÓÓӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӶӸԀԂԄԆԈԊԌԎԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿՀÕÕ‚ÕƒÕ„Õ…Õ†Õ‡ÕˆÕ‰ÕŠÕ‹ÕŒÕÕŽÕÕՑՒՓՔՕՖႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿჀáƒáƒ‚ჃჄჅḀḂḄḆḈḊḌḎá¸á¸’ḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎá¹á¹’ṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎáºáº’ẔẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎá»á»’ỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸἈἉἊἋἌá¼á¼Žá¼á¼˜á¼™á¼šá¼›á¼œá¼á¼¨á¼©á¼ªá¼«á¼¬á¼­á¼®á¼¯á¼¸á¼¹á¼ºá¼»á¼¼á¼½á¼¾á¼¿á½ˆá½‰á½Šá½‹á½Œá½á½™á½›á½á½Ÿá½¨á½©á½ªá½«á½¬á½­á½®á½¯á¾¸á¾¹á¾ºá¾»á¿ˆá¿‰á¿Šá¿‹á¿˜á¿™á¿šá¿›á¿¨á¿©á¿ªá¿«á¿¬á¿¸á¿¹á¿ºá¿»abcdefghijklmnopqrstuvwxyzªµºßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿÄăąćĉċÄÄđēĕėęěÄğġģĥħĩīĭįıijĵķĸĺļľŀłńņňʼnŋÅÅőœŕŗřśÅşšţťŧũūŭůűųŵŷźżžſƀƃƅƈƌƃƕƙƚƛƞơƣƥƨƪƫƭưƴƶƹƺƽƾƿdžljnjǎÇǒǔǖǘǚǜÇǟǡǣǥǧǩǫǭǯǰdzǵǹǻǽǿÈȃȅȇȉȋÈÈȑȓȕȗșțÈȟȡȣȥȧȩȫȭȯȱȳȴȵȶȷȸȹȼȿɀÉɑɒɓɔɕɖɗɘəɚɛɜÉɞɟɠɡɢɣɤɥɦɧɨɩɪɫɬɭɮɯɰɱɲɳɴɵɶɷɸɹɺɻɼɽɾɿʀÊʂʃʄʅʆʇʈʉʊʋʌÊÊŽÊÊʑʒʓʔʕʖʗʘʙʚʛʜÊʞʟʠʡʢʣʤʥʦʧʨʩʪʫʬʭʮʯÎάέήίΰαβγδεζηθικλμνξοπÏςστυφχψωϊϋόÏÏŽÏϑϕϖϗϙϛÏϟϡϣϥϧϩϫϭϯϰϱϲϳϵϸϻϼабвгдежзийклмнопрÑтуфхцчшщъыьÑÑŽÑÑёђѓєѕіїјљњћќÑўџѡѣѥѧѩѫѭѯѱѳѵѷѹѻѽѿÒÒ‹ÒÒÒ‘Ò“Ò•Ò—Ò™Ò›ÒҟҡңҥҧҩҫҭүұҳҵҷҹһҽҿӂӄӆӈӊӌӎӑӓӕӗәӛÓÓŸÓ¡Ó£Ó¥Ó§Ó©Ó«Ó­Ó¯Ó±Ó³ÓµÓ·Ó¹ÔÔƒÔ…Ô‡Ô‰Ô‹ÔÔÕ¡Õ¢Õ£Õ¤Õ¥Õ¦Õ§Õ¨Õ©ÕªÕ«Õ¬Õ­Õ®Õ¯Õ°Õ±Õ²Õ³Õ´ÕµÕ¶Õ·Õ¸Õ¹ÕºÕ»Õ¼Õ½Õ¾Õ¿Ö€Öւփքօֆևᴀá´á´‚ᴃᴄᴅᴆᴇᴈᴉᴊᴋᴌá´á´Žá´á´á´‘ᴒᴓᴔᴕᴖᴗᴘᴙᴚᴛᴜá´á´žá´Ÿá´ á´¡á´¢á´£á´¤á´¥á´¦á´§á´¨á´©á´ªá´«áµ¢áµ£áµ¤áµ¥áµ¦áµ§áµ¨áµ©áµªáµ«áµ¬áµ­áµ®áµ¯áµ°áµ±áµ²áµ³áµ´áµµáµ¶áµ·áµ¹áµºáµ»áµ¼áµ½áµ¾áµ¿á¶€á¶á¶‚ᶃᶄᶅᶆᶇᶈᶉᶊᶋᶌá¶á¶Žá¶á¶á¶‘ᶒᶓᶔᶕᶖᶗᶘᶙᶚá¸á¸ƒá¸…ḇḉḋá¸á¸á¸‘ḓḕḗḙḛá¸á¸Ÿá¸¡á¸£á¸¥á¸§á¸©á¸«á¸­á¸¯á¸±á¸³á¸µá¸·á¸¹á¸»á¸½á¸¿á¹á¹ƒá¹…ṇṉṋá¹á¹á¹‘ṓṕṗṙṛá¹á¹Ÿá¹¡á¹£á¹¥á¹§á¹©á¹«á¹­á¹¯á¹±á¹³á¹µá¹·á¹¹á¹»á¹½á¹¿áºáºƒáº…ẇẉẋáºáºáº‘ẓẕẖẗẘẙẚẛạảấầẩẫậắằẳẵặẹẻẽếá»á»ƒá»…ệỉịá»á»á»‘ồổỗộớá»á»Ÿá»¡á»£á»¥á»§á»©á»«á»­á»¯á»±á»³á»µá»·á»¹á¼€á¼á¼‚ἃἄἅἆἇá¼á¼‘ἒἓἔἕἠἡἢἣἤἥἦἧἰἱἲἳἴἵἶἷὀá½á½‚ὃὄὅá½á½‘ὒὓὔὕὖὗὠὡὢὣὤὥὦὧὰάὲέὴήὶίὸόὺύὼώᾀá¾á¾‚ᾃᾄᾅᾆᾇá¾á¾‘ᾒᾓᾔᾕᾖᾗᾠᾡᾢᾣᾤᾥᾦᾧᾰᾱᾲᾳᾴᾶᾷιῂῃῄῆῇá¿á¿‘ῒΐῖῗῠῡῢΰῤῥῦῧῲῳῴῶῷâ²â²ƒâ²…ⲇⲉⲋâ²â²â²‘ⲓⲕⲗⲙⲛâ²â²Ÿâ²¡â²£â²¥â²§â²©â²«â²­â²¯â²±â²³â²µâ²·â²¹â²»â²½â²¿â³â³ƒâ³…ⳇⳉⳋâ³â³â³‘ⳓⳕⳗⳙⳛâ³â³Ÿâ³¡â³£â³¤â´€â´â´‚ⴃⴄⴅⴆⴇⴈⴉⴊⴋⴌâ´â´Žâ´â´â´‘ⴒⴓⴔⴕⴖⴗⴘⴙⴚⴛⴜâ´â´žâ´Ÿâ´ â´¡â´¢â´£â´¤â´¥ï¬€ï¬ï¬‚ffifflſtstﬓﬔﬕﬖﬗ\d-_^]/8
+/^[^d]*?$/
+ abc
+ 0: abc
+
+/^[^d]*?$/8
+ abc
+ 0: abc
+
+/^[^d]*?$/i
+ abc
+ 0: abc
+
+/^[^d]*?$/8i
+ abc
+ 0: abc
+
+/(?i)[\xc3\xa9\xc3\xbd]|[\xc3\xa9\xc3\xbdA]/8
+
/ End of testinput4 /
diff --git a/ext/pcre/pcrelib/testdata/testoutput5 b/ext/pcre/pcrelib/testdata/testoutput5
index abbe1c87d..956723370 100644
--- a/ext/pcre/pcrelib/testdata/testoutput5
+++ b/ext/pcre/pcrelib/testdata/testoutput5
@@ -1608,4 +1608,37 @@ No match
/[[:a\x{100}b:]]/8
Failed: unknown POSIX class name at offset 3
+/a[^]b/<JS>8
+ a\x{1234}b
+ 0: a\x{1234}b
+ a\nb
+ 0: a\x{0a}b
+ ** Failers
+No match
+ ab
+No match
+
+/a[^]+b/<JS>8
+ aXb
+ 0: aXb
+ a\nX\nX\x{1234}b
+ 0: a\x{0a}X\x{0a}X\x{1234}b
+ ** Failers
+No match
+ ab
+No match
+
+/(\x{de})\1/
+ \x{de}\x{de}
+ 0: \xde\xde
+ 1: \xde
+ \x{123}
+** Character \x{123} is greater than 255 and UTF-8 mode is not enabled.
+** Truncation will probably give the wrong result.
+No match
+
+/X/8f<any>
+ A\x{1ec5}ABCXYZ
+ 0: X
+
/ End of testinput5 /
diff --git a/ext/pcre/pcrelib/testdata/testoutput6 b/ext/pcre/pcrelib/testdata/testoutput6
index db825b08c..caba466bc 100644
--- a/ext/pcre/pcrelib/testdata/testoutput6
+++ b/ext/pcre/pcrelib/testdata/testoutput6
@@ -1431,7 +1431,7 @@ of case for anything other than the ASCII letters. /
0: \x{1b00}\x{12000}\x{7c0}\x{a840}\x{10900}
/The next two are special cases where the lengths of the different cases of the
-same character differ. The first went wrong with heap fram storage; the 2nd
+same character differ. The first went wrong with heap frame storage; the 2nd
was broken in all cases./
/^\x{023a}+?(\x{0130}+)/8i
@@ -1679,4 +1679,72 @@ No match
End
------------------------------------------------------------------
+/\x{c0}+\x{116}+/8i
+ \x{c0}\x{e0}\x{116}\x{117}
+ 0: \x{c0}\x{e0}\x{116}\x{117}
+
+/[\x{c0}\x{116}]+/8i
+ \x{c0}\x{e0}\x{116}\x{117}
+ 0: \x{c0}\x{e0}\x{116}\x{117}
+
+/\p{Carian}\p{Cham}\p{Kayah_Li}\p{Lepcha}\p{Lycian}\p{Lydian}\p{Ol_Chiki}\p{Rejang}\p{Saurashtra}\p{Sundanese}\p{Vai}/8
+ \x{102A4}\x{AA52}\x{A91D}\x{1C46}\x{10283}\x{1092E}\x{1C6B}\x{A93B}\x{A8BF}\x{1BA0}\x{A50A}====
+ 0: \x{102a4}\x{aa52}\x{a91d}\x{1c46}\x{10283}\x{1092e}\x{1c6b}\x{a93b}\x{a8bf}\x{1ba0}\x{a50a}
+
+/\x{a77d}\x{1d79}/8i
+ \x{a77d}\x{1d79}
+ 0: \x{a77d}\x{1d79}
+ \x{1d79}\x{a77d}
+ 0: \x{1d79}\x{a77d}
+
+/\x{a77d}\x{1d79}/8
+ \x{a77d}\x{1d79}
+ 0: \x{a77d}\x{1d79}
+ ** Failers
+No match
+ \x{1d79}\x{a77d}
+No match
+
+/(A)\1/8i
+ AA
+ 0: AA
+ 1: A
+ Aa
+ 0: Aa
+ 1: A
+ aa
+ 0: aa
+ 1: a
+ aA
+ 0: aA
+ 1: a
+
+/(\x{de})\1/8i
+ \x{de}\x{de}
+ 0: \x{de}\x{de}
+ 1: \x{de}
+ \x{de}\x{fe}
+ 0: \x{de}\x{fe}
+ 1: \x{de}
+ \x{fe}\x{fe}
+ 0: \x{fe}\x{fe}
+ 1: \x{fe}
+ \x{fe}\x{de}
+ 0: \x{fe}\x{de}
+ 1: \x{fe}
+
+/(\x{10a})\1/8i
+ \x{10a}\x{10a}
+ 0: \x{10a}\x{10a}
+ 1: \x{10a}
+ \x{10a}\x{10b}
+ 0: \x{10a}\x{10b}
+ 1: \x{10a}
+ \x{10b}\x{10b}
+ 0: \x{10b}\x{10b}
+ 1: \x{10b}
+ \x{10b}\x{10a}
+ 0: \x{10b}\x{10a}
+ 1: \x{10b}
+
/ End of testinput6 /
diff --git a/ext/pcre/pcrelib/testdata/testoutput7 b/ext/pcre/pcrelib/testdata/testoutput7
index d8e3833f3..aef4b6ceb 100644
--- a/ext/pcre/pcrelib/testdata/testoutput7
+++ b/ext/pcre/pcrelib/testdata/testoutput7
@@ -6805,7 +6805,7 @@ No match
No match
/^abc./mgx<any>
- abc1 \x0aabc2 \x0babc3xx \x0cabc4 \x0dabc5xx \x0d\x0aabc6 \x85abc7 \x{2028}abc8 \x{2029}abc9 JUNK
+ abc1 \x0aabc2 \x0babc3xx \x0cabc4 \x0dabc5xx \x0d\x0aabc6 \x85abc7 JUNK
0: abc1
0: abc2
0: abc3
@@ -6815,7 +6815,7 @@ No match
0: abc7
/abc.$/mgx<any>
- abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc7\x{2028} abc8\x{2029} abc9
+ abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc9
0: abc1
0: abc2
0: abc3
@@ -7211,5 +7211,47 @@ No match
No match
a\x0b\0bb\<bsr_anycrlf>
No match
+
+/a(?!)|\wbc/
+ abc
+ 0: abc
+
+/a[]b/<JS>
+ ** Failers
+No match
+ ab
+No match
+
+/a[]+b/<JS>
+ ** Failers
+No match
+ ab
+No match
+
+/a[]*+b/<JS>
+ ** Failers
+No match
+ ab
+No match
+
+/a[^]b/<JS>
+ aXb
+ 0: aXb
+ a\nb
+ 0: a\x0ab
+ ** Failers
+No match
+ ab
+No match
+
+/a[^]+b/<JS>
+ aXb
+ 0: aXb
+ a\nX\nXb
+ 0: a\x0aX\x0aXb
+ ** Failers
+No match
+ ab
+No match
/ End of testinput7 /
diff --git a/ext/pcre/pcrelib/testdata/testoutput8 b/ext/pcre/pcrelib/testdata/testoutput8
index 631e5b82f..af10c4ae7 100644
--- a/ext/pcre/pcrelib/testdata/testoutput8
+++ b/ext/pcre/pcrelib/testdata/testoutput8
@@ -1284,4 +1284,8 @@ No match
a\x0bb\<bsr_anycrlf>
No match
+/X/8f<any>
+ A\x{1ec5}ABCXYZ
+ 0: X
+
/ End of testinput 8 /
diff --git a/ext/pcre/pcrelib/testdata/testoutput9 b/ext/pcre/pcrelib/testdata/testoutput9
index acaeb398d..04e3873bb 100644
--- a/ext/pcre/pcrelib/testdata/testoutput9
+++ b/ext/pcre/pcrelib/testdata/testoutput9
@@ -1632,6 +1632,18 @@ No match
\x{023a}\x{2c65}X
0: \x{23a}\x{2c65}
+/\x{c0}+\x{116}+/8i
+ \x{c0}\x{e0}\x{116}\x{117}
+ 0: \x{c0}\x{e0}\x{116}\x{117}
+ 1: \x{c0}\x{e0}\x{116}
+
+/[\x{c0}\x{116}]+/8i
+ \x{c0}\x{e0}\x{116}\x{117}
+ 0: \x{c0}\x{e0}\x{116}\x{117}
+ 1: \x{c0}\x{e0}\x{116}
+ 2: \x{c0}\x{e0}
+ 3: \x{c0}
+
/Check property support in non-UTF-8 mode/
/\p{L}{4}/
@@ -1640,4 +1652,22 @@ No match
123abc\xc4\xc5zz
0: abc\xc4
+/\p{Carian}\p{Cham}\p{Kayah_Li}\p{Lepcha}\p{Lycian}\p{Lydian}\p{Ol_Chiki}\p{Rejang}\p{Saurashtra}\p{Sundanese}\p{Vai}/8
+ \x{102A4}\x{AA52}\x{A91D}\x{1C46}\x{10283}\x{1092E}\x{1C6B}\x{A93B}\x{A8BF}\x{1BA0}\x{A50A}====
+ 0: \x{102a4}\x{aa52}\x{a91d}\x{1c46}\x{10283}\x{1092e}\x{1c6b}\x{a93b}\x{a8bf}\x{1ba0}\x{a50a}
+
+/\x{a77d}\x{1d79}/8i
+ \x{a77d}\x{1d79}
+ 0: \x{a77d}\x{1d79}
+ \x{1d79}\x{a77d}
+ 0: \x{1d79}\x{a77d}
+
+/\x{a77d}\x{1d79}/8
+ \x{a77d}\x{1d79}
+ 0: \x{a77d}\x{1d79}
+ ** Failers
+No match
+ \x{1d79}\x{a77d}
+No match
+
/ End /
diff --git a/ext/pcre/pcrelib/ucp.h b/ext/pcre/pcrelib/ucp.h
index 3a4179b76..1968e4765 100644
--- a/ext/pcre/pcrelib/ucp.h
+++ b/ext/pcre/pcrelib/ucp.h
@@ -121,11 +121,24 @@ enum {
ucp_Tifinagh,
ucp_Ugaritic,
ucp_Yi,
- ucp_Balinese, /* New for Unicode 5.0.0 */
- ucp_Cuneiform, /* New for Unicode 5.0.0 */
- ucp_Nko, /* New for Unicode 5.0.0 */
- ucp_Phags_Pa, /* New for Unicode 5.0.0 */
- ucp_Phoenician /* New for Unicode 5.0.0 */
+ /* New for Unicode 5.0: */
+ ucp_Balinese,
+ ucp_Cuneiform,
+ ucp_Nko,
+ ucp_Phags_Pa,
+ ucp_Phoenician,
+ /* New for Unicode 5.1: */
+ ucp_Carian,
+ ucp_Cham,
+ ucp_Kayah_Li,
+ ucp_Lepcha,
+ ucp_Lycian,
+ ucp_Lydian,
+ ucp_Ol_Chiki,
+ ucp_Rejang,
+ ucp_Saurashtra,
+ ucp_Sundanese,
+ ucp_Vai
};
#endif
diff --git a/ext/pcre/pcrelib/ucpinternal.h b/ext/pcre/pcrelib/ucpinternal.h
deleted file mode 100644
index 811a373c8..000000000
--- a/ext/pcre/pcrelib/ucpinternal.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/*************************************************
-* Unicode Property Table handler *
-*************************************************/
-
-#ifndef _UCPINTERNAL_H
-#define _UCPINTERNAL_H
-
-/* Internal header file defining the layout of the bits in each pair of 32-bit
-words that form a data item in the table. */
-
-typedef struct cnode {
- pcre_uint32 f0;
- pcre_uint32 f1;
-} cnode;
-
-/* Things for the f0 field */
-
-#define f0_scriptmask 0xff000000 /* Mask for script field */
-#define f0_scriptshift 24 /* Shift for script value */
-#define f0_rangeflag 0x00f00000 /* Flag for a range item */
-#define f0_charmask 0x001fffff /* Mask for code point value */
-
-/* Things for the f1 field */
-
-#define f1_typemask 0xfc000000 /* Mask for char type field */
-#define f1_typeshift 26 /* Shift for the type field */
-#define f1_rangemask 0x0000ffff /* Mask for a range offset */
-#define f1_casemask 0x0000ffff /* Mask for a case offset */
-#define f1_caseneg 0xffff8000 /* Bits for negation */
-
-/* The data consists of a vector of structures of type cnode. The two unsigned
-32-bit integers are used as follows:
-
-(f0) (1) The most significant byte holds the script number. The numbers are
- defined by the enum in ucp.h.
-
- (2) The 0x00800000 bit is set if this entry defines a range of characters.
- It is not set if this entry defines a single character
-
- (3) The 0x00600000 bits are spare.
-
- (4) The 0x001fffff bits contain the code point. No Unicode code point will
- ever be greater than 0x0010ffff, so this should be OK for ever.
-
-(f1) (1) The 0xfc000000 bits contain the character type number. The numbers are
- defined by an enum in ucp.h.
-
- (2) The 0x03ff0000 bits are spare.
-
- (3) The 0x0000ffff bits contain EITHER the unsigned offset to the top of
- range if this entry defines a range, OR the *signed* offset to the
- character's "other case" partner if this entry defines a single
- character. There is no partner if the value is zero.
-
--------------------------------------------------------------------------------
-| script (8) |.|.|.| codepoint (21) || type (6) |.|.| spare (8) | offset (16) |
--------------------------------------------------------------------------------
- | | | | |
- | | |-> spare | |-> spare
- | | |
- | |-> spare |-> spare
- |
- |-> range flag
-
-The upper/lower casing information is set only for characters that come in
-pairs. The non-one-to-one mappings in the Unicode data are ignored.
-
-When searching the data, proceed as follows:
-
-(1) Set up for a binary chop search.
-
-(2) If the top is not greater than the bottom, the character is not in the
- table. Its type must therefore be "Cn" ("Undefined").
-
-(3) Find the middle vector element.
-
-(4) Extract the code point and compare. If equal, we are done.
-
-(5) If the test character is smaller, set the top to the current point, and
- goto (2).
-
-(6) If the current entry defines a range, compute the last character by adding
- the offset, and see if the test character is within the range. If it is,
- we are done.
-
-(7) Otherwise, set the bottom to one element past the current point and goto
- (2).
-*/
-
-#endif /* _UCPINTERNAL_H */
-
-/* End of ucpinternal.h */
diff --git a/ext/pcre/pcrelib/ucptable.h b/ext/pcre/pcrelib/ucptable.h
deleted file mode 100644
index a274d443e..000000000
--- a/ext/pcre/pcrelib/ucptable.h
+++ /dev/null
@@ -1,3088 +0,0 @@
-/* This source module is automatically generated from the Unicode
-property table. See ucpinternal.h for a description of the layout.
-This version was made from the Unicode 5.0.0 tables. */
-
-static const cnode ucp_table[] = {
- { 0x09800000, 0x0000001f },
- { 0x09000020, 0x74000000 },
- { 0x09800021, 0x54000002 },
- { 0x09000024, 0x5c000000 },
- { 0x09800025, 0x54000002 },
- { 0x09000028, 0x58000000 },
- { 0x09000029, 0x48000000 },
- { 0x0900002a, 0x54000000 },
- { 0x0900002b, 0x64000000 },
- { 0x0900002c, 0x54000000 },
- { 0x0900002d, 0x44000000 },
- { 0x0980002e, 0x54000001 },
- { 0x09800030, 0x34000009 },
- { 0x0980003a, 0x54000001 },
- { 0x0980003c, 0x64000002 },
- { 0x0980003f, 0x54000001 },
- { 0x21000041, 0x24000020 },
- { 0x21000042, 0x24000020 },
- { 0x21000043, 0x24000020 },
- { 0x21000044, 0x24000020 },
- { 0x21000045, 0x24000020 },
- { 0x21000046, 0x24000020 },
- { 0x21000047, 0x24000020 },
- { 0x21000048, 0x24000020 },
- { 0x21000049, 0x24000020 },
- { 0x2100004a, 0x24000020 },
- { 0x2100004b, 0x24000020 },
- { 0x2100004c, 0x24000020 },
- { 0x2100004d, 0x24000020 },
- { 0x2100004e, 0x24000020 },
- { 0x2100004f, 0x24000020 },
- { 0x21000050, 0x24000020 },
- { 0x21000051, 0x24000020 },
- { 0x21000052, 0x24000020 },
- { 0x21000053, 0x24000020 },
- { 0x21000054, 0x24000020 },
- { 0x21000055, 0x24000020 },
- { 0x21000056, 0x24000020 },
- { 0x21000057, 0x24000020 },
- { 0x21000058, 0x24000020 },
- { 0x21000059, 0x24000020 },
- { 0x2100005a, 0x24000020 },
- { 0x0900005b, 0x58000000 },
- { 0x0900005c, 0x54000000 },
- { 0x0900005d, 0x48000000 },
- { 0x0900005e, 0x60000000 },
- { 0x0900005f, 0x40000000 },
- { 0x09000060, 0x60000000 },
- { 0x21000061, 0x1400ffe0 },
- { 0x21000062, 0x1400ffe0 },
- { 0x21000063, 0x1400ffe0 },
- { 0x21000064, 0x1400ffe0 },
- { 0x21000065, 0x1400ffe0 },
- { 0x21000066, 0x1400ffe0 },
- { 0x21000067, 0x1400ffe0 },
- { 0x21000068, 0x1400ffe0 },
- { 0x21000069, 0x1400ffe0 },
- { 0x2100006a, 0x1400ffe0 },
- { 0x2100006b, 0x1400ffe0 },
- { 0x2100006c, 0x1400ffe0 },
- { 0x2100006d, 0x1400ffe0 },
- { 0x2100006e, 0x1400ffe0 },
- { 0x2100006f, 0x1400ffe0 },
- { 0x21000070, 0x1400ffe0 },
- { 0x21000071, 0x1400ffe0 },
- { 0x21000072, 0x1400ffe0 },
- { 0x21000073, 0x1400ffe0 },
- { 0x21000074, 0x1400ffe0 },
- { 0x21000075, 0x1400ffe0 },
- { 0x21000076, 0x1400ffe0 },
- { 0x21000077, 0x1400ffe0 },
- { 0x21000078, 0x1400ffe0 },
- { 0x21000079, 0x1400ffe0 },
- { 0x2100007a, 0x1400ffe0 },
- { 0x0900007b, 0x58000000 },
- { 0x0900007c, 0x64000000 },
- { 0x0900007d, 0x48000000 },
- { 0x0900007e, 0x64000000 },
- { 0x0980007f, 0x00000020 },
- { 0x090000a0, 0x74000000 },
- { 0x090000a1, 0x54000000 },
- { 0x098000a2, 0x5c000003 },
- { 0x098000a6, 0x68000001 },
- { 0x090000a8, 0x60000000 },
- { 0x090000a9, 0x68000000 },
- { 0x210000aa, 0x14000000 },
- { 0x090000ab, 0x50000000 },
- { 0x090000ac, 0x64000000 },
- { 0x090000ad, 0x04000000 },
- { 0x090000ae, 0x68000000 },
- { 0x090000af, 0x60000000 },
- { 0x090000b0, 0x68000000 },
- { 0x090000b1, 0x64000000 },
- { 0x098000b2, 0x3c000001 },
- { 0x090000b4, 0x60000000 },
- { 0x090000b5, 0x140002e7 },
- { 0x090000b6, 0x68000000 },
- { 0x090000b7, 0x54000000 },
- { 0x090000b8, 0x60000000 },
- { 0x090000b9, 0x3c000000 },
- { 0x210000ba, 0x14000000 },
- { 0x090000bb, 0x4c000000 },
- { 0x098000bc, 0x3c000002 },
- { 0x090000bf, 0x54000000 },
- { 0x210000c0, 0x24000020 },
- { 0x210000c1, 0x24000020 },
- { 0x210000c2, 0x24000020 },
- { 0x210000c3, 0x24000020 },
- { 0x210000c4, 0x24000020 },
- { 0x210000c5, 0x24000020 },
- { 0x210000c6, 0x24000020 },
- { 0x210000c7, 0x24000020 },
- { 0x210000c8, 0x24000020 },
- { 0x210000c9, 0x24000020 },
- { 0x210000ca, 0x24000020 },
- { 0x210000cb, 0x24000020 },
- { 0x210000cc, 0x24000020 },
- { 0x210000cd, 0x24000020 },
- { 0x210000ce, 0x24000020 },
- { 0x210000cf, 0x24000020 },
- { 0x210000d0, 0x24000020 },
- { 0x210000d1, 0x24000020 },
- { 0x210000d2, 0x24000020 },
- { 0x210000d3, 0x24000020 },
- { 0x210000d4, 0x24000020 },
- { 0x210000d5, 0x24000020 },
- { 0x210000d6, 0x24000020 },
- { 0x090000d7, 0x64000000 },
- { 0x210000d8, 0x24000020 },
- { 0x210000d9, 0x24000020 },
- { 0x210000da, 0x24000020 },
- { 0x210000db, 0x24000020 },
- { 0x210000dc, 0x24000020 },
- { 0x210000dd, 0x24000020 },
- { 0x210000de, 0x24000020 },
- { 0x210000df, 0x14000000 },
- { 0x210000e0, 0x1400ffe0 },
- { 0x210000e1, 0x1400ffe0 },
- { 0x210000e2, 0x1400ffe0 },
- { 0x210000e3, 0x1400ffe0 },
- { 0x210000e4, 0x1400ffe0 },
- { 0x210000e5, 0x1400ffe0 },
- { 0x210000e6, 0x1400ffe0 },
- { 0x210000e7, 0x1400ffe0 },
- { 0x210000e8, 0x1400ffe0 },
- { 0x210000e9, 0x1400ffe0 },
- { 0x210000ea, 0x1400ffe0 },
- { 0x210000eb, 0x1400ffe0 },
- { 0x210000ec, 0x1400ffe0 },
- { 0x210000ed, 0x1400ffe0 },
- { 0x210000ee, 0x1400ffe0 },
- { 0x210000ef, 0x1400ffe0 },
- { 0x210000f0, 0x1400ffe0 },
- { 0x210000f1, 0x1400ffe0 },
- { 0x210000f2, 0x1400ffe0 },
- { 0x210000f3, 0x1400ffe0 },
- { 0x210000f4, 0x1400ffe0 },
- { 0x210000f5, 0x1400ffe0 },
- { 0x210000f6, 0x1400ffe0 },
- { 0x090000f7, 0x64000000 },
- { 0x210000f8, 0x1400ffe0 },
- { 0x210000f9, 0x1400ffe0 },
- { 0x210000fa, 0x1400ffe0 },
- { 0x210000fb, 0x1400ffe0 },
- { 0x210000fc, 0x1400ffe0 },
- { 0x210000fd, 0x1400ffe0 },
- { 0x210000fe, 0x1400ffe0 },
- { 0x210000ff, 0x14000079 },
- { 0x21000100, 0x24000001 },
- { 0x21000101, 0x1400ffff },
- { 0x21000102, 0x24000001 },
- { 0x21000103, 0x1400ffff },
- { 0x21000104, 0x24000001 },
- { 0x21000105, 0x1400ffff },
- { 0x21000106, 0x24000001 },
- { 0x21000107, 0x1400ffff },
- { 0x21000108, 0x24000001 },
- { 0x21000109, 0x1400ffff },
- { 0x2100010a, 0x24000001 },
- { 0x2100010b, 0x1400ffff },
- { 0x2100010c, 0x24000001 },
- { 0x2100010d, 0x1400ffff },
- { 0x2100010e, 0x24000001 },
- { 0x2100010f, 0x1400ffff },
- { 0x21000110, 0x24000001 },
- { 0x21000111, 0x1400ffff },
- { 0x21000112, 0x24000001 },
- { 0x21000113, 0x1400ffff },
- { 0x21000114, 0x24000001 },
- { 0x21000115, 0x1400ffff },
- { 0x21000116, 0x24000001 },
- { 0x21000117, 0x1400ffff },
- { 0x21000118, 0x24000001 },
- { 0x21000119, 0x1400ffff },
- { 0x2100011a, 0x24000001 },
- { 0x2100011b, 0x1400ffff },
- { 0x2100011c, 0x24000001 },
- { 0x2100011d, 0x1400ffff },
- { 0x2100011e, 0x24000001 },
- { 0x2100011f, 0x1400ffff },
- { 0x21000120, 0x24000001 },
- { 0x21000121, 0x1400ffff },
- { 0x21000122, 0x24000001 },
- { 0x21000123, 0x1400ffff },
- { 0x21000124, 0x24000001 },
- { 0x21000125, 0x1400ffff },
- { 0x21000126, 0x24000001 },
- { 0x21000127, 0x1400ffff },
- { 0x21000128, 0x24000001 },
- { 0x21000129, 0x1400ffff },
- { 0x2100012a, 0x24000001 },
- { 0x2100012b, 0x1400ffff },
- { 0x2100012c, 0x24000001 },
- { 0x2100012d, 0x1400ffff },
- { 0x2100012e, 0x24000001 },
- { 0x2100012f, 0x1400ffff },
- { 0x21000130, 0x2400ff39 },
- { 0x21000131, 0x1400ff18 },
- { 0x21000132, 0x24000001 },
- { 0x21000133, 0x1400ffff },
- { 0x21000134, 0x24000001 },
- { 0x21000135, 0x1400ffff },
- { 0x21000136, 0x24000001 },
- { 0x21000137, 0x1400ffff },
- { 0x21000138, 0x14000000 },
- { 0x21000139, 0x24000001 },
- { 0x2100013a, 0x1400ffff },
- { 0x2100013b, 0x24000001 },
- { 0x2100013c, 0x1400ffff },
- { 0x2100013d, 0x24000001 },
- { 0x2100013e, 0x1400ffff },
- { 0x2100013f, 0x24000001 },
- { 0x21000140, 0x1400ffff },
- { 0x21000141, 0x24000001 },
- { 0x21000142, 0x1400ffff },
- { 0x21000143, 0x24000001 },
- { 0x21000144, 0x1400ffff },
- { 0x21000145, 0x24000001 },
- { 0x21000146, 0x1400ffff },
- { 0x21000147, 0x24000001 },
- { 0x21000148, 0x1400ffff },
- { 0x21000149, 0x14000000 },
- { 0x2100014a, 0x24000001 },
- { 0x2100014b, 0x1400ffff },
- { 0x2100014c, 0x24000001 },
- { 0x2100014d, 0x1400ffff },
- { 0x2100014e, 0x24000001 },
- { 0x2100014f, 0x1400ffff },
- { 0x21000150, 0x24000001 },
- { 0x21000151, 0x1400ffff },
- { 0x21000152, 0x24000001 },
- { 0x21000153, 0x1400ffff },
- { 0x21000154, 0x24000001 },
- { 0x21000155, 0x1400ffff },
- { 0x21000156, 0x24000001 },
- { 0x21000157, 0x1400ffff },
- { 0x21000158, 0x24000001 },
- { 0x21000159, 0x1400ffff },
- { 0x2100015a, 0x24000001 },
- { 0x2100015b, 0x1400ffff },
- { 0x2100015c, 0x24000001 },
- { 0x2100015d, 0x1400ffff },
- { 0x2100015e, 0x24000001 },
- { 0x2100015f, 0x1400ffff },
- { 0x21000160, 0x24000001 },
- { 0x21000161, 0x1400ffff },
- { 0x21000162, 0x24000001 },
- { 0x21000163, 0x1400ffff },
- { 0x21000164, 0x24000001 },
- { 0x21000165, 0x1400ffff },
- { 0x21000166, 0x24000001 },
- { 0x21000167, 0x1400ffff },
- { 0x21000168, 0x24000001 },
- { 0x21000169, 0x1400ffff },
- { 0x2100016a, 0x24000001 },
- { 0x2100016b, 0x1400ffff },
- { 0x2100016c, 0x24000001 },
- { 0x2100016d, 0x1400ffff },
- { 0x2100016e, 0x24000001 },
- { 0x2100016f, 0x1400ffff },
- { 0x21000170, 0x24000001 },
- { 0x21000171, 0x1400ffff },
- { 0x21000172, 0x24000001 },
- { 0x21000173, 0x1400ffff },
- { 0x21000174, 0x24000001 },
- { 0x21000175, 0x1400ffff },
- { 0x21000176, 0x24000001 },
- { 0x21000177, 0x1400ffff },
- { 0x21000178, 0x2400ff87 },
- { 0x21000179, 0x24000001 },
- { 0x2100017a, 0x1400ffff },
- { 0x2100017b, 0x24000001 },
- { 0x2100017c, 0x1400ffff },
- { 0x2100017d, 0x24000001 },
- { 0x2100017e, 0x1400ffff },
- { 0x2100017f, 0x1400fed4 },
- { 0x21000180, 0x140000c3 },
- { 0x21000181, 0x240000d2 },
- { 0x21000182, 0x24000001 },
- { 0x21000183, 0x1400ffff },
- { 0x21000184, 0x24000001 },
- { 0x21000185, 0x1400ffff },
- { 0x21000186, 0x240000ce },
- { 0x21000187, 0x24000001 },
- { 0x21000188, 0x1400ffff },
- { 0x21000189, 0x240000cd },
- { 0x2100018a, 0x240000cd },
- { 0x2100018b, 0x24000001 },
- { 0x2100018c, 0x1400ffff },
- { 0x2100018d, 0x14000000 },
- { 0x2100018e, 0x2400004f },
- { 0x2100018f, 0x240000ca },
- { 0x21000190, 0x240000cb },
- { 0x21000191, 0x24000001 },
- { 0x21000192, 0x1400ffff },
- { 0x21000193, 0x240000cd },
- { 0x21000194, 0x240000cf },
- { 0x21000195, 0x14000061 },
- { 0x21000196, 0x240000d3 },
- { 0x21000197, 0x240000d1 },
- { 0x21000198, 0x24000001 },
- { 0x21000199, 0x1400ffff },
- { 0x2100019a, 0x140000a3 },
- { 0x2100019b, 0x14000000 },
- { 0x2100019c, 0x240000d3 },
- { 0x2100019d, 0x240000d5 },
- { 0x2100019e, 0x14000082 },
- { 0x2100019f, 0x240000d6 },
- { 0x210001a0, 0x24000001 },
- { 0x210001a1, 0x1400ffff },
- { 0x210001a2, 0x24000001 },
- { 0x210001a3, 0x1400ffff },
- { 0x210001a4, 0x24000001 },
- { 0x210001a5, 0x1400ffff },
- { 0x210001a6, 0x240000da },
- { 0x210001a7, 0x24000001 },
- { 0x210001a8, 0x1400ffff },
- { 0x210001a9, 0x240000da },
- { 0x218001aa, 0x14000001 },
- { 0x210001ac, 0x24000001 },
- { 0x210001ad, 0x1400ffff },
- { 0x210001ae, 0x240000da },
- { 0x210001af, 0x24000001 },
- { 0x210001b0, 0x1400ffff },
- { 0x210001b1, 0x240000d9 },
- { 0x210001b2, 0x240000d9 },
- { 0x210001b3, 0x24000001 },
- { 0x210001b4, 0x1400ffff },
- { 0x210001b5, 0x24000001 },
- { 0x210001b6, 0x1400ffff },
- { 0x210001b7, 0x240000db },
- { 0x210001b8, 0x24000001 },
- { 0x210001b9, 0x1400ffff },
- { 0x210001ba, 0x14000000 },
- { 0x210001bb, 0x1c000000 },
- { 0x210001bc, 0x24000001 },
- { 0x210001bd, 0x1400ffff },
- { 0x210001be, 0x14000000 },
- { 0x210001bf, 0x14000038 },
- { 0x218001c0, 0x1c000003 },
- { 0x210001c4, 0x24000002 },
- { 0x210001c5, 0x2000ffff },
- { 0x210001c6, 0x1400fffe },
- { 0x210001c7, 0x24000002 },
- { 0x210001c8, 0x2000ffff },
- { 0x210001c9, 0x1400fffe },
- { 0x210001ca, 0x24000002 },
- { 0x210001cb, 0x2000ffff },
- { 0x210001cc, 0x1400fffe },
- { 0x210001cd, 0x24000001 },
- { 0x210001ce, 0x1400ffff },
- { 0x210001cf, 0x24000001 },
- { 0x210001d0, 0x1400ffff },
- { 0x210001d1, 0x24000001 },
- { 0x210001d2, 0x1400ffff },
- { 0x210001d3, 0x24000001 },
- { 0x210001d4, 0x1400ffff },
- { 0x210001d5, 0x24000001 },
- { 0x210001d6, 0x1400ffff },
- { 0x210001d7, 0x24000001 },
- { 0x210001d8, 0x1400ffff },
- { 0x210001d9, 0x24000001 },
- { 0x210001da, 0x1400ffff },
- { 0x210001db, 0x24000001 },
- { 0x210001dc, 0x1400ffff },
- { 0x210001dd, 0x1400ffb1 },
- { 0x210001de, 0x24000001 },
- { 0x210001df, 0x1400ffff },
- { 0x210001e0, 0x24000001 },
- { 0x210001e1, 0x1400ffff },
- { 0x210001e2, 0x24000001 },
- { 0x210001e3, 0x1400ffff },
- { 0x210001e4, 0x24000001 },
- { 0x210001e5, 0x1400ffff },
- { 0x210001e6, 0x24000001 },
- { 0x210001e7, 0x1400ffff },
- { 0x210001e8, 0x24000001 },
- { 0x210001e9, 0x1400ffff },
- { 0x210001ea, 0x24000001 },
- { 0x210001eb, 0x1400ffff },
- { 0x210001ec, 0x24000001 },
- { 0x210001ed, 0x1400ffff },
- { 0x210001ee, 0x24000001 },
- { 0x210001ef, 0x1400ffff },
- { 0x210001f0, 0x14000000 },
- { 0x210001f1, 0x24000002 },
- { 0x210001f2, 0x2000ffff },
- { 0x210001f3, 0x1400fffe },
- { 0x210001f4, 0x24000001 },
- { 0x210001f5, 0x1400ffff },
- { 0x210001f6, 0x2400ff9f },
- { 0x210001f7, 0x2400ffc8 },
- { 0x210001f8, 0x24000001 },
- { 0x210001f9, 0x1400ffff },
- { 0x210001fa, 0x24000001 },
- { 0x210001fb, 0x1400ffff },
- { 0x210001fc, 0x24000001 },
- { 0x210001fd, 0x1400ffff },
- { 0x210001fe, 0x24000001 },
- { 0x210001ff, 0x1400ffff },
- { 0x21000200, 0x24000001 },
- { 0x21000201, 0x1400ffff },
- { 0x21000202, 0x24000001 },
- { 0x21000203, 0x1400ffff },
- { 0x21000204, 0x24000001 },
- { 0x21000205, 0x1400ffff },
- { 0x21000206, 0x24000001 },
- { 0x21000207, 0x1400ffff },
- { 0x21000208, 0x24000001 },
- { 0x21000209, 0x1400ffff },
- { 0x2100020a, 0x24000001 },
- { 0x2100020b, 0x1400ffff },
- { 0x2100020c, 0x24000001 },
- { 0x2100020d, 0x1400ffff },
- { 0x2100020e, 0x24000001 },
- { 0x2100020f, 0x1400ffff },
- { 0x21000210, 0x24000001 },
- { 0x21000211, 0x1400ffff },
- { 0x21000212, 0x24000001 },
- { 0x21000213, 0x1400ffff },
- { 0x21000214, 0x24000001 },
- { 0x21000215, 0x1400ffff },
- { 0x21000216, 0x24000001 },
- { 0x21000217, 0x1400ffff },
- { 0x21000218, 0x24000001 },
- { 0x21000219, 0x1400ffff },
- { 0x2100021a, 0x24000001 },
- { 0x2100021b, 0x1400ffff },
- { 0x2100021c, 0x24000001 },
- { 0x2100021d, 0x1400ffff },
- { 0x2100021e, 0x24000001 },
- { 0x2100021f, 0x1400ffff },
- { 0x21000220, 0x2400ff7e },
- { 0x21000221, 0x14000000 },
- { 0x21000222, 0x24000001 },
- { 0x21000223, 0x1400ffff },
- { 0x21000224, 0x24000001 },
- { 0x21000225, 0x1400ffff },
- { 0x21000226, 0x24000001 },
- { 0x21000227, 0x1400ffff },
- { 0x21000228, 0x24000001 },
- { 0x21000229, 0x1400ffff },
- { 0x2100022a, 0x24000001 },
- { 0x2100022b, 0x1400ffff },
- { 0x2100022c, 0x24000001 },
- { 0x2100022d, 0x1400ffff },
- { 0x2100022e, 0x24000001 },
- { 0x2100022f, 0x1400ffff },
- { 0x21000230, 0x24000001 },
- { 0x21000231, 0x1400ffff },
- { 0x21000232, 0x24000001 },
- { 0x21000233, 0x1400ffff },
- { 0x21800234, 0x14000005 },
- { 0x2100023a, 0x24002a2b },
- { 0x2100023b, 0x24000001 },
- { 0x2100023c, 0x1400ffff },
- { 0x2100023d, 0x2400ff5d },
- { 0x2100023e, 0x24002a28 },
- { 0x2180023f, 0x14000001 },
- { 0x21000241, 0x24000001 },
- { 0x21000242, 0x1400ffff },
- { 0x21000243, 0x2400ff3d },
- { 0x21000244, 0x24000045 },
- { 0x21000245, 0x24000047 },
- { 0x21000246, 0x24000001 },
- { 0x21000247, 0x1400ffff },
- { 0x21000248, 0x24000001 },
- { 0x21000249, 0x1400ffff },
- { 0x2100024a, 0x24000001 },
- { 0x2100024b, 0x1400ffff },
- { 0x2100024c, 0x24000001 },
- { 0x2100024d, 0x1400ffff },
- { 0x2100024e, 0x24000001 },
- { 0x2100024f, 0x1400ffff },
- { 0x21800250, 0x14000002 },
- { 0x21000253, 0x1400ff2e },
- { 0x21000254, 0x1400ff32 },
- { 0x21000255, 0x14000000 },
- { 0x21000256, 0x1400ff33 },
- { 0x21000257, 0x1400ff33 },
- { 0x21000258, 0x14000000 },
- { 0x21000259, 0x1400ff36 },
- { 0x2100025a, 0x14000000 },
- { 0x2100025b, 0x1400ff35 },
- { 0x2180025c, 0x14000003 },
- { 0x21000260, 0x1400ff33 },
- { 0x21800261, 0x14000001 },
- { 0x21000263, 0x1400ff31 },
- { 0x21800264, 0x14000003 },
- { 0x21000268, 0x1400ff2f },
- { 0x21000269, 0x1400ff2d },
- { 0x2100026a, 0x14000000 },
- { 0x2100026b, 0x140029f7 },
- { 0x2180026c, 0x14000002 },
- { 0x2100026f, 0x1400ff2d },
- { 0x21800270, 0x14000001 },
- { 0x21000272, 0x1400ff2b },
- { 0x21800273, 0x14000001 },
- { 0x21000275, 0x1400ff2a },
- { 0x21800276, 0x14000006 },
- { 0x2100027d, 0x140029e7 },
- { 0x2180027e, 0x14000001 },
- { 0x21000280, 0x1400ff26 },
- { 0x21800281, 0x14000001 },
- { 0x21000283, 0x1400ff26 },
- { 0x21800284, 0x14000003 },
- { 0x21000288, 0x1400ff26 },
- { 0x21000289, 0x1400ffbb },
- { 0x2100028a, 0x1400ff27 },
- { 0x2100028b, 0x1400ff27 },
- { 0x2100028c, 0x1400ffb9 },
- { 0x2180028d, 0x14000004 },
- { 0x21000292, 0x1400ff25 },
- { 0x21000293, 0x14000000 },
- { 0x21000294, 0x1c000000 },
- { 0x21800295, 0x1400001a },
- { 0x218002b0, 0x18000008 },
- { 0x098002b9, 0x18000008 },
- { 0x098002c2, 0x60000003 },
- { 0x098002c6, 0x1800000b },
- { 0x098002d2, 0x6000000d },
- { 0x218002e0, 0x18000004 },
- { 0x098002e5, 0x60000008 },
- { 0x090002ee, 0x18000000 },
- { 0x098002ef, 0x60000010 },
- { 0x1b800300, 0x30000044 },
- { 0x1b000345, 0x30000054 },
- { 0x1b800346, 0x30000029 },
- { 0x13800374, 0x60000001 },
- { 0x1300037a, 0x18000000 },
- { 0x1300037b, 0x14000082 },
- { 0x1300037c, 0x14000082 },
- { 0x1300037d, 0x14000082 },
- { 0x0900037e, 0x54000000 },
- { 0x13800384, 0x60000001 },
- { 0x13000386, 0x24000026 },
- { 0x09000387, 0x54000000 },
- { 0x13000388, 0x24000025 },
- { 0x13000389, 0x24000025 },
- { 0x1300038a, 0x24000025 },
- { 0x1300038c, 0x24000040 },
- { 0x1300038e, 0x2400003f },
- { 0x1300038f, 0x2400003f },
- { 0x13000390, 0x14000000 },
- { 0x13000391, 0x24000020 },
- { 0x13000392, 0x24000020 },
- { 0x13000393, 0x24000020 },
- { 0x13000394, 0x24000020 },
- { 0x13000395, 0x24000020 },
- { 0x13000396, 0x24000020 },
- { 0x13000397, 0x24000020 },
- { 0x13000398, 0x24000020 },
- { 0x13000399, 0x24000020 },
- { 0x1300039a, 0x24000020 },
- { 0x1300039b, 0x24000020 },
- { 0x1300039c, 0x24000020 },
- { 0x1300039d, 0x24000020 },
- { 0x1300039e, 0x24000020 },
- { 0x1300039f, 0x24000020 },
- { 0x130003a0, 0x24000020 },
- { 0x130003a1, 0x24000020 },
- { 0x130003a3, 0x24000020 },
- { 0x130003a4, 0x24000020 },
- { 0x130003a5, 0x24000020 },
- { 0x130003a6, 0x24000020 },
- { 0x130003a7, 0x24000020 },
- { 0x130003a8, 0x24000020 },
- { 0x130003a9, 0x24000020 },
- { 0x130003aa, 0x24000020 },
- { 0x130003ab, 0x24000020 },
- { 0x130003ac, 0x1400ffda },
- { 0x130003ad, 0x1400ffdb },
- { 0x130003ae, 0x1400ffdb },
- { 0x130003af, 0x1400ffdb },
- { 0x130003b0, 0x14000000 },
- { 0x130003b1, 0x1400ffe0 },
- { 0x130003b2, 0x1400ffe0 },
- { 0x130003b3, 0x1400ffe0 },
- { 0x130003b4, 0x1400ffe0 },
- { 0x130003b5, 0x1400ffe0 },
- { 0x130003b6, 0x1400ffe0 },
- { 0x130003b7, 0x1400ffe0 },
- { 0x130003b8, 0x1400ffe0 },
- { 0x130003b9, 0x1400ffe0 },
- { 0x130003ba, 0x1400ffe0 },
- { 0x130003bb, 0x1400ffe0 },
- { 0x130003bc, 0x1400ffe0 },
- { 0x130003bd, 0x1400ffe0 },
- { 0x130003be, 0x1400ffe0 },
- { 0x130003bf, 0x1400ffe0 },
- { 0x130003c0, 0x1400ffe0 },
- { 0x130003c1, 0x1400ffe0 },
- { 0x130003c2, 0x1400ffe1 },
- { 0x130003c3, 0x1400ffe0 },
- { 0x130003c4, 0x1400ffe0 },
- { 0x130003c5, 0x1400ffe0 },
- { 0x130003c6, 0x1400ffe0 },
- { 0x130003c7, 0x1400ffe0 },
- { 0x130003c8, 0x1400ffe0 },
- { 0x130003c9, 0x1400ffe0 },
- { 0x130003ca, 0x1400ffe0 },
- { 0x130003cb, 0x1400ffe0 },
- { 0x130003cc, 0x1400ffc0 },
- { 0x130003cd, 0x1400ffc1 },
- { 0x130003ce, 0x1400ffc1 },
- { 0x130003d0, 0x1400ffc2 },
- { 0x130003d1, 0x1400ffc7 },
- { 0x138003d2, 0x24000002 },
- { 0x130003d5, 0x1400ffd1 },
- { 0x130003d6, 0x1400ffca },
- { 0x130003d7, 0x14000000 },
- { 0x130003d8, 0x24000001 },
- { 0x130003d9, 0x1400ffff },
- { 0x130003da, 0x24000001 },
- { 0x130003db, 0x1400ffff },
- { 0x130003dc, 0x24000001 },
- { 0x130003dd, 0x1400ffff },
- { 0x130003de, 0x24000001 },
- { 0x130003df, 0x1400ffff },
- { 0x130003e0, 0x24000001 },
- { 0x130003e1, 0x1400ffff },
- { 0x0a0003e2, 0x24000001 },
- { 0x0a0003e3, 0x1400ffff },
- { 0x0a0003e4, 0x24000001 },
- { 0x0a0003e5, 0x1400ffff },
- { 0x0a0003e6, 0x24000001 },
- { 0x0a0003e7, 0x1400ffff },
- { 0x0a0003e8, 0x24000001 },
- { 0x0a0003e9, 0x1400ffff },
- { 0x0a0003ea, 0x24000001 },
- { 0x0a0003eb, 0x1400ffff },
- { 0x0a0003ec, 0x24000001 },
- { 0x0a0003ed, 0x1400ffff },
- { 0x0a0003ee, 0x24000001 },
- { 0x0a0003ef, 0x1400ffff },
- { 0x130003f0, 0x1400ffaa },
- { 0x130003f1, 0x1400ffb0 },
- { 0x130003f2, 0x14000007 },
- { 0x130003f3, 0x14000000 },
- { 0x130003f4, 0x2400ffc4 },
- { 0x130003f5, 0x1400ffa0 },
- { 0x130003f6, 0x64000000 },
- { 0x130003f7, 0x24000001 },
- { 0x130003f8, 0x1400ffff },
- { 0x130003f9, 0x2400fff9 },
- { 0x130003fa, 0x24000001 },
- { 0x130003fb, 0x1400ffff },
- { 0x130003fc, 0x14000000 },
- { 0x130003fd, 0x2400ff7e },
- { 0x130003fe, 0x2400ff7e },
- { 0x130003ff, 0x2400ff7e },
- { 0x0c000400, 0x24000050 },
- { 0x0c000401, 0x24000050 },
- { 0x0c000402, 0x24000050 },
- { 0x0c000403, 0x24000050 },
- { 0x0c000404, 0x24000050 },
- { 0x0c000405, 0x24000050 },
- { 0x0c000406, 0x24000050 },
- { 0x0c000407, 0x24000050 },
- { 0x0c000408, 0x24000050 },
- { 0x0c000409, 0x24000050 },
- { 0x0c00040a, 0x24000050 },
- { 0x0c00040b, 0x24000050 },
- { 0x0c00040c, 0x24000050 },
- { 0x0c00040d, 0x24000050 },
- { 0x0c00040e, 0x24000050 },
- { 0x0c00040f, 0x24000050 },
- { 0x0c000410, 0x24000020 },
- { 0x0c000411, 0x24000020 },
- { 0x0c000412, 0x24000020 },
- { 0x0c000413, 0x24000020 },
- { 0x0c000414, 0x24000020 },
- { 0x0c000415, 0x24000020 },
- { 0x0c000416, 0x24000020 },
- { 0x0c000417, 0x24000020 },
- { 0x0c000418, 0x24000020 },
- { 0x0c000419, 0x24000020 },
- { 0x0c00041a, 0x24000020 },
- { 0x0c00041b, 0x24000020 },
- { 0x0c00041c, 0x24000020 },
- { 0x0c00041d, 0x24000020 },
- { 0x0c00041e, 0x24000020 },
- { 0x0c00041f, 0x24000020 },
- { 0x0c000420, 0x24000020 },
- { 0x0c000421, 0x24000020 },
- { 0x0c000422, 0x24000020 },
- { 0x0c000423, 0x24000020 },
- { 0x0c000424, 0x24000020 },
- { 0x0c000425, 0x24000020 },
- { 0x0c000426, 0x24000020 },
- { 0x0c000427, 0x24000020 },
- { 0x0c000428, 0x24000020 },
- { 0x0c000429, 0x24000020 },
- { 0x0c00042a, 0x24000020 },
- { 0x0c00042b, 0x24000020 },
- { 0x0c00042c, 0x24000020 },
- { 0x0c00042d, 0x24000020 },
- { 0x0c00042e, 0x24000020 },
- { 0x0c00042f, 0x24000020 },
- { 0x0c000430, 0x1400ffe0 },
- { 0x0c000431, 0x1400ffe0 },
- { 0x0c000432, 0x1400ffe0 },
- { 0x0c000433, 0x1400ffe0 },
- { 0x0c000434, 0x1400ffe0 },
- { 0x0c000435, 0x1400ffe0 },
- { 0x0c000436, 0x1400ffe0 },
- { 0x0c000437, 0x1400ffe0 },
- { 0x0c000438, 0x1400ffe0 },
- { 0x0c000439, 0x1400ffe0 },
- { 0x0c00043a, 0x1400ffe0 },
- { 0x0c00043b, 0x1400ffe0 },
- { 0x0c00043c, 0x1400ffe0 },
- { 0x0c00043d, 0x1400ffe0 },
- { 0x0c00043e, 0x1400ffe0 },
- { 0x0c00043f, 0x1400ffe0 },
- { 0x0c000440, 0x1400ffe0 },
- { 0x0c000441, 0x1400ffe0 },
- { 0x0c000442, 0x1400ffe0 },
- { 0x0c000443, 0x1400ffe0 },
- { 0x0c000444, 0x1400ffe0 },
- { 0x0c000445, 0x1400ffe0 },
- { 0x0c000446, 0x1400ffe0 },
- { 0x0c000447, 0x1400ffe0 },
- { 0x0c000448, 0x1400ffe0 },
- { 0x0c000449, 0x1400ffe0 },
- { 0x0c00044a, 0x1400ffe0 },
- { 0x0c00044b, 0x1400ffe0 },
- { 0x0c00044c, 0x1400ffe0 },
- { 0x0c00044d, 0x1400ffe0 },
- { 0x0c00044e, 0x1400ffe0 },
- { 0x0c00044f, 0x1400ffe0 },
- { 0x0c000450, 0x1400ffb0 },
- { 0x0c000451, 0x1400ffb0 },
- { 0x0c000452, 0x1400ffb0 },
- { 0x0c000453, 0x1400ffb0 },
- { 0x0c000454, 0x1400ffb0 },
- { 0x0c000455, 0x1400ffb0 },
- { 0x0c000456, 0x1400ffb0 },
- { 0x0c000457, 0x1400ffb0 },
- { 0x0c000458, 0x1400ffb0 },
- { 0x0c000459, 0x1400ffb0 },
- { 0x0c00045a, 0x1400ffb0 },
- { 0x0c00045b, 0x1400ffb0 },
- { 0x0c00045c, 0x1400ffb0 },
- { 0x0c00045d, 0x1400ffb0 },
- { 0x0c00045e, 0x1400ffb0 },
- { 0x0c00045f, 0x1400ffb0 },
- { 0x0c000460, 0x24000001 },
- { 0x0c000461, 0x1400ffff },
- { 0x0c000462, 0x24000001 },
- { 0x0c000463, 0x1400ffff },
- { 0x0c000464, 0x24000001 },
- { 0x0c000465, 0x1400ffff },
- { 0x0c000466, 0x24000001 },
- { 0x0c000467, 0x1400ffff },
- { 0x0c000468, 0x24000001 },
- { 0x0c000469, 0x1400ffff },
- { 0x0c00046a, 0x24000001 },
- { 0x0c00046b, 0x1400ffff },
- { 0x0c00046c, 0x24000001 },
- { 0x0c00046d, 0x1400ffff },
- { 0x0c00046e, 0x24000001 },
- { 0x0c00046f, 0x1400ffff },
- { 0x0c000470, 0x24000001 },
- { 0x0c000471, 0x1400ffff },
- { 0x0c000472, 0x24000001 },
- { 0x0c000473, 0x1400ffff },
- { 0x0c000474, 0x24000001 },
- { 0x0c000475, 0x1400ffff },
- { 0x0c000476, 0x24000001 },
- { 0x0c000477, 0x1400ffff },
- { 0x0c000478, 0x24000001 },
- { 0x0c000479, 0x1400ffff },
- { 0x0c00047a, 0x24000001 },
- { 0x0c00047b, 0x1400ffff },
- { 0x0c00047c, 0x24000001 },
- { 0x0c00047d, 0x1400ffff },
- { 0x0c00047e, 0x24000001 },
- { 0x0c00047f, 0x1400ffff },
- { 0x0c000480, 0x24000001 },
- { 0x0c000481, 0x1400ffff },
- { 0x0c000482, 0x68000000 },
- { 0x0c800483, 0x30000003 },
- { 0x0c800488, 0x2c000001 },
- { 0x0c00048a, 0x24000001 },
- { 0x0c00048b, 0x1400ffff },
- { 0x0c00048c, 0x24000001 },
- { 0x0c00048d, 0x1400ffff },
- { 0x0c00048e, 0x24000001 },
- { 0x0c00048f, 0x1400ffff },
- { 0x0c000490, 0x24000001 },
- { 0x0c000491, 0x1400ffff },
- { 0x0c000492, 0x24000001 },
- { 0x0c000493, 0x1400ffff },
- { 0x0c000494, 0x24000001 },
- { 0x0c000495, 0x1400ffff },
- { 0x0c000496, 0x24000001 },
- { 0x0c000497, 0x1400ffff },
- { 0x0c000498, 0x24000001 },
- { 0x0c000499, 0x1400ffff },
- { 0x0c00049a, 0x24000001 },
- { 0x0c00049b, 0x1400ffff },
- { 0x0c00049c, 0x24000001 },
- { 0x0c00049d, 0x1400ffff },
- { 0x0c00049e, 0x24000001 },
- { 0x0c00049f, 0x1400ffff },
- { 0x0c0004a0, 0x24000001 },
- { 0x0c0004a1, 0x1400ffff },
- { 0x0c0004a2, 0x24000001 },
- { 0x0c0004a3, 0x1400ffff },
- { 0x0c0004a4, 0x24000001 },
- { 0x0c0004a5, 0x1400ffff },
- { 0x0c0004a6, 0x24000001 },
- { 0x0c0004a7, 0x1400ffff },
- { 0x0c0004a8, 0x24000001 },
- { 0x0c0004a9, 0x1400ffff },
- { 0x0c0004aa, 0x24000001 },
- { 0x0c0004ab, 0x1400ffff },
- { 0x0c0004ac, 0x24000001 },
- { 0x0c0004ad, 0x1400ffff },
- { 0x0c0004ae, 0x24000001 },
- { 0x0c0004af, 0x1400ffff },
- { 0x0c0004b0, 0x24000001 },
- { 0x0c0004b1, 0x1400ffff },
- { 0x0c0004b2, 0x24000001 },
- { 0x0c0004b3, 0x1400ffff },
- { 0x0c0004b4, 0x24000001 },
- { 0x0c0004b5, 0x1400ffff },
- { 0x0c0004b6, 0x24000001 },
- { 0x0c0004b7, 0x1400ffff },
- { 0x0c0004b8, 0x24000001 },
- { 0x0c0004b9, 0x1400ffff },
- { 0x0c0004ba, 0x24000001 },
- { 0x0c0004bb, 0x1400ffff },
- { 0x0c0004bc, 0x24000001 },
- { 0x0c0004bd, 0x1400ffff },
- { 0x0c0004be, 0x24000001 },
- { 0x0c0004bf, 0x1400ffff },
- { 0x0c0004c0, 0x2400000f },
- { 0x0c0004c1, 0x24000001 },
- { 0x0c0004c2, 0x1400ffff },
- { 0x0c0004c3, 0x24000001 },
- { 0x0c0004c4, 0x1400ffff },
- { 0x0c0004c5, 0x24000001 },
- { 0x0c0004c6, 0x1400ffff },
- { 0x0c0004c7, 0x24000001 },
- { 0x0c0004c8, 0x1400ffff },
- { 0x0c0004c9, 0x24000001 },
- { 0x0c0004ca, 0x1400ffff },
- { 0x0c0004cb, 0x24000001 },
- { 0x0c0004cc, 0x1400ffff },
- { 0x0c0004cd, 0x24000001 },
- { 0x0c0004ce, 0x1400ffff },
- { 0x0c0004cf, 0x1400fff1 },
- { 0x0c0004d0, 0x24000001 },
- { 0x0c0004d1, 0x1400ffff },
- { 0x0c0004d2, 0x24000001 },
- { 0x0c0004d3, 0x1400ffff },
- { 0x0c0004d4, 0x24000001 },
- { 0x0c0004d5, 0x1400ffff },
- { 0x0c0004d6, 0x24000001 },
- { 0x0c0004d7, 0x1400ffff },
- { 0x0c0004d8, 0x24000001 },
- { 0x0c0004d9, 0x1400ffff },
- { 0x0c0004da, 0x24000001 },
- { 0x0c0004db, 0x1400ffff },
- { 0x0c0004dc, 0x24000001 },
- { 0x0c0004dd, 0x1400ffff },
- { 0x0c0004de, 0x24000001 },
- { 0x0c0004df, 0x1400ffff },
- { 0x0c0004e0, 0x24000001 },
- { 0x0c0004e1, 0x1400ffff },
- { 0x0c0004e2, 0x24000001 },
- { 0x0c0004e3, 0x1400ffff },
- { 0x0c0004e4, 0x24000001 },
- { 0x0c0004e5, 0x1400ffff },
- { 0x0c0004e6, 0x24000001 },
- { 0x0c0004e7, 0x1400ffff },
- { 0x0c0004e8, 0x24000001 },
- { 0x0c0004e9, 0x1400ffff },
- { 0x0c0004ea, 0x24000001 },
- { 0x0c0004eb, 0x1400ffff },
- { 0x0c0004ec, 0x24000001 },
- { 0x0c0004ed, 0x1400ffff },
- { 0x0c0004ee, 0x24000001 },
- { 0x0c0004ef, 0x1400ffff },
- { 0x0c0004f0, 0x24000001 },
- { 0x0c0004f1, 0x1400ffff },
- { 0x0c0004f2, 0x24000001 },
- { 0x0c0004f3, 0x1400ffff },
- { 0x0c0004f4, 0x24000001 },
- { 0x0c0004f5, 0x1400ffff },
- { 0x0c0004f6, 0x24000001 },
- { 0x0c0004f7, 0x1400ffff },
- { 0x0c0004f8, 0x24000001 },
- { 0x0c0004f9, 0x1400ffff },
- { 0x0c0004fa, 0x24000001 },
- { 0x0c0004fb, 0x1400ffff },
- { 0x0c0004fc, 0x24000001 },
- { 0x0c0004fd, 0x1400ffff },
- { 0x0c0004fe, 0x24000001 },
- { 0x0c0004ff, 0x1400ffff },
- { 0x0c000500, 0x24000001 },
- { 0x0c000501, 0x1400ffff },
- { 0x0c000502, 0x24000001 },
- { 0x0c000503, 0x1400ffff },
- { 0x0c000504, 0x24000001 },
- { 0x0c000505, 0x1400ffff },
- { 0x0c000506, 0x24000001 },
- { 0x0c000507, 0x1400ffff },
- { 0x0c000508, 0x24000001 },
- { 0x0c000509, 0x1400ffff },
- { 0x0c00050a, 0x24000001 },
- { 0x0c00050b, 0x1400ffff },
- { 0x0c00050c, 0x24000001 },
- { 0x0c00050d, 0x1400ffff },
- { 0x0c00050e, 0x24000001 },
- { 0x0c00050f, 0x1400ffff },
- { 0x0c000510, 0x24000001 },
- { 0x0c000511, 0x1400ffff },
- { 0x0c000512, 0x24000001 },
- { 0x0c000513, 0x1400ffff },
- { 0x01000531, 0x24000030 },
- { 0x01000532, 0x24000030 },
- { 0x01000533, 0x24000030 },
- { 0x01000534, 0x24000030 },
- { 0x01000535, 0x24000030 },
- { 0x01000536, 0x24000030 },
- { 0x01000537, 0x24000030 },
- { 0x01000538, 0x24000030 },
- { 0x01000539, 0x24000030 },
- { 0x0100053a, 0x24000030 },
- { 0x0100053b, 0x24000030 },
- { 0x0100053c, 0x24000030 },
- { 0x0100053d, 0x24000030 },
- { 0x0100053e, 0x24000030 },
- { 0x0100053f, 0x24000030 },
- { 0x01000540, 0x24000030 },
- { 0x01000541, 0x24000030 },
- { 0x01000542, 0x24000030 },
- { 0x01000543, 0x24000030 },
- { 0x01000544, 0x24000030 },
- { 0x01000545, 0x24000030 },
- { 0x01000546, 0x24000030 },
- { 0x01000547, 0x24000030 },
- { 0x01000548, 0x24000030 },
- { 0x01000549, 0x24000030 },
- { 0x0100054a, 0x24000030 },
- { 0x0100054b, 0x24000030 },
- { 0x0100054c, 0x24000030 },
- { 0x0100054d, 0x24000030 },
- { 0x0100054e, 0x24000030 },
- { 0x0100054f, 0x24000030 },
- { 0x01000550, 0x24000030 },
- { 0x01000551, 0x24000030 },
- { 0x01000552, 0x24000030 },
- { 0x01000553, 0x24000030 },
- { 0x01000554, 0x24000030 },
- { 0x01000555, 0x24000030 },
- { 0x01000556, 0x24000030 },
- { 0x01000559, 0x18000000 },
- { 0x0180055a, 0x54000005 },
- { 0x01000561, 0x1400ffd0 },
- { 0x01000562, 0x1400ffd0 },
- { 0x01000563, 0x1400ffd0 },
- { 0x01000564, 0x1400ffd0 },
- { 0x01000565, 0x1400ffd0 },
- { 0x01000566, 0x1400ffd0 },
- { 0x01000567, 0x1400ffd0 },
- { 0x01000568, 0x1400ffd0 },
- { 0x01000569, 0x1400ffd0 },
- { 0x0100056a, 0x1400ffd0 },
- { 0x0100056b, 0x1400ffd0 },
- { 0x0100056c, 0x1400ffd0 },
- { 0x0100056d, 0x1400ffd0 },
- { 0x0100056e, 0x1400ffd0 },
- { 0x0100056f, 0x1400ffd0 },
- { 0x01000570, 0x1400ffd0 },
- { 0x01000571, 0x1400ffd0 },
- { 0x01000572, 0x1400ffd0 },
- { 0x01000573, 0x1400ffd0 },
- { 0x01000574, 0x1400ffd0 },
- { 0x01000575, 0x1400ffd0 },
- { 0x01000576, 0x1400ffd0 },
- { 0x01000577, 0x1400ffd0 },
- { 0x01000578, 0x1400ffd0 },
- { 0x01000579, 0x1400ffd0 },
- { 0x0100057a, 0x1400ffd0 },
- { 0x0100057b, 0x1400ffd0 },
- { 0x0100057c, 0x1400ffd0 },
- { 0x0100057d, 0x1400ffd0 },
- { 0x0100057e, 0x1400ffd0 },
- { 0x0100057f, 0x1400ffd0 },
- { 0x01000580, 0x1400ffd0 },
- { 0x01000581, 0x1400ffd0 },
- { 0x01000582, 0x1400ffd0 },
- { 0x01000583, 0x1400ffd0 },
- { 0x01000584, 0x1400ffd0 },
- { 0x01000585, 0x1400ffd0 },
- { 0x01000586, 0x1400ffd0 },
- { 0x01000587, 0x14000000 },
- { 0x09000589, 0x54000000 },
- { 0x0100058a, 0x44000000 },
- { 0x19800591, 0x3000002c },
- { 0x190005be, 0x54000000 },
- { 0x190005bf, 0x30000000 },
- { 0x190005c0, 0x54000000 },
- { 0x198005c1, 0x30000001 },
- { 0x190005c3, 0x54000000 },
- { 0x198005c4, 0x30000001 },
- { 0x190005c6, 0x54000000 },
- { 0x190005c7, 0x30000000 },
- { 0x198005d0, 0x1c00001a },
- { 0x198005f0, 0x1c000002 },
- { 0x198005f3, 0x54000001 },
- { 0x09800600, 0x04000003 },
- { 0x0000060b, 0x5c000000 },
- { 0x0900060c, 0x54000000 },
- { 0x0000060d, 0x54000000 },
- { 0x0080060e, 0x68000001 },
- { 0x00800610, 0x30000005 },
- { 0x0900061b, 0x54000000 },
- { 0x0000061e, 0x54000000 },
- { 0x0900061f, 0x54000000 },
- { 0x00800621, 0x1c000019 },
- { 0x09000640, 0x18000000 },
- { 0x00800641, 0x1c000009 },
- { 0x1b80064b, 0x3000000a },
- { 0x00800656, 0x30000008 },
- { 0x09800660, 0x34000009 },
- { 0x0080066a, 0x54000003 },
- { 0x0080066e, 0x1c000001 },
- { 0x1b000670, 0x30000000 },
- { 0x00800671, 0x1c000062 },
- { 0x000006d4, 0x54000000 },
- { 0x000006d5, 0x1c000000 },
- { 0x008006d6, 0x30000006 },
- { 0x090006dd, 0x04000000 },
- { 0x000006de, 0x2c000000 },
- { 0x008006df, 0x30000005 },
- { 0x008006e5, 0x18000001 },
- { 0x008006e7, 0x30000001 },
- { 0x000006e9, 0x68000000 },
- { 0x008006ea, 0x30000003 },
- { 0x008006ee, 0x1c000001 },
- { 0x008006f0, 0x34000009 },
- { 0x008006fa, 0x1c000002 },
- { 0x008006fd, 0x68000001 },
- { 0x000006ff, 0x1c000000 },
- { 0x31800700, 0x5400000d },
- { 0x3100070f, 0x04000000 },
- { 0x31000710, 0x1c000000 },
- { 0x31000711, 0x30000000 },
- { 0x31800712, 0x1c00001d },
- { 0x31800730, 0x3000001a },
- { 0x3180074d, 0x1c000002 },
- { 0x00800750, 0x1c00001d },
- { 0x37800780, 0x1c000025 },
- { 0x378007a6, 0x3000000a },
- { 0x370007b1, 0x1c000000 },
- { 0x3f8007c0, 0x34000009 },
- { 0x3f8007ca, 0x1c000020 },
- { 0x3f8007eb, 0x30000008 },
- { 0x3f8007f4, 0x18000001 },
- { 0x3f0007f6, 0x68000000 },
- { 0x3f8007f7, 0x54000002 },
- { 0x3f0007fa, 0x18000000 },
- { 0x0e800901, 0x30000001 },
- { 0x0e000903, 0x28000000 },
- { 0x0e800904, 0x1c000035 },
- { 0x0e00093c, 0x30000000 },
- { 0x0e00093d, 0x1c000000 },
- { 0x0e80093e, 0x28000002 },
- { 0x0e800941, 0x30000007 },
- { 0x0e800949, 0x28000003 },
- { 0x0e00094d, 0x30000000 },
- { 0x0e000950, 0x1c000000 },
- { 0x0e800951, 0x30000003 },
- { 0x0e800958, 0x1c000009 },
- { 0x0e800962, 0x30000001 },
- { 0x09800964, 0x54000001 },
- { 0x0e800966, 0x34000009 },
- { 0x09000970, 0x54000000 },
- { 0x0e80097b, 0x1c000004 },
- { 0x02000981, 0x30000000 },
- { 0x02800982, 0x28000001 },
- { 0x02800985, 0x1c000007 },
- { 0x0280098f, 0x1c000001 },
- { 0x02800993, 0x1c000015 },
- { 0x028009aa, 0x1c000006 },
- { 0x020009b2, 0x1c000000 },
- { 0x028009b6, 0x1c000003 },
- { 0x020009bc, 0x30000000 },
- { 0x020009bd, 0x1c000000 },
- { 0x028009be, 0x28000002 },
- { 0x028009c1, 0x30000003 },
- { 0x028009c7, 0x28000001 },
- { 0x028009cb, 0x28000001 },
- { 0x020009cd, 0x30000000 },
- { 0x020009ce, 0x1c000000 },
- { 0x020009d7, 0x28000000 },
- { 0x028009dc, 0x1c000001 },
- { 0x028009df, 0x1c000002 },
- { 0x028009e2, 0x30000001 },
- { 0x028009e6, 0x34000009 },
- { 0x028009f0, 0x1c000001 },
- { 0x028009f2, 0x5c000001 },
- { 0x028009f4, 0x3c000005 },
- { 0x020009fa, 0x68000000 },
- { 0x15800a01, 0x30000001 },
- { 0x15000a03, 0x28000000 },
- { 0x15800a05, 0x1c000005 },
- { 0x15800a0f, 0x1c000001 },
- { 0x15800a13, 0x1c000015 },
- { 0x15800a2a, 0x1c000006 },
- { 0x15800a32, 0x1c000001 },
- { 0x15800a35, 0x1c000001 },
- { 0x15800a38, 0x1c000001 },
- { 0x15000a3c, 0x30000000 },
- { 0x15800a3e, 0x28000002 },
- { 0x15800a41, 0x30000001 },
- { 0x15800a47, 0x30000001 },
- { 0x15800a4b, 0x30000002 },
- { 0x15800a59, 0x1c000003 },
- { 0x15000a5e, 0x1c000000 },
- { 0x15800a66, 0x34000009 },
- { 0x15800a70, 0x30000001 },
- { 0x15800a72, 0x1c000002 },
- { 0x14800a81, 0x30000001 },
- { 0x14000a83, 0x28000000 },
- { 0x14800a85, 0x1c000008 },
- { 0x14800a8f, 0x1c000002 },
- { 0x14800a93, 0x1c000015 },
- { 0x14800aaa, 0x1c000006 },
- { 0x14800ab2, 0x1c000001 },
- { 0x14800ab5, 0x1c000004 },
- { 0x14000abc, 0x30000000 },
- { 0x14000abd, 0x1c000000 },
- { 0x14800abe, 0x28000002 },
- { 0x14800ac1, 0x30000004 },
- { 0x14800ac7, 0x30000001 },
- { 0x14000ac9, 0x28000000 },
- { 0x14800acb, 0x28000001 },
- { 0x14000acd, 0x30000000 },
- { 0x14000ad0, 0x1c000000 },
- { 0x14800ae0, 0x1c000001 },
- { 0x14800ae2, 0x30000001 },
- { 0x14800ae6, 0x34000009 },
- { 0x14000af1, 0x5c000000 },
- { 0x2b000b01, 0x30000000 },
- { 0x2b800b02, 0x28000001 },
- { 0x2b800b05, 0x1c000007 },
- { 0x2b800b0f, 0x1c000001 },
- { 0x2b800b13, 0x1c000015 },
- { 0x2b800b2a, 0x1c000006 },
- { 0x2b800b32, 0x1c000001 },
- { 0x2b800b35, 0x1c000004 },
- { 0x2b000b3c, 0x30000000 },
- { 0x2b000b3d, 0x1c000000 },
- { 0x2b000b3e, 0x28000000 },
- { 0x2b000b3f, 0x30000000 },
- { 0x2b000b40, 0x28000000 },
- { 0x2b800b41, 0x30000002 },
- { 0x2b800b47, 0x28000001 },
- { 0x2b800b4b, 0x28000001 },
- { 0x2b000b4d, 0x30000000 },
- { 0x2b000b56, 0x30000000 },
- { 0x2b000b57, 0x28000000 },
- { 0x2b800b5c, 0x1c000001 },
- { 0x2b800b5f, 0x1c000002 },
- { 0x2b800b66, 0x34000009 },
- { 0x2b000b70, 0x68000000 },
- { 0x2b000b71, 0x1c000000 },
- { 0x35000b82, 0x30000000 },
- { 0x35000b83, 0x1c000000 },
- { 0x35800b85, 0x1c000005 },
- { 0x35800b8e, 0x1c000002 },
- { 0x35800b92, 0x1c000003 },
- { 0x35800b99, 0x1c000001 },
- { 0x35000b9c, 0x1c000000 },
- { 0x35800b9e, 0x1c000001 },
- { 0x35800ba3, 0x1c000001 },
- { 0x35800ba8, 0x1c000002 },
- { 0x35800bae, 0x1c00000b },
- { 0x35800bbe, 0x28000001 },
- { 0x35000bc0, 0x30000000 },
- { 0x35800bc1, 0x28000001 },
- { 0x35800bc6, 0x28000002 },
- { 0x35800bca, 0x28000002 },
- { 0x35000bcd, 0x30000000 },
- { 0x35000bd7, 0x28000000 },
- { 0x35800be6, 0x34000009 },
- { 0x35800bf0, 0x3c000002 },
- { 0x35800bf3, 0x68000005 },
- { 0x35000bf9, 0x5c000000 },
- { 0x35000bfa, 0x68000000 },
- { 0x36800c01, 0x28000002 },
- { 0x36800c05, 0x1c000007 },
- { 0x36800c0e, 0x1c000002 },
- { 0x36800c12, 0x1c000016 },
- { 0x36800c2a, 0x1c000009 },
- { 0x36800c35, 0x1c000004 },
- { 0x36800c3e, 0x30000002 },
- { 0x36800c41, 0x28000003 },
- { 0x36800c46, 0x30000002 },
- { 0x36800c4a, 0x30000003 },
- { 0x36800c55, 0x30000001 },
- { 0x36800c60, 0x1c000001 },
- { 0x36800c66, 0x34000009 },
- { 0x1c800c82, 0x28000001 },
- { 0x1c800c85, 0x1c000007 },
- { 0x1c800c8e, 0x1c000002 },
- { 0x1c800c92, 0x1c000016 },
- { 0x1c800caa, 0x1c000009 },
- { 0x1c800cb5, 0x1c000004 },
- { 0x1c000cbc, 0x30000000 },
- { 0x1c000cbd, 0x1c000000 },
- { 0x1c000cbe, 0x28000000 },
- { 0x1c000cbf, 0x30000000 },
- { 0x1c800cc0, 0x28000004 },
- { 0x1c000cc6, 0x30000000 },
- { 0x1c800cc7, 0x28000001 },
- { 0x1c800cca, 0x28000001 },
- { 0x1c800ccc, 0x30000001 },
- { 0x1c800cd5, 0x28000001 },
- { 0x1c000cde, 0x1c000000 },
- { 0x1c800ce0, 0x1c000001 },
- { 0x1c800ce2, 0x30000001 },
- { 0x1c800ce6, 0x34000009 },
- { 0x1c800cf1, 0x68000001 },
- { 0x24800d02, 0x28000001 },
- { 0x24800d05, 0x1c000007 },
- { 0x24800d0e, 0x1c000002 },
- { 0x24800d12, 0x1c000016 },
- { 0x24800d2a, 0x1c00000f },
- { 0x24800d3e, 0x28000002 },
- { 0x24800d41, 0x30000002 },
- { 0x24800d46, 0x28000002 },
- { 0x24800d4a, 0x28000002 },
- { 0x24000d4d, 0x30000000 },
- { 0x24000d57, 0x28000000 },
- { 0x24800d60, 0x1c000001 },
- { 0x24800d66, 0x34000009 },
- { 0x2f800d82, 0x28000001 },
- { 0x2f800d85, 0x1c000011 },
- { 0x2f800d9a, 0x1c000017 },
- { 0x2f800db3, 0x1c000008 },
- { 0x2f000dbd, 0x1c000000 },
- { 0x2f800dc0, 0x1c000006 },
- { 0x2f000dca, 0x30000000 },
- { 0x2f800dcf, 0x28000002 },
- { 0x2f800dd2, 0x30000002 },
- { 0x2f000dd6, 0x30000000 },
- { 0x2f800dd8, 0x28000007 },
- { 0x2f800df2, 0x28000001 },
- { 0x2f000df4, 0x54000000 },
- { 0x38800e01, 0x1c00002f },
- { 0x38000e31, 0x30000000 },
- { 0x38800e32, 0x1c000001 },
- { 0x38800e34, 0x30000006 },
- { 0x09000e3f, 0x5c000000 },
- { 0x38800e40, 0x1c000005 },
- { 0x38000e46, 0x18000000 },
- { 0x38800e47, 0x30000007 },
- { 0x38000e4f, 0x54000000 },
- { 0x38800e50, 0x34000009 },
- { 0x38800e5a, 0x54000001 },
- { 0x20800e81, 0x1c000001 },
- { 0x20000e84, 0x1c000000 },
- { 0x20800e87, 0x1c000001 },
- { 0x20000e8a, 0x1c000000 },
- { 0x20000e8d, 0x1c000000 },
- { 0x20800e94, 0x1c000003 },
- { 0x20800e99, 0x1c000006 },
- { 0x20800ea1, 0x1c000002 },
- { 0x20000ea5, 0x1c000000 },
- { 0x20000ea7, 0x1c000000 },
- { 0x20800eaa, 0x1c000001 },
- { 0x20800ead, 0x1c000003 },
- { 0x20000eb1, 0x30000000 },
- { 0x20800eb2, 0x1c000001 },
- { 0x20800eb4, 0x30000005 },
- { 0x20800ebb, 0x30000001 },
- { 0x20000ebd, 0x1c000000 },
- { 0x20800ec0, 0x1c000004 },
- { 0x20000ec6, 0x18000000 },
- { 0x20800ec8, 0x30000005 },
- { 0x20800ed0, 0x34000009 },
- { 0x20800edc, 0x1c000001 },
- { 0x39000f00, 0x1c000000 },
- { 0x39800f01, 0x68000002 },
- { 0x39800f04, 0x5400000e },
- { 0x39800f13, 0x68000004 },
- { 0x39800f18, 0x30000001 },
- { 0x39800f1a, 0x68000005 },
- { 0x39800f20, 0x34000009 },
- { 0x39800f2a, 0x3c000009 },
- { 0x39000f34, 0x68000000 },
- { 0x39000f35, 0x30000000 },
- { 0x39000f36, 0x68000000 },
- { 0x39000f37, 0x30000000 },
- { 0x39000f38, 0x68000000 },
- { 0x39000f39, 0x30000000 },
- { 0x39000f3a, 0x58000000 },
- { 0x39000f3b, 0x48000000 },
- { 0x39000f3c, 0x58000000 },
- { 0x39000f3d, 0x48000000 },
- { 0x39800f3e, 0x28000001 },
- { 0x39800f40, 0x1c000007 },
- { 0x39800f49, 0x1c000021 },
- { 0x39800f71, 0x3000000d },
- { 0x39000f7f, 0x28000000 },
- { 0x39800f80, 0x30000004 },
- { 0x39000f85, 0x54000000 },
- { 0x39800f86, 0x30000001 },
- { 0x39800f88, 0x1c000003 },
- { 0x39800f90, 0x30000007 },
- { 0x39800f99, 0x30000023 },
- { 0x39800fbe, 0x68000007 },
- { 0x39000fc6, 0x30000000 },
- { 0x39800fc7, 0x68000005 },
- { 0x39000fcf, 0x68000000 },
- { 0x39800fd0, 0x54000001 },
- { 0x26801000, 0x1c000021 },
- { 0x26801023, 0x1c000004 },
- { 0x26801029, 0x1c000001 },
- { 0x2600102c, 0x28000000 },
- { 0x2680102d, 0x30000003 },
- { 0x26001031, 0x28000000 },
- { 0x26001032, 0x30000000 },
- { 0x26801036, 0x30000001 },
- { 0x26001038, 0x28000000 },
- { 0x26001039, 0x30000000 },
- { 0x26801040, 0x34000009 },
- { 0x2680104a, 0x54000005 },
- { 0x26801050, 0x1c000005 },
- { 0x26801056, 0x28000001 },
- { 0x26801058, 0x30000001 },
- { 0x100010a0, 0x24001c60 },
- { 0x100010a1, 0x24001c60 },
- { 0x100010a2, 0x24001c60 },
- { 0x100010a3, 0x24001c60 },
- { 0x100010a4, 0x24001c60 },
- { 0x100010a5, 0x24001c60 },
- { 0x100010a6, 0x24001c60 },
- { 0x100010a7, 0x24001c60 },
- { 0x100010a8, 0x24001c60 },
- { 0x100010a9, 0x24001c60 },
- { 0x100010aa, 0x24001c60 },
- { 0x100010ab, 0x24001c60 },
- { 0x100010ac, 0x24001c60 },
- { 0x100010ad, 0x24001c60 },
- { 0x100010ae, 0x24001c60 },
- { 0x100010af, 0x24001c60 },
- { 0x100010b0, 0x24001c60 },
- { 0x100010b1, 0x24001c60 },
- { 0x100010b2, 0x24001c60 },
- { 0x100010b3, 0x24001c60 },
- { 0x100010b4, 0x24001c60 },
- { 0x100010b5, 0x24001c60 },
- { 0x100010b6, 0x24001c60 },
- { 0x100010b7, 0x24001c60 },
- { 0x100010b8, 0x24001c60 },
- { 0x100010b9, 0x24001c60 },
- { 0x100010ba, 0x24001c60 },
- { 0x100010bb, 0x24001c60 },
- { 0x100010bc, 0x24001c60 },
- { 0x100010bd, 0x24001c60 },
- { 0x100010be, 0x24001c60 },
- { 0x100010bf, 0x24001c60 },
- { 0x100010c0, 0x24001c60 },
- { 0x100010c1, 0x24001c60 },
- { 0x100010c2, 0x24001c60 },
- { 0x100010c3, 0x24001c60 },
- { 0x100010c4, 0x24001c60 },
- { 0x100010c5, 0x24001c60 },
- { 0x108010d0, 0x1c00002a },
- { 0x090010fb, 0x54000000 },
- { 0x100010fc, 0x18000000 },
- { 0x17801100, 0x1c000059 },
- { 0x1780115f, 0x1c000043 },
- { 0x178011a8, 0x1c000051 },
- { 0x0f801200, 0x1c000048 },
- { 0x0f80124a, 0x1c000003 },
- { 0x0f801250, 0x1c000006 },
- { 0x0f001258, 0x1c000000 },
- { 0x0f80125a, 0x1c000003 },
- { 0x0f801260, 0x1c000028 },
- { 0x0f80128a, 0x1c000003 },
- { 0x0f801290, 0x1c000020 },
- { 0x0f8012b2, 0x1c000003 },
- { 0x0f8012b8, 0x1c000006 },
- { 0x0f0012c0, 0x1c000000 },
- { 0x0f8012c2, 0x1c000003 },
- { 0x0f8012c8, 0x1c00000e },
- { 0x0f8012d8, 0x1c000038 },
- { 0x0f801312, 0x1c000003 },
- { 0x0f801318, 0x1c000042 },
- { 0x0f00135f, 0x30000000 },
- { 0x0f001360, 0x68000000 },
- { 0x0f801361, 0x54000007 },
- { 0x0f801369, 0x3c000013 },
- { 0x0f801380, 0x1c00000f },
- { 0x0f801390, 0x68000009 },
- { 0x088013a0, 0x1c000054 },
- { 0x07801401, 0x1c00026b },
- { 0x0780166d, 0x54000001 },
- { 0x0780166f, 0x1c000007 },
- { 0x28001680, 0x74000000 },
- { 0x28801681, 0x1c000019 },
- { 0x2800169b, 0x58000000 },
- { 0x2800169c, 0x48000000 },
- { 0x2d8016a0, 0x1c00004a },
- { 0x098016eb, 0x54000002 },
- { 0x2d8016ee, 0x38000002 },
- { 0x32801700, 0x1c00000c },
- { 0x3280170e, 0x1c000003 },
- { 0x32801712, 0x30000002 },
- { 0x18801720, 0x1c000011 },
- { 0x18801732, 0x30000002 },
- { 0x09801735, 0x54000001 },
- { 0x06801740, 0x1c000011 },
- { 0x06801752, 0x30000001 },
- { 0x33801760, 0x1c00000c },
- { 0x3380176e, 0x1c000002 },
- { 0x33801772, 0x30000001 },
- { 0x1f801780, 0x1c000033 },
- { 0x1f8017b4, 0x04000001 },
- { 0x1f0017b6, 0x28000000 },
- { 0x1f8017b7, 0x30000006 },
- { 0x1f8017be, 0x28000007 },
- { 0x1f0017c6, 0x30000000 },
- { 0x1f8017c7, 0x28000001 },
- { 0x1f8017c9, 0x3000000a },
- { 0x1f8017d4, 0x54000002 },
- { 0x1f0017d7, 0x18000000 },
- { 0x1f8017d8, 0x54000002 },
- { 0x1f0017db, 0x5c000000 },
- { 0x1f0017dc, 0x1c000000 },
- { 0x1f0017dd, 0x30000000 },
- { 0x1f8017e0, 0x34000009 },
- { 0x1f8017f0, 0x3c000009 },
- { 0x25801800, 0x54000001 },
- { 0x09801802, 0x54000001 },
- { 0x25001804, 0x54000000 },
- { 0x09001805, 0x54000000 },
- { 0x25001806, 0x44000000 },
- { 0x25801807, 0x54000003 },
- { 0x2580180b, 0x30000002 },
- { 0x2500180e, 0x74000000 },
- { 0x25801810, 0x34000009 },
- { 0x25801820, 0x1c000022 },
- { 0x25001843, 0x18000000 },
- { 0x25801844, 0x1c000033 },
- { 0x25801880, 0x1c000028 },
- { 0x250018a9, 0x30000000 },
- { 0x22801900, 0x1c00001c },
- { 0x22801920, 0x30000002 },
- { 0x22801923, 0x28000003 },
- { 0x22801927, 0x30000001 },
- { 0x22801929, 0x28000002 },
- { 0x22801930, 0x28000001 },
- { 0x22001932, 0x30000000 },
- { 0x22801933, 0x28000005 },
- { 0x22801939, 0x30000002 },
- { 0x22001940, 0x68000000 },
- { 0x22801944, 0x54000001 },
- { 0x22801946, 0x34000009 },
- { 0x34801950, 0x1c00001d },
- { 0x34801970, 0x1c000004 },
- { 0x27801980, 0x1c000029 },
- { 0x278019b0, 0x28000010 },
- { 0x278019c1, 0x1c000006 },
- { 0x278019c8, 0x28000001 },
- { 0x278019d0, 0x34000009 },
- { 0x278019de, 0x54000001 },
- { 0x1f8019e0, 0x6800001f },
- { 0x05801a00, 0x1c000016 },
- { 0x05801a17, 0x30000001 },
- { 0x05801a19, 0x28000002 },
- { 0x05801a1e, 0x54000001 },
- { 0x3d801b00, 0x30000003 },
- { 0x3d001b04, 0x28000000 },
- { 0x3d801b05, 0x1c00002e },
- { 0x3d001b34, 0x30000000 },
- { 0x3d001b35, 0x28000000 },
- { 0x3d801b36, 0x30000004 },
- { 0x3d001b3b, 0x28000000 },
- { 0x3d001b3c, 0x30000000 },
- { 0x3d801b3d, 0x28000004 },
- { 0x3d001b42, 0x30000000 },
- { 0x3d801b43, 0x28000001 },
- { 0x3d801b45, 0x1c000006 },
- { 0x3d801b50, 0x34000009 },
- { 0x3d801b5a, 0x54000006 },
- { 0x3d801b61, 0x68000009 },
- { 0x3d801b6b, 0x30000008 },
- { 0x3d801b74, 0x68000008 },
- { 0x21801d00, 0x14000025 },
- { 0x13801d26, 0x14000004 },
- { 0x0c001d2b, 0x14000000 },
- { 0x21801d2c, 0x18000030 },
- { 0x13801d5d, 0x18000004 },
- { 0x21801d62, 0x14000003 },
- { 0x13801d66, 0x14000004 },
- { 0x21801d6b, 0x1400000c },
- { 0x0c001d78, 0x18000000 },
- { 0x21801d79, 0x14000003 },
- { 0x21001d7d, 0x14000ee6 },
- { 0x21801d7e, 0x1400001c },
- { 0x21801d9b, 0x18000023 },
- { 0x13001dbf, 0x18000000 },
- { 0x1b801dc0, 0x3000000a },
- { 0x1b801dfe, 0x30000001 },
- { 0x21001e00, 0x24000001 },
- { 0x21001e01, 0x1400ffff },
- { 0x21001e02, 0x24000001 },
- { 0x21001e03, 0x1400ffff },
- { 0x21001e04, 0x24000001 },
- { 0x21001e05, 0x1400ffff },
- { 0x21001e06, 0x24000001 },
- { 0x21001e07, 0x1400ffff },
- { 0x21001e08, 0x24000001 },
- { 0x21001e09, 0x1400ffff },
- { 0x21001e0a, 0x24000001 },
- { 0x21001e0b, 0x1400ffff },
- { 0x21001e0c, 0x24000001 },
- { 0x21001e0d, 0x1400ffff },
- { 0x21001e0e, 0x24000001 },
- { 0x21001e0f, 0x1400ffff },
- { 0x21001e10, 0x24000001 },
- { 0x21001e11, 0x1400ffff },
- { 0x21001e12, 0x24000001 },
- { 0x21001e13, 0x1400ffff },
- { 0x21001e14, 0x24000001 },
- { 0x21001e15, 0x1400ffff },
- { 0x21001e16, 0x24000001 },
- { 0x21001e17, 0x1400ffff },
- { 0x21001e18, 0x24000001 },
- { 0x21001e19, 0x1400ffff },
- { 0x21001e1a, 0x24000001 },
- { 0x21001e1b, 0x1400ffff },
- { 0x21001e1c, 0x24000001 },
- { 0x21001e1d, 0x1400ffff },
- { 0x21001e1e, 0x24000001 },
- { 0x21001e1f, 0x1400ffff },
- { 0x21001e20, 0x24000001 },
- { 0x21001e21, 0x1400ffff },
- { 0x21001e22, 0x24000001 },
- { 0x21001e23, 0x1400ffff },
- { 0x21001e24, 0x24000001 },
- { 0x21001e25, 0x1400ffff },
- { 0x21001e26, 0x24000001 },
- { 0x21001e27, 0x1400ffff },
- { 0x21001e28, 0x24000001 },
- { 0x21001e29, 0x1400ffff },
- { 0x21001e2a, 0x24000001 },
- { 0x21001e2b, 0x1400ffff },
- { 0x21001e2c, 0x24000001 },
- { 0x21001e2d, 0x1400ffff },
- { 0x21001e2e, 0x24000001 },
- { 0x21001e2f, 0x1400ffff },
- { 0x21001e30, 0x24000001 },
- { 0x21001e31, 0x1400ffff },
- { 0x21001e32, 0x24000001 },
- { 0x21001e33, 0x1400ffff },
- { 0x21001e34, 0x24000001 },
- { 0x21001e35, 0x1400ffff },
- { 0x21001e36, 0x24000001 },
- { 0x21001e37, 0x1400ffff },
- { 0x21001e38, 0x24000001 },
- { 0x21001e39, 0x1400ffff },
- { 0x21001e3a, 0x24000001 },
- { 0x21001e3b, 0x1400ffff },
- { 0x21001e3c, 0x24000001 },
- { 0x21001e3d, 0x1400ffff },
- { 0x21001e3e, 0x24000001 },
- { 0x21001e3f, 0x1400ffff },
- { 0x21001e40, 0x24000001 },
- { 0x21001e41, 0x1400ffff },
- { 0x21001e42, 0x24000001 },
- { 0x21001e43, 0x1400ffff },
- { 0x21001e44, 0x24000001 },
- { 0x21001e45, 0x1400ffff },
- { 0x21001e46, 0x24000001 },
- { 0x21001e47, 0x1400ffff },
- { 0x21001e48, 0x24000001 },
- { 0x21001e49, 0x1400ffff },
- { 0x21001e4a, 0x24000001 },
- { 0x21001e4b, 0x1400ffff },
- { 0x21001e4c, 0x24000001 },
- { 0x21001e4d, 0x1400ffff },
- { 0x21001e4e, 0x24000001 },
- { 0x21001e4f, 0x1400ffff },
- { 0x21001e50, 0x24000001 },
- { 0x21001e51, 0x1400ffff },
- { 0x21001e52, 0x24000001 },
- { 0x21001e53, 0x1400ffff },
- { 0x21001e54, 0x24000001 },
- { 0x21001e55, 0x1400ffff },
- { 0x21001e56, 0x24000001 },
- { 0x21001e57, 0x1400ffff },
- { 0x21001e58, 0x24000001 },
- { 0x21001e59, 0x1400ffff },
- { 0x21001e5a, 0x24000001 },
- { 0x21001e5b, 0x1400ffff },
- { 0x21001e5c, 0x24000001 },
- { 0x21001e5d, 0x1400ffff },
- { 0x21001e5e, 0x24000001 },
- { 0x21001e5f, 0x1400ffff },
- { 0x21001e60, 0x24000001 },
- { 0x21001e61, 0x1400ffff },
- { 0x21001e62, 0x24000001 },
- { 0x21001e63, 0x1400ffff },
- { 0x21001e64, 0x24000001 },
- { 0x21001e65, 0x1400ffff },
- { 0x21001e66, 0x24000001 },
- { 0x21001e67, 0x1400ffff },
- { 0x21001e68, 0x24000001 },
- { 0x21001e69, 0x1400ffff },
- { 0x21001e6a, 0x24000001 },
- { 0x21001e6b, 0x1400ffff },
- { 0x21001e6c, 0x24000001 },
- { 0x21001e6d, 0x1400ffff },
- { 0x21001e6e, 0x24000001 },
- { 0x21001e6f, 0x1400ffff },
- { 0x21001e70, 0x24000001 },
- { 0x21001e71, 0x1400ffff },
- { 0x21001e72, 0x24000001 },
- { 0x21001e73, 0x1400ffff },
- { 0x21001e74, 0x24000001 },
- { 0x21001e75, 0x1400ffff },
- { 0x21001e76, 0x24000001 },
- { 0x21001e77, 0x1400ffff },
- { 0x21001e78, 0x24000001 },
- { 0x21001e79, 0x1400ffff },
- { 0x21001e7a, 0x24000001 },
- { 0x21001e7b, 0x1400ffff },
- { 0x21001e7c, 0x24000001 },
- { 0x21001e7d, 0x1400ffff },
- { 0x21001e7e, 0x24000001 },
- { 0x21001e7f, 0x1400ffff },
- { 0x21001e80, 0x24000001 },
- { 0x21001e81, 0x1400ffff },
- { 0x21001e82, 0x24000001 },
- { 0x21001e83, 0x1400ffff },
- { 0x21001e84, 0x24000001 },
- { 0x21001e85, 0x1400ffff },
- { 0x21001e86, 0x24000001 },
- { 0x21001e87, 0x1400ffff },
- { 0x21001e88, 0x24000001 },
- { 0x21001e89, 0x1400ffff },
- { 0x21001e8a, 0x24000001 },
- { 0x21001e8b, 0x1400ffff },
- { 0x21001e8c, 0x24000001 },
- { 0x21001e8d, 0x1400ffff },
- { 0x21001e8e, 0x24000001 },
- { 0x21001e8f, 0x1400ffff },
- { 0x21001e90, 0x24000001 },
- { 0x21001e91, 0x1400ffff },
- { 0x21001e92, 0x24000001 },
- { 0x21001e93, 0x1400ffff },
- { 0x21001e94, 0x24000001 },
- { 0x21001e95, 0x1400ffff },
- { 0x21801e96, 0x14000004 },
- { 0x21001e9b, 0x1400ffc5 },
- { 0x21001ea0, 0x24000001 },
- { 0x21001ea1, 0x1400ffff },
- { 0x21001ea2, 0x24000001 },
- { 0x21001ea3, 0x1400ffff },
- { 0x21001ea4, 0x24000001 },
- { 0x21001ea5, 0x1400ffff },
- { 0x21001ea6, 0x24000001 },
- { 0x21001ea7, 0x1400ffff },
- { 0x21001ea8, 0x24000001 },
- { 0x21001ea9, 0x1400ffff },
- { 0x21001eaa, 0x24000001 },
- { 0x21001eab, 0x1400ffff },
- { 0x21001eac, 0x24000001 },
- { 0x21001ead, 0x1400ffff },
- { 0x21001eae, 0x24000001 },
- { 0x21001eaf, 0x1400ffff },
- { 0x21001eb0, 0x24000001 },
- { 0x21001eb1, 0x1400ffff },
- { 0x21001eb2, 0x24000001 },
- { 0x21001eb3, 0x1400ffff },
- { 0x21001eb4, 0x24000001 },
- { 0x21001eb5, 0x1400ffff },
- { 0x21001eb6, 0x24000001 },
- { 0x21001eb7, 0x1400ffff },
- { 0x21001eb8, 0x24000001 },
- { 0x21001eb9, 0x1400ffff },
- { 0x21001eba, 0x24000001 },
- { 0x21001ebb, 0x1400ffff },
- { 0x21001ebc, 0x24000001 },
- { 0x21001ebd, 0x1400ffff },
- { 0x21001ebe, 0x24000001 },
- { 0x21001ebf, 0x1400ffff },
- { 0x21001ec0, 0x24000001 },
- { 0x21001ec1, 0x1400ffff },
- { 0x21001ec2, 0x24000001 },
- { 0x21001ec3, 0x1400ffff },
- { 0x21001ec4, 0x24000001 },
- { 0x21001ec5, 0x1400ffff },
- { 0x21001ec6, 0x24000001 },
- { 0x21001ec7, 0x1400ffff },
- { 0x21001ec8, 0x24000001 },
- { 0x21001ec9, 0x1400ffff },
- { 0x21001eca, 0x24000001 },
- { 0x21001ecb, 0x1400ffff },
- { 0x21001ecc, 0x24000001 },
- { 0x21001ecd, 0x1400ffff },
- { 0x21001ece, 0x24000001 },
- { 0x21001ecf, 0x1400ffff },
- { 0x21001ed0, 0x24000001 },
- { 0x21001ed1, 0x1400ffff },
- { 0x21001ed2, 0x24000001 },
- { 0x21001ed3, 0x1400ffff },
- { 0x21001ed4, 0x24000001 },
- { 0x21001ed5, 0x1400ffff },
- { 0x21001ed6, 0x24000001 },
- { 0x21001ed7, 0x1400ffff },
- { 0x21001ed8, 0x24000001 },
- { 0x21001ed9, 0x1400ffff },
- { 0x21001eda, 0x24000001 },
- { 0x21001edb, 0x1400ffff },
- { 0x21001edc, 0x24000001 },
- { 0x21001edd, 0x1400ffff },
- { 0x21001ede, 0x24000001 },
- { 0x21001edf, 0x1400ffff },
- { 0x21001ee0, 0x24000001 },
- { 0x21001ee1, 0x1400ffff },
- { 0x21001ee2, 0x24000001 },
- { 0x21001ee3, 0x1400ffff },
- { 0x21001ee4, 0x24000001 },
- { 0x21001ee5, 0x1400ffff },
- { 0x21001ee6, 0x24000001 },
- { 0x21001ee7, 0x1400ffff },
- { 0x21001ee8, 0x24000001 },
- { 0x21001ee9, 0x1400ffff },
- { 0x21001eea, 0x24000001 },
- { 0x21001eeb, 0x1400ffff },
- { 0x21001eec, 0x24000001 },
- { 0x21001eed, 0x1400ffff },
- { 0x21001eee, 0x24000001 },
- { 0x21001eef, 0x1400ffff },
- { 0x21001ef0, 0x24000001 },
- { 0x21001ef1, 0x1400ffff },
- { 0x21001ef2, 0x24000001 },
- { 0x21001ef3, 0x1400ffff },
- { 0x21001ef4, 0x24000001 },
- { 0x21001ef5, 0x1400ffff },
- { 0x21001ef6, 0x24000001 },
- { 0x21001ef7, 0x1400ffff },
- { 0x21001ef8, 0x24000001 },
- { 0x21001ef9, 0x1400ffff },
- { 0x13001f00, 0x14000008 },
- { 0x13001f01, 0x14000008 },
- { 0x13001f02, 0x14000008 },
- { 0x13001f03, 0x14000008 },
- { 0x13001f04, 0x14000008 },
- { 0x13001f05, 0x14000008 },
- { 0x13001f06, 0x14000008 },
- { 0x13001f07, 0x14000008 },
- { 0x13001f08, 0x2400fff8 },
- { 0x13001f09, 0x2400fff8 },
- { 0x13001f0a, 0x2400fff8 },
- { 0x13001f0b, 0x2400fff8 },
- { 0x13001f0c, 0x2400fff8 },
- { 0x13001f0d, 0x2400fff8 },
- { 0x13001f0e, 0x2400fff8 },
- { 0x13001f0f, 0x2400fff8 },
- { 0x13001f10, 0x14000008 },
- { 0x13001f11, 0x14000008 },
- { 0x13001f12, 0x14000008 },
- { 0x13001f13, 0x14000008 },
- { 0x13001f14, 0x14000008 },
- { 0x13001f15, 0x14000008 },
- { 0x13001f18, 0x2400fff8 },
- { 0x13001f19, 0x2400fff8 },
- { 0x13001f1a, 0x2400fff8 },
- { 0x13001f1b, 0x2400fff8 },
- { 0x13001f1c, 0x2400fff8 },
- { 0x13001f1d, 0x2400fff8 },
- { 0x13001f20, 0x14000008 },
- { 0x13001f21, 0x14000008 },
- { 0x13001f22, 0x14000008 },
- { 0x13001f23, 0x14000008 },
- { 0x13001f24, 0x14000008 },
- { 0x13001f25, 0x14000008 },
- { 0x13001f26, 0x14000008 },
- { 0x13001f27, 0x14000008 },
- { 0x13001f28, 0x2400fff8 },
- { 0x13001f29, 0x2400fff8 },
- { 0x13001f2a, 0x2400fff8 },
- { 0x13001f2b, 0x2400fff8 },
- { 0x13001f2c, 0x2400fff8 },
- { 0x13001f2d, 0x2400fff8 },
- { 0x13001f2e, 0x2400fff8 },
- { 0x13001f2f, 0x2400fff8 },
- { 0x13001f30, 0x14000008 },
- { 0x13001f31, 0x14000008 },
- { 0x13001f32, 0x14000008 },
- { 0x13001f33, 0x14000008 },
- { 0x13001f34, 0x14000008 },
- { 0x13001f35, 0x14000008 },
- { 0x13001f36, 0x14000008 },
- { 0x13001f37, 0x14000008 },
- { 0x13001f38, 0x2400fff8 },
- { 0x13001f39, 0x2400fff8 },
- { 0x13001f3a, 0x2400fff8 },
- { 0x13001f3b, 0x2400fff8 },
- { 0x13001f3c, 0x2400fff8 },
- { 0x13001f3d, 0x2400fff8 },
- { 0x13001f3e, 0x2400fff8 },
- { 0x13001f3f, 0x2400fff8 },
- { 0x13001f40, 0x14000008 },
- { 0x13001f41, 0x14000008 },
- { 0x13001f42, 0x14000008 },
- { 0x13001f43, 0x14000008 },
- { 0x13001f44, 0x14000008 },
- { 0x13001f45, 0x14000008 },
- { 0x13001f48, 0x2400fff8 },
- { 0x13001f49, 0x2400fff8 },
- { 0x13001f4a, 0x2400fff8 },
- { 0x13001f4b, 0x2400fff8 },
- { 0x13001f4c, 0x2400fff8 },
- { 0x13001f4d, 0x2400fff8 },
- { 0x13001f50, 0x14000000 },
- { 0x13001f51, 0x14000008 },
- { 0x13001f52, 0x14000000 },
- { 0x13001f53, 0x14000008 },
- { 0x13001f54, 0x14000000 },
- { 0x13001f55, 0x14000008 },
- { 0x13001f56, 0x14000000 },
- { 0x13001f57, 0x14000008 },
- { 0x13001f59, 0x2400fff8 },
- { 0x13001f5b, 0x2400fff8 },
- { 0x13001f5d, 0x2400fff8 },
- { 0x13001f5f, 0x2400fff8 },
- { 0x13001f60, 0x14000008 },
- { 0x13001f61, 0x14000008 },
- { 0x13001f62, 0x14000008 },
- { 0x13001f63, 0x14000008 },
- { 0x13001f64, 0x14000008 },
- { 0x13001f65, 0x14000008 },
- { 0x13001f66, 0x14000008 },
- { 0x13001f67, 0x14000008 },
- { 0x13001f68, 0x2400fff8 },
- { 0x13001f69, 0x2400fff8 },
- { 0x13001f6a, 0x2400fff8 },
- { 0x13001f6b, 0x2400fff8 },
- { 0x13001f6c, 0x2400fff8 },
- { 0x13001f6d, 0x2400fff8 },
- { 0x13001f6e, 0x2400fff8 },
- { 0x13001f6f, 0x2400fff8 },
- { 0x13001f70, 0x1400004a },
- { 0x13001f71, 0x1400004a },
- { 0x13001f72, 0x14000056 },
- { 0x13001f73, 0x14000056 },
- { 0x13001f74, 0x14000056 },
- { 0x13001f75, 0x14000056 },
- { 0x13001f76, 0x14000064 },
- { 0x13001f77, 0x14000064 },
- { 0x13001f78, 0x14000080 },
- { 0x13001f79, 0x14000080 },
- { 0x13001f7a, 0x14000070 },
- { 0x13001f7b, 0x14000070 },
- { 0x13001f7c, 0x1400007e },
- { 0x13001f7d, 0x1400007e },
- { 0x13001f80, 0x14000008 },
- { 0x13001f81, 0x14000008 },
- { 0x13001f82, 0x14000008 },
- { 0x13001f83, 0x14000008 },
- { 0x13001f84, 0x14000008 },
- { 0x13001f85, 0x14000008 },
- { 0x13001f86, 0x14000008 },
- { 0x13001f87, 0x14000008 },
- { 0x13001f88, 0x2000fff8 },
- { 0x13001f89, 0x2000fff8 },
- { 0x13001f8a, 0x2000fff8 },
- { 0x13001f8b, 0x2000fff8 },
- { 0x13001f8c, 0x2000fff8 },
- { 0x13001f8d, 0x2000fff8 },
- { 0x13001f8e, 0x2000fff8 },
- { 0x13001f8f, 0x2000fff8 },
- { 0x13001f90, 0x14000008 },
- { 0x13001f91, 0x14000008 },
- { 0x13001f92, 0x14000008 },
- { 0x13001f93, 0x14000008 },
- { 0x13001f94, 0x14000008 },
- { 0x13001f95, 0x14000008 },
- { 0x13001f96, 0x14000008 },
- { 0x13001f97, 0x14000008 },
- { 0x13001f98, 0x2000fff8 },
- { 0x13001f99, 0x2000fff8 },
- { 0x13001f9a, 0x2000fff8 },
- { 0x13001f9b, 0x2000fff8 },
- { 0x13001f9c, 0x2000fff8 },
- { 0x13001f9d, 0x2000fff8 },
- { 0x13001f9e, 0x2000fff8 },
- { 0x13001f9f, 0x2000fff8 },
- { 0x13001fa0, 0x14000008 },
- { 0x13001fa1, 0x14000008 },
- { 0x13001fa2, 0x14000008 },
- { 0x13001fa3, 0x14000008 },
- { 0x13001fa4, 0x14000008 },
- { 0x13001fa5, 0x14000008 },
- { 0x13001fa6, 0x14000008 },
- { 0x13001fa7, 0x14000008 },
- { 0x13001fa8, 0x2000fff8 },
- { 0x13001fa9, 0x2000fff8 },
- { 0x13001faa, 0x2000fff8 },
- { 0x13001fab, 0x2000fff8 },
- { 0x13001fac, 0x2000fff8 },
- { 0x13001fad, 0x2000fff8 },
- { 0x13001fae, 0x2000fff8 },
- { 0x13001faf, 0x2000fff8 },
- { 0x13001fb0, 0x14000008 },
- { 0x13001fb1, 0x14000008 },
- { 0x13001fb2, 0x14000000 },
- { 0x13001fb3, 0x14000009 },
- { 0x13001fb4, 0x14000000 },
- { 0x13801fb6, 0x14000001 },
- { 0x13001fb8, 0x2400fff8 },
- { 0x13001fb9, 0x2400fff8 },
- { 0x13001fba, 0x2400ffb6 },
- { 0x13001fbb, 0x2400ffb6 },
- { 0x13001fbc, 0x2000fff7 },
- { 0x13001fbd, 0x60000000 },
- { 0x13001fbe, 0x1400e3db },
- { 0x13801fbf, 0x60000002 },
- { 0x13001fc2, 0x14000000 },
- { 0x13001fc3, 0x14000009 },
- { 0x13001fc4, 0x14000000 },
- { 0x13801fc6, 0x14000001 },
- { 0x13001fc8, 0x2400ffaa },
- { 0x13001fc9, 0x2400ffaa },
- { 0x13001fca, 0x2400ffaa },
- { 0x13001fcb, 0x2400ffaa },
- { 0x13001fcc, 0x2000fff7 },
- { 0x13801fcd, 0x60000002 },
- { 0x13001fd0, 0x14000008 },
- { 0x13001fd1, 0x14000008 },
- { 0x13801fd2, 0x14000001 },
- { 0x13801fd6, 0x14000001 },
- { 0x13001fd8, 0x2400fff8 },
- { 0x13001fd9, 0x2400fff8 },
- { 0x13001fda, 0x2400ff9c },
- { 0x13001fdb, 0x2400ff9c },
- { 0x13801fdd, 0x60000002 },
- { 0x13001fe0, 0x14000008 },
- { 0x13001fe1, 0x14000008 },
- { 0x13801fe2, 0x14000002 },
- { 0x13001fe5, 0x14000007 },
- { 0x13801fe6, 0x14000001 },
- { 0x13001fe8, 0x2400fff8 },
- { 0x13001fe9, 0x2400fff8 },
- { 0x13001fea, 0x2400ff90 },
- { 0x13001feb, 0x2400ff90 },
- { 0x13001fec, 0x2400fff9 },
- { 0x13801fed, 0x60000002 },
- { 0x13001ff2, 0x14000000 },
- { 0x13001ff3, 0x14000009 },
- { 0x13001ff4, 0x14000000 },
- { 0x13801ff6, 0x14000001 },
- { 0x13001ff8, 0x2400ff80 },
- { 0x13001ff9, 0x2400ff80 },
- { 0x13001ffa, 0x2400ff82 },
- { 0x13001ffb, 0x2400ff82 },
- { 0x13001ffc, 0x2000fff7 },
- { 0x13801ffd, 0x60000001 },
- { 0x09802000, 0x7400000a },
- { 0x0900200b, 0x04000000 },
- { 0x1b80200c, 0x04000001 },
- { 0x0980200e, 0x04000001 },
- { 0x09802010, 0x44000005 },
- { 0x09802016, 0x54000001 },
- { 0x09002018, 0x50000000 },
- { 0x09002019, 0x4c000000 },
- { 0x0900201a, 0x58000000 },
- { 0x0980201b, 0x50000001 },
- { 0x0900201d, 0x4c000000 },
- { 0x0900201e, 0x58000000 },
- { 0x0900201f, 0x50000000 },
- { 0x09802020, 0x54000007 },
- { 0x09002028, 0x6c000000 },
- { 0x09002029, 0x70000000 },
- { 0x0980202a, 0x04000004 },
- { 0x0900202f, 0x74000000 },
- { 0x09802030, 0x54000008 },
- { 0x09002039, 0x50000000 },
- { 0x0900203a, 0x4c000000 },
- { 0x0980203b, 0x54000003 },
- { 0x0980203f, 0x40000001 },
- { 0x09802041, 0x54000002 },
- { 0x09002044, 0x64000000 },
- { 0x09002045, 0x58000000 },
- { 0x09002046, 0x48000000 },
- { 0x09802047, 0x5400000a },
- { 0x09002052, 0x64000000 },
- { 0x09002053, 0x54000000 },
- { 0x09002054, 0x40000000 },
- { 0x09802055, 0x54000009 },
- { 0x0900205f, 0x74000000 },
- { 0x09802060, 0x04000003 },
- { 0x0980206a, 0x04000005 },
- { 0x09002070, 0x3c000000 },
- { 0x21002071, 0x14000000 },
- { 0x09802074, 0x3c000005 },
- { 0x0980207a, 0x64000002 },
- { 0x0900207d, 0x58000000 },
- { 0x0900207e, 0x48000000 },
- { 0x2100207f, 0x14000000 },
- { 0x09802080, 0x3c000009 },
- { 0x0980208a, 0x64000002 },
- { 0x0900208d, 0x58000000 },
- { 0x0900208e, 0x48000000 },
- { 0x21802090, 0x18000004 },
- { 0x098020a0, 0x5c000015 },
- { 0x1b8020d0, 0x3000000c },
- { 0x1b8020dd, 0x2c000003 },
- { 0x1b0020e1, 0x30000000 },
- { 0x1b8020e2, 0x2c000002 },
- { 0x1b8020e5, 0x3000000a },
- { 0x09802100, 0x68000001 },
- { 0x09002102, 0x24000000 },
- { 0x09802103, 0x68000003 },
- { 0x09002107, 0x24000000 },
- { 0x09802108, 0x68000001 },
- { 0x0900210a, 0x14000000 },
- { 0x0980210b, 0x24000002 },
- { 0x0980210e, 0x14000001 },
- { 0x09802110, 0x24000002 },
- { 0x09002113, 0x14000000 },
- { 0x09002114, 0x68000000 },
- { 0x09002115, 0x24000000 },
- { 0x09802116, 0x68000002 },
- { 0x09802119, 0x24000004 },
- { 0x0980211e, 0x68000005 },
- { 0x09002124, 0x24000000 },
- { 0x09002125, 0x68000000 },
- { 0x13002126, 0x2400e2a3 },
- { 0x09002127, 0x68000000 },
- { 0x09002128, 0x24000000 },
- { 0x09002129, 0x68000000 },
- { 0x2100212a, 0x2400df41 },
- { 0x2100212b, 0x2400dfba },
- { 0x0980212c, 0x24000001 },
- { 0x0900212e, 0x68000000 },
- { 0x0900212f, 0x14000000 },
- { 0x09802130, 0x24000001 },
- { 0x21002132, 0x2400001c },
- { 0x09002133, 0x24000000 },
- { 0x09002134, 0x14000000 },
- { 0x09802135, 0x1c000003 },
- { 0x09002139, 0x14000000 },
- { 0x0980213a, 0x68000001 },
- { 0x0980213c, 0x14000001 },
- { 0x0980213e, 0x24000001 },
- { 0x09802140, 0x64000004 },
- { 0x09002145, 0x24000000 },
- { 0x09802146, 0x14000003 },
- { 0x0900214a, 0x68000000 },
- { 0x0900214b, 0x64000000 },
- { 0x0980214c, 0x68000001 },
- { 0x2100214e, 0x1400ffe4 },
- { 0x09802153, 0x3c00000c },
- { 0x09002160, 0x38000010 },
- { 0x09002161, 0x38000010 },
- { 0x09002162, 0x38000010 },
- { 0x09002163, 0x38000010 },
- { 0x09002164, 0x38000010 },
- { 0x09002165, 0x38000010 },
- { 0x09002166, 0x38000010 },
- { 0x09002167, 0x38000010 },
- { 0x09002168, 0x38000010 },
- { 0x09002169, 0x38000010 },
- { 0x0900216a, 0x38000010 },
- { 0x0900216b, 0x38000010 },
- { 0x0900216c, 0x38000010 },
- { 0x0900216d, 0x38000010 },
- { 0x0900216e, 0x38000010 },
- { 0x0900216f, 0x38000010 },
- { 0x09002170, 0x3800fff0 },
- { 0x09002171, 0x3800fff0 },
- { 0x09002172, 0x3800fff0 },
- { 0x09002173, 0x3800fff0 },
- { 0x09002174, 0x3800fff0 },
- { 0x09002175, 0x3800fff0 },
- { 0x09002176, 0x3800fff0 },
- { 0x09002177, 0x3800fff0 },
- { 0x09002178, 0x3800fff0 },
- { 0x09002179, 0x3800fff0 },
- { 0x0900217a, 0x3800fff0 },
- { 0x0900217b, 0x3800fff0 },
- { 0x0900217c, 0x3800fff0 },
- { 0x0900217d, 0x3800fff0 },
- { 0x0900217e, 0x3800fff0 },
- { 0x0900217f, 0x3800fff0 },
- { 0x09802180, 0x38000002 },
- { 0x09002183, 0x24000001 },
- { 0x21002184, 0x1400ffff },
- { 0x09802190, 0x64000004 },
- { 0x09802195, 0x68000004 },
- { 0x0980219a, 0x64000001 },
- { 0x0980219c, 0x68000003 },
- { 0x090021a0, 0x64000000 },
- { 0x098021a1, 0x68000001 },
- { 0x090021a3, 0x64000000 },
- { 0x098021a4, 0x68000001 },
- { 0x090021a6, 0x64000000 },
- { 0x098021a7, 0x68000006 },
- { 0x090021ae, 0x64000000 },
- { 0x098021af, 0x6800001e },
- { 0x098021ce, 0x64000001 },
- { 0x098021d0, 0x68000001 },
- { 0x090021d2, 0x64000000 },
- { 0x090021d3, 0x68000000 },
- { 0x090021d4, 0x64000000 },
- { 0x098021d5, 0x6800001e },
- { 0x098021f4, 0x6400010b },
- { 0x09802300, 0x68000007 },
- { 0x09802308, 0x64000003 },
- { 0x0980230c, 0x68000013 },
- { 0x09802320, 0x64000001 },
- { 0x09802322, 0x68000006 },
- { 0x09002329, 0x58000000 },
- { 0x0900232a, 0x48000000 },
- { 0x0980232b, 0x68000050 },
- { 0x0900237c, 0x64000000 },
- { 0x0980237d, 0x6800001d },
- { 0x0980239b, 0x64000018 },
- { 0x098023b4, 0x68000027 },
- { 0x098023dc, 0x64000005 },
- { 0x098023e2, 0x68000005 },
- { 0x09802400, 0x68000026 },
- { 0x09802440, 0x6800000a },
- { 0x09802460, 0x3c00003b },
- { 0x0980249c, 0x68000019 },
- { 0x090024b6, 0x6800001a },
- { 0x090024b7, 0x6800001a },
- { 0x090024b8, 0x6800001a },
- { 0x090024b9, 0x6800001a },
- { 0x090024ba, 0x6800001a },
- { 0x090024bb, 0x6800001a },
- { 0x090024bc, 0x6800001a },
- { 0x090024bd, 0x6800001a },
- { 0x090024be, 0x6800001a },
- { 0x090024bf, 0x6800001a },
- { 0x090024c0, 0x6800001a },
- { 0x090024c1, 0x6800001a },
- { 0x090024c2, 0x6800001a },
- { 0x090024c3, 0x6800001a },
- { 0x090024c4, 0x6800001a },
- { 0x090024c5, 0x6800001a },
- { 0x090024c6, 0x6800001a },
- { 0x090024c7, 0x6800001a },
- { 0x090024c8, 0x6800001a },
- { 0x090024c9, 0x6800001a },
- { 0x090024ca, 0x6800001a },
- { 0x090024cb, 0x6800001a },
- { 0x090024cc, 0x6800001a },
- { 0x090024cd, 0x6800001a },
- { 0x090024ce, 0x6800001a },
- { 0x090024cf, 0x6800001a },
- { 0x090024d0, 0x6800ffe6 },
- { 0x090024d1, 0x6800ffe6 },
- { 0x090024d2, 0x6800ffe6 },
- { 0x090024d3, 0x6800ffe6 },
- { 0x090024d4, 0x6800ffe6 },
- { 0x090024d5, 0x6800ffe6 },
- { 0x090024d6, 0x6800ffe6 },
- { 0x090024d7, 0x6800ffe6 },
- { 0x090024d8, 0x6800ffe6 },
- { 0x090024d9, 0x6800ffe6 },
- { 0x090024da, 0x6800ffe6 },
- { 0x090024db, 0x6800ffe6 },
- { 0x090024dc, 0x6800ffe6 },
- { 0x090024dd, 0x6800ffe6 },
- { 0x090024de, 0x6800ffe6 },
- { 0x090024df, 0x6800ffe6 },
- { 0x090024e0, 0x6800ffe6 },
- { 0x090024e1, 0x6800ffe6 },
- { 0x090024e2, 0x6800ffe6 },
- { 0x090024e3, 0x6800ffe6 },
- { 0x090024e4, 0x6800ffe6 },
- { 0x090024e5, 0x6800ffe6 },
- { 0x090024e6, 0x6800ffe6 },
- { 0x090024e7, 0x6800ffe6 },
- { 0x090024e8, 0x6800ffe6 },
- { 0x090024e9, 0x6800ffe6 },
- { 0x098024ea, 0x3c000015 },
- { 0x09802500, 0x680000b6 },
- { 0x090025b7, 0x64000000 },
- { 0x098025b8, 0x68000008 },
- { 0x090025c1, 0x64000000 },
- { 0x098025c2, 0x68000035 },
- { 0x098025f8, 0x64000007 },
- { 0x09802600, 0x6800006e },
- { 0x0900266f, 0x64000000 },
- { 0x09802670, 0x6800002c },
- { 0x098026a0, 0x68000012 },
- { 0x09802701, 0x68000003 },
- { 0x09802706, 0x68000003 },
- { 0x0980270c, 0x6800001b },
- { 0x09802729, 0x68000022 },
- { 0x0900274d, 0x68000000 },
- { 0x0980274f, 0x68000003 },
- { 0x09002756, 0x68000000 },
- { 0x09802758, 0x68000006 },
- { 0x09802761, 0x68000006 },
- { 0x09002768, 0x58000000 },
- { 0x09002769, 0x48000000 },
- { 0x0900276a, 0x58000000 },
- { 0x0900276b, 0x48000000 },
- { 0x0900276c, 0x58000000 },
- { 0x0900276d, 0x48000000 },
- { 0x0900276e, 0x58000000 },
- { 0x0900276f, 0x48000000 },
- { 0x09002770, 0x58000000 },
- { 0x09002771, 0x48000000 },
- { 0x09002772, 0x58000000 },
- { 0x09002773, 0x48000000 },
- { 0x09002774, 0x58000000 },
- { 0x09002775, 0x48000000 },
- { 0x09802776, 0x3c00001d },
- { 0x09002794, 0x68000000 },
- { 0x09802798, 0x68000017 },
- { 0x098027b1, 0x6800000d },
- { 0x098027c0, 0x64000004 },
- { 0x090027c5, 0x58000000 },
- { 0x090027c6, 0x48000000 },
- { 0x098027c7, 0x64000003 },
- { 0x098027d0, 0x64000015 },
- { 0x090027e6, 0x58000000 },
- { 0x090027e7, 0x48000000 },
- { 0x090027e8, 0x58000000 },
- { 0x090027e9, 0x48000000 },
- { 0x090027ea, 0x58000000 },
- { 0x090027eb, 0x48000000 },
- { 0x098027f0, 0x6400000f },
- { 0x04802800, 0x680000ff },
- { 0x09802900, 0x64000082 },
- { 0x09002983, 0x58000000 },
- { 0x09002984, 0x48000000 },
- { 0x09002985, 0x58000000 },
- { 0x09002986, 0x48000000 },
- { 0x09002987, 0x58000000 },
- { 0x09002988, 0x48000000 },
- { 0x09002989, 0x58000000 },
- { 0x0900298a, 0x48000000 },
- { 0x0900298b, 0x58000000 },
- { 0x0900298c, 0x48000000 },
- { 0x0900298d, 0x58000000 },
- { 0x0900298e, 0x48000000 },
- { 0x0900298f, 0x58000000 },
- { 0x09002990, 0x48000000 },
- { 0x09002991, 0x58000000 },
- { 0x09002992, 0x48000000 },
- { 0x09002993, 0x58000000 },
- { 0x09002994, 0x48000000 },
- { 0x09002995, 0x58000000 },
- { 0x09002996, 0x48000000 },
- { 0x09002997, 0x58000000 },
- { 0x09002998, 0x48000000 },
- { 0x09802999, 0x6400003e },
- { 0x090029d8, 0x58000000 },
- { 0x090029d9, 0x48000000 },
- { 0x090029da, 0x58000000 },
- { 0x090029db, 0x48000000 },
- { 0x098029dc, 0x6400001f },
- { 0x090029fc, 0x58000000 },
- { 0x090029fd, 0x48000000 },
- { 0x098029fe, 0x64000101 },
- { 0x09802b00, 0x6800001a },
- { 0x09802b20, 0x68000003 },
- { 0x11002c00, 0x24000030 },
- { 0x11002c01, 0x24000030 },
- { 0x11002c02, 0x24000030 },
- { 0x11002c03, 0x24000030 },
- { 0x11002c04, 0x24000030 },
- { 0x11002c05, 0x24000030 },
- { 0x11002c06, 0x24000030 },
- { 0x11002c07, 0x24000030 },
- { 0x11002c08, 0x24000030 },
- { 0x11002c09, 0x24000030 },
- { 0x11002c0a, 0x24000030 },
- { 0x11002c0b, 0x24000030 },
- { 0x11002c0c, 0x24000030 },
- { 0x11002c0d, 0x24000030 },
- { 0x11002c0e, 0x24000030 },
- { 0x11002c0f, 0x24000030 },
- { 0x11002c10, 0x24000030 },
- { 0x11002c11, 0x24000030 },
- { 0x11002c12, 0x24000030 },
- { 0x11002c13, 0x24000030 },
- { 0x11002c14, 0x24000030 },
- { 0x11002c15, 0x24000030 },
- { 0x11002c16, 0x24000030 },
- { 0x11002c17, 0x24000030 },
- { 0x11002c18, 0x24000030 },
- { 0x11002c19, 0x24000030 },
- { 0x11002c1a, 0x24000030 },
- { 0x11002c1b, 0x24000030 },
- { 0x11002c1c, 0x24000030 },
- { 0x11002c1d, 0x24000030 },
- { 0x11002c1e, 0x24000030 },
- { 0x11002c1f, 0x24000030 },
- { 0x11002c20, 0x24000030 },
- { 0x11002c21, 0x24000030 },
- { 0x11002c22, 0x24000030 },
- { 0x11002c23, 0x24000030 },
- { 0x11002c24, 0x24000030 },
- { 0x11002c25, 0x24000030 },
- { 0x11002c26, 0x24000030 },
- { 0x11002c27, 0x24000030 },
- { 0x11002c28, 0x24000030 },
- { 0x11002c29, 0x24000030 },
- { 0x11002c2a, 0x24000030 },
- { 0x11002c2b, 0x24000030 },
- { 0x11002c2c, 0x24000030 },
- { 0x11002c2d, 0x24000030 },
- { 0x11002c2e, 0x24000030 },
- { 0x11002c30, 0x1400ffd0 },
- { 0x11002c31, 0x1400ffd0 },
- { 0x11002c32, 0x1400ffd0 },
- { 0x11002c33, 0x1400ffd0 },
- { 0x11002c34, 0x1400ffd0 },
- { 0x11002c35, 0x1400ffd0 },
- { 0x11002c36, 0x1400ffd0 },
- { 0x11002c37, 0x1400ffd0 },
- { 0x11002c38, 0x1400ffd0 },
- { 0x11002c39, 0x1400ffd0 },
- { 0x11002c3a, 0x1400ffd0 },
- { 0x11002c3b, 0x1400ffd0 },
- { 0x11002c3c, 0x1400ffd0 },
- { 0x11002c3d, 0x1400ffd0 },
- { 0x11002c3e, 0x1400ffd0 },
- { 0x11002c3f, 0x1400ffd0 },
- { 0x11002c40, 0x1400ffd0 },
- { 0x11002c41, 0x1400ffd0 },
- { 0x11002c42, 0x1400ffd0 },
- { 0x11002c43, 0x1400ffd0 },
- { 0x11002c44, 0x1400ffd0 },
- { 0x11002c45, 0x1400ffd0 },
- { 0x11002c46, 0x1400ffd0 },
- { 0x11002c47, 0x1400ffd0 },
- { 0x11002c48, 0x1400ffd0 },
- { 0x11002c49, 0x1400ffd0 },
- { 0x11002c4a, 0x1400ffd0 },
- { 0x11002c4b, 0x1400ffd0 },
- { 0x11002c4c, 0x1400ffd0 },
- { 0x11002c4d, 0x1400ffd0 },
- { 0x11002c4e, 0x1400ffd0 },
- { 0x11002c4f, 0x1400ffd0 },
- { 0x11002c50, 0x1400ffd0 },
- { 0x11002c51, 0x1400ffd0 },
- { 0x11002c52, 0x1400ffd0 },
- { 0x11002c53, 0x1400ffd0 },
- { 0x11002c54, 0x1400ffd0 },
- { 0x11002c55, 0x1400ffd0 },
- { 0x11002c56, 0x1400ffd0 },
- { 0x11002c57, 0x1400ffd0 },
- { 0x11002c58, 0x1400ffd0 },
- { 0x11002c59, 0x1400ffd0 },
- { 0x11002c5a, 0x1400ffd0 },
- { 0x11002c5b, 0x1400ffd0 },
- { 0x11002c5c, 0x1400ffd0 },
- { 0x11002c5d, 0x1400ffd0 },
- { 0x11002c5e, 0x1400ffd0 },
- { 0x21002c60, 0x24000001 },
- { 0x21002c61, 0x1400ffff },
- { 0x21002c62, 0x2400d609 },
- { 0x21002c63, 0x2400f11a },
- { 0x21002c64, 0x2400d619 },
- { 0x21002c65, 0x1400d5d5 },
- { 0x21002c66, 0x1400d5d8 },
- { 0x21002c67, 0x24000001 },
- { 0x21002c68, 0x1400ffff },
- { 0x21002c69, 0x24000001 },
- { 0x21002c6a, 0x1400ffff },
- { 0x21002c6b, 0x24000001 },
- { 0x21002c6c, 0x1400ffff },
- { 0x21002c74, 0x14000000 },
- { 0x21002c75, 0x24000001 },
- { 0x21002c76, 0x1400ffff },
- { 0x21002c77, 0x14000000 },
- { 0x0a002c80, 0x24000001 },
- { 0x0a002c81, 0x1400ffff },
- { 0x0a002c82, 0x24000001 },
- { 0x0a002c83, 0x1400ffff },
- { 0x0a002c84, 0x24000001 },
- { 0x0a002c85, 0x1400ffff },
- { 0x0a002c86, 0x24000001 },
- { 0x0a002c87, 0x1400ffff },
- { 0x0a002c88, 0x24000001 },
- { 0x0a002c89, 0x1400ffff },
- { 0x0a002c8a, 0x24000001 },
- { 0x0a002c8b, 0x1400ffff },
- { 0x0a002c8c, 0x24000001 },
- { 0x0a002c8d, 0x1400ffff },
- { 0x0a002c8e, 0x24000001 },
- { 0x0a002c8f, 0x1400ffff },
- { 0x0a002c90, 0x24000001 },
- { 0x0a002c91, 0x1400ffff },
- { 0x0a002c92, 0x24000001 },
- { 0x0a002c93, 0x1400ffff },
- { 0x0a002c94, 0x24000001 },
- { 0x0a002c95, 0x1400ffff },
- { 0x0a002c96, 0x24000001 },
- { 0x0a002c97, 0x1400ffff },
- { 0x0a002c98, 0x24000001 },
- { 0x0a002c99, 0x1400ffff },
- { 0x0a002c9a, 0x24000001 },
- { 0x0a002c9b, 0x1400ffff },
- { 0x0a002c9c, 0x24000001 },
- { 0x0a002c9d, 0x1400ffff },
- { 0x0a002c9e, 0x24000001 },
- { 0x0a002c9f, 0x1400ffff },
- { 0x0a002ca0, 0x24000001 },
- { 0x0a002ca1, 0x1400ffff },
- { 0x0a002ca2, 0x24000001 },
- { 0x0a002ca3, 0x1400ffff },
- { 0x0a002ca4, 0x24000001 },
- { 0x0a002ca5, 0x1400ffff },
- { 0x0a002ca6, 0x24000001 },
- { 0x0a002ca7, 0x1400ffff },
- { 0x0a002ca8, 0x24000001 },
- { 0x0a002ca9, 0x1400ffff },
- { 0x0a002caa, 0x24000001 },
- { 0x0a002cab, 0x1400ffff },
- { 0x0a002cac, 0x24000001 },
- { 0x0a002cad, 0x1400ffff },
- { 0x0a002cae, 0x24000001 },
- { 0x0a002caf, 0x1400ffff },
- { 0x0a002cb0, 0x24000001 },
- { 0x0a002cb1, 0x1400ffff },
- { 0x0a002cb2, 0x24000001 },
- { 0x0a002cb3, 0x1400ffff },
- { 0x0a002cb4, 0x24000001 },
- { 0x0a002cb5, 0x1400ffff },
- { 0x0a002cb6, 0x24000001 },
- { 0x0a002cb7, 0x1400ffff },
- { 0x0a002cb8, 0x24000001 },
- { 0x0a002cb9, 0x1400ffff },
- { 0x0a002cba, 0x24000001 },
- { 0x0a002cbb, 0x1400ffff },
- { 0x0a002cbc, 0x24000001 },
- { 0x0a002cbd, 0x1400ffff },
- { 0x0a002cbe, 0x24000001 },
- { 0x0a002cbf, 0x1400ffff },
- { 0x0a002cc0, 0x24000001 },
- { 0x0a002cc1, 0x1400ffff },
- { 0x0a002cc2, 0x24000001 },
- { 0x0a002cc3, 0x1400ffff },
- { 0x0a002cc4, 0x24000001 },
- { 0x0a002cc5, 0x1400ffff },
- { 0x0a002cc6, 0x24000001 },
- { 0x0a002cc7, 0x1400ffff },
- { 0x0a002cc8, 0x24000001 },
- { 0x0a002cc9, 0x1400ffff },
- { 0x0a002cca, 0x24000001 },
- { 0x0a002ccb, 0x1400ffff },
- { 0x0a002ccc, 0x24000001 },
- { 0x0a002ccd, 0x1400ffff },
- { 0x0a002cce, 0x24000001 },
- { 0x0a002ccf, 0x1400ffff },
- { 0x0a002cd0, 0x24000001 },
- { 0x0a002cd1, 0x1400ffff },
- { 0x0a002cd2, 0x24000001 },
- { 0x0a002cd3, 0x1400ffff },
- { 0x0a002cd4, 0x24000001 },
- { 0x0a002cd5, 0x1400ffff },
- { 0x0a002cd6, 0x24000001 },
- { 0x0a002cd7, 0x1400ffff },
- { 0x0a002cd8, 0x24000001 },
- { 0x0a002cd9, 0x1400ffff },
- { 0x0a002cda, 0x24000001 },
- { 0x0a002cdb, 0x1400ffff },
- { 0x0a002cdc, 0x24000001 },
- { 0x0a002cdd, 0x1400ffff },
- { 0x0a002cde, 0x24000001 },
- { 0x0a002cdf, 0x1400ffff },
- { 0x0a002ce0, 0x24000001 },
- { 0x0a002ce1, 0x1400ffff },
- { 0x0a002ce2, 0x24000001 },
- { 0x0a002ce3, 0x1400ffff },
- { 0x0a002ce4, 0x14000000 },
- { 0x0a802ce5, 0x68000005 },
- { 0x0a802cf9, 0x54000003 },
- { 0x0a002cfd, 0x3c000000 },
- { 0x0a802cfe, 0x54000001 },
- { 0x10002d00, 0x1400e3a0 },
- { 0x10002d01, 0x1400e3a0 },
- { 0x10002d02, 0x1400e3a0 },
- { 0x10002d03, 0x1400e3a0 },
- { 0x10002d04, 0x1400e3a0 },
- { 0x10002d05, 0x1400e3a0 },
- { 0x10002d06, 0x1400e3a0 },
- { 0x10002d07, 0x1400e3a0 },
- { 0x10002d08, 0x1400e3a0 },
- { 0x10002d09, 0x1400e3a0 },
- { 0x10002d0a, 0x1400e3a0 },
- { 0x10002d0b, 0x1400e3a0 },
- { 0x10002d0c, 0x1400e3a0 },
- { 0x10002d0d, 0x1400e3a0 },
- { 0x10002d0e, 0x1400e3a0 },
- { 0x10002d0f, 0x1400e3a0 },
- { 0x10002d10, 0x1400e3a0 },
- { 0x10002d11, 0x1400e3a0 },
- { 0x10002d12, 0x1400e3a0 },
- { 0x10002d13, 0x1400e3a0 },
- { 0x10002d14, 0x1400e3a0 },
- { 0x10002d15, 0x1400e3a0 },
- { 0x10002d16, 0x1400e3a0 },
- { 0x10002d17, 0x1400e3a0 },
- { 0x10002d18, 0x1400e3a0 },
- { 0x10002d19, 0x1400e3a0 },
- { 0x10002d1a, 0x1400e3a0 },
- { 0x10002d1b, 0x1400e3a0 },
- { 0x10002d1c, 0x1400e3a0 },
- { 0x10002d1d, 0x1400e3a0 },
- { 0x10002d1e, 0x1400e3a0 },
- { 0x10002d1f, 0x1400e3a0 },
- { 0x10002d20, 0x1400e3a0 },
- { 0x10002d21, 0x1400e3a0 },
- { 0x10002d22, 0x1400e3a0 },
- { 0x10002d23, 0x1400e3a0 },
- { 0x10002d24, 0x1400e3a0 },
- { 0x10002d25, 0x1400e3a0 },
- { 0x3a802d30, 0x1c000035 },
- { 0x3a002d6f, 0x18000000 },
- { 0x0f802d80, 0x1c000016 },
- { 0x0f802da0, 0x1c000006 },
- { 0x0f802da8, 0x1c000006 },
- { 0x0f802db0, 0x1c000006 },
- { 0x0f802db8, 0x1c000006 },
- { 0x0f802dc0, 0x1c000006 },
- { 0x0f802dc8, 0x1c000006 },
- { 0x0f802dd0, 0x1c000006 },
- { 0x0f802dd8, 0x1c000006 },
- { 0x09802e00, 0x54000001 },
- { 0x09002e02, 0x50000000 },
- { 0x09002e03, 0x4c000000 },
- { 0x09002e04, 0x50000000 },
- { 0x09002e05, 0x4c000000 },
- { 0x09802e06, 0x54000002 },
- { 0x09002e09, 0x50000000 },
- { 0x09002e0a, 0x4c000000 },
- { 0x09002e0b, 0x54000000 },
- { 0x09002e0c, 0x50000000 },
- { 0x09002e0d, 0x4c000000 },
- { 0x09802e0e, 0x54000008 },
- { 0x09002e17, 0x44000000 },
- { 0x09002e1c, 0x50000000 },
- { 0x09002e1d, 0x4c000000 },
- { 0x16802e80, 0x68000019 },
- { 0x16802e9b, 0x68000058 },
- { 0x16802f00, 0x680000d5 },
- { 0x09802ff0, 0x6800000b },
- { 0x09003000, 0x74000000 },
- { 0x09803001, 0x54000002 },
- { 0x09003004, 0x68000000 },
- { 0x16003005, 0x18000000 },
- { 0x09003006, 0x1c000000 },
- { 0x16003007, 0x38000000 },
- { 0x09003008, 0x58000000 },
- { 0x09003009, 0x48000000 },
- { 0x0900300a, 0x58000000 },
- { 0x0900300b, 0x48000000 },
- { 0x0900300c, 0x58000000 },
- { 0x0900300d, 0x48000000 },
- { 0x0900300e, 0x58000000 },
- { 0x0900300f, 0x48000000 },
- { 0x09003010, 0x58000000 },
- { 0x09003011, 0x48000000 },
- { 0x09803012, 0x68000001 },
- { 0x09003014, 0x58000000 },
- { 0x09003015, 0x48000000 },
- { 0x09003016, 0x58000000 },
- { 0x09003017, 0x48000000 },
- { 0x09003018, 0x58000000 },
- { 0x09003019, 0x48000000 },
- { 0x0900301a, 0x58000000 },
- { 0x0900301b, 0x48000000 },
- { 0x0900301c, 0x44000000 },
- { 0x0900301d, 0x58000000 },
- { 0x0980301e, 0x48000001 },
- { 0x09003020, 0x68000000 },
- { 0x16803021, 0x38000008 },
- { 0x1b80302a, 0x30000005 },
- { 0x09003030, 0x44000000 },
- { 0x09803031, 0x18000004 },
- { 0x09803036, 0x68000001 },
- { 0x16803038, 0x38000002 },
- { 0x1600303b, 0x18000000 },
- { 0x0900303c, 0x1c000000 },
- { 0x0900303d, 0x54000000 },
- { 0x0980303e, 0x68000001 },
- { 0x1a803041, 0x1c000055 },
- { 0x1b803099, 0x30000001 },
- { 0x0980309b, 0x60000001 },
- { 0x1a80309d, 0x18000001 },
- { 0x1a00309f, 0x1c000000 },
- { 0x090030a0, 0x44000000 },
- { 0x1d8030a1, 0x1c000059 },
- { 0x090030fb, 0x54000000 },
- { 0x090030fc, 0x18000000 },
- { 0x1d8030fd, 0x18000001 },
- { 0x1d0030ff, 0x1c000000 },
- { 0x03803105, 0x1c000027 },
- { 0x17803131, 0x1c00005d },
- { 0x09803190, 0x68000001 },
- { 0x09803192, 0x3c000003 },
- { 0x09803196, 0x68000009 },
- { 0x038031a0, 0x1c000017 },
- { 0x098031c0, 0x6800000f },
- { 0x1d8031f0, 0x1c00000f },
- { 0x17803200, 0x6800001e },
- { 0x09803220, 0x3c000009 },
- { 0x0980322a, 0x68000019 },
- { 0x09003250, 0x68000000 },
- { 0x09803251, 0x3c00000e },
- { 0x17803260, 0x6800001d },
- { 0x0980327e, 0x68000001 },
- { 0x09803280, 0x3c000009 },
- { 0x0980328a, 0x68000026 },
- { 0x098032b1, 0x3c00000e },
- { 0x098032c0, 0x6800003e },
- { 0x09803300, 0x680000ff },
- { 0x16803400, 0x1c0019b5 },
- { 0x09804dc0, 0x6800003f },
- { 0x16804e00, 0x1c0051bb },
- { 0x3c80a000, 0x1c000014 },
- { 0x3c00a015, 0x18000000 },
- { 0x3c80a016, 0x1c000476 },
- { 0x3c80a490, 0x68000036 },
- { 0x0980a700, 0x60000016 },
- { 0x0980a717, 0x18000003 },
- { 0x0980a720, 0x60000001 },
- { 0x3080a800, 0x1c000001 },
- { 0x3000a802, 0x28000000 },
- { 0x3080a803, 0x1c000002 },
- { 0x3000a806, 0x30000000 },
- { 0x3080a807, 0x1c000003 },
- { 0x3000a80b, 0x30000000 },
- { 0x3080a80c, 0x1c000016 },
- { 0x3080a823, 0x28000001 },
- { 0x3080a825, 0x30000001 },
- { 0x3000a827, 0x28000000 },
- { 0x3080a828, 0x68000003 },
- { 0x4080a840, 0x1c000033 },
- { 0x4080a874, 0x54000003 },
- { 0x1780ac00, 0x1c002ba3 },
- { 0x0980d800, 0x1000037f },
- { 0x0980db80, 0x1000007f },
- { 0x0980dc00, 0x100003ff },
- { 0x0980e000, 0x0c0018ff },
- { 0x1680f900, 0x1c00012d },
- { 0x1680fa30, 0x1c00003a },
- { 0x1680fa70, 0x1c000069 },
- { 0x2180fb00, 0x14000006 },
- { 0x0180fb13, 0x14000004 },
- { 0x1900fb1d, 0x1c000000 },
- { 0x1900fb1e, 0x30000000 },
- { 0x1980fb1f, 0x1c000009 },
- { 0x1900fb29, 0x64000000 },
- { 0x1980fb2a, 0x1c00000c },
- { 0x1980fb38, 0x1c000004 },
- { 0x1900fb3e, 0x1c000000 },
- { 0x1980fb40, 0x1c000001 },
- { 0x1980fb43, 0x1c000001 },
- { 0x1980fb46, 0x1c000009 },
- { 0x0080fb50, 0x1c000061 },
- { 0x0080fbd3, 0x1c00016a },
- { 0x0900fd3e, 0x58000000 },
- { 0x0900fd3f, 0x48000000 },
- { 0x0080fd50, 0x1c00003f },
- { 0x0080fd92, 0x1c000035 },
- { 0x0080fdf0, 0x1c00000b },
- { 0x0000fdfc, 0x5c000000 },
- { 0x0900fdfd, 0x68000000 },
- { 0x1b80fe00, 0x3000000f },
- { 0x0980fe10, 0x54000006 },
- { 0x0900fe17, 0x58000000 },
- { 0x0900fe18, 0x48000000 },
- { 0x0900fe19, 0x54000000 },
- { 0x1b80fe20, 0x30000003 },
- { 0x0900fe30, 0x54000000 },
- { 0x0980fe31, 0x44000001 },
- { 0x0980fe33, 0x40000001 },
- { 0x0900fe35, 0x58000000 },
- { 0x0900fe36, 0x48000000 },
- { 0x0900fe37, 0x58000000 },
- { 0x0900fe38, 0x48000000 },
- { 0x0900fe39, 0x58000000 },
- { 0x0900fe3a, 0x48000000 },
- { 0x0900fe3b, 0x58000000 },
- { 0x0900fe3c, 0x48000000 },
- { 0x0900fe3d, 0x58000000 },
- { 0x0900fe3e, 0x48000000 },
- { 0x0900fe3f, 0x58000000 },
- { 0x0900fe40, 0x48000000 },
- { 0x0900fe41, 0x58000000 },
- { 0x0900fe42, 0x48000000 },
- { 0x0900fe43, 0x58000000 },
- { 0x0900fe44, 0x48000000 },
- { 0x0980fe45, 0x54000001 },
- { 0x0900fe47, 0x58000000 },
- { 0x0900fe48, 0x48000000 },
- { 0x0980fe49, 0x54000003 },
- { 0x0980fe4d, 0x40000002 },
- { 0x0980fe50, 0x54000002 },
- { 0x0980fe54, 0x54000003 },
- { 0x0900fe58, 0x44000000 },
- { 0x0900fe59, 0x58000000 },
- { 0x0900fe5a, 0x48000000 },
- { 0x0900fe5b, 0x58000000 },
- { 0x0900fe5c, 0x48000000 },
- { 0x0900fe5d, 0x58000000 },
- { 0x0900fe5e, 0x48000000 },
- { 0x0980fe5f, 0x54000002 },
- { 0x0900fe62, 0x64000000 },
- { 0x0900fe63, 0x44000000 },
- { 0x0980fe64, 0x64000002 },
- { 0x0900fe68, 0x54000000 },
- { 0x0900fe69, 0x5c000000 },
- { 0x0980fe6a, 0x54000001 },
- { 0x0080fe70, 0x1c000004 },
- { 0x0080fe76, 0x1c000086 },
- { 0x0900feff, 0x04000000 },
- { 0x0980ff01, 0x54000002 },
- { 0x0900ff04, 0x5c000000 },
- { 0x0980ff05, 0x54000002 },
- { 0x0900ff08, 0x58000000 },
- { 0x0900ff09, 0x48000000 },
- { 0x0900ff0a, 0x54000000 },
- { 0x0900ff0b, 0x64000000 },
- { 0x0900ff0c, 0x54000000 },
- { 0x0900ff0d, 0x44000000 },
- { 0x0980ff0e, 0x54000001 },
- { 0x0980ff10, 0x34000009 },
- { 0x0980ff1a, 0x54000001 },
- { 0x0980ff1c, 0x64000002 },
- { 0x0980ff1f, 0x54000001 },
- { 0x2100ff21, 0x24000020 },
- { 0x2100ff22, 0x24000020 },
- { 0x2100ff23, 0x24000020 },
- { 0x2100ff24, 0x24000020 },
- { 0x2100ff25, 0x24000020 },
- { 0x2100ff26, 0x24000020 },
- { 0x2100ff27, 0x24000020 },
- { 0x2100ff28, 0x24000020 },
- { 0x2100ff29, 0x24000020 },
- { 0x2100ff2a, 0x24000020 },
- { 0x2100ff2b, 0x24000020 },
- { 0x2100ff2c, 0x24000020 },
- { 0x2100ff2d, 0x24000020 },
- { 0x2100ff2e, 0x24000020 },
- { 0x2100ff2f, 0x24000020 },
- { 0x2100ff30, 0x24000020 },
- { 0x2100ff31, 0x24000020 },
- { 0x2100ff32, 0x24000020 },
- { 0x2100ff33, 0x24000020 },
- { 0x2100ff34, 0x24000020 },
- { 0x2100ff35, 0x24000020 },
- { 0x2100ff36, 0x24000020 },
- { 0x2100ff37, 0x24000020 },
- { 0x2100ff38, 0x24000020 },
- { 0x2100ff39, 0x24000020 },
- { 0x2100ff3a, 0x24000020 },
- { 0x0900ff3b, 0x58000000 },
- { 0x0900ff3c, 0x54000000 },
- { 0x0900ff3d, 0x48000000 },
- { 0x0900ff3e, 0x60000000 },
- { 0x0900ff3f, 0x40000000 },
- { 0x0900ff40, 0x60000000 },
- { 0x2100ff41, 0x1400ffe0 },
- { 0x2100ff42, 0x1400ffe0 },
- { 0x2100ff43, 0x1400ffe0 },
- { 0x2100ff44, 0x1400ffe0 },
- { 0x2100ff45, 0x1400ffe0 },
- { 0x2100ff46, 0x1400ffe0 },
- { 0x2100ff47, 0x1400ffe0 },
- { 0x2100ff48, 0x1400ffe0 },
- { 0x2100ff49, 0x1400ffe0 },
- { 0x2100ff4a, 0x1400ffe0 },
- { 0x2100ff4b, 0x1400ffe0 },
- { 0x2100ff4c, 0x1400ffe0 },
- { 0x2100ff4d, 0x1400ffe0 },
- { 0x2100ff4e, 0x1400ffe0 },
- { 0x2100ff4f, 0x1400ffe0 },
- { 0x2100ff50, 0x1400ffe0 },
- { 0x2100ff51, 0x1400ffe0 },
- { 0x2100ff52, 0x1400ffe0 },
- { 0x2100ff53, 0x1400ffe0 },
- { 0x2100ff54, 0x1400ffe0 },
- { 0x2100ff55, 0x1400ffe0 },
- { 0x2100ff56, 0x1400ffe0 },
- { 0x2100ff57, 0x1400ffe0 },
- { 0x2100ff58, 0x1400ffe0 },
- { 0x2100ff59, 0x1400ffe0 },
- { 0x2100ff5a, 0x1400ffe0 },
- { 0x0900ff5b, 0x58000000 },
- { 0x0900ff5c, 0x64000000 },
- { 0x0900ff5d, 0x48000000 },
- { 0x0900ff5e, 0x64000000 },
- { 0x0900ff5f, 0x58000000 },
- { 0x0900ff60, 0x48000000 },
- { 0x0900ff61, 0x54000000 },
- { 0x0900ff62, 0x58000000 },
- { 0x0900ff63, 0x48000000 },
- { 0x0980ff64, 0x54000001 },
- { 0x1d80ff66, 0x1c000009 },
- { 0x0900ff70, 0x18000000 },
- { 0x1d80ff71, 0x1c00002c },
- { 0x0980ff9e, 0x18000001 },
- { 0x1780ffa0, 0x1c00001e },
- { 0x1780ffc2, 0x1c000005 },
- { 0x1780ffca, 0x1c000005 },
- { 0x1780ffd2, 0x1c000005 },
- { 0x1780ffda, 0x1c000002 },
- { 0x0980ffe0, 0x5c000001 },
- { 0x0900ffe2, 0x64000000 },
- { 0x0900ffe3, 0x60000000 },
- { 0x0900ffe4, 0x68000000 },
- { 0x0980ffe5, 0x5c000001 },
- { 0x0900ffe8, 0x68000000 },
- { 0x0980ffe9, 0x64000003 },
- { 0x0980ffed, 0x68000001 },
- { 0x0980fff9, 0x04000002 },
- { 0x0980fffc, 0x68000001 },
- { 0x23810000, 0x1c00000b },
- { 0x2381000d, 0x1c000019 },
- { 0x23810028, 0x1c000012 },
- { 0x2381003c, 0x1c000001 },
- { 0x2381003f, 0x1c00000e },
- { 0x23810050, 0x1c00000d },
- { 0x23810080, 0x1c00007a },
- { 0x09810100, 0x54000001 },
- { 0x09010102, 0x68000000 },
- { 0x09810107, 0x3c00002c },
- { 0x09810137, 0x68000008 },
- { 0x13810140, 0x38000034 },
- { 0x13810175, 0x3c000003 },
- { 0x13810179, 0x68000010 },
- { 0x1301018a, 0x3c000000 },
- { 0x29810300, 0x1c00001e },
- { 0x29810320, 0x3c000003 },
- { 0x12810330, 0x1c000010 },
- { 0x12010341, 0x38000000 },
- { 0x12810342, 0x1c000007 },
- { 0x1201034a, 0x38000000 },
- { 0x3b810380, 0x1c00001d },
- { 0x3b01039f, 0x54000000 },
- { 0x2a8103a0, 0x1c000023 },
- { 0x2a8103c8, 0x1c000007 },
- { 0x2a0103d0, 0x54000000 },
- { 0x2a8103d1, 0x38000004 },
- { 0x0d010400, 0x24000028 },
- { 0x0d010401, 0x24000028 },
- { 0x0d010402, 0x24000028 },
- { 0x0d010403, 0x24000028 },
- { 0x0d010404, 0x24000028 },
- { 0x0d010405, 0x24000028 },
- { 0x0d010406, 0x24000028 },
- { 0x0d010407, 0x24000028 },
- { 0x0d010408, 0x24000028 },
- { 0x0d010409, 0x24000028 },
- { 0x0d01040a, 0x24000028 },
- { 0x0d01040b, 0x24000028 },
- { 0x0d01040c, 0x24000028 },
- { 0x0d01040d, 0x24000028 },
- { 0x0d01040e, 0x24000028 },
- { 0x0d01040f, 0x24000028 },
- { 0x0d010410, 0x24000028 },
- { 0x0d010411, 0x24000028 },
- { 0x0d010412, 0x24000028 },
- { 0x0d010413, 0x24000028 },
- { 0x0d010414, 0x24000028 },
- { 0x0d010415, 0x24000028 },
- { 0x0d010416, 0x24000028 },
- { 0x0d010417, 0x24000028 },
- { 0x0d010418, 0x24000028 },
- { 0x0d010419, 0x24000028 },
- { 0x0d01041a, 0x24000028 },
- { 0x0d01041b, 0x24000028 },
- { 0x0d01041c, 0x24000028 },
- { 0x0d01041d, 0x24000028 },
- { 0x0d01041e, 0x24000028 },
- { 0x0d01041f, 0x24000028 },
- { 0x0d010420, 0x24000028 },
- { 0x0d010421, 0x24000028 },
- { 0x0d010422, 0x24000028 },
- { 0x0d010423, 0x24000028 },
- { 0x0d010424, 0x24000028 },
- { 0x0d010425, 0x24000028 },
- { 0x0d010426, 0x24000028 },
- { 0x0d010427, 0x24000028 },
- { 0x0d010428, 0x1400ffd8 },
- { 0x0d010429, 0x1400ffd8 },
- { 0x0d01042a, 0x1400ffd8 },
- { 0x0d01042b, 0x1400ffd8 },
- { 0x0d01042c, 0x1400ffd8 },
- { 0x0d01042d, 0x1400ffd8 },
- { 0x0d01042e, 0x1400ffd8 },
- { 0x0d01042f, 0x1400ffd8 },
- { 0x0d010430, 0x1400ffd8 },
- { 0x0d010431, 0x1400ffd8 },
- { 0x0d010432, 0x1400ffd8 },
- { 0x0d010433, 0x1400ffd8 },
- { 0x0d010434, 0x1400ffd8 },
- { 0x0d010435, 0x1400ffd8 },
- { 0x0d010436, 0x1400ffd8 },
- { 0x0d010437, 0x1400ffd8 },
- { 0x0d010438, 0x1400ffd8 },
- { 0x0d010439, 0x1400ffd8 },
- { 0x0d01043a, 0x1400ffd8 },
- { 0x0d01043b, 0x1400ffd8 },
- { 0x0d01043c, 0x1400ffd8 },
- { 0x0d01043d, 0x1400ffd8 },
- { 0x0d01043e, 0x1400ffd8 },
- { 0x0d01043f, 0x1400ffd8 },
- { 0x0d010440, 0x1400ffd8 },
- { 0x0d010441, 0x1400ffd8 },
- { 0x0d010442, 0x1400ffd8 },
- { 0x0d010443, 0x1400ffd8 },
- { 0x0d010444, 0x1400ffd8 },
- { 0x0d010445, 0x1400ffd8 },
- { 0x0d010446, 0x1400ffd8 },
- { 0x0d010447, 0x1400ffd8 },
- { 0x0d010448, 0x1400ffd8 },
- { 0x0d010449, 0x1400ffd8 },
- { 0x0d01044a, 0x1400ffd8 },
- { 0x0d01044b, 0x1400ffd8 },
- { 0x0d01044c, 0x1400ffd8 },
- { 0x0d01044d, 0x1400ffd8 },
- { 0x0d01044e, 0x1400ffd8 },
- { 0x0d01044f, 0x1400ffd8 },
- { 0x2e810450, 0x1c00002f },
- { 0x2c810480, 0x1c00001d },
- { 0x2c8104a0, 0x34000009 },
- { 0x0b810800, 0x1c000005 },
- { 0x0b010808, 0x1c000000 },
- { 0x0b81080a, 0x1c00002b },
- { 0x0b810837, 0x1c000001 },
- { 0x0b01083c, 0x1c000000 },
- { 0x0b01083f, 0x1c000000 },
- { 0x41810900, 0x1c000015 },
- { 0x41810916, 0x3c000003 },
- { 0x4101091f, 0x54000000 },
- { 0x1e010a00, 0x1c000000 },
- { 0x1e810a01, 0x30000002 },
- { 0x1e810a05, 0x30000001 },
- { 0x1e810a0c, 0x30000003 },
- { 0x1e810a10, 0x1c000003 },
- { 0x1e810a15, 0x1c000002 },
- { 0x1e810a19, 0x1c00001a },
- { 0x1e810a38, 0x30000002 },
- { 0x1e010a3f, 0x30000000 },
- { 0x1e810a40, 0x3c000007 },
- { 0x1e810a50, 0x54000008 },
- { 0x3e812000, 0x1c00036e },
- { 0x3e812400, 0x38000062 },
- { 0x3e812470, 0x54000003 },
- { 0x0981d000, 0x680000f5 },
- { 0x0981d100, 0x68000026 },
- { 0x0981d12a, 0x6800003a },
- { 0x0981d165, 0x28000001 },
- { 0x1b81d167, 0x30000002 },
- { 0x0981d16a, 0x68000002 },
- { 0x0981d16d, 0x28000005 },
- { 0x0981d173, 0x04000007 },
- { 0x1b81d17b, 0x30000007 },
- { 0x0981d183, 0x68000001 },
- { 0x1b81d185, 0x30000006 },
- { 0x0981d18c, 0x6800001d },
- { 0x1b81d1aa, 0x30000003 },
- { 0x0981d1ae, 0x6800002f },
- { 0x1381d200, 0x68000041 },
- { 0x1381d242, 0x30000002 },
- { 0x1301d245, 0x68000000 },
- { 0x0981d300, 0x68000056 },
- { 0x0981d360, 0x3c000011 },
- { 0x0981d400, 0x24000019 },
- { 0x0981d41a, 0x14000019 },
- { 0x0981d434, 0x24000019 },
- { 0x0981d44e, 0x14000006 },
- { 0x0981d456, 0x14000011 },
- { 0x0981d468, 0x24000019 },
- { 0x0981d482, 0x14000019 },
- { 0x0901d49c, 0x24000000 },
- { 0x0981d49e, 0x24000001 },
- { 0x0901d4a2, 0x24000000 },
- { 0x0981d4a5, 0x24000001 },
- { 0x0981d4a9, 0x24000003 },
- { 0x0981d4ae, 0x24000007 },
- { 0x0981d4b6, 0x14000003 },
- { 0x0901d4bb, 0x14000000 },
- { 0x0981d4bd, 0x14000006 },
- { 0x0981d4c5, 0x1400000a },
- { 0x0981d4d0, 0x24000019 },
- { 0x0981d4ea, 0x14000019 },
- { 0x0981d504, 0x24000001 },
- { 0x0981d507, 0x24000003 },
- { 0x0981d50d, 0x24000007 },
- { 0x0981d516, 0x24000006 },
- { 0x0981d51e, 0x14000019 },
- { 0x0981d538, 0x24000001 },
- { 0x0981d53b, 0x24000003 },
- { 0x0981d540, 0x24000004 },
- { 0x0901d546, 0x24000000 },
- { 0x0981d54a, 0x24000006 },
- { 0x0981d552, 0x14000019 },
- { 0x0981d56c, 0x24000019 },
- { 0x0981d586, 0x14000019 },
- { 0x0981d5a0, 0x24000019 },
- { 0x0981d5ba, 0x14000019 },
- { 0x0981d5d4, 0x24000019 },
- { 0x0981d5ee, 0x14000019 },
- { 0x0981d608, 0x24000019 },
- { 0x0981d622, 0x14000019 },
- { 0x0981d63c, 0x24000019 },
- { 0x0981d656, 0x14000019 },
- { 0x0981d670, 0x24000019 },
- { 0x0981d68a, 0x1400001b },
- { 0x0981d6a8, 0x24000018 },
- { 0x0901d6c1, 0x64000000 },
- { 0x0981d6c2, 0x14000018 },
- { 0x0901d6db, 0x64000000 },
- { 0x0981d6dc, 0x14000005 },
- { 0x0981d6e2, 0x24000018 },
- { 0x0901d6fb, 0x64000000 },
- { 0x0981d6fc, 0x14000018 },
- { 0x0901d715, 0x64000000 },
- { 0x0981d716, 0x14000005 },
- { 0x0981d71c, 0x24000018 },
- { 0x0901d735, 0x64000000 },
- { 0x0981d736, 0x14000018 },
- { 0x0901d74f, 0x64000000 },
- { 0x0981d750, 0x14000005 },
- { 0x0981d756, 0x24000018 },
- { 0x0901d76f, 0x64000000 },
- { 0x0981d770, 0x14000018 },
- { 0x0901d789, 0x64000000 },
- { 0x0981d78a, 0x14000005 },
- { 0x0981d790, 0x24000018 },
- { 0x0901d7a9, 0x64000000 },
- { 0x0981d7aa, 0x14000018 },
- { 0x0901d7c3, 0x64000000 },
- { 0x0981d7c4, 0x14000005 },
- { 0x0901d7ca, 0x24000000 },
- { 0x0901d7cb, 0x14000000 },
- { 0x0981d7ce, 0x34000031 },
- { 0x16820000, 0x1c00a6d6 },
- { 0x1682f800, 0x1c00021d },
- { 0x090e0001, 0x04000000 },
- { 0x098e0020, 0x0400005f },
- { 0x1b8e0100, 0x300000ef },
- { 0x098f0000, 0x0c00fffd },
- { 0x09900000, 0x0c00fffd },
-};
diff --git a/ext/pcre/php_pcre.c b/ext/pcre/php_pcre.c
index e728c7354..19bd50bbc 100644
--- a/ext/pcre/php_pcre.c
+++ b/ext/pcre/php_pcre.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pcre.c,v 1.168.2.9.2.25 2008/02/20 22:08:18 felipe Exp $ */
+/* $Id: php_pcre.c,v 1.168.2.9.2.30 2009/01/13 19:23:31 andrei Exp $ */
#include "php.h"
#include "php_ini.h"
@@ -48,7 +48,8 @@ enum {
PHP_PCRE_INTERNAL_ERROR,
PHP_PCRE_BACKTRACK_LIMIT_ERROR,
PHP_PCRE_RECURSION_LIMIT_ERROR,
- PHP_PCRE_BAD_UTF8_ERROR
+ PHP_PCRE_BAD_UTF8_ERROR,
+ PHP_PCRE_BAD_UTF8_OFFSET_ERROR
};
@@ -72,6 +73,10 @@ static void pcre_handle_exec_error(int pcre_code TSRMLS_DC) /* {{{ */
preg_code = PHP_PCRE_BAD_UTF8_ERROR;
break;
+ case PCRE_ERROR_BADUTF8_OFFSET:
+ preg_code = PHP_PCRE_BAD_UTF8_OFFSET_ERROR;
+ break;
+
default:
preg_code = PHP_PCRE_INTERNAL_ERROR;
break;
@@ -145,6 +150,7 @@ static PHP_MINIT_FUNCTION(pcre)
REGISTER_LONG_CONSTANT("PREG_BACKTRACK_LIMIT_ERROR", PHP_PCRE_BACKTRACK_LIMIT_ERROR, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("PREG_RECURSION_LIMIT_ERROR", PHP_PCRE_RECURSION_LIMIT_ERROR, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("PREG_BAD_UTF8_ERROR", PHP_PCRE_BAD_UTF8_ERROR, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PREG_BAD_UTF8_OFFSET_ERROR", PHP_PCRE_BAD_UTF8_OFFSET_ERROR, CONST_CS | CONST_PERSISTENT);
REGISTER_STRING_CONSTANT("PCRE_VERSION", (char *)pcre_version(), CONST_CS | CONST_PERSISTENT);
return SUCCESS;
@@ -174,6 +180,50 @@ static int pcre_clean_cache(void *data, void *arg TSRMLS_DC)
}
/* }}} */
+/* {{{ static make_subpats_table */
+static char **make_subpats_table(int num_subpats, pcre_cache_entry *pce TSRMLS_DC)
+{
+ pcre_extra *extra = pce->extra;
+ int name_cnt = 0, name_size, ni = 0;
+ int rc;
+ char *name_table;
+ unsigned short name_idx;
+ char **subpat_names = (char **)ecalloc(num_subpats, sizeof(char *));
+
+ rc = pcre_fullinfo(pce->re, extra, PCRE_INFO_NAMECOUNT, &name_cnt);
+ if (rc < 0) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Internal pcre_fullinfo() error %d", rc);
+ efree(subpat_names);
+ return NULL;
+ }
+ if (name_cnt > 0) {
+ int rc1, rc2;
+
+ rc1 = pcre_fullinfo(pce->re, extra, PCRE_INFO_NAMETABLE, &name_table);
+ rc2 = pcre_fullinfo(pce->re, extra, PCRE_INFO_NAMEENTRYSIZE, &name_size);
+ rc = rc2 ? rc2 : rc1;
+ if (rc < 0) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Internal pcre_fullinfo() error %d", rc);
+ efree(subpat_names);
+ return NULL;
+ }
+
+ while (ni++ < name_cnt) {
+ name_idx = 0xff * name_table[0] + name_table[1];
+ subpat_names[name_idx] = name_table + 2;
+ if (is_numeric_string(subpat_names[name_idx], strlen(subpat_names[name_idx]), NULL, NULL, 0) > 0) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Numeric named subpatterns are not allowed");
+ efree(subpat_names);
+ return NULL;
+ }
+ name_table += name_size;
+ }
+ }
+
+ return subpat_names;
+}
+/* }}} */
+
/* {{{ pcre_get_compiled_regex_cache
*/
PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(char *regex, int regex_len TSRMLS_DC)
@@ -484,7 +534,7 @@ PHPAPI void php_pcre_match_impl(pcre_cache_entry *pce, char *subject, int subjec
int g_notempty = 0; /* If the match should not be empty */
const char **stringlist; /* Holds list of subpatterns */
char *match; /* The current match */
- char **subpat_names = NULL;/* Array for named subpatterns */
+ char **subpat_names; /* Array for named subpatterns */
int i, rc;
int subpats_order; /* Order of subpattern matches */
int offset_capture; /* Capture match offsets: yes/no */
@@ -539,54 +589,19 @@ PHPAPI void php_pcre_match_impl(pcre_cache_entry *pce, char *subject, int subjec
}
num_subpats++;
size_offsets = num_subpats * 3;
- offsets = (int *)safe_emalloc(size_offsets, sizeof(int), 0);
/*
* Build a mapping from subpattern numbers to their names. We will always
* allocate the table, even though there may be no named subpatterns. This
* avoids somewhat more complicated logic in the inner loops.
*/
- subpat_names = (char **)safe_emalloc(num_subpats, sizeof(char *), 0);
- memset(subpat_names, 0, sizeof(char *) * num_subpats);
- {
- int name_cnt = 0, name_size, ni = 0;
- char *name_table;
- unsigned short name_idx;
-
- rc = pcre_fullinfo(pce->re, extra, PCRE_INFO_NAMECOUNT, &name_cnt);
- if (rc < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Internal pcre_fullinfo() error %d", rc);
- efree(offsets);
- efree(subpat_names);
- RETURN_FALSE;
- }
- if (name_cnt > 0) {
- int rc1, rc2;
-
- rc1 = pcre_fullinfo(pce->re, extra, PCRE_INFO_NAMETABLE, &name_table);
- rc2 = pcre_fullinfo(pce->re, extra, PCRE_INFO_NAMEENTRYSIZE, &name_size);
- rc = rc2 ? rc2 : rc1;
- if (rc < 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Internal pcre_fullinfo() error %d", rc);
- efree(offsets);
- efree(subpat_names);
- RETURN_FALSE;
- }
-
- while (ni++ < name_cnt) {
- name_idx = 0xff * name_table[0] + name_table[1];
- subpat_names[name_idx] = name_table + 2;
- if (is_numeric_string(subpat_names[name_idx], strlen(subpat_names[name_idx]), NULL, NULL, 0) > 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Numeric named subpatterns are not allowed");
- efree(offsets);
- efree(subpat_names);
- RETURN_FALSE;
- }
- name_table += name_size;
- }
- }
+ subpat_names = make_subpats_table(num_subpats, pce TSRMLS_CC);
+ if (!subpat_names) {
+ RETURN_FALSE;
}
+ offsets = (int *)safe_emalloc(size_offsets, sizeof(int), 0);
+
/* Allocate match sets array and initialize the values. */
if (global && subpats_order == PREG_PATTERN_ORDER) {
match_sets = (zval **)safe_emalloc(num_subpats, sizeof(zval *), 0);
@@ -606,6 +621,9 @@ PHPAPI void php_pcre_match_impl(pcre_cache_entry *pce, char *subject, int subjec
count = pcre_exec(pce->re, extra, subject, subject_len, start_offset,
exoptions|g_notempty, offsets, size_offsets);
+ /* the string was already proved to be valid UTF-8 */
+ exoptions |= PCRE_NO_UTF8_CHECK;
+
/* Check for too many substrings condition. */
if (count == 0) {
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Matched, but too many substrings");
@@ -794,7 +812,7 @@ static int preg_get_backref(char **str, int *backref)
/* {{{ preg_do_repl_func
*/
-static int preg_do_repl_func(zval *function, char *subject, int *offsets, int count, char **result TSRMLS_DC)
+static int preg_do_repl_func(zval *function, char *subject, int *offsets, char **subpat_names, int count, char **result TSRMLS_DC)
{
zval *retval_ptr; /* Function return value */
zval **args[1]; /* Argument to pass to function */
@@ -804,8 +822,12 @@ static int preg_do_repl_func(zval *function, char *subject, int *offsets, int co
MAKE_STD_ZVAL(subpats);
array_init(subpats);
- for (i = 0; i < count; i++)
+ for (i = 0; i < count; i++) {
+ if (subpat_names[i]) {
+ add_assoc_stringl(subpats, subpat_names[i], &subject[offsets[i<<1]] , offsets[(i<<1)+1] - offsets[i<<1], 1);
+ }
add_next_index_stringl(subpats, &subject[offsets[i<<1]], offsets[(i<<1)+1] - offsets[i<<1], 1);
+ }
args[0] = &subpats;
if (call_user_function_ex(EG(function_table), NULL, function, &retval_ptr, 1, args, 0, NULL TSRMLS_CC) == SUCCESS && retval_ptr) {
@@ -944,6 +966,8 @@ PHPAPI char *php_pcre_replace_impl(pcre_cache_entry *pce, char *subject, int sub
int exoptions = 0; /* Execution options */
int count = 0; /* Count of matched subpatterns */
int *offsets; /* Array of subpattern offsets */
+ char **subpat_names; /* Array for named subpatterns */
+ int num_subpats; /* Number of captured subpatterns */
int size_offsets; /* Size of the offsets array */
int new_len; /* Length of needed storage */
int alloc_len; /* Actual allocated length */
@@ -987,12 +1011,24 @@ PHPAPI char *php_pcre_replace_impl(pcre_cache_entry *pce, char *subject, int sub
}
/* Calculate the size of the offsets array, and allocate memory for it. */
- rc = pcre_fullinfo(pce->re, extra, PCRE_INFO_CAPTURECOUNT, &size_offsets);
+ rc = pcre_fullinfo(pce->re, extra, PCRE_INFO_CAPTURECOUNT, &num_subpats);
if (rc < 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Internal pcre_fullinfo() error %d", rc);
return NULL;
}
- size_offsets = (size_offsets + 1) * 3;
+ num_subpats++;
+ size_offsets = num_subpats * 3;
+
+ /*
+ * Build a mapping from subpattern numbers to their names. We will always
+ * allocate the table, even though there may be no named subpatterns. This
+ * avoids somewhat more complicated logic in the inner loops.
+ */
+ subpat_names = make_subpats_table(num_subpats, pce TSRMLS_CC);
+ if (!subpat_names) {
+ return NULL;
+ }
+
offsets = (int *)safe_emalloc(size_offsets, sizeof(int), 0);
alloc_len = 2 * subject_len + 1;
@@ -1009,6 +1045,9 @@ PHPAPI char *php_pcre_replace_impl(pcre_cache_entry *pce, char *subject, int sub
count = pcre_exec(pce->re, extra, subject, subject_len, start_offset,
exoptions|g_notempty, offsets, size_offsets);
+ /* the string was already proved to be valid UTF-8 */
+ exoptions |= PCRE_NO_UTF8_CHECK;
+
/* Check for too many substrings condition. */
if (count == 0) {
php_error_docref(NULL TSRMLS_CC,E_NOTICE, "Matched, but too many substrings");
@@ -1033,8 +1072,7 @@ PHPAPI char *php_pcre_replace_impl(pcre_cache_entry *pce, char *subject, int sub
new_len += eval_result_len;
} else if (is_callable_replace) {
/* Use custom function to get replacement string and its length. */
- eval_result_len = preg_do_repl_func(replace_val, subject, offsets,
- count, &eval_result TSRMLS_CC);
+ eval_result_len = preg_do_repl_func(replace_val, subject, offsets, subpat_names, count, &eval_result TSRMLS_CC);
new_len += eval_result_len;
} else { /* do regular substitution */
walk = replace;
@@ -1149,8 +1187,9 @@ PHPAPI char *php_pcre_replace_impl(pcre_cache_entry *pce, char *subject, int sub
/* Advance to the next piece. */
start_offset = offsets[1];
}
-
+
efree(offsets);
+ efree(subpat_names);
return result;
}
@@ -1446,6 +1485,9 @@ PHPAPI void php_pcre_split_impl(pcre_cache_entry *pce, char *subject, int subjec
subject_len, start_offset,
exoptions|g_notempty, offsets, size_offsets);
+ /* the string was already proved to be valid UTF-8 */
+ exoptions |= PCRE_NO_UTF8_CHECK;
+
/* Check for too many substrings condition. */
if (count == 0) {
php_error_docref(NULL TSRMLS_CC,E_NOTICE, "Matched, but too many substrings");
@@ -1501,7 +1543,7 @@ PHPAPI void php_pcre_split_impl(pcre_cache_entry *pce, char *subject, int subjec
if (re_bump == NULL) {
int dummy;
- if ((re_bump = pcre_get_compiled_regex("/./u", &extra_bump, &dummy TSRMLS_CC)) == NULL) {
+ if ((re_bump = pcre_get_compiled_regex("/./us", &extra_bump, &dummy TSRMLS_CC)) == NULL) {
RETURN_FALSE;
}
}
@@ -1704,13 +1746,17 @@ PHPAPI void php_pcre_grep_impl(pcre_cache_entry *pce, zval *input, zval *return
/* Go through the input array */
zend_hash_internal_pointer_reset(Z_ARRVAL_P(input));
- while(zend_hash_get_current_data(Z_ARRVAL_P(input), (void **)&entry) == SUCCESS) {
+ while (zend_hash_get_current_data(Z_ARRVAL_P(input), (void **)&entry) == SUCCESS) {
+ zval subject = **entry;
- convert_to_string_ex(entry);
+ if (Z_TYPE_PP(entry) != IS_STRING) {
+ zval_copy_ctor(&subject);
+ convert_to_string(&subject);
+ }
/* Perform the match */
- count = pcre_exec(pce->re, extra, Z_STRVAL_PP(entry),
- Z_STRLEN_PP(entry), 0,
+ count = pcre_exec(pce->re, extra, Z_STRVAL(subject),
+ Z_STRLEN(subject), 0,
0, offsets, size_offsets);
/* Check for too many substrings condition. */
@@ -1723,9 +1769,8 @@ PHPAPI void php_pcre_grep_impl(pcre_cache_entry *pce, zval *input, zval *return
}
/* If the entry fits our requirements */
- if ((count > 0 && !invert) ||
- (count == PCRE_ERROR_NOMATCH && invert)) {
- (*entry)->refcount++;
+ if ((count > 0 && !invert) || (count == PCRE_ERROR_NOMATCH && invert)) {
+ ZVAL_ADDREF(*entry);
/* Add to return array */
switch (zend_hash_get_current_key(Z_ARRVAL_P(input), &string_key, &num_key, 0))
@@ -1741,7 +1786,11 @@ PHPAPI void php_pcre_grep_impl(pcre_cache_entry *pce, zval *input, zval *return
break;
}
}
-
+
+ if (Z_TYPE_PP(entry) != IS_STRING) {
+ zval_dtor(&subject);
+ }
+
zend_hash_move_forward(Z_ARRVAL_P(input));
}
zend_hash_internal_pointer_reset(Z_ARRVAL_P(input));
diff --git a/ext/pcre/php_pcre.h b/ext/pcre/php_pcre.h
index 9fe3f541d..52959272c 100644
--- a/ext/pcre/php_pcre.h
+++ b/ext/pcre/php_pcre.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pcre.h,v 1.41.2.1.2.6 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: php_pcre.h,v 1.41.2.1.2.7 2008/12/31 11:17:41 sebastian Exp $ */
#ifndef PHP_PCRE_H
#define PHP_PCRE_H
diff --git a/ext/pcre/tests/bug37911.phpt b/ext/pcre/tests/bug37911.phpt
new file mode 100644
index 000000000..f7881191b
--- /dev/null
+++ b/ext/pcre/tests/bug37911.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Bug #37911 (preg_replace_callback ignores named groups)
+--FILE--
+<?php
+
+function callback($match)
+{
+ var_dump($match);
+ return $match[1].'/'.strlen($match['name']);
+}
+
+var_dump(preg_replace_callback('|(?P<name>blub)|', 'callback', 'bla blub blah'));
+
+var_dump(preg_match('|(?P<name>blub)|', 'bla blub blah', $m));
+var_dump($m);
+
+var_dump(preg_replace_callback('|(?P<1>blub)|', 'callback', 'bla blub blah'));
+
+?>
+--EXPECTF--
+array(3) {
+ [0]=>
+ string(4) "blub"
+ ["name"]=>
+ string(4) "blub"
+ [1]=>
+ string(4) "blub"
+}
+string(15) "bla blub/4 blah"
+int(1)
+array(3) {
+ [0]=>
+ string(4) "blub"
+ ["name"]=>
+ string(4) "blub"
+ [1]=>
+ string(4) "blub"
+}
+
+Warning: preg_replace_callback(): Numeric named subpatterns are not allowed in %sbug37911.php on line 14
+NULL
diff --git a/ext/pcre/tests/bug42737.phpt b/ext/pcre/tests/bug42737.phpt
new file mode 100644
index 000000000..8d9dd52b3
--- /dev/null
+++ b/ext/pcre/tests/bug42737.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Bug #42737 (preg_split('//u') triggers a E_NOTICE with newlines)
+--FILE--
+<?php
+
+$string = chr(13).chr(10);
+
+$array = preg_split('//u', $string, - 1, PREG_SPLIT_NO_EMPTY);
+
+var_dump(array_map('ord', $array));
+
+?>
+--EXPECT--
+array(2) {
+ [0]=>
+ int(13)
+ [1]=>
+ int(10)
+}
diff --git a/ext/pcre/tests/bug44925.phpt b/ext/pcre/tests/bug44925.phpt
new file mode 100644
index 000000000..f6e0db425
--- /dev/null
+++ b/ext/pcre/tests/bug44925.phpt
@@ -0,0 +1,107 @@
+--TEST--
+Bug #44925 (preg_grep() modifies input array)
+--FILE--
+<?php
+$str1 = 'a';
+$str2 = 'b';
+
+$array=Array("1",2,3,1.1,FALSE,NULL,Array(), $str1, &$str2);
+
+var_dump($array);
+
+var_dump(preg_grep('/do not match/',$array));
+
+$a = preg_grep('/./',$array);
+var_dump($a);
+
+$str1 = 'x';
+$str2 = 'y';
+
+var_dump($a); // check if array is still ok
+
+var_dump($array);
+
+?>
+--EXPECTF--
+array(9) {
+ [0]=>
+ string(1) "1"
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ float(1.1)
+ [4]=>
+ bool(false)
+ [5]=>
+ NULL
+ [6]=>
+ array(0) {
+ }
+ [7]=>
+ string(1) "a"
+ [8]=>
+ &string(1) "b"
+}
+
+Notice: Array to string conversion in %sbug44925.php on line 9
+array(0) {
+}
+
+Notice: Array to string conversion in %sbug44925.php on line 11
+array(7) {
+ [0]=>
+ string(1) "1"
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ float(1.1)
+ [6]=>
+ array(0) {
+ }
+ [7]=>
+ string(1) "a"
+ [8]=>
+ &string(1) "b"
+}
+array(7) {
+ [0]=>
+ string(1) "1"
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ float(1.1)
+ [6]=>
+ array(0) {
+ }
+ [7]=>
+ string(1) "a"
+ [8]=>
+ &string(1) "y"
+}
+array(9) {
+ [0]=>
+ string(1) "1"
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ float(1.1)
+ [4]=>
+ bool(false)
+ [5]=>
+ NULL
+ [6]=>
+ array(0) {
+ }
+ [7]=>
+ string(1) "a"
+ [8]=>
+ &string(1) "y"
+}
diff --git a/ext/pcre/tests/pcre.constants.phpt b/ext/pcre/tests/pcre.constants.phpt
new file mode 100644
index 000000000..0b103308e
--- /dev/null
+++ b/ext/pcre/tests/pcre.constants.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test for pre-defined pcre constants
+--FILE--
+<?php
+
+echo "PCRE constants test\n";
+
+echo "PREG_PATTERN_ORDER= ", PREG_PATTERN_ORDER, "\n";
+echo "PREG_OFFSET_CAPTURE= ", PREG_OFFSET_CAPTURE, "\n";
+echo "PREG_SPLIT_NO_EMPTY= ", PREG_SPLIT_NO_EMPTY, "\n";
+echo "PREG_SPLIT_DELIM_CAPTURE= ", PREG_SPLIT_DELIM_CAPTURE, "\n";
+echo "PREG_SPLIT_OFFSET_CAPTURE= ", PREG_SPLIT_OFFSET_CAPTURE, "\n";
+echo "PREG_GREP_INVERT= ", PREG_GREP_INVERT, "\n";
+echo "PREG_NO_ERROR= ", PREG_NO_ERROR, "\n";
+echo "PREG_INTERNAL_ERROR= ", PREG_INTERNAL_ERROR, "\n";
+echo "PREG_BACKTRACK_LIMIT_ERROR= ", PREG_BACKTRACK_LIMIT_ERROR, "\n";
+echo "PREG_RECURSION_LIMIT_ERROR= ", PREG_RECURSION_LIMIT_ERROR, "\n";
+echo "PREG_BAD_UTF8_ERROR= ", PREG_BAD_UTF8_ERROR, "\n";
+
+?>
+===Done===
+--EXPECT--
+PCRE constants test
+PREG_PATTERN_ORDER= 1
+PREG_OFFSET_CAPTURE= 256
+PREG_SPLIT_NO_EMPTY= 1
+PREG_SPLIT_DELIM_CAPTURE= 2
+PREG_SPLIT_OFFSET_CAPTURE= 4
+PREG_GREP_INVERT= 1
+PREG_NO_ERROR= 0
+PREG_INTERNAL_ERROR= 1
+PREG_BACKTRACK_LIMIT_ERROR= 2
+PREG_RECURSION_LIMIT_ERROR= 3
+PREG_BAD_UTF8_ERROR= 4
+===Done=== \ No newline at end of file
diff --git a/ext/pcre/tests/preg_last_error_error.phpt b/ext/pcre/tests/preg_last_error_error.phpt
new file mode 100644
index 000000000..c75e2f86c
--- /dev/null
+++ b/ext/pcre/tests/preg_last_error_error.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Test preg_grep() function : error conditions - wrong numbers of parameters
+--FILE--
+<?php
+
+/* Prototype : int preg_last_error ( void )
+ * Description: Returns the error code of the last PCRE regex execution
+ * Source code: ext/pcre/php_pcre.c
+ */
+
+/*
+ * Pass an incorrect number of arguments to preg_last_error() to test behaviour
+ */
+
+echo "*** Testing preg_last_error() : error conditions ***\n";
+
+// Test preg_last_error with one more than the expected number of arguments
+echo "\n-- Testing preg_last_error() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( preg_last_error($extra_arg) );
+?>
+===Done===
+--EXPECTF--
+*** Testing preg_last_error() : error conditions ***
+
+-- Testing preg_last_error() function with more than expected no. of arguments --
+
+Warning: preg_last_error() expects exactly 0 parameters, 1 given in %s on line %d
+NULL
+===Done=== \ No newline at end of file
diff --git a/ext/pcre/tests/preg_match_basic_002.phpt b/ext/pcre/tests/preg_match_basic_002.phpt
new file mode 100644
index 000000000..977a67ea1
--- /dev/null
+++ b/ext/pcre/tests/preg_match_basic_002.phpt
@@ -0,0 +1,23 @@
+--TEST--
+preg_match() single line match with multi-line input
+--FILE--
+<?php
+/* Prototype : int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags [, int $offset ]]] )
+ * Description: Perform a regular expression match
+ * Source code: ext/pcre/php_pcre.c
+ */
+
+$string = "My\nName\nIs\nStrange";
+preg_match("/M(.*)/", $string, $matches);
+
+var_dump($matches);
+?>
+===Done===
+--EXPECTF--
+array(2) {
+ [0]=>
+ string(2) "My"
+ [1]=>
+ string(1) "y"
+}
+===Done=== \ No newline at end of file
diff --git a/ext/pcre/tests/preg_match_variation1.phpt b/ext/pcre/tests/preg_match_variation1.phpt
new file mode 100644
index 000000000..a289ee48e
--- /dev/null
+++ b/ext/pcre/tests/preg_match_variation1.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Test preg_match() function : variation
+--FILE--
+<?php
+/*
+ * proto int preg_match(string pattern, string subject [, array subpatterns [, int flags [, int offset]]])
+ * Function is implemented in ext/pcre/php_pcre.c
+*/
+
+//test passing in the same variable where 1 is by value, the other is a different
+//type and by reference so should be updated to the new type.
+$string = "-1";
+preg_match('/[\-\+]?[0-9\.]*/', $string, $string);
+var_dump($string);
+?>
+===Done===
+--EXPECT--
+array(1) {
+ [0]=>
+ string(2) "-1"
+}
+===Done===
diff --git a/ext/pcre/tests/preg_replace_callback_error1.phpt b/ext/pcre/tests/preg_replace_callback_error1.phpt
new file mode 100644
index 000000000..364964baf
--- /dev/null
+++ b/ext/pcre/tests/preg_replace_callback_error1.phpt
@@ -0,0 +1,59 @@
+--TEST--
+Test preg_replace_callback() function : error
+--FILE--
+<?php
+/*
+* proto string preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, count]])
+* Function is implemented in ext/pcre/php_pcre.c
+*/
+error_reporting(E_ALL&~E_NOTICE);
+/*
+* Testing how preg_replace_callback reacts to being passed the wrong type of regex argument
+*/
+echo "*** Testing preg_replace_callback() : error conditions ***\n";
+$regex_array = array('abcdef', //Regex without delimiters
+'/[a-zA-Z]', //Regex without closing delimiter
+'[a-zA-Z]/', //Regex without opening delimiter
+'/[a-zA-Z]/F', array('[a-z]', //Array of Regexes
+'[A-Z]', '[0-9]'), '/[a-zA-Z]/'); //Regex string
+$replacement = array('zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine');
+function integer_word($matches) {
+ global $replacement;
+ return $replacement[$matches[0]];
+}
+$subject = 'number 1.';
+foreach($regex_array as $regex_value) {
+ print "\nArg value is $regex_value\n";
+ var_dump(preg_replace_callback($regex_value, 'integer_word', $subject));
+}
+echo "Done";
+?>
+--EXPECTF--
+*** Testing preg_replace_callback() : error conditions ***
+
+Arg value is abcdef
+
+Warning: preg_replace_callback(): Delimiter must not be alphanumeric or backslash in %s on line %d
+NULL
+
+Arg value is /[a-zA-Z]
+
+Warning: preg_replace_callback(): No ending delimiter '/' found in %s on line %d
+NULL
+
+Arg value is [a-zA-Z]/
+
+Warning: preg_replace_callback(): Unknown modifier '/' in %s on line %d
+NULL
+
+Arg value is /[a-zA-Z]/F
+
+Warning: preg_replace_callback(): Unknown modifier 'F' in %s on line %d
+NULL
+
+Arg value is Array
+string(9) "number 1."
+
+Arg value is /[a-zA-Z]/
+string(3) " 1."
+Done \ No newline at end of file
diff --git a/ext/pcre/upgrade-pcre.php b/ext/pcre/upgrade-pcre.php
index 43a98c94b..c128d603d 100644
--- a/ext/pcre/upgrade-pcre.php
+++ b/ext/pcre/upgrade-pcre.php
@@ -58,6 +58,7 @@ function recurse($path)
if (!is_file($newfile)) {
+ continue;
die("$newfile is not available any more\n");
}
diff --git a/ext/pdo/pdo.c b/ext/pdo/pdo.c
index 2a55bf9a8..cb7118aa5 100755
--- a/ext/pdo/pdo.c
+++ b/ext/pdo/pdo.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pdo.c,v 1.57.2.17.2.10 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: pdo.c,v 1.57.2.17.2.11 2008/12/31 11:17:41 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c
index 5d567741e..927d9fe18 100755
--- a/ext/pdo/pdo_dbh.c
+++ b/ext/pdo/pdo_dbh.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pdo_dbh.c,v 1.82.2.31.2.22 2008/03/03 21:14:33 iliaa Exp $ */
+/* $Id: pdo_dbh.c,v 1.82.2.31.2.25 2008/12/31 11:17:41 sebastian Exp $ */
/* The PDO Database Handle Class */
@@ -1210,8 +1210,7 @@ int pdo_hash_methods(pdo_dbh_t *dbh, int kind TSRMLS_DC)
if (!dbh || !dbh->methods || !dbh->methods->get_driver_methods) {
return 0;
}
- funcs = dbh->methods->get_driver_methods(dbh,
- PDO_DBH_DRIVER_METHOD_KIND_DBH TSRMLS_CC);
+ funcs = dbh->methods->get_driver_methods(dbh, kind TSRMLS_CC);
if (!funcs) {
return 0;
}
@@ -1291,9 +1290,7 @@ static union _zend_function *dbh_method_get(
if (zend_hash_find(dbh->cls_methods[PDO_DBH_DRIVER_METHOD_KIND_DBH],
lc_method_name, method_len+1, (void**)&fbc) == FAILURE) {
- if (std_object_handlers.get_method) {
- fbc = std_object_handlers.get_method(object_pp, lc_method_name, method_len TSRMLS_CC);
- }
+
if (!fbc) {
fbc = NULL;
}
@@ -1304,6 +1301,12 @@ static union _zend_function *dbh_method_get(
}
out:
+ if (!fbc) {
+ if (std_object_handlers.get_method) {
+ fbc = std_object_handlers.get_method(object_pp, lc_method_name, method_len TSRMLS_CC);
+ }
+ }
+
efree(lc_method_name);
return fbc;
}
diff --git a/ext/pdo/pdo_sql_parser.c b/ext/pdo/pdo_sql_parser.c
index 1913f0dc7..3d9effdf3 100644
--- a/ext/pdo/pdo_sql_parser.c
+++ b/ext/pdo/pdo_sql_parser.c
@@ -1,9 +1,9 @@
-/* Generated by re2c 0.11.0 on Mon Nov 26 16:10:28 2007 */
+/* Generated by re2c 0.13.6.dev on Thu Nov 13 21:23:12 2008 */
/*
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pdo_sql_parser.c,v 1.35.2.6.2.15 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: pdo_sql_parser.c,v 1.35.2.6.2.21 2008/12/31 11:17:41 sebastian Exp $ */
#include "php.h"
#include "php_pdo_driver.h"
@@ -52,9 +52,9 @@ static int scan(Scanner *s)
{
YYCTYPE yych;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
- switch(yych) {
+ switch (yych) {
case 0x00: goto yy11;
case '"': goto yy2;
case '\'': goto yy4;
@@ -63,16 +63,17 @@ static int scan(Scanner *s)
default: goto yy8;
}
yy2:
- yych = *++YYCURSOR;
- goto yy24;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych >= 0x01) goto yy26;
yy3:
{ SKIP_ONE(PDO_PARSER_TEXT); }
yy4:
- yych = *++YYCURSOR;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 0x00) goto yy3;
goto yy20;
yy5:
yych = *++YYCURSOR;
- switch(yych) {
+ switch (yych) {
case '0':
case '1':
case '2':
@@ -142,7 +143,7 @@ yy5:
}
yy6:
++YYCURSOR;
- switch((yych = *YYCURSOR)) {
+ switch ((yych = *YYCURSOR)) {
case ':':
case '?': goto yy13;
default: goto yy7;
@@ -151,9 +152,9 @@ yy7:
{ RET(PDO_PARSER_BIND_POS); }
yy8:
++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
- switch(yych) {
+ switch (yych) {
case 0x00:
case '"':
case '\'':
@@ -168,9 +169,9 @@ yy11:
{ RET(PDO_PARSER_EOI); }
yy13:
++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
- switch(yych) {
+ switch (yych) {
case ':':
case '?': goto yy13;
default: goto yy15;
@@ -179,9 +180,9 @@ yy15:
{ RET(PDO_PARSER_TEXT); }
yy16:
++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
- switch(yych) {
+ switch (yych) {
case '0':
case '1':
case '2':
@@ -251,26 +252,45 @@ yy18:
{ RET(PDO_PARSER_BIND); }
yy19:
++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
yy20:
- switch(yych) {
- case '\'': goto yy21;
+ switch (yych) {
+ case 0x00: goto yy21;
+ case '\'': goto yy23;
+ case '\\': goto yy22;
default: goto yy19;
}
yy21:
+ YYCURSOR = YYMARKER;
+ goto yy3;
+yy22:
++YYCURSOR;
- { RET(PDO_PARSER_TEXT); }
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yych <= 0x00) goto yy21;
+ goto yy19;
yy23:
++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
+ { RET(PDO_PARSER_TEXT); }
+yy25:
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
-yy24:
- switch(yych) {
- case '"': goto yy25;
- default: goto yy23;
+yy26:
+ switch (yych) {
+ case 0x00: goto yy21;
+ case '"': goto yy28;
+ case '\\': goto yy27;
+ default: goto yy25;
}
-yy25:
+yy27:
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yych <= 0x00) goto yy21;
+ goto yy25;
+yy28:
++YYCURSOR;
{ RET(PDO_PARSER_TEXT); }
}
@@ -510,9 +530,9 @@ rewrite:
} else if (query_type == PDO_PLACEHOLDER_POSITIONAL) {
/* rewrite ? to :pdoX */
- char idxbuf[32];
+ char *name, *idxbuf;
const char *tmpl = stmt->named_rewrite_template ? stmt->named_rewrite_template : ":pdo%d";
- char *name;
+ int bind_no = 1;
newbuffer_len = inquery_len;
@@ -528,21 +548,19 @@ rewrite:
/* check if bound parameter is already available */
if (!strcmp(name, "?") || zend_hash_find(stmt->bound_param_map, name, plc->len + 1, (void**) &p) == FAILURE) {
- snprintf(idxbuf, sizeof(idxbuf), tmpl, plc->bindno + 1);
+ spprintf(&idxbuf, 0, tmpl, bind_no++);
} else {
- memset(idxbuf, 0, sizeof(idxbuf));
- memcpy(idxbuf, p, sizeof(idxbuf));
+ idxbuf = estrdup(p);
skip_map = 1;
}
- plc->quoted = estrdup(idxbuf);
+ plc->quoted = idxbuf;
plc->qlen = strlen(plc->quoted);
plc->freeq = 1;
newbuffer_len += plc->qlen;
if (!skip_map && stmt->named_rewrite_template) {
/* create a mapping */
-
zend_hash_update(stmt->bound_param_map, name, plc->len + 1, idxbuf, plc->qlen + 1, NULL);
}
diff --git a/ext/pdo/pdo_sql_parser.c.orig b/ext/pdo/pdo_sql_parser.c.orig
index d507f7d9c..8ccf28c6f 100644
--- a/ext/pdo/pdo_sql_parser.c.orig
+++ b/ext/pdo/pdo_sql_parser.c.orig
@@ -1,10 +1,10 @@
-/* Generated by re2c 0.11.0 on Mon Nov 26 16:10:28 2007 */
+/* Generated by re2c 0.13.6.dev on Thu Nov 13 21:23:12 2008 */
#line 1 "ext/pdo/pdo_sql_parser.re"
/*
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pdo_sql_parser.c,v 1.35.2.6.2.15 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: pdo_sql_parser.c,v 1.35.2.6.2.21 2008/12/31 11:17:41 sebastian Exp $ */
#include "php.h"
#include "php_pdo_driver.h"
@@ -55,9 +55,9 @@ static int scan(Scanner *s)
{
YYCTYPE yych;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
- switch(yych) {
+ switch (yych) {
case 0x00: goto yy11;
case '"': goto yy2;
case '\'': goto yy4;
@@ -66,18 +66,19 @@ static int scan(Scanner *s)
default: goto yy8;
}
yy2:
- yych = *++YYCURSOR;
- goto yy24;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych >= 0x01) goto yy26;
yy3:
#line 63 "ext/pdo/pdo_sql_parser.re"
{ SKIP_ONE(PDO_PARSER_TEXT); }
#line 75 "ext/pdo/pdo_sql_parser.c"
yy4:
- yych = *++YYCURSOR;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych <= 0x00) goto yy3;
goto yy20;
yy5:
yych = *++YYCURSOR;
- switch(yych) {
+ switch (yych) {
case '0':
case '1':
case '2':
@@ -147,7 +148,7 @@ yy5:
}
yy6:
++YYCURSOR;
- switch((yych = *YYCURSOR)) {
+ switch ((yych = *YYCURSOR)) {
case ':':
case '?': goto yy13;
default: goto yy7;
@@ -155,12 +156,12 @@ yy6:
yy7:
#line 62 "ext/pdo/pdo_sql_parser.re"
{ RET(PDO_PARSER_BIND_POS); }
-#line 159 "ext/pdo/pdo_sql_parser.c"
+#line 160 "ext/pdo/pdo_sql_parser.c"
yy8:
++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
- switch(yych) {
+ switch (yych) {
case 0x00:
case '"':
case '\'':
@@ -171,17 +172,17 @@ yy8:
yy10:
#line 64 "ext/pdo/pdo_sql_parser.re"
{ RET(PDO_PARSER_TEXT); }
-#line 175 "ext/pdo/pdo_sql_parser.c"
+#line 176 "ext/pdo/pdo_sql_parser.c"
yy11:
++YYCURSOR;
#line 65 "ext/pdo/pdo_sql_parser.re"
{ RET(PDO_PARSER_EOI); }
-#line 180 "ext/pdo/pdo_sql_parser.c"
+#line 181 "ext/pdo/pdo_sql_parser.c"
yy13:
++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
- switch(yych) {
+ switch (yych) {
case ':':
case '?': goto yy13;
default: goto yy15;
@@ -189,12 +190,12 @@ yy13:
yy15:
#line 60 "ext/pdo/pdo_sql_parser.re"
{ RET(PDO_PARSER_TEXT); }
-#line 193 "ext/pdo/pdo_sql_parser.c"
+#line 194 "ext/pdo/pdo_sql_parser.c"
yy16:
++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
- switch(yych) {
+ switch (yych) {
case '0':
case '1':
case '2':
@@ -263,35 +264,54 @@ yy16:
yy18:
#line 61 "ext/pdo/pdo_sql_parser.re"
{ RET(PDO_PARSER_BIND); }
-#line 267 "ext/pdo/pdo_sql_parser.c"
+#line 268 "ext/pdo/pdo_sql_parser.c"
yy19:
++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
yy20:
- switch(yych) {
- case '\'': goto yy21;
+ switch (yych) {
+ case 0x00: goto yy21;
+ case '\'': goto yy23;
+ case '\\': goto yy22;
default: goto yy19;
}
yy21:
+ YYCURSOR = YYMARKER;
+ goto yy3;
+yy22:
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yych <= 0x00) goto yy21;
+ goto yy19;
+yy23:
++YYCURSOR;
#line 59 "ext/pdo/pdo_sql_parser.re"
{ RET(PDO_PARSER_TEXT); }
-#line 281 "ext/pdo/pdo_sql_parser.c"
-yy23:
+#line 293 "ext/pdo/pdo_sql_parser.c"
+yy25:
++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
-yy24:
- switch(yych) {
- case '"': goto yy25;
- default: goto yy23;
+yy26:
+ switch (yych) {
+ case 0x00: goto yy21;
+ case '"': goto yy28;
+ case '\\': goto yy27;
+ default: goto yy25;
}
-yy25:
+yy27:
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yych <= 0x00) goto yy21;
+ goto yy25;
+yy28:
++YYCURSOR;
#line 58 "ext/pdo/pdo_sql_parser.re"
{ RET(PDO_PARSER_TEXT); }
-#line 295 "ext/pdo/pdo_sql_parser.c"
+#line 315 "ext/pdo/pdo_sql_parser.c"
}
#line 66 "ext/pdo/pdo_sql_parser.re"
@@ -530,9 +550,9 @@ rewrite:
} else if (query_type == PDO_PLACEHOLDER_POSITIONAL) {
/* rewrite ? to :pdoX */
- char idxbuf[32];
+ char *name, *idxbuf;
const char *tmpl = stmt->named_rewrite_template ? stmt->named_rewrite_template : ":pdo%d";
- char *name;
+ int bind_no = 1;
newbuffer_len = inquery_len;
@@ -548,21 +568,19 @@ rewrite:
/* check if bound parameter is already available */
if (!strcmp(name, "?") || zend_hash_find(stmt->bound_param_map, name, plc->len + 1, (void**) &p) == FAILURE) {
- snprintf(idxbuf, sizeof(idxbuf), tmpl, plc->bindno + 1);
+ spprintf(&idxbuf, 0, tmpl, bind_no++);
} else {
- memset(idxbuf, 0, sizeof(idxbuf));
- memcpy(idxbuf, p, sizeof(idxbuf));
+ idxbuf = estrdup(p);
skip_map = 1;
}
- plc->quoted = estrdup(idxbuf);
+ plc->quoted = idxbuf;
plc->qlen = strlen(plc->quoted);
plc->freeq = 1;
newbuffer_len += plc->qlen;
if (!skip_map && stmt->named_rewrite_template) {
/* create a mapping */
-
zend_hash_update(stmt->bound_param_map, name, plc->len + 1, idxbuf, plc->qlen + 1, NULL);
}
diff --git a/ext/pdo/pdo_sql_parser.re b/ext/pdo/pdo_sql_parser.re
index 3b89d14d0..3199937a1 100644
--- a/ext/pdo/pdo_sql_parser.re
+++ b/ext/pdo/pdo_sql_parser.re
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pdo_sql_parser.re,v 1.28.2.4.2.12 2007/12/31 07:17:40 sebastian Exp $ */
+/* $Id: pdo_sql_parser.re,v 1.28.2.4.2.18 2008/12/31 11:16:23 sebastian Exp $ */
#include "php.h"
#include "php_pdo_driver.h"
@@ -50,15 +50,15 @@ static int scan(Scanner *s)
QUESTION = [?];
SPECIALS = [:?"'];
MULTICHAR = [:?];
- EOF = [\000];
+ EOF = [\000];
ANYNOEOF = [\001-\377];
*/
/*!re2c
- (["] ([^"])* ["]) { RET(PDO_PARSER_TEXT); }
- (['] ([^'])* [']) { RET(PDO_PARSER_TEXT); }
+ (["](([\\]ANYNOEOF)|ANYNOEOF\["\\])*["]) { RET(PDO_PARSER_TEXT); }
+ (['](([\\]ANYNOEOF)|ANYNOEOF\['\\])*[']) { RET(PDO_PARSER_TEXT); }
MULTICHAR{2,} { RET(PDO_PARSER_TEXT); }
- BINDCHR { RET(PDO_PARSER_BIND); }
+ BINDCHR { RET(PDO_PARSER_BIND); }
QUESTION { RET(PDO_PARSER_BIND_POS); }
SPECIALS { SKIP_ONE(PDO_PARSER_TEXT); }
(ANYNOEOF\SPECIALS)+ { RET(PDO_PARSER_TEXT); }
@@ -299,9 +299,9 @@ rewrite:
} else if (query_type == PDO_PLACEHOLDER_POSITIONAL) {
/* rewrite ? to :pdoX */
- char idxbuf[32];
+ char *name, *idxbuf;
const char *tmpl = stmt->named_rewrite_template ? stmt->named_rewrite_template : ":pdo%d";
- char *name;
+ int bind_no = 1;
newbuffer_len = inquery_len;
@@ -317,21 +317,19 @@ rewrite:
/* check if bound parameter is already available */
if (!strcmp(name, "?") || zend_hash_find(stmt->bound_param_map, name, plc->len + 1, (void**) &p) == FAILURE) {
- snprintf(idxbuf, sizeof(idxbuf), tmpl, plc->bindno + 1);
+ spprintf(&idxbuf, 0, tmpl, bind_no++);
} else {
- memset(idxbuf, 0, sizeof(idxbuf));
- memcpy(idxbuf, p, sizeof(idxbuf));
+ idxbuf = estrdup(p);
skip_map = 1;
}
- plc->quoted = estrdup(idxbuf);
+ plc->quoted = idxbuf;
plc->qlen = strlen(plc->quoted);
plc->freeq = 1;
newbuffer_len += plc->qlen;
if (!skip_map && stmt->named_rewrite_template) {
/* create a mapping */
-
zend_hash_update(stmt->bound_param_map, name, plc->len + 1, idxbuf, plc->qlen + 1, NULL);
}
diff --git a/ext/pdo/pdo_sqlstate.c b/ext/pdo/pdo_sqlstate.c
index 181415459..fa998a9bf 100644
--- a/ext/pdo/pdo_sqlstate.c
+++ b/ext/pdo/pdo_sqlstate.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pdo_sqlstate.c,v 1.7.2.1.2.2 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: pdo_sqlstate.c,v 1.7.2.1.2.3 2008/12/31 11:17:41 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c
index 2e1621672..1b6ff263a 100755
--- a/ext/pdo/pdo_stmt.c
+++ b/ext/pdo/pdo_stmt.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pdo_stmt.c,v 1.118.2.38.2.34 2008/02/26 00:14:04 iliaa Exp $ */
+/* $Id: pdo_stmt.c,v 1.118.2.38.2.46 2008/12/31 11:17:41 sebastian Exp $ */
/* The PDO Statement Handle Class */
@@ -38,31 +38,44 @@
#include "php_memory_streams.h"
/* {{{ arginfo */
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_execute, 0, 0, 0)
ZEND_ARG_INFO(0, bound_input_params) /* array */
ZEND_END_ARG_INFO()
+
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_fetch, 0, 0, 0)
ZEND_ARG_INFO(0, how)
ZEND_ARG_INFO(0, orientation)
ZEND_ARG_INFO(0, offset)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_fetchobject, 0, 0, 1)
+
+static
+ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_fetchobject, 0, 0, 0)
ZEND_ARG_INFO(0, class_name)
ZEND_ARG_INFO(0, ctor_args) /* array */
ZEND_END_ARG_INFO()
+
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_fetchcolumn, 0, 0, 0)
ZEND_ARG_INFO(0, column_number)
ZEND_END_ARG_INFO()
+
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_fetchall, 0, 0, 0)
ZEND_ARG_INFO(0, how)
ZEND_ARG_INFO(0, class_name)
ZEND_ARG_INFO(0, ctor_args) /* array */
ZEND_END_ARG_INFO()
+
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_bindvalue, 0, 0, 2)
ZEND_ARG_INFO(0, paramno)
ZEND_ARG_INFO(0, param)
ZEND_ARG_INFO(0, type)
ZEND_END_ARG_INFO()
+
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_bindparam, 0, 0, 2)
ZEND_ARG_INFO(0, paramno)
ZEND_ARG_INFO(1, param)
@@ -70,6 +83,8 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_bindparam, 0, 0, 2)
ZEND_ARG_INFO(0, maxlen)
ZEND_ARG_INFO(0, driverdata)
ZEND_END_ARG_INFO()
+
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_bindcolumn, 0, 0, 2)
ZEND_ARG_INFO(0, column)
ZEND_ARG_INFO(1, param)
@@ -77,16 +92,24 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_bindcolumn, 0, 0, 2)
ZEND_ARG_INFO(0, maxlen)
ZEND_ARG_INFO(0, driverdata)
ZEND_END_ARG_INFO()
+
+static
ZEND_BEGIN_ARG_INFO(arginfo_pdostatement_setattribute, 0)
ZEND_ARG_INFO(0, attribute)
ZEND_ARG_INFO(0, value)
ZEND_END_ARG_INFO()
+
+static
ZEND_BEGIN_ARG_INFO(arginfo_pdostatement_getattribute, 0)
ZEND_ARG_INFO(0, attribute)
ZEND_END_ARG_INFO()
+
+static
ZEND_BEGIN_ARG_INFO(arginfo_pdostatement_getcolumnmeta, 0)
ZEND_ARG_INFO(0, column)
ZEND_END_ARG_INFO()
+
+static
ZEND_BEGIN_ARG_INFO_EX(arginfo_pdostatement_setfetchmode, 0, 0, 1)
ZEND_ARG_INFO(0, mode)
ZEND_ARG_INFO(0, params)
@@ -564,6 +587,8 @@ static inline void fetch_value(pdo_stmt_t *stmt, zval *dest, int colno, int *typ
case PDO_PARAM_LOB:
if (value == NULL) {
ZVAL_NULL(dest);
+ } else if (value[0] == '\0') {
+ ZVAL_EMPTY_STRING(dest);
} else if (value_len == 0) {
if (stmt->dbh->stringify || new_type == PDO_PARAM_STR) {
char *buf = NULL;
@@ -891,7 +916,7 @@ static int do_fetch_opt_finish(pdo_stmt_t *stmt, int free_ctor_agrs TSRMLS_DC) /
static int do_fetch(pdo_stmt_t *stmt, int do_bind, zval *return_value,
enum pdo_fetch_type how, enum pdo_fetch_orientation ori, long offset, zval *return_all TSRMLS_DC) /* {{{ */
{
- int flags = how & PDO_FETCH_FLAGS, idx, old_arg_count = 0;
+ int flags, idx, old_arg_count = 0;
zend_class_entry *ce = NULL, *old_ce = NULL;
zval grp_val, *grp, **pgrp, *retval, *old_ctor_args = NULL;
int colno;
@@ -899,6 +924,7 @@ static int do_fetch(pdo_stmt_t *stmt, int do_bind, zval *return_value,
if (how == PDO_FETCH_USE_DEFAULT) {
how = stmt->default_fetch_type;
}
+ flags = how & PDO_FETCH_FLAGS;
how = how & ~PDO_FETCH_FLAGS;
if (!do_fetch_common(stmt, ori, offset, do_bind TSRMLS_CC)) {
@@ -1365,7 +1391,7 @@ static PHP_METHOD(PDOStatement, fetch)
}
/* }}} */
-/* {{{ proto mixed PDOStatement::fetchObject(string class_name [, NULL|array ctor_args])
+/* {{{ proto mixed PDOStatement::fetchObject([string class_name [, NULL|array ctor_args]])
Fetches the next row and returns it as an object. */
static PHP_METHOD(PDOStatement, fetchObject)
{
@@ -1473,7 +1499,7 @@ static PHP_METHOD(PDOStatement, fetchAll)
zval *arg2;
zend_class_entry *old_ce;
zval *old_ctor_args, *ctor_args = NULL;
- int error = 0, old_arg_count;
+ int error = 0, flags, old_arg_count;
PHP_STMT_GET_OBJ;
if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|lzz", &how, &arg2, &ctor_args)) {
@@ -1565,7 +1591,10 @@ static PHP_METHOD(PDOStatement, fetchAll)
}
}
+ flags = how & PDO_FETCH_FLAGS;
+
if ((how & ~PDO_FETCH_FLAGS) == PDO_FETCH_USE_DEFAULT) {
+ flags |= stmt->default_fetch_type & PDO_FETCH_FLAGS;
how |= stmt->default_fetch_type & ~PDO_FETCH_FLAGS;
}
@@ -1580,7 +1609,7 @@ static PHP_METHOD(PDOStatement, fetchAll)
} else {
return_all = 0;
}
- if (!do_fetch(stmt, TRUE, data, how, PDO_FETCH_ORI_NEXT, 0, return_all TSRMLS_CC)) {
+ if (!do_fetch(stmt, TRUE, data, how | flags, PDO_FETCH_ORI_NEXT, 0, return_all TSRMLS_CC)) {
FREE_ZVAL(data);
error = 2;
}
@@ -1589,15 +1618,15 @@ static PHP_METHOD(PDOStatement, fetchAll)
if ((how & PDO_FETCH_GROUP)) {
do {
MAKE_STD_ZVAL(data);
- } while (do_fetch(stmt, TRUE, data, how, PDO_FETCH_ORI_NEXT, 0, return_all TSRMLS_CC));
+ } while (do_fetch(stmt, TRUE, data, how | flags, PDO_FETCH_ORI_NEXT, 0, return_all TSRMLS_CC));
} else if (how == PDO_FETCH_KEY_PAIR || (how == PDO_FETCH_USE_DEFAULT && stmt->default_fetch_type == PDO_FETCH_KEY_PAIR)) {
- while (do_fetch(stmt, TRUE, data, how, PDO_FETCH_ORI_NEXT, 0, return_all TSRMLS_CC));
+ while (do_fetch(stmt, TRUE, data, how | flags, PDO_FETCH_ORI_NEXT, 0, return_all TSRMLS_CC));
} else {
array_init(return_value);
do {
add_next_index_zval(return_value, data);
MAKE_STD_ZVAL(data);
- } while (do_fetch(stmt, TRUE, data, how, PDO_FETCH_ORI_NEXT, 0, 0 TSRMLS_CC));
+ } while (do_fetch(stmt, TRUE, data, how | flags, PDO_FETCH_ORI_NEXT, 0, 0 TSRMLS_CC));
}
FREE_ZVAL(data);
}
@@ -1893,7 +1922,7 @@ static PHP_METHOD(PDOStatement, getColumnMeta)
int pdo_stmt_setup_fetch_mode(INTERNAL_FUNCTION_PARAMETERS, pdo_stmt_t *stmt, int skip)
{
long mode = PDO_FETCH_BOTH;
- int argc = ZEND_NUM_ARGS() - skip;
+ int flags, argc = ZEND_NUM_ARGS() - skip;
zval ***args;
zend_class_entry **cep;
@@ -1926,6 +1955,7 @@ fail_out:
convert_to_long_ex(args[skip]);
mode = Z_LVAL_PP(args[skip]);
+ flags = mode & PDO_FETCH_FLAGS;
if (!pdo_stmt_verify_mode(stmt, mode, 0 TSRMLS_CC)) {
efree(args);
@@ -1953,21 +1983,30 @@ fail_out:
break;
case PDO_FETCH_CLASS:
- if (argc < 2 || argc > 3) {
- goto fail_out;
- }
- convert_to_string_ex(args[skip+1]);
-
- if (FAILURE == zend_lookup_class(Z_STRVAL_PP(args[skip+1]),
- Z_STRLEN_PP(args[skip+1]), &cep TSRMLS_CC)) {
- goto fail_out;
- }
+ /* Gets its class name from 1st column */
+ if ((flags & PDO_FETCH_CLASSTYPE) == PDO_FETCH_CLASSTYPE) {
+ if (argc != 1) {
+ goto fail_out;
+ }
+ stmt->fetch.cls.ce = NULL;
+ } else {
+ if (argc < 2 || argc > 3) {
+ goto fail_out;
+ }
+ convert_to_string_ex(args[skip+1]);
- if (!cep || !*cep) {
- goto fail_out;
+ if (FAILURE == zend_lookup_class(Z_STRVAL_PP(args[skip+1]),
+ Z_STRLEN_PP(args[skip+1]), &cep TSRMLS_CC)) {
+ goto fail_out;
+ }
+
+ if (!cep || !*cep) {
+ goto fail_out;
+ }
+
+ stmt->fetch.cls.ce = *cep;
}
-
- stmt->fetch.cls.ce = *cep;
+
stmt->fetch.cls.ctor_args = NULL;
#ifdef ilia_0 /* we'll only need this when we have persistent statements, if ever */
if (stmt->dbh->is_persistent) {
@@ -2139,17 +2178,18 @@ static PHP_METHOD(PDOStatement, debugDumpParams)
uint len;
ulong num;
- if (zend_hash_get_current_key_ex(stmt->bound_params, &str, &len, &num, 0, &pos) == HASH_KEY_IS_STRING) {
- php_stream_printf(out TSRMLS_CC, "Key: Position #%d:\n", num);
+ if (zend_hash_get_current_key_ex(stmt->bound_params, &str, &len, &num, 0, &pos) == HASH_KEY_IS_LONG) {
+ php_stream_printf(out TSRMLS_CC, "Key: Position #%ld:\n", num);
} else {
php_stream_printf(out TSRMLS_CC, "Key: Name: [%d] %.*s\n", len, len, str);
}
- php_stream_printf(out TSRMLS_CC, "paramno=%d\nname=[%d] %.*s\nis_param=%d\nparam_type=%d\n",
- param->paramno, param->namelen, param->namelen, param->name,
+ php_stream_printf(out TSRMLS_CC, "paramno=%d\nname=[%d] \"%.*s\"\nis_param=%d\nparam_type=%d\n",
+ param->paramno, param->namelen, param->namelen, param->name ? param->name : "",
param->is_param,
param->param_type);
+ zend_hash_move_forward_ex(stmt->bound_params, &pos);
}
}
@@ -2557,6 +2597,7 @@ static zval *row_prop_or_dim_read(zval *object, zval *member, int type TSRMLS_DC
int colno = -1;
MAKE_STD_ZVAL(return_value);
+ RETVAL_NULL();
if (Z_TYPE_P(member) == IS_LONG) {
if (Z_LVAL_P(member) >= 0 && Z_LVAL_P(member) < stmt->column_count) {
@@ -2569,9 +2610,15 @@ static zval *row_prop_or_dim_read(zval *object, zval *member, int type TSRMLS_DC
for (colno = 0; colno < stmt->column_count; colno++) {
if (strcmp(stmt->columns[colno].name, Z_STRVAL_P(member)) == 0) {
fetch_value(stmt, return_value, colno, NULL TSRMLS_CC);
- break;
+ return_value->refcount = 0;
+ return_value->is_ref = 0;
+ return return_value;
}
}
+ if (strcmp(Z_STRVAL_P(member), "queryString") == 0) {
+ zval_ptr_dtor(&return_value);
+ return std_object_handlers.read_property(object, member, IS_STRING TSRMLS_CC);
+ }
}
return_value->refcount = 0;
@@ -2711,10 +2758,12 @@ zend_object_handlers pdo_row_object_handlers = {
void pdo_row_free_storage(pdo_stmt_t *stmt TSRMLS_DC)
{
- ZVAL_NULL(&stmt->lazy_object_ref);
-
- if (--stmt->refcount == 0) {
- free_statement(stmt TSRMLS_CC);
+ if (stmt) {
+ ZVAL_NULL(&stmt->lazy_object_ref);
+
+ if (--stmt->refcount == 0) {
+ free_statement(stmt TSRMLS_CC);
+ }
}
}
diff --git a/ext/pdo/php_pdo.h b/ext/pdo/php_pdo.h
index 4812a6d48..b749dd61a 100755
--- a/ext/pdo/php_pdo.h
+++ b/ext/pdo/php_pdo.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pdo.h,v 1.7.2.5.2.4 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: php_pdo.h,v 1.7.2.5.2.5 2008/12/31 11:17:41 sebastian Exp $ */
#ifndef PHP_PDO_H
#define PHP_PDO_H
diff --git a/ext/pdo/php_pdo_driver.h b/ext/pdo/php_pdo_driver.h
index eec8f2137..324c630a9 100755
--- a/ext/pdo/php_pdo_driver.h
+++ b/ext/pdo/php_pdo_driver.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pdo_driver.h,v 1.66.2.11.2.8 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: php_pdo_driver.h,v 1.66.2.11.2.9 2008/12/31 11:17:41 sebastian Exp $ */
#ifndef PHP_PDO_DRIVER_H
#define PHP_PDO_DRIVER_H
diff --git a/ext/pdo/php_pdo_int.h b/ext/pdo/php_pdo_int.h
index dd2218b3d..8d3967a1d 100755
--- a/ext/pdo/php_pdo_int.h
+++ b/ext/pdo/php_pdo_int.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pdo_int.h,v 1.17.2.6.2.3 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: php_pdo_int.h,v 1.17.2.6.2.4 2008/12/31 11:17:41 sebastian Exp $ */
/* Stuff private to the PDO extension and not for consumption by PDO drivers
* */
diff --git a/ext/pdo/tests/bug_44159.phpt b/ext/pdo/tests/bug_44159.phpt
index db4da4013..6c7415ae0 100644
--- a/ext/pdo/tests/bug_44159.phpt
+++ b/ext/pdo/tests/bug_44159.phpt
@@ -7,7 +7,8 @@ if (!extension_loaded('pdo_sqlite')) die('skip no pdo_sqlite');
--FILE--
<?php
-$pdo = new PDO("sqlite:/tmp/foo.db");
+$dir = dirname(__FILE__);
+$pdo = new PDO("sqlite:$dir/foo.db");
$attrs = array(PDO::ATTR_STATEMENT_CLASS, PDO::ATTR_STRINGIFY_FETCHES, PDO::NULL_TO_STRING);
@@ -17,6 +18,8 @@ foreach ($attrs as $attr) {
var_dump($pdo->setAttribute($attr, 'nonsense'));
}
+@unlink($dir."/foo.db");
+
?>
--EXPECTF--
Warning: PDO::setAttribute(): SQLSTATE[HY000]: General error: PDO::ATTR_STATEMENT_CLASS requires format array(classname, array(ctor_args)); the classname must be a string specifying an existing class in %s on line %d
diff --git a/ext/pdo/tests/pdo_033.phpt b/ext/pdo/tests/pdo_033.phpt
index 9739c0e0e..6f78be6ed 100644
--- a/ext/pdo/tests/pdo_033.phpt
+++ b/ext/pdo/tests/pdo_033.phpt
@@ -18,7 +18,11 @@ $unquoted = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a
$quoted = $db->quote($unquoted);
-$db->query("CREATE TABLE test (t char(100))");
+$len = strlen($unquoted);
+
+@$db->exec("DROP TABLE test");
+
+$db->query("CREATE TABLE test (t char($len))");
$db->query("INSERT INTO test (t) VALUES($quoted)");
$stmt = $db->prepare('SELECT * from test');
@@ -26,6 +30,7 @@ $stmt->execute();
print_r($stmt->fetchAll(PDO::FETCH_ASSOC));
+$db->exec("DROP TABLE test");
?>
--EXPECT--
diff --git a/ext/pdo/tests/pdorow.phpt b/ext/pdo/tests/pdorow.phpt
new file mode 100644
index 000000000..b33dd155d
--- /dev/null
+++ b/ext/pdo/tests/pdorow.phpt
@@ -0,0 +1,10 @@
+--TEST--
+Trying instantiate a PDORow object manually
+--FILE--
+<?php
+
+new PDORow;
+
+?>
+--EXPECTF--
+Fatal error: PDORow::__construct(): You should not create a PDOStatement manually in %s on line %d
diff --git a/ext/pdo_dblib/config.m4 b/ext/pdo_dblib/config.m4
index 1141f64fa..431be826b 100644
--- a/ext/pdo_dblib/config.m4
+++ b/ext/pdo_dblib/config.m4
@@ -1,5 +1,5 @@
dnl
-dnl $Id: config.m4,v 1.2.2.2.2.1 2007/07/03 17:25:34 sniper Exp $
+dnl $Id: config.m4,v 1.2.2.2.2.2 2008/10/04 13:19:22 felipe Exp $
dnl
if test "$PHP_PDO" != "no"; then
@@ -13,11 +13,11 @@ if test "$PHP_PDO_DBLIB" != "no"; then
if test "$PHP_PDO_DBLIB" = "yes"; then
for i in /usr/local /usr; do
- if test -f $i/include/tds.h; then
+ if test -f $i/include/sybdb.h; then
PDO_FREETDS_INSTALLATION_DIR=$i
PDO_FREETDS_INCLUDE_DIR=$i/include
break
- elif test -f $i/include/freetds/tds.h; then
+ elif test -f $i/include/freetds/sybdb.h; then
PDO_FREETDS_INSTALLATION_DIR=$i
PDO_FREETDS_INCLUDE_DIR=$i/include/freetds
break;
@@ -30,10 +30,10 @@ if test "$PHP_PDO_DBLIB" != "no"; then
elif test "$PHP_PDO_DBLIB" != "no"; then
- if test -f $PHP_PDO_DBLIB/include/tds.h; then
+ if test -f $PHP_PDO_DBLIB/include/sybdb.h; then
PDO_FREETDS_INSTALLATION_DIR=$PHP_PDO_DBLIB
PDO_FREETDS_INCLUDE_DIR=$PHP_PDO_DBLIB/include
- elif test -f $PHP_PDO_DBLIB/include/freetds/tds.h; then
+ elif test -f $PHP_PDO_DBLIB/include/freetds/sybdb.h; then
PDO_FREETDS_INSTALLATION_DIR=$PHP_PDO_DBLIB
PDO_FREETDS_INCLUDE_DIR=$PHP_PDO_DBLIB/include/freetds
else
@@ -45,8 +45,8 @@ if test "$PHP_PDO_DBLIB" != "no"; then
PHP_LIBDIR=lib
fi
- if test ! -r "$PDO_FREETDS_INSTALLATION_DIR/$PHP_LIBDIR/libtds.a" && test ! -r "$PDO_FREETDS_INSTALLATION_DIR/$PHP_LIBDIR/libtds.so"; then
- AC_MSG_ERROR(Could not find $PDO_FREETDS_INSTALLATION_DIR/$PHP_LIBDIR/libtds.[a|so])
+ if test ! -r "$PDO_FREETDS_INSTALLATION_DIR/$PHP_LIBDIR/libsybdb.a" && test ! -r "$PDO_FREETDS_INSTALLATION_DIR/$PHP_LIBDIR/libsybdb.so"; then
+ AC_MSG_ERROR(Could not find $PDO_FREETDS_INSTALLATION_DIR/$PHP_LIBDIR/libsybdb.[a|so])
fi
PHP_ADD_INCLUDE($PDO_FREETDS_INCLUDE_DIR)
diff --git a/ext/pdo_dblib/dblib_driver.c b/ext/pdo_dblib/dblib_driver.c
index 1d7a826e7..35a0e8ae6 100644
--- a/ext/pdo_dblib/dblib_driver.c
+++ b/ext/pdo_dblib/dblib_driver.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dblib_driver.c,v 1.9.2.2.2.3 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: dblib_driver.c,v 1.9.2.2.2.4 2008/12/31 11:17:41 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
# include "config.h"
diff --git a/ext/pdo_dblib/dblib_stmt.c b/ext/pdo_dblib/dblib_stmt.c
index 6302fc3ae..1846ecf9e 100644
--- a/ext/pdo_dblib/dblib_stmt.c
+++ b/ext/pdo_dblib/dblib_stmt.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dblib_stmt.c,v 1.6.2.2.2.5 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: dblib_stmt.c,v 1.6.2.2.2.6 2008/12/31 11:17:41 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
# include "config.h"
diff --git a/ext/pdo_dblib/pdo_dblib.c b/ext/pdo_dblib/pdo_dblib.c
index 5203da769..36f33e3eb 100644
--- a/ext/pdo_dblib/pdo_dblib.c
+++ b/ext/pdo_dblib/pdo_dblib.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pdo_dblib.c,v 1.9.2.6.2.4 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: pdo_dblib.c,v 1.9.2.6.2.5 2008/12/31 11:17:41 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
# include "config.h"
diff --git a/ext/pdo_dblib/php_pdo_dblib.h b/ext/pdo_dblib/php_pdo_dblib.h
index 6c546e1b2..174cb946e 100644
--- a/ext/pdo_dblib/php_pdo_dblib.h
+++ b/ext/pdo_dblib/php_pdo_dblib.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pdo_dblib.h,v 1.2.2.1.2.2 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: php_pdo_dblib.h,v 1.2.2.1.2.3 2008/12/31 11:17:41 sebastian Exp $ */
#ifndef PHP_PDO_DBLIB_H
#define PHP_PDO_DBLIB_H
diff --git a/ext/pdo_dblib/php_pdo_dblib_int.h b/ext/pdo_dblib/php_pdo_dblib_int.h
index 8f3096522..364610c4c 100644
--- a/ext/pdo_dblib/php_pdo_dblib_int.h
+++ b/ext/pdo_dblib/php_pdo_dblib_int.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pdo_dblib_int.h,v 1.4.2.1.2.2 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: php_pdo_dblib_int.h,v 1.4.2.1.2.3 2008/12/31 11:17:41 sebastian Exp $ */
#ifndef PHP_PDO_DBLIB_INT_H
#define PHP_PDO_DBLIB_INT_H
diff --git a/ext/pdo_firebird/firebird_driver.c b/ext/pdo_firebird/firebird_driver.c
index e3d777be6..954b2a0c9 100644
--- a/ext/pdo_firebird/firebird_driver.c
+++ b/ext/pdo_firebird/firebird_driver.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: firebird_driver.c,v 1.17.2.2.2.5 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: firebird_driver.c,v 1.17.2.2.2.6 2008/12/31 11:17:41 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/pdo_firebird/firebird_statement.c b/ext/pdo_firebird/firebird_statement.c
index b58ea1b17..aa1b35c00 100644
--- a/ext/pdo_firebird/firebird_statement.c
+++ b/ext/pdo_firebird/firebird_statement.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: firebird_statement.c,v 1.18.2.1.2.6 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: firebird_statement.c,v 1.18.2.1.2.8 2009/02/09 12:07:35 felipe Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -527,6 +527,9 @@ static int firebird_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_dat
case PDO_PARAM_EVT_ALLOC:
if (param->is_param) {
/* allocate the parameter */
+ if (var->sqlind) {
+ efree(var->sqlind);
+ }
var->sqlind = (void*)emalloc(var->sqllen + 2*sizeof(short));
var->sqldata = &((char*)var->sqlind)[sizeof(short)];
}
diff --git a/ext/pdo_firebird/pdo_firebird.c b/ext/pdo_firebird/pdo_firebird.c
index a5b8156e8..5d20234e5 100644
--- a/ext/pdo_firebird/pdo_firebird.c
+++ b/ext/pdo_firebird/pdo_firebird.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pdo_firebird.c,v 1.4.2.3.2.2 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: pdo_firebird.c,v 1.4.2.3.2.3 2008/12/31 11:17:41 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/pdo_firebird/php_pdo_firebird.h b/ext/pdo_firebird/php_pdo_firebird.h
index 0711450a5..0531e538e 100644
--- a/ext/pdo_firebird/php_pdo_firebird.h
+++ b/ext/pdo_firebird/php_pdo_firebird.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pdo_firebird.h,v 1.3.2.1.2.2 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: php_pdo_firebird.h,v 1.3.2.1.2.3 2008/12/31 11:17:42 sebastian Exp $ */
#ifndef PHP_PDO_FIREBIRD_H
#define PHP_PDO_FIREBIRD_H
diff --git a/ext/pdo_firebird/php_pdo_firebird_int.h b/ext/pdo_firebird/php_pdo_firebird_int.h
index c49a31095..d3755e823 100644
--- a/ext/pdo_firebird/php_pdo_firebird_int.h
+++ b/ext/pdo_firebird/php_pdo_firebird_int.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pdo_firebird_int.h,v 1.10.2.1.2.2 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: php_pdo_firebird_int.h,v 1.10.2.1.2.3 2008/12/31 11:17:42 sebastian Exp $ */
#ifndef PHP_PDO_FIREBIRD_INT_H
#define PHP_PDO_FIREBIRD_INT_H
diff --git a/ext/pdo_firebird/tests/ddl.phpt b/ext/pdo_firebird/tests/ddl.phpt
index d03e48b7a..98a148e8f 100644
--- a/ext/pdo_firebird/tests/ddl.phpt
+++ b/ext/pdo_firebird/tests/ddl.phpt
@@ -3,19 +3,19 @@ PDO_Firebird: DDL/transactions
--SKIPIF--
<?php include("skipif.inc"); ?>
--FILE--
-<?php /* $Id: ddl.phpt,v 1.1 2004/06/12 03:09:48 abies Exp $ */
+<?php /* $Id: ddl.phpt,v 1.1.4.1 2009/02/09 12:56:09 felipe Exp $ */
require("testdb.inc");
$db = new PDO("firebird:dbname=$test_base",$user,$password) or die;
- $db->setAttribute(PDO_ATTR_ERRMODE, PDO_ERRMODE_WARNING);
+ $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$db->exec("CREATE TABLE ddl (id INT NOT NULL PRIMARY KEY, text BLOB SUB_TYPE 1)");
$db->exec("CREATE GENERATOR gen_ddl_id");
$db->exec("CREATE TRIGGER ddl_bi FOR ddl BEFORE INSERT AS
BEGIN IF (NEW.id IS NULL) THEN NEW.id=GEN_ID(gen_ddl_id,1); END");
- $db->setAttribute(PDO_ATTR_AUTOCOMMIT,0);
+ $db->setAttribute(PDO::ATTR_AUTOCOMMIT,0);
$db->beginTransaction();
var_dump($db->exec("INSERT INTO ddl (text) VALUES ('bla')"));
diff --git a/ext/pdo_firebird/tests/execute.phpt b/ext/pdo_firebird/tests/execute.phpt
index bfaa31335..4097f70ca 100644
--- a/ext/pdo_firebird/tests/execute.phpt
+++ b/ext/pdo_firebird/tests/execute.phpt
@@ -5,15 +5,15 @@ PDO_Firebird: prepare/execute/binding
--INI--
ibase.timestampformat=%Y-%m-%d %H:%M:%S
--FILE--
-<?php /* $Id: execute.phpt,v 1.4 2004/06/23 13:26:09 abies Exp $ */
+<?php /* $Id: execute.phpt,v 1.4.4.1 2009/02/09 11:58:02 felipe Exp $ */
require("testdb.inc");
$db = new PDO("firebird:dbname=$test_base",$user,$password) or die;
- var_dump($db->getAttribute(PDO_ATTR_CONNECTION_STATUS));
+ var_dump($db->getAttribute(PDO::ATTR_CONNECTION_STATUS));
- $db->setAttribute(PDO_ATTR_ERRMODE, PDO_ERRMODE_WARNING);
+ $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$db->exec("CREATE TABLE ddl (id SMALLINT NOT NULL PRIMARY KEY, text VARCHAR(32),
datetime TIMESTAMP DEFAULT '2000-02-12' NOT NULL)");
@@ -21,11 +21,13 @@ ibase.timestampformat=%Y-%m-%d %H:%M:%S
$s = $db->prepare("SELECT * FROM ddl WHERE id=? FOR UPDATE");
- $s->bindParam(1,$id = 0);
- $s->bindColumn("TEXT",$var = null);
+ $id = 0;
+ $s->bindParam(1,$id);
+ $var = null;
+ $s->bindColumn("TEXT",$var);
$id = 1;
$s->execute();
- $s->setAttribute(PDO_ATTR_CURSOR_NAME, "c");
+ $s->setAttribute(PDO::ATTR_CURSOR_NAME, "c");
var_dump($id);
diff --git a/ext/pdo_mysql/mysql_driver.c b/ext/pdo_mysql/mysql_driver.c
index 3073c4bf4..c69bd8623 100755
--- a/ext/pdo_mysql/mysql_driver.c
+++ b/ext/pdo_mysql/mysql_driver.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: mysql_driver.c,v 1.59.2.13.2.6 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: mysql_driver.c,v 1.59.2.13.2.8 2008/12/31 11:17:42 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -496,12 +496,12 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
if ((PG(open_basedir) && PG(open_basedir)[0] != '\0') || PG(safe_mode)) {
local_infile = 0;
}
-
+#ifdef MYSQL_OPT_LOCAL_INFILE
if (mysql_options(H->server, MYSQL_OPT_LOCAL_INFILE, (const char *)&local_infile)) {
pdo_mysql_error(dbh);
goto cleanup;
}
-
+#endif
#ifdef MYSQL_OPT_RECONNECT
/* since 5.0.3, the default for this option is 0 if not specified.
* we want the old behaviour */
diff --git a/ext/pdo_mysql/mysql_statement.c b/ext/pdo_mysql/mysql_statement.c
index 0a1a66e87..92095211c 100755
--- a/ext/pdo_mysql/mysql_statement.c
+++ b/ext/pdo_mysql/mysql_statement.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: mysql_statement.c,v 1.48.2.14.2.7 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: mysql_statement.c,v 1.48.2.14.2.8 2008/12/31 11:17:42 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/pdo_mysql/pdo_mysql.c b/ext/pdo_mysql/pdo_mysql.c
index 315770b12..8218de6fb 100755
--- a/ext/pdo_mysql/pdo_mysql.c
+++ b/ext/pdo_mysql/pdo_mysql.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pdo_mysql.c,v 1.8.2.13.2.2 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: pdo_mysql.c,v 1.8.2.13.2.3 2008/12/31 11:17:42 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/pdo_mysql/php_pdo_mysql.h b/ext/pdo_mysql/php_pdo_mysql.h
index 3a5ee2b8f..cd0b2974e 100755
--- a/ext/pdo_mysql/php_pdo_mysql.h
+++ b/ext/pdo_mysql/php_pdo_mysql.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pdo_mysql.h,v 1.3.2.1.2.2 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: php_pdo_mysql.h,v 1.3.2.1.2.3 2008/12/31 11:17:42 sebastian Exp $ */
#ifndef PHP_PDO_MYSQL_H
#define PHP_PDO_MYSQL_H
diff --git a/ext/pdo_mysql/php_pdo_mysql_int.h b/ext/pdo_mysql/php_pdo_mysql_int.h
index c6e60bd35..95f899375 100755
--- a/ext/pdo_mysql/php_pdo_mysql_int.h
+++ b/ext/pdo_mysql/php_pdo_mysql_int.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pdo_mysql_int.h,v 1.16.2.4.2.2 2007/12/31 07:20:09 sebastian Exp $ */
+/* $Id: php_pdo_mysql_int.h,v 1.16.2.4.2.3 2008/12/31 11:17:42 sebastian Exp $ */
#ifndef PHP_PDO_MYSQL_INT_H
#define PHP_PDO_MYSQL_INT_H
diff --git a/ext/pdo_mysql/tests/bug41125.phpt b/ext/pdo_mysql/tests/bug41125.phpt
new file mode 100644
index 000000000..29a98164d
--- /dev/null
+++ b/ext/pdo_mysql/tests/bug41125.phpt
@@ -0,0 +1,162 @@
+--TEST--
+Bug #41125 (PDO mysql + quote() + prepare() can result in seg fault)
+--SKIPIF--
+<?php
+require dirname(__FILE__) . '/config.inc';
+require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+MySQLPDOTest::skip();
+
+?>
+--FILE--
+<?php
+
+require dirname(__FILE__) . '/config.inc';
+require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+$db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
+
+$search = "o'";
+$sql = "SELECT 1 FROM DUAL WHERE 'o''riley' LIKE " . $db->quote('%' . $search . '%');
+$stmt = $db->prepare($sql);
+$stmt->execute();
+print implode(' - ', (($r = @$stmt->fetch(PDO::FETCH_NUM)) ? $r : array())) ."\n";
+print implode(' - ', $stmt->errorinfo()) ."\n";
+
+print "-------------------------------------------------------\n";
+
+$queries = array(
+ "SELECT 1 FROM DUAL WHERE 1 = '?\'\''",
+ "SELECT 'a\\'0' FROM DUAL WHERE 1 = ?",
+ "SELECT 'a', 'b\'' FROM DUAL WHERE '''' LIKE '\\'' AND ?",
+ "SELECT 'foo?bar', '', '''' FROM DUAL WHERE ?"
+);
+
+foreach ($queries as $k => $query) {
+ $stmt = $db->prepare($query);
+ $stmt->execute(array(1));
+ printf("[%d] Query: [[%s]]\n", $k + 1, $query);
+ print implode(' - ', (($r = @$stmt->fetch(PDO::FETCH_NUM)) ? $r : array())) ."\n";
+ print implode(' - ', $stmt->errorinfo()) ."\n";
+ print "--------\n";
+}
+
+$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
+$sql = "SELECT upper(:id) FROM DUAL WHERE '1'";
+$stmt = $db->prepare($sql);
+
+$id = 'o\'\0';
+$stmt->bindParam(':id', $id);
+$stmt->execute();
+printf("Query: [[%s]]\n", $sql);
+print implode(' - ', (($r = @$stmt->fetch(PDO::FETCH_NUM)) ? $r : array())) ."\n";
+print implode(' - ', $stmt->errorinfo()) ."\n";
+
+print "-------------------------------------------------------\n";
+
+$queries = array(
+ "SELECT 1, 'foo' FROM DUAL WHERE 1 = :id AND '\\0' IS NULL AND 2 <> :id",
+ "SELECT 1 FROM DUAL WHERE 1 = :id AND '' AND 2 <> :id",
+ "SELECT 1 FROM DUAL WHERE 1 = :id AND '\'\'' = '''' AND 2 <> :id",
+ "SELECT 1 FROM DUAL WHERE 1 = :id AND '\'' = '''' AND 2 <> :id",
+ "SELECT 'a', 'b\'' FROM DUAL WHERE '''' LIKE '\\'' AND 1",
+ "SELECT 'a''', '\'b\'' FROM DUAL WHERE '''' LIKE '\\'' AND 1",
+ "SELECT UPPER(:id) FROM DUAL WHERE '1'",
+ "SELECT 1 FROM DUAL WHERE '\''",
+ "SELECT 1 FROM DUAL WHERE :id AND '\\0' OR :id",
+ "SELECT 1 FROM DUAL WHERE 'a\\f\\n\\0' AND 1 >= :id",
+ "SELECT 1 FROM DUAL WHERE '\'' = ''''",
+ "SELECT '\\n' '1 FROM DUAL WHERE '''' and :id'",
+ "SELECT 1 'FROM DUAL WHERE :id AND '''' = '''' OR 1 = 1 AND ':id",
+);
+
+$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
+$id = 1;
+
+foreach ($queries as $k => $query) {
+ $stmt = $db->prepare($query);
+ $stmt->bindParam(':id', $id);
+ $stmt->execute();
+
+ printf("[%d] Query: [[%s]]\n", $k + 1, $query);
+ print implode(' - ', (($r = @$stmt->fetch(PDO::FETCH_NUM)) ? $r : array())) ."\n";
+ print implode(' - ', $stmt->errorinfo()) ."\n";
+ print "--------\n";
+}
+
+?>
+--EXPECT--
+1
+00000
+-------------------------------------------------------
+[1] Query: [[SELECT 1 FROM DUAL WHERE 1 = '?\'\'']]
+
+00000
+--------
+[2] Query: [[SELECT 'a\'0' FROM DUAL WHERE 1 = ?]]
+a'0
+00000
+--------
+[3] Query: [[SELECT 'a', 'b\'' FROM DUAL WHERE '''' LIKE '\'' AND ?]]
+a - b'
+00000
+--------
+[4] Query: [[SELECT 'foo?bar', '', '''' FROM DUAL WHERE ?]]
+foo?bar - - '
+00000
+--------
+Query: [[SELECT upper(:id) FROM DUAL WHERE '1']]
+O'\0
+00000
+-------------------------------------------------------
+[1] Query: [[SELECT 1, 'foo' FROM DUAL WHERE 1 = :id AND '\0' IS NULL AND 2 <> :id]]
+
+00000
+--------
+[2] Query: [[SELECT 1 FROM DUAL WHERE 1 = :id AND '' AND 2 <> :id]]
+
+00000
+--------
+[3] Query: [[SELECT 1 FROM DUAL WHERE 1 = :id AND '\'\'' = '''' AND 2 <> :id]]
+
+00000
+--------
+[4] Query: [[SELECT 1 FROM DUAL WHERE 1 = :id AND '\'' = '''' AND 2 <> :id]]
+1
+00000
+--------
+[5] Query: [[SELECT 'a', 'b\'' FROM DUAL WHERE '''' LIKE '\'' AND 1]]
+a - b'
+00000
+--------
+[6] Query: [[SELECT 'a''', '\'b\'' FROM DUAL WHERE '''' LIKE '\'' AND 1]]
+a' - 'b'
+00000
+--------
+[7] Query: [[SELECT UPPER(:id) FROM DUAL WHERE '1']]
+1
+00000
+--------
+[8] Query: [[SELECT 1 FROM DUAL WHERE '\'']]
+
+00000
+--------
+[9] Query: [[SELECT 1 FROM DUAL WHERE :id AND '\0' OR :id]]
+1
+00000
+--------
+[10] Query: [[SELECT 1 FROM DUAL WHERE 'a\f\n\0' AND 1 >= :id]]
+
+00000
+--------
+[11] Query: [[SELECT 1 FROM DUAL WHERE '\'' = '''']]
+1
+00000
+--------
+[12] Query: [[SELECT '\n' '1 FROM DUAL WHERE '''' and :id']]
+
+1 FROM DUAL WHERE '' and :id
+00000
+--------
+[13] Query: [[SELECT 1 'FROM DUAL WHERE :id AND '''' = '''' OR 1 = 1 AND ':id]]
+1
+00000
+--------
diff --git a/ext/pdo_mysql/tests/bug44327.phpt b/ext/pdo_mysql/tests/bug44327.phpt
new file mode 100644
index 000000000..3d461c0fc
--- /dev/null
+++ b/ext/pdo_mysql/tests/bug44327.phpt
@@ -0,0 +1,64 @@
+--TEST--
+Bug #44327 (PDORow::queryString property & numeric offsets / Crash)
+--SKIPIF--
+<?php
+require dirname(__FILE__) . '/config.inc';
+require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+MySQLPDOTest::skip();
+?>
+--FILE--
+<?php
+ require dirname(__FILE__) . '/config.inc';
+ require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+ $db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
+
+ $stmt = $db->prepare("SELECT 1 AS \"one\"");
+ $stmt->execute();
+ $row = $stmt->fetch(PDO::FETCH_LAZY);
+ var_dump($row);
+ var_dump($row->{0});
+ var_dump($row->one);
+ var_dump($row->queryString);
+
+ print "----------------------------------\n";
+
+ @$db->exec("DROP TABLE test");
+ $db->exec("CREATE TABLE test (id INT)");
+ $db->exec("INSERT INTO test(id) VALUES (1)");
+ $stmt = $db->prepare("SELECT id FROM test");
+ $stmt->execute();
+ $row = $stmt->fetch(PDO::FETCH_LAZY);
+ var_dump($row);
+ var_dump($row->queryString);
+ @$db->exec("DROP TABLE test");
+
+ print "----------------------------------\n";
+
+ $stmt = $db->prepare('foo');
+ @$stmt->execute();
+ $row = $stmt->fetch();
+ var_dump($row->queryString);
+
+?>
+--EXPECTF--
+object(PDORow)#%d (2) {
+ ["queryString"]=>
+ string(17) "SELECT 1 AS "one""
+ ["one"]=>
+ string(1) "1"
+}
+string(1) "1"
+string(1) "1"
+string(17) "SELECT 1 AS "one""
+----------------------------------
+object(PDORow)#%d (2) {
+ ["queryString"]=>
+ string(19) "SELECT id FROM test"
+ ["id"]=>
+ string(1) "1"
+}
+string(19) "SELECT id FROM test"
+----------------------------------
+
+Notice: Trying to get property of non-object in %s on line %d
+NULL
diff --git a/ext/pdo_mysql/tests/bug46292.phpt b/ext/pdo_mysql/tests/bug46292.phpt
new file mode 100644
index 000000000..df66dbb4c
--- /dev/null
+++ b/ext/pdo_mysql/tests/bug46292.phpt
@@ -0,0 +1,80 @@
+--TEST--
+Bug #46292 (PDO::setFetchMode() shouldn't requires the 2nd arg when using FETCH_CLASSTYPE)
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo') || !extension_loaded('pdo_mysql')) die('skip not loaded');
+require dirname(__FILE__) . '/config.inc';
+require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+PDOTest::skip();
+?>
+--FILE--
+<?php
+ require dirname(__FILE__) . '/config.inc';
+ require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+
+ $pdoDb = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
+
+
+ class myclass implements Serializable {
+ public function __construct() {
+ printf("%s()\n", __METHOD__);
+ }
+
+ public function serialize() {
+ printf("%s()\n", __METHOD__);
+ return "any data from serialize()";
+ }
+
+ public function unserialize($dat) {
+ printf("%s(%s)\n", __METHOD__, var_export($dat, true));
+ return $dat;
+ }
+ }
+
+ class myclass2 extends myclass { }
+
+ $pdoDb->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
+
+ $pdoDb->query('DROP TABLE IF EXISTS testz');
+
+ $pdoDb->query('CREATE TABLE testz (name VARCHAR(20) NOT NULL, value INT)');
+
+ $pdoDb->query("INSERT INTO testz VALUES ('myclass', 1), ('myclass2', 2), ('myclass', NULL), ('myclass3', NULL)");
+
+ $stmt = $pdoDb->prepare("SELECT * FROM testz");
+
+ var_dump($stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE | PDO::FETCH_GROUP));
+ $stmt->execute();
+
+ var_dump($stmt->fetch());
+ var_dump($stmt->fetch());
+ var_dump($stmt->fetchAll());
+
+ $pdoDb->query('DROP TABLE IF EXISTS testz');
+
+?>
+--EXPECTF--
+bool(true)
+myclass::__construct()
+object(myclass)#%d (1) {
+ ["value"]=>
+ string(1) "1"
+}
+myclass::__construct()
+object(myclass2)#%d (1) {
+ ["value"]=>
+ string(1) "2"
+}
+myclass::__construct()
+array(2) {
+ [0]=>
+ object(myclass)#%d (1) {
+ ["value"]=>
+ NULL
+ }
+ [1]=>
+ object(stdClass)#%d (1) {
+ ["value"]=>
+ NULL
+ }
+}
diff --git a/ext/pdo_oci/oci_driver.c b/ext/pdo_oci/oci_driver.c
index 7ed6d83fc..a91fcaf6b 100755
--- a/ext/pdo_oci/oci_driver.c
+++ b/ext/pdo_oci/oci_driver.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: oci_driver.c,v 1.24.2.4.2.10 2008/03/08 14:01:49 felipe Exp $ */
+/* $Id: oci_driver.c,v 1.24.2.4.2.11 2008/12/31 11:17:42 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/pdo_oci/oci_statement.c b/ext/pdo_oci/oci_statement.c
index 9b453e460..e5fc91b00 100755
--- a/ext/pdo_oci/oci_statement.c
+++ b/ext/pdo_oci/oci_statement.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: oci_statement.c,v 1.16.2.10.2.8 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: oci_statement.c,v 1.16.2.10.2.9 2008/12/31 11:17:42 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/pdo_oci/pdo_oci.c b/ext/pdo_oci/pdo_oci.c
index 68d1d8385..d33bd071d 100755
--- a/ext/pdo_oci/pdo_oci.c
+++ b/ext/pdo_oci/pdo_oci.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pdo_oci.c,v 1.5.2.6.2.2 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: pdo_oci.c,v 1.5.2.6.2.3 2008/12/31 11:17:42 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/pdo_oci/php_pdo_oci.h b/ext/pdo_oci/php_pdo_oci.h
index 74ecee076..51b15d4e2 100755
--- a/ext/pdo_oci/php_pdo_oci.h
+++ b/ext/pdo_oci/php_pdo_oci.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pdo_oci.h,v 1.2.2.1.2.2 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: php_pdo_oci.h,v 1.2.2.1.2.3 2008/12/31 11:17:42 sebastian Exp $ */
#ifndef PHP_PDO_OCI_H
#define PHP_PDO_OCI_H
diff --git a/ext/pdo_oci/php_pdo_oci_int.h b/ext/pdo_oci/php_pdo_oci_int.h
index 33bf1ccf8..40da800e1 100755
--- a/ext/pdo_oci/php_pdo_oci_int.h
+++ b/ext/pdo_oci/php_pdo_oci_int.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pdo_oci_int.h,v 1.4.2.2.2.5 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: php_pdo_oci_int.h,v 1.4.2.2.2.6 2008/12/31 11:17:42 sebastian Exp $ */
#include <oci.h>
diff --git a/ext/pdo_odbc/odbc_driver.c b/ext/pdo_odbc/odbc_driver.c
index da45d5836..d7da4a59b 100755
--- a/ext/pdo_odbc/odbc_driver.c
+++ b/ext/pdo_odbc/odbc_driver.c
@@ -1,473 +1,473 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 3.0 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available through the world-wide-web at the following url: |
- | http://www.php.net/license/3_0.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Wez Furlong <wez@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id: odbc_driver.c,v 1.27.2.4.2.4 2007/12/31 07:20:10 sebastian Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "pdo/php_pdo.h"
-#include "pdo/php_pdo_driver.h"
-#include "php_pdo_odbc.h"
-#include "php_pdo_odbc_int.h"
-#include "zend_exceptions.h"
-
-static int pdo_odbc_fetch_error_func(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *info TSRMLS_DC)
-{
- pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data;
- pdo_odbc_errinfo *einfo = &H->einfo;
- pdo_odbc_stmt *S = NULL;
- char *message = NULL;
-
- if (stmt) {
- S = (pdo_odbc_stmt*)stmt->driver_data;
- einfo = &S->einfo;
- }
-
- spprintf(&message, 0, "%s (%s[%ld] at %s:%d)",
- einfo->last_err_msg,
- einfo->what, einfo->last_error,
- einfo->file, einfo->line);
-
- add_next_index_long(info, einfo->last_error);
- add_next_index_string(info, message, 0);
- add_next_index_string(info, einfo->last_state, 1);
-
- return 1;
-}
-
-
-void pdo_odbc_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, PDO_ODBC_HSTMT statement, char *what, const char *file, int line TSRMLS_DC) /* {{{ */
-{
- SQLRETURN rc;
- SQLSMALLINT errmsgsize = 0;
- SQLHANDLE eh;
- SQLSMALLINT htype, recno = 1;
- pdo_odbc_db_handle *H = (pdo_odbc_db_handle*)dbh->driver_data;
- pdo_odbc_errinfo *einfo = &H->einfo;
- pdo_odbc_stmt *S = NULL;
- pdo_error_type *pdo_err = &dbh->error_code;
-
- if (stmt) {
- S = (pdo_odbc_stmt*)stmt->driver_data;
-
- einfo = &S->einfo;
- pdo_err = &stmt->error_code;
- }
-
- if (statement == SQL_NULL_HSTMT && S) {
- statement = S->stmt;
- }
-
- if (statement) {
- htype = SQL_HANDLE_STMT;
- eh = statement;
- } else if (H->dbc) {
- htype = SQL_HANDLE_DBC;
- eh = H->dbc;
- } else {
- htype = SQL_HANDLE_ENV;
- eh = H->env;
- }
-
- rc = SQLGetDiagRec(htype, eh, recno++, einfo->last_state, &einfo->last_error,
- einfo->last_err_msg, sizeof(einfo->last_err_msg)-1, &errmsgsize);
-
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- errmsgsize = 0;
- }
-
- einfo->last_err_msg[errmsgsize] = '\0';
- einfo->file = file;
- einfo->line = line;
- einfo->what = what;
-
- strcpy(*pdo_err, einfo->last_state);
-/* printf("@@ SQLSTATE[%s] %s\n", *pdo_err, einfo->last_err_msg); */
- if (!dbh->methods) {
- zend_throw_exception_ex(php_pdo_get_exception(), 0 TSRMLS_CC, "SQLSTATE[%s] %s: %d %s",
- *pdo_err, what, einfo->last_error, einfo->last_err_msg);
- }
-
- /* just like a cursor, once you start pulling, you need to keep
- * going until the end; SQL Server (at least) will mess with the
- * actual cursor state if you don't finish retrieving all the
- * diagnostic records (which can be generated by PRINT statements
- * in the query, for instance). */
- while (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) {
- char discard_state[5];
- char discard_buf[1024];
- SQLINTEGER code;
- rc = SQLGetDiagRec(htype, eh, recno++, discard_state, &code,
- discard_buf, sizeof(discard_buf)-1, &errmsgsize);
- }
-
-}
-/* }}} */
-
-static int odbc_handle_closer(pdo_dbh_t *dbh TSRMLS_DC)
-{
- pdo_odbc_db_handle *H = (pdo_odbc_db_handle*)dbh->driver_data;
-
- if (H->dbc != SQL_NULL_HANDLE) {
- SQLEndTran(SQL_HANDLE_DBC, H->dbc, SQL_ROLLBACK);
- SQLDisconnect(H->dbc);
- SQLFreeHandle(SQL_HANDLE_DBC, H->dbc);
- H->dbc = NULL;
- }
- SQLFreeHandle(SQL_HANDLE_ENV, H->env);
- H->env = NULL;
- pefree(H, dbh->is_persistent);
- dbh->driver_data = NULL;
-
- return 0;
-}
-
-static int odbc_handle_preparer(pdo_dbh_t *dbh, const char *sql, long sql_len, pdo_stmt_t *stmt, zval *driver_options TSRMLS_DC)
-{
- RETCODE rc;
- pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data;
- pdo_odbc_stmt *S = ecalloc(1, sizeof(*S));
- enum pdo_cursor_type cursor_type = PDO_CURSOR_FWDONLY;
- int ret;
- char *nsql = NULL;
- int nsql_len = 0;
-
- S->H = H;
-
- /* before we prepare, we need to peek at the query; if it uses named parameters,
- * we want PDO to rewrite them for us */
- stmt->supports_placeholders = PDO_PLACEHOLDER_POSITIONAL;
- ret = pdo_parse_params(stmt, (char*)sql, sql_len, &nsql, &nsql_len TSRMLS_CC);
-
- if (ret == 1) {
- /* query was re-written */
- sql = nsql;
- } else if (ret == -1) {
- /* couldn't grok it */
- strcpy(dbh->error_code, stmt->error_code);
- efree(S);
- return 0;
- }
-
- rc = SQLAllocHandle(SQL_HANDLE_STMT, H->dbc, &S->stmt);
-
- if (rc == SQL_INVALID_HANDLE || rc == SQL_ERROR) {
- efree(S);
- if (nsql) {
- efree(nsql);
- }
- pdo_odbc_drv_error("SQLAllocStmt");
- return 0;
- }
-
- cursor_type = pdo_attr_lval(driver_options, PDO_ATTR_CURSOR, PDO_CURSOR_FWDONLY TSRMLS_CC);
- if (cursor_type != PDO_CURSOR_FWDONLY) {
- rc = SQLSetStmtAttr(S->stmt, SQL_ATTR_CURSOR_SCROLLABLE, (void*)SQL_SCROLLABLE, 0);
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- pdo_odbc_stmt_error("SQLSetStmtAttr: SQL_ATTR_CURSOR_SCROLLABLE");
- SQLFreeHandle(SQL_HANDLE_STMT, S->stmt);
- if (nsql) {
- efree(nsql);
- }
- return 0;
- }
- }
-
- rc = SQLPrepare(S->stmt, (char*)sql, SQL_NTS);
- if (nsql) {
- efree(nsql);
- }
-
- stmt->driver_data = S;
- stmt->methods = &odbc_stmt_methods;
-
- if (rc != SQL_SUCCESS) {
- pdo_odbc_stmt_error("SQLPrepare");
- if (rc != SQL_SUCCESS_WITH_INFO) {
- /* clone error information into the db handle */
- strcpy(H->einfo.last_err_msg, S->einfo.last_err_msg);
- H->einfo.file = S->einfo.file;
- H->einfo.line = S->einfo.line;
- H->einfo.what = S->einfo.what;
- strcpy(dbh->error_code, stmt->error_code);
- }
- }
-
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- return 0;
- }
- return 1;
-}
-
-static long odbc_handle_doer(pdo_dbh_t *dbh, const char *sql, long sql_len TSRMLS_DC)
-{
- pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data;
- RETCODE rc;
- long row_count = -1;
- PDO_ODBC_HSTMT stmt;
-
- rc = SQLAllocHandle(SQL_HANDLE_STMT, H->dbc, &stmt);
- if (rc != SQL_SUCCESS) {
- pdo_odbc_drv_error("SQLAllocHandle: STMT");
- return -1;
- }
-
- rc = SQLExecDirect(stmt, (char *)sql, sql_len);
-
- if (rc == SQL_NO_DATA) {
- /* If SQLExecDirect executes a searched update or delete statement that
- * does not affect any rows at the data source, the call to
- * SQLExecDirect returns SQL_NO_DATA. */
- row_count = 0;
- goto out;
- }
-
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- pdo_odbc_doer_error("SQLExecDirect");
- goto out;
- }
-
- rc = SQLRowCount(stmt, &row_count);
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- pdo_odbc_doer_error("SQLRowCount");
- goto out;
- }
- if (row_count == -1) {
- row_count = 0;
- }
-out:
- SQLFreeHandle(SQL_HANDLE_STMT, stmt);
- return row_count;
-}
-
-static int odbc_handle_quoter(pdo_dbh_t *dbh, const char *unquoted, int unquotedlen, char **quoted, int *quotedlen, enum pdo_param_type param_type TSRMLS_DC)
-{
- pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data;
- /* TODO: figure it out */
- return 0;
-}
-
-static int odbc_handle_begin(pdo_dbh_t *dbh TSRMLS_DC)
-{
- if (dbh->auto_commit) {
- /* we need to disable auto-commit now, to be able to initiate a transaction */
- RETCODE rc;
- pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data;
-
- rc = SQLSetConnectAttr(H->dbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, SQL_IS_INTEGER);
- if (rc != SQL_SUCCESS) {
- pdo_odbc_drv_error("SQLSetConnectAttr AUTOCOMMIT = OFF");
- return 0;
- }
- }
- return 1;
-}
-
-static int odbc_handle_commit(pdo_dbh_t *dbh TSRMLS_DC)
-{
- pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data;
- RETCODE rc;
-
- rc = SQLEndTran(SQL_HANDLE_DBC, H->dbc, SQL_COMMIT);
-
- if (rc != SQL_SUCCESS) {
- pdo_odbc_drv_error("SQLEndTran: Commit");
-
- if (rc != SQL_SUCCESS_WITH_INFO) {
- return 0;
- }
- }
-
- if (dbh->auto_commit) {
- /* turn auto-commit back on again */
- rc = SQLSetConnectAttr(H->dbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_ON, SQL_IS_INTEGER);
- if (rc != SQL_SUCCESS) {
- pdo_odbc_drv_error("SQLSetConnectAttr AUTOCOMMIT = ON");
- return 0;
- }
- }
- return 1;
-}
-
-static int odbc_handle_rollback(pdo_dbh_t *dbh TSRMLS_DC)
-{
- pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data;
- RETCODE rc;
-
- rc = SQLEndTran(SQL_HANDLE_DBC, H->dbc, SQL_ROLLBACK);
-
- if (rc != SQL_SUCCESS) {
- pdo_odbc_drv_error("SQLEndTran: Rollback");
-
- if (rc != SQL_SUCCESS_WITH_INFO) {
- return 0;
- }
- }
- if (dbh->auto_commit && H->dbc) {
- /* turn auto-commit back on again */
- rc = SQLSetConnectAttr(H->dbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_ON, SQL_IS_INTEGER);
- if (rc != SQL_SUCCESS) {
- pdo_odbc_drv_error("SQLSetConnectAttr AUTOCOMMIT = ON");
- return 0;
- }
- }
-
- return 1;
-}
-
-static int odbc_handle_get_attr(pdo_dbh_t *dbh, long attr, zval *val TSRMLS_DC)
-{
- switch (attr) {
- case PDO_ATTR_CLIENT_VERSION:
- ZVAL_STRING(val, "ODBC-" PDO_ODBC_TYPE, 1);
- return 1;
-
- case PDO_ATTR_SERVER_VERSION:
- case PDO_ATTR_PREFETCH:
- case PDO_ATTR_TIMEOUT:
- case PDO_ATTR_SERVER_INFO:
- case PDO_ATTR_CONNECTION_STATUS:
- break;
-
- }
- return 0;
-}
-
-static struct pdo_dbh_methods odbc_methods = {
- odbc_handle_closer,
- odbc_handle_preparer,
- odbc_handle_doer,
- odbc_handle_quoter,
- odbc_handle_begin,
- odbc_handle_commit,
- odbc_handle_rollback,
- NULL, /* set attr */
- NULL, /* last id */
- pdo_odbc_fetch_error_func,
- odbc_handle_get_attr, /* get attr */
- NULL, /* check_liveness */
-};
-
-static int pdo_odbc_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_DC) /* {{{ */
-{
- pdo_odbc_db_handle *H;
- RETCODE rc;
- int use_direct = 0;
- SQLUINTEGER cursor_lib;
-
- H = pecalloc(1, sizeof(*H), dbh->is_persistent);
-
- dbh->driver_data = H;
-
- SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &H->env);
- rc = SQLSetEnvAttr(H->env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
-
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- pdo_odbc_drv_error("SQLSetEnvAttr: ODBC3");
- goto fail;
- }
-
-#ifdef SQL_ATTR_CONNECTION_POOLING
- if (pdo_odbc_pool_on != SQL_CP_OFF) {
- rc = SQLSetEnvAttr(H->env, SQL_ATTR_CP_MATCH, (void*)pdo_odbc_pool_mode, 0);
- if (rc != SQL_SUCCESS) {
- pdo_odbc_drv_error("SQLSetEnvAttr: SQL_ATTR_CP_MATCH");
- goto fail;
- }
- }
-#endif
-
- rc = SQLAllocHandle(SQL_HANDLE_DBC, H->env, &H->dbc);
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- pdo_odbc_drv_error("SQLAllocHandle (DBC)");
- goto fail;
- }
-
- rc = SQLSetConnectAttr(H->dbc, SQL_ATTR_AUTOCOMMIT,
- (SQLPOINTER)(dbh->auto_commit ? SQL_AUTOCOMMIT_ON : SQL_AUTOCOMMIT_OFF), SQL_IS_INTEGER);
- if (rc != SQL_SUCCESS) {
- pdo_odbc_drv_error("SQLSetConnectAttr AUTOCOMMIT");
- goto fail;
- }
-
- /* set up the cursor library, if needed, or if configured explicitly */
- cursor_lib = pdo_attr_lval(driver_options, PDO_ODBC_ATTR_USE_CURSOR_LIBRARY, SQL_CUR_USE_IF_NEEDED TSRMLS_CC);
- rc = SQLSetConnectAttr(H->dbc, SQL_ODBC_CURSORS, (void*)cursor_lib, SQL_IS_INTEGER);
- if (rc != SQL_SUCCESS && cursor_lib != SQL_CUR_USE_IF_NEEDED) {
- pdo_odbc_drv_error("SQLSetConnectAttr SQL_ODBC_CURSORS");
- goto fail;
- }
-
- if (strchr(dbh->data_source, ';')) {
- char dsnbuf[1024];
- short dsnbuflen;
-
- use_direct = 1;
-
- /* Force UID and PWD to be set in the DSN */
- if (dbh->username && *dbh->username && !strstr(dbh->data_source, "uid")
- && !strstr(dbh->data_source, "UID")) {
- char *dsn;
- spprintf(&dsn, 0, "%s;UID=%s;PWD=%s", dbh->data_source, dbh->username, dbh->password);
- pefree((char*)dbh->data_source, dbh->is_persistent);
- dbh->data_source = dsn;
- }
-
- rc = SQLDriverConnect(H->dbc, NULL, (char*)dbh->data_source, strlen(dbh->data_source),
- dsnbuf, sizeof(dsnbuf)-1, &dsnbuflen, SQL_DRIVER_NOPROMPT);
- }
- if (!use_direct) {
- rc = SQLConnect(H->dbc, (char*)dbh->data_source, SQL_NTS, dbh->username, SQL_NTS, dbh->password, SQL_NTS);
- }
-
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- pdo_odbc_drv_error(use_direct ? "SQLDriverConnect" : "SQLConnect");
- goto fail;
- }
-
- /* TODO: if we want to play nicely, we should check to see if the driver really supports ODBC v3 or not */
-
- dbh->methods = &odbc_methods;
- dbh->alloc_own_columns = 1;
-
- return 1;
-
-fail:
- dbh->methods = &odbc_methods;
- return 0;
-}
-/* }}} */
-
-pdo_driver_t pdo_odbc_driver = {
- PDO_DRIVER_HEADER(odbc),
- pdo_odbc_handle_factory
-};
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
+/*
+ +----------------------------------------------------------------------+
+ | PHP Version 5 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997-2009 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.0 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.php.net/license/3_0.txt. |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Author: Wez Furlong <wez@php.net> |
+ +----------------------------------------------------------------------+
+*/
+
+/* $Id: odbc_driver.c,v 1.27.2.4.2.6 2008/12/31 11:17:42 sebastian Exp $ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "php.h"
+#include "php_ini.h"
+#include "ext/standard/info.h"
+#include "pdo/php_pdo.h"
+#include "pdo/php_pdo_driver.h"
+#include "php_pdo_odbc.h"
+#include "php_pdo_odbc_int.h"
+#include "zend_exceptions.h"
+
+static int pdo_odbc_fetch_error_func(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *info TSRMLS_DC)
+{
+ pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data;
+ pdo_odbc_errinfo *einfo = &H->einfo;
+ pdo_odbc_stmt *S = NULL;
+ char *message = NULL;
+
+ if (stmt) {
+ S = (pdo_odbc_stmt*)stmt->driver_data;
+ einfo = &S->einfo;
+ }
+
+ spprintf(&message, 0, "%s (%s[%ld] at %s:%d)",
+ einfo->last_err_msg,
+ einfo->what, einfo->last_error,
+ einfo->file, einfo->line);
+
+ add_next_index_long(info, einfo->last_error);
+ add_next_index_string(info, message, 0);
+ add_next_index_string(info, einfo->last_state, 1);
+
+ return 1;
+}
+
+
+void pdo_odbc_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, PDO_ODBC_HSTMT statement, char *what, const char *file, int line TSRMLS_DC) /* {{{ */
+{
+ SQLRETURN rc;
+ SQLSMALLINT errmsgsize = 0;
+ SQLHANDLE eh;
+ SQLSMALLINT htype, recno = 1;
+ pdo_odbc_db_handle *H = (pdo_odbc_db_handle*)dbh->driver_data;
+ pdo_odbc_errinfo *einfo = &H->einfo;
+ pdo_odbc_stmt *S = NULL;
+ pdo_error_type *pdo_err = &dbh->error_code;
+
+ if (stmt) {
+ S = (pdo_odbc_stmt*)stmt->driver_data;
+
+ einfo = &S->einfo;
+ pdo_err = &stmt->error_code;
+ }
+
+ if (statement == SQL_NULL_HSTMT && S) {
+ statement = S->stmt;
+ }
+
+ if (statement) {
+ htype = SQL_HANDLE_STMT;
+ eh = statement;
+ } else if (H->dbc) {
+ htype = SQL_HANDLE_DBC;
+ eh = H->dbc;
+ } else {
+ htype = SQL_HANDLE_ENV;
+ eh = H->env;
+ }
+
+ rc = SQLGetDiagRec(htype, eh, recno++, einfo->last_state, &einfo->last_error,
+ einfo->last_err_msg, sizeof(einfo->last_err_msg)-1, &errmsgsize);
+
+ if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
+ errmsgsize = 0;
+ }
+
+ einfo->last_err_msg[errmsgsize] = '\0';
+ einfo->file = file;
+ einfo->line = line;
+ einfo->what = what;
+
+ strcpy(*pdo_err, einfo->last_state);
+/* printf("@@ SQLSTATE[%s] %s\n", *pdo_err, einfo->last_err_msg); */
+ if (!dbh->methods) {
+ zend_throw_exception_ex(php_pdo_get_exception(), 0 TSRMLS_CC, "SQLSTATE[%s] %s: %d %s",
+ *pdo_err, what, einfo->last_error, einfo->last_err_msg);
+ }
+
+ /* just like a cursor, once you start pulling, you need to keep
+ * going until the end; SQL Server (at least) will mess with the
+ * actual cursor state if you don't finish retrieving all the
+ * diagnostic records (which can be generated by PRINT statements
+ * in the query, for instance). */
+ while (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) {
+ char discard_state[5];
+ char discard_buf[1024];
+ SQLINTEGER code;
+ rc = SQLGetDiagRec(htype, eh, recno++, discard_state, &code,
+ discard_buf, sizeof(discard_buf)-1, &errmsgsize);
+ }
+
+}
+/* }}} */
+
+static int odbc_handle_closer(pdo_dbh_t *dbh TSRMLS_DC)
+{
+ pdo_odbc_db_handle *H = (pdo_odbc_db_handle*)dbh->driver_data;
+
+ if (H->dbc != SQL_NULL_HANDLE) {
+ SQLEndTran(SQL_HANDLE_DBC, H->dbc, SQL_ROLLBACK);
+ SQLDisconnect(H->dbc);
+ SQLFreeHandle(SQL_HANDLE_DBC, H->dbc);
+ H->dbc = NULL;
+ }
+ SQLFreeHandle(SQL_HANDLE_ENV, H->env);
+ H->env = NULL;
+ pefree(H, dbh->is_persistent);
+ dbh->driver_data = NULL;
+
+ return 0;
+}
+
+static int odbc_handle_preparer(pdo_dbh_t *dbh, const char *sql, long sql_len, pdo_stmt_t *stmt, zval *driver_options TSRMLS_DC)
+{
+ RETCODE rc;
+ pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data;
+ pdo_odbc_stmt *S = ecalloc(1, sizeof(*S));
+ enum pdo_cursor_type cursor_type = PDO_CURSOR_FWDONLY;
+ int ret;
+ char *nsql = NULL;
+ int nsql_len = 0;
+
+ S->H = H;
+
+ /* before we prepare, we need to peek at the query; if it uses named parameters,
+ * we want PDO to rewrite them for us */
+ stmt->supports_placeholders = PDO_PLACEHOLDER_POSITIONAL;
+ ret = pdo_parse_params(stmt, (char*)sql, sql_len, &nsql, &nsql_len TSRMLS_CC);
+
+ if (ret == 1) {
+ /* query was re-written */
+ sql = nsql;
+ } else if (ret == -1) {
+ /* couldn't grok it */
+ strcpy(dbh->error_code, stmt->error_code);
+ efree(S);
+ return 0;
+ }
+
+ rc = SQLAllocHandle(SQL_HANDLE_STMT, H->dbc, &S->stmt);
+
+ if (rc == SQL_INVALID_HANDLE || rc == SQL_ERROR) {
+ efree(S);
+ if (nsql) {
+ efree(nsql);
+ }
+ pdo_odbc_drv_error("SQLAllocStmt");
+ return 0;
+ }
+
+ cursor_type = pdo_attr_lval(driver_options, PDO_ATTR_CURSOR, PDO_CURSOR_FWDONLY TSRMLS_CC);
+ if (cursor_type != PDO_CURSOR_FWDONLY) {
+ rc = SQLSetStmtAttr(S->stmt, SQL_ATTR_CURSOR_SCROLLABLE, (void*)SQL_SCROLLABLE, 0);
+ if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
+ pdo_odbc_stmt_error("SQLSetStmtAttr: SQL_ATTR_CURSOR_SCROLLABLE");
+ SQLFreeHandle(SQL_HANDLE_STMT, S->stmt);
+ if (nsql) {
+ efree(nsql);
+ }
+ return 0;
+ }
+ }
+
+ rc = SQLPrepare(S->stmt, (char*)sql, SQL_NTS);
+ if (nsql) {
+ efree(nsql);
+ }
+
+ stmt->driver_data = S;
+ stmt->methods = &odbc_stmt_methods;
+
+ if (rc != SQL_SUCCESS) {
+ pdo_odbc_stmt_error("SQLPrepare");
+ if (rc != SQL_SUCCESS_WITH_INFO) {
+ /* clone error information into the db handle */
+ strcpy(H->einfo.last_err_msg, S->einfo.last_err_msg);
+ H->einfo.file = S->einfo.file;
+ H->einfo.line = S->einfo.line;
+ H->einfo.what = S->einfo.what;
+ strcpy(dbh->error_code, stmt->error_code);
+ }
+ }
+
+ if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
+ return 0;
+ }
+ return 1;
+}
+
+static long odbc_handle_doer(pdo_dbh_t *dbh, const char *sql, long sql_len TSRMLS_DC)
+{
+ pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data;
+ RETCODE rc;
+ long row_count = -1;
+ PDO_ODBC_HSTMT stmt;
+
+ rc = SQLAllocHandle(SQL_HANDLE_STMT, H->dbc, &stmt);
+ if (rc != SQL_SUCCESS) {
+ pdo_odbc_drv_error("SQLAllocHandle: STMT");
+ return -1;
+ }
+
+ rc = SQLExecDirect(stmt, (char *)sql, sql_len);
+
+ if (rc == SQL_NO_DATA) {
+ /* If SQLExecDirect executes a searched update or delete statement that
+ * does not affect any rows at the data source, the call to
+ * SQLExecDirect returns SQL_NO_DATA. */
+ row_count = 0;
+ goto out;
+ }
+
+ if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
+ pdo_odbc_doer_error("SQLExecDirect");
+ goto out;
+ }
+
+ rc = SQLRowCount(stmt, &row_count);
+ if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
+ pdo_odbc_doer_error("SQLRowCount");
+ goto out;
+ }
+ if (row_count == -1) {
+ row_count = 0;
+ }
+out:
+ SQLFreeHandle(SQL_HANDLE_STMT, stmt);
+ return row_count;
+}
+
+static int odbc_handle_quoter(pdo_dbh_t *dbh, const char *unquoted, int unquotedlen, char **quoted, int *quotedlen, enum pdo_param_type param_type TSRMLS_DC)
+{
+ pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data;
+ /* TODO: figure it out */
+ return 0;
+}
+
+static int odbc_handle_begin(pdo_dbh_t *dbh TSRMLS_DC)
+{
+ if (dbh->auto_commit) {
+ /* we need to disable auto-commit now, to be able to initiate a transaction */
+ RETCODE rc;
+ pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data;
+
+ rc = SQLSetConnectAttr(H->dbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, SQL_IS_INTEGER);
+ if (rc != SQL_SUCCESS) {
+ pdo_odbc_drv_error("SQLSetConnectAttr AUTOCOMMIT = OFF");
+ return 0;
+ }
+ }
+ return 1;
+}
+
+static int odbc_handle_commit(pdo_dbh_t *dbh TSRMLS_DC)
+{
+ pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data;
+ RETCODE rc;
+
+ rc = SQLEndTran(SQL_HANDLE_DBC, H->dbc, SQL_COMMIT);
+
+ if (rc != SQL_SUCCESS) {
+ pdo_odbc_drv_error("SQLEndTran: Commit");
+
+ if (rc != SQL_SUCCESS_WITH_INFO) {
+ return 0;
+ }
+ }
+
+ if (dbh->auto_commit) {
+ /* turn auto-commit back on again */
+ rc = SQLSetConnectAttr(H->dbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_ON, SQL_IS_INTEGER);
+ if (rc != SQL_SUCCESS) {
+ pdo_odbc_drv_error("SQLSetConnectAttr AUTOCOMMIT = ON");
+ return 0;
+ }
+ }
+ return 1;
+}
+
+static int odbc_handle_rollback(pdo_dbh_t *dbh TSRMLS_DC)
+{
+ pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data;
+ RETCODE rc;
+
+ rc = SQLEndTran(SQL_HANDLE_DBC, H->dbc, SQL_ROLLBACK);
+
+ if (rc != SQL_SUCCESS) {
+ pdo_odbc_drv_error("SQLEndTran: Rollback");
+
+ if (rc != SQL_SUCCESS_WITH_INFO) {
+ return 0;
+ }
+ }
+ if (dbh->auto_commit && H->dbc) {
+ /* turn auto-commit back on again */
+ rc = SQLSetConnectAttr(H->dbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_ON, SQL_IS_INTEGER);
+ if (rc != SQL_SUCCESS) {
+ pdo_odbc_drv_error("SQLSetConnectAttr AUTOCOMMIT = ON");
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+static int odbc_handle_get_attr(pdo_dbh_t *dbh, long attr, zval *val TSRMLS_DC)
+{
+ switch (attr) {
+ case PDO_ATTR_CLIENT_VERSION:
+ ZVAL_STRING(val, "ODBC-" PDO_ODBC_TYPE, 1);
+ return 1;
+
+ case PDO_ATTR_SERVER_VERSION:
+ case PDO_ATTR_PREFETCH:
+ case PDO_ATTR_TIMEOUT:
+ case PDO_ATTR_SERVER_INFO:
+ case PDO_ATTR_CONNECTION_STATUS:
+ break;
+
+ }
+ return 0;
+}
+
+static struct pdo_dbh_methods odbc_methods = {
+ odbc_handle_closer,
+ odbc_handle_preparer,
+ odbc_handle_doer,
+ odbc_handle_quoter,
+ odbc_handle_begin,
+ odbc_handle_commit,
+ odbc_handle_rollback,
+ NULL, /* set attr */
+ NULL, /* last id */
+ pdo_odbc_fetch_error_func,
+ odbc_handle_get_attr, /* get attr */
+ NULL, /* check_liveness */
+};
+
+static int pdo_odbc_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_DC) /* {{{ */
+{
+ pdo_odbc_db_handle *H;
+ RETCODE rc;
+ int use_direct = 0;
+ SQLUINTEGER cursor_lib;
+
+ H = pecalloc(1, sizeof(*H), dbh->is_persistent);
+
+ dbh->driver_data = H;
+
+ SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &H->env);
+ rc = SQLSetEnvAttr(H->env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
+
+ if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
+ pdo_odbc_drv_error("SQLSetEnvAttr: ODBC3");
+ goto fail;
+ }
+
+#ifdef SQL_ATTR_CONNECTION_POOLING
+ if (pdo_odbc_pool_on != SQL_CP_OFF) {
+ rc = SQLSetEnvAttr(H->env, SQL_ATTR_CP_MATCH, (void*)pdo_odbc_pool_mode, 0);
+ if (rc != SQL_SUCCESS) {
+ pdo_odbc_drv_error("SQLSetEnvAttr: SQL_ATTR_CP_MATCH");
+ goto fail;
+ }
+ }
+#endif
+
+ rc = SQLAllocHandle(SQL_HANDLE_DBC, H->env, &H->dbc);
+ if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
+ pdo_odbc_drv_error("SQLAllocHandle (DBC)");
+ goto fail;
+ }
+
+ rc = SQLSetConnectAttr(H->dbc, SQL_ATTR_AUTOCOMMIT,
+ (SQLPOINTER)(dbh->auto_commit ? SQL_AUTOCOMMIT_ON : SQL_AUTOCOMMIT_OFF), SQL_IS_INTEGER);
+ if (rc != SQL_SUCCESS) {
+ pdo_odbc_drv_error("SQLSetConnectAttr AUTOCOMMIT");
+ goto fail;
+ }
+
+ /* set up the cursor library, if needed, or if configured explicitly */
+ cursor_lib = pdo_attr_lval(driver_options, PDO_ODBC_ATTR_USE_CURSOR_LIBRARY, SQL_CUR_USE_IF_NEEDED TSRMLS_CC);
+ rc = SQLSetConnectAttr(H->dbc, SQL_ODBC_CURSORS, (void*)cursor_lib, SQL_IS_INTEGER);
+ if (rc != SQL_SUCCESS && cursor_lib != SQL_CUR_USE_IF_NEEDED) {
+ pdo_odbc_drv_error("SQLSetConnectAttr SQL_ODBC_CURSORS");
+ goto fail;
+ }
+
+ if (strchr(dbh->data_source, ';')) {
+ char dsnbuf[1024];
+ short dsnbuflen;
+
+ use_direct = 1;
+
+ /* Force UID and PWD to be set in the DSN */
+ if (dbh->username && *dbh->username && !strstr(dbh->data_source, "uid")
+ && !strstr(dbh->data_source, "UID")) {
+ char *dsn;
+ spprintf(&dsn, 0, "%s;UID=%s;PWD=%s", dbh->data_source, dbh->username, dbh->password);
+ pefree((char*)dbh->data_source, dbh->is_persistent);
+ dbh->data_source = dsn;
+ }
+
+ rc = SQLDriverConnect(H->dbc, NULL, (char*)dbh->data_source, strlen(dbh->data_source),
+ dsnbuf, sizeof(dsnbuf)-1, &dsnbuflen, SQL_DRIVER_NOPROMPT);
+ }
+ if (!use_direct) {
+ rc = SQLConnect(H->dbc, (char*)dbh->data_source, SQL_NTS, dbh->username, SQL_NTS, dbh->password, SQL_NTS);
+ }
+
+ if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
+ pdo_odbc_drv_error(use_direct ? "SQLDriverConnect" : "SQLConnect");
+ goto fail;
+ }
+
+ /* TODO: if we want to play nicely, we should check to see if the driver really supports ODBC v3 or not */
+
+ dbh->methods = &odbc_methods;
+ dbh->alloc_own_columns = 1;
+
+ return 1;
+
+fail:
+ dbh->methods = &odbc_methods;
+ return 0;
+}
+/* }}} */
+
+pdo_driver_t pdo_odbc_driver = {
+ PDO_DRIVER_HEADER(odbc),
+ pdo_odbc_handle_factory
+};
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ * vim600: noet sw=4 ts=4 fdm=marker
+ * vim<600: noet sw=4 ts=4
+ */
diff --git a/ext/pdo_odbc/odbc_stmt.c b/ext/pdo_odbc/odbc_stmt.c
index 83909dab2..b26ebd265 100755
--- a/ext/pdo_odbc/odbc_stmt.c
+++ b/ext/pdo_odbc/odbc_stmt.c
@@ -1,649 +1,649 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 3.0 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available through the world-wide-web at the following url: |
- | http://www.php.net/license/3_0.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Wez Furlong <wez@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id: odbc_stmt.c,v 1.26.2.2.2.4 2007/12/31 07:20:10 sebastian Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "pdo/php_pdo.h"
-#include "pdo/php_pdo_driver.h"
-#include "php_pdo_odbc.h"
-#include "php_pdo_odbc_int.h"
-
-static void free_cols(pdo_stmt_t *stmt, pdo_odbc_stmt *S TSRMLS_DC)
-{
- if (S->cols) {
- int i;
-
- for (i = 0; i < stmt->column_count; i++) {
- if (S->cols[i].data) {
- efree(S->cols[i].data);
- }
- }
- efree(S->cols);
- S->cols = NULL;
- }
-}
-
-static int odbc_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC)
-{
- pdo_odbc_stmt *S = (pdo_odbc_stmt*)stmt->driver_data;
-
- if (S->stmt != SQL_NULL_HANDLE) {
- if (stmt->executed) {
- SQLCloseCursor(S->stmt);
- }
- SQLFreeHandle(SQL_HANDLE_STMT, S->stmt);
- S->stmt = SQL_NULL_HANDLE;
- }
-
- free_cols(stmt, S TSRMLS_CC);
-
- efree(S);
-
- return 1;
-}
-
-static int odbc_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC)
-{
- RETCODE rc;
- pdo_odbc_stmt *S = (pdo_odbc_stmt*)stmt->driver_data;
- char *buf = NULL;
- long row_count = -1;
-
- if (stmt->executed) {
- SQLCloseCursor(S->stmt);
- }
-
- rc = SQLExecute(S->stmt);
-
- while (rc == SQL_NEED_DATA) {
- struct pdo_bound_param_data *param;
- rc = SQLParamData(S->stmt, (SQLPOINTER*)&param);
- if (rc == SQL_NEED_DATA) {
- php_stream *stm;
- int len;
-
- if (Z_TYPE_P(param->parameter) != IS_RESOURCE) {
- /* they passed in a string */
- convert_to_string(param->parameter);
- SQLPutData(S->stmt, Z_STRVAL_P(param->parameter), Z_STRLEN_P(param->parameter));
- continue;
- }
-
- php_stream_from_zval_no_verify(stm, &param->parameter);
- if (!stm) {
- /* shouldn't happen either */
- pdo_odbc_stmt_error("input LOB is no longer a stream");
- SQLCloseCursor(S->stmt);
- if (buf) {
- efree(buf);
- }
- return 0;
- }
-
- /* now suck data from the stream and stick it into the database */
- if (buf == NULL) {
- buf = emalloc(8192);
- }
-
- do {
- len = php_stream_read(stm, buf, 8192);
- if (len == 0) {
- break;
- }
- SQLPutData(S->stmt, buf, len);
- } while (1);
- }
- }
-
- if (buf) {
- efree(buf);
- }
-
- switch (rc) {
- case SQL_SUCCESS:
- break;
- case SQL_NO_DATA_FOUND:
- case SQL_SUCCESS_WITH_INFO:
- pdo_odbc_stmt_error("SQLExecute");
- break;
-
- default:
- pdo_odbc_stmt_error("SQLExecute");
- return 0;
- }
-
- SQLRowCount(S->stmt, &row_count);
- stmt->row_count = row_count;
-
- if (!stmt->executed) {
- /* do first-time-only definition of bind/mapping stuff */
- SQLSMALLINT colcount;
-
- /* how many columns do we have ? */
- SQLNumResultCols(S->stmt, &colcount);
-
- stmt->column_count = (int)colcount;
- S->cols = ecalloc(colcount, sizeof(pdo_odbc_column));
- S->going_long = 0;
- }
-
- return 1;
-}
-
-static int odbc_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data *param,
- enum pdo_param_event event_type TSRMLS_DC)
-{
- pdo_odbc_stmt *S = (pdo_odbc_stmt*)stmt->driver_data;
- RETCODE rc;
- SWORD sqltype = 0, ctype = 0, scale = 0, nullable = 0;
- UDWORD precision = 0;
- pdo_odbc_param *P;
-
- /* we're only interested in parameters for prepared SQL right now */
- if (param->is_param) {
-
- switch (event_type) {
- case PDO_PARAM_EVT_FREE:
- P = param->driver_data;
- if (P) {
- efree(P);
- }
- break;
-
- case PDO_PARAM_EVT_ALLOC:
- {
- /* figure out what we're doing */
- switch (PDO_PARAM_TYPE(param->param_type)) {
- case PDO_PARAM_LOB:
- break;
-
- case PDO_PARAM_STMT:
- return 0;
-
- default:
- break;
- }
-
- rc = SQLDescribeParam(S->stmt, param->paramno+1, &sqltype, &precision, &scale, &nullable);
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- /* MS Access, for instance, doesn't support SQLDescribeParam,
- * so we need to guess */
- sqltype = PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_LOB ?
- SQL_LONGVARBINARY :
- SQL_LONGVARCHAR;
- precision = 4000;
- scale = 5;
- nullable = 1;
-
- if (param->max_value_len > 0) {
- precision = param->max_value_len;
- }
- }
- if (sqltype == SQL_BINARY || sqltype == SQL_VARBINARY || sqltype == SQL_LONGVARBINARY) {
- ctype = SQL_C_BINARY;
- } else {
- ctype = SQL_C_CHAR;
- }
-
- P = emalloc(sizeof(*P));
- param->driver_data = P;
-
- P->len = 0; /* is re-populated each EXEC_PRE */
- P->outbuf = NULL;
-
- if ((param->param_type & PDO_PARAM_INPUT_OUTPUT) == PDO_PARAM_INPUT_OUTPUT) {
- P->paramtype = SQL_PARAM_INPUT_OUTPUT;
- } else if (param->max_value_len <= 0) {
- P->paramtype = SQL_PARAM_INPUT;
- } else {
- P->paramtype = SQL_PARAM_OUTPUT;
- }
-
- if (P->paramtype != SQL_PARAM_INPUT) {
- if (PDO_PARAM_TYPE(param->param_type) != PDO_PARAM_NULL) {
- /* need an explicit buffer to hold result */
- P->len = param->max_value_len > 0 ? param->max_value_len : precision;
- P->outbuf = emalloc(P->len + 1);
- }
- }
-
- if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_LOB && P->paramtype != SQL_PARAM_INPUT) {
- pdo_odbc_stmt_error("Can't bind a lob for output");
- return 0;
- }
-
- rc = SQLBindParameter(S->stmt, param->paramno+1,
- P->paramtype, ctype, sqltype, precision, scale,
- P->paramtype == SQL_PARAM_INPUT ?
- (SQLPOINTER)param :
- P->outbuf,
- P->len,
- &P->len
- );
-
- if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) {
- return 1;
- }
- pdo_odbc_stmt_error("SQLBindParameter");
- return 0;
- }
-
- case PDO_PARAM_EVT_EXEC_PRE:
- P = param->driver_data;
- if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_LOB) {
- if (Z_TYPE_P(param->parameter) == IS_RESOURCE) {
- php_stream *stm;
- php_stream_statbuf sb;
-
- php_stream_from_zval_no_verify(stm, &param->parameter);
-
- if (!stm) {
- return 0;
- }
-
- if (0 == php_stream_stat(stm, &sb)) {
- if (P->outbuf) {
- int len, amount;
- char *ptr = P->outbuf;
- char *end = P->outbuf + P->len;
-
- P->len = 0;
- do {
- amount = end - ptr;
- if (amount == 0) {
- break;
- }
- if (amount > 8192)
- amount = 8192;
- len = php_stream_read(stm, ptr, amount);
- if (len == 0) {
- break;
- }
- ptr += len;
- P->len += len;
- } while (1);
-
- } else {
- P->len = SQL_LEN_DATA_AT_EXEC(sb.sb.st_size);
- }
- } else {
- if (P->outbuf) {
- P->len = 0;
- } else {
- P->len = SQL_LEN_DATA_AT_EXEC(0);
- }
- }
- } else {
- convert_to_string(param->parameter);
- if (P->outbuf) {
- P->len = Z_STRLEN_P(param->parameter);
- memcpy(P->outbuf, Z_STRVAL_P(param->parameter), P->len);
- } else {
- P->len = SQL_LEN_DATA_AT_EXEC(Z_STRLEN_P(param->parameter));
- }
- }
- } else if (Z_TYPE_P(param->parameter) == IS_NULL || PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_NULL) {
- P->len = SQL_NULL_DATA;
- } else {
- convert_to_string(param->parameter);
- if (P->outbuf) {
- P->len = Z_STRLEN_P(param->parameter);
- memcpy(P->outbuf, Z_STRVAL_P(param->parameter), P->len);
- } else {
- P->len = SQL_LEN_DATA_AT_EXEC(Z_STRLEN_P(param->parameter));
- }
- }
- return 1;
-
- case PDO_PARAM_EVT_EXEC_POST:
- P = param->driver_data;
- if (P->outbuf) {
- switch (P->len) {
- case SQL_NULL_DATA:
- zval_dtor(param->parameter);
- ZVAL_NULL(param->parameter);
- break;
- default:
- convert_to_string(param->parameter);
- Z_STRVAL_P(param->parameter) = erealloc(Z_STRVAL_P(param->parameter), P->len+1);
- memcpy(Z_STRVAL_P(param->parameter), P->outbuf, P->len);
- Z_STRLEN_P(param->parameter) = P->len;
- Z_STRVAL_P(param->parameter)[P->len] = '\0';
- }
- }
- return 1;
- }
- }
- return 1;
-}
-
-static int odbc_stmt_fetch(pdo_stmt_t *stmt,
- enum pdo_fetch_orientation ori, long offset TSRMLS_DC)
-{
- pdo_odbc_stmt *S = (pdo_odbc_stmt*)stmt->driver_data;
- RETCODE rc;
- SQLSMALLINT odbcori;
-
- switch (ori) {
- case PDO_FETCH_ORI_NEXT: odbcori = SQL_FETCH_NEXT; break;
- case PDO_FETCH_ORI_PRIOR: odbcori = SQL_FETCH_PRIOR; break;
- case PDO_FETCH_ORI_FIRST: odbcori = SQL_FETCH_FIRST; break;
- case PDO_FETCH_ORI_LAST: odbcori = SQL_FETCH_LAST; break;
- case PDO_FETCH_ORI_ABS: odbcori = SQL_FETCH_ABSOLUTE; break;
- case PDO_FETCH_ORI_REL: odbcori = SQL_FETCH_RELATIVE; break;
- default:
- strcpy(stmt->error_code, "HY106");
- return 0;
- }
- rc = SQLFetchScroll(S->stmt, odbcori, offset);
-
- if (rc == SQL_SUCCESS) {
- return 1;
- }
- if (rc == SQL_SUCCESS_WITH_INFO) {
- pdo_odbc_stmt_error("SQLFetchScroll");
- return 1;
- }
-
- if (rc == SQL_NO_DATA) {
- /* pdo_odbc_stmt_error("SQLFetchScroll"); */
- return 0;
- }
-
- pdo_odbc_stmt_error("SQLFetchScroll");
-
- return 0;
-}
-
-static int odbc_stmt_describe(pdo_stmt_t *stmt, int colno TSRMLS_DC)
-{
- pdo_odbc_stmt *S = (pdo_odbc_stmt*)stmt->driver_data;
- struct pdo_column_data *col = &stmt->columns[colno];
- zend_bool dyn = FALSE;
- RETCODE rc;
- SWORD colnamelen;
- SDWORD colsize, displaysize;
-
- rc = SQLDescribeCol(S->stmt, colno+1, S->cols[colno].colname,
- sizeof(S->cols[colno].colname)-1, &colnamelen,
- &S->cols[colno].coltype, &colsize, NULL, NULL);
-
- if (rc != SQL_SUCCESS) {
- pdo_odbc_stmt_error("SQLDescribeCol");
- if (rc != SQL_SUCCESS_WITH_INFO) {
- return 0;
- }
- }
-
- rc = SQLColAttribute(S->stmt, colno+1,
- SQL_DESC_DISPLAY_SIZE,
- NULL, 0, NULL, &displaysize);
-
- if (rc != SQL_SUCCESS) {
- pdo_odbc_stmt_error("SQLColAttribute");
- if (rc != SQL_SUCCESS_WITH_INFO) {
- return 0;
- }
- }
- colsize = displaysize;
-
- col->maxlen = S->cols[colno].datalen = colsize;
- col->namelen = colnamelen;
- col->name = estrdup(S->cols[colno].colname);
-
- /* returning data as a string */
- col->param_type = PDO_PARAM_STR;
-
- /* tell ODBC to put it straight into our buffer, but only if it
- * isn't "long" data, and only if we haven't already bound a long
- * column. */
- if (colsize < 256 && !S->going_long) {
- S->cols[colno].data = emalloc(colsize+1);
- S->cols[colno].is_long = 0;
-
- rc = SQLBindCol(S->stmt, colno+1, SQL_C_CHAR, S->cols[colno].data,
- S->cols[colno].datalen+1, &S->cols[colno].fetched_len);
-
- if (rc != SQL_SUCCESS) {
- pdo_odbc_stmt_error("SQLBindCol");
- return 0;
- }
- } else {
- /* allocate a smaller buffer to keep around for smaller
- * "long" columns */
- S->cols[colno].data = emalloc(256);
- S->going_long = 1;
- S->cols[colno].is_long = 1;
- }
-
- return 1;
-}
-
-static int odbc_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, unsigned long *len, int *caller_frees TSRMLS_DC)
-{
- pdo_odbc_stmt *S = (pdo_odbc_stmt*)stmt->driver_data;
- pdo_odbc_column *C = &S->cols[colno];
-
- /* if it is a column containing "long" data, perform late binding now */
- if (C->is_long) {
- unsigned long alloced = 4096;
- unsigned long used = 0;
- char *buf;
- RETCODE rc;
-
- /* fetch it into C->data, which is allocated with a length
- * of 256 bytes; if there is more to be had, we then allocate
- * bigger buffer for the caller to free */
-
- rc = SQLGetData(S->stmt, colno+1, SQL_C_CHAR, C->data,
- 256, &C->fetched_len);
-
- if (rc == SQL_SUCCESS) {
- /* all the data fit into our little buffer;
- * jump down to the generic bound data case */
- goto in_data;
- }
-
- if (rc == SQL_SUCCESS_WITH_INFO) {
- /* promote up to a bigger buffer */
-
- if (C->fetched_len != SQL_NO_TOTAL) {
- /* use size suggested by the driver, if it knows it */
- alloced = C->fetched_len + 1;
- }
-
- buf = emalloc(alloced);
- memcpy(buf, C->data, 256);
- used = 255; /* not 256; the driver NUL terminated the buffer */
-
- do {
- C->fetched_len = 0;
- rc = SQLGetData(S->stmt, colno+1, SQL_C_CHAR,
- buf + used, alloced - used,
- &C->fetched_len);
-
- if (rc == SQL_NO_DATA) {
- /* we got the lot */
- break;
- } else if (rc != SQL_SUCCESS) {
- pdo_odbc_stmt_error("SQLGetData");
- if (rc != SQL_SUCCESS_WITH_INFO) {
- break;
- }
- }
-
- if (C->fetched_len == SQL_NO_TOTAL) {
- used += alloced - used;
- } else {
- used += C->fetched_len;
- }
-
- if (rc == SQL_SUCCESS) {
- /* this was the final fetch */
- break;
- }
-
- /* we need to fetch another chunk; resize the
- * buffer */
- alloced *= 2;
- buf = erealloc(buf, alloced);
- } while (1);
-
- /* size down */
- if (used < alloced - 1024) {
- alloced = used+1;
- buf = erealloc(buf, used+1);
- }
- buf[used] = '\0';
- *ptr = buf;
- *caller_frees = 1;
- *len = used;
- return 1;
- }
-
- /* something went caca */
- *ptr = NULL;
- *len = 0;
- return 1;
- }
-
-in_data:
- /* check the indicator to ensure that the data is intact */
- if (C->fetched_len == SQL_NULL_DATA) {
- /* A NULL value */
- *ptr = NULL;
- *len = 0;
- return 1;
- } else if (C->fetched_len >= 0) {
- /* it was stored perfectly */
- *ptr = C->data;
- *len = C->fetched_len;
- return 1;
- } else {
- /* no data? */
- *ptr = NULL;
- *len = 0;
- return 1;
- }
-}
-
-static int odbc_stmt_set_param(pdo_stmt_t *stmt, long attr, zval *val TSRMLS_DC)
-{
- SQLRETURN rc;
- pdo_odbc_stmt *S = (pdo_odbc_stmt*)stmt->driver_data;
-
- switch (attr) {
- case PDO_ATTR_CURSOR_NAME:
- convert_to_string(val);
- rc = SQLSetCursorName(S->stmt, Z_STRVAL_P(val), Z_STRLEN_P(val));
-
- if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) {
- return 1;
- }
- pdo_odbc_stmt_error("SQLSetCursorName");
- return 0;
-
- default:
- strcpy(S->einfo.last_err_msg, "Unknown Attribute");
- S->einfo.what = "setAttribute";
- strcpy(S->einfo.last_state, "IM0001");
- return -1;
- }
-}
-
-static int odbc_stmt_get_attr(pdo_stmt_t *stmt, long attr, zval *val TSRMLS_DC)
-{
- SQLRETURN rc;
- pdo_odbc_stmt *S = (pdo_odbc_stmt*)stmt->driver_data;
-
- switch (attr) {
- case PDO_ATTR_CURSOR_NAME:
- {
- char buf[256];
- SQLSMALLINT len = 0;
- rc = SQLGetCursorName(S->stmt, buf, sizeof(buf), &len);
-
- if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) {
- ZVAL_STRINGL(val, buf, len, 1);
- return 1;
- }
- pdo_odbc_stmt_error("SQLGetCursorName");
- return 0;
- }
-
- default:
- strcpy(S->einfo.last_err_msg, "Unknown Attribute");
- S->einfo.what = "getAttribute";
- strcpy(S->einfo.last_state, "IM0001");
- return -1;
- }
-}
-
-static int odbc_stmt_next_rowset(pdo_stmt_t *stmt TSRMLS_DC)
-{
- SQLRETURN rc;
- SQLSMALLINT colcount;
- pdo_odbc_stmt *S = (pdo_odbc_stmt*)stmt->driver_data;
-
- /* NOTE: can't guarantee that output or input/output parameters
- * are set until this fella returns SQL_NO_DATA, according to
- * MSDN ODBC docs */
- rc = SQLMoreResults(S->stmt);
-
- if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- return 0;
- }
-
- free_cols(stmt, S TSRMLS_CC);
- /* how many columns do we have ? */
- SQLNumResultCols(S->stmt, &colcount);
- stmt->column_count = (int)colcount;
- S->cols = ecalloc(colcount, sizeof(pdo_odbc_column));
- S->going_long = 0;
-
- return 1;
-}
-
-struct pdo_stmt_methods odbc_stmt_methods = {
- odbc_stmt_dtor,
- odbc_stmt_execute,
- odbc_stmt_fetch,
- odbc_stmt_describe,
- odbc_stmt_get_col,
- odbc_stmt_param_hook,
- odbc_stmt_set_param,
- odbc_stmt_get_attr, /* get attr */
- NULL, /* get column meta */
- odbc_stmt_next_rowset
-};
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
+/*
+ +----------------------------------------------------------------------+
+ | PHP Version 5 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997-2009 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.0 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.php.net/license/3_0.txt. |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Author: Wez Furlong <wez@php.net> |
+ +----------------------------------------------------------------------+
+*/
+
+/* $Id: odbc_stmt.c,v 1.26.2.2.2.6 2008/12/31 11:17:42 sebastian Exp $ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "php.h"
+#include "php_ini.h"
+#include "ext/standard/info.h"
+#include "pdo/php_pdo.h"
+#include "pdo/php_pdo_driver.h"
+#include "php_pdo_odbc.h"
+#include "php_pdo_odbc_int.h"
+
+static void free_cols(pdo_stmt_t *stmt, pdo_odbc_stmt *S TSRMLS_DC)
+{
+ if (S->cols) {
+ int i;
+
+ for (i = 0; i < stmt->column_count; i++) {
+ if (S->cols[i].data) {
+ efree(S->cols[i].data);
+ }
+ }
+ efree(S->cols);
+ S->cols = NULL;
+ }
+}
+
+static int odbc_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC)
+{
+ pdo_odbc_stmt *S = (pdo_odbc_stmt*)stmt->driver_data;
+
+ if (S->stmt != SQL_NULL_HANDLE) {
+ if (stmt->executed) {
+ SQLCloseCursor(S->stmt);
+ }
+ SQLFreeHandle(SQL_HANDLE_STMT, S->stmt);
+ S->stmt = SQL_NULL_HANDLE;
+ }
+
+ free_cols(stmt, S TSRMLS_CC);
+
+ efree(S);
+
+ return 1;
+}
+
+static int odbc_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC)
+{
+ RETCODE rc;
+ pdo_odbc_stmt *S = (pdo_odbc_stmt*)stmt->driver_data;
+ char *buf = NULL;
+ long row_count = -1;
+
+ if (stmt->executed) {
+ SQLCloseCursor(S->stmt);
+ }
+
+ rc = SQLExecute(S->stmt);
+
+ while (rc == SQL_NEED_DATA) {
+ struct pdo_bound_param_data *param;
+ rc = SQLParamData(S->stmt, (SQLPOINTER*)&param);
+ if (rc == SQL_NEED_DATA) {
+ php_stream *stm;
+ int len;
+
+ if (Z_TYPE_P(param->parameter) != IS_RESOURCE) {
+ /* they passed in a string */
+ convert_to_string(param->parameter);
+ SQLPutData(S->stmt, Z_STRVAL_P(param->parameter), Z_STRLEN_P(param->parameter));
+ continue;
+ }
+
+ php_stream_from_zval_no_verify(stm, &param->parameter);
+ if (!stm) {
+ /* shouldn't happen either */
+ pdo_odbc_stmt_error("input LOB is no longer a stream");
+ SQLCloseCursor(S->stmt);
+ if (buf) {
+ efree(buf);
+ }
+ return 0;
+ }
+
+ /* now suck data from the stream and stick it into the database */
+ if (buf == NULL) {
+ buf = emalloc(8192);
+ }
+
+ do {
+ len = php_stream_read(stm, buf, 8192);
+ if (len == 0) {
+ break;
+ }
+ SQLPutData(S->stmt, buf, len);
+ } while (1);
+ }
+ }
+
+ if (buf) {
+ efree(buf);
+ }
+
+ switch (rc) {
+ case SQL_SUCCESS:
+ break;
+ case SQL_NO_DATA_FOUND:
+ case SQL_SUCCESS_WITH_INFO:
+ pdo_odbc_stmt_error("SQLExecute");
+ break;
+
+ default:
+ pdo_odbc_stmt_error("SQLExecute");
+ return 0;
+ }
+
+ SQLRowCount(S->stmt, &row_count);
+ stmt->row_count = row_count;
+
+ if (!stmt->executed) {
+ /* do first-time-only definition of bind/mapping stuff */
+ SQLSMALLINT colcount;
+
+ /* how many columns do we have ? */
+ SQLNumResultCols(S->stmt, &colcount);
+
+ stmt->column_count = (int)colcount;
+ S->cols = ecalloc(colcount, sizeof(pdo_odbc_column));
+ S->going_long = 0;
+ }
+
+ return 1;
+}
+
+static int odbc_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data *param,
+ enum pdo_param_event event_type TSRMLS_DC)
+{
+ pdo_odbc_stmt *S = (pdo_odbc_stmt*)stmt->driver_data;
+ RETCODE rc;
+ SWORD sqltype = 0, ctype = 0, scale = 0, nullable = 0;
+ UDWORD precision = 0;
+ pdo_odbc_param *P;
+
+ /* we're only interested in parameters for prepared SQL right now */
+ if (param->is_param) {
+
+ switch (event_type) {
+ case PDO_PARAM_EVT_FREE:
+ P = param->driver_data;
+ if (P) {
+ efree(P);
+ }
+ break;
+
+ case PDO_PARAM_EVT_ALLOC:
+ {
+ /* figure out what we're doing */
+ switch (PDO_PARAM_TYPE(param->param_type)) {
+ case PDO_PARAM_LOB:
+ break;
+
+ case PDO_PARAM_STMT:
+ return 0;
+
+ default:
+ break;
+ }
+
+ rc = SQLDescribeParam(S->stmt, param->paramno+1, &sqltype, &precision, &scale, &nullable);
+ if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
+ /* MS Access, for instance, doesn't support SQLDescribeParam,
+ * so we need to guess */
+ sqltype = PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_LOB ?
+ SQL_LONGVARBINARY :
+ SQL_LONGVARCHAR;
+ precision = 4000;
+ scale = 5;
+ nullable = 1;
+
+ if (param->max_value_len > 0) {
+ precision = param->max_value_len;
+ }
+ }
+ if (sqltype == SQL_BINARY || sqltype == SQL_VARBINARY || sqltype == SQL_LONGVARBINARY) {
+ ctype = SQL_C_BINARY;
+ } else {
+ ctype = SQL_C_CHAR;
+ }
+
+ P = emalloc(sizeof(*P));
+ param->driver_data = P;
+
+ P->len = 0; /* is re-populated each EXEC_PRE */
+ P->outbuf = NULL;
+
+ if ((param->param_type & PDO_PARAM_INPUT_OUTPUT) == PDO_PARAM_INPUT_OUTPUT) {
+ P->paramtype = SQL_PARAM_INPUT_OUTPUT;
+ } else if (param->max_value_len <= 0) {
+ P->paramtype = SQL_PARAM_INPUT;
+ } else {
+ P->paramtype = SQL_PARAM_OUTPUT;
+ }
+
+ if (P->paramtype != SQL_PARAM_INPUT) {
+ if (PDO_PARAM_TYPE(param->param_type) != PDO_PARAM_NULL) {
+ /* need an explicit buffer to hold result */
+ P->len = param->max_value_len > 0 ? param->max_value_len : precision;
+ P->outbuf = emalloc(P->len + 1);
+ }
+ }
+
+ if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_LOB && P->paramtype != SQL_PARAM_INPUT) {
+ pdo_odbc_stmt_error("Can't bind a lob for output");
+ return 0;
+ }
+
+ rc = SQLBindParameter(S->stmt, param->paramno+1,
+ P->paramtype, ctype, sqltype, precision, scale,
+ P->paramtype == SQL_PARAM_INPUT ?
+ (SQLPOINTER)param :
+ P->outbuf,
+ P->len,
+ &P->len
+ );
+
+ if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) {
+ return 1;
+ }
+ pdo_odbc_stmt_error("SQLBindParameter");
+ return 0;
+ }
+
+ case PDO_PARAM_EVT_EXEC_PRE:
+ P = param->driver_data;
+ if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_LOB) {
+ if (Z_TYPE_P(param->parameter) == IS_RESOURCE) {
+ php_stream *stm;
+ php_stream_statbuf sb;
+
+ php_stream_from_zval_no_verify(stm, &param->parameter);
+
+ if (!stm) {
+ return 0;
+ }
+
+ if (0 == php_stream_stat(stm, &sb)) {
+ if (P->outbuf) {
+ int len, amount;
+ char *ptr = P->outbuf;
+ char *end = P->outbuf + P->len;
+
+ P->len = 0;
+ do {
+ amount = end - ptr;
+ if (amount == 0) {
+ break;
+ }
+ if (amount > 8192)
+ amount = 8192;
+ len = php_stream_read(stm, ptr, amount);
+ if (len == 0) {
+ break;
+ }
+ ptr += len;
+ P->len += len;
+ } while (1);
+
+ } else {
+ P->len = SQL_LEN_DATA_AT_EXEC(sb.sb.st_size);
+ }
+ } else {
+ if (P->outbuf) {
+ P->len = 0;
+ } else {
+ P->len = SQL_LEN_DATA_AT_EXEC(0);
+ }
+ }
+ } else {
+ convert_to_string(param->parameter);
+ if (P->outbuf) {
+ P->len = Z_STRLEN_P(param->parameter);
+ memcpy(P->outbuf, Z_STRVAL_P(param->parameter), P->len);
+ } else {
+ P->len = SQL_LEN_DATA_AT_EXEC(Z_STRLEN_P(param->parameter));
+ }
+ }
+ } else if (Z_TYPE_P(param->parameter) == IS_NULL || PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_NULL) {
+ P->len = SQL_NULL_DATA;
+ } else {
+ convert_to_string(param->parameter);
+ if (P->outbuf) {
+ P->len = Z_STRLEN_P(param->parameter);
+ memcpy(P->outbuf, Z_STRVAL_P(param->parameter), P->len);
+ } else {
+ P->len = SQL_LEN_DATA_AT_EXEC(Z_STRLEN_P(param->parameter));
+ }
+ }
+ return 1;
+
+ case PDO_PARAM_EVT_EXEC_POST:
+ P = param->driver_data;
+ if (P->outbuf) {
+ switch (P->len) {
+ case SQL_NULL_DATA:
+ zval_dtor(param->parameter);
+ ZVAL_NULL(param->parameter);
+ break;
+ default:
+ convert_to_string(param->parameter);
+ Z_STRVAL_P(param->parameter) = erealloc(Z_STRVAL_P(param->parameter), P->len+1);
+ memcpy(Z_STRVAL_P(param->parameter), P->outbuf, P->len);
+ Z_STRLEN_P(param->parameter) = P->len;
+ Z_STRVAL_P(param->parameter)[P->len] = '\0';
+ }
+ }
+ return 1;
+ }
+ }
+ return 1;
+}
+
+static int odbc_stmt_fetch(pdo_stmt_t *stmt,
+ enum pdo_fetch_orientation ori, long offset TSRMLS_DC)
+{
+ pdo_odbc_stmt *S = (pdo_odbc_stmt*)stmt->driver_data;
+ RETCODE rc;
+ SQLSMALLINT odbcori;
+
+ switch (ori) {
+ case PDO_FETCH_ORI_NEXT: odbcori = SQL_FETCH_NEXT; break;
+ case PDO_FETCH_ORI_PRIOR: odbcori = SQL_FETCH_PRIOR; break;
+ case PDO_FETCH_ORI_FIRST: odbcori = SQL_FETCH_FIRST; break;
+ case PDO_FETCH_ORI_LAST: odbcori = SQL_FETCH_LAST; break;
+ case PDO_FETCH_ORI_ABS: odbcori = SQL_FETCH_ABSOLUTE; break;
+ case PDO_FETCH_ORI_REL: odbcori = SQL_FETCH_RELATIVE; break;
+ default:
+ strcpy(stmt->error_code, "HY106");
+ return 0;
+ }
+ rc = SQLFetchScroll(S->stmt, odbcori, offset);
+
+ if (rc == SQL_SUCCESS) {
+ return 1;
+ }
+ if (rc == SQL_SUCCESS_WITH_INFO) {
+ pdo_odbc_stmt_error("SQLFetchScroll");
+ return 1;
+ }
+
+ if (rc == SQL_NO_DATA) {
+ /* pdo_odbc_stmt_error("SQLFetchScroll"); */
+ return 0;
+ }
+
+ pdo_odbc_stmt_error("SQLFetchScroll");
+
+ return 0;
+}
+
+static int odbc_stmt_describe(pdo_stmt_t *stmt, int colno TSRMLS_DC)
+{
+ pdo_odbc_stmt *S = (pdo_odbc_stmt*)stmt->driver_data;
+ struct pdo_column_data *col = &stmt->columns[colno];
+ zend_bool dyn = FALSE;
+ RETCODE rc;
+ SWORD colnamelen;
+ SDWORD colsize, displaysize;
+
+ rc = SQLDescribeCol(S->stmt, colno+1, S->cols[colno].colname,
+ sizeof(S->cols[colno].colname)-1, &colnamelen,
+ &S->cols[colno].coltype, &colsize, NULL, NULL);
+
+ if (rc != SQL_SUCCESS) {
+ pdo_odbc_stmt_error("SQLDescribeCol");
+ if (rc != SQL_SUCCESS_WITH_INFO) {
+ return 0;
+ }
+ }
+
+ rc = SQLColAttribute(S->stmt, colno+1,
+ SQL_DESC_DISPLAY_SIZE,
+ NULL, 0, NULL, &displaysize);
+
+ if (rc != SQL_SUCCESS) {
+ pdo_odbc_stmt_error("SQLColAttribute");
+ if (rc != SQL_SUCCESS_WITH_INFO) {
+ return 0;
+ }
+ }
+ colsize = displaysize;
+
+ col->maxlen = S->cols[colno].datalen = colsize;
+ col->namelen = colnamelen;
+ col->name = estrdup(S->cols[colno].colname);
+
+ /* returning data as a string */
+ col->param_type = PDO_PARAM_STR;
+
+ /* tell ODBC to put it straight into our buffer, but only if it
+ * isn't "long" data, and only if we haven't already bound a long
+ * column. */
+ if (colsize < 256 && !S->going_long) {
+ S->cols[colno].data = emalloc(colsize+1);
+ S->cols[colno].is_long = 0;
+
+ rc = SQLBindCol(S->stmt, colno+1, SQL_C_CHAR, S->cols[colno].data,
+ S->cols[colno].datalen+1, &S->cols[colno].fetched_len);
+
+ if (rc != SQL_SUCCESS) {
+ pdo_odbc_stmt_error("SQLBindCol");
+ return 0;
+ }
+ } else {
+ /* allocate a smaller buffer to keep around for smaller
+ * "long" columns */
+ S->cols[colno].data = emalloc(256);
+ S->going_long = 1;
+ S->cols[colno].is_long = 1;
+ }
+
+ return 1;
+}
+
+static int odbc_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, unsigned long *len, int *caller_frees TSRMLS_DC)
+{
+ pdo_odbc_stmt *S = (pdo_odbc_stmt*)stmt->driver_data;
+ pdo_odbc_column *C = &S->cols[colno];
+
+ /* if it is a column containing "long" data, perform late binding now */
+ if (C->is_long) {
+ unsigned long alloced = 4096;
+ unsigned long used = 0;
+ char *buf;
+ RETCODE rc;
+
+ /* fetch it into C->data, which is allocated with a length
+ * of 256 bytes; if there is more to be had, we then allocate
+ * bigger buffer for the caller to free */
+
+ rc = SQLGetData(S->stmt, colno+1, SQL_C_CHAR, C->data,
+ 256, &C->fetched_len);
+
+ if (rc == SQL_SUCCESS) {
+ /* all the data fit into our little buffer;
+ * jump down to the generic bound data case */
+ goto in_data;
+ }
+
+ if (rc == SQL_SUCCESS_WITH_INFO) {
+ /* promote up to a bigger buffer */
+
+ if (C->fetched_len != SQL_NO_TOTAL) {
+ /* use size suggested by the driver, if it knows it */
+ alloced = C->fetched_len + 1;
+ }
+
+ buf = emalloc(alloced);
+ memcpy(buf, C->data, 256);
+ used = 255; /* not 256; the driver NUL terminated the buffer */
+
+ do {
+ C->fetched_len = 0;
+ rc = SQLGetData(S->stmt, colno+1, SQL_C_CHAR,
+ buf + used, alloced - used,
+ &C->fetched_len);
+
+ if (rc == SQL_NO_DATA) {
+ /* we got the lot */
+ break;
+ } else if (rc != SQL_SUCCESS) {
+ pdo_odbc_stmt_error("SQLGetData");
+ if (rc != SQL_SUCCESS_WITH_INFO) {
+ break;
+ }
+ }
+
+ if (C->fetched_len == SQL_NO_TOTAL) {
+ used += alloced - used;
+ } else {
+ used += C->fetched_len;
+ }
+
+ if (rc == SQL_SUCCESS) {
+ /* this was the final fetch */
+ break;
+ }
+
+ /* we need to fetch another chunk; resize the
+ * buffer */
+ alloced *= 2;
+ buf = erealloc(buf, alloced);
+ } while (1);
+
+ /* size down */
+ if (used < alloced - 1024) {
+ alloced = used+1;
+ buf = erealloc(buf, used+1);
+ }
+ buf[used] = '\0';
+ *ptr = buf;
+ *caller_frees = 1;
+ *len = used;
+ return 1;
+ }
+
+ /* something went caca */
+ *ptr = NULL;
+ *len = 0;
+ return 1;
+ }
+
+in_data:
+ /* check the indicator to ensure that the data is intact */
+ if (C->fetched_len == SQL_NULL_DATA) {
+ /* A NULL value */
+ *ptr = NULL;
+ *len = 0;
+ return 1;
+ } else if (C->fetched_len >= 0) {
+ /* it was stored perfectly */
+ *ptr = C->data;
+ *len = C->fetched_len;
+ return 1;
+ } else {
+ /* no data? */
+ *ptr = NULL;
+ *len = 0;
+ return 1;
+ }
+}
+
+static int odbc_stmt_set_param(pdo_stmt_t *stmt, long attr, zval *val TSRMLS_DC)
+{
+ SQLRETURN rc;
+ pdo_odbc_stmt *S = (pdo_odbc_stmt*)stmt->driver_data;
+
+ switch (attr) {
+ case PDO_ATTR_CURSOR_NAME:
+ convert_to_string(val);
+ rc = SQLSetCursorName(S->stmt, Z_STRVAL_P(val), Z_STRLEN_P(val));
+
+ if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) {
+ return 1;
+ }
+ pdo_odbc_stmt_error("SQLSetCursorName");
+ return 0;
+
+ default:
+ strcpy(S->einfo.last_err_msg, "Unknown Attribute");
+ S->einfo.what = "setAttribute";
+ strcpy(S->einfo.last_state, "IM0001");
+ return -1;
+ }
+}
+
+static int odbc_stmt_get_attr(pdo_stmt_t *stmt, long attr, zval *val TSRMLS_DC)
+{
+ SQLRETURN rc;
+ pdo_odbc_stmt *S = (pdo_odbc_stmt*)stmt->driver_data;
+
+ switch (attr) {
+ case PDO_ATTR_CURSOR_NAME:
+ {
+ char buf[256];
+ SQLSMALLINT len = 0;
+ rc = SQLGetCursorName(S->stmt, buf, sizeof(buf), &len);
+
+ if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) {
+ ZVAL_STRINGL(val, buf, len, 1);
+ return 1;
+ }
+ pdo_odbc_stmt_error("SQLGetCursorName");
+ return 0;
+ }
+
+ default:
+ strcpy(S->einfo.last_err_msg, "Unknown Attribute");
+ S->einfo.what = "getAttribute";
+ strcpy(S->einfo.last_state, "IM0001");
+ return -1;
+ }
+}
+
+static int odbc_stmt_next_rowset(pdo_stmt_t *stmt TSRMLS_DC)
+{
+ SQLRETURN rc;
+ SQLSMALLINT colcount;
+ pdo_odbc_stmt *S = (pdo_odbc_stmt*)stmt->driver_data;
+
+ /* NOTE: can't guarantee that output or input/output parameters
+ * are set until this fella returns SQL_NO_DATA, according to
+ * MSDN ODBC docs */
+ rc = SQLMoreResults(S->stmt);
+
+ if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
+ return 0;
+ }
+
+ free_cols(stmt, S TSRMLS_CC);
+ /* how many columns do we have ? */
+ SQLNumResultCols(S->stmt, &colcount);
+ stmt->column_count = (int)colcount;
+ S->cols = ecalloc(colcount, sizeof(pdo_odbc_column));
+ S->going_long = 0;
+
+ return 1;
+}
+
+struct pdo_stmt_methods odbc_stmt_methods = {
+ odbc_stmt_dtor,
+ odbc_stmt_execute,
+ odbc_stmt_fetch,
+ odbc_stmt_describe,
+ odbc_stmt_get_col,
+ odbc_stmt_param_hook,
+ odbc_stmt_set_param,
+ odbc_stmt_get_attr, /* get attr */
+ NULL, /* get column meta */
+ odbc_stmt_next_rowset
+};
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ * vim600: noet sw=4 ts=4 fdm=marker
+ * vim<600: noet sw=4 ts=4
+ */
diff --git a/ext/pdo_odbc/pdo_odbc.c b/ext/pdo_odbc/pdo_odbc.c
index 1eeed26d3..f62e4b90e 100755
--- a/ext/pdo_odbc/pdo_odbc.c
+++ b/ext/pdo_odbc/pdo_odbc.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.0 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pdo_odbc.c,v 1.14.2.7.2.3 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: pdo_odbc.c,v 1.14.2.7.2.4 2008/12/31 11:17:42 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/pdo_odbc/php_pdo_odbc.h b/ext/pdo_odbc/php_pdo_odbc.h
index 9fc026e99..a13122f43 100644
--- a/ext/pdo_odbc/php_pdo_odbc.h
+++ b/ext/pdo_odbc/php_pdo_odbc.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.0 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pdo_odbc.h,v 1.2.4.4 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: php_pdo_odbc.h,v 1.2.4.5 2008/12/31 11:17:42 sebastian Exp $ */
#ifndef PHP_PDO_ODBC_H
#define PHP_PDO_ODBC_H
diff --git a/ext/pdo_odbc/php_pdo_odbc_int.h b/ext/pdo_odbc/php_pdo_odbc_int.h
index 89e91b5a1..920343008 100755
--- a/ext/pdo_odbc/php_pdo_odbc_int.h
+++ b/ext/pdo_odbc/php_pdo_odbc_int.h
@@ -1,185 +1,185 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 3.0 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available through the world-wide-web at the following url: |
- | http://www.php.net/license/3_0.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Wez Furlong <wez@php.net> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id: php_pdo_odbc_int.h,v 1.9.2.1.2.3 2007/12/31 07:20:10 sebastian Exp $ */
-
-#ifdef PHP_WIN32
-# define PDO_ODBC_TYPE "Win32"
-#endif
-
-#ifndef PDO_ODBC_TYPE
-# warning Please fix configure to give your ODBC libraries a name
-# define PDO_ODBC_TYPE "Unknown"
-#endif
-
-/* {{{ Roll a dice, pick a header at random... */
-#if HAVE_SQLCLI1_H
-# include <sqlcli1.h>
-# if defined(DB268K) && HAVE_LIBRARYMANAGER_H
-# include <LibraryManager.h>
-# endif
-#endif
-
-#if HAVE_ODBC_H
-# include <odbc.h>
-#endif
-
-#if HAVE_IODBC_H
-# include <iodbc.h>
-#endif
-
-#if HAVE_SQLUNIX_H && !defined(PHP_WIN32)
-# include <sqlunix.h>
-#endif
-
-#if HAVE_SQLTYPES_H
-# include <sqltypes.h>
-#endif
-
-#if HAVE_SQLUCODE_H
-# include <sqlucode.h>
-#endif
-
-#if HAVE_SQL_H
-# include <sql.h>
-#endif
-
-#if HAVE_ISQL_H
-# include <isql.h>
-#endif
-
-#if HAVE_SQLEXT_H
-# include <sqlext.h>
-#endif
-
-#if HAVE_ISQLEXT_H
-# include <isqlext.h>
-#endif
-
-#if HAVE_UDBCEXT_H
-# include <udbcext.h>
-#endif
-
-#if HAVE_CLI0CORE_H
-# include <cli0core.h>
-#endif
-
-#if HAVE_CLI0EXT1_H
-# include <cli0ext.h>
-#endif
-
-#if HAVE_CLI0CLI_H
-# include <cli0cli.h>
-#endif
-
-#if HAVE_CLI0DEFS_H
-# include <cli0defs.h>
-#endif
-
-#if HAVE_CLI0ENV_H
-# include <cli0env.h>
-#endif
-
-#if HAVE_ODBCSDK_H
-# include <odbcsdk.h>
-#endif
-
-/* }}} */
-
-/* {{{ Figure out the type for handles */
-#if !defined(HENV) && !defined(SQLHENV) && defined(SQLHANDLE)
-# define PDO_ODBC_HENV SQLHANDLE
-# define PDO_ODBC_HDBC SQLHANDLE
-# define PDO_ODBC_HSTMT SQLHANDLE
-#elif !defined(HENV) && (defined(SQLHENV) || defined(DB2CLI_VER))
-# define PDO_ODBC_HENV SQLHENV
-# define PDO_ODBC_HDBC SQLHDBC
-# define PDO_ODBC_HSTMT SQLHSTMT
-#else
-# define PDO_ODBC_HENV HENV
-# define PDO_ODBC_HDBC HDBC
-# define PDO_ODBC_HSTMT HSTMT
-#endif
-/* }}} */
-
-typedef struct {
- char last_state[6];
- char last_err_msg[SQL_MAX_MESSAGE_LENGTH];
- SDWORD last_error;
- const char *file, *what;
- int line;
-} pdo_odbc_errinfo;
-
-typedef struct {
- PDO_ODBC_HENV env;
- PDO_ODBC_HDBC dbc;
- pdo_odbc_errinfo einfo;
-} pdo_odbc_db_handle;
-
-typedef struct {
- char *data;
- unsigned long datalen;
- long fetched_len;
- SWORD coltype;
- char colname[128];
- unsigned is_long;
-} pdo_odbc_column;
-
-typedef struct {
- PDO_ODBC_HSTMT stmt;
- pdo_odbc_column *cols;
- pdo_odbc_db_handle *H;
- pdo_odbc_errinfo einfo;
- unsigned going_long:1;
- unsigned _spare:31;
-} pdo_odbc_stmt;
-
-typedef struct {
- SQLINTEGER len;
- SQLSMALLINT paramtype;
- char *outbuf;
-} pdo_odbc_param;
-
-extern pdo_driver_t pdo_odbc_driver;
-extern struct pdo_stmt_methods odbc_stmt_methods;
-
-void pdo_odbc_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, PDO_ODBC_HSTMT statement, char *what, const char *file, int line TSRMLS_DC);
-#define pdo_odbc_drv_error(what) pdo_odbc_error(dbh, NULL, SQL_NULL_HSTMT, what, __FILE__, __LINE__ TSRMLS_CC)
-#define pdo_odbc_stmt_error(what) pdo_odbc_error(stmt->dbh, stmt, SQL_NULL_HSTMT, what, __FILE__, __LINE__ TSRMLS_CC)
-#define pdo_odbc_doer_error(what) pdo_odbc_error(dbh, NULL, stmt, what, __FILE__, __LINE__ TSRMLS_CC)
-
-void pdo_odbc_init_error_table(void);
-void pdo_odbc_fini_error_table(void);
-
-#ifdef SQL_ATTR_CONNECTION_POOLING
-extern SQLUINTEGER pdo_odbc_pool_on;
-extern SQLUINTEGER pdo_odbc_pool_mode;
-#endif
-
-enum {
- PDO_ODBC_ATTR_USE_CURSOR_LIBRARY = PDO_ATTR_DRIVER_SPECIFIC,
-};
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: noet sw=4 ts=4 fdm=marker
- * vim<600: noet sw=4 ts=4
- */
+/*
+ +----------------------------------------------------------------------+
+ | PHP Version 5 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997-2009 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.0 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.php.net/license/3_0.txt. |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Author: Wez Furlong <wez@php.net> |
+ +----------------------------------------------------------------------+
+*/
+
+/* $Id: php_pdo_odbc_int.h,v 1.9.2.1.2.5 2008/12/31 11:17:42 sebastian Exp $ */
+
+#ifdef PHP_WIN32
+# define PDO_ODBC_TYPE "Win32"
+#endif
+
+#ifndef PDO_ODBC_TYPE
+# warning Please fix configure to give your ODBC libraries a name
+# define PDO_ODBC_TYPE "Unknown"
+#endif
+
+/* {{{ Roll a dice, pick a header at random... */
+#if HAVE_SQLCLI1_H
+# include <sqlcli1.h>
+# if defined(DB268K) && HAVE_LIBRARYMANAGER_H
+# include <LibraryManager.h>
+# endif
+#endif
+
+#if HAVE_ODBC_H
+# include <odbc.h>
+#endif
+
+#if HAVE_IODBC_H
+# include <iodbc.h>
+#endif
+
+#if HAVE_SQLUNIX_H && !defined(PHP_WIN32)
+# include <sqlunix.h>
+#endif
+
+#if HAVE_SQLTYPES_H
+# include <sqltypes.h>
+#endif
+
+#if HAVE_SQLUCODE_H
+# include <sqlucode.h>
+#endif
+
+#if HAVE_SQL_H
+# include <sql.h>
+#endif
+
+#if HAVE_ISQL_H
+# include <isql.h>
+#endif
+
+#if HAVE_SQLEXT_H
+# include <sqlext.h>
+#endif
+
+#if HAVE_ISQLEXT_H
+# include <isqlext.h>
+#endif
+
+#if HAVE_UDBCEXT_H
+# include <udbcext.h>
+#endif
+
+#if HAVE_CLI0CORE_H
+# include <cli0core.h>
+#endif
+
+#if HAVE_CLI0EXT1_H
+# include <cli0ext.h>
+#endif
+
+#if HAVE_CLI0CLI_H
+# include <cli0cli.h>
+#endif
+
+#if HAVE_CLI0DEFS_H
+# include <cli0defs.h>
+#endif
+
+#if HAVE_CLI0ENV_H
+# include <cli0env.h>
+#endif
+
+#if HAVE_ODBCSDK_H
+# include <odbcsdk.h>
+#endif
+
+/* }}} */
+
+/* {{{ Figure out the type for handles */
+#if !defined(HENV) && !defined(SQLHENV) && defined(SQLHANDLE)
+# define PDO_ODBC_HENV SQLHANDLE
+# define PDO_ODBC_HDBC SQLHANDLE
+# define PDO_ODBC_HSTMT SQLHANDLE
+#elif !defined(HENV) && (defined(SQLHENV) || defined(DB2CLI_VER))
+# define PDO_ODBC_HENV SQLHENV
+# define PDO_ODBC_HDBC SQLHDBC
+# define PDO_ODBC_HSTMT SQLHSTMT
+#else
+# define PDO_ODBC_HENV HENV
+# define PDO_ODBC_HDBC HDBC
+# define PDO_ODBC_HSTMT HSTMT
+#endif
+/* }}} */
+
+typedef struct {
+ char last_state[6];
+ char last_err_msg[SQL_MAX_MESSAGE_LENGTH];
+ SDWORD last_error;
+ const char *file, *what;
+ int line;
+} pdo_odbc_errinfo;
+
+typedef struct {
+ PDO_ODBC_HENV env;
+ PDO_ODBC_HDBC dbc;
+ pdo_odbc_errinfo einfo;
+} pdo_odbc_db_handle;
+
+typedef struct {
+ char *data;
+ unsigned long datalen;
+ long fetched_len;
+ SWORD coltype;
+ char colname[128];
+ unsigned is_long;
+} pdo_odbc_column;
+
+typedef struct {
+ PDO_ODBC_HSTMT stmt;
+ pdo_odbc_column *cols;
+ pdo_odbc_db_handle *H;
+ pdo_odbc_errinfo einfo;
+ unsigned going_long:1;
+ unsigned _spare:31;
+} pdo_odbc_stmt;
+
+typedef struct {
+ SQLINTEGER len;
+ SQLSMALLINT paramtype;
+ char *outbuf;
+} pdo_odbc_param;
+
+extern pdo_driver_t pdo_odbc_driver;
+extern struct pdo_stmt_methods odbc_stmt_methods;
+
+void pdo_odbc_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, PDO_ODBC_HSTMT statement, char *what, const char *file, int line TSRMLS_DC);
+#define pdo_odbc_drv_error(what) pdo_odbc_error(dbh, NULL, SQL_NULL_HSTMT, what, __FILE__, __LINE__ TSRMLS_CC)
+#define pdo_odbc_stmt_error(what) pdo_odbc_error(stmt->dbh, stmt, SQL_NULL_HSTMT, what, __FILE__, __LINE__ TSRMLS_CC)
+#define pdo_odbc_doer_error(what) pdo_odbc_error(dbh, NULL, stmt, what, __FILE__, __LINE__ TSRMLS_CC)
+
+void pdo_odbc_init_error_table(void);
+void pdo_odbc_fini_error_table(void);
+
+#ifdef SQL_ATTR_CONNECTION_POOLING
+extern SQLUINTEGER pdo_odbc_pool_on;
+extern SQLUINTEGER pdo_odbc_pool_mode;
+#endif
+
+enum {
+ PDO_ODBC_ATTR_USE_CURSOR_LIBRARY = PDO_ATTR_DRIVER_SPECIFIC,
+};
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ * vim600: noet sw=4 ts=4 fdm=marker
+ * vim<600: noet sw=4 ts=4
+ */
diff --git a/ext/pdo_pgsql/pdo_pgsql.c b/ext/pdo_pgsql/pdo_pgsql.c
index 000e4a859..f0f823b2f 100644
--- a/ext/pdo_pgsql/pdo_pgsql.c
+++ b/ext/pdo_pgsql/pdo_pgsql.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pdo_pgsql.c,v 1.7.2.11.2.2 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: pdo_pgsql.c,v 1.7.2.11.2.3 2008/12/31 11:17:42 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -123,7 +123,7 @@ PHP_MINFO_FUNCTION(pdo_pgsql)
php_info_print_table_row(2, "PostgreSQL(libpq) Version", PG_VERSION);
#endif
php_info_print_table_row(2, "Module version", pdo_pgsql_module_entry.version);
- php_info_print_table_row(2, "Revision", " $Id: pdo_pgsql.c,v 1.7.2.11.2.2 2007/12/31 07:20:10 sebastian Exp $ ");
+ php_info_print_table_row(2, "Revision", " $Id: pdo_pgsql.c,v 1.7.2.11.2.3 2008/12/31 11:17:42 sebastian Exp $ ");
php_info_print_table_end();
}
diff --git a/ext/pdo_pgsql/pgsql_driver.c b/ext/pdo_pgsql/pgsql_driver.c
index 82d141522..3bd07f5c2 100644
--- a/ext/pdo_pgsql/pgsql_driver.c
+++ b/ext/pdo_pgsql/pgsql_driver.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pgsql_driver.c,v 1.53.2.14.2.11 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: pgsql_driver.c,v 1.53.2.14.2.12 2008/12/31 11:17:42 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/pdo_pgsql/pgsql_statement.c b/ext/pdo_pgsql/pgsql_statement.c
index 33aea2335..1842ad572 100644
--- a/ext/pdo_pgsql/pgsql_statement.c
+++ b/ext/pdo_pgsql/pgsql_statement.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pgsql_statement.c,v 1.31.2.12.2.11 2008/02/26 00:14:04 iliaa Exp $ */
+/* $Id: pgsql_statement.c,v 1.31.2.12.2.14 2008/12/31 11:17:42 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -246,6 +246,9 @@ static int pgsql_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data *
break;
case PDO_PARAM_EVT_ALLOC:
+ case PDO_PARAM_EVT_EXEC_POST:
+ case PDO_PARAM_EVT_FETCH_PRE:
+ case PDO_PARAM_EVT_FETCH_POST:
/* work is handled by EVT_NORMALIZE */
return 1;
@@ -293,10 +296,16 @@ static int pgsql_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data *
S->param_types[param->paramno] = OIDOID;
return 1;
} else {
+ int len;
+
SEPARATE_ZVAL_IF_NOT_REF(&param->parameter);
Z_TYPE_P(param->parameter) = IS_STRING;
- Z_STRLEN_P(param->parameter) = php_stream_copy_to_mem(stm,
- &Z_STRVAL_P(param->parameter), PHP_STREAM_COPY_ALL, 0);
+
+ if ((len = php_stream_copy_to_mem(stm, &Z_STRVAL_P(param->parameter), PHP_STREAM_COPY_ALL, 0)) > 0) {
+ Z_STRLEN_P(param->parameter) = len;
+ } else {
+ ZVAL_EMPTY_STRING(param->parameter);
+ }
}
} else {
/* expected a stream resource */
@@ -598,6 +607,7 @@ static int pgsql_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, unsigned
case PDO_PARAM_STR:
case PDO_PARAM_STMT:
case PDO_PARAM_INPUT_OUTPUT:
+ default:
break;
}
}
diff --git a/ext/pdo_pgsql/php_pdo_pgsql.h b/ext/pdo_pgsql/php_pdo_pgsql.h
index 4a6e2d6cc..964f44dc4 100644
--- a/ext/pdo_pgsql/php_pdo_pgsql.h
+++ b/ext/pdo_pgsql/php_pdo_pgsql.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pdo_pgsql.h,v 1.3.2.1.2.2 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: php_pdo_pgsql.h,v 1.3.2.1.2.3 2008/12/31 11:17:42 sebastian Exp $ */
#ifndef PHP_PDO_PGSQL_H
#define PHP_PDO_PGSQL_H
diff --git a/ext/pdo_pgsql/php_pdo_pgsql_int.h b/ext/pdo_pgsql/php_pdo_pgsql_int.h
index 87b56dcb1..e8cfe3f3e 100644
--- a/ext/pdo_pgsql/php_pdo_pgsql_int.h
+++ b/ext/pdo_pgsql/php_pdo_pgsql_int.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pdo_pgsql_int.h,v 1.13.2.4.2.2 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: php_pdo_pgsql_int.h,v 1.13.2.4.2.3 2008/12/31 11:17:42 sebastian Exp $ */
#ifndef PHP_PDO_PGSQL_INT_H
#define PHP_PDO_PGSQL_INT_H
diff --git a/ext/pdo_pgsql/tests/bug43925.phpt b/ext/pdo_pgsql/tests/bug43925.phpt
new file mode 100644
index 000000000..e22ffba04
--- /dev/null
+++ b/ext/pdo_pgsql/tests/bug43925.phpt
@@ -0,0 +1,59 @@
+--TEST--
+Bug #43925 (Incorrect argument counter in prepared statements with pgsql)
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo') || !extension_loaded('pdo_pgsql')) die('skip not loaded');
+require dirname(__FILE__) . '/config.inc';
+require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+PDOTest::skip();
+?>
+--FILE--
+<?php
+require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+$dbh = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
+
+@$dbh->query('DROP TABLE nodes');
+
+$dbh->query('
+CREATE TABLE nodes
+(
+ id integer NOT NULL PRIMARY KEY
+ , root integer NOT NULL
+ , lft integer NOT NULL
+ , rgt integer NOT NULL
+);');
+
+$dbh->query('INSERT INTO nodes (id, root, lft, rgt) VALUES (1, 1, 1, 6);');
+$dbh->query('INSERT INTO nodes (id, root, lft, rgt) VALUES (2, 1, 2, 3);');
+$dbh->query('INSERT INTO nodes (id, root, lft, rgt) VALUES (3, 1, 4, 5);');
+
+
+$stmt = $dbh->prepare('
+ SELECT *
+ FROM nodes
+ WHERE (:rootId > 0 OR lft > :left OR rgt > :left)
+ AND (root = :rootId OR root = :left)
+ AND (1 > :left OR 1 < :left OR 1 = :left)
+ AND (:x > 0 OR :x < 10 OR :x > 100)
+ OR :y = 1 OR :left = 1
+');
+
+$stmt->bindValue('left', 1, PDO::PARAM_INT);
+$stmt->bindValue('rootId', 3, PDO::PARAM_INT);
+$stmt->bindValue('x', 5, PDO::PARAM_INT);
+$stmt->bindValue('y', 50, PDO::PARAM_INT);
+
+$stmt->execute();
+
+foreach ($stmt->fetchAll() as $row) {
+ print implode(' - ', $row);
+ print "\n";
+}
+
+$dbh->query('DROP TABLE nodes');
+
+?>
+--EXPECTF--
+1 - 1 - 1 - 1 - 1 - 1 - 6 - 6
+2 - 2 - 1 - 1 - 2 - 2 - 3 - 3
+3 - 3 - 1 - 1 - 4 - 4 - 5 - 5
diff --git a/ext/pdo_pgsql/tests/bug46274.phpt b/ext/pdo_pgsql/tests/bug46274.phpt
new file mode 100644
index 000000000..c34839ad4
--- /dev/null
+++ b/ext/pdo_pgsql/tests/bug46274.phpt
@@ -0,0 +1,85 @@
+--TEST--
+Bug #46274 (pdo_pgsql - Segfault when using PDO::ATTR_STRINGIFY_FETCHES and blob)
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo') || !extension_loaded('pdo_pgsql')) die('skip not loaded');
+require dirname(__FILE__) . '/config.inc';
+require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+PDOTest::skip();
+?>
+--FILE--
+<?php
+require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+$db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
+
+$db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true);
+
+$db->query('CREATE TABLE test_one_blob (id SERIAL NOT NULL, blob1 BYTEA)');
+
+$stmt = $db->prepare("INSERT INTO test_one_blob (blob1) VALUES (:foo)");
+
+$data = 'foo';
+$blob = fopen('php://memory', 'a');
+fwrite($blob, $data);
+rewind($blob);
+
+$stmt->bindparam(':foo', $blob, PDO::PARAM_LOB);
+$stmt->execute();
+
+$blob = '';
+$stmt->bindparam(':foo', $blob, PDO::PARAM_LOB);
+$stmt->execute();
+
+$data = '';
+$blob = fopen('php://memory', 'a');
+fwrite($blob, $data);
+rewind($blob);
+
+$stmt->bindparam(':foo', $blob, PDO::PARAM_LOB);
+$stmt->execute();
+
+$blob = NULL;
+$stmt->bindparam(':foo', $blob, PDO::PARAM_LOB);
+$stmt->execute();
+
+$res = $db->query("SELECT blob1 from test_one_blob");
+// Resource
+var_dump($res->fetch());
+
+// Empty string
+var_dump($res->fetch());
+
+// Empty string
+var_dump($res->fetch());
+
+// NULL
+var_dump($res->fetch());
+
+$db->query('DROP TABLE test_one_blob');
+
+?>
+--EXPECTF--
+array(2) {
+ ["blob1"]=>
+ string(3) "foo"
+ [0]=>
+ string(3) "foo"
+}
+array(2) {
+ ["blob1"]=>
+ string(0) ""
+ [0]=>
+ string(0) ""
+}
+array(2) {
+ ["blob1"]=>
+ string(0) ""
+ [0]=>
+ string(0) ""
+}
+array(2) {
+ ["blob1"]=>
+ NULL
+ [0]=>
+ NULL
+}
diff --git a/ext/pdo_pgsql/tests/bug46274_2.phpt b/ext/pdo_pgsql/tests/bug46274_2.phpt
new file mode 100644
index 000000000..5e3555688
--- /dev/null
+++ b/ext/pdo_pgsql/tests/bug46274_2.phpt
@@ -0,0 +1,87 @@
+--TEST--
+Bug #46274 (pdo_pgsql - Segfault when using PDO::ATTR_STRINGIFY_FETCHES and blob)
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo') || !extension_loaded('pdo_pgsql')) die('skip not loaded');
+require dirname(__FILE__) . '/config.inc';
+require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+PDOTest::skip();
+?>
+--FILE--
+<?php
+require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+$db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
+
+$db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
+
+$db->query('CREATE TABLE test_one_blob (id SERIAL NOT NULL, blob1 BYTEA)');
+
+$stmt = $db->prepare("INSERT INTO test_one_blob (blob1) VALUES (:foo)");
+
+$data = 'foo';
+$blob = fopen('php://memory', 'a');
+fwrite($blob, $data);
+rewind($blob);
+
+$stmt->bindparam(':foo', $blob, PDO::PARAM_LOB);
+$stmt->execute();
+
+$blob = '';
+$stmt->bindparam(':foo', $blob, PDO::PARAM_LOB);
+$stmt->execute();
+
+$data = '';
+$blob = fopen('php://memory', 'a');
+fwrite($blob, $data);
+rewind($blob);
+
+$stmt->bindparam(':foo', $blob, PDO::PARAM_LOB);
+$stmt->execute();
+
+$blob = NULL;
+$stmt->bindparam(':foo', $blob, PDO::PARAM_LOB);
+$stmt->execute();
+
+$res = $db->query("SELECT blob1 from test_one_blob");
+// Resource
+var_dump($x = $res->fetch());
+var_dump(fread($x['blob1'], 10));
+
+// Empty string
+var_dump($res->fetch());
+
+// Empty string
+var_dump($res->fetch());
+
+// NULL
+var_dump($res->fetch());
+
+$db->query('DROP TABLE test_one_blob');
+
+?>
+--EXPECTF--
+array(2) {
+ ["blob1"]=>
+ resource(%d) of type (stream)
+ [0]=>
+ resource(%d) of type (stream)
+}
+string(3) "foo"
+array(2) {
+ ["blob1"]=>
+ string(0) ""
+ [0]=>
+ string(0) ""
+}
+array(2) {
+ ["blob1"]=>
+ string(0) ""
+ [0]=>
+ string(0) ""
+}
+array(2) {
+ ["blob1"]=>
+ NULL
+ [0]=>
+ NULL
+}
diff --git a/ext/pdo_pgsql/tests/large_objects.phpt b/ext/pdo_pgsql/tests/large_objects.phpt
index f6ee9e29c..316963a38 100644
--- a/ext/pdo_pgsql/tests/large_objects.phpt
+++ b/ext/pdo_pgsql/tests/large_objects.phpt
@@ -19,7 +19,7 @@ $db->exec('CREATE TABLE test (blobid integer not null primary key, bloboid OID)'
$db->beginTransaction();
$oid = $db->pgsqlLOBCreate();
try {
-$stm = $db->pgsqlLOBOpen($oid);
+$stm = $db->pgsqlLOBOpen($oid, 'w+b');
fwrite($stm, "Hello dude\n");
$stmt = $db->prepare("INSERT INTO test (blobid, bloboid) values (?, ?)");
@@ -34,14 +34,37 @@ $stm = null;
/* Pull it out */
$stmt = $db->prepare("SELECT * from test");
-$stmt->execute();
$stmt->bindColumn('bloboid', $lob, PDO::PARAM_LOB);
+$stmt->execute();
echo "Fetching:\n";
while (($row = $stmt->fetch(PDO::FETCH_ASSOC))) {
var_dump($row['blobid']);
var_dump(stream_get_contents($lob));
}
echo "Fetched!\n";
+
+/* Try again, with late bind */
+$stmt = $db->prepare("SELECT * from test");
+$stmt->execute();
+$stmt->bindColumn('bloboid', $lob, PDO::PARAM_LOB);
+echo "Fetching late bind:\n";
+while (($row = $stmt->fetch(PDO::FETCH_ASSOC))) {
+ var_dump($row['blobid']);
+ var_dump(is_int($row['bloboid']));
+}
+echo "Fetched!\n";
+
+/* Try again, with NO bind */
+$stmt = $db->prepare("SELECT * from test");
+$stmt->execute();
+$stmt->bindColumn('bloboid', $lob, PDO::PARAM_LOB);
+echo "Fetching NO bind:\n";
+while (($row = $stmt->fetch(PDO::FETCH_ASSOC))) {
+ var_dump($row['blobid']);
+ var_dump(is_int($row['bloboid']));
+}
+echo "Fetched!\n";
+
} catch (Exception $e) {
/* catch exceptions so that we can guarantee to clean
* up the LOB */
@@ -53,9 +76,18 @@ echo "Fetched!\n";
* linger and clutter up the storage */
$db->pgsqlLOBUnlink($oid);
+?>
--EXPECT--
Fetching:
int(1)
string(11) "Hello dude
"
Fetched!
+Fetching late bind:
+int(1)
+bool(true)
+Fetched!
+Fetching NO bind:
+int(1)
+bool(true)
+Fetched!
diff --git a/ext/pdo_sqlite/pdo_sqlite.c b/ext/pdo_sqlite/pdo_sqlite.c
index 3b266039a..2719bbcd8 100644
--- a/ext/pdo_sqlite/pdo_sqlite.c
+++ b/ext/pdo_sqlite/pdo_sqlite.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pdo_sqlite.c,v 1.10.2.6.2.3 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: pdo_sqlite.c,v 1.10.2.6.2.4 2008/12/31 11:17:42 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -100,7 +100,7 @@ PHP_MINFO_FUNCTION(pdo_sqlite)
"(bundled) "
#endif
PHP_PDO_SQLITE_MODULE_VERSION
- " $Id: pdo_sqlite.c,v 1.10.2.6.2.3 2007/12/31 07:20:10 sebastian Exp $");
+ " $Id: pdo_sqlite.c,v 1.10.2.6.2.4 2008/12/31 11:17:42 sebastian Exp $");
php_info_print_table_row(2, "SQLite Library", sqlite3_libversion());
php_info_print_table_end();
}
diff --git a/ext/pdo_sqlite/php_pdo_sqlite.h b/ext/pdo_sqlite/php_pdo_sqlite.h
index 3e912c518..7ad681108 100644
--- a/ext/pdo_sqlite/php_pdo_sqlite.h
+++ b/ext/pdo_sqlite/php_pdo_sqlite.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pdo_sqlite.h,v 1.2.2.1.2.2 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: php_pdo_sqlite.h,v 1.2.2.1.2.3 2008/12/31 11:17:42 sebastian Exp $ */
#ifndef PHP_PDO_SQLITE_H
diff --git a/ext/pdo_sqlite/php_pdo_sqlite_int.h b/ext/pdo_sqlite/php_pdo_sqlite_int.h
index 0269e9c6a..9430cea95 100644
--- a/ext/pdo_sqlite/php_pdo_sqlite_int.h
+++ b/ext/pdo_sqlite/php_pdo_sqlite_int.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pdo_sqlite_int.h,v 1.3.2.1.2.2 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: php_pdo_sqlite_int.h,v 1.3.2.1.2.3 2008/12/31 11:17:42 sebastian Exp $ */
#ifndef PHP_PDO_SQLITE_INT_H
#define PHP_PDO_SQLITE_INT_H
diff --git a/ext/pdo_sqlite/sqlite/src/keywordhash.h b/ext/pdo_sqlite/sqlite/src/keywordhash.h
index cdf8b630e..87111ce8f 100644
--- a/ext/pdo_sqlite/sqlite/src/keywordhash.h
+++ b/ext/pdo_sqlite/sqlite/src/keywordhash.h
@@ -2,7 +2,7 @@
**
** The code in this file has been automatically generated by
**
-** $Header: /repository/php-src/ext/pdo_sqlite/sqlite/src/keywordhash.h,v 1.2.2.1.2.4 2007/05/16 21:04:46 iliaa Exp $
+** $Header: /repository/php-src/ext/pdo_sqlite/sqlite/src/Attic/keywordhash.h,v 1.2.2.1.2.4 2007/05/16 21:04:46 iliaa Exp $
**
** The code in this file implements a function that determines whether
** or not a given identifier is really an SQL keyword. The same thing
diff --git a/ext/pdo_sqlite/sqlite_driver.c b/ext/pdo_sqlite/sqlite_driver.c
index f65cc9320..7f0ffcdad 100644
--- a/ext/pdo_sqlite/sqlite_driver.c
+++ b/ext/pdo_sqlite/sqlite_driver.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: sqlite_driver.c,v 1.20.2.5.2.3 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: sqlite_driver.c,v 1.20.2.5.2.5 2008/12/31 11:17:42 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -368,8 +368,8 @@ static int do_callback(struct pdo_sqlite_fci *fc, zval *cb,
}
/* clean up the params */
- if (argc) {
- for (i = is_agg; i < argc; i++) {
+ if (zargs) {
+ for (i = is_agg; i < fake_argc; i++) {
zval_ptr_dtor(zargs[i]);
efree(zargs[i]);
}
@@ -498,6 +498,7 @@ static PHP_METHOD(SQLite, sqliteCreateFunction)
MAKE_STD_ZVAL(func->func);
*(func->func) = *callback;
zval_copy_ctor(func->func);
+ INIT_PZVAL(func->func);
func->argc = argc;
@@ -576,10 +577,12 @@ static PHP_METHOD(SQLite, sqliteCreateAggregate)
MAKE_STD_ZVAL(func->step);
*(func->step) = *step_callback;
zval_copy_ctor(func->step);
+ INIT_PZVAL(func->step);
MAKE_STD_ZVAL(func->fini);
*(func->fini) = *fini_callback;
zval_copy_ctor(func->fini);
+ INIT_PZVAL(func->fini);
func->argc = argc;
diff --git a/ext/pdo_sqlite/sqlite_statement.c b/ext/pdo_sqlite/sqlite_statement.c
index 339f47143..b096fcb03 100644
--- a/ext/pdo_sqlite/sqlite_statement.c
+++ b/ext/pdo_sqlite/sqlite_statement.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: sqlite_statement.c,v 1.18.2.4.2.4 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: sqlite_statement.c,v 1.18.2.4.2.5 2008/12/31 11:17:42 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/pdo_sqlite/tests/bug44327_2.phpt b/ext/pdo_sqlite/tests/bug44327_2.phpt
new file mode 100644
index 000000000..0e704c573
--- /dev/null
+++ b/ext/pdo_sqlite/tests/bug44327_2.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Bug #44327.2 (PDORow::queryString property & numeric offsets / Crash)
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo_sqlite')) print 'skip not loaded';
+?>
+--FILE--
+<?php
+
+$db = new pdo('sqlite:memory');
+
+$x = $db->query('select 1 as queryString');
+var_dump($x, $x->queryString);
+
+$y = $x->fetch();
+var_dump($y, @$y->queryString);
+
+print "--------------------------------------------\n";
+
+$x = $db->query('select 1 as queryString');
+var_dump($x, $x->queryString);
+
+$y = $x->fetch(PDO::FETCH_LAZY);
+var_dump($y, $y->queryString);
+
+?>
+--EXPECTF--
+object(PDOStatement)#%d (1) {
+ ["queryString"]=>
+ string(23) "select 1 as queryString"
+}
+string(23) "select 1 as queryString"
+array(2) {
+ ["queryString"]=>
+ string(1) "1"
+ [0]=>
+ string(1) "1"
+}
+NULL
+--------------------------------------------
+object(PDOStatement)#%d (1) {
+ ["queryString"]=>
+ string(23) "select 1 as queryString"
+}
+string(23) "select 1 as queryString"
+object(PDORow)#%d (1) {
+ ["queryString"]=>
+ string(1) "1"
+}
+string(1) "1"
diff --git a/ext/pdo_sqlite/tests/bug44327_3.phpt b/ext/pdo_sqlite/tests/bug44327_3.phpt
new file mode 100644
index 000000000..4d704c3d6
--- /dev/null
+++ b/ext/pdo_sqlite/tests/bug44327_3.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Bug #44327.3 (PDORow::queryString property & numeric offsets / Crash)
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo_sqlite')) print 'skip not loaded';
+?>
+--FILE--
+<?php
+
+$db = new pdo('sqlite:memory');
+
+$x = $db->query('select 1 as queryStringxx');
+$y = $x->fetch(PDO::FETCH_LAZY);
+var_dump($y, $y->queryString, $y->queryStringzz, $y->queryStringxx);
+
+print "---\n";
+
+var_dump($y[5], $y->{3});
+
+?>
+--EXPECTF--
+object(PDORow)#%d (2) {
+ ["queryString"]=>
+ string(25) "select 1 as queryStringxx"
+ ["queryStringxx"]=>
+ string(1) "1"
+}
+string(25) "select 1 as queryStringxx"
+NULL
+string(1) "1"
+---
+NULL
+NULL
diff --git a/ext/pdo_sqlite/tests/bug46139.phpt b/ext/pdo_sqlite/tests/bug46139.phpt
new file mode 100644
index 000000000..c361d7a9b
--- /dev/null
+++ b/ext/pdo_sqlite/tests/bug46139.phpt
@@ -0,0 +1,42 @@
+--TEST--
+Bug #46139 (PDOStatement->setFetchMode() forgets FETCH_PROPS_LATE)
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo_sqlite')) print 'skip not loaded';
+?>
+--FILE--
+<?php
+
+require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+$db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
+
+class Person {
+ public $test = NULL;
+ public function __construct() {
+ var_dump($this->test);
+ }
+}
+
+$stmt = $db->query("SELECT 'foo' test, 1");
+$stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'Person');
+$r1 = $stmt->fetch();
+printf("'%s'\n", $r1->test);
+
+$stmt = $db->query("SELECT 'foo' test, 1");
+$stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'Person');
+$r1 = $stmt->fetchAll();
+printf("'%s'\n", $r1[0]->test);
+
+$stmt = $db->query("SELECT 'foo' test, 1");
+$stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'Person');
+$r1 = $stmt->fetch(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE);
+printf("'%s'\n", $r1->test);
+
+?>
+--EXPECT--
+NULL
+'foo'
+NULL
+'foo'
+NULL
+'foo'
diff --git a/ext/pdo_sqlite/tests/debugdumpparams_001.phpt b/ext/pdo_sqlite/tests/debugdumpparams_001.phpt
new file mode 100644
index 000000000..c263eb143
--- /dev/null
+++ b/ext/pdo_sqlite/tests/debugdumpparams_001.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Testing PDOStatement::debugDumpParams() with bound params
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo_sqlite')) print 'skip not loaded';
+?>
+--FILE--
+<?php
+
+$db = new pdo('sqlite:memory');
+
+$x= $db->prepare('select :a, :b, ?');
+$x->bindValue(':a', 1, PDO::PARAM_INT);
+$x->bindValue(':b', 'foo');
+$x->bindValue(3, 1313);
+var_dump($x->debugDumpParams());
+
+?>
+--EXPECT--
+SQL: [16] select :a, :b, ?
+Params: 3
+Key: Name: [2] :a
+paramno=-1
+name=[2] ":a"
+is_param=1
+param_type=1
+Key: Name: [2] :b
+paramno=-1
+name=[2] ":b"
+is_param=1
+param_type=2
+Key: Position #2:
+paramno=2
+name=[0] ""
+is_param=1
+param_type=2
+NULL
diff --git a/ext/pdo_sqlite/tests/pdo_sqlite_createaggregate.phpt b/ext/pdo_sqlite/tests/pdo_sqlite_createaggregate.phpt
new file mode 100644
index 000000000..8661e3679
--- /dev/null
+++ b/ext/pdo_sqlite/tests/pdo_sqlite_createaggregate.phpt
@@ -0,0 +1,31 @@
+--TEST--
+PDO_sqlite: Testing sqliteCreateAggregate()
+--FILE--
+<?php
+
+$db = new pdo('sqlite:memory');
+
+$db->query('CREATE TABLE IF NOT EXISTS foobar (id INT AUTO INCREMENT, name TEXT)');
+
+$db->query('INSERT INTO foobar VALUES (NULL, "PHP")');
+$db->query('INSERT INTO foobar VALUES (NULL, "PHP6")');
+
+function test_a(&$a, $b) { $a .= $b; return $a; }
+function test_b(&$a) { return $a; }
+$db->sqliteCreateAggregate('testing', 'test_a', 'test_b');
+
+
+foreach ($db->query('SELECT testing(name) FROM foobar') as $row) {
+ var_dump($row);
+}
+
+$db->query('DROP TABLE foobar');
+
+?>
+--EXPECTF--
+array(2) {
+ ["testing(name)"]=>
+ %string|unicode%(2) "12"
+ [0]=>
+ %string|unicode%(2) "12"
+}
diff --git a/ext/pdo_sqlite/tests/pdo_sqlite_createfunction.phpt b/ext/pdo_sqlite/tests/pdo_sqlite_createfunction.phpt
new file mode 100644
index 000000000..74a79faed
--- /dev/null
+++ b/ext/pdo_sqlite/tests/pdo_sqlite_createfunction.phpt
@@ -0,0 +1,37 @@
+--TEST--
+PDO_sqlite: Testing sqliteCreateFunction()
+--FILE--
+<?php
+
+$db = new pdo('sqlite:memory');
+
+$db->query('CREATE TABLE IF NOT EXISTS foobar (id INT AUTO INCREMENT, name TEXT)');
+
+$db->query('INSERT INTO foobar VALUES (NULL, "PHP")');
+$db->query('INSERT INTO foobar VALUES (NULL, "PHP6")');
+
+
+function test($v) { return strtolower($v); }
+$db->sqliteCreateFunction('testing', 'test');
+
+
+foreach ($db->query('SELECT testing(name) FROM foobar') as $row) {
+ var_dump($row);
+}
+
+$db->query('DROP TABLE foobar');
+
+?>
+--EXPECTF--
+array(2) {
+ ["testing(name)"]=>
+ %string|unicode%(3) "php"
+ [0]=>
+ %string|unicode%(3) "php"
+}
+array(2) {
+ ["testing(name)"]=>
+ %string|unicode%(4) "php6"
+ [0]=>
+ %string|unicode%(4) "php6"
+}
diff --git a/ext/pdo_sqlite/tests/pdo_sqlite_lastinsertid.phpt b/ext/pdo_sqlite/tests/pdo_sqlite_lastinsertid.phpt
new file mode 100644
index 000000000..d930e7f0a
--- /dev/null
+++ b/ext/pdo_sqlite/tests/pdo_sqlite_lastinsertid.phpt
@@ -0,0 +1,26 @@
+--TEST--
+PDO_sqlite: Testing lastInsertId()
+--FILE--
+<?php
+
+$db = new pdo('sqlite:memory');
+$db->query('CREATE TABLE IF NOT EXISTS foo (id INT AUTO INCREMENT, name TEXT)');
+$db->query('INSERT INTO foo VALUES (NULL, "PHP")');
+$db->query('INSERT INTO foo VALUES (NULL, "PHP6")');
+var_dump($db->query('SELECT * FROM foo'));
+var_dump($db->errorInfo());
+var_dump($db->lastInsertId());
+
+$db->query('DROP TABLE foo');
+
+?>
+--EXPECTF--
+object(PDOStatement)#2 (1) {
+ ["queryString"]=>
+ %string|unicode%(17) "SELECT * FROM foo"
+}
+array(1) {
+ [0]=>
+ %string|unicode%(5) "00000"
+}
+%string|unicode%(1) "2"
diff --git a/ext/pdo_sqlite/tests/pdo_sqlite_transaction.phpt b/ext/pdo_sqlite/tests/pdo_sqlite_transaction.phpt
new file mode 100644
index 000000000..75f416987
--- /dev/null
+++ b/ext/pdo_sqlite/tests/pdo_sqlite_transaction.phpt
@@ -0,0 +1,26 @@
+--TEST--
+PDO_sqlite: Testing transaction
+--FILE--
+<?php
+
+$db = new pdo('sqlite:memory');
+
+$db->beginTransaction();
+
+$db->query('CREATE TABLE IF NOT EXISTS foobar (id INT AUTO INCREMENT, name TEXT)');
+$db->commit();
+
+$db->beginTransaction();
+$db->query('INSERT INTO foobar VALUES (NULL, "PHP")');
+$db->query('INSERT INTO foobar VALUES (NULL, "PHP6")');
+$db->rollback();
+
+$r = $db->query('SELECT COUNT(*) FROM foobar');
+var_dump($r->rowCount());
+
+
+$db->query('DROP TABLE foobar');
+
+?>
+--EXPECTF--
+int(0)
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c
index 15371e01c..05493d87d 100644
--- a/ext/pgsql/pgsql.c
+++ b/ext/pgsql/pgsql.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -20,7 +20,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pgsql.c,v 1.331.2.13.2.27 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: pgsql.c,v 1.331.2.13.2.36 2009/01/27 14:44:07 felipe Exp $ */
#include <stdlib.h>
@@ -1199,6 +1199,12 @@ PHP_FUNCTION(pg_query)
static void _php_pgsql_free_params(char **params, int num_params)
{
if (num_params > 0) {
+ int i;
+ for (i = 0; i < num_params; i++) {
+ if (params[i]) {
+ efree(params[i]);
+ }
+ }
efree(params);
}
}
@@ -1216,7 +1222,6 @@ PHP_FUNCTION(pg_query_params)
int leftover = 0;
int num_params = 0;
char **params = NULL;
- unsigned char otype;
PGconn *pgsql;
PGresult *pgsql_result;
ExecStatusType status;
@@ -1276,19 +1281,20 @@ PHP_FUNCTION(pg_query_params)
RETURN_FALSE;
}
- otype = (*tmp)->type;
- convert_to_string_ex(tmp);
- if (Z_TYPE_PP(tmp) != IS_STRING) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Error converting parameter");
- _php_pgsql_free_params(params, num_params);
- RETURN_FALSE;
- }
-
- if (otype == IS_NULL) {
+ if (Z_TYPE_PP(tmp) == IS_NULL) {
params[i] = NULL;
- }
- else {
- params[i] = Z_STRVAL_PP(tmp);
+ } else {
+ zval tmp_val = **tmp;
+ zval_copy_ctor(&tmp_val);
+ convert_to_string(&tmp_val);
+ if (Z_TYPE(tmp_val) != IS_STRING) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,"Error converting parameter");
+ zval_dtor(&tmp_val);
+ _php_pgsql_free_params(params, num_params);
+ RETURN_FALSE;
+ }
+ params[i] = estrndup(Z_STRVAL(tmp_val), Z_STRLEN(tmp_val));
+ zval_dtor(&tmp_val);
}
zend_hash_move_forward(Z_ARRVAL_PP(pv_param_arr));
@@ -1439,7 +1445,6 @@ PHP_FUNCTION(pg_execute)
int leftover = 0;
int num_params = 0;
char **params = NULL;
- unsigned char otype;
PGconn *pgsql;
PGresult *pgsql_result;
ExecStatusType status;
@@ -1500,19 +1505,20 @@ PHP_FUNCTION(pg_execute)
RETURN_FALSE;
}
- otype = (*tmp)->type;
- SEPARATE_ZVAL(tmp);
- convert_to_string_ex(tmp);
- if (Z_TYPE_PP(tmp) != IS_STRING) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Error converting parameter");
- _php_pgsql_free_params(params, num_params);
- RETURN_FALSE;
- }
-
- if (otype == IS_NULL) {
+ if (Z_TYPE_PP(tmp) == IS_NULL) {
params[i] = NULL;
} else {
- params[i] = Z_STRVAL_PP(tmp);
+ zval tmp_val = **tmp;
+ zval_copy_ctor(&tmp_val);
+ convert_to_string(&tmp_val);
+ if (Z_TYPE(tmp_val) != IS_STRING) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,"Error converting parameter");
+ zval_dtor(&tmp_val);
+ _php_pgsql_free_params(params, num_params);
+ RETURN_FALSE;
+ }
+ params[i] = estrndup(Z_STRVAL(tmp_val), Z_STRLEN(tmp_val));
+ zval_dtor(&tmp_val);
}
zend_hash_move_forward(Z_ARRVAL_PP(pv_param_arr));
@@ -1729,7 +1735,7 @@ PHP_FUNCTION(pg_field_table)
char *table_name;
zend_rsrc_list_entry *field_table;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl|b!", &result, &fnum, &return_oid) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl|b", &result, &fnum, &return_oid) == FAILURE) {
return;
}
@@ -1979,10 +1985,9 @@ PHP_FUNCTION(pg_fetch_result)
if (PQgetisnull(pgsql_result, pgsql_row, field_offset)) {
Z_TYPE_P(return_value) = IS_NULL;
} else {
- Z_STRVAL_P(return_value) = PQgetvalue(pgsql_result, pgsql_row, field_offset);
- Z_STRLEN_P(return_value) = (Z_STRVAL_P(return_value) ? strlen(Z_STRVAL_P(return_value)) : 0);
- Z_STRVAL_P(return_value) = safe_estrndup(Z_STRVAL_P(return_value),Z_STRLEN_P(return_value));
- Z_TYPE_P(return_value) = IS_STRING;
+ char *value = PQgetvalue(pgsql_result, pgsql_row, field_offset);
+ int value_len = PQgetlength(pgsql_result, pgsql_row, field_offset);
+ ZVAL_STRINGL(return_value, value, value_len, 1);
}
}
/* }}} */
@@ -3449,7 +3454,7 @@ PHP_FUNCTION(pg_copy_from)
ExecStatusType status;
int argc = ZEND_NUM_ARGS();
- if (zend_parse_parameters(argc TSRMLS_CC, "rs/a|ss",
+ if (zend_parse_parameters(argc TSRMLS_CC, "rsa|ss",
&pgsql_link, &table_name, &table_name_len, &pg_rows,
&pg_delim, &pg_delim_len, &pg_null_as, &pg_null_as_len) == FAILURE) {
return;
@@ -4048,7 +4053,6 @@ PHP_FUNCTION(pg_send_query_params)
zval **pv_param_arr, **tmp;
int num_params = 0;
char **params = NULL;
- unsigned char otype;
zval **query;
int id = -1;
PGconn *pgsql;
@@ -4097,20 +4101,20 @@ PHP_FUNCTION(pg_send_query_params)
RETURN_FALSE;
}
- otype = (*tmp)->type;
- SEPARATE_ZVAL(tmp);
- convert_to_string_ex(tmp);
- if (Z_TYPE_PP(tmp) != IS_STRING) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Error converting parameter");
- _php_pgsql_free_params(params, num_params);
- RETURN_FALSE;
- }
-
- if (otype == IS_NULL) {
+ if (Z_TYPE_PP(tmp) == IS_NULL) {
params[i] = NULL;
- }
- else {
- params[i] = Z_STRVAL_PP(tmp);
+ } else {
+ zval tmp_val = **tmp;
+ zval_copy_ctor(&tmp_val);
+ convert_to_string(&tmp_val);
+ if (Z_TYPE(tmp_val) != IS_STRING) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,"Error converting parameter");
+ zval_dtor(&tmp_val);
+ _php_pgsql_free_params(params, num_params);
+ RETURN_FALSE;
+ }
+ params[i] = estrndup(Z_STRVAL(tmp_val), Z_STRLEN(tmp_val));
+ zval_dtor(&tmp_val);
}
zend_hash_move_forward(Z_ARRVAL_PP(pv_param_arr));
@@ -4194,7 +4198,6 @@ PHP_FUNCTION(pg_send_execute)
zval **pv_param_arr, **tmp;
int num_params = 0;
char **params = NULL;
- unsigned char otype;
zval **stmtname;
int id = -1;
PGconn *pgsql;
@@ -4241,19 +4244,20 @@ PHP_FUNCTION(pg_send_execute)
RETURN_FALSE;
}
- otype = (*tmp)->type;
- convert_to_string(*tmp);
- if (Z_TYPE_PP(tmp) != IS_STRING) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,"Error converting parameter");
- _php_pgsql_free_params(params, num_params);
- RETURN_FALSE;
- }
-
- if (otype == IS_NULL) {
+ if (Z_TYPE_PP(tmp) == IS_NULL) {
params[i] = NULL;
- }
- else {
- params[i] = Z_STRVAL_PP(tmp);
+ } else {
+ zval tmp_val = **tmp;
+ zval_copy_ctor(&tmp_val);
+ convert_to_string(&tmp_val);
+ if (Z_TYPE(tmp_val) != IS_STRING) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,"Error converting parameter");
+ zval_dtor(&tmp_val);
+ _php_pgsql_free_params(params, num_params);
+ RETURN_FALSE;
+ }
+ params[i] = estrndup(Z_STRVAL(tmp_val), Z_STRLEN(tmp_val));
+ zval_dtor(&tmp_val);
}
zend_hash_move_forward(Z_ARRVAL_PP(pv_param_arr));
@@ -4407,27 +4411,47 @@ PHP_FUNCTION(pg_get_pid)
PHP_PGSQL_API int php_pgsql_meta_data(PGconn *pg_link, const char *table_name, zval *meta TSRMLS_DC)
{
PGresult *pg_result;
- char *tmp_name;
+ char *src, *tmp_name, *tmp_name2 = NULL;
smart_str querystr = {0};
int new_len;
int i, num_rows;
zval *elem;
+ if (!*table_name) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "The table name must be specified");
+ return FAILURE;
+ }
+
+ src = estrdup(table_name);
+ tmp_name = php_strtok_r(src, ".", &tmp_name2);
+
+ if (!tmp_name2 || !*tmp_name2) {
+ /* Default schema */
+ tmp_name2 = tmp_name;
+ tmp_name = "public";
+ }
+
smart_str_appends(&querystr,
"SELECT a.attname, a.attnum, t.typname, a.attlen, a.attnotNULL, a.atthasdef, a.attndims "
- "FROM pg_class as c, pg_attribute a, pg_type t "
+ "FROM pg_class as c, pg_attribute a, pg_type t, pg_namespace n "
"WHERE a.attnum > 0 AND a.attrelid = c.oid AND c.relname = '");
+ tmp_name2 = php_addslashes(tmp_name2, strlen(tmp_name2), &new_len, 0 TSRMLS_CC);
+ smart_str_appendl(&querystr, tmp_name2, new_len);
- tmp_name = php_addslashes((char *)table_name, strlen(table_name), &new_len, 0 TSRMLS_CC);
+ smart_str_appends(&querystr, "' AND c.relnamespace = n.oid AND n.nspname = '");
+ tmp_name = php_addslashes(tmp_name, strlen(tmp_name), &new_len, 0 TSRMLS_CC);
smart_str_appendl(&querystr, tmp_name, new_len);
- efree(tmp_name);
smart_str_appends(&querystr, "' AND a.atttypid = t.oid ORDER BY a.attnum;");
smart_str_0(&querystr);
+ efree(tmp_name2);
+ efree(tmp_name);
+ efree(src);
+
pg_result = PQexec(pg_link, querystr.c);
if (PQresultStatus(pg_result) != PGRES_TUPLES_OK || (num_rows = PQntuples(pg_result)) == 0) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Failed to query meta_data for '%s' table %s", table_name, querystr.c);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Table '%s' doesn't exists", table_name);
smart_str_free(&querystr);
PQclear(pg_result);
return FAILURE;
@@ -5003,7 +5027,7 @@ PHP_PGSQL_API int php_pgsql_convert(PGconn *pg_link, const char *table_name, con
ZVAL_STRINGL(new_val, "NOW()", sizeof("NOW()")-1, 1);
} else {
/* FIXME: better regex must be used */
- if (php_pgsql_convert_match(Z_STRVAL_PP(val), "^([0-9]{4}[/-][0-9]{1,2}[/-][0-9]{1,2})([ \\t]+(([0-9]{1,2}:[0-9]{1,2}){1}(:[0-9]{1,2}){0,1}(\\.[0-9]+){0,1}([ \\t]*([+-][0-9]{1,2}(:[0-9]{1,2}){0,1}|[-a-zA-Z_/+]{1,50})){0,1})){0,1}$", 1 TSRMLS_CC) == FAILURE) {
+ if (php_pgsql_convert_match(Z_STRVAL_PP(val), "^([0-9]{4}[/-][0-9]{1,2}[/-][0-9]{1,2})([ \\t]+(([0-9]{1,2}:[0-9]{1,2}){1}(:[0-9]{1,2}){0,1}(\\.[0-9]+){0,1}([ \\t]*([+-][0-9]{1,4}(:[0-9]{1,2}){0,1}|[-a-zA-Z_/+]{1,50})){0,1})){0,1}$", 1 TSRMLS_CC) == FAILURE) {
err = 1;
} else {
ZVAL_STRING(new_val, Z_STRVAL_PP(val), 1);
@@ -5342,7 +5366,7 @@ static int do_exec(smart_str *querystr, int expect, PGconn *pg_link, ulong opt T
PQclear(pg_result);
return 0;
} else {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Failed to execute '%s'", querystr->c);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", PQresultErrorMessage(pg_result));
PQclear(pg_result);
}
}
@@ -5693,7 +5717,7 @@ cleanup:
FREE_ZVAL(ids_converted);
}
if (ret == SUCCESS && (opt & PGSQL_DML_STRING)) {
- *sql = estrdup(querystr.c);
+ *sql = querystr.c;
}
else {
smart_str_free(&querystr);
diff --git a/ext/pgsql/php_pgsql.h b/ext/pgsql/php_pgsql.h
index 08b2a394d..f6033e5a4 100644
--- a/ext/pgsql/php_pgsql.h
+++ b/ext/pgsql/php_pgsql.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pgsql.h,v 1.73.2.1.2.3 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: php_pgsql.h,v 1.73.2.1.2.4 2008/12/31 11:17:42 sebastian Exp $ */
#ifndef PHP_PGSQL_H
#define PHP_PGSQL_H
diff --git a/ext/pgsql/tests/bug37100.phpt b/ext/pgsql/tests/bug37100.phpt
new file mode 100644
index 000000000..b66149e4a
--- /dev/null
+++ b/ext/pgsql/tests/bug37100.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Bug #37100 (data is returned truncated with BINARY CURSOR)
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+
+include 'config.inc';
+
+$db = pg_connect($conn_str);
+
+@pg_query('DROP TABLE test_bug');
+
+pg_query('CREATE TABLE test_bug (binfield byteA) ;');
+pg_query("INSERT INTO test_bug VALUES (decode('0103AA000812','hex'))");
+
+
+$data = pg_query("SELECT binfield FROM test_bug");
+$res = pg_fetch_result($data,0);
+var_dump($res);
+var_dump(bin2hex(pg_unescape_bytea($res)));
+
+$sql = "BEGIN; DECLARE mycursor BINARY CURSOR FOR SELECT binfield FROM test_bug; FETCH ALL IN mycursor;";
+
+$data = pg_query($sql);
+$res = pg_fetch_result($data,0);
+
+var_dump(strlen($res));
+var_dump(bin2hex($res));
+
+pg_close($db);
+
+$db = pg_connect($conn_str);
+pg_query('DROP TABLE test_bug');
+pg_close($db);
+
+
+?>
+--EXPECT--
+string(24) "\001\003\252\000\010\022"
+string(12) "0103aa000812"
+int(6)
+string(12) "0103aa000812"
diff --git a/ext/pgsql/tests/pg_delete_001.phpt b/ext/pgsql/tests/pg_delete_001.phpt
new file mode 100644
index 000000000..abb65be14
--- /dev/null
+++ b/ext/pgsql/tests/pg_delete_001.phpt
@@ -0,0 +1,86 @@
+--TEST--
+PostgreSQL pg_delete() - basic test using schema
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+
+include('config.inc');
+
+$conn = pg_connect($conn_str);
+
+pg_query('CREATE SCHEMA phptests');
+
+pg_query('CREATE TABLE foo (id INT, id2 INT)');
+pg_query('CREATE TABLE phptests.foo (id INT, id2 INT)');
+
+pg_insert($conn, 'foo', array('id' => 1, 'id2' => 1));
+pg_insert($conn, 'foo', array('id' => 1, 'id2' => 2));
+pg_insert($conn, 'foo', array('id' => 1, 'id2' => 2));
+pg_insert($conn, 'foo', array('id' => 3, 'id2' => 3));
+
+pg_insert($conn, 'phptests.foo', array('id' => 1, 'id2' => 1));
+pg_insert($conn, 'phptests.foo', array('id' => 1, 'id2' => 2));
+pg_insert($conn, 'phptests.foo', array('id' => 2, 'id2' => 3));
+pg_insert($conn, 'phptests.foo', array('id' => 2, 'id2' => 3));
+
+pg_delete($conn, 'foo', array('id' => 1, 'id2' => 0));
+pg_delete($conn, 'foo', array('id' => 1, 'id2' => 2));
+var_dump(pg_delete($conn, 'foo', array('id' => 1, 'id2' => 2), PGSQL_DML_STRING));
+
+pg_delete($conn, 'phptests.foo', array('id' => 2, 'id2' => 1));
+pg_delete($conn, 'phptests.foo', array('id' => 2, 'id2' => 3));
+var_dump(pg_delete($conn, 'phptests.foo', array('id' => 2, 'id2' => 3), PGSQL_DML_STRING));
+
+var_dump(pg_fetch_all(pg_query('SELECT * FROM foo')));
+var_dump(pg_fetch_all(pg_query('SELECT * FROM phptests.foo')));
+
+/* Inexistent */
+pg_delete($conn, 'bar', array('id' => 1, 'id2' => 2));
+var_dump(pg_delete($conn, 'bar', array('id' => 1, 'id2' => 2), PGSQL_DML_STRING));
+
+pg_query('DROP TABLE foo');
+pg_query('DROP TABLE phptests.foo');
+pg_query('DROP SCHEMA phptests');
+
+?>
+--EXPECTF--
+string(37) "DELETE FROM foo WHERE id=1 AND id2=2;"
+string(46) "DELETE FROM phptests.foo WHERE id=2 AND id2=3;"
+array(2) {
+ [0]=>
+ array(2) {
+ ["id"]=>
+ string(1) "1"
+ ["id2"]=>
+ string(1) "1"
+ }
+ [1]=>
+ array(2) {
+ ["id"]=>
+ string(1) "3"
+ ["id2"]=>
+ string(1) "3"
+ }
+}
+array(2) {
+ [0]=>
+ array(2) {
+ ["id"]=>
+ string(1) "1"
+ ["id2"]=>
+ string(1) "1"
+ }
+ [1]=>
+ array(2) {
+ ["id"]=>
+ string(1) "1"
+ ["id2"]=>
+ string(1) "2"
+ }
+}
+
+Warning: pg_delete(): Table 'bar' doesn't exists in %s on line %d
+
+Warning: pg_delete(): Table 'bar' doesn't exists in %s on line %d
+bool(false)
diff --git a/ext/pgsql/tests/pg_insert_001.phpt b/ext/pgsql/tests/pg_insert_001.phpt
new file mode 100644
index 000000000..7d2721918
--- /dev/null
+++ b/ext/pgsql/tests/pg_insert_001.phpt
@@ -0,0 +1,40 @@
+--TEST--
+PostgreSQL pg_select() - basic test using schema
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+
+include('config.inc');
+
+$conn = pg_connect($conn_str);
+
+pg_query('CREATE SCHEMA phptests');
+pg_query('CREATE TABLE phptests.foo (id INT, id2 INT)');
+
+
+pg_insert($conn, 'foo', array('id' => 1, 'id2' => 1));
+
+pg_insert($conn, 'phptests.foo', array('id' => 1, 'id2' => 2));
+
+var_dump(pg_insert($conn, 'phptests.foo', array('id' => 1, 'id2' => 2), PGSQL_DML_STRING));
+
+var_dump(pg_select($conn, 'phptests.foo', array('id' => 1)));
+
+pg_query('DROP TABLE phptests.foo');
+pg_query('DROP SCHEMA phptests');
+
+?>
+--EXPECTF--
+
+Warning: pg_insert(): Table 'foo' doesn't exists in %s on line %d
+string(47) "INSERT INTO phptests.foo (id,id2) VALUES (1,2);"
+array(1) {
+ [0]=>
+ array(2) {
+ ["id"]=>
+ string(1) "1"
+ ["id2"]=>
+ string(1) "2"
+ }
+}
diff --git a/ext/pgsql/tests/pg_meta_data_001.phpt b/ext/pgsql/tests/pg_meta_data_001.phpt
new file mode 100644
index 000000000..2841de83d
--- /dev/null
+++ b/ext/pgsql/tests/pg_meta_data_001.phpt
@@ -0,0 +1,92 @@
+--TEST--
+PostgreSQL pg_meta_data() - basic test using schema
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+
+include('config.inc');
+
+$conn = pg_connect($conn_str);
+
+pg_query('CREATE SCHEMA phptests');
+
+pg_query('CREATE TABLE phptests.foo (id INT, id2 INT)');
+
+pg_query('CREATE TABLE foo (id INT, id3 INT)');
+
+
+var_dump(pg_meta_data($conn, 'foo'));
+var_dump(pg_meta_data($conn, 'phptests.foo'));
+
+
+pg_query('DROP TABLE foo');
+pg_query('DROP TABLE phptests.foo');
+pg_query('DROP SCHEMA phptests');
+
+?>
+--EXPECT--
+array(2) {
+ ["id"]=>
+ array(6) {
+ ["num"]=>
+ int(1)
+ ["type"]=>
+ string(4) "int4"
+ ["len"]=>
+ int(4)
+ ["not null"]=>
+ bool(false)
+ ["has default"]=>
+ bool(false)
+ ["array dims"]=>
+ int(0)
+ }
+ ["id3"]=>
+ array(6) {
+ ["num"]=>
+ int(2)
+ ["type"]=>
+ string(4) "int4"
+ ["len"]=>
+ int(4)
+ ["not null"]=>
+ bool(false)
+ ["has default"]=>
+ bool(false)
+ ["array dims"]=>
+ int(0)
+ }
+}
+array(2) {
+ ["id"]=>
+ array(6) {
+ ["num"]=>
+ int(1)
+ ["type"]=>
+ string(4) "int4"
+ ["len"]=>
+ int(4)
+ ["not null"]=>
+ bool(false)
+ ["has default"]=>
+ bool(false)
+ ["array dims"]=>
+ int(0)
+ }
+ ["id2"]=>
+ array(6) {
+ ["num"]=>
+ int(2)
+ ["type"]=>
+ string(4) "int4"
+ ["len"]=>
+ int(4)
+ ["not null"]=>
+ bool(false)
+ ["has default"]=>
+ bool(false)
+ ["array dims"]=>
+ int(0)
+ }
+}
diff --git a/ext/pgsql/tests/pg_select_001.phpt b/ext/pgsql/tests/pg_select_001.phpt
new file mode 100644
index 000000000..9bcf130dd
--- /dev/null
+++ b/ext/pgsql/tests/pg_select_001.phpt
@@ -0,0 +1,63 @@
+--TEST--
+PostgreSQL pg_select() - basic test using schema
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+
+include('config.inc');
+
+$conn = pg_connect($conn_str);
+
+pg_query('CREATE SCHEMA phptests');
+
+pg_query('CREATE TABLE phptests.foo (id INT, id2 INT)');
+pg_query('INSERT INTO phptests.foo VALUES (1,2)');
+pg_query('INSERT INTO phptests.foo VALUES (2,3)');
+
+pg_query('CREATE TABLE phptests.bar (id4 INT, id3 INT)');
+pg_query('INSERT INTO phptests.bar VALUES (4,5)');
+pg_query('INSERT INTO phptests.bar VALUES (6,7)');
+
+/* Inexistent table */
+var_dump(pg_select($conn, 'foo', array('id' => 1)));
+
+/* Existent column */
+var_dump(pg_select($conn, 'phptests.foo', array('id' => 1)));
+
+/* Testing with inexistent column */
+var_dump(pg_select($conn, 'phptests.bar', array('id' => 1)));
+
+/* Existent column */
+var_dump(pg_select($conn, 'phptests.bar', array('id4' => 4)));
+
+
+pg_query('DROP TABLE phptests.foo');
+pg_query('DROP TABLE phptests.bar');
+pg_query('DROP SCHEMA phptests');
+
+?>
+--EXPECTF--
+Warning: pg_select(): Table 'foo' doesn't exists in %s on line %d
+bool(false)
+array(1) {
+ [0]=>
+ array(2) {
+ ["id"]=>
+ string(1) "1"
+ ["id2"]=>
+ string(1) "2"
+ }
+}
+
+Notice: pg_select(): Invalid field name (id) in values in %s on line %d
+bool(false)
+array(1) {
+ [0]=>
+ array(2) {
+ ["id4"]=>
+ string(1) "4"
+ ["id3"]=>
+ string(1) "5"
+ }
+}
diff --git a/ext/pgsql/tests/pg_update_001.phpt b/ext/pgsql/tests/pg_update_001.phpt
new file mode 100644
index 000000000..95fa69256
--- /dev/null
+++ b/ext/pgsql/tests/pg_update_001.phpt
@@ -0,0 +1,51 @@
+--TEST--
+PostgreSQL pg_update() - basic test using schema
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+
+include('config.inc');
+
+$conn = pg_connect($conn_str);
+
+pg_query('CREATE SCHEMA phptests');
+
+pg_query('CREATE TABLE foo (id INT, id2 INT)');
+pg_query('CREATE TABLE phptests.foo (id INT, id2 INT)');
+
+
+pg_insert($conn, 'foo', array('id' => 1, 'id2' => 1));
+pg_insert($conn, 'phptests.foo', array('id' => 1, 'id2' => 2));
+
+pg_update($conn, 'foo', array('id' => 10), array('id' => 1));
+var_dump(pg_update($conn, 'foo', array('id' => 10), array('id' => 1), PGSQL_DML_STRING));
+
+pg_update($conn, 'phptests.foo', array('id' => 100), array('id2' => 2));
+var_dump(pg_update($conn, 'phptests.foo', array('id' => 100), array('id2' => 2), PGSQL_DML_STRING));
+
+$rs = pg_query('SELECT * FROM foo UNION SELECT * FROM phptests.foo');
+while ($row = pg_fetch_assoc($rs)) {
+ var_dump($row);
+}
+
+pg_query('DROP TABLE foo');
+pg_query('DROP TABLE phptests.foo');
+pg_query('DROP SCHEMA phptests');
+
+?>
+--EXPECT--
+string(32) "UPDATE foo SET id=10 WHERE id=1;"
+string(43) "UPDATE phptests.foo SET id=100 WHERE id2=2;"
+array(2) {
+ ["id"]=>
+ string(2) "10"
+ ["id2"]=>
+ string(1) "1"
+}
+array(2) {
+ ["id"]=>
+ string(3) "100"
+ ["id2"]=>
+ string(1) "2"
+}
diff --git a/ext/posix/config.m4 b/ext/posix/config.m4
index 4c8158044..deaa52af3 100644
--- a/ext/posix/config.m4
+++ b/ext/posix/config.m4
@@ -1,5 +1,5 @@
dnl
-dnl $Id: config.m4,v 1.12.4.5 2007/03/01 11:23:54 tony2001 Exp $
+dnl $Id: config.m4,v 1.12.4.7 2009/01/21 19:23:03 jani Exp $
dnl
PHP_ARG_ENABLE(posix,whether to enable POSIX-like functions,
@@ -31,4 +31,20 @@ int main(int argc, char *argv[])
], [
AC_MSG_RESULT([no, cannot detect working ttyname_r() when cross compiling. posix_ttyname() will be thread-unsafe])
])
+
+ AC_CACHE_CHECK([for utsname.domainname], ac_cv_have_utsname_domainname, [
+ AC_TRY_COMPILE([
+ #define _GNU_SOURCE
+ #include <sys/utsname.h>
+ ],[
+ return sizeof(((struct utsname *)0)->domainname);
+ ],[
+ ac_cv_have_utsname_domainname=yes
+ ],[
+ ac_cv_have_utsname_domainname=no
+ ])
+ ])
+ if test "$ac_cv_have_utsname_domainname" = yes; then
+ AC_DEFINE(HAVE_UTSNAME_DOMAINNAME, 1, [Wether struct utsname has domainname])
+ fi
fi
diff --git a/ext/posix/php_posix.h b/ext/posix/php_posix.h
index a966b490f..431b83714 100644
--- a/ext/posix/php_posix.h
+++ b/ext/posix/php_posix.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
*/
-/* $Id: php_posix.h,v 1.18.2.1.2.3 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: php_posix.h,v 1.18.2.1.2.4 2008/12/31 11:17:42 sebastian Exp $ */
#ifndef PHP_POSIX_H
#define PHP_POSIX_H
diff --git a/ext/posix/posix.c b/ext/posix/posix.c
index ba9d09aa4..feb2c4bf5 100644
--- a/ext/posix/posix.c
+++ b/ext/posix/posix.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: posix.c,v 1.70.2.3.2.18 2008/04/11 11:00:24 tony2001 Exp $ */
+/* $Id: posix.c,v 1.70.2.3.2.22 2009/01/04 15:08:34 tony2001 Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -36,6 +36,11 @@
#endif
#include <sys/resource.h>
+
+#if defined(_GNU_SOURCE) && !defined(__USE_GNU)
+# define __USE_GNU
+#endif
+
#include <sys/utsname.h>
#include <sys/types.h>
#include <sys/stat.h>
@@ -147,7 +152,7 @@ zend_function_entry posix_functions[] = {
static PHP_MINFO_FUNCTION(posix)
{
php_info_print_table_start();
- php_info_print_table_row(2, "Revision", "$Revision: 1.70.2.3.2.18 $");
+ php_info_print_table_row(2, "Revision", "$Revision: 1.70.2.3.2.22 $");
php_info_print_table_end();
}
/* }}} */
@@ -467,7 +472,7 @@ PHP_FUNCTION(posix_uname)
add_assoc_string(return_value, "release", u.release, 1);
add_assoc_string(return_value, "version", u.version, 1);
add_assoc_string(return_value, "machine", u.machine, 1);
-#ifdef _GNU_SOURCE
+#if defined(_GNU_SOURCE) && !defined(DARWIN) && defined(HAVE_UTSNAME_DOMAINNAME)
add_assoc_string(return_value, "domainname", u.domainname, 1);
#endif
}
diff --git a/ext/posix/tests/posix_getcwd.phpt b/ext/posix/tests/posix_getcwd.phpt
new file mode 100644
index 000000000..478aeccaa
--- /dev/null
+++ b/ext/posix/tests/posix_getcwd.phpt
@@ -0,0 +1,19 @@
+--TEST--
+posix_getcwd(): Basic tests
+--SKIP--
+<?php
+if (!extension_loaded('posix')) die('skip - POSIX extension not loaded');
+if (!function_exists('posix_getcwd')) die('skip posix_getcwd() not found');
+?>
+--FILE--
+<?php
+
+var_dump(posix_getcwd());
+var_dump(posix_getcwd(1));
+
+?>
+--EXPECTF--
+string(%d) "%s"
+
+Warning: Wrong parameter count for posix_getcwd() in %s on line %d
+NULL
diff --git a/ext/posix/tests/posix_getgrgid_error.phpt b/ext/posix/tests/posix_getgrgid_error.phpt
index bce624f45..7fcc8926f 100644
--- a/ext/posix/tests/posix_getgrgid_error.phpt
+++ b/ext/posix/tests/posix_getgrgid_error.phpt
@@ -12,10 +12,6 @@ Test posix_getgrgid() function : error conditions
* Alias to functions:
*/
-/*
- * add a comment here to say what the test is supposed to do
- */
-
echo "*** Testing posix_getgrgid() : error conditions ***\n";
// Zero arguments
diff --git a/ext/posix/tests/posix_getgrnam.phpt b/ext/posix/tests/posix_getgrnam.phpt
new file mode 100644
index 000000000..9d24f085e
--- /dev/null
+++ b/ext/posix/tests/posix_getgrnam.phpt
@@ -0,0 +1,19 @@
+--TEST--
+posix_getgrnam(): Basic tests
+--SKIP--
+<?php
+if (!extension_loaded('posix')) die('skip - POSIX extension not loaded');
+if (!function_exists('posix_getgrnam')) die('skip posix_getgrnam() not found');
+?>
+--FILE--
+<?php
+
+var_dump(posix_getgrnam(NULL));
+var_dump(posix_getgrnam(1));
+var_dump(posix_getgrnam(''));
+
+?>
+--EXPECT--
+bool(false)
+bool(false)
+bool(false)
diff --git a/ext/posix/tests/posix_getpwnam.phpt b/ext/posix/tests/posix_getpwnam.phpt
new file mode 100644
index 000000000..4b8962297
--- /dev/null
+++ b/ext/posix/tests/posix_getpwnam.phpt
@@ -0,0 +1,19 @@
+--TEST--
+posix_getpwnam(): Basic tests
+--SKIP--
+<?php
+if (!extension_loaded('posix')) die('skip - POSIX extension not loaded');
+if (!function_exists('posix_getpwnam')) die('skip posix_getpwnam() not found');
+?>
+--FILE--
+<?php
+
+var_dump(posix_getpwnam(1));
+var_dump(posix_getpwnam(''));
+var_dump(posix_getpwnam(NULL));
+
+?>
+--EXPECT--
+bool(false)
+bool(false)
+bool(false)
diff --git a/ext/posix/tests/posix_getrlimit.phpt b/ext/posix/tests/posix_getrlimit.phpt
new file mode 100644
index 000000000..55bd8aff8
--- /dev/null
+++ b/ext/posix/tests/posix_getrlimit.phpt
@@ -0,0 +1,17 @@
+--TEST--
+posix_getrlimit(): Basic tests
+--SKIP--
+<?php
+if (!extension_loaded('posix')) die('skip - POSIX extension not loaded');
+if (!function_exists('posix_getrlimit')) die('skip posix_getrlimit() not found');
+?>
+--FILE--
+<?php
+
+var_dump(posix_getrlimit());
+
+?>
+--EXPECTF--
+array(%d) {
+%a
+}
diff --git a/ext/posix/tests/posix_initgroups.phpt b/ext/posix/tests/posix_initgroups.phpt
new file mode 100644
index 000000000..6ffb202f3
--- /dev/null
+++ b/ext/posix/tests/posix_initgroups.phpt
@@ -0,0 +1,18 @@
+--TEST--
+posix_initgroups(): Basic tests
+--SKIP--
+<?php
+if (!extension_loaded('posix')) die('skip - POSIX extension not loaded');
+if (!function_exists('posix_initgroups')) die('skip posix_initgroups() not found');
+?>
+--FILE--
+<?php
+
+var_dump(posix_initgroups('foo', 'bar'));
+var_dump(posix_initgroups(NULL, NULL));
+
+?>
+--EXPECTF--
+Warning: posix_initgroups() expects parameter 2 to be long, string given in %s on line %d
+bool(false)
+bool(false)
diff --git a/ext/posix/tests/posix_isatty.phpt b/ext/posix/tests/posix_isatty.phpt
new file mode 100644
index 000000000..74309c299
--- /dev/null
+++ b/ext/posix/tests/posix_isatty.phpt
@@ -0,0 +1,15 @@
+--TEST--
+posix_isatty(): Basic tests
+--SKIP--
+<?php
+if (!extension_loaded('posix')) die('skip - POSIX extension not loaded');
+if (!function_exists('posix_isatty')) die('skip posix_isatty() not found');
+?>
+--FILE--
+<?php
+
+var_dump(posix_isatty(0));
+
+?>
+--EXPECTF--
+bool(%s)
diff --git a/ext/posix/tests/posix_kill_variation1.phpt b/ext/posix/tests/posix_kill_variation1.phpt
index 46268f241..6fcf0fa98 100644
--- a/ext/posix/tests/posix_kill_variation1.phpt
+++ b/ext/posix/tests/posix_kill_variation1.phpt
@@ -12,10 +12,6 @@ Test posix_kill() function : usage variations - first parameter type
* Alias to functions:
*/
-/*
- * add a comment here to say what the test is supposed to do
- */
-
echo "*** Testing posix_kill() : usage variations ***\n";
// Initialise function arguments not being substituted (if any)
diff --git a/ext/posix/tests/posix_kill_variation2.phpt b/ext/posix/tests/posix_kill_variation2.phpt
index aef9acd04..240cfa57c 100644
--- a/ext/posix/tests/posix_kill_variation2.phpt
+++ b/ext/posix/tests/posix_kill_variation2.phpt
@@ -12,10 +12,6 @@ Test posix_kill() function : usage variations - second parameter type
* Alias to functions:
*/
-/*
- * add a comment here to say what the test is supposed to do
- */
-
echo "*** Testing posix_kill() : usage variations ***\n";
// Initialise function arguments not being substituted (if any)
diff --git a/ext/posix/tests/posix_mknod.phpt b/ext/posix/tests/posix_mknod.phpt
new file mode 100644
index 000000000..1063abe5d
--- /dev/null
+++ b/ext/posix/tests/posix_mknod.phpt
@@ -0,0 +1,15 @@
+--TEST--
+posix_mknod(): Basic tests
+--SKIP--
+<?php
+if (!extension_loaded('posix')) die('skip - POSIX extension not loaded');
+if (!function_exists('posix_mknod')) die('skip posix_mknod() not found');
+?>
+--FILE--
+<?php
+
+var_dump(posix_mknod(NULL, NULL, NULL, NULL));
+
+?>
+--EXPECT--
+bool(false)
diff --git a/ext/posix/tests/posix_strerror_error.phpt b/ext/posix/tests/posix_strerror_error.phpt
index 6fc17ec0c..d9b615963 100644
--- a/ext/posix/tests/posix_strerror_error.phpt
+++ b/ext/posix/tests/posix_strerror_error.phpt
@@ -24,7 +24,7 @@ var_dump( posix_strerror($errno, $extra_arg) );
echo "\n-- Testing posix_strerror() function with invalid error number --\n";
$errno = -999;
-var_dump( posix_strerror($errno) );
+echo gettype(posix_strerror($errno))."\n";
echo "Done";
?>
@@ -42,5 +42,5 @@ Warning: posix_strerror() expects exactly 1 parameter, 2 given in %s on line %d
bool(false)
-- Testing posix_strerror() function with invalid error number --
-string(%d) "Unknown error %d"
+string
Done
diff --git a/ext/posix/tests/posix_strerror_variation1.phpt b/ext/posix/tests/posix_strerror_variation1.phpt
index 40cfab2aa..d49342b21 100644
--- a/ext/posix/tests/posix_strerror_variation1.phpt
+++ b/ext/posix/tests/posix_strerror_variation1.phpt
@@ -12,10 +12,6 @@ Test posix_strerror() function : usage variations
* Alias to functions:
*/
-/*
- * add a comment here to say what the test is supposed to do
- */
-
echo "*** Testing posix_strerror() : usage variations ***\n";
// Initialise function arguments not being substituted (if any)
@@ -73,7 +69,7 @@ $values = array(
foreach($values as $value) {
echo "\nArg value $value \n";
- var_dump( posix_strerror($value) );
+ echo gettype(posix_strerror($value))."\n";
};
echo "Done";
@@ -86,87 +82,87 @@ Notice: Undefined variable: undefined_var in %s on line %d
Notice: Undefined variable: unset_var in %s on line %d
Arg value 10.5
-string(18) "No child processes"
+string
Arg value -10.5
-string(%d) "Unknown error %d"
+string
Arg value 101234567000
-string(%d) "Unknown error %d"
+string
Arg value 1.07654321E-9
-string(7) "Success"
+string
Arg value 0.5
-string(7) "Success"
+string
Arg value Array
Warning: posix_strerror() expects parameter 1 to be long, array given in %s on line %d
-bool(false)
+boolean
Arg value Array
Warning: posix_strerror() expects parameter 1 to be long, array given in %s on line %d
-bool(false)
+boolean
Arg value Array
Warning: posix_strerror() expects parameter 1 to be long, array given in %s on line %d
-bool(false)
+boolean
Arg value Array
Warning: posix_strerror() expects parameter 1 to be long, array given in %s on line %d
-bool(false)
+boolean
Arg value Array
Warning: posix_strerror() expects parameter 1 to be long, array given in %s on line %d
-bool(false)
+boolean
Arg value
-string(7) "Success"
+string
Arg value
-string(7) "Success"
+string
Arg value 1
-string(23) "Operation not permitted"
+string
Arg value
-string(7) "Success"
+string
Arg value 1
-string(23) "Operation not permitted"
+string
Arg value
-string(7) "Success"
+string
Arg value
Warning: posix_strerror() expects parameter 1 to be long, string given in %s on line %d
-bool(false)
+boolean
Arg value
Warning: posix_strerror() expects parameter 1 to be long, string given in %s on line %d
-bool(false)
+boolean
Arg value string
Warning: posix_strerror() expects parameter 1 to be long, string given in %s on line %d
-bool(false)
+boolean
Arg value string
Warning: posix_strerror() expects parameter 1 to be long, string given in %s on line %d
-bool(false)
+boolean
Arg value
-string(7) "Success"
+string
Arg value
-string(7) "Success"
+string
Catchable fatal error: Object of class stdClass could not be converted to string in %s on line %d
diff --git a/ext/pspell/php_pspell.h b/ext/pspell/php_pspell.h
index 30fabb8d3..e8a508478 100644
--- a/ext/pspell/php_pspell.h
+++ b/ext/pspell/php_pspell.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pspell.h,v 1.15.2.1.2.4 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: php_pspell.h,v 1.15.2.1.2.5 2008/12/31 11:17:42 sebastian Exp $ */
#ifndef _PSPELL_H
#define _PSPELL_H
diff --git a/ext/pspell/pspell.c b/ext/pspell/pspell.c
index 693e3919a..26bd46853 100644
--- a/ext/pspell/pspell.c
+++ b/ext/pspell/pspell.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pspell.c,v 1.45.2.4.2.8 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: pspell.c,v 1.45.2.4.2.10 2008/12/31 11:17:42 sebastian Exp $ */
#define IS_EXT_MODULE
@@ -251,7 +251,7 @@ static PHP_FUNCTION(pspell_new)
if(pspell_error_number(ret) != 0){
php_error_docref(NULL TSRMLS_CC, E_WARNING, "PSPELL couldn't open the dictionary. reason: %s ", pspell_error_message(ret));
- delete_pspell_manager(ret);
+ delete_pspell_can_have_error(ret);
RETURN_FALSE;
}
@@ -374,7 +374,7 @@ static PHP_FUNCTION(pspell_new_personal)
if(pspell_error_number(ret) != 0){
php_error_docref(NULL TSRMLS_CC, E_WARNING, "PSPELL couldn't open the dictionary. reason: %s ", pspell_error_message(ret));
- delete_pspell_manager(ret);
+ delete_pspell_can_have_error(ret);
RETURN_FALSE;
}
@@ -408,7 +408,7 @@ static PHP_FUNCTION(pspell_new_config)
if(pspell_error_number(ret) != 0){
php_error_docref(NULL TSRMLS_CC, E_WARNING, "PSPELL couldn't open the dictionary. reason: %s ", pspell_error_message(ret));
- delete_pspell_manager(ret);
+ delete_pspell_can_have_error(ret);
RETURN_FALSE;
}
diff --git a/ext/readline/php_readline.h b/ext/readline/php_readline.h
index 726236187..63ec5fb6d 100644
--- a/ext/readline/php_readline.h
+++ b/ext/readline/php_readline.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_readline.h,v 1.17.2.1.2.2 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: php_readline.h,v 1.17.2.1.2.3 2008/12/31 11:17:42 sebastian Exp $ */
#ifndef PHP_READLINE_H
#define PHP_READLINE_H
diff --git a/ext/readline/readline.c b/ext/readline/readline.c
index e2131f500..3b674957c 100644
--- a/ext/readline/readline.c
+++ b/ext/readline/readline.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: readline.c,v 1.42.2.3.2.4 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: readline.c,v 1.42.2.3.2.9 2008/12/31 11:17:42 sebastian Exp $ */
/* {{{ includes & prototypes */
@@ -115,12 +115,14 @@ PHP_MINIT_FUNCTION(readline)
PHP_RSHUTDOWN_FUNCTION(readline)
{
- if (_readline_completion)
+ if (_readline_completion) {
+ zval_dtor(_readline_completion);
FREE_ZVAL(_readline_completion);
+ }
#if HAVE_RL_CALLBACK_READ_CHAR
if (_prepped_callback) {
rl_callback_handler_remove();
- FREE_ZVAL(_prepped_callback);
+ zval_ptr_dtor(&_prepped_callback);
_prepped_callback = 0;
}
#endif
@@ -456,9 +458,12 @@ PHP_FUNCTION(readline_completion_function)
efree(name);
RETURN_FALSE;
}
+ efree(name);
- if (_readline_completion)
+ if (_readline_completion) {
+ zval_dtor(_readline_completion);
FREE_ZVAL(_readline_completion);
+ }
MAKE_STD_ZVAL(_readline_completion);
*_readline_completion = *arg;
@@ -504,11 +509,14 @@ PHP_FUNCTION(readline_callback_handler_install)
if (!zend_is_callable(callback, 0, &name)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s is not callable", name);
+ efree(name);
RETURN_FALSE;
}
+ efree(name);
if (_prepped_callback) {
rl_callback_handler_remove();
+ zval_dtor(_prepped_callback);
FREE_ZVAL(_prepped_callback);
}
@@ -538,6 +546,7 @@ PHP_FUNCTION(readline_callback_handler_remove)
{
if (_prepped_callback) {
rl_callback_handler_remove();
+ zval_dtor(_prepped_callback);
FREE_ZVAL(_prepped_callback);
_prepped_callback = 0;
RETURN_TRUE;
diff --git a/ext/readline/tests/readline_add_history_001.phpt b/ext/readline/tests/readline_add_history_001.phpt
new file mode 100644
index 000000000..498db4027
--- /dev/null
+++ b/ext/readline/tests/readline_add_history_001.phpt
@@ -0,0 +1,32 @@
+--TEST--
+readline_add_history(): Basic test
+--SKIPIF--
+<?php if (!extension_loaded("readline")) die("skip"); ?>
+--FILE--
+<?php
+
+var_dump(readline_add_history('foo'));
+var_dump(readline_list_history());
+var_dump(readline_add_history(NULL));
+var_dump(readline_list_history());
+var_dump(readline_clear_history());
+var_dump(readline_add_history());
+
+?>
+--EXPECTF--
+bool(true)
+array(1) {
+ [0]=>
+ string(3) "foo"
+}
+bool(true)
+array(2) {
+ [0]=>
+ string(3) "foo"
+ [1]=>
+ string(0) ""
+}
+bool(true)
+
+Warning: Wrong parameter count for readline_add_history() in %s on line %d
+NULL
diff --git a/ext/readline/tests/readline_callback_handler_install_001.phpt b/ext/readline/tests/readline_callback_handler_install_001.phpt
new file mode 100644
index 000000000..6df4429bd
--- /dev/null
+++ b/ext/readline/tests/readline_callback_handler_install_001.phpt
@@ -0,0 +1,24 @@
+--TEST--
+readline_callback_handler_install(): Basic test
+--SKIPIF--
+<?php if (!extension_loaded("readline")) die("skip"); ?>
+--FILE--
+<?php
+
+function foo() {
+ readline_callback_handler_remove();
+}
+
+var_dump(readline_callback_handler_install('testing: ', 'foo'));
+var_dump(readline_callback_handler_install('testing: ', 'foobar!'));
+var_dump(readline_callback_handler_install('testing: '));
+
+?>
+--EXPECTF--
+testing: bool(true)
+
+Warning: readline_callback_handler_install(): foobar! is not callable in %s on line %d
+bool(false)
+
+Warning: readline_callback_handler_install() expects exactly 2 parameters, 1 given in %s on line %d
+NULL
diff --git a/ext/readline/tests/readline_callback_handler_remove_001.phpt b/ext/readline/tests/readline_callback_handler_remove_001.phpt
new file mode 100644
index 000000000..6688f838f
--- /dev/null
+++ b/ext/readline/tests/readline_callback_handler_remove_001.phpt
@@ -0,0 +1,20 @@
+--TEST--
+readline_callback_handler_remove(): Basic test
+--SKIPIF--
+<?php if (!extension_loaded("readline")) die("skip"); ?>
+--FILE--
+<?php
+
+var_dump(readline_callback_handler_remove());
+var_dump(readline_callback_handler_install('testing: ', 'foo'));
+
+function foo() { }
+var_dump(readline_callback_handler_install('testing: ', 'foo'));
+var_dump(readline_callback_handler_remove());
+
+?>
+--EXPECT--
+bool(false)
+testing: bool(true)
+testing: bool(true)
+bool(true)
diff --git a/ext/readline/tests/readline_clear_history_001.phpt b/ext/readline/tests/readline_clear_history_001.phpt
new file mode 100644
index 000000000..a85d54d20
--- /dev/null
+++ b/ext/readline/tests/readline_clear_history_001.phpt
@@ -0,0 +1,16 @@
+--TEST--
+readline_clear_history(): Basic test
+--SKIPIF--
+<?php if (!extension_loaded("readline")) die("skip"); ?>
+--FILE--
+<?php
+
+var_dump(readline_clear_history());
+var_dump(readline_clear_history(1));
+
+?>
+--EXPECTF--
+bool(true)
+
+Warning: Wrong parameter count for readline_clear_history() in %s on line %d
+NULL
diff --git a/ext/readline/tests/readline_completion_function_001.phpt b/ext/readline/tests/readline_completion_function_001.phpt
new file mode 100644
index 000000000..828636cd8
--- /dev/null
+++ b/ext/readline/tests/readline_completion_function_001.phpt
@@ -0,0 +1,25 @@
+--TEST--
+readline_completion_function(): Basic test
+--SKIPIF--
+<?php if (!extension_loaded("readline")) die("skip"); ?>
+--FILE--
+<?php
+
+function foo() { }
+
+$data = array(
+ 'foo',
+ 'strtolower',
+ 1,
+ 1.1231
+);
+
+foreach ($data as $callback) {
+ readline_completion_function($callback);
+}
+
+?>
+--EXPECTF--
+Warning: readline_completion_function(): 1 is not callable in %s on line %d
+
+Warning: readline_completion_function(): 1.1231 is not callable in %s on line %d
diff --git a/ext/readline/tests/readline_info_001.phpt b/ext/readline/tests/readline_info_001.phpt
new file mode 100644
index 000000000..c7bc92a4d
--- /dev/null
+++ b/ext/readline/tests/readline_info_001.phpt
@@ -0,0 +1,45 @@
+--TEST--
+readline_info(): Basic test
+--SKIPIF--
+<?php if (!extension_loaded("readline")) die("skip"); ?>
+--FILE--
+<?php
+
+var_dump(readline_info());
+var_dump(readline_info(1));
+var_dump(readline_info(1,1));
+var_dump(readline_info('line_buffer'));
+var_dump(readline_info('readline_name'));
+var_dump(readline_info('readline_name', 1));
+var_dump(readline_info('readline_name'));
+
+?>
+--EXPECTF--
+array(10) {
+ ["line_buffer"]=>
+ string(0) ""
+ ["point"]=>
+ int(0)
+ ["end"]=>
+ int(0)
+ ["mark"]=>
+ int(0)
+ ["done"]=>
+ int(0)
+ ["pending_input"]=>
+ int(0)
+ ["prompt"]=>
+ string(0) ""
+ ["terminal_name"]=>
+ string(0) ""
+ ["library_version"]=>
+ string(%d) "%s"
+ ["readline_name"]=>
+ string(5) "other"
+}
+NULL
+NULL
+string(0) ""
+string(5) "other"
+string(5) "other"
+string(1) "1"
diff --git a/ext/readline/tests/readline_list_history_001.phpt b/ext/readline/tests/readline_list_history_001.phpt
new file mode 100644
index 000000000..8aa544842
--- /dev/null
+++ b/ext/readline/tests/readline_list_history_001.phpt
@@ -0,0 +1,17 @@
+--TEST--
+readline_list_history(): Basic test
+--SKIPIF--
+<?php if (!extension_loaded("readline")) die("skip"); ?>
+--FILE--
+<?php
+
+var_dump(readline_list_history());
+var_dump(readline_list_history(1));
+
+?>
+--EXPECTF--
+array(0) {
+}
+
+Warning: Wrong parameter count for readline_list_history() in %s on line %d
+NULL
diff --git a/ext/readline/tests/readline_read_history_001.phpt b/ext/readline/tests/readline_read_history_001.phpt
new file mode 100644
index 000000000..2f7c889fa
--- /dev/null
+++ b/ext/readline/tests/readline_read_history_001.phpt
@@ -0,0 +1,30 @@
+--TEST--
+readline_read_history(): Basic test
+--SKIPIF--
+<?php if (!extension_loaded("readline")) die("skip"); ?>
+--FILE--
+<?php
+
+$name = tempnam('/tmp', 'readline.tmp');
+
+readline_add_history("foo\n");
+
+var_dump(readline_write_history($name));
+
+var_dump(readline_clear_history());
+
+var_dump(readline_read_history($name));
+
+var_dump(readline_list_history());
+
+unlink($name);
+
+?>
+--EXPECT--
+bool(true)
+bool(true)
+bool(true)
+array(1) {
+ [0]=>
+ string(3) "foo"
+}
diff --git a/ext/readline/tests/readline_write_history_001.phpt b/ext/readline/tests/readline_write_history_001.phpt
new file mode 100644
index 000000000..eca831ff8
--- /dev/null
+++ b/ext/readline/tests/readline_write_history_001.phpt
@@ -0,0 +1,26 @@
+--TEST--
+readline_write_history(): Basic test
+--SKIPIF--
+<?php if (!extension_loaded("readline")) die("skip"); ?>
+--FILE--
+<?php
+
+$name = tempnam('/tmp', 'readline.tmp');
+
+readline_add_history('foo');
+readline_add_history('');
+readline_add_history(1);
+readline_add_history(NULL);
+readline_write_history($name);
+
+var_dump(file_get_contents($name));
+
+unlink($name);
+
+?>
+--EXPECT--
+string(8) "foo
+
+1
+
+"
diff --git a/ext/recode/php_recode.h b/ext/recode/php_recode.h
index d1027882c..bfc95c6d8 100644
--- a/ext/recode/php_recode.h
+++ b/ext/recode/php_recode.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_recode.h,v 1.17.2.1.2.2 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: php_recode.h,v 1.17.2.1.2.3 2008/12/31 11:17:42 sebastian Exp $ */
#ifndef PHP_RECODE_H
#define PHP_RECODE_H
diff --git a/ext/recode/recode.c b/ext/recode/recode.c
index c6598e7c9..14d53f0f9 100644
--- a/ext/recode/recode.c
+++ b/ext/recode/recode.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: recode.c,v 1.37.2.1.2.4 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: recode.c,v 1.37.2.1.2.5 2008/12/31 11:17:42 sebastian Exp $ */
/* {{{ includes & prototypes */
@@ -122,7 +122,7 @@ PHP_MINFO_FUNCTION(recode)
{
php_info_print_table_start();
php_info_print_table_row(2, "Recode Support", "enabled");
- php_info_print_table_row(2, "Revision", "$Revision: 1.37.2.1.2.4 $");
+ php_info_print_table_row(2, "Revision", "$Revision: 1.37.2.1.2.5 $");
php_info_print_table_end();
}
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index 88791a3fe..0f53f6d09 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -20,7 +20,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_reflection.c,v 1.164.2.33.2.50 2008/03/13 15:56:21 iliaa Exp $ */
+/* $Id: php_reflection.c,v 1.164.2.33.2.55 2008/12/31 11:17:42 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -634,7 +634,7 @@ static void _parameter_string(string *str, zend_function *fptr, struct _zend_arg
*zv = precv->op2.u.constant;
zval_copy_ctor(zv);
INIT_PZVAL(zv);
- zval_update_constant(&zv, (void*)1 TSRMLS_CC);
+ zval_update_constant_ex(&zv, (void*)1, fptr->common.scope TSRMLS_CC);
if (Z_TYPE_P(zv) == IS_BOOL) {
if (Z_LVAL_P(zv)) {
string_write(str, "true", sizeof("true")-1);
@@ -1341,6 +1341,9 @@ ZEND_METHOD(reflection, getModifierNames)
if (modifiers & (ZEND_ACC_FINAL | ZEND_ACC_FINAL_CLASS)) {
add_next_index_stringl(return_value, "final", sizeof("final")-1, 1);
}
+ if (modifiers & ZEND_ACC_IMPLICIT_PUBLIC) {
+ add_next_index_stringl(return_value, "public", sizeof("public")-1, 1);
+ }
/* These are mutually exclusive */
switch (modifiers & ZEND_ACC_PPP_MASK) {
@@ -1871,7 +1874,7 @@ ZEND_METHOD(reflection_parameter, __construct)
if (zend_hash_find(&ce->function_table, lcname, lcname_len + 1, (void **) &fptr) == FAILURE) {
efree(lcname);
zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC,
- "Method %s::%s() does not exist", Z_STRVAL_PP(classref), Z_TYPE_PP(method), Z_STRVAL_PP(method));
+ "Method %s::%s() does not exist", ce->name, Z_STRVAL_PP(method));
return;
}
efree(lcname);
@@ -3136,9 +3139,25 @@ ZEND_METHOD(reflection_class, getProperty)
}
GET_REFLECTION_OBJECT_PTR(ce);
- if (zend_hash_find(&ce->properties_info, name, name_len + 1, (void**) &property_info) == SUCCESS && (property_info->flags & ZEND_ACC_SHADOW) == 0) {
- reflection_property_factory(ce, property_info, return_value TSRMLS_CC);
- return;
+ if (zend_hash_find(&ce->properties_info, name, name_len + 1, (void**) &property_info) == SUCCESS) {
+ if ((property_info->flags & ZEND_ACC_SHADOW) == 0) {
+ reflection_property_factory(ce, property_info, return_value TSRMLS_CC);
+ return;
+ }
+ } else if (intern->obj) {
+ /* Check for dynamic properties */
+ if (zend_hash_exists(Z_OBJ_HT_P(intern->obj)->get_properties(intern->obj TSRMLS_CC), name, name_len+1)) {
+ zend_property_info property_info_tmp;
+ property_info_tmp.flags = ZEND_ACC_IMPLICIT_PUBLIC;
+ property_info_tmp.name = name;
+ property_info_tmp.name_length = name_len;
+ property_info_tmp.h = zend_get_hash_value(name, name_len+1);
+ property_info_tmp.doc_comment = NULL;
+ property_info_tmp.ce = ce;
+
+ reflection_property_factory(ce, &property_info_tmp, return_value TSRMLS_CC);
+ return;
+ }
}
if ((tmp = strstr(name, "::")) != NULL) {
classname_len = tmp - name;
@@ -3784,12 +3803,12 @@ ZEND_METHOD(reflection_property, __construct)
{
zval *propname, *classname;
char *name_str, *class_name, *prop_name;
- int name_len;
+ int name_len, dynam_prop = 0;
zval *object;
reflection_object *intern;
zend_class_entry **pce;
zend_class_entry *ce;
- zend_property_info *property_info;
+ zend_property_info *property_info = NULL;
property_reference *reference;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zs", &classname, &name_str, &name_len) == FAILURE) {
@@ -3823,12 +3842,19 @@ ZEND_METHOD(reflection_property, __construct)
}
if (zend_hash_find(&ce->properties_info, name_str, name_len + 1, (void **) &property_info) == FAILURE || (property_info->flags & ZEND_ACC_SHADOW)) {
- zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC,
- "Property %s::$%s does not exist", ce->name, name_str);
- return;
+ /* Check for dynamic properties */
+ if (property_info == NULL && Z_TYPE_P(classname) == IS_OBJECT && Z_OBJ_HT_P(classname)->get_properties) {
+ if (zend_hash_exists(Z_OBJ_HT_P(classname)->get_properties(classname TSRMLS_CC), name_str, name_len+1)) {
+ dynam_prop = 1;
+ }
+ }
+ if (dynam_prop == 0) {
+ zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, "Property %s::$%s does not exist", ce->name, name_str);
+ return;
+ }
}
- if (!(property_info->flags & ZEND_ACC_PRIVATE)) {
+ if (dynam_prop == 0 && (property_info->flags & ZEND_ACC_PRIVATE) == 0) {
/* we have to search the class hierarchy for this (implicit) public or protected property */
zend_class_entry *tmp_ce = ce;
zend_property_info *tmp_info;
@@ -3844,14 +3870,27 @@ ZEND_METHOD(reflection_property, __construct)
ZVAL_STRINGL(classname, ce->name, ce->name_length, 1);
zend_hash_update(Z_OBJPROP_P(object), "class", sizeof("class"), (void **) &classname, sizeof(zval *), NULL);
- zend_unmangle_property_name(property_info->name, property_info->name_length, &class_name, &prop_name);
MAKE_STD_ZVAL(propname);
- ZVAL_STRING(propname, prop_name, 1);
+ if (dynam_prop == 0) {
+ zend_unmangle_property_name(property_info->name, property_info->name_length, &class_name, &prop_name);
+ ZVAL_STRING(propname, prop_name, 1);
+ } else {
+ ZVAL_STRINGL(propname, name_str, name_len, 1);
+ }
zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &propname, sizeof(zval *), NULL);
reference = (property_reference*) emalloc(sizeof(property_reference));
+ if (dynam_prop) {
+ reference->prop.flags = ZEND_ACC_IMPLICIT_PUBLIC;
+ reference->prop.name = Z_STRVAL_P(propname);
+ reference->prop.name_length = Z_STRLEN_P(propname);
+ reference->prop.h = zend_get_hash_value(name_str, name_len+1);
+ reference->prop.doc_comment = NULL;
+ reference->prop.ce = ce;
+ } else {
+ reference->prop = *property_info;
+ }
reference->ce = ce;
- reference->prop = *property_info;
intern->ptr = reference;
intern->free_ptr = 1;
intern->ce = ce;
@@ -3897,7 +3936,7 @@ static void _property_check_flag(INTERNAL_FUNCTION_PARAMETERS, int mask)
Returns whether this property is public */
ZEND_METHOD(reflection_property, isPublic)
{
- _property_check_flag(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_ACC_PUBLIC);
+ _property_check_flag(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_ACC_PUBLIC | ZEND_ACC_IMPLICIT_PUBLIC);
}
/* }}} */
@@ -3959,7 +3998,7 @@ ZEND_METHOD(reflection_property, getValue)
METHOD_NOTSTATIC(reflection_property_ptr);
GET_REFLECTION_OBJECT_PTR(ref);
- if (!(ref->prop.flags & ZEND_ACC_PUBLIC)) {
+ if (!(ref->prop.flags & (ZEND_ACC_PUBLIC | ZEND_ACC_IMPLICIT_PUBLIC))) {
_default_get_entry(getThis(), "name", sizeof("name"), &name TSRMLS_CC);
zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC,
"Cannot access non-public member %s::%s", intern->ce->name, Z_STRVAL(name));
@@ -4081,7 +4120,7 @@ ZEND_METHOD(reflection_property, getDeclaringClass)
prop_name_len = strlen(prop_name);
ce = tmp_ce = ref->ce;
while (tmp_ce && zend_hash_find(&tmp_ce->properties_info, prop_name, prop_name_len + 1, (void **) &tmp_info) == SUCCESS) {
- if (tmp_info->flags & ZEND_ACC_PRIVATE) {
+ if (tmp_info->flags & ZEND_ACC_PRIVATE || tmp_info->flags & ZEND_ACC_SHADOW) {
/* it's a private property, so it can't be inherited */
break;
}
@@ -4908,7 +4947,7 @@ PHP_MINFO_FUNCTION(reflection) /* {{{ */
php_info_print_table_start();
php_info_print_table_header(2, "Reflection", "enabled");
- php_info_print_table_row(2, "Version", "$Id: php_reflection.c,v 1.164.2.33.2.50 2008/03/13 15:56:21 iliaa Exp $");
+ php_info_print_table_row(2, "Version", "$Id: php_reflection.c,v 1.164.2.33.2.55 2008/12/31 11:17:42 sebastian Exp $");
php_info_print_table_end();
} /* }}} */
diff --git a/ext/reflection/php_reflection.h b/ext/reflection/php_reflection.h
index f7ff5fe4c..147054be6 100644
--- a/ext/reflection/php_reflection.h
+++ b/ext/reflection/php_reflection.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_reflection.h,v 1.4.2.3.2.3 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: php_reflection.h,v 1.4.2.3.2.4 2008/12/31 11:17:43 sebastian Exp $ */
#ifndef PHP_REFLECTION_H
#define PHP_REFLECTION_H
diff --git a/ext/reflection/tests/001.phpt b/ext/reflection/tests/001.phpt
index 55458885c..8e4a48729 100755
--- a/ext/reflection/tests/001.phpt
+++ b/ext/reflection/tests/001.phpt
@@ -1,91 +1,91 @@
---TEST--
-Reflection inheritance
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-
-class ReflectionClassEx extends ReflectionClass
-{
- public $bla;
-
- function getMethodNames()
- {
- $res = array();
- foreach($this->getMethods() as $m)
- {
- $res[] = $m->class . '::' . $m->name;
- }
- return $res;
- }
-}
-
-$r = new ReflectionClassEx('ReflectionClassEx');
-
-$exp = array (
- 'UMLClass::__clone',
- 'UMLClass::export',
- 'UMLClass::__construct',
- 'UMLClass::__toString',
- 'UMLClass::getName',
- 'UMLClass::isInternal',
- 'UMLClass::isUserDefined',
- 'UMLClass::isInstantiable',
- 'UMLClass::getFileName',
- 'UMLClass::getStartLine',
- 'UMLClass::getEndLine',
- 'UMLClass::getDocComment',
- 'UMLClass::getConstructor',
- 'UMLClass::getMethod',
- 'UMLClass::getMethods',
- 'UMLClass::getProperty',
- 'UMLClass::getProperties',
- 'UMLClass::getConstants',
- 'UMLClass::getConstant',
- 'UMLClass::getInterfaces',
- 'UMLClass::isInterface',
- 'UMLClass::isAbstract',
- 'UMLClass::isFinal',
- 'UMLClass::getModifiers',
- 'UMLClass::isInstance',
- 'UMLClass::newInstance',
- 'UMLClass::getParentClass',
- 'UMLClass::isSubclassOf',
- 'UMLClass::getStaticProperties',
- 'UMLClass::getDefaultProperties',
- 'UMLClass::isIterateable',
- 'UMLClass::implementsInterface',
- 'UMLClass::getExtension',
- 'UMLClass::getExtensionName');
-
-$miss = array();
-
-$res = $r->getMethodNames();
-
-foreach($exp as $m)
-{
- if (!in_array($m, $exp))
- {
- $miss[] = $m;
- }
-}
-
-var_dump($miss);
-
-$props = array_keys(get_class_vars('ReflectionClassEx'));
-sort($props);
-var_dump($props);
-var_dump($r->name);
-?>
-===DONE===
---EXPECT--
-array(0) {
-}
-array(2) {
- [0]=>
- string(3) "bla"
- [1]=>
- string(4) "name"
-}
-string(17) "ReflectionClassEx"
-===DONE===
+--TEST--
+Reflection inheritance
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+
+class ReflectionClassEx extends ReflectionClass
+{
+ public $bla;
+
+ function getMethodNames()
+ {
+ $res = array();
+ foreach($this->getMethods() as $m)
+ {
+ $res[] = $m->class . '::' . $m->name;
+ }
+ return $res;
+ }
+}
+
+$r = new ReflectionClassEx('ReflectionClassEx');
+
+$exp = array (
+ 'UMLClass::__clone',
+ 'UMLClass::export',
+ 'UMLClass::__construct',
+ 'UMLClass::__toString',
+ 'UMLClass::getName',
+ 'UMLClass::isInternal',
+ 'UMLClass::isUserDefined',
+ 'UMLClass::isInstantiable',
+ 'UMLClass::getFileName',
+ 'UMLClass::getStartLine',
+ 'UMLClass::getEndLine',
+ 'UMLClass::getDocComment',
+ 'UMLClass::getConstructor',
+ 'UMLClass::getMethod',
+ 'UMLClass::getMethods',
+ 'UMLClass::getProperty',
+ 'UMLClass::getProperties',
+ 'UMLClass::getConstants',
+ 'UMLClass::getConstant',
+ 'UMLClass::getInterfaces',
+ 'UMLClass::isInterface',
+ 'UMLClass::isAbstract',
+ 'UMLClass::isFinal',
+ 'UMLClass::getModifiers',
+ 'UMLClass::isInstance',
+ 'UMLClass::newInstance',
+ 'UMLClass::getParentClass',
+ 'UMLClass::isSubclassOf',
+ 'UMLClass::getStaticProperties',
+ 'UMLClass::getDefaultProperties',
+ 'UMLClass::isIterateable',
+ 'UMLClass::implementsInterface',
+ 'UMLClass::getExtension',
+ 'UMLClass::getExtensionName');
+
+$miss = array();
+
+$res = $r->getMethodNames();
+
+foreach($exp as $m)
+{
+ if (!in_array($m, $exp))
+ {
+ $miss[] = $m;
+ }
+}
+
+var_dump($miss);
+
+$props = array_keys(get_class_vars('ReflectionClassEx'));
+sort($props);
+var_dump($props);
+var_dump($r->name);
+?>
+===DONE===
+--EXPECT--
+array(0) {
+}
+array(2) {
+ [0]=>
+ string(3) "bla"
+ [1]=>
+ string(4) "name"
+}
+string(17) "ReflectionClassEx"
+===DONE===
diff --git a/ext/reflection/tests/002.phpt b/ext/reflection/tests/002.phpt
index 9b233d372..e522ac807 100755
--- a/ext/reflection/tests/002.phpt
+++ b/ext/reflection/tests/002.phpt
@@ -1,65 +1,65 @@
---TEST--
-Reflection properties are read only
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-
-class ReflectionMethodEx extends ReflectionMethod
-{
- public $foo = "xyz";
-
- function __construct($c,$m)
- {
- echo __METHOD__ . "\n";
- parent::__construct($c,$m);
- }
-}
-
-$r = new ReflectionMethodEx('ReflectionMethodEx','getName');
-
-var_dump($r->class);
-var_dump($r->name);
-var_dump($r->foo);
-@var_dump($r->bar);
-
-try
-{
- $r->class = 'bullshit';
-}
-catch(ReflectionException $e)
-{
- echo $e->getMessage() . "\n";
-}
-try
-{
-$r->name = 'bullshit';
-}
-catch(ReflectionException $e)
-{
- echo $e->getMessage() . "\n";
-}
-
-$r->foo = 'bar';
-$r->bar = 'baz';
-
-var_dump($r->class);
-var_dump($r->name);
-var_dump($r->foo);
-var_dump($r->bar);
-
-?>
-===DONE===
---EXPECTF--
-ReflectionMethodEx::__construct
-string(18) "ReflectionMethodEx"
-string(7) "getName"
-string(3) "xyz"
-NULL
-Cannot set read-only property ReflectionMethodEx::$class
-Cannot set read-only property ReflectionMethodEx::$name
-string(18) "ReflectionMethodEx"
-string(7) "getName"
-string(3) "bar"
-string(3) "baz"
-===DONE===
+--TEST--
+Reflection properties are read only
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+
+class ReflectionMethodEx extends ReflectionMethod
+{
+ public $foo = "xyz";
+
+ function __construct($c,$m)
+ {
+ echo __METHOD__ . "\n";
+ parent::__construct($c,$m);
+ }
+}
+
+$r = new ReflectionMethodEx('ReflectionMethodEx','getName');
+
+var_dump($r->class);
+var_dump($r->name);
+var_dump($r->foo);
+@var_dump($r->bar);
+
+try
+{
+ $r->class = 'bullshit';
+}
+catch(ReflectionException $e)
+{
+ echo $e->getMessage() . "\n";
+}
+try
+{
+$r->name = 'bullshit';
+}
+catch(ReflectionException $e)
+{
+ echo $e->getMessage() . "\n";
+}
+
+$r->foo = 'bar';
+$r->bar = 'baz';
+
+var_dump($r->class);
+var_dump($r->name);
+var_dump($r->foo);
+var_dump($r->bar);
+
+?>
+===DONE===
+--EXPECTF--
+ReflectionMethodEx::__construct
+string(18) "ReflectionMethodEx"
+string(7) "getName"
+string(3) "xyz"
+NULL
+Cannot set read-only property ReflectionMethodEx::$class
+Cannot set read-only property ReflectionMethodEx::$name
+string(18) "ReflectionMethodEx"
+string(7) "getName"
+string(3) "bar"
+string(3) "baz"
+===DONE===
diff --git a/ext/reflection/tests/004.phpt b/ext/reflection/tests/004.phpt
index 912d52654..362cbcecd 100755
--- a/ext/reflection/tests/004.phpt
+++ b/ext/reflection/tests/004.phpt
@@ -1,44 +1,44 @@
---TEST--
-ReflectionMethod::invoke() with non object or null value
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-
-class a {
- function a(){
- }
-}
-class b {
-}
-
-$b = new b();
-
-$a=new ReflectionClass("a");
-$m=$a->getMethod("a");
-
-try {
- $m->invoke(null);
-} catch (ReflectionException $E) {
- echo $E->getMessage()."\n";
-}
-
-
-try {
- $m->invoke($b);
-} catch (ReflectionException $E) {
- echo $E->getMessage()."\n";
-}
-
-$b = new a();
-try {
- $m->invoke($b);
-} catch (ReflectionException $E) {
- echo $E->getMessage()."\n";
-}
-
-echo "===DONE===\n";?>
---EXPECT--
-Non-object passed to Invoke()
-Given object is not an instance of the class this method was declared in
-===DONE===
+--TEST--
+ReflectionMethod::invoke() with non object or null value
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+
+class a {
+ function a(){
+ }
+}
+class b {
+}
+
+$b = new b();
+
+$a=new ReflectionClass("a");
+$m=$a->getMethod("a");
+
+try {
+ $m->invoke(null);
+} catch (ReflectionException $E) {
+ echo $E->getMessage()."\n";
+}
+
+
+try {
+ $m->invoke($b);
+} catch (ReflectionException $E) {
+ echo $E->getMessage()."\n";
+}
+
+$b = new a();
+try {
+ $m->invoke($b);
+} catch (ReflectionException $E) {
+ echo $E->getMessage()."\n";
+}
+
+echo "===DONE===\n";?>
+--EXPECT--
+Non-object passed to Invoke()
+Given object is not an instance of the class this method was declared in
+===DONE===
diff --git a/ext/reflection/tests/ReflectionClass_getDefaultProperties_001.phpt b/ext/reflection/tests/ReflectionClass_getDefaultProperties_001.phpt
new file mode 100644
index 000000000..3bf8f77ec
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getDefaultProperties_001.phpt
@@ -0,0 +1,198 @@
+--TEST--
+ReflectionClass::getDefaultProperties(), ReflectionClass::getStaticProperties()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+
+
+class A {
+ static public $statPubC = "stat pubC in A";
+ static protected $statProtC = "stat protC in A";
+ static private $statPrivC = "stat privC in A";
+
+ static public $statPubA = "stat pubA in A";
+ static protected $statProtA = "stat protA in A";
+ static private $statPrivA = "stat privA in A";
+
+ public $pubC = "pubC in A";
+ protected $protC = "protC in A";
+ private $privC = "privC in A";
+
+ public $pubA = "pubA in A";
+ protected $protA = "protA in A";
+ private $privA = "privA in A";
+}
+
+class B extends A {
+ static public $statPubC = "stat pubC in B";
+ static protected $statProtC = "stat protC in B";
+ static private $statPrivC = "stat privC in B";
+
+ static public $statPubB = "stat pubB in B";
+ static protected $statProtB = "stat protB in B";
+ static private $statPrivB = "stat privB in B";
+
+ public $pubC = "pubC in B";
+ protected $protC = "protC in B";
+ private $privC = "privC in B";
+
+ public $pubB = "pubB in B";
+ protected $protB = "protB in B";
+ private $privB = "privB in B";
+}
+
+class C extends B {
+ static public $statPubC = "stat pubC in C";
+ static protected $statProtC = "stat protC in C";
+ static private $statPrivC = "stat privC in C";
+
+ public $pubC = "pubC in C";
+ protected $protC = "protC in C";
+ private $privC = "privC in C";
+}
+
+class X {
+ static public $statPubC = "stat pubC in X";
+ static protected $statProtC = "stat protC in X";
+ static private $statPrivC = "stat privC in X";
+
+ public $pubC = "pubC in X";
+ protected $protC = "protC in X";
+ private $privC = "privC in X";
+}
+
+$classes = array('A', 'B', 'C', 'X');
+foreach ($classes as $class) {
+ $rc = new ReflectionClass($class);
+ echo "\n\n---- Static properties in $class ----\n";
+ print_r($rc->getStaticProperties());
+ echo "\n\n---- Default properties in $class ----\n";
+ print_r($rc->getDefaultProperties());
+}
+
+?>
+--EXPECTF--
+---- Static properties in A ----
+Array
+(
+ [statPubC] => stat pubC in A
+ [statProtC] => stat protC in A
+ [statPrivC] => stat privC in A
+ [statPubA] => stat pubA in A
+ [statProtA] => stat protA in A
+ [statPrivA] => stat privA in A
+)
+
+
+---- Default properties in A ----
+Array
+(
+ [statPubC] => stat pubC in A
+ [statProtC] => stat protC in A
+ [statPrivC] => stat privC in A
+ [statPubA] => stat pubA in A
+ [statProtA] => stat protA in A
+ [statPrivA] => stat privA in A
+ [pubC] => pubC in A
+ [protC] => protC in A
+ [privC] => privC in A
+ [pubA] => pubA in A
+ [protA] => protA in A
+ [privA] => privA in A
+)
+
+
+---- Static properties in B ----
+Array
+(
+ [statPubC] => stat pubC in B
+ [statProtC] => stat protC in B
+ [statPrivC] => stat privC in A
+ [statPubB] => stat pubB in B
+ [statProtB] => stat protB in B
+ [statPrivB] => stat privB in B
+ [statPubA] => stat pubA in A
+ [statProtA] => stat protA in A
+ [statPrivA] => stat privA in A
+)
+
+
+---- Default properties in B ----
+Array
+(
+ [statPubC] => stat pubC in B
+ [statProtC] => stat protC in B
+ [statPrivC] => stat privC in B
+ [statPubB] => stat pubB in B
+ [statProtB] => stat protB in B
+ [statPrivB] => stat privB in B
+ [statPubA] => stat pubA in A
+ [statProtA] => stat protA in A
+ [pubC] => pubC in B
+ [protC] => protC in B
+ [privC] => privC in B
+ [pubB] => pubB in B
+ [protB] => protB in B
+ [privB] => privB in B
+ [pubA] => pubA in A
+ [protA] => protA in A
+)
+
+
+---- Static properties in C ----
+Array
+(
+ [statPubC] => stat pubC in C
+ [statProtC] => stat protC in C
+ [statPrivC] => stat privC in A
+ [statPubB] => stat pubB in B
+ [statProtB] => stat protB in B
+ [statPrivB] => stat privB in B
+ [statPubA] => stat pubA in A
+ [statProtA] => stat protA in A
+ [statPrivA] => stat privA in A
+)
+
+
+---- Default properties in C ----
+Array
+(
+ [statPubC] => stat pubC in C
+ [statProtC] => stat protC in C
+ [statPrivC] => stat privC in C
+ [statPubB] => stat pubB in B
+ [statProtB] => stat protB in B
+ [statPubA] => stat pubA in A
+ [statProtA] => stat protA in A
+ [pubC] => pubC in C
+ [protC] => protC in C
+ [privC] => privC in C
+ [pubB] => pubB in B
+ [protB] => protB in B
+ [pubA] => pubA in A
+ [protA] => protA in A
+)
+
+
+---- Static properties in X ----
+Array
+(
+ [statPubC] => stat pubC in X
+ [statProtC] => stat protC in X
+ [statPrivC] => stat privC in X
+)
+
+
+---- Default properties in X ----
+Array
+(
+ [statPubC] => stat pubC in X
+ [statProtC] => stat protC in X
+ [statPrivC] => stat privC in X
+ [pubC] => pubC in X
+ [protC] => protC in X
+ [privC] => privC in X
+)
+
diff --git a/ext/reflection/tests/ReflectionClass_getDefaultProperties_002.phpt b/ext/reflection/tests/ReflectionClass_getDefaultProperties_002.phpt
new file mode 100644
index 000000000..6012f0855
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getDefaultProperties_002.phpt
@@ -0,0 +1,45 @@
+--TEST--
+ReflectionClass::getDefaultProperties(), ReflectionClass::getStaticProperties() - wrong param count
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+interface I {}
+class C implements I {}
+$rc = new ReflectionClass('C');
+var_dump($rc->getDefaultProperties(null));
+var_dump($rc->getDefaultProperties('X'));
+var_dump($rc->getDefaultProperties(true));
+var_dump($rc->getDefaultProperties(array(1,2,3)));
+var_dump($rc->getStaticProperties(null));
+var_dump($rc->getStaticProperties('X'));
+var_dump($rc->getStaticProperties(true));
+var_dump($rc->getStaticProperties(array(1,2,3)));
+
+?>
+--EXPECTF--
+
+Warning: Wrong parameter count for ReflectionClass::getDefaultProperties() in %s on line 5
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getDefaultProperties() in %s on line 6
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getDefaultProperties() in %s on line 7
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getDefaultProperties() in %s on line 8
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getStaticProperties() in %s on line 9
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getStaticProperties() in %s on line 10
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getStaticProperties() in %s on line 11
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getStaticProperties() in %s on line 12
+NULL \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_getDocComment_001.phpt b/ext/reflection/tests/ReflectionClass_getDocComment_001.phpt
new file mode 100644
index 000000000..5feb560ae
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getDocComment_001.phpt
@@ -0,0 +1,98 @@
+--TEST--
+ReflectionClass::getDocComment()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+/**
+
+
+ My
+Doc
+ * Comment
+for A
+
+* */
+class A {}
+
+/** My DocComment for B */
+class B extends A { }
+
+class C extends B {}
+
+/**
+ * Interface doc comment
+ */
+
+
+
+
+interface I {}
+
+/*.*
+ * Not a doc comment
+ */
+class D implements I {}
+
+/**** Not a doc comment */
+class E extends C implements I {} {}
+
+/**?** Not a doc comment */
+class F extends C implements I {} {}
+
+/** ** Doc comment for G */
+final class G extends C implements I {} {}
+
+$classes = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'I');
+foreach ($classes as $class) {
+ echo "\n\n---> Doc comment for class $class:\n";
+ $rc = new ReflectionClass($class);
+ var_dump($rc->getDocComment());
+}
+
+
+?>
+--EXPECTF--
+
+
+---> Doc comment for class A:
+string(%d) "/**
+
+
+ My
+Doc
+ * Comment
+for A
+
+* */"
+
+
+---> Doc comment for class B:
+string(26) "/** My DocComment for B */"
+
+
+---> Doc comment for class C:
+bool(false)
+
+
+---> Doc comment for class D:
+bool(false)
+
+
+---> Doc comment for class E:
+bool(false)
+
+
+---> Doc comment for class F:
+bool(false)
+
+
+---> Doc comment for class G:
+string(27) "/** ** Doc comment for G */"
+
+
+---> Doc comment for class I:
+string(%d) "/**
+ * Interface doc comment
+ */" \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_getDocComment_002.phpt b/ext/reflection/tests/ReflectionClass_getDocComment_002.phpt
new file mode 100644
index 000000000..6668a8b65
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getDocComment_002.phpt
@@ -0,0 +1,27 @@
+--TEST--
+ReflectionClass::getDocComment() - bad params
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class C {}
+$rc = new ReflectionClass('C');
+var_dump($rc->getDocComment(null));
+var_dump($rc->getDocComment('X'));
+var_dump($rc->getDocComment(true));
+var_dump($rc->getDocComment(array(1,2,3)));
+?>
+--EXPECTF--
+
+Warning: Wrong parameter count for ReflectionClass::getDocComment() in %s on line 4
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getDocComment() in %s on line 5
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getDocComment() in %s on line 6
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getDocComment() in %s on line 7
+NULL
diff --git a/ext/reflection/tests/ReflectionClass_getInterfaces_001.phpt b/ext/reflection/tests/ReflectionClass_getInterfaces_001.phpt
new file mode 100644
index 000000000..42136003e
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getInterfaces_001.phpt
@@ -0,0 +1,311 @@
+--TEST--
+ReflectionClass::getInterfaces()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class A0 {}
+class B0 extends A0 {}
+abstract class A1 {}
+class B1 extends A1 {}
+
+interface I0 {}
+interface I1 {}
+interface I2 {}
+interface I3 {}
+interface I4 extends I3 {}
+interface I5 extends I4 {}
+interface I6 extends I5, I1, I2 {}
+interface I7 extends I6 {}
+
+class C0 implements I0 {}
+class C1 implements I1, I3 {}
+class C2 extends C1 {}
+class C3 extends C2 implements I1 {}
+class C4 extends C3 implements I2 {}
+class C5 extends C4 implements I7 {}
+class C6 implements I1, I2, I3, I4, I5, I6, I7 {}
+
+
+$classes = array( 'A0', 'A1', 'B0', 'B1',
+ 'I0', 'I1', 'I2', 'I3', 'I4', 'I5', 'I6', 'I7',
+ 'C0', 'C1', 'C2', 'C3', 'C4', 'C5', 'C6' );
+
+foreach ($classes as $class) {
+ echo "---( Interfaces implemented by $class )---\n ";
+ $rc = new ReflectionClass($class);
+ $interfaces = $rc->getInterfaces();
+ // Sort interfaces so that tests do not fail because of wrong order.
+ ksort($interfaces);
+ print_r($interfaces);
+}
+
+?>
+--EXPECTF--
+---( Interfaces implemented by A0 )---
+ Array
+(
+)
+---( Interfaces implemented by A1 )---
+ Array
+(
+)
+---( Interfaces implemented by B0 )---
+ Array
+(
+)
+---( Interfaces implemented by B1 )---
+ Array
+(
+)
+---( Interfaces implemented by I0 )---
+ Array
+(
+)
+---( Interfaces implemented by I1 )---
+ Array
+(
+)
+---( Interfaces implemented by I2 )---
+ Array
+(
+)
+---( Interfaces implemented by I3 )---
+ Array
+(
+)
+---( Interfaces implemented by I4 )---
+ Array
+(
+ [I3] => ReflectionClass Object
+ (
+ [name] => I3
+ )
+
+)
+---( Interfaces implemented by I5 )---
+ Array
+(
+ [I3] => ReflectionClass Object
+ (
+ [name] => I3
+ )
+
+ [I4] => ReflectionClass Object
+ (
+ [name] => I4
+ )
+
+)
+---( Interfaces implemented by I6 )---
+ Array
+(
+ [I1] => ReflectionClass Object
+ (
+ [name] => I1
+ )
+
+ [I2] => ReflectionClass Object
+ (
+ [name] => I2
+ )
+
+ [I3] => ReflectionClass Object
+ (
+ [name] => I3
+ )
+
+ [I4] => ReflectionClass Object
+ (
+ [name] => I4
+ )
+
+ [I5] => ReflectionClass Object
+ (
+ [name] => I5
+ )
+
+)
+---( Interfaces implemented by I7 )---
+ Array
+(
+ [I1] => ReflectionClass Object
+ (
+ [name] => I1
+ )
+
+ [I2] => ReflectionClass Object
+ (
+ [name] => I2
+ )
+
+ [I3] => ReflectionClass Object
+ (
+ [name] => I3
+ )
+
+ [I4] => ReflectionClass Object
+ (
+ [name] => I4
+ )
+
+ [I5] => ReflectionClass Object
+ (
+ [name] => I5
+ )
+
+ [I6] => ReflectionClass Object
+ (
+ [name] => I6
+ )
+
+)
+---( Interfaces implemented by C0 )---
+ Array
+(
+ [I0] => ReflectionClass Object
+ (
+ [name] => I0
+ )
+
+)
+---( Interfaces implemented by C1 )---
+ Array
+(
+ [I1] => ReflectionClass Object
+ (
+ [name] => I1
+ )
+
+ [I3] => ReflectionClass Object
+ (
+ [name] => I3
+ )
+
+)
+---( Interfaces implemented by C2 )---
+ Array
+(
+ [I1] => ReflectionClass Object
+ (
+ [name] => I1
+ )
+
+ [I3] => ReflectionClass Object
+ (
+ [name] => I3
+ )
+
+)
+---( Interfaces implemented by C3 )---
+ Array
+(
+ [I1] => ReflectionClass Object
+ (
+ [name] => I1
+ )
+
+ [I3] => ReflectionClass Object
+ (
+ [name] => I3
+ )
+
+)
+---( Interfaces implemented by C4 )---
+ Array
+(
+ [I1] => ReflectionClass Object
+ (
+ [name] => I1
+ )
+
+ [I2] => ReflectionClass Object
+ (
+ [name] => I2
+ )
+
+ [I3] => ReflectionClass Object
+ (
+ [name] => I3
+ )
+
+)
+---( Interfaces implemented by C5 )---
+ Array
+(
+ [I1] => ReflectionClass Object
+ (
+ [name] => I1
+ )
+
+ [I2] => ReflectionClass Object
+ (
+ [name] => I2
+ )
+
+ [I3] => ReflectionClass Object
+ (
+ [name] => I3
+ )
+
+ [I4] => ReflectionClass Object
+ (
+ [name] => I4
+ )
+
+ [I5] => ReflectionClass Object
+ (
+ [name] => I5
+ )
+
+ [I6] => ReflectionClass Object
+ (
+ [name] => I6
+ )
+
+ [I7] => ReflectionClass Object
+ (
+ [name] => I7
+ )
+
+)
+---( Interfaces implemented by C6 )---
+ Array
+(
+ [I1] => ReflectionClass Object
+ (
+ [name] => I1
+ )
+
+ [I2] => ReflectionClass Object
+ (
+ [name] => I2
+ )
+
+ [I3] => ReflectionClass Object
+ (
+ [name] => I3
+ )
+
+ [I4] => ReflectionClass Object
+ (
+ [name] => I4
+ )
+
+ [I5] => ReflectionClass Object
+ (
+ [name] => I5
+ )
+
+ [I6] => ReflectionClass Object
+ (
+ [name] => I6
+ )
+
+ [I7] => ReflectionClass Object
+ (
+ [name] => I7
+ )
+
+)
diff --git a/ext/reflection/tests/ReflectionClass_getInterfaces_002.phpt b/ext/reflection/tests/ReflectionClass_getInterfaces_002.phpt
new file mode 100644
index 000000000..328a7c3e6
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getInterfaces_002.phpt
@@ -0,0 +1,53 @@
+--TEST--
+ReflectionClass::getInterfaces() - interface ordering.
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+interface I1 {}
+interface I2 {}
+interface I3 {}
+interface I4 extends I3 {}
+interface I5 extends I4 {}
+interface I6 extends I5, I1, I2 {}
+interface I7 extends I6 {}
+
+$rc = new ReflectionClass('I7');
+$interfaces = $rc->getInterfaces();
+print_r($interfaces);
+?>
+--EXPECTF--
+Array
+(
+ [I6] => ReflectionClass Object
+ (
+ [name] => I6
+ )
+
+ [I2] => ReflectionClass Object
+ (
+ [name] => I2
+ )
+
+ [I1] => ReflectionClass Object
+ (
+ [name] => I1
+ )
+
+ [I4] => ReflectionClass Object
+ (
+ [name] => I4
+ )
+
+ [I3] => ReflectionClass Object
+ (
+ [name] => I3
+ )
+
+ [I5] => ReflectionClass Object
+ (
+ [name] => I5
+ )
+
+) \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_getInterfaces_003.phpt b/ext/reflection/tests/ReflectionClass_getInterfaces_003.phpt
new file mode 100644
index 000000000..74044f753
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getInterfaces_003.phpt
@@ -0,0 +1,69 @@
+--TEST--
+ReflectionClass::getInterfaces() - odd ampersand behaviour.
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+
+echo "An object is in an array and is referenced. As expected, var_dumping the array shows '&':\n";
+$a = array(new stdclass);
+$b =& $a[0];
+var_dump($a);
+
+echo "Naturally, this remains true if we modify the object:\n";
+$a[0]->x = 1;
+var_dump($a);
+
+
+echo "\n\nObtain the array of interfaces implemented by C.\n";
+interface I {}
+class C implements I {}
+$rc = new ReflectionClass('C');
+$a = $rc->getInterfaces();
+echo "The result is an array in which each element is an object (an instance of ReflectionClass)\n";
+echo "Var_dumping this array shows that the elements are referenced. By what?\n";
+var_dump($a);
+
+echo "Modify the object, and it is apparently no longer referenced.\n";
+$a['I']->x = 1;
+var_dump($a);
+
+?>
+--EXPECTF--
+An object is in an array and is referenced. As expected, var_dumping the array shows '&':
+array(1) {
+ [0]=>
+ &object(stdClass)#%d (0) {
+ }
+}
+Naturally, this remains true if we modify the object:
+array(1) {
+ [0]=>
+ &object(stdClass)#%d (1) {
+ ["x"]=>
+ int(1)
+ }
+}
+
+
+Obtain the array of interfaces implemented by C.
+The result is an array in which each element is an object (an instance of ReflectionClass)
+Var_dumping this array shows that the elements are referenced. By what?
+array(1) {
+ ["I"]=>
+ &object(ReflectionClass)#%d (1) {
+ ["name"]=>
+ string(1) "I"
+ }
+}
+Modify the object, and it is apparently no longer referenced.
+array(1) {
+ ["I"]=>
+ object(ReflectionClass)#%d (2) {
+ ["name"]=>
+ string(1) "I"
+ ["x"]=>
+ int(1)
+ }
+} \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_getInterfaces_004.phpt b/ext/reflection/tests/ReflectionClass_getInterfaces_004.phpt
new file mode 100644
index 000000000..5f42e4736
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getInterfaces_004.phpt
@@ -0,0 +1,28 @@
+--TEST--
+ReflectionClass::getInterfaces() - wrong param count
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+interface I {}
+class C implements I {}
+$rc = new ReflectionClass('C');
+var_dump($rc->getInterfaces(null));
+var_dump($rc->getInterfaces('X'));
+var_dump($rc->getInterfaces(true));
+var_dump($rc->getInterfaces(array(1,2,3)));
+?>
+--EXPECTF--
+
+Warning: Wrong parameter count for ReflectionClass::getInterfaces() in %s on line 5
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getInterfaces() in %s on line 6
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getInterfaces() in %s on line 7
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getInterfaces() in %s on line 8
+NULL
diff --git a/ext/reflection/tests/ReflectionClass_getMethod_001.phpt b/ext/reflection/tests/ReflectionClass_getMethod_001.phpt
new file mode 100644
index 000000000..5821ebad0
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getMethod_001.phpt
@@ -0,0 +1,168 @@
+--TEST--
+ReflectionClass::getMethod()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class pubf {
+ public function f() {}
+ static public function s() {}
+}
+class subpubf extends pubf {
+}
+
+class protf {
+ protected function f() {}
+ static protected function s() {}
+}
+class subprotf extends protf {
+}
+
+class privf {
+ private function f() {}
+ static private function s() {}
+}
+class subprivf extends privf {
+}
+
+$classes = array("pubf", "subpubf", "protf", "subprotf",
+ "privf", "subprivf");
+foreach($classes as $class) {
+ echo "Reflecting on class $class: \n";
+ $rc = new ReflectionClass($class);
+ echo " --> Check for f(): ";
+ var_dump($rc->getMethod("f"));
+ echo " --> Check for s(): ";
+ var_dump($rc->getMethod("s"));
+ echo " --> Check for F(): ";
+ var_dump($rc->getMethod("F"));
+ echo " --> Check for doesntExist(): ";
+ try {
+ var_dump($rc->getMethod("doesntExist"));
+ } catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+ }
+}
+?>
+--EXPECTF--
+Reflecting on class pubf:
+ --> Check for f(): object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "f"
+ ["class"]=>
+ string(4) "pubf"
+}
+ --> Check for s(): object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "s"
+ ["class"]=>
+ string(4) "pubf"
+}
+ --> Check for F(): object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "f"
+ ["class"]=>
+ string(4) "pubf"
+}
+ --> Check for doesntExist(): Method doesntExist does not exist
+Reflecting on class subpubf:
+ --> Check for f(): object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "f"
+ ["class"]=>
+ string(7) "subpubf"
+}
+ --> Check for s(): object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "s"
+ ["class"]=>
+ string(7) "subpubf"
+}
+ --> Check for F(): object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "f"
+ ["class"]=>
+ string(7) "subpubf"
+}
+ --> Check for doesntExist(): Method doesntExist does not exist
+Reflecting on class protf:
+ --> Check for f(): object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "f"
+ ["class"]=>
+ string(5) "protf"
+}
+ --> Check for s(): object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "s"
+ ["class"]=>
+ string(5) "protf"
+}
+ --> Check for F(): object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "f"
+ ["class"]=>
+ string(5) "protf"
+}
+ --> Check for doesntExist(): Method doesntExist does not exist
+Reflecting on class subprotf:
+ --> Check for f(): object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "f"
+ ["class"]=>
+ string(8) "subprotf"
+}
+ --> Check for s(): object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "s"
+ ["class"]=>
+ string(8) "subprotf"
+}
+ --> Check for F(): object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "f"
+ ["class"]=>
+ string(8) "subprotf"
+}
+ --> Check for doesntExist(): Method doesntExist does not exist
+Reflecting on class privf:
+ --> Check for f(): object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "f"
+ ["class"]=>
+ string(5) "privf"
+}
+ --> Check for s(): object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "s"
+ ["class"]=>
+ string(5) "privf"
+}
+ --> Check for F(): object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "f"
+ ["class"]=>
+ string(5) "privf"
+}
+ --> Check for doesntExist(): Method doesntExist does not exist
+Reflecting on class subprivf:
+ --> Check for f(): object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "f"
+ ["class"]=>
+ string(8) "subprivf"
+}
+ --> Check for s(): object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "s"
+ ["class"]=>
+ string(8) "subprivf"
+}
+ --> Check for F(): object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "f"
+ ["class"]=>
+ string(8) "subprivf"
+}
+ --> Check for doesntExist(): Method doesntExist does not exist \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_getMethod_002.phpt b/ext/reflection/tests/ReflectionClass_getMethod_002.phpt
new file mode 100644
index 000000000..2baabdeda
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getMethod_002.phpt
@@ -0,0 +1,74 @@
+--TEST--
+ReflectionClass::getMethod() - error cases
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class C {
+ function f() {}
+}
+
+$rc = new ReflectionClass("C");
+echo "Check invalid params:\n";
+try {
+ var_dump($rc->getMethod());
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->getMethod("f", "f"));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->getMethod(null));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->getMethod(1));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->getMethod(1.5));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->getMethod(true));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->getMethod(array(1,2,3)));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->getMethod(new C));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+
+
+?>
+--EXPECTF--
+Check invalid params:
+
+Warning: ReflectionClass::getMethod() expects exactly 1 parameter, 0 given in %s on line 9
+NULL
+
+Warning: ReflectionClass::getMethod() expects exactly 1 parameter, 2 given in %s on line 14
+NULL
+Method does not exist
+Method 1 does not exist
+Method 1.5 does not exist
+Method 1 does not exist
+
+Warning: ReflectionClass::getMethod() expects parameter 1 to be string, array given in %s on line 39
+NULL
+
+Warning: ReflectionClass::getMethod() expects parameter 1 to be string, object given in %s on line 44
+NULL \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_getMethods_001.phpt b/ext/reflection/tests/ReflectionClass_getMethods_001.phpt
new file mode 100644
index 000000000..867d669ad
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getMethods_001.phpt
@@ -0,0 +1,140 @@
+--TEST--
+ReflectionClass::getMethods()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class pubf {
+ public function f() {}
+ static public function s() {}
+}
+class subpubf extends pubf {
+}
+
+class protf {
+ protected function f() {}
+ static protected function s() {}
+}
+class subprotf extends protf {
+}
+
+class privf {
+ private function f() {}
+ static private function s() {}
+}
+class subprivf extends privf {
+}
+
+$classes = array("pubf", "subpubf", "protf", "subprotf",
+ "privf", "subprivf");
+foreach($classes as $class) {
+ echo "Reflecting on class $class: \n";
+ $rc = new ReflectionClass($class);
+ var_dump($rc->getMethods());
+}
+
+?>
+--EXPECTF--
+Reflecting on class pubf:
+array(2) {
+ [0]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "f"
+ ["class"]=>
+ string(4) "pubf"
+ }
+ [1]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "s"
+ ["class"]=>
+ string(4) "pubf"
+ }
+}
+Reflecting on class subpubf:
+array(2) {
+ [0]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "f"
+ ["class"]=>
+ string(7) "subpubf"
+ }
+ [1]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "s"
+ ["class"]=>
+ string(7) "subpubf"
+ }
+}
+Reflecting on class protf:
+array(2) {
+ [0]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "f"
+ ["class"]=>
+ string(5) "protf"
+ }
+ [1]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "s"
+ ["class"]=>
+ string(5) "protf"
+ }
+}
+Reflecting on class subprotf:
+array(2) {
+ [0]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "f"
+ ["class"]=>
+ string(8) "subprotf"
+ }
+ [1]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "s"
+ ["class"]=>
+ string(8) "subprotf"
+ }
+}
+Reflecting on class privf:
+array(2) {
+ [0]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "f"
+ ["class"]=>
+ string(5) "privf"
+ }
+ [1]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "s"
+ ["class"]=>
+ string(5) "privf"
+ }
+}
+Reflecting on class subprivf:
+array(2) {
+ [0]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "f"
+ ["class"]=>
+ string(8) "subprivf"
+ }
+ [1]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(1) "s"
+ ["class"]=>
+ string(8) "subprivf"
+ }
+} \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_getMethods_002.phpt b/ext/reflection/tests/ReflectionClass_getMethods_002.phpt
new file mode 100644
index 000000000..b25222563
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getMethods_002.phpt
@@ -0,0 +1,18 @@
+--TEST--
+ReflectionClass::getMethods() - invalid arguments
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+$rc = new ReflectionClass("ReflectionClass");
+echo "\nTest invalid arguments:";
+$rc->getMethods('X');
+$rc->getMethods('X', true);
+
+?>
+--EXPECTF--
+Test invalid arguments:
+Warning: ReflectionClass::getMethods() expects parameter 1 to be long, string given in %s on line 4
+
+Warning: ReflectionClass::getMethods() expects at most 1 parameter, 2 given in %s on line 5
diff --git a/ext/reflection/tests/ReflectionClass_getMethods_003.phpt b/ext/reflection/tests/ReflectionClass_getMethods_003.phpt
new file mode 100644
index 000000000..435f5d2d8
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getMethods_003.phpt
@@ -0,0 +1,191 @@
+--TEST--
+ReflectionClass::getMethods()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class C {
+ public function pubf1() {}
+ public function pubf2() {}
+ private function privf1() {}
+ private function privf2() {}
+ static public function pubsf1() {}
+ static public function pubsf2() {}
+ static private function privsf1() {}
+ static private function privsf2() {}
+}
+
+$rc = new ReflectionClass("C");
+$StaticFlag = 0x01;
+$pubFlag = 0x100;
+$privFlag = 0x400;
+
+echo "No methods:";
+var_dump($rc->getMethods(0));
+
+echo "Public methods:";
+var_dump($rc->getMethods($pubFlag));
+
+echo "Private methods:";
+var_dump($rc->getMethods($privFlag));
+
+echo "Public or static methods:";
+var_dump($rc->getMethods($StaticFlag | $pubFlag));
+
+echo "Private or static methods:";
+var_dump($rc->getMethods($StaticFlag | $privFlag));
+
+
+?>
+--EXPECTF--
+No methods:array(0) {
+}
+Public methods:array(4) {
+ [0]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(5) "pubf1"
+ ["class"]=>
+ string(1) "C"
+ }
+ [1]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(5) "pubf2"
+ ["class"]=>
+ string(1) "C"
+ }
+ [2]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(6) "pubsf1"
+ ["class"]=>
+ string(1) "C"
+ }
+ [3]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(6) "pubsf2"
+ ["class"]=>
+ string(1) "C"
+ }
+}
+Private methods:array(4) {
+ [0]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(6) "privf1"
+ ["class"]=>
+ string(1) "C"
+ }
+ [1]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(6) "privf2"
+ ["class"]=>
+ string(1) "C"
+ }
+ [2]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(7) "privsf1"
+ ["class"]=>
+ string(1) "C"
+ }
+ [3]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(7) "privsf2"
+ ["class"]=>
+ string(1) "C"
+ }
+}
+Public or static methods:array(6) {
+ [0]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(5) "pubf1"
+ ["class"]=>
+ string(1) "C"
+ }
+ [1]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(5) "pubf2"
+ ["class"]=>
+ string(1) "C"
+ }
+ [2]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(6) "pubsf1"
+ ["class"]=>
+ string(1) "C"
+ }
+ [3]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(6) "pubsf2"
+ ["class"]=>
+ string(1) "C"
+ }
+ [4]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(7) "privsf1"
+ ["class"]=>
+ string(1) "C"
+ }
+ [5]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(7) "privsf2"
+ ["class"]=>
+ string(1) "C"
+ }
+}
+Private or static methods:array(6) {
+ [0]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(6) "privf1"
+ ["class"]=>
+ string(1) "C"
+ }
+ [1]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(6) "privf2"
+ ["class"]=>
+ string(1) "C"
+ }
+ [2]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(6) "pubsf1"
+ ["class"]=>
+ string(1) "C"
+ }
+ [3]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(6) "pubsf2"
+ ["class"]=>
+ string(1) "C"
+ }
+ [4]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(7) "privsf1"
+ ["class"]=>
+ string(1) "C"
+ }
+ [5]=>
+ &object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(7) "privsf2"
+ ["class"]=>
+ string(1) "C"
+ }
+}
diff --git a/ext/reflection/tests/ReflectionClass_getParentClass_001.phpt b/ext/reflection/tests/ReflectionClass_getParentClass_001.phpt
new file mode 100644
index 000000000..e26595a87
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getParentClass_001.phpt
@@ -0,0 +1,38 @@
+--TEST--
+ReflectionClass::getParentClass()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class A {}
+class B extends A {}
+
+$rc = new ReflectionClass('B');
+$parent = $rc->getParentClass();
+$grandParent = $parent->getParentClass();
+var_dump($parent, $grandParent);
+
+echo "\nTest bad params:\n";
+var_dump($rc->getParentClass(null));
+var_dump($rc->getParentClass('x'));
+var_dump($rc->getParentClass('x', 123));
+
+?>
+--EXPECTF--
+object(ReflectionClass)#%d (1) {
+ ["name"]=>
+ string(1) "A"
+}
+bool(false)
+
+Test bad params:
+
+Warning: Wrong parameter count for ReflectionClass::getParentClass() in %s on line 11
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getParentClass() in %s on line 12
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getParentClass() in %s on line 13
+NULL \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_getProperties_001.phpt b/ext/reflection/tests/ReflectionClass_getProperties_001.phpt
new file mode 100644
index 000000000..5eecc5dee
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getProperties_001.phpt
@@ -0,0 +1,126 @@
+--TEST--
+ReflectionClass::getProperties()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class pubf {
+ public $a;
+ static public $s;
+}
+class subpubf extends pubf {
+}
+
+class protf {
+ protected $a;
+ static protected $s;
+}
+class subprotf extends protf {
+}
+
+class privf {
+ private $a;
+ static private $s;
+}
+class subprivf extends privf {
+}
+
+$classes = array("pubf", "subpubf", "protf", "subprotf",
+ "privf", "subprivf");
+foreach($classes as $class) {
+ echo "Reflecting on class $class: \n";
+ $rc = new ReflectionClass($class);
+ var_dump($rc->getProperties());
+}
+
+?>
+--EXPECTF--
+Reflecting on class pubf:
+array(2) {
+ [0]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(1) "a"
+ ["class"]=>
+ string(4) "pubf"
+ }
+ [1]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(1) "s"
+ ["class"]=>
+ string(4) "pubf"
+ }
+}
+Reflecting on class subpubf:
+array(2) {
+ [0]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(1) "a"
+ ["class"]=>
+ string(7) "subpubf"
+ }
+ [1]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(1) "s"
+ ["class"]=>
+ string(7) "subpubf"
+ }
+}
+Reflecting on class protf:
+array(2) {
+ [0]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(1) "a"
+ ["class"]=>
+ string(5) "protf"
+ }
+ [1]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(1) "s"
+ ["class"]=>
+ string(5) "protf"
+ }
+}
+Reflecting on class subprotf:
+array(2) {
+ [0]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(1) "a"
+ ["class"]=>
+ string(8) "subprotf"
+ }
+ [1]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(1) "s"
+ ["class"]=>
+ string(8) "subprotf"
+ }
+}
+Reflecting on class privf:
+array(2) {
+ [0]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(1) "a"
+ ["class"]=>
+ string(5) "privf"
+ }
+ [1]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(1) "s"
+ ["class"]=>
+ string(5) "privf"
+ }
+}
+Reflecting on class subprivf:
+array(0) {
+} \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_getProperties_002.phpt b/ext/reflection/tests/ReflectionClass_getProperties_002.phpt
new file mode 100644
index 000000000..c21cff24f
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getProperties_002.phpt
@@ -0,0 +1,17 @@
+--TEST--
+ReflectionClass::getProperties() - invalid arguments
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+$rc = new ReflectionClass("ReflectionClass");
+echo "\nTest invalid arguments:";
+$rc->getProperties('X');
+$rc->getProperties('X', true);
+?>
+--EXPECTF--
+Test invalid arguments:
+Warning: ReflectionClass::getProperties() expects parameter 1 to be long, string given in %s on line 4
+
+Warning: ReflectionClass::getProperties() expects at most 1 parameter, 2 given in %s on line 5
diff --git a/ext/reflection/tests/ReflectionClass_getProperties_003.phpt b/ext/reflection/tests/ReflectionClass_getProperties_003.phpt
new file mode 100644
index 000000000..b4f9a774d
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getProperties_003.phpt
@@ -0,0 +1,189 @@
+--TEST--
+ReflectionClass::getProperties()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class C {
+ public $pub1;
+ public $pub2;
+ private $priv1;
+ private $priv2;
+ static public $pubs;
+ static public $pubs2;
+ static private $privs1;
+ static private $privs2;
+}
+
+$rc = new ReflectionClass("C");
+$StaticFlag = 0x01;
+$pubFlag = 0x100;
+$privFlag = 0x400;
+
+echo "No properties:";
+var_dump($rc->getProperties(0));
+
+echo "Public properties:";
+var_dump($rc->getProperties($pubFlag));
+
+echo "Private properties:";
+var_dump($rc->getProperties($privFlag));
+
+echo "Public or static properties:";
+var_dump($rc->getProperties($StaticFlag | $pubFlag));
+
+echo "Private or static properties:";
+var_dump($rc->getProperties($StaticFlag | $privFlag));
+?>
+--EXPECTF--
+No properties:array(0) {
+}
+Public properties:array(4) {
+ [0]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(4) "pub1"
+ ["class"]=>
+ string(1) "C"
+ }
+ [1]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(4) "pub2"
+ ["class"]=>
+ string(1) "C"
+ }
+ [2]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(4) "pubs"
+ ["class"]=>
+ string(1) "C"
+ }
+ [3]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "pubs2"
+ ["class"]=>
+ string(1) "C"
+ }
+}
+Private properties:array(4) {
+ [0]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "priv1"
+ ["class"]=>
+ string(1) "C"
+ }
+ [1]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "priv2"
+ ["class"]=>
+ string(1) "C"
+ }
+ [2]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(6) "privs1"
+ ["class"]=>
+ string(1) "C"
+ }
+ [3]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(6) "privs2"
+ ["class"]=>
+ string(1) "C"
+ }
+}
+Public or static properties:array(6) {
+ [0]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(4) "pub1"
+ ["class"]=>
+ string(1) "C"
+ }
+ [1]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(4) "pub2"
+ ["class"]=>
+ string(1) "C"
+ }
+ [2]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(4) "pubs"
+ ["class"]=>
+ string(1) "C"
+ }
+ [3]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "pubs2"
+ ["class"]=>
+ string(1) "C"
+ }
+ [4]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(6) "privs1"
+ ["class"]=>
+ string(1) "C"
+ }
+ [5]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(6) "privs2"
+ ["class"]=>
+ string(1) "C"
+ }
+}
+Private or static properties:array(6) {
+ [0]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "priv1"
+ ["class"]=>
+ string(1) "C"
+ }
+ [1]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "priv2"
+ ["class"]=>
+ string(1) "C"
+ }
+ [2]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(4) "pubs"
+ ["class"]=>
+ string(1) "C"
+ }
+ [3]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "pubs2"
+ ["class"]=>
+ string(1) "C"
+ }
+ [4]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(6) "privs1"
+ ["class"]=>
+ string(1) "C"
+ }
+ [5]=>
+ &object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(6) "privs2"
+ ["class"]=>
+ string(1) "C"
+ }
+} \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_getProperty_001.phpt b/ext/reflection/tests/ReflectionClass_getProperty_001.phpt
new file mode 100644
index 000000000..fa5deaa67
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getProperty_001.phpt
@@ -0,0 +1,146 @@
+--TEST--
+ReflectionClass::getProperty()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class pubf {
+ public $a;
+ static public $s;
+}
+class subpubf extends pubf {
+}
+
+class protf {
+ protected $a;
+ static protected $s;
+}
+class subprotf extends protf {
+}
+
+class privf {
+ private $a;
+ static protected $s;
+}
+class subprivf extends privf {
+}
+
+$classes = array("pubf", "subpubf", "protf", "subprotf",
+ "privf", "subprivf");
+foreach($classes as $class) {
+ echo "Reflecting on class $class: \n";
+ $rc = new ReflectionClass($class);
+ try {
+ echo " --> Check for s: ";
+ var_dump($rc->getProperty("s"));
+ } catch (exception $e) {
+ echo $e->getMessage() . "\n";
+ }
+ try {
+ echo " --> Check for a: ";
+ var_dump($rc->getProperty("a"));
+ } catch (exception $e) {
+ echo $e->getMessage() . "\n";
+ }
+ try {
+ echo " --> Check for A: ";
+ var_dump($rc->getProperty("A"));
+ } catch (exception $e) {
+ echo $e->getMessage() . "\n";
+ }
+ try {
+ echo " --> Check for doesntExist: ";
+ var_dump($rc->getProperty("doesntExist"));
+ } catch (exception $e) {
+ echo $e->getMessage() . "\n";
+ }
+
+}
+?>
+--EXPECTF--
+Reflecting on class pubf:
+ --> Check for s: object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(1) "s"
+ ["class"]=>
+ string(4) "pubf"
+}
+ --> Check for a: object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(1) "a"
+ ["class"]=>
+ string(4) "pubf"
+}
+ --> Check for A: Property A does not exist
+ --> Check for doesntExist: Property doesntExist does not exist
+Reflecting on class subpubf:
+ --> Check for s: object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(1) "s"
+ ["class"]=>
+ string(7) "subpubf"
+}
+ --> Check for a: object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(1) "a"
+ ["class"]=>
+ string(7) "subpubf"
+}
+ --> Check for A: Property A does not exist
+ --> Check for doesntExist: Property doesntExist does not exist
+Reflecting on class protf:
+ --> Check for s: object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(1) "s"
+ ["class"]=>
+ string(5) "protf"
+}
+ --> Check for a: object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(1) "a"
+ ["class"]=>
+ string(5) "protf"
+}
+ --> Check for A: Property A does not exist
+ --> Check for doesntExist: Property doesntExist does not exist
+Reflecting on class subprotf:
+ --> Check for s: object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(1) "s"
+ ["class"]=>
+ string(8) "subprotf"
+}
+ --> Check for a: object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(1) "a"
+ ["class"]=>
+ string(8) "subprotf"
+}
+ --> Check for A: Property A does not exist
+ --> Check for doesntExist: Property doesntExist does not exist
+Reflecting on class privf:
+ --> Check for s: object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(1) "s"
+ ["class"]=>
+ string(5) "privf"
+}
+ --> Check for a: object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(1) "a"
+ ["class"]=>
+ string(5) "privf"
+}
+ --> Check for A: Property A does not exist
+ --> Check for doesntExist: Property doesntExist does not exist
+Reflecting on class subprivf:
+ --> Check for s: object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(1) "s"
+ ["class"]=>
+ string(8) "subprivf"
+}
+ --> Check for a: Property a does not exist
+ --> Check for A: Property A does not exist
+ --> Check for doesntExist: Property doesntExist does not exist \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_getProperty_002.phpt b/ext/reflection/tests/ReflectionClass_getProperty_002.phpt
new file mode 100644
index 000000000..be7bb53bc
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getProperty_002.phpt
@@ -0,0 +1,72 @@
+--TEST--
+ReflectionClass::getProperty() - error cases
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class C {
+ public $a;
+}
+
+$rc = new ReflectionClass("C");
+echo "Check invalid params:\n";
+try {
+ var_dump($rc->getProperty());
+} catch (exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->getProperty("a", "a"));
+} catch (exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->getProperty(null));
+} catch (exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->getProperty(1));
+} catch (exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->getProperty(1.5));
+} catch (exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->getProperty(true));
+} catch (exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->getProperty(array(1,2,3)));
+} catch (exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->getProperty(new C));
+} catch (exception $e) {
+ echo $e->getMessage() . "\n";
+}
+?>
+--EXPECTF--
+Check invalid params:
+
+Warning: ReflectionClass::getProperty() expects exactly 1 parameter, 0 given in %s on line 9
+NULL
+
+Warning: ReflectionClass::getProperty() expects exactly 1 parameter, 2 given in %s on line 14
+NULL
+Property does not exist
+Property 1 does not exist
+Property 1.5 does not exist
+Property 1 does not exist
+
+Warning: ReflectionClass::getProperty() expects parameter 1 to be string, array given in %s on line 39
+NULL
+
+Warning: ReflectionClass::getProperty() expects parameter 1 to be string, object given in %s on line 44
+NULL \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_getProperty_003.phpt b/ext/reflection/tests/ReflectionClass_getProperty_003.phpt
new file mode 100644
index 000000000..dddd2260f
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getProperty_003.phpt
@@ -0,0 +1,251 @@
+--TEST--
+ReflectionClass::getProperty()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class A {
+ static public $pubC = "pubC in A";
+ static protected $protC = "protC in A";
+ static private $privC = "privC in A";
+
+ static public $pubA = "pubA in A";
+ static protected $protA = "protA in A";
+ static private $privA = "privA in A";
+}
+
+class B extends A {
+ static public $pubC = "pubC in B";
+ static protected $protC = "protC in B";
+ static private $privC = "privC in B";
+
+ static public $pubB = "pubB in B";
+ static protected $protB = "protB in B";
+ static private $privB = "privB in B";
+}
+
+class C extends B {
+ static public $pubC = "pubC in C";
+ static protected $protC = "protC in C";
+ static private $privC = "privC in C";
+}
+
+class X {
+ static public $pubC = "pubC in X";
+ static protected $protC = "protC in X";
+ static private $privC = "privC in X";
+}
+
+$myC = new C;
+$rc = new ReflectionClass("C");
+
+function showInfo($name) {
+ global $rc, $myC;
+ echo "--- (Reflecting on $name) ---\n";
+ try {
+ $rp = $rc->getProperty($name);
+ } catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+ return;
+ }
+ try {
+ var_dump($rp);
+ var_dump($rp->getValue($myC));
+ } catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+ return;
+ }
+}
+
+
+showInfo("pubA");
+showInfo("protA");
+showInfo("privA");
+
+showInfo("pubB");
+showInfo("protB");
+showInfo("privB");
+
+showInfo("pubC");
+showInfo("protC");
+showInfo("privC");
+showInfo("doesntExist");
+
+showInfo("A::pubC");
+showInfo("A::protC");
+showInfo("A::privC");
+
+showInfo("B::pubC");
+showInfo("B::protC");
+showInfo("B::privC");
+
+showInfo("c::pubC");
+showInfo("c::PUBC");
+showInfo("C::pubC");
+showInfo("C::protC");
+showInfo("C::privC");
+
+showInfo("X::pubC");
+showInfo("X::protC");
+showInfo("X::privC");
+showInfo("X::doesntExist");
+
+showInfo("doesntexist::doesntExist");
+
+?>
+--EXPECTF--
+--- (Reflecting on pubA) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(4) "pubA"
+ ["class"]=>
+ string(1) "C"
+}
+string(9) "pubA in A"
+--- (Reflecting on protA) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "protA"
+ ["class"]=>
+ string(1) "C"
+}
+Cannot access non-public member C::protA
+--- (Reflecting on privA) ---
+Property privA does not exist
+--- (Reflecting on pubB) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(4) "pubB"
+ ["class"]=>
+ string(1) "C"
+}
+string(9) "pubB in B"
+--- (Reflecting on protB) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "protB"
+ ["class"]=>
+ string(1) "C"
+}
+Cannot access non-public member C::protB
+--- (Reflecting on privB) ---
+Property privB does not exist
+--- (Reflecting on pubC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(4) "pubC"
+ ["class"]=>
+ string(1) "C"
+}
+string(9) "pubC in C"
+--- (Reflecting on protC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "protC"
+ ["class"]=>
+ string(1) "C"
+}
+Cannot access non-public member C::protC
+--- (Reflecting on privC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "privC"
+ ["class"]=>
+ string(1) "C"
+}
+Cannot access non-public member C::privC
+--- (Reflecting on doesntExist) ---
+Property doesntExist does not exist
+--- (Reflecting on A::pubC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(4) "pubC"
+ ["class"]=>
+ string(1) "A"
+}
+string(9) "pubC in A"
+--- (Reflecting on A::protC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "protC"
+ ["class"]=>
+ string(1) "A"
+}
+Cannot access non-public member A::protC
+--- (Reflecting on A::privC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "privC"
+ ["class"]=>
+ string(1) "A"
+}
+Cannot access non-public member A::privC
+--- (Reflecting on B::pubC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(4) "pubC"
+ ["class"]=>
+ string(1) "B"
+}
+string(9) "pubC in B"
+--- (Reflecting on B::protC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "protC"
+ ["class"]=>
+ string(1) "B"
+}
+Cannot access non-public member B::protC
+--- (Reflecting on B::privC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "privC"
+ ["class"]=>
+ string(1) "B"
+}
+Cannot access non-public member B::privC
+--- (Reflecting on c::pubC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(4) "pubC"
+ ["class"]=>
+ string(1) "C"
+}
+string(9) "pubC in C"
+--- (Reflecting on c::PUBC) ---
+Property PUBC does not exist
+--- (Reflecting on C::pubC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(4) "pubC"
+ ["class"]=>
+ string(1) "C"
+}
+string(9) "pubC in C"
+--- (Reflecting on C::protC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "protC"
+ ["class"]=>
+ string(1) "C"
+}
+Cannot access non-public member C::protC
+--- (Reflecting on C::privC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "privC"
+ ["class"]=>
+ string(1) "C"
+}
+Cannot access non-public member C::privC
+--- (Reflecting on X::pubC) ---
+Fully qualified property name X::pubC does not specify a base class of C
+--- (Reflecting on X::protC) ---
+Fully qualified property name X::protC does not specify a base class of C
+--- (Reflecting on X::privC) ---
+Fully qualified property name X::privC does not specify a base class of C
+--- (Reflecting on X::doesntExist) ---
+Fully qualified property name X::doesntExist does not specify a base class of C
+--- (Reflecting on doesntexist::doesntExist) ---
+Class doesntexist does not exist \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_getProperty_004.phpt b/ext/reflection/tests/ReflectionClass_getProperty_004.phpt
new file mode 100644
index 000000000..791f5e1fa
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getProperty_004.phpt
@@ -0,0 +1,251 @@
+--TEST--
+ReflectionClass::getProperty()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class A {
+ public $pubC = "pubC in A";
+ protected $protC = "protC in A";
+ private $privC = "privC in A";
+
+ public $pubA = "pubA in A";
+ protected $protA = "protA in A";
+ private $privA = "privA in A";
+}
+
+class B extends A {
+ public $pubC = "pubC in B";
+ protected $protC = "protC in B";
+ private $privC = "privC in B";
+
+ public $pubB = "pubB in B";
+ protected $protB = "protB in B";
+ private $privB = "privB in B";
+}
+
+class C extends B {
+ public $pubC = "pubC in C";
+ protected $protC = "protC in C";
+ private $privC = "privC in C";
+}
+
+class X {
+ public $pubC = "pubC in X";
+ protected $protC = "protC in X";
+ private $privC = "privC in X";
+}
+
+$myC = new C;
+$rc = new ReflectionClass("C");
+
+function showInfo($name) {
+ global $rc, $myC;
+ echo "--- (Reflecting on $name) ---\n";
+ try {
+ $rp = $rc->getProperty($name);
+ } catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+ return;
+ }
+ try {
+ var_dump($rp);
+ var_dump($rp->getValue($myC));
+ } catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+ return;
+ }
+}
+
+
+showInfo("pubA");
+showInfo("protA");
+showInfo("privA");
+
+showInfo("pubB");
+showInfo("protB");
+showInfo("privB");
+
+showInfo("pubC");
+showInfo("protC");
+showInfo("privC");
+showInfo("doesntExist");
+
+showInfo("A::pubC");
+showInfo("A::protC");
+showInfo("A::privC");
+
+showInfo("B::pubC");
+showInfo("B::protC");
+showInfo("B::privC");
+
+showInfo("c::pubC");
+showInfo("c::PUBC");
+showInfo("C::pubC");
+showInfo("C::protC");
+showInfo("C::privC");
+
+showInfo("X::pubC");
+showInfo("X::protC");
+showInfo("X::privC");
+showInfo("X::doesntExist");
+
+showInfo("doesntexist::doesntExist");
+
+?>
+--EXPECTF--
+--- (Reflecting on pubA) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(4) "pubA"
+ ["class"]=>
+ string(1) "C"
+}
+string(9) "pubA in A"
+--- (Reflecting on protA) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "protA"
+ ["class"]=>
+ string(1) "C"
+}
+Cannot access non-public member C::protA
+--- (Reflecting on privA) ---
+Property privA does not exist
+--- (Reflecting on pubB) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(4) "pubB"
+ ["class"]=>
+ string(1) "C"
+}
+string(9) "pubB in B"
+--- (Reflecting on protB) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "protB"
+ ["class"]=>
+ string(1) "C"
+}
+Cannot access non-public member C::protB
+--- (Reflecting on privB) ---
+Property privB does not exist
+--- (Reflecting on pubC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(4) "pubC"
+ ["class"]=>
+ string(1) "C"
+}
+string(9) "pubC in C"
+--- (Reflecting on protC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "protC"
+ ["class"]=>
+ string(1) "C"
+}
+Cannot access non-public member C::protC
+--- (Reflecting on privC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "privC"
+ ["class"]=>
+ string(1) "C"
+}
+Cannot access non-public member C::privC
+--- (Reflecting on doesntExist) ---
+Property doesntExist does not exist
+--- (Reflecting on A::pubC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(4) "pubC"
+ ["class"]=>
+ string(1) "A"
+}
+string(9) "pubC in C"
+--- (Reflecting on A::protC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "protC"
+ ["class"]=>
+ string(1) "A"
+}
+Cannot access non-public member A::protC
+--- (Reflecting on A::privC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "privC"
+ ["class"]=>
+ string(1) "A"
+}
+Cannot access non-public member A::privC
+--- (Reflecting on B::pubC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(4) "pubC"
+ ["class"]=>
+ string(1) "B"
+}
+string(9) "pubC in C"
+--- (Reflecting on B::protC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "protC"
+ ["class"]=>
+ string(1) "B"
+}
+Cannot access non-public member B::protC
+--- (Reflecting on B::privC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "privC"
+ ["class"]=>
+ string(1) "B"
+}
+Cannot access non-public member B::privC
+--- (Reflecting on c::pubC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(4) "pubC"
+ ["class"]=>
+ string(1) "C"
+}
+string(9) "pubC in C"
+--- (Reflecting on c::PUBC) ---
+Property PUBC does not exist
+--- (Reflecting on C::pubC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(4) "pubC"
+ ["class"]=>
+ string(1) "C"
+}
+string(9) "pubC in C"
+--- (Reflecting on C::protC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "protC"
+ ["class"]=>
+ string(1) "C"
+}
+Cannot access non-public member C::protC
+--- (Reflecting on C::privC) ---
+object(ReflectionProperty)#%d (2) {
+ ["name"]=>
+ string(5) "privC"
+ ["class"]=>
+ string(1) "C"
+}
+Cannot access non-public member C::privC
+--- (Reflecting on X::pubC) ---
+Fully qualified property name X::pubC does not specify a base class of C
+--- (Reflecting on X::protC) ---
+Fully qualified property name X::protC does not specify a base class of C
+--- (Reflecting on X::privC) ---
+Fully qualified property name X::privC does not specify a base class of C
+--- (Reflecting on X::doesntExist) ---
+Fully qualified property name X::doesntExist does not specify a base class of C
+--- (Reflecting on doesntexist::doesntExist) ---
+Class doesntexist does not exist \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_getStaticPropertyValue_001.phpt b/ext/reflection/tests/ReflectionClass_getStaticPropertyValue_001.phpt
new file mode 100644
index 000000000..733c4c7e4
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getStaticPropertyValue_001.phpt
@@ -0,0 +1,67 @@
+--TEST--
+ReflectionClass::getStaticPropertyValue()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class A {
+ static private $privateOverridden = "original private";
+ static protected $protectedOverridden = "original protected";
+ static public $publicOverridden = "original public";
+}
+
+class B extends A {
+ static private $privateOverridden = "changed private";
+ static protected $protectedOverridden = "changed protected";
+ static public $publicOverridden = "changed public";
+}
+
+echo "Retrieving static values from A:\n";
+$rcA = new ReflectionClass('A');
+var_dump($rcA->getStaticPropertyValue("privateOverridden", "default value"));
+var_dump($rcA->getStaticPropertyValue("\0A\0privateOverridden"));
+var_dump($rcA->getStaticPropertyValue("protectedOverridden", "default value"));
+var_dump($rcA->getStaticPropertyValue("\0*\0protectedOverridden"));
+var_dump($rcA->getStaticPropertyValue("publicOverridden"));
+
+echo "\nRetrieving static values from B:\n";
+$rcB = new ReflectionClass('B');
+var_dump($rcB->getStaticPropertyValue("\0A\0privateOverridden"));
+var_dump($rcB->getStaticPropertyValue("\0B\0privateOverridden"));
+var_dump($rcB->getStaticPropertyValue("\0*\0protectedOverridden"));
+var_dump($rcB->getStaticPropertyValue("publicOverridden"));
+
+echo "\nRetrieving non-existent values from A with no default value:\n";
+try {
+ var_dump($rcA->getStaticPropertyValue("protectedOverridden"));
+ echo "you should not see this";
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+
+try {
+ var_dump($rcA->getStaticPropertyValue("privateOverridden"));
+ echo "you should not see this";
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+
+?>
+--EXPECTF--
+Retrieving static values from A:
+string(13) "default value"
+string(16) "original private"
+string(13) "default value"
+string(18) "original protected"
+string(15) "original public"
+
+Retrieving static values from B:
+string(16) "original private"
+string(15) "changed private"
+string(17) "changed protected"
+string(14) "changed public"
+
+Retrieving non-existent values from A with no default value:
+Class A does not have a property named protectedOverridden
+Class A does not have a property named privateOverridden
diff --git a/ext/reflection/tests/ReflectionClass_getStaticPropertyValue_002.phpt b/ext/reflection/tests/ReflectionClass_getStaticPropertyValue_002.phpt
new file mode 100644
index 000000000..36b4744d8
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_getStaticPropertyValue_002.phpt
@@ -0,0 +1,52 @@
+--TEST--
+ReflectionClass::getStaticPropertyValue() - bad params
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class C {
+ public static $x;
+}
+
+$rc = new ReflectionClass('C');
+try {
+ var_dump($rc->getStaticPropertyValue("x", "default value", 'blah'));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->getStaticPropertyValue());
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->getStaticPropertyValue(null));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->getStaticPropertyValue(1.5, 'def'));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->getStaticPropertyValue(array(1,2,3)));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+
+
+?>
+--EXPECTF--
+
+Warning: ReflectionClass::getStaticPropertyValue() expects at most 2 parameters, 3 given in %s on line 8
+NULL
+
+Warning: ReflectionClass::getStaticPropertyValue() expects at least 1 parameter, 0 given in %s on line 13
+NULL
+Class C does not have a property named
+string(3) "def"
+
+Warning: ReflectionClass::getStaticPropertyValue() expects parameter 1 to be string, array given in %s on line 28
+NULL \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_hasConstant_001.phpt b/ext/reflection/tests/ReflectionClass_hasConstant_001.phpt
new file mode 100644
index 000000000..6e6d4341c
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_hasConstant_001.phpt
@@ -0,0 +1,36 @@
+--TEST--
+ReflectionClass::hasConstant()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class C {
+ const myConst = 1;
+}
+
+class D extends C {
+}
+
+
+$rc = new ReflectionClass("C");
+echo "Check existing constant: ";
+var_dump($rc->hasConstant("myConst"));
+echo "Check existing constant, different case: ";
+var_dump($rc->hasConstant("MyCoNsT"));
+echo "Check absent constant: ";
+var_dump($rc->hasConstant("doesntExist"));
+
+
+$rd = new ReflectionClass("D");
+echo "Check inherited constant: ";
+var_dump($rd->hasConstant("myConst"));
+echo "Check absent constant: ";
+var_dump($rd->hasConstant("doesntExist"));
+?>
+--EXPECTF--
+Check existing constant: bool(true)
+Check existing constant, different case: bool(false)
+Check absent constant: bool(false)
+Check inherited constant: bool(true)
+Check absent constant: bool(false) \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_hasConstant_002.phpt b/ext/reflection/tests/ReflectionClass_hasConstant_002.phpt
new file mode 100644
index 000000000..a0a76f024
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_hasConstant_002.phpt
@@ -0,0 +1,40 @@
+--TEST--
+ReflectionClass::hasConstant() - error cases
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class C {
+ const myConst = 1;
+}
+
+$rc = new ReflectionClass("C");
+echo "Check invalid params:\n";
+var_dump($rc->hasConstant());
+var_dump($rc->hasConstant("myConst", "myConst"));
+var_dump($rc->hasConstant(null));
+var_dump($rc->hasConstant(1));
+var_dump($rc->hasConstant(1.5));
+var_dump($rc->hasConstant(true));
+var_dump($rc->hasConstant(array(1,2,3)));
+var_dump($rc->hasConstant(new C));
+?>
+--EXPECTF--
+Check invalid params:
+
+Warning: ReflectionClass::hasConstant() expects exactly 1 parameter, 0 given in %s on line 8
+NULL
+
+Warning: ReflectionClass::hasConstant() expects exactly 1 parameter, 2 given in %s on line 9
+NULL
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+
+Warning: ReflectionClass::hasConstant() expects parameter 1 to be string, array given in %s on line 14
+NULL
+
+Warning: ReflectionClass::hasConstant() expects parameter 1 to be string, object given in %s on line 15
+NULL \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_hasMethod_001.phpt b/ext/reflection/tests/ReflectionClass_hasMethod_001.phpt
new file mode 100644
index 000000000..81614bd9f
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_hasMethod_001.phpt
@@ -0,0 +1,75 @@
+--TEST--
+ReflectionClass::hasMethod()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class pubf {
+ public function f() {}
+ static public function s() {}
+}
+class subpubf extends pubf {
+}
+
+class protf {
+ protected function f() {}
+ static protected function s() {}
+}
+class subprotf extends protf {
+}
+
+class privf {
+ private function f() {}
+ static private function s() {}
+}
+class subprivf extends privf {
+}
+
+$classes = array("pubf", "subpubf", "protf", "subprotf",
+ "privf", "subprivf");
+foreach($classes as $class) {
+ echo "Reflecting on class $class: \n";
+ $rc = new ReflectionClass($class);
+ echo " --> Check for f(): ";
+ var_dump($rc->hasMethod("f"));
+ echo " --> Check for s(): ";
+ var_dump($rc->hasMethod("s"));
+ echo " --> Check for F(): ";
+ var_dump($rc->hasMethod("F"));
+ echo " --> Check for doesntExist(): ";
+ var_dump($rc->hasMethod("doesntExist"));
+}
+?>
+--EXPECTF--
+Reflecting on class pubf:
+ --> Check for f(): bool(true)
+ --> Check for s(): bool(true)
+ --> Check for F(): bool(true)
+ --> Check for doesntExist(): bool(false)
+Reflecting on class subpubf:
+ --> Check for f(): bool(true)
+ --> Check for s(): bool(true)
+ --> Check for F(): bool(true)
+ --> Check for doesntExist(): bool(false)
+Reflecting on class protf:
+ --> Check for f(): bool(true)
+ --> Check for s(): bool(true)
+ --> Check for F(): bool(true)
+ --> Check for doesntExist(): bool(false)
+Reflecting on class subprotf:
+ --> Check for f(): bool(true)
+ --> Check for s(): bool(true)
+ --> Check for F(): bool(true)
+ --> Check for doesntExist(): bool(false)
+Reflecting on class privf:
+ --> Check for f(): bool(true)
+ --> Check for s(): bool(true)
+ --> Check for F(): bool(true)
+ --> Check for doesntExist(): bool(false)
+Reflecting on class subprivf:
+ --> Check for f(): bool(true)
+ --> Check for s(): bool(true)
+ --> Check for F(): bool(true)
+ --> Check for doesntExist(): bool(false)
+ \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_hasMethod_002.phpt b/ext/reflection/tests/ReflectionClass_hasMethod_002.phpt
new file mode 100644
index 000000000..63fe8791f
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_hasMethod_002.phpt
@@ -0,0 +1,40 @@
+--TEST--
+ReflectionClass::hasMethod() - error cases
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class C {
+ function f() {}
+}
+
+$rc = new ReflectionClass("C");
+echo "Check invalid params:\n";
+var_dump($rc->hasMethod());
+var_dump($rc->hasMethod("f", "f"));
+var_dump($rc->hasMethod(null));
+var_dump($rc->hasMethod(1));
+var_dump($rc->hasMethod(1.5));
+var_dump($rc->hasMethod(true));
+var_dump($rc->hasMethod(array(1,2,3)));
+var_dump($rc->hasMethod(new C));
+?>
+--EXPECTF--
+Check invalid params:
+
+Warning: ReflectionClass::hasMethod() expects exactly 1 parameter, 0 given in %s on line 8
+NULL
+
+Warning: ReflectionClass::hasMethod() expects exactly 1 parameter, 2 given in %s on line 9
+NULL
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+
+Warning: ReflectionClass::hasMethod() expects parameter 1 to be string, array given in %s on line 14
+NULL
+
+Warning: ReflectionClass::hasMethod() expects parameter 1 to be string, object given in %s on line 15
+NULL
diff --git a/ext/reflection/tests/ReflectionClass_hasProperty_001.phpt b/ext/reflection/tests/ReflectionClass_hasProperty_001.phpt
new file mode 100644
index 000000000..94f739c33
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_hasProperty_001.phpt
@@ -0,0 +1,75 @@
+--TEST--
+ReflectionClass::hasProperty()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class pubf {
+ public $a;
+ static public $s;
+}
+class subpubf extends pubf {
+}
+
+class protf {
+ protected $a;
+ static protected $s;
+}
+class subprotf extends protf {
+}
+
+class privf {
+ private $a;
+ static protected $s;
+}
+class subprivf extends privf {
+}
+
+$classes = array("pubf", "subpubf", "protf", "subprotf",
+ "privf", "subprivf");
+foreach($classes as $class) {
+ echo "Reflecting on class $class: \n";
+ $rc = new ReflectionClass($class);
+ echo " --> Check for s: ";
+ var_dump($rc->hasProperty("s"));
+ echo " --> Check for a: ";
+ var_dump($rc->hasProperty("a"));
+ echo " --> Check for A: ";
+ var_dump($rc->hasProperty("A"));
+ echo " --> Check for doesntExist: ";
+ var_dump($rc->hasProperty("doesntExist"));
+}
+?>
+--EXPECTF--
+Reflecting on class pubf:
+ --> Check for s: bool(true)
+ --> Check for a: bool(true)
+ --> Check for A: bool(false)
+ --> Check for doesntExist: bool(false)
+Reflecting on class subpubf:
+ --> Check for s: bool(true)
+ --> Check for a: bool(true)
+ --> Check for A: bool(false)
+ --> Check for doesntExist: bool(false)
+Reflecting on class protf:
+ --> Check for s: bool(true)
+ --> Check for a: bool(true)
+ --> Check for A: bool(false)
+ --> Check for doesntExist: bool(false)
+Reflecting on class subprotf:
+ --> Check for s: bool(true)
+ --> Check for a: bool(true)
+ --> Check for A: bool(false)
+ --> Check for doesntExist: bool(false)
+Reflecting on class privf:
+ --> Check for s: bool(true)
+ --> Check for a: bool(true)
+ --> Check for A: bool(false)
+ --> Check for doesntExist: bool(false)
+Reflecting on class subprivf:
+ --> Check for s: bool(true)
+ --> Check for a: bool(true)
+ --> Check for A: bool(false)
+ --> Check for doesntExist: bool(false)
+
diff --git a/ext/reflection/tests/ReflectionClass_hasProperty_002.phpt b/ext/reflection/tests/ReflectionClass_hasProperty_002.phpt
new file mode 100644
index 000000000..753890394
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_hasProperty_002.phpt
@@ -0,0 +1,40 @@
+--TEST--
+ReflectionClass::hasProperty() - error cases
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class C {
+ public $a;
+}
+
+$rc = new ReflectionClass("C");
+echo "Check invalid params:\n";
+var_dump($rc->hasProperty());
+var_dump($rc->hasProperty("a", "a"));
+var_dump($rc->hasProperty(null));
+var_dump($rc->hasProperty(1));
+var_dump($rc->hasProperty(1.5));
+var_dump($rc->hasProperty(true));
+var_dump($rc->hasProperty(array(1,2,3)));
+var_dump($rc->hasProperty(new C));
+?>
+--EXPECTF--
+Check invalid params:
+
+Warning: ReflectionClass::hasProperty() expects exactly 1 parameter, 0 given in %s on line 8
+NULL
+
+Warning: ReflectionClass::hasProperty() expects exactly 1 parameter, 2 given in %s on line 9
+NULL
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+
+Warning: ReflectionClass::hasProperty() expects parameter 1 to be string, array given in %s on line 14
+NULL
+
+Warning: ReflectionClass::hasProperty() expects parameter 1 to be string, object given in %s on line 15
+NULL
diff --git a/ext/reflection/tests/ReflectionClass_implementsInterface_001.phpt b/ext/reflection/tests/ReflectionClass_implementsInterface_001.phpt
new file mode 100644
index 000000000..9c2fdeddd
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_implementsInterface_001.phpt
@@ -0,0 +1,155 @@
+--TEST--
+ReflectionClass::implementsInterface()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+interface I1 {}
+class A implements I1 {}
+class B extends A {}
+
+interface I2 extends I1 {}
+class C implements I2 {}
+
+$classNames = array('A', 'B', 'C', 'I1', 'I2');
+
+foreach ($classNames as $className) {
+ $rcs[$className] = new ReflectionClass($className);
+}
+
+foreach ($rcs as $childName => $child) {
+ foreach ($rcs as $parentName => $parent) {
+ echo "Does " . $childName . " implement " . $parentName . "? \n";
+ echo " - Using object argument: ";
+ try {
+ var_dump($child->implementsInterface($parent));
+ } catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+ }
+ echo " - Using string argument: ";
+ try {
+ var_dump($child->implementsInterface($parentName));
+ } catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+ }
+ }
+}
+
+
+
+echo "\n\nTest bad arguments:\n";
+try {
+ var_dump($rcs['A']->implementsInterface());
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rcs['A']->implementsInterface('C', 'C'));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rcs['A']->implementsInterface(null));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rcs['A']->implementsInterface('ThisClassDoesNotExist'));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rcs['A']->implementsInterface(2));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+?>
+--EXPECTF--
+Does A implement A?
+ - Using object argument: Interface A is a Class
+ - Using string argument: Interface A is a Class
+Does A implement B?
+ - Using object argument: Interface B is a Class
+ - Using string argument: Interface B is a Class
+Does A implement C?
+ - Using object argument: Interface C is a Class
+ - Using string argument: Interface C is a Class
+Does A implement I1?
+ - Using object argument: bool(true)
+ - Using string argument: bool(true)
+Does A implement I2?
+ - Using object argument: bool(false)
+ - Using string argument: bool(false)
+Does B implement A?
+ - Using object argument: Interface A is a Class
+ - Using string argument: Interface A is a Class
+Does B implement B?
+ - Using object argument: Interface B is a Class
+ - Using string argument: Interface B is a Class
+Does B implement C?
+ - Using object argument: Interface C is a Class
+ - Using string argument: Interface C is a Class
+Does B implement I1?
+ - Using object argument: bool(true)
+ - Using string argument: bool(true)
+Does B implement I2?
+ - Using object argument: bool(false)
+ - Using string argument: bool(false)
+Does C implement A?
+ - Using object argument: Interface A is a Class
+ - Using string argument: Interface A is a Class
+Does C implement B?
+ - Using object argument: Interface B is a Class
+ - Using string argument: Interface B is a Class
+Does C implement C?
+ - Using object argument: Interface C is a Class
+ - Using string argument: Interface C is a Class
+Does C implement I1?
+ - Using object argument: bool(true)
+ - Using string argument: bool(true)
+Does C implement I2?
+ - Using object argument: bool(true)
+ - Using string argument: bool(true)
+Does I1 implement A?
+ - Using object argument: Interface A is a Class
+ - Using string argument: Interface A is a Class
+Does I1 implement B?
+ - Using object argument: Interface B is a Class
+ - Using string argument: Interface B is a Class
+Does I1 implement C?
+ - Using object argument: Interface C is a Class
+ - Using string argument: Interface C is a Class
+Does I1 implement I1?
+ - Using object argument: bool(true)
+ - Using string argument: bool(true)
+Does I1 implement I2?
+ - Using object argument: bool(false)
+ - Using string argument: bool(false)
+Does I2 implement A?
+ - Using object argument: Interface A is a Class
+ - Using string argument: Interface A is a Class
+Does I2 implement B?
+ - Using object argument: Interface B is a Class
+ - Using string argument: Interface B is a Class
+Does I2 implement C?
+ - Using object argument: Interface C is a Class
+ - Using string argument: Interface C is a Class
+Does I2 implement I1?
+ - Using object argument: bool(true)
+ - Using string argument: bool(true)
+Does I2 implement I2?
+ - Using object argument: bool(true)
+ - Using string argument: bool(true)
+
+
+Test bad arguments:
+
+Warning: ReflectionClass::implementsInterface() expects exactly 1 parameter, 0 given in %s on line 37
+NULL
+
+Warning: ReflectionClass::implementsInterface() expects exactly 1 parameter, 2 given in %s on line 42
+NULL
+Parameter one must either be a string or a ReflectionClass object
+Interface ThisClassDoesNotExist does not exist
+Parameter one must either be a string or a ReflectionClass object
diff --git a/ext/reflection/tests/ReflectionClass_isIterateable_001.phpt b/ext/reflection/tests/ReflectionClass_isIterateable_001.phpt
new file mode 100644
index 000000000..3ece91542
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_isIterateable_001.phpt
@@ -0,0 +1,75 @@
+--TEST--
+ReflectionClass::isIterateable()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+Interface ExtendsIterator extends Iterator {
+}
+Interface ExtendsIteratorAggregate extends IteratorAggregate {
+}
+Class IteratorImpl implements Iterator {
+ public function next() {}
+ public function key() {}
+ public function rewind() {}
+ public function current() {}
+ public function valid() {}
+}
+Class IterarorAggregateImpl implements IteratorAggregate {
+ public function getIterator() {}
+}
+Class ExtendsIteratorImpl extends IteratorImpl {
+}
+Class ExtendsIteratorAggregateImpl extends IterarorAggregateImpl {
+}
+Class A {
+}
+
+$classes = array('Traversable', 'Iterator', 'IteratorAggregate', 'ExtendsIterator', 'ExtendsIteratorAggregate',
+ 'IteratorImpl', 'IterarorAggregateImpl', 'ExtendsIteratorImpl', 'ExtendsIteratorAggregateImpl', 'A');
+
+foreach($classes as $class) {
+ $rc = new ReflectionClass($class);
+ echo "Is $class iterable? ";
+ var_dump($rc->isIterateable());
+}
+
+echo "\nTest invalid params:\n";
+$rc = new ReflectionClass('IteratorImpl');
+var_dump($rc->isIterateable(null));
+var_dump($rc->isIterateable(null, null));
+var_dump($rc->isIterateable(1));
+var_dump($rc->isIterateable(1.5));
+var_dump($rc->isIterateable(true));
+var_dump($rc->isIterateable('X'));
+var_dump($rc->isIterateable(null));
+
+echo "\nTest static invocation:\n";
+ReflectionClass::isIterateable();
+
+?>
+--EXPECTF--
+Is Traversable iterable? bool(false)
+Is Iterator iterable? bool(false)
+Is IteratorAggregate iterable? bool(false)
+Is ExtendsIterator iterable? bool(false)
+Is ExtendsIteratorAggregate iterable? bool(false)
+Is IteratorImpl iterable? bool(true)
+Is IterarorAggregateImpl iterable? bool(true)
+Is ExtendsIteratorImpl iterable? bool(true)
+Is ExtendsIteratorAggregateImpl iterable? bool(true)
+Is A iterable? bool(false)
+
+Test invalid params:
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+
+Test static invocation:
+
+Fatal error: Non-static method ReflectionClass::isIterateable() cannot be called statically in %s on line 43 \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_isSubclassOf_002.phpt b/ext/reflection/tests/ReflectionClass_isSubclassOf_002.phpt
new file mode 100644
index 000000000..083b27713
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_isSubclassOf_002.phpt
@@ -0,0 +1,49 @@
+--TEST--
+ReflectionObject::isSubclassOf() - bad arguments
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class A {}
+$rc = new ReflectionClass('A');
+
+echo "\n\nTest bad arguments:\n";
+try {
+ var_dump($rc->isSubclassOf());
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->isSubclassOf('C', 'C'));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->isSubclassOf(null));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->isSubclassOf('ThisClassDoesNotExist'));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->isSubclassOf(2));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+?>
+--EXPECTF--
+
+Test bad arguments:
+
+Warning: ReflectionClass::isSubclassOf() expects exactly 1 parameter, 0 given in %s on line 7
+NULL
+
+Warning: ReflectionClass::isSubclassOf() expects exactly 1 parameter, 2 given in %s on line 12
+NULL
+Parameter one must either be a string or a ReflectionClass object
+Class ThisClassDoesNotExist does not exist
+Parameter one must either be a string or a ReflectionClass object \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_modifiers_001.phpt b/ext/reflection/tests/ReflectionClass_modifiers_001.phpt
new file mode 100644
index 000000000..941bfe5f2
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_modifiers_001.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Modifiers
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+abstract class A {}
+class B extends A {}
+class C {}
+final class D {}
+interface I {}
+
+$classes = array("A", "B", "C", "D", "I");
+
+foreach ($classes as $class) {
+ $rc = new ReflectionClass($class);
+ var_dump($rc->isFinal());
+ var_dump($rc->isInterface());
+ var_dump($rc->isAbstract());
+ var_dump($rc->getModifiers());
+}
+?>
+--EXPECTF--
+bool(false)
+bool(false)
+bool(true)
+int(32)
+bool(false)
+bool(false)
+bool(false)
+int(0)
+bool(false)
+bool(false)
+bool(false)
+int(0)
+bool(true)
+bool(false)
+bool(false)
+int(64)
+bool(false)
+bool(true)
+bool(false)
+int(128) \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_modifiers_002.phpt b/ext/reflection/tests/ReflectionClass_modifiers_002.phpt
new file mode 100644
index 000000000..3fa247454
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_modifiers_002.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Modifiers - wrong param count
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class C {}
+$rc = new ReflectionClass("C");
+var_dump($rc->isFinal('X'));
+var_dump($rc->isInterface(null));
+var_dump($rc->isAbstract(true));
+var_dump($rc->getModifiers(array(1,2,3)));
+
+?>
+--EXPECTF--
+
+Warning: Wrong parameter count for ReflectionClass::isFinal() in %s on line 4
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::isInterface() in %s on line 5
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::isAbstract() in %s on line 6
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getModifiers() in %s on line 7
+NULL
diff --git a/ext/reflection/tests/ReflectionClass_newInstanceArgs_001.phpt b/ext/reflection/tests/ReflectionClass_newInstanceArgs_001.phpt
new file mode 100644
index 000000000..981d67519
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_newInstanceArgs_001.phpt
@@ -0,0 +1,98 @@
+--TEST--
+ReflectionClass::newInstanceArgs
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class A {
+ public function A() {
+ echo "In constructor of class A\n";
+ }
+}
+
+class B {
+ public function __construct($a, $b) {
+ echo "In constructor of class B with args $a, $b\n";
+ }
+}
+
+class C {
+ protected function __construct() {
+ echo "In constructor of class C\n";
+ }
+}
+
+class D {
+ private function __construct() {
+ echo "In constructor of class D\n";
+ }
+}
+class E {
+}
+
+
+$rcA = new ReflectionClass('A');
+$rcB = new ReflectionClass('B');
+$rcC = new ReflectionClass('C');
+$rcD = new ReflectionClass('D');
+$rcE = new ReflectionClass('E');
+
+$a1 = $rcA->newInstanceArgs();
+$a2 = $rcA->newInstanceArgs(array('x'));
+var_dump($a1, $a2);
+
+$b1 = $rcB->newInstanceArgs();
+$b2 = $rcB->newInstanceArgs(array('x', 123));
+var_dump($b1, $b2);
+
+try {
+ $rcC->newInstanceArgs();
+ echo "you should not see this\n";
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+
+try {
+ $rcD->newInstanceArgs();
+ echo "you should not see this\n";
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+
+$e1 = $rcE->newInstanceArgs();
+var_dump($e1);
+
+try {
+ $e2 = $rcE->newInstanceArgs(array('x'));
+ echo "you should not see this\n";
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+?>
+--EXPECTF--
+In constructor of class A
+In constructor of class A
+object(A)#%d (0) {
+}
+object(A)#%d (0) {
+}
+
+Warning: Missing argument 1 for B::__construct() in %s on line 9
+
+Warning: Missing argument 2 for B::__construct() in %s on line 9
+
+Notice: Undefined variable: a in %s on line 10
+
+Notice: Undefined variable: b in %s on line 10
+In constructor of class B with args ,
+In constructor of class B with args x, 123
+object(B)#%d (0) {
+}
+object(B)#%d (0) {
+}
+Access to non-public constructor of class C
+Access to non-public constructor of class D
+object(E)#%d (0) {
+}
+Class E does not have a constructor, so you cannot pass any constructor arguments \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_newInstanceArgs_002.phpt b/ext/reflection/tests/ReflectionClass_newInstanceArgs_002.phpt
new file mode 100644
index 000000000..af5aeff2d
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_newInstanceArgs_002.phpt
@@ -0,0 +1,20 @@
+--TEST--
+ReflectionClass::newInstanceArgs() - wrong arg type
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class A {
+ public function __construct($a, $b) {
+ echo "In constructor of class B with arg $a\n";
+ }
+}
+$rc = new ReflectionClass('A');
+$a = $rc->newInstanceArgs('x');
+var_dump($a);
+
+?>
+--EXPECTF--
+
+Catchable fatal error: Argument 1 passed to ReflectionClass::newInstanceArgs() must be an array, string given in %s on line 8
diff --git a/ext/reflection/tests/ReflectionClass_newInstance_001.phpt b/ext/reflection/tests/ReflectionClass_newInstance_001.phpt
new file mode 100644
index 000000000..3cdb5d76b
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_newInstance_001.phpt
@@ -0,0 +1,98 @@
+--TEST--
+ReflectionClass::newInstance()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class A {
+ public function A() {
+ echo "In constructor of class A\n";
+ }
+}
+
+class B {
+ public function __construct($a, $b) {
+ echo "In constructor of class B with args $a, $b\n";
+ }
+}
+
+class C {
+ protected function __construct() {
+ echo "In constructor of class C\n";
+ }
+}
+
+class D {
+ private function __construct() {
+ echo "In constructor of class D\n";
+ }
+}
+class E {
+}
+
+
+$rcA = new ReflectionClass('A');
+$rcB = new ReflectionClass('B');
+$rcC = new ReflectionClass('C');
+$rcD = new ReflectionClass('D');
+$rcE = new ReflectionClass('E');
+
+$a1 = $rcA->newInstance();
+$a2 = $rcA->newInstance('x');
+var_dump($a1, $a2);
+
+$b1 = $rcB->newInstance();
+$b2 = $rcB->newInstance('x', 123);
+var_dump($b1, $b2);
+
+try {
+ $rcC->newInstance();
+ echo "you should not see this\n";
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+
+try {
+ $rcD->newInstance();
+ echo "you should not see this\n";
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+
+$e1 = $rcE->newInstance();
+var_dump($e1);
+
+try {
+ $e2 = $rcE->newInstance('x');
+ echo "you should not see this\n";
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+?>
+--EXPECTF--
+In constructor of class A
+In constructor of class A
+object(A)#%d (0) {
+}
+object(A)#%d (0) {
+}
+
+Warning: Missing argument 1 for B::__construct() in %s on line 9
+
+Warning: Missing argument 2 for B::__construct() in %s on line 9
+
+Notice: Undefined variable: a in %s on line 10
+
+Notice: Undefined variable: b in %s on line 10
+In constructor of class B with args ,
+In constructor of class B with args x, 123
+object(B)#%d (0) {
+}
+object(B)#%d (0) {
+}
+Access to non-public constructor of class C
+Access to non-public constructor of class D
+object(E)#%d (0) {
+}
+Class E does not have a constructor, so you cannot pass any constructor arguments \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_setStaticPropertyValue_001.phpt b/ext/reflection/tests/ReflectionClass_setStaticPropertyValue_001.phpt
new file mode 100644
index 000000000..70a3bab9c
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_setStaticPropertyValue_001.phpt
@@ -0,0 +1,77 @@
+--TEST--
+ReflectionClass::setStaticPropertyValue()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class A {
+ static private $privateOverridden = "original private";
+ static protected $protectedOverridden = "original protected";
+ static public $publicOverridden = "original public";
+}
+
+class B extends A {
+ static private $privateOverridden = "changed private";
+ static protected $protectedOverridden = "changed protected";
+ static public $publicOverridden = "changed public";
+}
+
+echo "Set static values in A:\n";
+$rcA = new ReflectionClass('A');
+$rcA->setStaticPropertyValue("\0A\0privateOverridden", "new value 1");
+$rcA->setStaticPropertyValue("\0*\0protectedOverridden", "new value 2");
+$rcA->setStaticPropertyValue("publicOverridden", "new value 3");
+print_r($rcA->getStaticProperties());
+
+echo "\nSet static values in B:\n";
+$rcB = new ReflectionClass('B');
+$rcB->setStaticPropertyValue("\0A\0privateOverridden", "new value 4");
+$rcB->setStaticPropertyValue("\0B\0privateOverridden", "new value 5");
+$rcB->setStaticPropertyValue("\0*\0protectedOverridden", "new value 6");
+$rcB->setStaticPropertyValue("publicOverridden", "new value 7");
+print_r($rcA->getStaticProperties());
+print_r($rcB->getStaticProperties());
+
+echo "\nSet non-existent values from A with no default value:\n";
+try {
+ var_dump($rcA->setStaticPropertyValue("protectedOverridden", "new value 8"));
+ echo "you should not see this";
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+
+try {
+ var_dump($rcA->setStaticPropertyValue("privateOverridden", "new value 9"));
+ echo "you should not see this";
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+
+?>
+--EXPECTF--
+Set static values in A:
+Array
+(
+ [privateOverridden] => new value 1
+ [protectedOverridden] => new value 2
+ [publicOverridden] => new value 3
+)
+
+Set static values in B:
+Array
+(
+ [privateOverridden] => new value 4
+ [protectedOverridden] => new value 2
+ [publicOverridden] => new value 3
+)
+Array
+(
+ [privateOverridden] => new value 4
+ [protectedOverridden] => new value 6
+ [publicOverridden] => new value 7
+)
+
+Set non-existent values from A with no default value:
+Class A does not have a property named protectedOverridden
+Class A does not have a property named privateOverridden \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_setStaticPropertyValue_002.phpt b/ext/reflection/tests/ReflectionClass_setStaticPropertyValue_002.phpt
new file mode 100644
index 000000000..3244ec30b
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_setStaticPropertyValue_002.phpt
@@ -0,0 +1,60 @@
+--TEST--
+ReflectionClass::getStaticPropertyValue() - bad params
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class C {
+ public static $x;
+}
+
+$rc = new ReflectionClass('C');
+try {
+ var_dump($rc->setStaticPropertyValue("x", "default value", 'blah'));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->setStaticPropertyValue());
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->setStaticPropertyValue(null));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->setStaticPropertyValue(null,null));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->setStaticPropertyValue(1.5, 'def'));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($rc->setStaticPropertyValue(array(1,2,3), 'blah'));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+
+
+?>
+--EXPECTF--
+
+Warning: ReflectionClass::setStaticPropertyValue() expects exactly 2 parameters, 3 given in %s on line 8
+NULL
+
+Warning: ReflectionClass::setStaticPropertyValue() expects exactly 2 parameters, 0 given in %s on line 13
+NULL
+
+Warning: ReflectionClass::setStaticPropertyValue() expects exactly 2 parameters, 1 given in %s on line 18
+NULL
+Class C does not have a property named
+Class C does not have a property named 1.5
+
+Warning: ReflectionClass::setStaticPropertyValue() expects parameter 1 to be string, array given in %s on line 33
+NULL \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_toString_001.phpt b/ext/reflection/tests/ReflectionClass_toString_001.phpt
new file mode 100644
index 000000000..8f567f478
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_toString_001.phpt
@@ -0,0 +1,224 @@
+--TEST--
+ReflectionClass::__toString()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+$rc = new ReflectionClass("ReflectionClass");
+echo $rc;
+?>
+--EXPECTF--
+Class [ <internal:Reflection> class ReflectionClass implements Reflector ] {
+
+ - Constants [3] {
+ Constant [ integer IS_IMPLICIT_ABSTRACT ] { 16 }
+ Constant [ integer IS_EXPLICIT_ABSTRACT ] { 32 }
+ Constant [ integer IS_FINAL ] { 64 }
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [1] {
+ Method [ <internal:Reflection> static public method export ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> $argument ]
+ Parameter #1 [ <optional> $return ]
+ }
+ }
+ }
+
+ - Properties [1] {
+ Property [ <default> public $name ]
+ }
+
+ - Methods [40] {
+ Method [ <internal:Reflection> final private method __clone ] {
+ }
+
+ Method [ <internal:Reflection, ctor> public method __construct ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> $argument ]
+ }
+ }
+
+ Method [ <internal:Reflection> public method __toString ] {
+ }
+
+ Method [ <internal:Reflection> public method getName ] {
+ }
+
+ Method [ <internal:Reflection> public method isInternal ] {
+ }
+
+ Method [ <internal:Reflection> public method isUserDefined ] {
+ }
+
+ Method [ <internal:Reflection> public method isInstantiable ] {
+ }
+
+ Method [ <internal:Reflection> public method getFileName ] {
+ }
+
+ Method [ <internal:Reflection> public method getStartLine ] {
+ }
+
+ Method [ <internal:Reflection> public method getEndLine ] {
+ }
+
+ Method [ <internal:Reflection> public method getDocComment ] {
+ }
+
+ Method [ <internal:Reflection> public method getConstructor ] {
+ }
+
+ Method [ <internal:Reflection> public method hasMethod ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> $name ]
+ }
+ }
+
+ Method [ <internal:Reflection> public method getMethod ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> $name ]
+ }
+ }
+
+ Method [ <internal:Reflection> public method getMethods ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> $filter ]
+ }
+ }
+
+ Method [ <internal:Reflection> public method hasProperty ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> $name ]
+ }
+ }
+
+ Method [ <internal:Reflection> public method getProperty ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> $name ]
+ }
+ }
+
+ Method [ <internal:Reflection> public method getProperties ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> $filter ]
+ }
+ }
+
+ Method [ <internal:Reflection> public method hasConstant ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> $name ]
+ }
+ }
+
+ Method [ <internal:Reflection> public method getConstants ] {
+ }
+
+ Method [ <internal:Reflection> public method getConstant ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> $name ]
+ }
+ }
+
+ Method [ <internal:Reflection> public method getInterfaces ] {
+ }
+
+ Method [ <internal:Reflection> public method getInterfaceNames ] {
+ }
+
+ Method [ <internal:Reflection> public method isInterface ] {
+ }
+
+ Method [ <internal:Reflection> public method isAbstract ] {
+ }
+
+ Method [ <internal:Reflection> public method isFinal ] {
+ }
+
+ Method [ <internal:Reflection> public method getModifiers ] {
+ }
+
+ Method [ <internal:Reflection> public method isInstance ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> $object ]
+ }
+ }
+
+ Method [ <internal:Reflection> public method newInstance ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> $args ]
+ }
+ }
+
+ Method [ <internal:Reflection> public method newInstanceArgs ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> array $args ]
+ }
+ }
+
+ Method [ <internal:Reflection> public method getParentClass ] {
+ }
+
+ Method [ <internal:Reflection> public method isSubclassOf ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> $class ]
+ }
+ }
+
+ Method [ <internal:Reflection> public method getStaticProperties ] {
+ }
+
+ Method [ <internal:Reflection> public method getStaticPropertyValue ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> $name ]
+ Parameter #1 [ <optional> $default ]
+ }
+ }
+
+ Method [ <internal:Reflection> public method setStaticPropertyValue ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> $name ]
+ Parameter #1 [ <required> $value ]
+ }
+ }
+
+ Method [ <internal:Reflection> public method getDefaultProperties ] {
+ }
+
+ Method [ <internal:Reflection> public method isIterateable ] {
+ }
+
+ Method [ <internal:Reflection> public method implementsInterface ] {
+
+ - Parameters [1] {
+ Parameter #0 [ <required> $interface ]
+ }
+ }
+
+ Method [ <internal:Reflection> public method getExtension ] {
+ }
+
+ Method [ <internal:Reflection> public method getExtensionName ] {
+ }
+ }
+}
diff --git a/ext/reflection/tests/ReflectionClass_toString_002.phpt b/ext/reflection/tests/ReflectionClass_toString_002.phpt
new file mode 100644
index 000000000..e9aaa502c
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_toString_002.phpt
@@ -0,0 +1,123 @@
+--TEST--
+ReflectionClass::__toString() - verify 'inherits', 'overwrites' and 'prototype' parts of method representation
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+Class A {
+ function f() {}
+}
+Class B extends A {
+ function f() {}
+}
+Class C extends B {
+
+}
+Class D extends C {
+ function f() {}
+}
+foreach (array('A', 'B', 'C', 'D') as $class) {
+ echo "\n\n----( Reflection class $class: )----\n";
+ $rc = new ReflectionClass($class);
+ echo $rc;
+}
+
+?>
+--EXPECTF--
+
+
+----( Reflection class A: )----
+Class [ <user> class A ] {
+ @@ %s 2-4
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [1] {
+ Method [ <user> public method f ] {
+ @@ %s 3 - 3
+ }
+ }
+}
+
+
+----( Reflection class B: )----
+Class [ <user> class B extends A ] {
+ @@ %s 5-7
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [1] {
+ Method [ <user, overwrites A, prototype A> public method f ] {
+ @@ %s 6 - 6
+ }
+ }
+}
+
+
+----( Reflection class C: )----
+Class [ <user> class C extends B ] {
+ @@ %s 8-10
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [1] {
+ Method [ <user, inherits B, prototype A> public method f ] {
+ @@ %s 6 - 6
+ }
+ }
+}
+
+
+----( Reflection class D: )----
+Class [ <user> class D extends C ] {
+ @@ %s 11-13
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [1] {
+ Method [ <user, overwrites B, prototype A> public method f ] {
+ @@ %s 12 - 12
+ }
+ }
+} \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionClass_toString_003.phpt b/ext/reflection/tests/ReflectionClass_toString_003.phpt
new file mode 100644
index 000000000..cf926395a
--- /dev/null
+++ b/ext/reflection/tests/ReflectionClass_toString_003.phpt
@@ -0,0 +1,123 @@
+--TEST--
+ReflectionClass::__toString() - verify 'inherits', 'overwrites' and 'prototype' parts of method representation with private methods
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+Class A {
+ private function f() {}
+}
+Class B extends A {
+ private function f() {}
+}
+Class C extends B {
+
+}
+Class D extends C {
+ private function f() {}
+}
+foreach (array('A', 'B', 'C', 'D') as $class) {
+ echo "\n\n----( Reflection class $class: )----\n";
+ $rc = new ReflectionClass($class);
+ echo $rc;
+}
+
+?>
+--EXPECTF--
+
+
+----( Reflection class A: )----
+Class [ <user> class A ] {
+ @@ %s 2-4
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [1] {
+ Method [ <user> private method f ] {
+ @@ %s 3 - 3
+ }
+ }
+}
+
+
+----( Reflection class B: )----
+Class [ <user> class B extends A ] {
+ @@ %s 5-7
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [1] {
+ Method [ <user, overwrites A> private method f ] {
+ @@ %s 6 - 6
+ }
+ }
+}
+
+
+----( Reflection class C: )----
+Class [ <user> class C extends B ] {
+ @@ %s 8-10
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [1] {
+ Method [ <user, inherits B> private method f ] {
+ @@ %s 6 - 6
+ }
+ }
+}
+
+
+----( Reflection class D: )----
+Class [ <user> class D extends C ] {
+ @@ %s 11-13
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [1] {
+ Method [ <user, overwrites B> private method f ] {
+ @@ %s 12 - 12
+ }
+ }
+}
diff --git a/ext/reflection/tests/ReflectionFunction_001.phpt b/ext/reflection/tests/ReflectionFunction_001.phpt
new file mode 100644
index 000000000..7c592dc61
--- /dev/null
+++ b/ext/reflection/tests/ReflectionFunction_001.phpt
@@ -0,0 +1,67 @@
+--TEST--
+ReflectionFunction methods
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+
+/**
+ * my doc comment
+ */
+function foo () {
+ static $c;
+ static $a = 1;
+ static $b = "hello";
+ $d = 5;
+}
+
+/***
+ * not a doc comment
+ */
+function bar () {}
+
+
+function dumpFuncInfo($name) {
+ $funcInfo = new ReflectionFunction($name);
+ var_dump($funcInfo->getName());
+ var_dump($funcInfo->isInternal());
+ var_dump($funcInfo->isUserDefined());
+ var_dump($funcInfo->getStartLine());
+ var_dump($funcInfo->getEndLine());
+ var_dump($funcInfo->getStaticVariables());
+}
+
+dumpFuncInfo('foo');
+dumpFuncInfo('bar');
+dumpFuncInfo('extract');
+
+?>
+--EXPECT--
+string(3) "foo"
+bool(false)
+bool(true)
+int(6)
+int(11)
+array(3) {
+ ["c"]=>
+ NULL
+ ["a"]=>
+ int(1)
+ ["b"]=>
+ string(5) "hello"
+}
+string(3) "bar"
+bool(false)
+bool(true)
+int(16)
+int(16)
+array(0) {
+}
+string(7) "extract"
+bool(true)
+bool(false)
+bool(false)
+bool(false)
+array(0) {
+} \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionFunction_construct.001.phpt b/ext/reflection/tests/ReflectionFunction_construct.001.phpt
new file mode 100644
index 000000000..c8e0a17a9
--- /dev/null
+++ b/ext/reflection/tests/ReflectionFunction_construct.001.phpt
@@ -0,0 +1,23 @@
+--TEST--
+ReflectionFunction constructor errors
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+
+$a = new ReflectionFunction(array(1, 2, 3));
+try {
+ $a = new ReflectionFunction('nonExistentFunction');
+} catch (Exception $e) {
+ echo $e->getMessage();
+}
+$a = new ReflectionFunction();
+$a = new ReflectionFunction(1, 2);
+?>
+--EXPECTF--
+Warning: ReflectionFunction::__construct() expects parameter 1 to be string, array given in %s on line %d
+Function nonExistentFunction() does not exist
+Warning: ReflectionFunction::__construct() expects exactly 1 parameter, 0 given in %s on line %d
+
+Warning: ReflectionFunction::__construct() expects exactly 1 parameter, 2 given in %s on line %d
diff --git a/ext/reflection/tests/ReflectionFunction_getDocComment.001.phpt b/ext/reflection/tests/ReflectionFunction_getDocComment.001.phpt
new file mode 100644
index 000000000..38c278d8a
--- /dev/null
+++ b/ext/reflection/tests/ReflectionFunction_getDocComment.001.phpt
@@ -0,0 +1,41 @@
+--TEST--
+ReflectionFunction::getDocComment()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+
+/**
+ * my doc comment
+ */
+function foo () {
+ static $c;
+ static $a = 1;
+ static $b = "hello";
+ $d = 5;
+}
+
+/***
+ * not a doc comment
+ */
+function bar () {}
+
+
+function dumpFuncInfo($name) {
+ $funcInfo = new ReflectionFunction($name);
+ var_dump($funcInfo->getDocComment());
+}
+
+dumpFuncInfo('foo');
+dumpFuncInfo('bar');
+dumpFuncInfo('extract');
+
+?>
+--EXPECTF--
+string(%d) "/**
+ * my doc comment
+ */"
+bool(false)
+bool(false)
+
diff --git a/ext/reflection/tests/ReflectionFunction_getExtension.phpt b/ext/reflection/tests/ReflectionFunction_getExtension.phpt
new file mode 100644
index 000000000..18345892c
--- /dev/null
+++ b/ext/reflection/tests/ReflectionFunction_getExtension.phpt
@@ -0,0 +1,19 @@
+--TEST--
+ReflectionFunction::getExtension()
+--FILE--
+<?php
+function foo () {}
+
+$function = new ReflectionFunction('sort');
+var_dump($function->getExtension());
+
+$function = new ReflectionFunction('foo');
+var_dump($function->getExtension());
+?>
+--EXPECTF--
+object(ReflectionExtension)#%i (1) {
+ ["name"]=>
+ string(8) "standard"
+}
+NULL
+
diff --git a/ext/reflection/tests/ReflectionFunction_getExtensionName.phpt b/ext/reflection/tests/ReflectionFunction_getExtensionName.phpt
new file mode 100644
index 000000000..7553a50b3
--- /dev/null
+++ b/ext/reflection/tests/ReflectionFunction_getExtensionName.phpt
@@ -0,0 +1,16 @@
+--TEST--
+ReflectionFunction::getExtensionName()
+--FILE--
+<?php
+function foo() {}
+
+$function = new ReflectionFunction('sort');
+var_dump($function->getExtensionName());
+
+$function = new ReflectionFunction('foo');
+var_dump($function->getExtensionName());
+?>
+--EXPECT--
+string(8) "standard"
+bool(false)
+
diff --git a/ext/reflection/tests/ReflectionFunction_getFileName.001.phpt b/ext/reflection/tests/ReflectionFunction_getFileName.001.phpt
new file mode 100644
index 000000000..5dbe7b54b
--- /dev/null
+++ b/ext/reflection/tests/ReflectionFunction_getFileName.001.phpt
@@ -0,0 +1,18 @@
+--TEST--
+ReflectionFunction::getFileName() with function in an included file
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+
+include "included4.inc";
+
+$funcInfo = new ReflectionFunction('g');
+var_dump($funcInfo->getFileName());
+
+?>
+--EXPECTF--
+%sincluded4.inc
+%d
+string(%d) "%sincluded4.inc" \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionFunction_getFileName.002.phpt b/ext/reflection/tests/ReflectionFunction_getFileName.002.phpt
new file mode 100644
index 000000000..455935e38
--- /dev/null
+++ b/ext/reflection/tests/ReflectionFunction_getFileName.002.phpt
@@ -0,0 +1,39 @@
+--TEST--
+ReflectionFunction::getFileName()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+
+/**
+ * my doc comment
+ */
+function foo () {
+ static $c;
+ static $a = 1;
+ static $b = "hello";
+ $d = 5;
+}
+
+/***
+ * not a doc comment
+ */
+function bar () {}
+
+
+function dumpFuncInfo($name) {
+ $funcInfo = new ReflectionFunction($name);
+ var_dump($funcInfo->getFileName());
+}
+
+dumpFuncInfo('foo');
+dumpFuncInfo('bar');
+dumpFuncInfo('extract');
+
+?>
+--EXPECTF--
+string(%d) "%sReflectionFunction_getFileName.002.php"
+string(%d) "%sReflectionFunction_getFileName.002.php"
+bool(false)
+
diff --git a/ext/reflection/tests/ReflectionMethod_006.phpt b/ext/reflection/tests/ReflectionMethod_006.phpt
new file mode 100644
index 000000000..4a8192b9e
--- /dev/null
+++ b/ext/reflection/tests/ReflectionMethod_006.phpt
@@ -0,0 +1,100 @@
+--TEST--
+ReflectionMethod methods - wrong num args
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+
+var_dump(new ReflectionMethod());
+var_dump(new ReflectionMethod('a', 'b', 'c'));
+
+class C {
+ public function f() {}
+}
+
+$rm = new ReflectionMethod('C', 'f');
+
+var_dump($rm->isFinal(1));
+var_dump($rm->isAbstract(1));
+var_dump($rm->isPrivate(1));
+var_dump($rm->isProtected(1));
+var_dump($rm->isPublic(1));
+var_dump($rm->isStatic(1));
+var_dump($rm->isConstructor(1));
+var_dump($rm->isDestructor(1));
+var_dump($rm->getModifiers(1));
+var_dump($rm->isInternal(1));
+var_dump($rm->isUserDefined(1));
+var_dump($rm->getFileName(1));
+var_dump($rm->getStartLine(1));
+var_dump($rm->getEndLine(1));
+var_dump($rm->getStaticVariables(1));
+var_dump($rm->getName(1));
+
+
+?>
+--EXPECTF--
+Warning: ReflectionMethod::__construct() expects %s on line 3
+object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(0) ""
+ ["class"]=>
+ string(0) ""
+}
+
+Warning: ReflectionMethod::__construct() expects %s on line 4
+object(ReflectionMethod)#%d (2) {
+ ["name"]=>
+ string(0) ""
+ ["class"]=>
+ string(0) ""
+}
+
+Warning: Wrong parameter count for ReflectionMethod::isFinal() in %s on line 12
+NULL
+
+Warning: Wrong parameter count for ReflectionMethod::isAbstract() in %s on line 13
+NULL
+
+Warning: Wrong parameter count for ReflectionMethod::isPrivate() in %s on line 14
+NULL
+
+Warning: Wrong parameter count for ReflectionMethod::isProtected() in %s on line 15
+NULL
+
+Warning: Wrong parameter count for ReflectionMethod::isPublic() in %s on line 16
+NULL
+
+Warning: Wrong parameter count for ReflectionMethod::isStatic() in %s on line 17
+NULL
+
+Warning: Wrong parameter count for ReflectionMethod::isConstructor() in %s on line 18
+NULL
+
+Warning: Wrong parameter count for ReflectionMethod::isDestructor() in %s on line 19
+NULL
+
+Warning: Wrong parameter count for ReflectionMethod::getModifiers() in %s on line 20
+NULL
+
+Warning: Wrong parameter count for ReflectionFunctionAbstract::isInternal() in %s on line 21
+NULL
+
+Warning: Wrong parameter count for ReflectionFunctionAbstract::isUserDefined() in %s on line 22
+NULL
+
+Warning: Wrong parameter count for ReflectionFunctionAbstract::getFileName() in %s on line 23
+NULL
+
+Warning: Wrong parameter count for ReflectionFunctionAbstract::getStartLine() in %s on line 24
+NULL
+
+Warning: Wrong parameter count for ReflectionFunctionAbstract::getEndLine() in %s on line 25
+NULL
+
+Warning: Wrong parameter count for ReflectionFunctionAbstract::getStaticVariables() in %s on line 26
+NULL
+
+Warning: Wrong parameter count for ReflectionFunctionAbstract::getName() in %s on line 27
+NULL \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionMethod_constructor_error1.phpt b/ext/reflection/tests/ReflectionMethod_constructor_error1.phpt
new file mode 100644
index 000000000..70528255e
--- /dev/null
+++ b/ext/reflection/tests/ReflectionMethod_constructor_error1.phpt
@@ -0,0 +1,103 @@
+--TEST--
+ReflectionMethod constructor errors
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+
+class TestClass
+{
+ public function foo() {
+ }
+}
+
+
+try {
+ echo "\nWrong type of argument (bool):\n";
+ $methodInfo = new ReflectionMethod(true);
+} catch (Exception $e) {
+ print $e->__toString();
+}
+try {
+ echo "\nWrong type of argument (int):\n";
+ $methodInfo = new ReflectionMethod(3);
+} catch (Exception $e) {
+ print $e->__toString();
+}
+try {
+ echo "\nWrong type of argument (bool, string):\n";
+ $methodInfo = new ReflectionMethod(true, "foo");
+} catch (Exception $e) {
+ print $e->__toString();
+}
+try {
+ echo "\nWrong type of argument (string, bool):\n";
+ $methodInfo = new ReflectionMethod('TestClass', true);
+} catch (Exception $e) {
+ print $e->__toString();
+}
+try {
+ echo "\nNo method given:\n";
+ $methodInfo = new ReflectionMethod("TestClass");
+} catch (Exception $e) {
+ print $e->__toString();
+}
+try {
+ echo "\nClass and Method in same string, bad method name:\n";
+ $methodInfo = new ReflectionMethod("TestClass::foop::dedoop");
+} catch (Exception $e) {
+ print $e->__toString();
+}
+try {
+ echo "\nClass and Method in same string, bad class name:\n";
+ $methodInfo = new ReflectionMethod("TestCla::foo");
+} catch (Exception $e) {
+ print $e->__toString();
+}
+try {
+ echo "\nClass and Method in same string (ok):\n";
+ $methodInfo = new ReflectionMethod("TestClass::foo");
+} catch (Exception $e) {
+ print $e->__toString();
+}
+
+?>
+--EXPECTF--
+Wrong type of argument (bool):
+exception 'ReflectionException' with message 'Invalid method name 1' in %s
+Stack trace:
+#0 %s ReflectionMethod->__construct('1')
+#1 {main}
+Wrong type of argument (int):
+exception 'ReflectionException' with message 'Invalid method name 3' in %s
+Stack trace:
+#0 %s ReflectionMethod->__construct('3')
+#1 {main}
+Wrong type of argument (bool, string):
+exception 'ReflectionException' with message 'The parameter class is expected to be either a string or an object' in %s
+Stack trace:
+#0 %s ReflectionMethod->__construct(true, 'foo')
+#1 {main}
+Wrong type of argument (string, bool):
+exception 'ReflectionException' with message 'Method TestClass::1() does not exist' in %s
+Stack trace:
+#0 %s ReflectionMethod->__construct('TestClass', '1')
+#1 {main}
+No method given:
+exception 'ReflectionException' with message 'Invalid method name TestClass' in %s
+Stack trace:
+#0 %s ReflectionMethod->__construct('TestClass')
+#1 {main}
+Class and Method in same string, bad method name:
+exception 'ReflectionException' with message 'Method TestClass::foop::dedoop() does not exist' in %s
+Stack trace:
+#0 %s ReflectionMethod->__construct('TestClass::foop...')
+#1 {main}
+Class and Method in same string, bad class name:
+exception 'ReflectionException' with message 'Class TestCla does not exist' in %s
+Stack trace:
+#0 %s ReflectionMethod->__construct('TestCla::foo')
+#1 {main}
+Class and Method in same string (ok):
+
diff --git a/ext/reflection/tests/ReflectionMethod_constructor_error2.phpt b/ext/reflection/tests/ReflectionMethod_constructor_error2.phpt
new file mode 100644
index 000000000..1c2d3a138
--- /dev/null
+++ b/ext/reflection/tests/ReflectionMethod_constructor_error2.phpt
@@ -0,0 +1,37 @@
+--TEST--
+ReflectionMethod constructor errors
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+
+class TestClass
+{
+ public function foo() {
+ }
+}
+
+
+try {
+ echo "Too few arguments:\n";
+ $methodInfo = new ReflectionMethod();
+} catch (Exception $e) {
+ print $e->__toString();
+}
+try {
+ echo "\nToo many arguments:\n";
+ $methodInfo = new ReflectionMethod("TestClass", "foo", true);
+} catch (Exception $e) {
+ print $e->__toString();
+}
+
+?>
+--EXPECTF--
+Too few arguments:
+
+Warning: ReflectionMethod::__construct() expects exactly 1 parameter, 0 given in %s on line 12
+
+Too many arguments:
+
+Warning: ReflectionMethod::__construct() expects exactly 1 parameter, 3 given in %s on line 18
diff --git a/ext/reflection/tests/ReflectionObject_isSubclassOf.002.phpt b/ext/reflection/tests/ReflectionObject_isSubclassOf.002.phpt
new file mode 100644
index 000000000..2fb8cb087
--- /dev/null
+++ b/ext/reflection/tests/ReflectionObject_isSubclassOf.002.phpt
@@ -0,0 +1,48 @@
+--TEST--
+ReflectionObject::isSubclassOf() - bad arguments
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class C {}
+$ro = new ReflectionObject(new C);
+
+echo "\n\nTest bad arguments:\n";
+try {
+ var_dump($ro->isSubclassOf());
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($ro->isSubclassOf('C', 'C'));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($ro->isSubclassOf(null));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($ro->isSubclassOf('ThisClassDoesNotExist'));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($ro->isSubclassOf(2));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+?>
+--EXPECTF--
+Test bad arguments:
+
+Warning: ReflectionClass::isSubclassOf() expects exactly 1 parameter, 0 given in %s on line 7
+NULL
+
+Warning: ReflectionClass::isSubclassOf() expects exactly 1 parameter, 2 given in %s on line 12
+NULL
+Parameter one must either be a string or a ReflectionClass object
+Class ThisClassDoesNotExist does not exist
+Parameter one must either be a string or a ReflectionClass object \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionParameter_001.phpt b/ext/reflection/tests/ReflectionParameter_001.phpt
new file mode 100644
index 000000000..dae3ac723
--- /dev/null
+++ b/ext/reflection/tests/ReflectionParameter_001.phpt
@@ -0,0 +1,80 @@
+--TEST--
+ReflectionParameter class - getNames() method.
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class ReflectTestClass {
+ public static function twoArgFunction($theIncrement, $anotherParam) {
+ return ++$theIncrement;
+ }
+
+ public function oneArgNonStatic($theParam) {
+ $theParam--;
+ }
+
+ public function noArgs() {
+ echo "No arg function\n";
+ }
+}
+
+// Create an instance of the Reflection_Method class
+$method = new ReflectionMethod('ReflectTestClass', 'twoArgFunction');
+// Get the parameters
+$parameters = $method->getParameters();
+echo "Parameters from twoArgMethod:\n\n";
+foreach($parameters as $parameter) {
+ var_dump($parameter);
+ $name = $parameter->getName();
+ echo "\n";
+}
+
+$method = new ReflectionMethod('ReflectTestClass', 'oneArgNonStatic');
+$parameters = $method->getParameters();
+echo "Parameters from oneArgNonStatic:\n\n";
+foreach($parameters as $parameter) {
+ var_dump($parameter);
+ $name = $parameter->getName();
+ echo "\n";
+}
+
+
+$method = new ReflectionMethod('ReflectTestClass', 'noArgs');
+$parameters = $method->getParameters();
+echo "Parameters from noArgs:\n\n";
+var_dump($parameters);
+foreach($parameters as $parameter) {
+ var_dump($parameter);
+ $name = $parameter->getName();
+ echo "\n";
+}
+
+echo "done\n";
+
+?>
+--EXPECTF--
+Parameters from twoArgMethod:
+
+object(ReflectionParameter)#%i (1) {
+ ["name"]=>
+ string(12) "theIncrement"
+}
+
+object(ReflectionParameter)#%i (1) {
+ ["name"]=>
+ string(12) "anotherParam"
+}
+
+Parameters from oneArgNonStatic:
+
+object(ReflectionParameter)#%i (1) {
+ ["name"]=>
+ string(8) "theParam"
+}
+
+Parameters from noArgs:
+
+array(0) {
+}
+done \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionParameter_002.phpt b/ext/reflection/tests/ReflectionParameter_002.phpt
new file mode 100644
index 000000000..3b7df6f95
--- /dev/null
+++ b/ext/reflection/tests/ReflectionParameter_002.phpt
@@ -0,0 +1,80 @@
+--TEST--
+ReflectionParameter class - isPassedByReferenceMethod()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+class ReflectTestClass {
+ public static function staticMethod(&$paramOne, $anotherParam) {
+ return ++$theIncrement;
+ }
+
+ public function instanceMethod($firstParam, &$secondParam) {
+ $firstParam = "Hello\n";
+ }
+}
+
+// Create an instance of the Reflection_Method class
+$method = new ReflectionMethod('ReflectTestClass', 'staticMethod');
+// Get the parameters
+$parameters = $method->getParameters();
+echo "Parameters from staticMethod:\n\n";
+foreach($parameters as $parameter) {
+ var_dump($parameter);
+ if($parameter->isPassedByReference()) {
+ echo "This param is passed by reference\n";
+ } else {
+ echo "This param is not passed by reference\n";
+ }
+ echo "\n";
+}
+
+// Create an instance of the Reflection_Method class
+$method = new ReflectionMethod('ReflectTestClass', 'instanceMethod');
+// Get the parameters
+$parameters = $method->getParameters();
+echo "Parameters from instanceMethod:\n\n";
+foreach($parameters as $parameter) {
+ var_dump($parameter);
+ if($parameter->isPassedByReference()) {
+ echo "This param is passed by reference\n";
+ } else {
+ echo "This param is not passed by reference\n";
+ }
+ echo "\n";
+}
+
+echo "done\n";
+
+?>
+--EXPECTF--
+Parameters from staticMethod:
+
+object(ReflectionParameter)#%i (1) {
+ ["name"]=>
+ string(8) "paramOne"
+}
+This param is passed by reference
+
+object(ReflectionParameter)#%i (1) {
+ ["name"]=>
+ string(12) "anotherParam"
+}
+This param is not passed by reference
+
+Parameters from instanceMethod:
+
+object(ReflectionParameter)#%i (1) {
+ ["name"]=>
+ string(10) "firstParam"
+}
+This param is not passed by reference
+
+object(ReflectionParameter)#%i (1) {
+ ["name"]=>
+ string(11) "secondParam"
+}
+This param is passed by reference
+
+done \ No newline at end of file
diff --git a/ext/reflection/tests/ReflectionParameter_003.phpt b/ext/reflection/tests/ReflectionParameter_003.phpt
new file mode 100644
index 000000000..f7ced9ad0
--- /dev/null
+++ b/ext/reflection/tests/ReflectionParameter_003.phpt
@@ -0,0 +1,88 @@
+--TEST--
+ReflectionParameter class - isOptional, isDefaultValueAvailable and getDefaultValue methods.
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+
+class ReflectTestClass {
+ public static function staticMethod($paramOne, $anotherParam = "bob",
+ &$thirdParam = "jack", $arrayParam = array('one')) {
+ echo "hello from test\n";
+ echo "third is $thirdParam\n";
+ return ++$theIncrement;
+ }
+
+}
+
+$jane = "jane";
+ReflectTestClass::staticMethod("bob", "jack");
+
+$refMethod = new ReflectionMethod('ReflectTestClass', 'staticMethod');
+$refParameters = $refMethod->getParameters();
+
+echo "parameter names from staticMethod method:\n\n";
+foreach($refParameters as $parameter) {
+ var_dump($parameter);
+ if($parameter->isOptional()) {
+ echo "this parameter is optional\n";
+ } else {
+ echo "this parameter is not optional\n";
+ }
+
+ if($parameter->isDefaultValueAvailable()) {
+ echo "this parameter has a default value\n";
+ } else {
+ echo "this parameter has no default value\n";
+ }
+
+ /*
+ $val = 0;
+ try {
+ $val = $parameter->getDefaultValue();
+ var_dump($val);
+ } catch (ReflectionException $e) {
+ print $e->getMessage();
+ echo "\n";
+ }
+ */
+
+ echo "\n";
+}
+
+?>
+--EXPECTF--
+hello from test
+third is jack
+
+Notice: Undefined variable: theIncrement in %s on line 8
+parameter names from staticMethod method:
+
+object(ReflectionParameter)#%d (1) {
+ ["name"]=>
+ string(8) "paramOne"
+}
+this parameter is not optional
+this parameter has no default value
+
+object(ReflectionParameter)#%d (1) {
+ ["name"]=>
+ string(12) "anotherParam"
+}
+this parameter is optional
+this parameter has a default value
+
+object(ReflectionParameter)#%d (1) {
+ ["name"]=>
+ string(10) "thirdParam"
+}
+this parameter is optional
+this parameter has a default value
+
+object(ReflectionParameter)#%d (1) {
+ ["name"]=>
+ string(10) "arrayParam"
+}
+this parameter is optional
+this parameter has a default value
diff --git a/ext/reflection/tests/ReflectionProperty_getModifiers.001.phpt b/ext/reflection/tests/ReflectionProperty_getModifiers.001.phpt
new file mode 100644
index 000000000..fe888a83b
--- /dev/null
+++ b/ext/reflection/tests/ReflectionProperty_getModifiers.001.phpt
@@ -0,0 +1,66 @@
+--TEST--
+ReflectionProperty::getModifiers()
+--CREDITS--
+Robin Fernandes <robinf@php.net>
+Steve Seear <stevseea@php.net>
+--FILE--
+<?php
+
+function reflectProperty($class, $property) {
+ $propInfo = new ReflectionProperty($class, $property);
+
+ echo "**********************************\n";
+ echo "Reflecting on property $class::$property\n\n";
+
+ echo "getModifiers():\n";
+ var_dump($propInfo->getModifiers());
+
+ echo "\n**********************************\n";
+}
+
+class TestClass
+{
+ public $pub;
+ static public $stat = "static property";
+ /**
+ * This property has a comment.
+ */
+ protected $prot = 4;
+ private $priv = "keepOut";
+}
+
+reflectProperty("TestClass", "pub");
+reflectProperty("TestClass", "stat");
+reflectProperty("TestClass", "prot");
+reflectProperty("TestClass", "priv");
+
+?>
+--EXPECT--
+**********************************
+Reflecting on property TestClass::pub
+
+getModifiers():
+int(256)
+
+**********************************
+**********************************
+Reflecting on property TestClass::stat
+
+getModifiers():
+int(257)
+
+**********************************
+**********************************
+Reflecting on property TestClass::prot
+
+getModifiers():
+int(512)
+
+**********************************
+**********************************
+Reflecting on property TestClass::priv
+
+getModifiers():
+int(1024)
+
+**********************************
diff --git a/ext/reflection/tests/bug26695.phpt b/ext/reflection/tests/bug26695.phpt
index c62395325..22619d4f1 100755
--- a/ext/reflection/tests/bug26695.phpt
+++ b/ext/reflection/tests/bug26695.phpt
@@ -1,27 +1,27 @@
---TEST--
-Reflection Bug #26695 (Reflection API does not recognize mixed-case class hints)
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-
-class Foo {
-}
-
-class Bar {
- function demo(foo $f) {
- }
-}
-
-$class = new ReflectionClass('bar');
-$methods = $class->getMethods();
-$params = $methods[0]->getParameters();
-
-$class = $params[0]->getClass();
-
-var_dump($class->getName());
-?>
-===DONE===
---EXPECT--
-string(3) "Foo"
+--TEST--
+Reflection Bug #26695 (Reflection API does not recognize mixed-case class hints)
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+
+class Foo {
+}
+
+class Bar {
+ function demo(foo $f) {
+ }
+}
+
+$class = new ReflectionClass('bar');
+$methods = $class->getMethods();
+$params = $methods[0]->getParameters();
+
+$class = $params[0]->getClass();
+
+var_dump($class->getName());
+?>
+===DONE===
+--EXPECT--
+string(3) "Foo"
===DONE=== \ No newline at end of file
diff --git a/ext/reflection/tests/bug29268.phpt b/ext/reflection/tests/bug29268.phpt
index 9f17a5e11..cd8f9b8ed 100755
--- a/ext/reflection/tests/bug29268.phpt
+++ b/ext/reflection/tests/bug29268.phpt
@@ -1,29 +1,29 @@
---TEST--
-Reflection Bug #29268 (__autoload() not called with reflectionProperty->getClass())
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-function __autoload($classname) {
- echo "__autoload($classname)\n";
- eval("class $classname {}");
-}
-
-class B{
- public function doit(A $a){
- }
-}
-
-$ref = new reflectionMethod('B','doit');
-$parameters = $ref->getParameters();
-foreach($parameters as $parameter)
-{
- $class = $parameter->getClass();
- echo $class->name."\n";
-}
-echo "ok\n";
-?>
---EXPECT--
-__autoload(A)
-A
-ok
+--TEST--
+Reflection Bug #29268 (__autoload() not called with reflectionProperty->getClass())
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+function __autoload($classname) {
+ echo "__autoload($classname)\n";
+ eval("class $classname {}");
+}
+
+class B{
+ public function doit(A $a){
+ }
+}
+
+$ref = new reflectionMethod('B','doit');
+$parameters = $ref->getParameters();
+foreach($parameters as $parameter)
+{
+ $class = $parameter->getClass();
+ echo $class->name."\n";
+}
+echo "ok\n";
+?>
+--EXPECT--
+__autoload(A)
+A
+ok
diff --git a/ext/reflection/tests/bug29523.phpt b/ext/reflection/tests/bug29523.phpt
index e952d0ffe..ac83cc789 100755
--- a/ext/reflection/tests/bug29523.phpt
+++ b/ext/reflection/tests/bug29523.phpt
@@ -1,40 +1,40 @@
---TEST--
-Reflection Bug #29523 (ReflectionParameter::isOptional() is incorrect)
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-
-class TestClass
-{
-}
-
-function optionalTest(TestClass $a, TestClass $b, $c = 3)
-{
-}
-
-$function = new ReflectionFunction('optionalTest');
-$numberOfNotOptionalParameters = 0;
-$numberOfOptionalParameters = 0;
-foreach($function->getParameters() as $parameter)
-{
- var_dump($parameter->isOptional());
- if ($parameter->isOptional())
- {
- ++$numberOfOptionalParameters;
- }
- else
- {
- ++$numberOfNotOptionalParameters;
- }
-}
-var_dump($function->getNumberOfRequiredParameters());
-var_dump($numberOfNotOptionalParameters);
-
-?>
---EXPECT--
-bool(false)
-bool(false)
-bool(true)
-int(2)
-int(2)
+--TEST--
+Reflection Bug #29523 (ReflectionParameter::isOptional() is incorrect)
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+
+class TestClass
+{
+}
+
+function optionalTest(TestClass $a, TestClass $b, $c = 3)
+{
+}
+
+$function = new ReflectionFunction('optionalTest');
+$numberOfNotOptionalParameters = 0;
+$numberOfOptionalParameters = 0;
+foreach($function->getParameters() as $parameter)
+{
+ var_dump($parameter->isOptional());
+ if ($parameter->isOptional())
+ {
+ ++$numberOfOptionalParameters;
+ }
+ else
+ {
+ ++$numberOfNotOptionalParameters;
+ }
+}
+var_dump($function->getNumberOfRequiredParameters());
+var_dump($numberOfNotOptionalParameters);
+
+?>
+--EXPECT--
+bool(false)
+bool(false)
+bool(true)
+int(2)
+int(2)
diff --git a/ext/reflection/tests/bug29828.phpt b/ext/reflection/tests/bug29828.phpt
index f9052ac6b..7d4de40c1 100755
--- a/ext/reflection/tests/bug29828.phpt
+++ b/ext/reflection/tests/bug29828.phpt
@@ -1,37 +1,37 @@
---TEST--
-Reflection Bug #29828 (Interfaces no longer work)
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-
-interface Bla
-{
- function bla();
-}
-
-class BlaMore implements Bla
-{
- function bla()
- {
- echo "Hello\n";
- }
-}
-
-$r = new ReflectionClass('BlaMore');
-
-var_dump(count($r->getMethods()));
-var_dump($r->getMethod('bla')->isConstructor());
-var_dump($r->getMethod('bla')->isAbstract());
-
-$o=new BlaMore;
-$o->bla();
-
-?>
-===DONE===
---EXPECT--
-int(1)
-bool(false)
-bool(false)
-Hello
-===DONE===
+--TEST--
+Reflection Bug #29828 (Interfaces no longer work)
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+
+interface Bla
+{
+ function bla();
+}
+
+class BlaMore implements Bla
+{
+ function bla()
+ {
+ echo "Hello\n";
+ }
+}
+
+$r = new ReflectionClass('BlaMore');
+
+var_dump(count($r->getMethods()));
+var_dump($r->getMethod('bla')->isConstructor());
+var_dump($r->getMethod('bla')->isAbstract());
+
+$o=new BlaMore;
+$o->bla();
+
+?>
+===DONE===
+--EXPECT--
+int(1)
+bool(false)
+bool(false)
+Hello
+===DONE===
diff --git a/ext/reflection/tests/bug30146.phpt b/ext/reflection/tests/bug30146.phpt
index d7dd2fc21..3a7ce92a0 100755
--- a/ext/reflection/tests/bug30146.phpt
+++ b/ext/reflection/tests/bug30146.phpt
@@ -1,25 +1,25 @@
---TEST--
-Reflection Bug #30146 (ReflectionProperty->getValue() requires instance for static property)
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-class test {
- static public $a = 1;
-}
-
-$r = new ReflectionProperty('test', 'a');
-var_dump($r->getValue(null));
-
-$r->setValue(NULL, 2);
-var_dump($r->getValue());
-
-$r->setValue(3);
-var_dump($r->getValue());
-?>
-===DONE===
---EXPECT--
-int(1)
-int(2)
-int(3)
+--TEST--
+Reflection Bug #30146 (ReflectionProperty->getValue() requires instance for static property)
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+class test {
+ static public $a = 1;
+}
+
+$r = new ReflectionProperty('test', 'a');
+var_dump($r->getValue(null));
+
+$r->setValue(NULL, 2);
+var_dump($r->getValue());
+
+$r->setValue(3);
+var_dump($r->getValue());
+?>
+===DONE===
+--EXPECT--
+int(1)
+int(2)
+int(3)
===DONE=== \ No newline at end of file
diff --git a/ext/reflection/tests/bug30148.phpt b/ext/reflection/tests/bug30148.phpt
index 91bc31b65..d058aaa24 100755
--- a/ext/reflection/tests/bug30148.phpt
+++ b/ext/reflection/tests/bug30148.phpt
@@ -1,37 +1,37 @@
---TEST--
-Reflection Bug #30148 (ReflectionMethod->isConstructor() fails for inherited classes)
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-
-class Root
-{
- function Root() {}
-}
-class Base extends Root
-{
- function __construct() {}
-}
-class Derived extends Base
-{
-}
-$a = new ReflectionMethod('Root','Root');
-$b = new ReflectionMethod('Base','Root');
-$c = new ReflectionMethod('Base','__construct');
-$d = new ReflectionMethod('Derived','Root');
-$e = new ReflectionMethod('Derived','__construct');
-var_dump($a->isConstructor());
-var_dump($b->isConstructor());
-var_dump($c->isConstructor());
-var_dump($d->isConstructor());
-var_dump($e->isConstructor());
-?>
-===DONE===
---EXPECT--
-bool(true)
-bool(false)
-bool(true)
-bool(false)
-bool(true)
+--TEST--
+Reflection Bug #30148 (ReflectionMethod->isConstructor() fails for inherited classes)
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+
+class Root
+{
+ function Root() {}
+}
+class Base extends Root
+{
+ function __construct() {}
+}
+class Derived extends Base
+{
+}
+$a = new ReflectionMethod('Root','Root');
+$b = new ReflectionMethod('Base','Root');
+$c = new ReflectionMethod('Base','__construct');
+$d = new ReflectionMethod('Derived','Root');
+$e = new ReflectionMethod('Derived','__construct');
+var_dump($a->isConstructor());
+var_dump($b->isConstructor());
+var_dump($c->isConstructor());
+var_dump($d->isConstructor());
+var_dump($e->isConstructor());
+?>
+===DONE===
+--EXPECT--
+bool(true)
+bool(false)
+bool(true)
+bool(false)
+bool(true)
===DONE=== \ No newline at end of file
diff --git a/ext/reflection/tests/bug30856.phpt b/ext/reflection/tests/bug30856.phpt
index eaa6cf289..e5f06ab05 100755
--- a/ext/reflection/tests/bug30856.phpt
+++ b/ext/reflection/tests/bug30856.phpt
@@ -1,22 +1,22 @@
---TEST--
-Reflection Bug #30856 (ReflectionClass::getStaticProperties segfaults)
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-class bogus {
- const C = 'test';
- static $a = bogus::C;
-}
-
-$class = new ReflectionClass('bogus');
-
-var_dump($class->getStaticProperties());
-?>
-===DONE===
---EXPECT--
-array(1) {
- ["a"]=>
- string(4) "test"
-}
-===DONE===
+--TEST--
+Reflection Bug #30856 (ReflectionClass::getStaticProperties segfaults)
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+class bogus {
+ const C = 'test';
+ static $a = bogus::C;
+}
+
+$class = new ReflectionClass('bogus');
+
+var_dump($class->getStaticProperties());
+?>
+===DONE===
+--EXPECT--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+===DONE===
diff --git a/ext/reflection/tests/bug30961.phpt b/ext/reflection/tests/bug30961.phpt
index c765e7cc8..dab07417b 100755
--- a/ext/reflection/tests/bug30961.phpt
+++ b/ext/reflection/tests/bug30961.phpt
@@ -1,22 +1,22 @@
---TEST--
-Reflection Bug #30961 (Wrong linenumber in ReflectionClass getStartLine())
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
- class a
- {
- }
-
- class b extends a
- {
- }
-
- $ref1 = new ReflectionClass('a');
- $ref2 = new ReflectionClass('b');
- echo $ref1->getStartLine() . "\n";
- echo $ref2->getStartLine() . "\n";
-?>
---EXPECT--
-2
-6
+--TEST--
+Reflection Bug #30961 (Wrong linenumber in ReflectionClass getStartLine())
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+ class a
+ {
+ }
+
+ class b extends a
+ {
+ }
+
+ $ref1 = new ReflectionClass('a');
+ $ref2 = new ReflectionClass('b');
+ echo $ref1->getStartLine() . "\n";
+ echo $ref2->getStartLine() . "\n";
+?>
+--EXPECT--
+2
+6
diff --git a/ext/reflection/tests/bug33312.phpt b/ext/reflection/tests/bug33312.phpt
index 2413a3dc3..b39ec3c6f 100755
--- a/ext/reflection/tests/bug33312.phpt
+++ b/ext/reflection/tests/bug33312.phpt
@@ -1,22 +1,22 @@
---TEST--
-Reflection Bug #33312 (ReflectionParameter methods do not work correctly)
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-class Foo {
- public function bar(Foo $foo, $bar = 'bar') {
- }
-}
-
-$class = new ReflectionClass('Foo');
-$method = $class->getMethod('bar');
-
-foreach ($method->getParameters() as $parameter) {
- if ($parameter->isDefaultValueAvailable()) {
- print $parameter->getDefaultValue()."\n";
- }
-}
-?>
---EXPECT--
-bar
+--TEST--
+Reflection Bug #33312 (ReflectionParameter methods do not work correctly)
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+class Foo {
+ public function bar(Foo $foo, $bar = 'bar') {
+ }
+}
+
+$class = new ReflectionClass('Foo');
+$method = $class->getMethod('bar');
+
+foreach ($method->getParameters() as $parameter) {
+ if ($parameter->isDefaultValueAvailable()) {
+ print $parameter->getDefaultValue()."\n";
+ }
+}
+?>
+--EXPECT--
+bar
diff --git a/ext/reflection/tests/bug38942.phpt b/ext/reflection/tests/bug38942.phpt
index a1ba05ba0..a02f596af 100755
--- a/ext/reflection/tests/bug38942.phpt
+++ b/ext/reflection/tests/bug38942.phpt
@@ -1,36 +1,36 @@
---TEST--
-Bug #38942 (Double old-style-ctor inheritance)
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-class foo {
- public function foo() {}
-}
-
-class bar extends foo {
-}
-ReflectionClass::export("bar");
-?>
---EXPECTF--
-Class [ <user> class bar extends foo ] {
- @@ %sbug38942.php 6-7
-
- - Constants [0] {
- }
-
- - Static properties [0] {
- }
-
- - Static methods [0] {
- }
-
- - Properties [0] {
- }
-
- - Methods [1] {
- Method [ <user, inherits foo, ctor> public method foo ] {
- @@ %sbug38942.php 3 - 3
- }
- }
-}
+--TEST--
+Bug #38942 (Double old-style-ctor inheritance)
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+class foo {
+ public function foo() {}
+}
+
+class bar extends foo {
+}
+ReflectionClass::export("bar");
+?>
+--EXPECTF--
+Class [ <user> class bar extends foo ] {
+ @@ %sbug38942.php 6-7
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [1] {
+ Method [ <user, inherits foo, ctor> public method foo ] {
+ @@ %sbug38942.php 3 - 3
+ }
+ }
+}
diff --git a/ext/reflection/tests/bug45139.phpt b/ext/reflection/tests/bug45139.phpt
new file mode 100644
index 000000000..6aa84263c
--- /dev/null
+++ b/ext/reflection/tests/bug45139.phpt
@@ -0,0 +1,58 @@
+--TEST--
+Bug #45139 (ReflectionProperty returns incorrect declaring class)
+--FILE--
+<?php
+
+class A {
+ private $foo;
+}
+
+class B extends A {
+ protected $bar;
+ private $baz;
+ private $quux;
+}
+
+class C extends B {
+ public $foo;
+ private $baz;
+ protected $quux;
+}
+
+$rc = new ReflectionClass('C');
+$rp = $rc->getProperty('foo');
+var_dump($rp->getDeclaringClass()->getName()); // c
+
+$rc = new ReflectionClass('A');
+$rp = $rc->getProperty('foo');
+var_dump($rp->getDeclaringClass()->getName()); // A
+
+$rc = new ReflectionClass('B');
+$rp = $rc->getProperty('bar');
+var_dump($rp->getDeclaringClass()->getName()); // B
+
+$rc = new ReflectionClass('C');
+$rp = $rc->getProperty('bar');
+var_dump($rp->getDeclaringClass()->getName()); // B
+
+$rc = new ReflectionClass('C');
+$rp = $rc->getProperty('baz');
+var_dump($rp->getDeclaringClass()->getName()); // C
+
+$rc = new ReflectionClass('B');
+$rp = $rc->getProperty('baz');
+var_dump($rp->getDeclaringClass()->getName()); // B
+
+$rc = new ReflectionClass('C');
+$rp = $rc->getProperty('quux');
+var_dump($rp->getDeclaringClass()->getName()); // C
+
+?>
+--EXPECT--
+string(1) "C"
+string(1) "A"
+string(1) "B"
+string(1) "B"
+string(1) "C"
+string(1) "B"
+string(1) "C"
diff --git a/ext/reflection/tests/bug45765.phpt b/ext/reflection/tests/bug45765.phpt
new file mode 100644
index 000000000..b0c1be2c4
--- /dev/null
+++ b/ext/reflection/tests/bug45765.phpt
@@ -0,0 +1,82 @@
+--TEST--
+Fixed bug #45765 (ReflectionObject with default parameters of self::xxx cause an error)
+--FILE--
+<?php
+
+class foo2 {
+ const BAR = 'foobar';
+}
+
+class foo extends foo2 {
+ const BAR = "foo's bar";
+
+ function test($a = self::BAR) {
+ }
+
+ function test2($a = parent::BAR) {
+ }
+
+ function test3($a = foo::BAR) {
+ }
+
+ function test4($a = foo2::BAR) {
+ }
+}
+
+ReflectionObject::export(new foo);
+
+?>
+--EXPECTF--
+Object of class [ <user> class foo extends foo2 ] {
+ @@ %s 7-21
+
+ - Constants [1] {
+ Constant [ string BAR ] { foo's bar }
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Dynamic properties [0] {
+ }
+
+ - Methods [4] {
+ Method [ <user> public method test ] {
+ @@ %s 10 - 11
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> $a = 'foo's bar' ]
+ }
+ }
+
+ Method [ <user> public method test2 ] {
+ @@ %s 13 - 14
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> $a = 'foobar' ]
+ }
+ }
+
+ Method [ <user> public method test3 ] {
+ @@ %s 16 - 17
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> $a = 'foo's bar' ]
+ }
+ }
+
+ Method [ <user> public method test4 ] {
+ @@ %s 19 - 20
+
+ - Parameters [1] {
+ Parameter #0 [ <optional> $a = 'foobar' ]
+ }
+ }
+ }
+}
diff --git a/ext/reflection/tests/bug46064.phpt b/ext/reflection/tests/bug46064.phpt
new file mode 100644
index 000000000..58b732f31
--- /dev/null
+++ b/ext/reflection/tests/bug46064.phpt
@@ -0,0 +1,74 @@
+--TEST--
+Bug #46064 (Exception when creating ReflectionProperty object on dynamicly created property)
+--FILE--
+<?php
+
+class x {
+ public $zzz = 2;
+}
+
+$o = new x;
+$o->z = 1000;
+$o->zzz = 3;
+
+var_dump($h = new reflectionproperty($o, 'z'));
+var_dump($h->isDefault());
+var_dump($h->isPublic());
+var_dump($h->isStatic());
+var_dump($h->getName());
+var_dump(Reflection::getModifierNames($h->getModifiers()));
+var_dump($h->getValue($o));
+
+print "---------------------------\n";
+try {
+ var_dump(new reflectionproperty($o, 'zz'));
+} catch (Exception $e) {
+ var_dump($e->getMessage());
+}
+
+var_dump(new reflectionproperty($o, 'zzz'));
+
+class test {
+ protected $a = 1;
+}
+
+class bar extends test {
+ public function __construct() {
+ $this->foobar = 2;
+ $this->a = 200;
+
+ $p = new reflectionproperty($this, 'foobar');
+ var_dump($p->getValue($this), $p->isDefault(), $p->isPublic());
+ }
+}
+
+new bar;
+
+?>
+--EXPECTF--
+object(ReflectionProperty)#2 (2) {
+ ["name"]=>
+ string(1) "z"
+ ["class"]=>
+ string(1) "x"
+}
+bool(false)
+bool(true)
+bool(false)
+string(1) "z"
+array(1) {
+ [0]=>
+ string(6) "public"
+}
+int(1000)
+---------------------------
+string(30) "Property x::$zz does not exist"
+object(ReflectionProperty)#3 (2) {
+ ["name"]=>
+ string(3) "zzz"
+ ["class"]=>
+ string(1) "x"
+}
+int(2)
+bool(false)
+bool(true)
diff --git a/ext/reflection/tests/bug46064_2.phpt b/ext/reflection/tests/bug46064_2.phpt
new file mode 100644
index 000000000..832d13c41
--- /dev/null
+++ b/ext/reflection/tests/bug46064_2.phpt
@@ -0,0 +1,72 @@
+--TEST--
+Bug #46064.2 (Exception when creating ReflectionProperty object on dynamicly created property)
+--FILE--
+<?php
+
+class foo {
+}
+
+$x = new foo;
+$x->test = 2000;
+
+
+$p = new ReflectionObject($x);
+var_dump($p->getProperty('test'));
+
+
+class bar {
+ public function __construct() {
+ $this->a = 1;
+ }
+}
+
+class test extends bar {
+ private $b = 2;
+
+ public function __construct() {
+ parent::__construct();
+
+ $p = new reflectionobject($this);
+ var_dump($h = $p->getProperty('a'));
+ var_dump($h->isDefault(), $h->isProtected(), $h->isPrivate(), $h->isPublic(), $h->isStatic());
+ var_dump($p->getProperties());
+ }
+}
+
+new test;
+
+?>
+--EXPECT--
+object(ReflectionProperty)#3 (2) {
+ ["name"]=>
+ string(4) "test"
+ ["class"]=>
+ string(3) "foo"
+}
+object(ReflectionProperty)#5 (2) {
+ ["name"]=>
+ string(1) "a"
+ ["class"]=>
+ string(4) "test"
+}
+bool(false)
+bool(false)
+bool(false)
+bool(true)
+bool(false)
+array(2) {
+ [0]=>
+ &object(ReflectionProperty)#6 (2) {
+ ["name"]=>
+ string(1) "b"
+ ["class"]=>
+ string(4) "test"
+ }
+ [1]=>
+ &object(ReflectionProperty)#7 (2) {
+ ["name"]=>
+ string(1) "a"
+ ["class"]=>
+ string(4) "test"
+ }
+}
diff --git a/ext/reflection/tests/included4.inc b/ext/reflection/tests/included4.inc
new file mode 100644
index 000000000..88947251c
--- /dev/null
+++ b/ext/reflection/tests/included4.inc
@@ -0,0 +1,9 @@
+<?php
+echo __FILE__ . "\n";
+echo __LINE__ . "\n";
+
+function g() {
+ echo __FILE__ . "\n";
+ echo __LINE__ . "\n";
+}
+?> \ No newline at end of file
diff --git a/ext/reflection/tests/parameters_001.phpt b/ext/reflection/tests/parameters_001.phpt
index 036f11973..62cd069b6 100755
--- a/ext/reflection/tests/parameters_001.phpt
+++ b/ext/reflection/tests/parameters_001.phpt
@@ -1,40 +1,40 @@
---TEST--
-ReflectionParameter Check for parameter being optional
---SKIPIF--
-<?php extension_loaded('reflection') or die('skip'); ?>
---FILE--
-<?php
-
-class Test {
- function func($x, $y = NULL){
- }
-}
-
-
-$f = new ReflectionMethod('Test', 'func');
-var_dump($f->getNumberOfParameters());
-var_dump($f->getNumberOfRequiredParameters());
-
-$p = new ReflectionParameter(array('Test', 'func'), 'x');
-var_dump($p->isOptional());
-
-$p = new ReflectionParameter(array('Test', 'func'), 'y');
-var_dump($p->isOptional());
-
-try {
- $p = new ReflectionParameter(array('Test', 'func'), 'z');
- var_dump($p->isOptional());
-}
-catch (Exception $e) {
- var_dump($e->getMessage());
-}
-
-?>
-===DONE===
---EXPECT--
-int(2)
-int(1)
-bool(false)
-bool(true)
-string(54) "The parameter specified by its name could not be found"
-===DONE===
+--TEST--
+ReflectionParameter Check for parameter being optional
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--FILE--
+<?php
+
+class Test {
+ function func($x, $y = NULL){
+ }
+}
+
+
+$f = new ReflectionMethod('Test', 'func');
+var_dump($f->getNumberOfParameters());
+var_dump($f->getNumberOfRequiredParameters());
+
+$p = new ReflectionParameter(array('Test', 'func'), 'x');
+var_dump($p->isOptional());
+
+$p = new ReflectionParameter(array('Test', 'func'), 'y');
+var_dump($p->isOptional());
+
+try {
+ $p = new ReflectionParameter(array('Test', 'func'), 'z');
+ var_dump($p->isOptional());
+}
+catch (Exception $e) {
+ var_dump($e->getMessage());
+}
+
+?>
+===DONE===
+--EXPECT--
+int(2)
+int(1)
+bool(false)
+bool(true)
+string(54) "The parameter specified by its name could not be found"
+===DONE===
diff --git a/ext/reflection/tests/reflectionClass_FileInfo_error.phpt b/ext/reflection/tests/reflectionClass_FileInfo_error.phpt
index a74062a3e..766cdf3b7 100644
--- a/ext/reflection/tests/reflectionClass_FileInfo_error.phpt
+++ b/ext/reflection/tests/reflectionClass_FileInfo_error.phpt
@@ -1,37 +1,37 @@
---TEST--
-ReflectionClass::getFileName(), ReflectionClass::getStartLine(), ReflectionClass::getEndLine() - bad params
---FILE--
-<?php
-Class C { }
-
-$rc = new ReflectionClass("C");
-$methods = array("getFileName", "getStartLine", "getEndLine");
-
-foreach ($methods as $method) {
- var_dump($rc->$method());
- var_dump($rc->$method(null));
- var_dump($rc->$method('X', 0));
-}
-?>
---EXPECTF--
-string(%d) "%s"
-
-Warning: Wrong parameter count for ReflectionClass::getFileName() in %s on line 9
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::getFileName() in %s on line 10
-NULL
-int(2)
-
-Warning: Wrong parameter count for ReflectionClass::getStartLine() in %s on line 9
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::getStartLine() in %s on line 10
-NULL
-int(2)
-
-Warning: Wrong parameter count for ReflectionClass::getEndLine() in %s on line 9
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::getEndLine() in %s on line 10
+--TEST--
+ReflectionClass::getFileName(), ReflectionClass::getStartLine(), ReflectionClass::getEndLine() - bad params
+--FILE--
+<?php
+Class C { }
+
+$rc = new ReflectionClass("C");
+$methods = array("getFileName", "getStartLine", "getEndLine");
+
+foreach ($methods as $method) {
+ var_dump($rc->$method());
+ var_dump($rc->$method(null));
+ var_dump($rc->$method('X', 0));
+}
+?>
+--EXPECTF--
+string(%d) "%s"
+
+Warning: Wrong parameter count for ReflectionClass::getFileName() in %s on line 9
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getFileName() in %s on line 10
+NULL
+int(2)
+
+Warning: Wrong parameter count for ReflectionClass::getStartLine() in %s on line 9
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getStartLine() in %s on line 10
+NULL
+int(2)
+
+Warning: Wrong parameter count for ReflectionClass::getEndLine() in %s on line 9
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getEndLine() in %s on line 10
NULL \ No newline at end of file
diff --git a/ext/reflection/tests/reflectionClass_constructor_001.phpt b/ext/reflection/tests/reflectionClass_constructor_001.phpt
index 06b68b88f..1a70fe1f5 100644
--- a/ext/reflection/tests/reflectionClass_constructor_001.phpt
+++ b/ext/reflection/tests/reflectionClass_constructor_001.phpt
@@ -1,33 +1,33 @@
---TEST--
-ReflectionClass::__constructor()
---FILE--
-<?php
-$r1 = new ReflectionClass("stdClass");
-
-$myInstance = new stdClass;
-$r2 = new ReflectionClass($myInstance);
-
-class TrickClass {
- function __toString() {
- //Return the name of another class
- return "Exception";
- }
-}
-$myTrickClass = new TrickClass;
-$r3 = new ReflectionClass($myTrickClass);
-
-var_dump($r1, $r2, $r3);
-?>
---EXPECTF--
-object(ReflectionClass)#%d (1) {
- ["name"]=>
- string(8) "stdClass"
-}
-object(ReflectionClass)#%d (1) {
- ["name"]=>
- string(8) "stdClass"
-}
-object(ReflectionClass)#%d (1) {
- ["name"]=>
- string(10) "TrickClass"
-}
+--TEST--
+ReflectionClass::__constructor()
+--FILE--
+<?php
+$r1 = new ReflectionClass("stdClass");
+
+$myInstance = new stdClass;
+$r2 = new ReflectionClass($myInstance);
+
+class TrickClass {
+ function __toString() {
+ //Return the name of another class
+ return "Exception";
+ }
+}
+$myTrickClass = new TrickClass;
+$r3 = new ReflectionClass($myTrickClass);
+
+var_dump($r1, $r2, $r3);
+?>
+--EXPECTF--
+object(ReflectionClass)#%d (1) {
+ ["name"]=>
+ string(8) "stdClass"
+}
+object(ReflectionClass)#%d (1) {
+ ["name"]=>
+ string(8) "stdClass"
+}
+object(ReflectionClass)#%d (1) {
+ ["name"]=>
+ string(10) "TrickClass"
+}
diff --git a/ext/reflection/tests/reflectionClass_constructor_002.phpt b/ext/reflection/tests/reflectionClass_constructor_002.phpt
index 97f1b3570..3685c639d 100644
--- a/ext/reflection/tests/reflectionClass_constructor_002.phpt
+++ b/ext/reflection/tests/reflectionClass_constructor_002.phpt
@@ -1,67 +1,67 @@
---TEST--
-ReflectionClass::__constructor() - bad arguments
---FILE--
-<?php
-try {
- var_dump(new ReflectionClass());
-} catch (Exception $e) {
- echo $e->getMessage() . "\n";
-}
-
-try {
- var_dump(new ReflectionClass(null));
-} catch (Exception $e) {
- echo $e->getMessage() . "\n";
-}
-
-try {
- var_dump(new ReflectionClass(true));
-} catch (Exception $e) {
- echo $e->getMessage() . "\n";
-}
-
-try {
- var_dump(new ReflectionClass(1));
-} catch (Exception $e) {
- echo $e->getMessage() . "\n";
-}
-
-try {
- var_dump(new ReflectionClass(array(1,2,3)));
-} catch (Exception $e) {
- echo $e->getMessage() . "\n";
-}
-
-try {
- var_dump(new ReflectionClass("stdClass", 1));
-} catch (Exception $e) {
- echo $e->getMessage() . "\n";
-}
-
-try {
- var_dump(new ReflectionClass("X"));
-} catch (Exception $e) {
- echo $e->getMessage() . "\n";
-}
-
-?>
---EXPECTF--
-
-Warning: ReflectionClass::__construct() expects exactly 1 parameter, 0 given in %s on line 3
-object(ReflectionClass)#%d (1) {
- ["name"]=>
- string(0) ""
-}
-Class does not exist
-Class 1 does not exist
-Class 1 does not exist
-
-Notice: Array to string conversion in %s on line 27
-Class Array does not exist
-
-Warning: ReflectionClass::__construct() expects exactly 1 parameter, 2 given in %s on line 33
-object(ReflectionClass)#%d (1) {
- ["name"]=>
- string(0) ""
-}
+--TEST--
+ReflectionClass::__constructor() - bad arguments
+--FILE--
+<?php
+try {
+ var_dump(new ReflectionClass());
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+
+try {
+ var_dump(new ReflectionClass(null));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+
+try {
+ var_dump(new ReflectionClass(true));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+
+try {
+ var_dump(new ReflectionClass(1));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+
+try {
+ var_dump(new ReflectionClass(array(1,2,3)));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+
+try {
+ var_dump(new ReflectionClass("stdClass", 1));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+
+try {
+ var_dump(new ReflectionClass("X"));
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+
+?>
+--EXPECTF--
+
+Warning: ReflectionClass::__construct() expects exactly 1 parameter, 0 given in %s on line 3
+object(ReflectionClass)#%d (1) {
+ ["name"]=>
+ string(0) ""
+}
+Class does not exist
+Class 1 does not exist
+Class 1 does not exist
+
+Notice: Array to string conversion in %s on line 27
+Class Array does not exist
+
+Warning: ReflectionClass::__construct() expects exactly 1 parameter, 2 given in %s on line 33
+object(ReflectionClass)#%d (1) {
+ ["name"]=>
+ string(0) ""
+}
Class X does not exist \ No newline at end of file
diff --git a/ext/reflection/tests/reflectionClass_export_basic1.phpt b/ext/reflection/tests/reflectionClass_export_basic1.phpt
new file mode 100644
index 000000000..8729731f5
--- /dev/null
+++ b/ext/reflection/tests/reflectionClass_export_basic1.phpt
@@ -0,0 +1,62 @@
+--TEST--
+ReflectionClass::export() - various parameters
+--FILE--
+<?php
+Class A {
+ public function privf(Exception $a) {}
+ public function pubf(A $a,
+ $b,
+ C $c = null,
+ $d = K,
+ $e = "15 chars long -",
+ $f = null,
+ $g = false,
+ array $h = null) {}
+}
+
+Class C extends A { }
+
+define('K', "16 chars long --");
+ReflectionClass::export("C");
+?>
+--EXPECTF--
+Class [ <user> class C extends A ] {
+ @@ %s 14-14
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [2] {
+ Method [ <user, inherits A> public method privf ] {
+ @@ %s 3 - 3
+
+ - Parameters [1] {
+ Parameter #0 [ <required> Exception $a ]
+ }
+ }
+
+ Method [ <user, inherits A> public method pubf ] {
+ @@ %s 4 - 11
+
+ - Parameters [8] {
+ Parameter #0 [ <required> A $a ]
+ Parameter #1 [ <required> $b ]
+ Parameter #2 [ <optional> C or NULL $c = NULL ]
+ Parameter #3 [ <optional> $d = '16 chars long -...' ]
+ Parameter #4 [ <optional> $e = '15 chars long -' ]
+ Parameter #5 [ <optional> $f = NULL ]
+ Parameter #6 [ <optional> $g = false ]
+ Parameter #7 [ <optional> array or NULL $h = NULL ]
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/ext/reflection/tests/reflectionClass_export_basic2.phpt b/ext/reflection/tests/reflectionClass_export_basic2.phpt
new file mode 100644
index 000000000..b6644883e
--- /dev/null
+++ b/ext/reflection/tests/reflectionClass_export_basic2.phpt
@@ -0,0 +1,54 @@
+--TEST--
+ReflectionClass::export() - ensure inherited private props are hidden.
+--FILE--
+<?php
+Class c {
+ private $a;
+ static private $b;
+}
+
+class d extends c {}
+
+ReflectionClass::export("c");
+ReflectionClass::export("d");
+?>
+--EXPECTF--
+Class [ <user> class c ] {
+ @@ %s 2-5
+
+ - Constants [0] {
+ }
+
+ - Static properties [1] {
+ Property [ private static $b ]
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [1] {
+ Property [ <default> private $a ]
+ }
+
+ - Methods [0] {
+ }
+}
+
+Class [ <user> class d extends c ] {
+ @@ %s 7-7
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [0] {
+ }
+} \ No newline at end of file
diff --git a/ext/reflection/tests/reflectionClass_getConstant_basic.phpt b/ext/reflection/tests/reflectionClass_getConstant_basic.phpt
index d0909ec4f..6e051113d 100644
--- a/ext/reflection/tests/reflectionClass_getConstant_basic.phpt
+++ b/ext/reflection/tests/reflectionClass_getConstant_basic.phpt
@@ -1,41 +1,41 @@
---TEST--
-ReflectionClass::getConstants()
---FILE--
-<?php
-class C {
- const a = 'hello from C';
-}
-class D extends C {
-}
-class E extends D {
-}
-class F extends E {
- const a = 'hello from F';
-}
-class X {
-}
-
-$classes = array("C", "D", "E", "F", "X");
-foreach($classes as $class) {
- echo "Reflecting on class $class: \n";
- $rc = new ReflectionClass($class);
- var_dump($rc->getConstant('a'));
- var_dump($rc->getConstant('doesntexist'));
-}
-?>
---EXPECTF--
-Reflecting on class C:
-string(12) "hello from C"
-bool(false)
-Reflecting on class D:
-string(12) "hello from C"
-bool(false)
-Reflecting on class E:
-string(12) "hello from C"
-bool(false)
-Reflecting on class F:
-string(12) "hello from F"
-bool(false)
-Reflecting on class X:
-bool(false)
-bool(false)
+--TEST--
+ReflectionClass::getConstants()
+--FILE--
+<?php
+class C {
+ const a = 'hello from C';
+}
+class D extends C {
+}
+class E extends D {
+}
+class F extends E {
+ const a = 'hello from F';
+}
+class X {
+}
+
+$classes = array("C", "D", "E", "F", "X");
+foreach($classes as $class) {
+ echo "Reflecting on class $class: \n";
+ $rc = new ReflectionClass($class);
+ var_dump($rc->getConstant('a'));
+ var_dump($rc->getConstant('doesntexist'));
+}
+?>
+--EXPECTF--
+Reflecting on class C:
+string(12) "hello from C"
+bool(false)
+Reflecting on class D:
+string(12) "hello from C"
+bool(false)
+Reflecting on class E:
+string(12) "hello from C"
+bool(false)
+Reflecting on class F:
+string(12) "hello from F"
+bool(false)
+Reflecting on class X:
+bool(false)
+bool(false)
diff --git a/ext/reflection/tests/reflectionClass_getConstant_error.phpt b/ext/reflection/tests/reflectionClass_getConstant_error.phpt
index a1e300519..907d6d8b7 100644
--- a/ext/reflection/tests/reflectionClass_getConstant_error.phpt
+++ b/ext/reflection/tests/reflectionClass_getConstant_error.phpt
@@ -1,37 +1,37 @@
---TEST--
-ReflectionClass::getConstant() - bad params
---FILE--
-<?php
-class C {
- const myConst = 1;
-}
-
-$rc = new ReflectionClass("C");
-echo "Check invalid params:\n";
-var_dump($rc->getConstant());
-var_dump($rc->getConstant("myConst", "myConst"));
-var_dump($rc->getConstant(null));
-var_dump($rc->getConstant(1));
-var_dump($rc->getConstant(1.5));
-var_dump($rc->getConstant(true));
-var_dump($rc->getConstant(array(1,2,3)));
-var_dump($rc->getConstant(new C));
-?>
---EXPECTF--
-Check invalid params:
-
-Warning: ReflectionClass::getConstant() expects exactly 1 parameter, 0 given in %s on line 8
-NULL
-
-Warning: ReflectionClass::getConstant() expects exactly 1 parameter, 2 given in %s on line 9
-NULL
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-
-Warning: ReflectionClass::getConstant() expects parameter 1 to be string, array given in %s on line 14
-NULL
-
-Warning: ReflectionClass::getConstant() expects parameter 1 to be string, object given in %s on line 15
+--TEST--
+ReflectionClass::getConstant() - bad params
+--FILE--
+<?php
+class C {
+ const myConst = 1;
+}
+
+$rc = new ReflectionClass("C");
+echo "Check invalid params:\n";
+var_dump($rc->getConstant());
+var_dump($rc->getConstant("myConst", "myConst"));
+var_dump($rc->getConstant(null));
+var_dump($rc->getConstant(1));
+var_dump($rc->getConstant(1.5));
+var_dump($rc->getConstant(true));
+var_dump($rc->getConstant(array(1,2,3)));
+var_dump($rc->getConstant(new C));
+?>
+--EXPECTF--
+Check invalid params:
+
+Warning: ReflectionClass::getConstant() expects exactly 1 parameter, 0 given in %s on line 8
+NULL
+
+Warning: ReflectionClass::getConstant() expects exactly 1 parameter, 2 given in %s on line 9
+NULL
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+
+Warning: ReflectionClass::getConstant() expects parameter 1 to be string, array given in %s on line 14
+NULL
+
+Warning: ReflectionClass::getConstant() expects parameter 1 to be string, object given in %s on line 15
NULL \ No newline at end of file
diff --git a/ext/reflection/tests/reflectionClass_getConstructor_basic.phpt b/ext/reflection/tests/reflectionClass_getConstructor_basic.phpt
index 59c87ad66..f3881c56d 100644
--- a/ext/reflection/tests/reflectionClass_getConstructor_basic.phpt
+++ b/ext/reflection/tests/reflectionClass_getConstructor_basic.phpt
@@ -1,82 +1,82 @@
---TEST--
-ReflectionClass::getConstructor()
---FILE--
-<?php
-class NewCtor {
- function __construct() {}
-}
-
-class ExtendsNewCtor extends NewCtor {
-}
-
-class OldCtor {
- function OldCtor() {}
-}
-
-class ExtendsOldCtor extends OldCtor {
-}
-
-
-class X {
- function Y() {}
-}
-
-class Y extends X {
-}
-
-class OldAndNewCtor {
- function OldAndNewCtor() {}
- function __construct() {}
-}
-
-class NewAndOldCtor {
- function __construct() {}
- function NewAndOldCtor() {}
-}
-class B {
- function B() {}
-}
-
-class C extends B {
- function C() {}
-}
-
-class D1 extends C {
- function __construct() {}
-}
-
-class D2 extends C {
-}
-
-$classes = array('NewCtor', 'ExtendsNewCtor', 'OldCtor', 'ExtendsOldCtor',
- 'OldAndNewCtor', 'NewAndOldCtor', 'B', 'C', 'D1', 'D2', 'X', 'Y');
-
-foreach ($classes as $class) {
- $rc = new ReflectionClass($class);
- $rm = $rc->getConstructor();
- if ($rm != null) {
- echo "Constructor of $class: " . $rm->getName() . "\n";
- } else {
- echo "No constructor for $class\n";
- }
-
-}
-
-?>
---EXPECTF--
-
-Strict Standards: Redefining already defined constructor for class OldAndNewCtor in %s on line 26
-
-Strict Standards: %s for class NewAndOldCtor in %s on line 31
-Constructor of NewCtor: __construct
-Constructor of ExtendsNewCtor: __construct
-Constructor of OldCtor: OldCtor
-Constructor of ExtendsOldCtor: OldCtor
-Constructor of OldAndNewCtor: __construct
-Constructor of NewAndOldCtor: __construct
-Constructor of B: B
-Constructor of C: C
-Constructor of D1: __construct
-Constructor of D2: C
-No constructor for X
+--TEST--
+ReflectionClass::getConstructor()
+--FILE--
+<?php
+class NewCtor {
+ function __construct() {}
+}
+
+class ExtendsNewCtor extends NewCtor {
+}
+
+class OldCtor {
+ function OldCtor() {}
+}
+
+class ExtendsOldCtor extends OldCtor {
+}
+
+
+class X {
+ function Y() {}
+}
+
+class Y extends X {
+}
+
+class OldAndNewCtor {
+ function OldAndNewCtor() {}
+ function __construct() {}
+}
+
+class NewAndOldCtor {
+ function __construct() {}
+ function NewAndOldCtor() {}
+}
+class B {
+ function B() {}
+}
+
+class C extends B {
+ function C() {}
+}
+
+class D1 extends C {
+ function __construct() {}
+}
+
+class D2 extends C {
+}
+
+$classes = array('NewCtor', 'ExtendsNewCtor', 'OldCtor', 'ExtendsOldCtor',
+ 'OldAndNewCtor', 'NewAndOldCtor', 'B', 'C', 'D1', 'D2', 'X', 'Y');
+
+foreach ($classes as $class) {
+ $rc = new ReflectionClass($class);
+ $rm = $rc->getConstructor();
+ if ($rm != null) {
+ echo "Constructor of $class: " . $rm->getName() . "\n";
+ } else {
+ echo "No constructor for $class\n";
+ }
+
+}
+
+?>
+--EXPECTF--
+
+Strict Standards: Redefining already defined constructor for class OldAndNewCtor in %s on line 26
+
+Strict Standards: %s for class NewAndOldCtor in %s on line 31
+Constructor of NewCtor: __construct
+Constructor of ExtendsNewCtor: __construct
+Constructor of OldCtor: OldCtor
+Constructor of ExtendsOldCtor: OldCtor
+Constructor of OldAndNewCtor: __construct
+Constructor of NewAndOldCtor: __construct
+Constructor of B: B
+Constructor of C: C
+Constructor of D1: __construct
+Constructor of D2: C
+No constructor for X
No constructor for Y \ No newline at end of file
diff --git a/ext/reflection/tests/reflectionClass_getConstructor_error.phpt b/ext/reflection/tests/reflectionClass_getConstructor_error.phpt
index 53d19b5ac..8892b1d6b 100644
--- a/ext/reflection/tests/reflectionClass_getConstructor_error.phpt
+++ b/ext/reflection/tests/reflectionClass_getConstructor_error.phpt
@@ -1,24 +1,24 @@
---TEST--
-ReflectionClass::getConstructor() - bad params
---FILE--
-<?php
-class C {}
-$rc = new ReflectionClass('C');
-var_dump($rc->getConstructor(null));
-var_dump($rc->getConstructor('X'));
-var_dump($rc->getConstructor(true));
-var_dump($rc->getConstructor(array(1,2,3)));
-?>
---EXPECTF--
-
-Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 4
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 5
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 6
-NULL
-
-Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 7
-NULL
+--TEST--
+ReflectionClass::getConstructor() - bad params
+--FILE--
+<?php
+class C {}
+$rc = new ReflectionClass('C');
+var_dump($rc->getConstructor(null));
+var_dump($rc->getConstructor('X'));
+var_dump($rc->getConstructor(true));
+var_dump($rc->getConstructor(array(1,2,3)));
+?>
+--EXPECTF--
+
+Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 4
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 5
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 6
+NULL
+
+Warning: Wrong parameter count for ReflectionClass::getConstructor() in %s on line 7
+NULL
diff --git a/ext/reflection/tests/reflectionClass_getExtensionName_basic.phpt b/ext/reflection/tests/reflectionClass_getExtensionName_basic.phpt
new file mode 100644
index 000000000..7813cca31
--- /dev/null
+++ b/ext/reflection/tests/reflectionClass_getExtensionName_basic.phpt
@@ -0,0 +1,14 @@
+--TEST--
+ReflectionClass::getExtensionName() method - basic test for getExtensionName() method
+--SKIPIF--
+<?php extension_loaded('reflection') && extension_loaded('dom') or die('skip - reflection or dom extension not loaded'); ?>
+--CREDITS--
+Rein Velt <rein@velt.org>
+#testFest Roosendaal 2008-05-10
+--FILE--
+<?php
+ $rc=new reflectionClass('domDocument');
+ var_dump( $rc->getExtensionName()) ;
+?>
+--EXPECT--
+string(3) "dom"
diff --git a/ext/reflection/tests/reflectionClass_getExtensionName_variation.phpt b/ext/reflection/tests/reflectionClass_getExtensionName_variation.phpt
new file mode 100644
index 000000000..35372c4f8
--- /dev/null
+++ b/ext/reflection/tests/reflectionClass_getExtensionName_variation.phpt
@@ -0,0 +1,20 @@
+--TEST--
+ReflectionClass::getExtensionName() method - variation test for getExtensionName()
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip - reflection extension not loaded'); ?>
+--CREDITS--
+Rein Velt <rein@velt.org>
+#testFest Roosendaal 2008-05-10
+--FILE--
+<?php
+
+ class myClass
+ {
+ public $varX;
+ public $varY;
+ }
+ $rc=new reflectionClass('myClass');
+ var_dump( $rc->getExtensionName()) ;
+?>
+--EXPECT--
+bool(false) \ No newline at end of file
diff --git a/ext/reflection/tests/reflectionClass_getExtension_basic.phpt b/ext/reflection/tests/reflectionClass_getExtension_basic.phpt
new file mode 100644
index 000000000..efc1ed8ee
--- /dev/null
+++ b/ext/reflection/tests/reflectionClass_getExtension_basic.phpt
@@ -0,0 +1,17 @@
+--TEST--
+ReflectionClass::getExtension() method - basic test for getExtension() method
+--SKIPIF--
+<?php extension_loaded('reflection') && extension_loaded('dom') or die('skip - reflection or dom extension not loaded'); ?>
+--CREDITS--
+Rein Velt <rein@velt.org>
+#testFest Roosendaal 2008-05-10
+--FILE--
+<?php
+ $rc=new reflectionClass('domDocument');
+ var_dump($rc->getExtension()) ;
+?>
+--EXPECTF--
+object(ReflectionExtension)#%d (1) {
+ ["name"]=>
+ string(3) "dom"
+} \ No newline at end of file
diff --git a/ext/reflection/tests/reflectionClass_getExtension_variation.phpt b/ext/reflection/tests/reflectionClass_getExtension_variation.phpt
new file mode 100644
index 000000000..f2272777a
--- /dev/null
+++ b/ext/reflection/tests/reflectionClass_getExtension_variation.phpt
@@ -0,0 +1,20 @@
+--TEST--
+ReflectionClass::getExtension() method - variation test for getExtension()
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip - reflection extension not loaded'); ?>
+--CREDITS--
+Rein Velt <rein@velt.org>
+#testFest Roosendaal 2008-05-10
+--FILE--
+<?php
+
+ class myClass
+ {
+ public $varX;
+ public $varY;
+ }
+ $rc=new reflectionClass('myClass');
+ var_dump( $rc->getExtension()) ;
+?>
+--EXPECT--
+NULL \ No newline at end of file
diff --git a/ext/reflection/tests/reflectionClass_getInterfaceNames_basic.phpt b/ext/reflection/tests/reflectionClass_getInterfaceNames_basic.phpt
new file mode 100644
index 000000000..abbaa35f5
--- /dev/null
+++ b/ext/reflection/tests/reflectionClass_getInterfaceNames_basic.phpt
@@ -0,0 +1,25 @@
+--TEST--
+ReflectionClass::getInterfaceNames()
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip - reflection extension not loaded'); ?>
+--CREDITS--
+Michelangelo van Dam <dragonbe@gmail.com>
+#testfest roosendaal on 2008-05-10
+--FILE--
+<?php
+interface Foo { }
+
+interface Bar { }
+
+class Baz implements Foo, Bar { }
+
+$rc1 = new ReflectionClass("Baz");
+var_dump($rc1->getInterfaceNames());
+?>
+--EXPECT--
+array(2) {
+ [0]=>
+ string(3) "Foo"
+ [1]=>
+ string(3) "Bar"
+}
diff --git a/ext/reflection/tests/reflectionClass_getModifiers_basic.phpt b/ext/reflection/tests/reflectionClass_getModifiers_basic.phpt
new file mode 100644
index 000000000..33a2539b9
--- /dev/null
+++ b/ext/reflection/tests/reflectionClass_getModifiers_basic.phpt
@@ -0,0 +1,39 @@
+--TEST--
+ReflectionClass::getModifiers()
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--CREDITS--
+Felix De Vliegher <felix.devliegher@gmail.com>
+--FILE--
+<?php
+
+class a {}
+abstract class b {}
+final class c {}
+interface d {}
+class e implements d {}
+interface f extends d {}
+class g extends b {}
+
+function dump_modifiers($class) {
+ $obj = new ReflectionClass($class);
+ var_dump($obj->getModifiers());
+}
+
+dump_modifiers('a');
+dump_modifiers('b');
+dump_modifiers('c');
+dump_modifiers('d');
+dump_modifiers('e');
+dump_modifiers('f');
+dump_modifiers('g');
+
+?>
+--EXPECT--
+int(0)
+int(32)
+int(64)
+int(128)
+int(0)
+int(128)
+int(0) \ No newline at end of file
diff --git a/ext/reflection/tests/reflectionClass_getParentClass.phpt b/ext/reflection/tests/reflectionClass_getParentClass.phpt
new file mode 100644
index 000000000..46884ca2b
--- /dev/null
+++ b/ext/reflection/tests/reflectionClass_getParentClass.phpt
@@ -0,0 +1,21 @@
+--TEST--
+ReflectionClass::getParentClass()
+--CREDITS--
+Michelangelo van Dam <dragonbe@gmail.com>
+#testfest roosendaal on 2008-05-10
+--FILE--
+<?php
+
+class Foo {}
+
+class Bar extends Foo {}
+
+$rc1 = new ReflectionClass("Bar");
+var_dump($rc1->getParentClass());
+?>
+
+--EXPECTF--
+object(ReflectionClass)#%d (1) {
+ ["name"]=>
+ string(3) "Foo"
+}
diff --git a/ext/reflection/tests/reflectionClass_hasConstant_basic.phpt b/ext/reflection/tests/reflectionClass_hasConstant_basic.phpt
new file mode 100644
index 000000000..49570150c
--- /dev/null
+++ b/ext/reflection/tests/reflectionClass_hasConstant_basic.phpt
@@ -0,0 +1,23 @@
+--TEST--
+ReflectionClass::hasConstant()
+--CREDIT--
+Marc Veldman <marc@ibuildings.nl>
+#testfest roosendaal on 2008-05-10
+--FILE--
+<?php
+//New instance of class C - defined below
+$rc = new ReflectionClass("C");
+
+//Check if C has constant foo
+var_dump($rc->hasConstant('foo'));
+
+//C should not have constant bar
+var_dump($rc->hasConstant('bar'));
+
+Class C {
+ const foo=1;
+}
+?>
+--EXPECTF--
+bool(true)
+bool(false)
diff --git a/ext/reflection/tests/reflectionClass_hasMethod_basic.phpt b/ext/reflection/tests/reflectionClass_hasMethod_basic.phpt
new file mode 100644
index 000000000..3ef5ac920
--- /dev/null
+++ b/ext/reflection/tests/reflectionClass_hasMethod_basic.phpt
@@ -0,0 +1,57 @@
+--TEST--
+ReflectionClass::hasMethod()
+--CREDIT--
+Marc Veldman <marc@ibuildings.nl>
+#testfest roosendaal on 2008-05-10
+--FILE--
+<?php
+//New instance of class C - defined below
+$rc = new ReflectionClass("C");
+
+//Check if C has public method publicFoo
+var_dump($rc->hasMethod('publicFoo'));
+
+//Check if C has protected method protectedFoo
+var_dump($rc->hasMethod('protectedFoo'));
+
+//Check if C has private method privateFoo
+var_dump($rc->hasMethod('privateFoo'));
+
+//Check if C has static method staticFoo
+var_dump($rc->hasMethod('staticFoo'));
+
+//C should not have method bar
+var_dump($rc->hasMethod('bar'));
+
+//Method names are case insensitive
+var_dump($rc->hasMethod('PUBLICfOO'));
+
+Class C {
+ public function publicFoo()
+ {
+ return true;
+ }
+
+ protected function protectedFoo()
+ {
+ return true;
+ }
+
+ private function privateFoo()
+ {
+ return true;
+ }
+
+ static function staticFoo()
+ {
+ return true;
+ }
+}
+?>
+--EXPECTF--
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(false)
+bool(true)
diff --git a/ext/reflection/tests/reflectionClass_hasProperty_basic.phpt b/ext/reflection/tests/reflectionClass_hasProperty_basic.phpt
new file mode 100644
index 000000000..b3264e01e
--- /dev/null
+++ b/ext/reflection/tests/reflectionClass_hasProperty_basic.phpt
@@ -0,0 +1,38 @@
+--TEST--
+ReflectionClass::hasProperty()
+--CREDIT--
+Marc Veldman <marc@ibuildings.nl>
+#testfest roosendaal on 2008-05-10
+--FILE--
+<?php
+//New instance of class C - defined below
+$rc = new ReflectionClass("C");
+
+//Check if C has public property publicFoo
+var_dump($rc->hasProperty('publicFoo'));
+
+//Check if C has protected property protectedFoo
+var_dump($rc->hasProperty('protectedFoo'));
+
+//Check if C has private property privateFoo
+var_dump($rc->hasProperty('privateFoo'));
+
+//Check if C has static property staticFoo
+var_dump($rc->hasProperty('staticFoo'));
+
+//C should not have property bar
+var_dump($rc->hasProperty('bar'));
+
+Class C {
+ public $publicFoo;
+ protected $protectedFoo;
+ private $privateFoo;
+ public static $staticFoo;
+}
+?>
+--EXPECTF--
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(false)
diff --git a/ext/reflection/tests/reflectionClass_isAbstract_basic.phpt b/ext/reflection/tests/reflectionClass_isAbstract_basic.phpt
new file mode 100644
index 000000000..7a3d577ef
--- /dev/null
+++ b/ext/reflection/tests/reflectionClass_isAbstract_basic.phpt
@@ -0,0 +1,23 @@
+--TEST--
+ReflectionClass::isAbstract() method
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip - reflection extension not loaded'); ?>
+--CREDITS--
+Felix De Vliegher <felix.devliegher@gmail.com>
+#testfest roosendaal on 2008-05-10
+--FILE--
+<?php
+
+class TestClass {}
+abstract class TestAbstractClass {}
+
+$testClass = new ReflectionClass('TestClass');
+$abstractClass = new ReflectionClass('TestAbstractClass');
+
+var_dump($testClass->isAbstract());
+var_dump($abstractClass->isAbstract());
+
+?>
+--EXPECT--
+bool(false)
+bool(true)
diff --git a/ext/reflection/tests/reflectionClass_isFinal_basic.phpt b/ext/reflection/tests/reflectionClass_isFinal_basic.phpt
new file mode 100644
index 000000000..efa131724
--- /dev/null
+++ b/ext/reflection/tests/reflectionClass_isFinal_basic.phpt
@@ -0,0 +1,23 @@
+--TEST--
+ReflectionClass::isFinal() method
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip - reflection extension not loaded'); ?>
+--CREDITS--
+Felix De Vliegher <felix.devliegher@gmail.com>
+#testfest roosendaal on 2008-05-10
+--FILE--
+<?php
+
+class TestClass {}
+final class TestFinalClass {}
+
+$normalClass = new ReflectionClass('TestClass');
+$finalClass = new ReflectionClass('TestFinalClass');
+
+var_dump($normalClass->isFinal());
+var_dump($finalClass->isFinal());
+
+?>
+--EXPECT--
+bool(false)
+bool(true)
diff --git a/ext/reflection/tests/reflectionClass_isInterface_basic.phpt b/ext/reflection/tests/reflectionClass_isInterface_basic.phpt
new file mode 100644
index 000000000..2870725e8
--- /dev/null
+++ b/ext/reflection/tests/reflectionClass_isInterface_basic.phpt
@@ -0,0 +1,27 @@
+--TEST--
+ReflectionClass::isInterface() method
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--CREDITS--
+Felix De Vliegher <felix.devliegher@gmail.com>
+#testfest roosendaal on 2008-05-10
+--FILE--
+<?php
+
+interface TestInterface {}
+class TestClass {}
+interface DerivedInterface extends TestInterface {}
+
+$reflectionClass = new ReflectionClass('TestInterface');
+$reflectionClass2 = new ReflectionClass('TestClass');
+$reflectionClass3 = new ReflectionClass('DerivedInterface');
+
+var_dump($reflectionClass->isInterface());
+var_dump($reflectionClass2->isInterface());
+var_dump($reflectionClass3->isInterface());
+
+?>
+--EXPECT--
+bool(true)
+bool(false)
+bool(true)
diff --git a/ext/reflection/tests/reflectionClass_isIterateable_basic.phpt b/ext/reflection/tests/reflectionClass_isIterateable_basic.phpt
new file mode 100644
index 000000000..3e1228af2
--- /dev/null
+++ b/ext/reflection/tests/reflectionClass_isIterateable_basic.phpt
@@ -0,0 +1,36 @@
+--TEST--
+ReflectionClass::isIterateable() basic
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--CREDITS--
+Felix De Vliegher <felix.devliegher@gmail.com>, Marc Veldman <marc@ibuildings.nl>
+--FILE--
+<?php
+
+class IteratorClass implements Iterator {
+ public function __construct() { }
+ public function key() {}
+ public function current() {}
+ function next() {}
+ function valid() {}
+ function rewind() {}
+}
+class DerivedClass extends IteratorClass {}
+class NonIterator {}
+
+function dump_iterateable($class) {
+ $reflection = new ReflectionClass($class);
+ var_dump($reflection->isIterateable());
+}
+
+$classes = array("ArrayObject", "IteratorClass", "DerivedClass", "NonIterator");
+foreach ($classes as $class) {
+ echo "Is $class iterateable? ";
+ dump_iterateable($class);
+}
+?>
+--EXPECT--
+Is ArrayObject iterateable? bool(true)
+Is IteratorClass iterateable? bool(true)
+Is DerivedClass iterateable? bool(true)
+Is NonIterator iterateable? bool(false)
diff --git a/ext/reflection/tests/reflectionClass_isIterateable_variation1.phpt b/ext/reflection/tests/reflectionClass_isIterateable_variation1.phpt
new file mode 100644
index 000000000..6d737bb89
--- /dev/null
+++ b/ext/reflection/tests/reflectionClass_isIterateable_variation1.phpt
@@ -0,0 +1,27 @@
+--TEST--
+ReflectionClass::isIterateable() variations
+--SKIPIF--
+<?php extension_loaded('reflection') or die('skip'); ?>
+--CREDITS--
+Felix De Vliegher <felix.devliegher@gmail.com>
+--FILE--
+<?php
+
+class BasicClass {}
+
+function dump_iterateable($obj)
+{
+ $reflection = new ReflectionClass($obj);
+ var_dump($reflection->isIterateable());
+}
+
+$basicClass = new BasicClass();
+$stdClass = new StdClass();
+
+dump_iterateable($basicClass);
+dump_iterateable($stdClass);
+
+?>
+--EXPECT--
+bool(false)
+bool(false)
diff --git a/ext/reflection/tests/reflectionObject___toString_basic1.phpt b/ext/reflection/tests/reflectionObject___toString_basic1.phpt
new file mode 100644
index 000000000..fefa220c9
--- /dev/null
+++ b/ext/reflection/tests/reflectionObject___toString_basic1.phpt
@@ -0,0 +1,36 @@
+--TEST--
+ReflectionObject::__toString() : very basic test with no dynamic properties
+--FILE--
+<?php
+
+class Foo {
+ public $bar = 1;
+}
+$f = new foo;
+
+echo new ReflectionObject($f);
+
+?>
+--EXPECTF--
+Object of class [ <user> class Foo ] {
+ @@ %s 3-5
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [1] {
+ Property [ <default> public $bar ]
+ }
+
+ - Dynamic properties [0] {
+ }
+
+ - Methods [0] {
+ }
+} \ No newline at end of file
diff --git a/ext/reflection/tests/reflectionObject___toString_basic2.phpt b/ext/reflection/tests/reflectionObject___toString_basic2.phpt
new file mode 100644
index 000000000..332386afd
--- /dev/null
+++ b/ext/reflection/tests/reflectionObject___toString_basic2.phpt
@@ -0,0 +1,39 @@
+--TEST--
+ReflectionObject::__toString() : very basic test with dynamic properties
+--FILE--
+<?php
+
+class Foo {
+ public $bar = 1;
+}
+$f = new foo;
+$f->dynProp = 'hello';
+$f->dynProp2 = 'hello again';
+echo new ReflectionObject($f);
+
+?>
+--EXPECTF--
+Object of class [ <user> class Foo ] {
+ @@ %s 3-5
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [1] {
+ Property [ <default> public $bar ]
+ }
+
+ - Dynamic properties [2] {
+ Property [ <dynamic> public $dynProp ]
+ Property [ <dynamic> public $dynProp2 ]
+ }
+
+ - Methods [0] {
+ }
+} \ No newline at end of file
diff --git a/ext/reflection/tests/reflectionObject_export_basic1.phpt b/ext/reflection/tests/reflectionObject_export_basic1.phpt
new file mode 100644
index 000000000..f7dfef867
--- /dev/null
+++ b/ext/reflection/tests/reflectionObject_export_basic1.phpt
@@ -0,0 +1,36 @@
+--TEST--
+ReflectionObject::export() : very basic test with no dynamic properties
+--FILE--
+<?php
+
+class Foo {
+ public $bar = 1;
+}
+$f = new foo;
+
+ReflectionObject::export($f);
+
+?>
+--EXPECTF--
+Object of class [ <user> class Foo ] {
+ @@ %s 3-5
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [1] {
+ Property [ <default> public $bar ]
+ }
+
+ - Dynamic properties [0] {
+ }
+
+ - Methods [0] {
+ }
+} \ No newline at end of file
diff --git a/ext/reflection/tests/reflectionObject_export_basic2.phpt b/ext/reflection/tests/reflectionObject_export_basic2.phpt
new file mode 100644
index 000000000..277f06eaf
--- /dev/null
+++ b/ext/reflection/tests/reflectionObject_export_basic2.phpt
@@ -0,0 +1,39 @@
+--TEST--
+ReflectionObject::export() : very basic test with dynamic properties
+--FILE--
+<?php
+
+class Foo {
+ public $bar = 1;
+}
+$f = new foo;
+$f->dynProp = 'hello';
+$f->dynProp2 = 'hello again';
+ReflectionObject::export($f);
+
+?>
+--EXPECTF--
+Object of class [ <user> class Foo ] {
+ @@ %s 3-5
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [1] {
+ Property [ <default> public $bar ]
+ }
+
+ - Dynamic properties [2] {
+ Property [ <dynamic> public $dynProp ]
+ Property [ <dynamic> public $dynProp2 ]
+ }
+
+ - Methods [0] {
+ }
+} \ No newline at end of file
diff --git a/ext/reflection/tests/reflectionObject_export_basic3.phpt b/ext/reflection/tests/reflectionObject_export_basic3.phpt
new file mode 100644
index 000000000..7c1da34c9
--- /dev/null
+++ b/ext/reflection/tests/reflectionObject_export_basic3.phpt
@@ -0,0 +1,38 @@
+--TEST--
+ReflectionObject::export() - ensure dynamic property with same name as inherited private property is shown.
+--FILE--
+<?php
+class C {
+ private $p = 1;
+}
+
+class D extends C{
+}
+
+$Obj = new D;
+$Obj->p = 'value';
+ReflectionObject::export($Obj)
+?>
+--EXPECTF--
+Object of class [ <user> class D extends C ] {
+ @@ %s 6-7
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Dynamic properties [0] {
+ }
+
+ - Methods [0] {
+ }
+}
+
diff --git a/ext/reflection/tests/reflectionParameter_invalidMethodInConstructor.phpt b/ext/reflection/tests/reflectionParameter_invalidMethodInConstructor.phpt
new file mode 100644
index 000000000..3118c17be
--- /dev/null
+++ b/ext/reflection/tests/reflectionParameter_invalidMethodInConstructor.phpt
@@ -0,0 +1,31 @@
+--TEST--
+ReflectionParameter::__construct(): Invalid method as constructor
+--FILE--
+<?php
+
+// Invalid class name
+try {
+ new ReflectionParameter (array ('A', 'b'), 0);
+} catch (ReflectionException $e) { echo $e->getMessage ()."\n"; }
+
+// Invalid class method
+try {
+ new ReflectionParameter (array ('C', 'b'), 0);
+} catch (ReflectionException $e) { echo $e->getMessage ()."\n"; }
+
+// Invalid object method
+try {
+ new ReflectionParameter (array (new C, 'b'), 0);
+} catch (ReflectionException $e) { echo $e->getMessage ()."\n"; }
+
+echo "Done.\n";
+
+class C {
+}
+
+?>
+--EXPECTF--
+Class A does not exist
+Method C::b() does not exist
+Method C::b() does not exist
+Done.
diff --git a/ext/reflection/tests/reflectionProperty_constructor_variation1.phpt b/ext/reflection/tests/reflectionProperty_constructor_variation1.phpt
new file mode 100644
index 000000000..d61480377
--- /dev/null
+++ b/ext/reflection/tests/reflectionProperty_constructor_variation1.phpt
@@ -0,0 +1,58 @@
+--TEST--
+ReflectionProperty::__construct(): ensure inherited private props can't be accessed through ReflectionProperty.
+--FILE--
+<?php
+
+class C {
+ private $p = 1;
+
+ static function testFromC() {
+ try {
+ $rp = new ReflectionProperty("D", "p");
+ var_dump($rp);
+ } catch (Exception $e) {
+ echo $e->getMessage();
+ }
+ }
+}
+
+class D extends C{
+ static function testFromD() {
+ try {
+ $rp = new ReflectionProperty("D", "p");
+ var_dump($rp);
+ } catch (Exception $e) {
+ echo $e->getMessage();
+ }
+ }
+}
+
+echo "--> Reflect inherited private from global scope:\n";
+try {
+ $rp = new ReflectionProperty("D", "p");
+ var_dump($rp);
+} catch (Exception $e) {
+ echo $e->getMessage();
+}
+
+echo "\n\n--> Reflect inherited private from declaring scope:\n";
+C::testFromC();
+
+echo "\n\n--> Reflect inherited private from declaring scope via subclass:\n";
+D::testFromC();
+
+echo "\n\n--> Reflect inherited private from subclass:\n";
+D::testFromD();
+?>
+--EXPECTF--
+--> Reflect inherited private from global scope:
+Property D::$p does not exist
+
+--> Reflect inherited private from declaring scope:
+Property D::$p does not exist
+
+--> Reflect inherited private from declaring scope via subclass:
+Property D::$p does not exist
+
+--> Reflect inherited private from subclass:
+Property D::$p does not exist \ No newline at end of file
diff --git a/ext/session/mod_files.c b/ext/session/mod_files.c
index 290c0e286..d9034884e 100644
--- a/ext/session/mod_files.c
+++ b/ext/session/mod_files.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: mod_files.c,v 1.100.2.3.2.11 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: mod_files.c,v 1.100.2.3.2.12 2008/12/31 11:17:43 sebastian Exp $ */
#include "php.h"
diff --git a/ext/session/mod_files.h b/ext/session/mod_files.h
index 3fc0a3a01..5f3a7db76 100644
--- a/ext/session/mod_files.h
+++ b/ext/session/mod_files.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: mod_files.h,v 1.11.2.1.2.2 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: mod_files.h,v 1.11.2.1.2.3 2008/12/31 11:17:43 sebastian Exp $ */
#ifndef MOD_FILES_H
#define MOD_FILES_H
diff --git a/ext/session/mod_mm.c b/ext/session/mod_mm.c
index b3f593d7f..f6a5f2190 100644
--- a/ext/session/mod_mm.c
+++ b/ext/session/mod_mm.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: mod_mm.c,v 1.46.2.1.2.6 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: mod_mm.c,v 1.46.2.1.2.7 2008/12/31 11:17:43 sebastian Exp $ */
#include "php.h"
diff --git a/ext/session/mod_mm.h b/ext/session/mod_mm.h
index 98c44c18c..04e998b38 100644
--- a/ext/session/mod_mm.h
+++ b/ext/session/mod_mm.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: mod_mm.h,v 1.12.2.1.2.2 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: mod_mm.h,v 1.12.2.1.2.3 2008/12/31 11:17:43 sebastian Exp $ */
#ifndef MOD_MM_H
#define MOD_MM_H
diff --git a/ext/session/mod_user.c b/ext/session/mod_user.c
index d344feef7..4f8686aa9 100644
--- a/ext/session/mod_user.c
+++ b/ext/session/mod_user.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: mod_user.c,v 1.29.2.1.2.2 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: mod_user.c,v 1.29.2.1.2.3 2008/12/31 11:17:43 sebastian Exp $ */
#include "php.h"
#include "php_session.h"
diff --git a/ext/session/mod_user.h b/ext/session/mod_user.h
index c7709c787..e04d3f5fd 100644
--- a/ext/session/mod_user.h
+++ b/ext/session/mod_user.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: mod_user.h,v 1.14.2.1.2.2 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: mod_user.h,v 1.14.2.1.2.3 2008/12/31 11:17:43 sebastian Exp $ */
#ifndef MOD_USER_H
#define MOD_USER_H
diff --git a/ext/session/php_session.h b/ext/session/php_session.h
index 8ff826036..b69e98c46 100644
--- a/ext/session/php_session.h
+++ b/ext/session/php_session.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_session.h,v 1.101.2.2.2.6 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: php_session.h,v 1.101.2.2.2.7 2008/12/31 11:17:43 sebastian Exp $ */
#ifndef PHP_SESSION_H
#define PHP_SESSION_H
diff --git a/ext/session/session.c b/ext/session/session.c
index 520c820f3..9e475296d 100644
--- a/ext/session/session.c
+++ b/ext/session/session.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: session.c,v 1.417.2.8.2.42 2008/04/29 14:42:38 scottmac Exp $ */
+/* $Id: session.c,v 1.417.2.8.2.46 2008/12/31 11:17:43 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -40,7 +40,7 @@
#include "ext/standard/md5.h"
#include "ext/standard/sha1.h"
#include "ext/standard/php_var.h"
-#include "ext/standard/datetime.h"
+#include "ext/date/php_date.h"
#include "ext/standard/php_lcg.h"
#include "ext/standard/url_scanner_ex.h"
#include "ext/standard/php_rand.h" /* for RAND_MAX */
@@ -1116,7 +1116,7 @@ static void php_session_send_cookie(TSRMLS_D)
t = tv.tv_sec + PS(cookie_lifetime);
if (t > 0) {
- date_fmt = php_std_date(t TSRMLS_CC);
+ date_fmt = php_format_date("D, d-M-Y H:i:s T", sizeof("D, d-M-Y H:i:s T")-1, t, 0 TSRMLS_CC);
smart_str_appends(&ncookie, COOKIE_EXPIRES);
smart_str_appends(&ncookie, date_fmt);
efree(date_fmt);
@@ -1509,6 +1509,15 @@ PHP_FUNCTION(session_set_save_handler)
zend_alter_ini_entry("session.save_handler", sizeof("session.save_handler"), "user", sizeof("user")-1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
+ mdata = PS(mod_data);
+
+ if (mdata) {
+ for (i = 0; i < 6; i++) {
+ zval_ptr_dtor(&mdata->names[i]);
+ }
+ efree(mdata);
+ }
+
mdata = emalloc(sizeof(*mdata));
for (i = 0; i < 6; i++) {
@@ -1916,6 +1925,21 @@ PHP_RINIT_FUNCTION(session)
}
}
+ if (PS(serializer) == NULL) {
+ char *value;
+
+ value = zend_ini_string("session.serialize_handler", sizeof("session.serialize_handler"), 0);
+ if (value) {
+ PS(serializer) = _php_find_ps_serializer(value TSRMLS_CC);
+ }
+ }
+
+ if (PS(mod) == NULL || PS(serializer) == NULL) {
+ /* current status is unusable */
+ PS(session_status) = php_session_disabled;
+ return SUCCESS;
+ }
+
if (PS(auto_start)) {
php_session_start(TSRMLS_C);
}
diff --git a/ext/session/tests/session_encode_variation5.phpt b/ext/session/tests/session_encode_variation5.phpt
index fc408847b..9356489d1 100644
--- a/ext/session/tests/session_encode_variation5.phpt
+++ b/ext/session/tests/session_encode_variation5.phpt
@@ -24,6 +24,9 @@ $_SESSION["data"] = &$array;
var_dump(session_encode());
var_dump(session_destroy());
+$array["foo"] = null;
+$array["blah"] = null;
+
echo "Done";
ob_end_flush();
?>
diff --git a/ext/session/tests/session_get_cookie_params_basic.phpt b/ext/session/tests/session_get_cookie_params_basic.phpt
index 5cadc7947..e984f556e 100644
--- a/ext/session/tests/session_get_cookie_params_basic.phpt
+++ b/ext/session/tests/session_get_cookie_params_basic.phpt
@@ -2,6 +2,12 @@
Test session_get_cookie_params() function : basic functionality
--SKIPIF--
<?php include('skipif.inc'); ?>
+--INI--
+session.cookie_lifetime=0
+session.cookie_path="/"
+session.cookie_domain=""
+session.cookie_secure=0
+session.cookie_httponly=0
--FILE--
<?php
@@ -65,4 +71,3 @@ array(5) {
bool(true)
}
Done
-
diff --git a/ext/session/tests/session_get_cookie_params_variation1.phpt b/ext/session/tests/session_get_cookie_params_variation1.phpt
index 0ab4eec88..bb921a56b 100644
--- a/ext/session/tests/session_get_cookie_params_variation1.phpt
+++ b/ext/session/tests/session_get_cookie_params_variation1.phpt
@@ -2,6 +2,12 @@
Test session_get_cookie_params() function : variation
--SKIPIF--
<?php include('skipif.inc'); ?>
+--INI--
+session.cookie_lifetime=0
+session.cookie_path="/"
+session.cookie_domain=""
+session.cookie_secure=0
+session.cookie_httponly=0
--FILE--
<?php
diff --git a/ext/session/tests/session_id_error4.phpt b/ext/session/tests/session_id_error4.phpt
index cc23578ae..c07912d7e 100644
--- a/ext/session/tests/session_id_error4.phpt
+++ b/ext/session/tests/session_id_error4.phpt
@@ -2,6 +2,8 @@
Test session_id() function : error functionality
--SKIPIF--
<?php include('skipif.inc'); ?>
+--INI--
+session.hash_function=0
--FILE--
<?php
diff --git a/ext/session/tests/session_id_variation1.phpt b/ext/session/tests/session_id_variation1.phpt
index 54d980f3a..983ca2917 100644
--- a/ext/session/tests/session_id_variation1.phpt
+++ b/ext/session/tests/session_id_variation1.phpt
@@ -2,6 +2,8 @@
Test session_id() function : variation
--SKIPIF--
<?php include('skipif.inc'); ?>
+--INI--
+session.hash_function=0
--FILE--
<?php
diff --git a/ext/session/tests/session_id_variation2.phpt b/ext/session/tests/session_id_variation2.phpt
index 7b09adafc..70db283ae 100644
--- a/ext/session/tests/session_id_variation2.phpt
+++ b/ext/session/tests/session_id_variation2.phpt
@@ -2,6 +2,8 @@
Test session_id() function : variation
--SKIPIF--
<?php include('skipif.inc'); ?>
+--INI--
+session.hash_function=0
--FILE--
<?php
diff --git a/ext/session/tests/session_save_path_variation4.phpt b/ext/session/tests/session_save_path_variation4.phpt
index 453645d31..6ea725cd8 100644
--- a/ext/session/tests/session_save_path_variation4.phpt
+++ b/ext/session/tests/session_save_path_variation4.phpt
@@ -22,10 +22,10 @@ ob_start();
*/
echo "*** Testing session_save_path() : variation ***\n";
-$directory = dirname(__FILE__);
-$sessions = ($directory."/sessions");
+$initdir = getcwd();
+$sessions = ($initdir."/sessions");
-chdir($directory);
+chdir($initdir);
// Delete the existing directory
if (file_exists($sessions) === TRUE) {
@@ -34,7 +34,7 @@ if (file_exists($sessions) === TRUE) {
var_dump(mkdir($sessions));
var_dump(chdir($sessions));
-ini_set("session.save_path", $directory);
+ini_set("session.save_path", $initdir);
var_dump(session_save_path());
var_dump(session_start());
var_dump(session_save_path());
@@ -46,8 +46,8 @@ echo "Done";
ob_end_flush();
?>
--CLEAN--
-$directory = dirname(__FILE__);
-$sessions = ($directory."/sessions");
+$initdir = getcwd();
+$sessions = ($initdir."/sessions");
var_dump(rmdir($sessions));
--EXPECTF--
*** Testing session_save_path() : variation ***
diff --git a/ext/shmop/php_shmop.h b/ext/shmop/php_shmop.h
index 53b27d5c3..c1a90a473 100644
--- a/ext/shmop/php_shmop.h
+++ b/ext/shmop/php_shmop.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/shmop/shmop.c b/ext/shmop/shmop.c
index 85bd89968..a2c18a9d6 100644
--- a/ext/shmop/shmop.c
+++ b/ext/shmop/shmop.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP version 4 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
| Ilia Alshanetsky <ilia@prohost.org> |
+----------------------------------------------------------------------+
*/
-/* $Id: shmop.c,v 1.31.2.2.2.6 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: shmop.c,v 1.31.2.2.2.7 2008/12/31 11:17:43 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/simplexml/php_simplexml.h b/ext/simplexml/php_simplexml.h
index 34d371c35..a988b782a 100644
--- a/ext/simplexml/php_simplexml.h
+++ b/ext/simplexml/php_simplexml.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_simplexml.h,v 1.20.2.2.2.4 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: php_simplexml.h,v 1.20.2.2.2.5 2008/12/31 11:17:43 sebastian Exp $ */
#ifndef PHP_SIMPLEXML_H
#define PHP_SIMPLEXML_H
diff --git a/ext/simplexml/php_simplexml_exports.h b/ext/simplexml/php_simplexml_exports.h
index 9f01afb31..8743c3ecb 100755
--- a/ext/simplexml/php_simplexml_exports.h
+++ b/ext/simplexml/php_simplexml_exports.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_simplexml_exports.h,v 1.3.2.3.2.2 2007/12/31 07:20:10 sebastian Exp $ */
+/* $Id: php_simplexml_exports.h,v 1.3.2.3.2.3 2008/12/31 11:17:43 sebastian Exp $ */
#ifndef PHP_SIMPLEXML_EXPORTS_H
#define PHP_SIMPLEXML_EXPORTS_H
diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c
index 42020aa9e..489f37e55 100644
--- a/ext/simplexml/simplexml.c
+++ b/ext/simplexml/simplexml.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: simplexml.c,v 1.151.2.22.2.39 2008/03/20 16:48:45 rrichards Exp $ */
+/* $Id: simplexml.c,v 1.151.2.22.2.46 2008/12/31 11:17:43 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -695,11 +695,12 @@ static zval** sxe_property_get_adr(zval *object, zval *member TSRMLS_DC) /* {{{
convert_to_string(member);
name = Z_STRVAL_P(member);
node = sxe_get_element_by_name(sxe, node, &name, &type TSRMLS_CC);
- if (!node) {
- sxe_prop_dim_write(object, member, NULL, 1, 0, &node TSRMLS_CC);
- type = SXE_ITER_NONE;
- name = NULL;
+ if (node) {
+ return NULL;
}
+ sxe_prop_dim_write(object, member, NULL, 1, 0, &node TSRMLS_CC);
+ type = SXE_ITER_NONE;
+ name = NULL;
MAKE_STD_ZVAL(return_value);
_node_as_zval(sxe, node, return_value, type, name, sxe->iter.nsprefix, sxe->iter.isprefix TSRMLS_CC);
@@ -799,7 +800,7 @@ static int sxe_prop_dim_exists(zval *object, zval *member, int check_empty, zend
while (node) {
xmlNodePtr nnext;
nnext = node->next;
- if (!xmlStrcmp(node->name, (xmlChar *)Z_STRVAL_P(member))) {
+ if ((node->type == XML_ELEMENT_NODE) && !xmlStrcmp(node->name, (xmlChar *)Z_STRVAL_P(member))) {
break;
}
node = nnext;
@@ -1100,9 +1101,13 @@ static HashTable * sxe_properties_get(zval *object TSRMLS_DC)
SKIP_TEXT(node);
} else {
if (node->type == XML_TEXT_NODE) {
- MAKE_STD_ZVAL(value);
- ZVAL_STRING(value, sxe_xmlNodeListGetString(node->doc, node, 1), 0);
- zend_hash_next_index_insert(rv, &value, sizeof(zval *), NULL);
+ const xmlChar *cur = node->content;
+
+ if (*cur != 0) {
+ MAKE_STD_ZVAL(value);
+ ZVAL_STRING(value, sxe_xmlNodeListGetString(node->doc, node, 1), 0);
+ zend_hash_next_index_insert(rv, &value, sizeof(zval *), NULL);
+ }
goto next_iter;
}
}
@@ -1228,7 +1233,7 @@ SXE_METHOD(xpath)
if (nodeptr->type == XML_TEXT_NODE) {
_node_as_zval(sxe, nodeptr->parent, value, SXE_ITER_NONE, NULL, NULL, 0 TSRMLS_CC);
} else if (nodeptr->type == XML_ATTRIBUTE_NODE) {
- _node_as_zval(sxe, nodeptr->parent, value, SXE_ITER_ATTRLIST, (char*)nodeptr->name, NULL, 0 TSRMLS_CC);
+ _node_as_zval(sxe, nodeptr->parent, value, SXE_ITER_ATTRLIST, (char*)nodeptr->name, nodeptr->ns ? (xmlChar *)nodeptr->ns->href : NULL, 0 TSRMLS_CC);
} else {
_node_as_zval(sxe, nodeptr, value, SXE_ITER_NONE, NULL, NULL, 0 TSRMLS_CC);
}
@@ -1322,7 +1327,7 @@ SXE_METHOD(asXML)
if (node) {
if (node->parent && (XML_DOCUMENT_NODE == node->parent->type)) {
- xmlDocDumpMemory((xmlDocPtr) sxe->document->ptr, &strval, &strval_len);
+ xmlDocDumpMemoryEnc((xmlDocPtr) sxe->document->ptr, &strval, &strval_len, ((xmlDocPtr) sxe->document->ptr)->encoding);
RETVAL_STRINGL((char *)strval, strval_len, 1);
xmlFree(strval);
} else {
@@ -2445,7 +2450,7 @@ PHP_MINFO_FUNCTION(simplexml)
{
php_info_print_table_start();
php_info_print_table_header(2, "Simplexml support", "enabled");
- php_info_print_table_row(2, "Revision", "$Revision: 1.151.2.22.2.39 $");
+ php_info_print_table_row(2, "Revision", "$Revision: 1.151.2.22.2.46 $");
php_info_print_table_row(2, "Schema support",
#ifdef LIBXML_SCHEMAS_ENABLED
"enabled");
diff --git a/ext/simplexml/tests/bug45553.phpt b/ext/simplexml/tests/bug45553.phpt
new file mode 100644
index 000000000..37a46f427
--- /dev/null
+++ b/ext/simplexml/tests/bug45553.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Bug #45553 (Using XPath to return values for attributes with a namespace does not work)
+--FILE--
+<?php
+$xml =<<<XML
+<xml xmlns:a="http://a">
+ <data a:label="I am A" label="I am Nothing">test1</data>
+ <a:data a:label="I am a:A" label="I am a:Nothing">test2</a:data>
+</xml>
+XML;
+
+$x = simplexml_load_string($xml);
+$x->registerXPathNamespace("a", "http://a");
+
+$atts = $x->xpath("/xml/data/@a:label");
+echo $atts[0] . "\n";
+$atts = $x->xpath("/xml/a:data");
+echo $atts[0]->attributes() . "\n";
+$atts = $x->xpath("/xml/a:data/@a:label");
+echo $atts[0] . "\n";
+$atts = $x->xpath("/xml/a:data/@label");
+echo $atts[0] . "\n";
+$atts = $x->xpath("/xml/data/@label");
+echo $atts[0] . "\n";
+?>
+--EXPECTF--
+I am A
+I am a:Nothing
+I am a:A
+I am a:Nothing
+I am Nothing \ No newline at end of file
diff --git a/ext/simplexml/tests/bug46003.phpt b/ext/simplexml/tests/bug46003.phpt
new file mode 100644
index 000000000..a10b01872
--- /dev/null
+++ b/ext/simplexml/tests/bug46003.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Bug #46003 (isset on nonexisting nodes return unexpected results)
+--FILE--
+<?php
+$xml =<<<XML
+<r>
+ <p>Test</p>
+ <o d='h'>
+ <xx rr='info' />
+ <yy rr='data' />
+ </o>
+</r>
+XML;
+
+$x = simplexml_load_string($xml);
+
+var_dump(isset($x->p));
+var_dump(isset($x->p->o));
+var_dump(isset($x->o->yy));
+var_dump(isset($x->o->zz));
+var_dump(isset($x->o->text));
+var_dump(isset($x->o->xx));
+?>
+--EXPECTF--
+bool(true)
+bool(false)
+bool(true)
+bool(false)
+bool(false)
+bool(true) \ No newline at end of file
diff --git a/ext/simplexml/tests/bug46047.phpt b/ext/simplexml/tests/bug46047.phpt
new file mode 100644
index 000000000..37f31cdeb
--- /dev/null
+++ b/ext/simplexml/tests/bug46047.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Bug #46047 (SimpleXML converts empty nodes into object with nested array)
+--FILE--
+<?php
+$xml = new SimpleXMLElement('<foo><bar><![CDATA[]]></bar><baz/></foo>',
+ LIBXML_NOCDATA);
+print_r($xml);
+
+$xml = new SimpleXMLElement('<foo><bar></bar><baz/></foo>');
+print_r($xml);
+
+$xml = new SimpleXMLElement('<foo><bar/><baz/></foo>');
+print_r($xml);
+?>
+--EXPECTF--
+SimpleXMLElement Object
+(
+ [bar] => SimpleXMLElement Object
+ (
+ )
+
+ [baz] => SimpleXMLElement Object
+ (
+ )
+
+)
+SimpleXMLElement Object
+(
+ [bar] => SimpleXMLElement Object
+ (
+ )
+
+ [baz] => SimpleXMLElement Object
+ (
+ )
+
+)
+SimpleXMLElement Object
+(
+ [bar] => SimpleXMLElement Object
+ (
+ )
+
+ [baz] => SimpleXMLElement Object
+ (
+ )
+
+) \ No newline at end of file
diff --git a/ext/snmp/php_snmp.h b/ext/snmp/php_snmp.h
index b4a4757f0..a98af8b2e 100644
--- a/ext/snmp/php_snmp.h
+++ b/ext/snmp/php_snmp.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -20,7 +20,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_snmp.h,v 1.25.2.1.2.3 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: php_snmp.h,v 1.25.2.1.2.4 2008/12/31 11:17:43 sebastian Exp $ */
#ifndef PHP_SNMP_H
#define PHP_SNMP_H
diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c
index 7bbe8f0cb..7c4d0a1ed 100644
--- a/ext/snmp/snmp.c
+++ b/ext/snmp/snmp.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -20,7 +20,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: snmp.c,v 1.106.2.2.2.6 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: snmp.c,v 1.106.2.2.2.8 2008/12/31 11:17:43 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -417,13 +417,13 @@ static void php_snmp_internal(INTERNAL_FUNCTION_PARAMETERS, int st,
while (keepwalking) {
keepwalking = 0;
if ((st == SNMP_CMD_GET) || (st == SNMP_CMD_GETNEXT)) {
- pdu = snmp_pdu_create((st == SNMP_CMD_GET) ? SNMP_MSG_GET : SNMP_MSG_GETNEXT);
name_length = MAX_OID_LEN;
if (!snmp_parse_oid(objid, name, &name_length)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid object identifier: %s", objid);
snmp_close(ss);
RETURN_FALSE;
}
+ pdu = snmp_pdu_create((st == SNMP_CMD_GET) ? SNMP_MSG_GET : SNMP_MSG_GETNEXT);
snmp_add_null_var(pdu, name, name_length);
} else if (st == SNMP_CMD_SET) {
pdu = snmp_pdu_create(SNMP_MSG_SET);
@@ -434,6 +434,7 @@ static void php_snmp_internal(INTERNAL_FUNCTION_PARAMETERS, int st,
sprint_objid(buf, name, name_length);
#endif
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not add variable: %s %c %s", buf, type, value);
+ snmp_free_pdu(pdu);
snmp_close(ss);
RETURN_FALSE;
}
@@ -467,11 +468,13 @@ retry:
*return_value = *snmpval;
zval_copy_ctor(return_value);
zval_ptr_dtor(&snmpval);
+ snmp_free_pdu(response);
snmp_close(ss);
return;
} else if (st == SNMP_CMD_GETNEXT) {
*return_value = *snmpval;
zval_copy_ctor(return_value);
+ snmp_free_pdu(response);
snmp_close(ss);
return;
} else if (st == SNMP_CMD_WALK) {
@@ -510,23 +513,28 @@ retry:
}
if (st == SNMP_CMD_GET) {
if ((pdu = snmp_fix_pdu(response, SNMP_MSG_GET)) != NULL) {
+ snmp_free_pdu(response);
goto retry;
}
} else if (st == SNMP_CMD_SET) {
if ((pdu = snmp_fix_pdu(response, SNMP_MSG_SET)) != NULL) {
+ snmp_free_pdu(response);
goto retry;
}
} else if (st == SNMP_CMD_GETNEXT) {
if ((pdu = snmp_fix_pdu(response, SNMP_MSG_GETNEXT)) != NULL) {
+ snmp_free_pdu(response);
goto retry;
}
} else if (st >= SNMP_CMD_WALK) { /* Here we do walks. */
if ((pdu = snmp_fix_pdu(response, ((session->version == SNMP_VERSION_1)
? SNMP_MSG_GETNEXT
: SNMP_MSG_GETBULK))) != NULL) {
+ snmp_free_pdu(response);
goto retry;
}
}
+ snmp_free_pdu(response);
snmp_close(ss);
if (st == SNMP_CMD_WALK || st == SNMP_CMD_REALWALK) {
zval_dtor(return_value);
diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c
index eac079ac4..d39d1deb9 100644
--- a/ext/soap/php_encoding.c
+++ b/ext/soap/php_encoding.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
| Dmitry Stogov <dmitry@zend.com> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_encoding.c,v 1.103.2.21.2.39 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: php_encoding.c,v 1.103.2.21.2.46 2009/01/26 11:09:13 dmitry Exp $ */
#include <time.h>
@@ -360,6 +360,7 @@ static zend_bool soap_check_xml_ref(zval **data, xmlNodePtr node TSRMLS_DC)
static xmlNodePtr master_to_xml_int(encodePtr encode, zval *data, int style, xmlNodePtr parent, int check_class_map)
{
xmlNodePtr node = NULL;
+ int add_type = 0;
TSRMLS_FETCH();
/* Special handling of class SoapVar */
@@ -446,20 +447,21 @@ static xmlNodePtr master_to_xml_int(encodePtr encode, zval *data, int style, xml
zend_binary_strncasecmp(ce->name, ce->name_length, Z_STRVAL_PP(tmp), ce->name_length, ce->name_length) == 0 &&
zend_hash_get_current_key_ex(SOAP_GLOBAL(class_map), &type_name, &type_len, &idx, 0, &pos) == HASH_KEY_IS_STRING) {
- /* TODO: namespace isn't stored */
- encodePtr enc = NULL;
- if (SOAP_GLOBAL(sdl)) {
- enc = get_encoder(SOAP_GLOBAL(sdl), SOAP_GLOBAL(sdl)->target_ns, type_name);
- }
- if (enc) {
- encode = enc;
- } else if (SOAP_GLOBAL(sdl)) {
- enc = find_encoder_by_type_name(SOAP_GLOBAL(sdl), type_name);
- if (enc) {
- encode = enc;
- }
- }
- break;
+ /* TODO: namespace isn't stored */
+ encodePtr enc = NULL;
+ if (SOAP_GLOBAL(sdl)) {
+ enc = get_encoder(SOAP_GLOBAL(sdl), SOAP_GLOBAL(sdl)->target_ns, type_name);
+ if (!enc) {
+ enc = find_encoder_by_type_name(SOAP_GLOBAL(sdl), type_name);
+ }
+ }
+ if (enc) {
+ if (encode != enc && style == SOAP_LITERAL) {
+ add_type = 1;
+ }
+ encode = enc;
+ }
+ break;
}
}
}
@@ -484,6 +486,9 @@ static xmlNodePtr master_to_xml_int(encodePtr encode, zval *data, int style, xml
}
if (encode->to_xml) {
node = encode->to_xml(&encode->details, data, style, parent);
+ if (add_type) {
+ set_ns_and_type(node, &encode->details);
+ }
}
}
return node;
@@ -1014,7 +1019,15 @@ static zval *to_zval_double(encodeTypePtr type, xmlNodePtr data)
Z_DVAL_P(ret) = dval;
break;
default:
- soap_error0(E_ERROR, "Encoding: Violation of encoding rules");
+ if (strncasecmp((char*)data->children->content, "NaN", sizeof("NaN")-1) == 0) {
+ ZVAL_DOUBLE(ret, php_get_nan());
+ } else if (strncasecmp((char*)data->children->content, "INF", sizeof("INF")-1) == 0) {
+ ZVAL_DOUBLE(ret, php_get_inf());
+ } else if (strncasecmp((char*)data->children->content, "-INF", sizeof("-INF")-1) == 0) {
+ ZVAL_DOUBLE(ret, -php_get_inf());
+ } else {
+ soap_error0(E_ERROR, "Encoding: Violation of encoding rules");
+ }
}
} else {
soap_error0(E_ERROR, "Encoding: Violation of encoding rules");
@@ -1406,7 +1419,7 @@ static zval *to_zval_object_ex(encodeTypePtr type, xmlNodePtr data, zend_class_e
sdlPtr sdl;
sdlTypePtr sdlType = type->sdl_type;
zend_class_entry *ce = ZEND_STANDARD_CLASS_DEF_PTR;
- zend_bool redo_any = 0;
+ zval *redo_any = NULL;
TSRMLS_FETCH();
if (pce) {
@@ -1478,10 +1491,7 @@ static zval *to_zval_object_ex(encodeTypePtr type, xmlNodePtr data, zend_class_e
if (soap_check_xml_ref(&ret, data TSRMLS_CC)) {
return ret;
}
- if (get_zval_property(ret, "any" TSRMLS_CC) != NULL) {
- unset_zval_property(ret, "any" TSRMLS_CC);
- redo_any = 1;
- }
+ redo_any = get_zval_property(ret, "any" TSRMLS_CC);
if (Z_TYPE_P(ret) == IS_OBJECT && ce != ZEND_STANDARD_CLASS_DEF_PTR) {
zend_object *zobj = zend_objects_get_address(ret TSRMLS_CC);
zobj->ce = ce;
@@ -1507,10 +1517,17 @@ static zval *to_zval_object_ex(encodeTypePtr type, xmlNodePtr data, zend_class_e
object_init_ex(ret, ce);
}
if (sdlType->model) {
+ if (redo_any) {
+ redo_any->refcount++;
+ unset_zval_property(ret, "any" TSRMLS_CC);
+ }
model_to_zval_object(ret, sdlType->model, data, sdl TSRMLS_CC);
- if (redo_any && get_zval_property(ret, "any" TSRMLS_CC) == NULL) {
- model_to_zval_any(ret, data->children TSRMLS_CC);
- }
+ if (redo_any) {
+ if (get_zval_property(ret, "any" TSRMLS_CC) == NULL) {
+ model_to_zval_any(ret, data->children TSRMLS_CC);
+ }
+ zval_ptr_dtor(&redo_any);
+ }
}
if (sdlType->attributes) {
sdlAttributePtr *attr;
@@ -1615,6 +1632,13 @@ static int model_to_xml_object(xmlNodePtr node, sdlContentModelPtr model, zval *
encodePtr enc;
data = get_zval_property(object, model->u.element->name TSRMLS_CC);
+ if (data &&
+ Z_TYPE_P(data) == IS_NULL &&
+ !model->u.element->nillable &&
+ model->min_occurs > 0 &&
+ !strict) {
+ return 0;
+ }
if (data) {
enc = model->u.element->encode;
if ((model->max_occurs == -1 || model->max_occurs > 1) &&
@@ -2638,33 +2662,32 @@ static xmlNodePtr to_xml_map(encodeTypePtr type, zval *data, int style, xmlNodeP
ulong int_val;
zend_hash_get_current_data(data->value.ht, (void **)&temp_data);
- if (Z_TYPE_PP(temp_data) != IS_NULL) {
- item = xmlNewNode(NULL, BAD_CAST("item"));
- xmlAddChild(xmlParam, item);
- key = xmlNewNode(NULL, BAD_CAST("key"));
- xmlAddChild(item,key);
- if (zend_hash_get_current_key(data->value.ht, &key_val, &int_val, FALSE) == HASH_KEY_IS_STRING) {
- if (style == SOAP_ENCODED) {
- set_xsi_type(key, "xsd:string");
- }
- xmlNodeSetContent(key, BAD_CAST(key_val));
- } else {
- smart_str tmp = {0};
- smart_str_append_long(&tmp, int_val);
- smart_str_0(&tmp);
-
- if (style == SOAP_ENCODED) {
- set_xsi_type(key, "xsd:int");
- }
- xmlNodeSetContentLen(key, BAD_CAST(tmp.c), tmp.len);
-
- smart_str_free(&tmp);
+ item = xmlNewNode(NULL, BAD_CAST("item"));
+ xmlAddChild(xmlParam, item);
+ key = xmlNewNode(NULL, BAD_CAST("key"));
+ xmlAddChild(item,key);
+ if (zend_hash_get_current_key(data->value.ht, &key_val, &int_val, FALSE) == HASH_KEY_IS_STRING) {
+ if (style == SOAP_ENCODED) {
+ set_xsi_type(key, "xsd:string");
}
+ xmlNodeSetContent(key, BAD_CAST(key_val));
+ } else {
+ smart_str tmp = {0};
+ smart_str_append_long(&tmp, int_val);
+ smart_str_0(&tmp);
- xparam = master_to_xml(get_conversion((*temp_data)->type), (*temp_data), style, item);
+ if (style == SOAP_ENCODED) {
+ set_xsi_type(key, "xsd:int");
+ }
+ xmlNodeSetContentLen(key, BAD_CAST(tmp.c), tmp.len);
- xmlNodeSetName(xparam, BAD_CAST("value"));
+ smart_str_free(&tmp);
}
+
+ xparam = master_to_xml(get_conversion((*temp_data)->type), (*temp_data), style, item);
+
+ xmlNodeSetName(xparam, BAD_CAST("value"));
+
zend_hash_move_forward(data->value.ht);
}
}
@@ -2856,7 +2879,7 @@ static xmlNodePtr to_xml_datetime_ex(encodeTypePtr type, zval *data, char *forma
#ifdef HAVE_TM_GMTOFF
snprintf(tzbuf, sizeof(tzbuf), "%c%02d:%02d", (ta->tm_gmtoff < 0) ? '-' : '+', abs(ta->tm_gmtoff / 3600), abs( (ta->tm_gmtoff % 3600) / 60 ));
#else
-# ifdef __CYGWIN__
+# if defined(__CYGWIN__) || defined(NETWARE)
snprintf(tzbuf, sizeof(tzbuf), "%c%02d:%02d", ((ta->tm_isdst ? _timezone - 3600:_timezone)>0)?'-':'+', abs((ta->tm_isdst ? _timezone - 3600 : _timezone) / 3600), abs(((ta->tm_isdst ? _timezone - 3600 : _timezone) % 3600) / 60));
# else
snprintf(tzbuf, sizeof(tzbuf), "%c%02d:%02d", ((ta->tm_isdst ? timezone - 3600:timezone)>0)?'-':'+', abs((ta->tm_isdst ? timezone - 3600 : timezone) / 3600), abs(((ta->tm_isdst ? timezone - 3600 : timezone) % 3600) / 60));
diff --git a/ext/soap/php_encoding.h b/ext/soap/php_encoding.h
index 48ae6992d..56f02a9bf 100644
--- a/ext/soap/php_encoding.h
+++ b/ext/soap/php_encoding.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
| Dmitry Stogov <dmitry@zend.com> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_encoding.h,v 1.38.2.3.2.5 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: php_encoding.h,v 1.38.2.3.2.6 2008/12/31 11:17:43 sebastian Exp $ */
#ifndef PHP_ENCODING_H
#define PHP_ENCODING_H
diff --git a/ext/soap/php_http.c b/ext/soap/php_http.c
index 19aaa53a5..4fe7dfc9d 100644
--- a/ext/soap/php_http.c
+++ b/ext/soap/php_http.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
| Dmitry Stogov <dmitry@zend.com> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_http.c,v 1.77.2.11.2.15 2008/04/08 14:11:49 jorton Exp $ */
+/* $Id: php_http.c,v 1.77.2.11.2.17 2009/01/19 21:57:45 iliaa Exp $ */
#include "php_soap.h"
#include "ext/standard/base64.h"
@@ -438,7 +438,11 @@ try_again:
smart_str_appendl(&soap_headers, Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp));
smart_str_append_const(&soap_headers, "\r\n");
}
- } else{
+ } else if (FG(user_agent)) {
+ smart_str_append_const(&soap_headers, "User-Agent: ");
+ smart_str_appends(&soap_headers, FG(user_agent));
+ smart_str_append_const(&soap_headers, "\r\n");
+ } else {
smart_str_append_const(&soap_headers, "User-Agent: PHP-SOAP/"PHP_VERSION"\r\n");
}
diff --git a/ext/soap/php_http.h b/ext/soap/php_http.h
index 5dec5a344..536a10bb8 100644
--- a/ext/soap/php_http.h
+++ b/ext/soap/php_http.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
| Dmitry Stogov <dmitry@zend.com> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_http.h,v 1.16.2.1.2.2 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: php_http.h,v 1.16.2.1.2.3 2008/12/31 11:17:43 sebastian Exp $ */
#ifndef PHP_HTTP_H
#define PHP_HTTP_H
diff --git a/ext/soap/php_packet_soap.c b/ext/soap/php_packet_soap.c
index 18e9698c4..d2883e61c 100644
--- a/ext/soap/php_packet_soap.c
+++ b/ext/soap/php_packet_soap.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
| Dmitry Stogov <dmitry@zend.com> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_packet_soap.c,v 1.42.2.1.2.5 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: php_packet_soap.c,v 1.42.2.1.2.6 2008/12/31 11:17:43 sebastian Exp $ */
#include "php_soap.h"
diff --git a/ext/soap/php_packet_soap.h b/ext/soap/php_packet_soap.h
index 2a9712eb2..f358aa978 100644
--- a/ext/soap/php_packet_soap.h
+++ b/ext/soap/php_packet_soap.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
| Dmitry Stogov <dmitry@zend.com> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_packet_soap.h,v 1.10.2.1.2.2 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: php_packet_soap.h,v 1.10.2.1.2.3 2008/12/31 11:17:43 sebastian Exp $ */
#ifndef PHP_PACKET_SOAP_H
#define PHP_PACKET_SOAP_H
diff --git a/ext/soap/php_schema.c b/ext/soap/php_schema.c
index 55bc9e66b..8b4f8c992 100644
--- a/ext/soap/php_schema.c
+++ b/ext/soap/php_schema.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
| Dmitry Stogov <dmitry@zend.com> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_schema.c,v 1.58.2.6.2.7 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: php_schema.c,v 1.58.2.6.2.8 2008/12/31 11:17:43 sebastian Exp $ */
#include "php_soap.h"
#include "libxml/uri.h"
diff --git a/ext/soap/php_schema.h b/ext/soap/php_schema.h
index 17cab24c7..32198959e 100644
--- a/ext/soap/php_schema.h
+++ b/ext/soap/php_schema.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
| Dmitry Stogov <dmitry@zend.com> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_schema.h,v 1.13.2.2.2.2 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: php_schema.h,v 1.13.2.2.2.3 2008/12/31 11:17:43 sebastian Exp $ */
#ifndef PHP_SCHEMA_H
#define PHP_SCHEMA_H
diff --git a/ext/soap/php_sdl.c b/ext/soap/php_sdl.c
index 8e2475898..78ef3ddf2 100644
--- a/ext/soap/php_sdl.c
+++ b/ext/soap/php_sdl.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
| Dmitry Stogov <dmitry@zend.com> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_sdl.c,v 1.88.2.12.2.10 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: php_sdl.c,v 1.88.2.12.2.13 2008/12/31 11:17:43 sebastian Exp $ */
#include "php_soap.h"
#include "ext/libxml/php_libxml.h"
@@ -240,7 +240,12 @@ static void load_wsdl_ex(zval *this_ptr, char *struri, sdlCtx *ctx, int include
wsdl = soap_xmlParseFile(struri TSRMLS_CC);
if (!wsdl) {
- soap_error1(E_ERROR, "Parsing WSDL: Couldn't load from '%s'", struri);
+ xmlErrorPtr xmlErrorPtr = xmlGetLastError();
+ if (xmlErrorPtr) {
+ soap_error2(E_ERROR, "Parsing WSDL: Couldn't load from '%s' : %s", struri, xmlErrorPtr->message);
+ } else {
+ soap_error1(E_ERROR, "Parsing WSDL: Couldn't load from '%s'", struri);
+ }
}
zend_hash_add(&ctx->docs, struri, strlen(struri)+1, (void**)&wsdl, sizeof(xmlDocPtr), NULL);
@@ -716,12 +721,12 @@ static sdlPtr load_wsdl(zval *this_ptr, char *struri TSRMLS_DC)
}
trav2 = trav2->next;
}
- if (!address) {
+ if (!address || tmpbinding->bindingType == BINDING_HTTP) {
if (has_soap_port || trav->next || i < n-1) {
efree(tmpbinding);
trav = trav->next;
continue;
- } else {
+ } else if (!address) {
soap_error0(E_ERROR, "Parsing WSDL: No address associated with <port>");
}
}
diff --git a/ext/soap/php_sdl.h b/ext/soap/php_sdl.h
index 8a9eb7c57..cd7627a6c 100644
--- a/ext/soap/php_sdl.h
+++ b/ext/soap/php_sdl.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
| Dmitry Stogov <dmitry@zend.com> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_sdl.h,v 1.37.2.3.2.3 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: php_sdl.h,v 1.37.2.3.2.4 2008/12/31 11:17:43 sebastian Exp $ */
#ifndef PHP_SDL_H
#define PHP_SDL_H
diff --git a/ext/soap/php_soap.h b/ext/soap/php_soap.h
index 95758a612..0b219439c 100644
--- a/ext/soap/php_soap.h
+++ b/ext/soap/php_soap.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
| Dmitry Stogov <dmitry@zend.com> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_soap.h,v 1.38.2.6.2.8 2008/01/09 16:45:28 dmitry Exp $ */
+/* $Id: php_soap.h,v 1.38.2.6.2.9 2008/12/31 11:17:43 sebastian Exp $ */
#ifndef PHP_SOAP_H
#define PHP_SOAP_H
diff --git a/ext/soap/php_xml.c b/ext/soap/php_xml.c
index 4da4738f0..e2f5a984b 100644
--- a/ext/soap/php_xml.c
+++ b/ext/soap/php_xml.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
| Dmitry Stogov <dmitry@zend.com> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_xml.c,v 1.25.2.1.2.3 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: php_xml.c,v 1.25.2.1.2.4 2008/12/31 11:17:43 sebastian Exp $ */
#include "php_soap.h"
#include "libxml/parser.h"
diff --git a/ext/soap/php_xml.h b/ext/soap/php_xml.h
index 24e4480c4..d56e0027a 100644
--- a/ext/soap/php_xml.h
+++ b/ext/soap/php_xml.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
| Dmitry Stogov <dmitry@zend.com> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_xml.h,v 1.17.2.1.2.3 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: php_xml.h,v 1.17.2.1.2.4 2008/12/31 11:17:43 sebastian Exp $ */
#ifndef PHP_SOAP_XML_H
#define PHP_SOAP_XML_H
diff --git a/ext/soap/soap.c b/ext/soap/soap.c
index a20c7860e..8a9e9bafe 100644
--- a/ext/soap/soap.c
+++ b/ext/soap/soap.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
| Dmitry Stogov <dmitry@zend.com> |
+----------------------------------------------------------------------+
*/
-/* $Id: soap.c,v 1.156.2.28.2.39 2008/03/04 12:23:10 dmitry Exp $ */
+/* $Id: soap.c,v 1.156.2.28.2.44 2009/02/18 13:25:32 dmitry Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -2348,6 +2348,7 @@ PHP_METHOD(SoapClient, SoapClient)
if (zend_hash_find(ht, "stream_context", sizeof("stream_context"), (void**)&tmp) == SUCCESS &&
Z_TYPE_PP(tmp) == IS_RESOURCE) {
context = php_stream_context_from_zval(*tmp, 1);
+ zend_list_addref(context->rsrc_id);
}
if (zend_hash_find(ht, "location", sizeof("location"), (void**)&tmp) == SUCCESS &&
@@ -2380,8 +2381,8 @@ PHP_METHOD(SoapClient, SoapClient)
if (zend_hash_find(ht, "proxy_host", sizeof("proxy_host"), (void**)&tmp) == SUCCESS &&
Z_TYPE_PP(tmp) == IS_STRING) {
add_property_stringl(this_ptr, "_proxy_host", Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), 1);
- if (zend_hash_find(ht, "proxy_port", sizeof("proxy_port"), (void**)&tmp) == SUCCESS &&
- Z_TYPE_PP(tmp) == IS_LONG) {
+ if (zend_hash_find(ht, "proxy_port", sizeof("proxy_port"), (void**)&tmp) == SUCCESS) {
+ convert_to_long(*tmp);
add_property_long(this_ptr, "_proxy_port", Z_LVAL_PP(tmp));
}
if (zend_hash_find(ht, "proxy_login", sizeof("proxy_login"), (void**)&tmp) == SUCCESS &&
@@ -2566,11 +2567,11 @@ static int do_request(zval *this_ptr, xmlDoc *request, char *location, char *act
ZVAL_LONG(params[4], one_way);
if (call_user_function(NULL, &this_ptr, &func, response, 5, params TSRMLS_CC) != SUCCESS) {
- add_soap_fault(this_ptr, "Client", "SoapSlient::__doRequest() failed", NULL, NULL TSRMLS_CC);
+ add_soap_fault(this_ptr, "Client", "SoapClient::__doRequest() failed", NULL, NULL TSRMLS_CC);
ret = FALSE;
} else if (Z_TYPE_P(response) != IS_STRING) {
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "__soap_fault", sizeof("__soap_fault"), (void **) &fault) == FAILURE) {
- add_soap_fault(this_ptr, "Client", "SoapSlient::__doRequest() returned non string value", NULL, NULL TSRMLS_CC);
+ add_soap_fault(this_ptr, "Client", "SoapClient::__doRequest() returned non string value", NULL, NULL TSRMLS_CC);
}
ret = FALSE;
} else if (zend_hash_find(Z_OBJPROP_P(this_ptr), "trace", sizeof("trace"), (void **) &trace) == SUCCESS &&
@@ -4186,7 +4187,17 @@ static xmlDocPtr serialize_function_call(zval *this_ptr, sdlFunctionPtr function
/*style = SOAP_RPC;*/
if (style == SOAP_RPC) {
ns = encode_add_ns(body, uri);
- method = xmlNewChild(body, ns, BAD_CAST(function_name), NULL);
+ if (function_name) {
+ method = xmlNewChild(body, ns, BAD_CAST(function_name), NULL);
+ } else if (function && function->requestName) {
+ method = xmlNewChild(body, ns, BAD_CAST(function->requestName), NULL);
+ } else if (function && function->functionName) {
+ method = xmlNewChild(body, ns, BAD_CAST(function->functionName), NULL);
+ } else {
+ method = body;
+ }
+ } else {
+ method = body;
}
if (zend_hash_find(Z_OBJPROP_P(this_ptr), "use", sizeof("use"), (void **)&zuse) == SUCCESS &&
diff --git a/ext/soap/tests/bug46760.phpt b/ext/soap/tests/bug46760.phpt
new file mode 100644
index 000000000..0b7c9ab4c
--- /dev/null
+++ b/ext/soap/tests/bug46760.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Bug #46760 (SoapClient doRequest fails when proxy is used)
+--FILE--
+<?php
+
+$client = new SoapClient(null, array('proxy_host' => "localhost",
+ 'proxy_port' => '8080',
+ 'login' => "user",
+ 'password' => "test",
+ 'uri' => 'mo:http://www.w3.org/',
+ 'location' => 'http://some.url'));
+var_dump($client->_proxy_port);
+
+?>
+--EXPECT--
+int(8080)
diff --git a/ext/soap/tests/bugs/bug29109.phpt b/ext/soap/tests/bugs/bug29109.phpt
index a69674ece..f998a1ba2 100644
--- a/ext/soap/tests/bugs/bug29109.phpt
+++ b/ext/soap/tests/bugs/bug29109.phpt
@@ -10,11 +10,7 @@ $client = new SoapClient(dirname(__FILE__)."/bug29109.wsdl");
var_dump($client->__getFunctions());
?>
--EXPECT--
-array(3) {
+array(1) {
[0]=>
string(53) "HelloWorldResponse HelloWorld(HelloWorld $parameters)"
- [1]=>
- string(19) "string HelloWorld()"
- [2]=>
- string(19) "string HelloWorld()"
} \ No newline at end of file
diff --git a/ext/soap/tests/bugs/bug42151.phpt b/ext/soap/tests/bugs/bug42151.phpt
index 7f7a87bd1..ee53e6d52 100755
--- a/ext/soap/tests/bugs/bug42151.phpt
+++ b/ext/soap/tests/bugs/bug42151.phpt
@@ -1,5 +1,5 @@
--TEST--
-Bug #42151 __destruct functions not called after catching a SoapFault exception
+Bug #42151 (__destruct functions not called after catching a SoapFault exception)
--SKIPIF--
<?php require_once('skipif.inc'); ?>
--FILE--
@@ -26,6 +26,7 @@ try {
echo "ok\n";
?>
--EXPECT--
-SOAP-ERROR: Parsing WSDL: Couldn't load from 'httpx://'
+SOAP-ERROR: Parsing WSDL: Couldn't load from 'httpx://' : failed to load external entity "httpx://"
+
ok
I don't get executed either.
diff --git a/ext/soap/tests/bugs/bug42214.phpt b/ext/soap/tests/bugs/bug42214.phpt
index aaad3a14f..216d7895b 100755
--- a/ext/soap/tests/bugs/bug42214.phpt
+++ b/ext/soap/tests/bugs/bug42214.phpt
@@ -1,5 +1,5 @@
--TEST--
-Bug #42214 SoapServer sends clients internal PHP errors
+Bug #42214 (SoapServer sends clients internal PHP errors)
--SKIPIF--
<?php require_once('skipif.inc'); ?>
--FILE--
diff --git a/ext/soap/tests/bugs/bug43045.phpt b/ext/soap/tests/bugs/bug43045.phpt
new file mode 100644
index 000000000..a32acfe0e
--- /dev/null
+++ b/ext/soap/tests/bugs/bug43045.phpt
@@ -0,0 +1,52 @@
+--TEST--
+Bug #43045i (SOAP encoding violation on "INF" for type double/float)
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+function test($x) {
+ return $x;
+}
+
+class TestSoapClient extends SoapClient {
+ function __construct($wsdl, $options) {
+ parent::__construct($wsdl, $options);
+ $this->server = new SoapServer($wsdl, $options);
+ $this->server->addFunction('test');
+ }
+ function __doRequest($request, $location, $action, $version, $one_way = 0) {
+ ob_start();
+ $this->server->handle($request);
+ $response = ob_get_contents();
+ ob_end_clean();
+ return $response;
+
+ echo $request;
+ return '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
+xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
+xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+<soap:Body><testResponse xmlns="urn:TestSOAP">
+<s-gensym3>
+<doubleInfinity xsi:type="xsd:double">INF</doubleInfinity>
+</s-gensym3>
+</testResponse>
+</soap:Body></soap:Envelope>';
+ }
+}
+$client = new TestSoapClient(NULL, array(
+ "location" => "test://",
+ "uri" => 'urn:TestSOAP',
+ "style" => SOAP_RPC,
+ "use" => SOAP_ENCODED
+ ));
+var_dump($client->test(0.1));
+var_dump($client->test(NAN));
+var_dump($response = $client->test(INF));
+var_dump($response = $client->test(-INF));
+--EXPECT--
+float(0.1)
+float(NAN)
+float(INF)
+float(-INF)
diff --git a/ext/soap/tests/bugs/bug44811.phpt b/ext/soap/tests/bugs/bug44811.phpt
new file mode 100644
index 000000000..b2e1fc4f6
--- /dev/null
+++ b/ext/soap/tests/bugs/bug44811.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Bug #44811 (Improve error messages when creating new SoapClient which contains invalid data)
+--SKIPIF--
+<?php require_once 'skipif.inc'; ?>
+--INI--
+soap.wsdl_cache_enabled=0
+--FILE--
+<?php
+try {
+ $x = new SoapClient('http://slashdot.org');
+} catch (SoapFault $e) {
+ echo $e->getMessage() . PHP_EOL;
+}
+die('ok');
+?>
+--EXPECT--
+SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://slashdot.org' : Premature end of data in tag html line 3
+
+ok
diff --git a/ext/soap/tests/bugs/bug44882.phpt b/ext/soap/tests/bugs/bug44882.phpt
new file mode 100644
index 000000000..baad74784
--- /dev/null
+++ b/ext/soap/tests/bugs/bug44882.phpt
@@ -0,0 +1,64 @@
+--TEST--
+Bug #44882 (SOAP extension object decoding bug)
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--INI--
+soap.wsdl_cache_enabled=0
+--FILE--
+<?php
+class TestSoapClient extends SoapClient
+{
+ public function __doRequest($req, $loc, $act, $ver, $oneway)
+ {
+ return <<<XML
+<?xml version="1.0" encoding="UTF-8"?>
+<SOAP-ENV:Envelope
+ xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:ns="urn:ebay:api:PayPalAPI">
+ <SOAP-ENV:Body id="_0">
+ <GetExpressCheckoutDetailsResponse xmlns="urn:ebay:api:PayPalAPI">
+ <Timestamp>2008-06-23T14:51:08Z</Timestamp>
+ <Ack>Success</Ack>
+ <CorrelationID>ae013a0ccdf13</CorrelationID>
+ <Version>50.000000</Version>
+ <Build>588340</Build>
+ <GetExpressCheckoutDetailsResponseDetails xsi:type="ns:GetExpressCheckoutDetailsResponseDetailsType">
+ <Token>EC-11Y75137T2399952C</Token>
+ <PayerInfo>
+ <Payer>example@example.com</Payer>
+ <PayerID>MU82WA43YXM9C</PayerID>
+ <PayerStatus>verified</PayerStatus>
+ </PayerInfo>
+ </GetExpressCheckoutDetailsResponseDetails>
+ </GetExpressCheckoutDetailsResponse>
+ </SOAP-ENV:Body>
+</SOAP-ENV:Envelope>
+XML;
+ }
+}
+
+$client = new TestSoapClient(dirname(__FILE__).'/bug44882.wsdl');
+print_r($client->GetExpressCheckoutDetails());
+?>
+--EXPECT--
+stdClass Object
+(
+ [Timestamp] => 2008-06-23T14:51:08Z
+ [Ack] => Success
+ [CorrelationID] => ae013a0ccdf13
+ [Version] => 50.000000
+ [Build] => 588340
+ [GetExpressCheckoutDetailsResponseDetails] => stdClass Object
+ (
+ [Token] => EC-11Y75137T2399952C
+ [PayerInfo] => stdClass Object
+ (
+ [Payer] => example@example.com
+ [PayerID] => MU82WA43YXM9C
+ [PayerStatus] => verified
+ )
+
+ )
+
+)
diff --git a/ext/soap/tests/bugs/bug44882.wsdl b/ext/soap/tests/bugs/bug44882.wsdl
new file mode 100644
index 000000000..266f6a05b
--- /dev/null
+++ b/ext/soap/tests/bugs/bug44882.wsdl
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions
+ xmlns="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:ns="urn:ebay:api:PayPalAPI"
+ xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
+ targetNamespace="urn:ebay:api:PayPalAPI">
+ <wsdl:types>
+ <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:ebay:api:PayPalAPI" elementFormDefault="qualified" attributeFormDefault="unqualified">
+ <complexType name="PayerInfoType">
+ <sequence>
+ <element name="Payer" type="xs:string" minOccurs="0"/>
+ <element name="PayerID" type="xs:string" minOccurs="0"/>
+ <element name="PayerStatus" type="xs:string" minOccurs="0"/>
+ </sequence>
+ </complexType>
+ <complexType name="AbstractResponseType" abstract="true">
+ <sequence>
+ <element name="Timestamp" type="xs:dateTime" minOccurs="0"/>
+ <element name="Ack" type="xs:string"/>
+ <element name="CorrelationID" type="xs:string" minOccurs="0"/>
+ <element name="Version" type="xs:string"/>
+ <element name="Build" type="xs:string"/>
+ <any processContents="lax" minOccurs="0"/>
+ </sequence>
+ </complexType>
+ <xs:element name="GetExpressCheckoutDetailsResponseDetails" type="ns:GetExpressCheckoutDetailsResponseDetailsType"/>
+ <xs:complexType name="GetExpressCheckoutDetailsResponseDetailsType">
+ <xs:sequence>
+ <xs:element name="Token" type="xs:string"/>
+ <xs:element name="PayerInfo" type="ns:PayerInfoType"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="GetExpressCheckoutDetailsResponse" type="ns:GetExpressCheckoutDetailsResponseType"/>
+ <xs:complexType name="GetExpressCheckoutDetailsResponseType">
+ <xs:complexContent>
+ <xs:extension base="ns:AbstractResponseType">
+ <xs:sequence>
+ <xs:element ref="ns:GetExpressCheckoutDetailsResponseDetails" minOccurs="1" maxOccurs="1"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </schema>
+ </wsdl:types>
+ <wsdl:message name="GetExpressCheckoutDetailsRequest">
+ </wsdl:message>
+ <wsdl:message name="GetExpressCheckoutDetailsResponse">
+ <wsdl:part name="GetExpressCheckoutDetailsResponse" element="ns:GetExpressCheckoutDetailsResponse"/>
+ </wsdl:message>
+ <wsdl:portType name="PayPalAPIAAInterface">
+ <wsdl:operation name="GetExpressCheckoutDetails">
+ <wsdl:input message="ns:GetExpressCheckoutDetailsRequest"/>
+ <wsdl:output message="ns:GetExpressCheckoutDetailsResponse"/>
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="PayPalAPIAASoapBinding" type="ns:PayPalAPIAAInterface">
+ <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+ <wsdl:operation name="GetExpressCheckoutDetails">
+ <wsdlsoap:operation/>
+ <wsdl:input>
+ <wsdlsoap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <wsdlsoap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="PayPalAPIInterfaceService">
+ <wsdl:port name="PayPalAPIAA" binding="ns:PayPalAPIAASoapBinding">
+ <wsdlsoap:address location="test://"/>
+ </wsdl:port>
+ </wsdl:service>
+</wsdl:definitions>
diff --git a/ext/soap/tests/bugs/bug46419.phpt b/ext/soap/tests/bugs/bug46419.phpt
new file mode 100644
index 000000000..cb113e28d
--- /dev/null
+++ b/ext/soap/tests/bugs/bug46419.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Bug #46419 (Elements of associative arrays with NULL value are lost)
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+function bar() {
+ return array('a' => 1, 'b' => NULL, 'c' => 2, 'd'=>'');
+}
+
+class LocalSoapClient extends SoapClient {
+
+ function __construct($wsdl, $options) {
+ parent::__construct($wsdl, $options);
+ $this->server = new SoapServer($wsdl, $options);
+ $this->server->addFunction('bar');
+ }
+
+ function __doRequest($request, $location, $action, $version, $one_way = 0) {
+ ob_start();
+ $this->server->handle($request);
+ $response = ob_get_contents();
+ ob_end_clean();
+ return $response;
+ }
+
+}
+
+$x = new LocalSoapClient(NULL,array('location'=>'test://',
+ 'uri'=>'http://testuri.org'));
+var_dump($x->bar());
+?>
+--EXPECT--
+array(4) {
+ ["a"]=>
+ int(1)
+ ["b"]=>
+ NULL
+ ["c"]=>
+ int(2)
+ ["d"]=>
+ string(0) ""
+}
diff --git a/ext/soap/tests/bugs/bug46427.phpt b/ext/soap/tests/bugs/bug46427.phpt
new file mode 100644
index 000000000..5cf2e8f96
--- /dev/null
+++ b/ext/soap/tests/bugs/bug46427.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Bug #46427 (SoapClient() stumbles over its "stream_context" parameter)
+--FILE--
+<?php
+error_reporting(E_ALL|E_STRICT);
+
+function getSoapClient_1() {
+ $ctx = stream_context_create();
+ return new SoapClient(NULL, array(
+ 'stream_context' => $ctx,
+ 'location' => 'test://',
+ 'uri' => 'test://',
+ 'exceptions' => false));
+}
+
+getSoapClient_1()->__soapCall('Help', array());
+echo "ok\n";
+?>
+--EXPECT--
+ok
diff --git a/ext/soap/tests/bugs/bug47049.phpt b/ext/soap/tests/bugs/bug47049.phpt
new file mode 100644
index 000000000..bdc16274e
--- /dev/null
+++ b/ext/soap/tests/bugs/bug47049.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Bug #47049 (SoapClient::__soapCall causes a segmentation fault)
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--INI--
+soap.wsdl_cache_enabled=0
+--FILE--
+<?php
+$client = new SoapClient(dirname(__FILE__) . '/bug47049.wsdl',
+ array('trace' => 1 , 'exceptions' => 0));
+$host = array('uuid' => 'foo');
+$software_list = array(array('name' => 'package', 'version' => '1.2.3', 'state' => 'installed'));
+$updates = array();
+$report_id = $client->__soapCall('reportSoftwareStatus',array($host, $software_list, $updates));
+echo $client->__getLastRequest();
+?>
+--EXPECT--
+<?xml version="1.0" encoding="UTF-8"?>
+<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.example.org/reporter/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:reportSoftwareStatus><host xsi:type="ns1:host"><uuid xsi:type="xsd:string">foo</uuid></host><software_list xsi:type="ns1:software_list"><software xsi:type="ns1:software"><name xsi:type="xsd:string">package</name><version xsi:type="xsd:string">1.2.3</version><state xsi:type="xsd:string">installed</state></software></software_list><updates xsi:type="ns1:updates"/></ns1:reportSoftwareStatus></SOAP-ENV:Body></SOAP-ENV:Envelope>
diff --git a/ext/soap/tests/bugs/bug47049.wsdl b/ext/soap/tests/bugs/bug47049.wsdl
new file mode 100644
index 000000000..b5730a38e
--- /dev/null
+++ b/ext/soap/tests/bugs/bug47049.wsdl
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<wsdl:definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://www.example.org/reporter/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="reporter" targetNamespace="http://www.example.org/reporter/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
+ <wsdl:types><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/reporter/">
+ <xsd:complexType name="host">
+ <xsd:sequence>
+ <xsd:element name="uuid" type="xsd:string"></xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="software_list">
+ <xsd:sequence>
+ <xsd:element name="software" type="tns:software"
+ maxOccurs="unbounded" minOccurs="1">
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="software">
+ <xsd:sequence>
+ <xsd:element name="name" type="xsd:string" maxOccurs="1" minOccurs="1"></xsd:element>
+ <xsd:element name="version" type="xsd:string" maxOccurs="1" minOccurs="1"></xsd:element>
+ <xsd:element name="state" type="xsd:string" maxOccurs="1" minOccurs="1"></xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="updates">
+ <xsd:sequence>
+ <xsd:element name="update" type="tns:update"
+ maxOccurs="unbounded" minOccurs="0">
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="update">
+ <xsd:sequence>
+ <xsd:element name="software" type="xsd:string"></xsd:element>
+ <xsd:element name="old_version" type="xsd:string"></xsd:element>
+ <xsd:element name="new_version" type="xsd:string"></xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+</xsd:schema></wsdl:types>
+ <wsdl:message name="reportSoftwareStatusRequest">
+ <wsdl:part name="host" type="tns:host"/>
+ <wsdl:part name="software_list" type="tns:software_list"></wsdl:part>
+ <wsdl:part name="updates" type="tns:updates"></wsdl:part>
+ </wsdl:message>
+ <wsdl:message name="reportSoftwareStatusResponse">
+ <wsdl:part name="report_id" type="xsd:int"/>
+ </wsdl:message>
+ <wsdl:portType name="reporter">
+ <wsdl:operation name="reportSoftwareStatus">
+ <wsdl:input message="tns:reportSoftwareStatusRequest"/>
+ <wsdl:output message="tns:reportSoftwareStatusResponse"/>
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="reporterHTTP" type="tns:reporter">
+
+ <soap:binding style="document"
+ transport="http://schemas.xmlsoap.org/soap/http" />
+ <wsdl:operation name="reportSoftwareStatus">
+
+ <soap:operation
+ soapAction="http://www.example.org/reporter/reportSoftwareStatus" />
+ <wsdl:input>
+
+
+ <soap:body use="literal" />
+ </wsdl:input>
+ <wsdl:output>
+
+
+ <soap:body use="literal" />
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="reporter">
+ <wsdl:port binding="tns:reporterHTTP" name="reporterHTTP">
+ <http:address location="test://"/>
+ </wsdl:port>
+ </wsdl:service>
+
+</wsdl:definitions>
diff --git a/ext/soap/tests/bugs/multiport.phpt b/ext/soap/tests/bugs/multiport.phpt
new file mode 100644
index 000000000..0b5e94451
--- /dev/null
+++ b/ext/soap/tests/bugs/multiport.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Proper binding selection
+--SKIPIF--
+<?php require_once 'skipif.inc'; ?>
+--INI--
+soap.wsdl_cache_enabled=0
+--FILE--
+<?php
+$client = new SoapClient(dirname(__FILE__).'/multiport.wsdl',
+ array('trace' => true, 'exceptions' => false));
+$response = $client->GetSessionId(array('userId'=>'user', 'password'=>'password'));
+echo $client->__getLastRequest();
+?>
+--EXPECT--
+<?xml version="1.0" encoding="UTF-8"?>
+<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.reuters.com/"><SOAP-ENV:Body><ns1:GetSessionId><ns1:userId>user</ns1:userId><ns1:password>password</ns1:password></ns1:GetSessionId></SOAP-ENV:Body></SOAP-ENV:Envelope>
diff --git a/ext/soap/tests/bugs/multiport.wsdl b/ext/soap/tests/bugs/multiport.wsdl
new file mode 100644
index 000000000..604e963d8
--- /dev/null
+++ b/ext/soap/tests/bugs/multiport.wsdl
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions targetNamespace="http://www.reuters.com/" xmlns:tns="http://www.reuters.com/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:s="http://www.w3.org/2001/XMLSchema">
+ <wsdl:types>
+ <s:schema elementFormDefault="qualified" targetNamespace="http://www.reuters.com/">
+ <s:element name="GetSessionId">
+ <s:complexType>
+ <s:sequence>
+ <s:element maxOccurs="1" minOccurs="0" name="userId" type="s:string"/>
+ <s:element maxOccurs="1" minOccurs="0" name="password" type="s:string"/>
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ <s:element name="GetSessionIdResponse">
+ <s:complexType>
+ <s:sequence>
+ <s:element maxOccurs="1" minOccurs="0" name="GetSessionIdResult" type="s:string"/>
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ </s:schema>
+ </wsdl:types>
+ <wsdl:message name="GetSessionIdHttpGetIn">
+ <wsdl:part name="userId" type="s:string">
+ </wsdl:part>
+ <wsdl:part name="password" type="s:string">
+ </wsdl:part>
+ </wsdl:message>
+ <wsdl:message name="GetSessionIdHttpGetOut">
+ <wsdl:part name="Body" element="tns:string">
+ </wsdl:part>
+ </wsdl:message>
+ <wsdl:message name="GetSessionIdSoapOut">
+ <wsdl:part name="parameters" element="tns:GetSessionIdResponse">
+ </wsdl:part>
+ </wsdl:message>
+ <wsdl:message name="GetSessionIdSoapIn">
+ <wsdl:part name="parameters" element="tns:GetSessionId">
+ </wsdl:part>
+ </wsdl:message>
+ <wsdl:portType name="StocksDataSecureHttpGet">
+ <wsdl:operation name="GetSessionId">
+ <wsdl:input message="tns:GetSessionIdHttpGetIn">
+ </wsdl:input>
+ <wsdl:output message="tns:GetSessionIdHttpGetOut">
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:portType name="StocksDataSecureSoap">
+ <wsdl:operation name="GetSessionId">
+ <wsdl:input message="tns:GetSessionIdSoapIn">
+ </wsdl:input>
+ <wsdl:output message="tns:GetSessionIdSoapOut">
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="StocksDataSecureHttpGet" type="tns:StocksDataSecureHttpGet">
+ <http:binding verb="GET"/>
+ <wsdl:operation name="GetSessionId">
+ <http:operation location="/GetSessionId"/>
+ <wsdl:input>
+ <http:urlEncoded/>
+ </wsdl:input>
+ <wsdl:output>
+ <mime:mimeXml part="Body"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:binding name="StocksDataSecureSoap" type="tns:StocksDataSecureSoap">
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+ <wsdl:operation name="GetSessionId">
+ <soap:operation soapAction="http://www.reuters.com/GetSessionId" style="document"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="StocksDataSecure">
+ <wsdl:port name="StocksDataSecureHttpGet" binding="tns:StocksDataSecureHttpGet">
+ <http:address location="test://"/>
+ </wsdl:port>
+ <wsdl:port name="StocksDataSecureSoap" binding="tns:StocksDataSecureSoap">
+ <soap:address location="test://"/>
+ </wsdl:port>
+ </wsdl:service>
+</wsdl:definitions>
diff --git a/ext/sockets/php_sockets.h b/ext/sockets/php_sockets.h
index 01e1a2d8d..85357f7a5 100644
--- a/ext/sockets/php_sockets.h
+++ b/ext/sockets/php_sockets.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -22,7 +22,7 @@
#ifndef PHP_SOCKETS_H
#define PHP_SOCKETS_H
-/* $Id: php_sockets.h,v 1.36.2.1.2.5 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: php_sockets.h,v 1.36.2.1.2.6 2008/12/31 11:17:43 sebastian Exp $ */
#if HAVE_SOCKETS
diff --git a/ext/sockets/php_sockets_win.c b/ext/sockets/php_sockets_win.c
index f1a7e2a69..bacebb896 100644
--- a/ext/sockets/php_sockets_win.c
+++ b/ext/sockets/php_sockets_win.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -19,7 +19,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_sockets_win.c,v 1.12.2.1.2.3 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: php_sockets_win.c,v 1.12.2.1.2.4 2008/12/31 11:17:43 sebastian Exp $ */
#ifdef PHP_WIN32
diff --git a/ext/sockets/php_sockets_win.h b/ext/sockets/php_sockets_win.h
index b5638de13..120addfd8 100644
--- a/ext/sockets/php_sockets_win.h
+++ b/ext/sockets/php_sockets_win.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -19,7 +19,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_sockets_win.h,v 1.12.2.1.2.3 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: php_sockets_win.h,v 1.12.2.1.2.4 2008/12/31 11:17:43 sebastian Exp $ */
#ifdef PHP_WIN32
diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c
index b73a25a7b..ed6813037 100644
--- a/ext/sockets/sockets.c
+++ b/ext/sockets/sockets.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -19,7 +19,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: sockets.c,v 1.171.2.9.2.17 2008/02/21 02:39:43 felipe Exp $ */
+/* $Id: sockets.c,v 1.171.2.9.2.22 2009/02/03 19:22:40 iliaa Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -509,6 +509,9 @@ PHP_MINIT_FUNCTION(sockets)
REGISTER_LONG_CONSTANT("SO_ERROR", SO_ERROR, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("SOL_SOCKET", SOL_SOCKET, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("SOMAXCONN", SOMAXCONN, CONST_CS | CONST_PERSISTENT);
+#ifdef TCP_NODELAY
+ REGISTER_LONG_CONSTANT("TCP_NODELAY", TCP_NODELAY, CONST_CS | CONST_PERSISTENT);
+#endif
REGISTER_LONG_CONSTANT("PHP_NORMAL_READ", PHP_NORMAL_READ, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("PHP_BINARY_READ", PHP_BINARY_READ, CONST_CS | CONST_PERSISTENT);
@@ -584,10 +587,7 @@ static int php_sock_array_from_fd_set(zval *sock_array, fd_set *fds TSRMLS_DC) /
zval **dest_element;
php_socket *php_sock;
HashTable *new_hash;
- char *key;
int num = 0;
- ulong num_key;
- uint key_len;
if (Z_TYPE_P(sock_array) != IS_ARRAY) return 0;
@@ -602,14 +602,8 @@ static int php_sock_array_from_fd_set(zval *sock_array, fd_set *fds TSRMLS_DC) /
if (PHP_SAFE_FD_ISSET(php_sock->bsd_socket, fds)) {
/* Add fd to new array */
- switch (zend_hash_get_current_key_ex(Z_ARRVAL_P(sock_array), &key, &key_len, &num_key, 0, NULL)) {
- case HASH_KEY_IS_STRING:
- zend_hash_add(new_hash, key, key_len, (void *)element, sizeof(zval *), (void **)&dest_element);
- break;
- case HASH_KEY_IS_LONG:
- zend_hash_index_update(new_hash, num_key, (void *)element, sizeof(zval *), (void **)&dest_element);
- break;
- }
+ zend_hash_next_index_insert(new_hash, (void *)element, sizeof(zval *), (void **)&dest_element);
+
if (dest_element) zval_add_ref(dest_element);
}
num++;
@@ -907,6 +901,9 @@ PHP_FUNCTION(socket_read)
efree(tmpbuf);
RETURN_FALSE;
+ } else if (!retval) {
+ efree(tmpbuf);
+ RETURN_EMPTY_STRING();
}
tmpbuf = erealloc(tmpbuf, retval + 1);
@@ -1179,8 +1176,8 @@ PHP_FUNCTION(socket_connect)
memset(&s_un, 0, sizeof(struct sockaddr_un));
s_un.sun_family = AF_UNIX;
- snprintf(s_un.sun_path, 108, "%s", addr);
- retval = connect(php_sock->bsd_socket, (struct sockaddr *) &s_un, SUN_LEN(&s_un));
+ memcpy(&s_un.sun_path, addr, addr_len);
+ retval = connect(php_sock->bsd_socket, (struct sockaddr *) &s_un, (socklen_t) XtOffsetOf(struct sockaddr_un, sun_path) + addr_len);
break;
default:
diff --git a/ext/sockets/tests/ipv4loop.phpt b/ext/sockets/tests/ipv4loop.phpt
index 7c6c0db31..9fdcc17da 100644
--- a/ext/sockets/tests/ipv4loop.phpt
+++ b/ext/sockets/tests/ipv4loop.phpt
@@ -3,7 +3,7 @@ IPv4 Loopback test
--SKIPIF--
<?php
if (!extension_loaded('sockets')) {
- die('skip sockets extenion not available.');
+ die('skip sockets extension not available.');
}
?>
--FILE--
diff --git a/ext/sockets/tests/ipv6loop.phpt b/ext/sockets/tests/ipv6loop.phpt
index 45d2a05fc..6fb584045 100644
--- a/ext/sockets/tests/ipv6loop.phpt
+++ b/ext/sockets/tests/ipv6loop.phpt
@@ -3,7 +3,7 @@ IPv6 Loopback test
--SKIPIF--
<?php
if (!extension_loaded('sockets')) {
- die('skip sockets extenion not available.');
+ die('skip sockets extension not available.');
}
if (!defined("AF_INET6")) {
die('skip no IPv6 support');
diff --git a/ext/sockets/tests/unixloop.phpt b/ext/sockets/tests/unixloop.phpt
new file mode 100644
index 000000000..1b547c3b3
--- /dev/null
+++ b/ext/sockets/tests/unixloop.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Unix domain socket Loopback test
+--SKIPIF--
+<?php
+ if (!extension_loaded('sockets')) {
+ die('skip sockets extension not available.');
+ }
+?>
+--FILE--
+<?php
+ $sock_path = sprintf("/tmp/%s.sock", uniqid());
+
+ if (file_exists($sock_path))
+ die('Temporary socket already exists.');
+
+ /* Setup socket server */
+ $server = socket_create(AF_UNIX, SOCK_STREAM, 0);
+ if (!$server) {
+ die('Unable to create AF_UNIX socket [server]');
+ }
+ if (!socket_bind($server, $sock_path)) {
+ die("Unable to bind to $sock_path");
+ }
+ if (!socket_listen($server, 2)) {
+ die('Unable to listen on socket');
+ }
+
+ /* Connect to it */
+ $client = socket_create(AF_UNIX, SOCK_STREAM, 0);
+ if (!$client) {
+ die('Unable to create AF_UNIX socket [client]');
+ }
+ if (!socket_connect($client, $sock_path)) {
+ die('Unable to connect to server socket');
+ }
+
+ /* Accept that connection */
+ $socket = socket_accept($server);
+ if (!$socket) {
+ die('Unable to accept connection');
+ }
+
+ socket_write($client, "ABCdef123\n");
+
+ $data = socket_read($socket, 10, PHP_BINARY_READ);
+ var_dump($data);
+
+ socket_close($client);
+ socket_close($socket);
+ socket_close($server);
+ @unlink($sock_path);
+?>
+--EXPECT--
+string(10) "ABCdef123
+"
diff --git a/ext/sockets/unix_socket_constants.h b/ext/sockets/unix_socket_constants.h
index fd40f8605..8226e2f66 100644
--- a/ext/sockets/unix_socket_constants.h
+++ b/ext/sockets/unix_socket_constants.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: unix_socket_constants.h,v 1.5.2.1.2.2 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: unix_socket_constants.h,v 1.5.2.1.2.3 2008/12/31 11:17:43 sebastian Exp $ */
/* This file is to be included by sockets.c */
diff --git a/ext/sockets/win32_socket_constants.h b/ext/sockets/win32_socket_constants.h
index 5528d24c8..18f8624f4 100644
--- a/ext/sockets/win32_socket_constants.h
+++ b/ext/sockets/win32_socket_constants.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: win32_socket_constants.h,v 1.5.2.1.2.2 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: win32_socket_constants.h,v 1.5.2.1.2.3 2008/12/31 11:17:43 sebastian Exp $ */
/* This file is to be included by sockets.c */
diff --git a/ext/spl/examples/tests/dualiterator_001.phpt b/ext/spl/examples/tests/dualiterator_001.phpt
index 9150d76ae..53c11537a 100755
--- a/ext/spl/examples/tests/dualiterator_001.phpt
+++ b/ext/spl/examples/tests/dualiterator_001.phpt
@@ -1,7 +1,7 @@
--TEST--
SPL: DualIterator
--SKIPIF--
-<?php if (!extension_loaded("spl")) print "skip"; ?>
+<?php if (!extension_loaded("spl") || !extension_loaded("reflection")) print "skip"; ?>
--FILE--
<?php
diff --git a/ext/spl/php_spl.c b/ext/spl/php_spl.c
index e4a09684a..49016c963 100755
--- a/ext/spl/php_spl.c
+++ b/ext/spl/php_spl.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_spl.c,v 1.52.2.28.2.18 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: php_spl.c,v 1.52.2.28.2.20 2008/12/31 11:17:43 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -89,7 +89,7 @@ static zend_class_entry * spl_find_ce_by_name(char *name, int len, zend_bool aut
return *ce;
}
-/* {{{ proto array class_parents(object instance)
+/* {{{ proto array class_parents(object instance [, boolean autoload = true])
Return an array containing the names of all parent classes */
PHP_FUNCTION(class_parents)
{
diff --git a/ext/spl/php_spl.h b/ext/spl/php_spl.h
index 09bd521f1..23f545993 100755
--- a/ext/spl/php_spl.h
+++ b/ext/spl/php_spl.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c
index e6d89019d..d4827dca0 100755
--- a/ext/spl/spl_array.c
+++ b/ext/spl/spl_array.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_array.c,v 1.71.2.17.2.15 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: spl_array.c,v 1.71.2.17.2.22 2008/12/31 11:17:44 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
# include "config.h"
@@ -255,6 +255,7 @@ static zval **spl_array_get_dimension_ptr_ptr(int check_inherited, zval *object,
spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
zval **retval;
long index;
+ HashTable *ht = spl_array_get_hash_table(intern, 0 TSRMLS_CC);
/* We cannot get the pointer pointer so we don't allow it here for now
if (check_inherited && intern->fptr_offset_get) {
@@ -267,9 +268,17 @@ static zval **spl_array_get_dimension_ptr_ptr(int check_inherited, zval *object,
switch(Z_TYPE_P(offset)) {
case IS_STRING:
- if (zend_symtable_find(spl_array_get_hash_table(intern, 0 TSRMLS_CC), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, (void **) &retval) == FAILURE) {
- zend_error(E_NOTICE, "Undefined index: %s", Z_STRVAL_P(offset));
- return &EG(uninitialized_zval_ptr);
+ if (zend_symtable_find(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, (void **) &retval) == FAILURE) {
+ if (type == BP_VAR_W || type == BP_VAR_RW) {
+ zval *value;
+ ALLOC_INIT_ZVAL(value);
+ zend_symtable_update(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, (void**)&value, sizeof(void*), NULL);
+ zend_symtable_find(ht, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, (void **) &retval);
+ return retval;
+ } else {
+ zend_error(E_NOTICE, "Undefined index: %s", Z_STRVAL_P(offset));
+ return &EG(uninitialized_zval_ptr);
+ }
} else {
return retval;
}
@@ -282,9 +291,17 @@ static zval **spl_array_get_dimension_ptr_ptr(int check_inherited, zval *object,
} else {
index = Z_LVAL_P(offset);
}
- if (zend_hash_index_find(spl_array_get_hash_table(intern, 0 TSRMLS_CC), index, (void **) &retval) == FAILURE) {
- zend_error(E_NOTICE, "Undefined offset: %ld", Z_LVAL_P(offset));
- return &EG(uninitialized_zval_ptr);
+ if (zend_hash_index_find(ht, index, (void **) &retval) == FAILURE) {
+ if (type == BP_VAR_W || type == BP_VAR_RW) {
+ zval *value;
+ ALLOC_INIT_ZVAL(value);
+ zend_hash_index_update(ht, index, (void**)&value, sizeof(void*), NULL);
+ zend_hash_index_find(ht, index, (void **) &retval);
+ return retval;
+ } else {
+ zend_error(E_NOTICE, "Undefined offset: %ld", Z_LVAL_P(offset));
+ return &EG(uninitialized_zval_ptr);
+ }
} else {
return retval;
}
@@ -893,9 +910,7 @@ SPL_METHOD(Array, __construct)
spl_array_object *intern;
zval **array;
long ar_flags = 0;
- char *class_name;
- int class_name_len;
- zend_class_entry ** pce_get_iterator;
+ zend_class_entry * ce_get_iterator = spl_ce_Iterator;
if (ZEND_NUM_ARGS() == 0) {
return; /* nothing to do */
@@ -904,7 +919,7 @@ SPL_METHOD(Array, __construct)
intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|ls", &array, &ar_flags, &class_name, &class_name_len) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|lC", &array, &ar_flags, &ce_get_iterator) == FAILURE) {
php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
return;
}
@@ -914,12 +929,7 @@ SPL_METHOD(Array, __construct)
}
if (ZEND_NUM_ARGS() > 2) {
- if (zend_lookup_class(class_name, class_name_len, &pce_get_iterator TSRMLS_CC) == FAILURE) {
- zend_throw_exception(spl_ce_InvalidArgumentException, "A class that implements Iterator must be specified", 0 TSRMLS_CC);
- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
- return;
- }
- intern->ce_get_iterator = *pce_get_iterator;
+ intern->ce_get_iterator = ce_get_iterator;
}
ar_flags &= ~SPL_ARRAY_INT_MASK;
@@ -972,21 +982,14 @@ SPL_METHOD(Array, setIteratorClass)
{
zval *object = getThis();
spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC);
- char *class_name;
- int class_name_len;
- zend_class_entry ** pce_get_iterator;
+ zend_class_entry * ce_get_iterator = spl_ce_Iterator;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &class_name, &class_name_len) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "C", &ce_get_iterator) == FAILURE) {
php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
return;
}
- if (zend_lookup_class(class_name, class_name_len, &pce_get_iterator TSRMLS_CC) == FAILURE) {
- zend_throw_exception(spl_ce_InvalidArgumentException, "A class that implements Iterator must be specified", 0 TSRMLS_CC);
- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
- return;
- }
- intern->ce_get_iterator = *pce_get_iterator;
+ intern->ce_get_iterator = ce_get_iterator;
}
/* }}} */
@@ -1180,6 +1183,7 @@ static void spl_array_method(INTERNAL_FUNCTION_PARAMETERS, char *fname, int fnam
spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
HashTable *aht = spl_array_get_hash_table(intern, 0 TSRMLS_CC);
zval tmp, *arg;
+ zval *retval_ptr = NULL;
INIT_PZVAL(&tmp);
Z_TYPE(tmp) = IS_ARRAY;
@@ -1190,9 +1194,12 @@ static void spl_array_method(INTERNAL_FUNCTION_PARAMETERS, char *fname, int fnam
zend_throw_exception(spl_ce_BadMethodCallException, "Function expects exactly one argument", 0 TSRMLS_CC);
return;
}
- zend_call_method(NULL, NULL, NULL, fname, fname_len, &return_value, 2, &tmp, arg TSRMLS_CC);
+ zend_call_method(NULL, NULL, NULL, fname, fname_len, &retval_ptr, 2, &tmp, arg TSRMLS_CC);
} else {
- zend_call_method(NULL, NULL, NULL, fname, fname_len, &return_value, 1, &tmp, NULL TSRMLS_CC);
+ zend_call_method(NULL, NULL, NULL, fname, fname_len, &retval_ptr, 1, &tmp, NULL TSRMLS_CC);
+ }
+ if (retval_ptr) {
+ COPY_PZVAL_TO_ZVAL(*return_value, retval_ptr);
}
}
diff --git a/ext/spl/spl_array.h b/ext/spl/spl_array.h
index 4c6e49b97..25994bd84 100755
--- a/ext/spl/spl_array.h
+++ b/ext/spl/spl_array.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_array.h,v 1.13.2.2.2.5 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: spl_array.h,v 1.13.2.2.2.6 2008/12/31 11:17:44 sebastian Exp $ */
#ifndef SPL_ARRAY_H
#define SPL_ARRAY_H
diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c
index f62b261b9..e03fcaea7 100755
--- a/ext/spl/spl_directory.c
+++ b/ext/spl/spl_directory.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_directory.c,v 1.45.2.27.2.26 2008/02/13 12:23:26 helly Exp $ */
+/* $Id: spl_directory.c,v 1.45.2.27.2.30 2008/12/31 11:17:44 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
# include "config.h"
@@ -426,6 +426,7 @@ static spl_filesystem_object * spl_filesystem_object_create_type(int ht, spl_fil
&use_include_path, &intern->u.file.zcontext) == FAILURE) {
php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
intern->u.file.open_mode = NULL;
+ intern->file_name = NULL;
zval_dtor(return_value);
Z_TYPE_P(return_value) = IS_NULL;
return NULL;
@@ -1055,7 +1056,7 @@ SPL_METHOD(RecursiveDirectoryIterator, getChildren)
INIT_PZVAL(&zpath);
ZVAL_STRINGL(&zpath, intern->file_name, intern->file_name_len, 0);
- spl_instantiate_arg_ex1(spl_ce_RecursiveDirectoryIterator, &return_value, 0, &zpath TSRMLS_CC);
+ spl_instantiate_arg_ex1(Z_OBJCE_P(getThis()), &return_value, 0, &zpath TSRMLS_CC);
subdir = (spl_filesystem_object*)zend_object_store_get_object(return_value TSRMLS_CC);
if (subdir) {
@@ -2214,7 +2215,9 @@ SPL_METHOD(SplFileObject, seek)
spl_filesystem_file_rewind(getThis(), intern TSRMLS_CC);
while(intern->u.file.current_line_num < line_pos) {
- spl_filesystem_file_read_line(getThis(), intern, 1 TSRMLS_CC);
+ if (spl_filesystem_file_read_line(getThis(), intern, 1 TSRMLS_CC) == FAILURE) {
+ break;
+ }
}
} /* }}} */
diff --git a/ext/spl/spl_directory.h b/ext/spl/spl_directory.h
index cce07fd93..b63caad22 100755
--- a/ext/spl/spl_directory.h
+++ b/ext/spl/spl_directory.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_directory.h,v 1.12.2.5.2.10 2008/02/13 12:23:26 helly Exp $ */
+/* $Id: spl_directory.h,v 1.12.2.5.2.11 2008/12/31 11:17:44 sebastian Exp $ */
#ifndef SPL_DIRECTORY_H
#define SPL_DIRECTORY_H
diff --git a/ext/spl/spl_engine.c b/ext/spl/spl_engine.c
index 00bacdf3a..389245566 100755
--- a/ext/spl/spl_engine.c
+++ b/ext/spl/spl_engine.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/spl/spl_engine.h b/ext/spl/spl_engine.h
index d4a9ef47e..6324f216d 100755
--- a/ext/spl/spl_engine.h
+++ b/ext/spl/spl_engine.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_engine.h,v 1.19.2.3.2.2 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: spl_engine.h,v 1.19.2.3.2.3 2008/12/31 11:17:44 sebastian Exp $ */
#ifndef SPL_ENGINE_H
#define SPL_ENGINE_H
diff --git a/ext/spl/spl_exceptions.c b/ext/spl/spl_exceptions.c
index fdbfb0069..21a47afb5 100755
--- a/ext/spl/spl_exceptions.c
+++ b/ext/spl/spl_exceptions.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_exceptions.c,v 1.6.2.1.2.3 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: spl_exceptions.c,v 1.6.2.1.2.4 2008/12/31 11:17:44 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
# include "config.h"
diff --git a/ext/spl/spl_exceptions.h b/ext/spl/spl_exceptions.h
index 9133b7076..ad9cf3af8 100755
--- a/ext/spl/spl_exceptions.h
+++ b/ext/spl/spl_exceptions.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_exceptions.h,v 1.5.2.1.2.2 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: spl_exceptions.h,v 1.5.2.1.2.3 2008/12/31 11:17:44 sebastian Exp $ */
#ifndef SPL_EXCEPTIONS_H
#define SPL_EXCEPTIONS_H
diff --git a/ext/spl/spl_functions.c b/ext/spl/spl_functions.c
index b7bb476ab..9a2faa51e 100755
--- a/ext/spl/spl_functions.c
+++ b/ext/spl/spl_functions.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_functions.c,v 1.28.2.3.2.4 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: spl_functions.c,v 1.28.2.3.2.5 2008/12/31 11:17:44 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/spl/spl_functions.h b/ext/spl/spl_functions.h
index 19529a4c9..fdb73ca7a 100755
--- a/ext/spl/spl_functions.h
+++ b/ext/spl/spl_functions.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_functions.h,v 1.19.2.3.2.3 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: spl_functions.h,v 1.19.2.3.2.4 2008/12/31 11:17:44 sebastian Exp $ */
#ifndef PHP_FUNCTIONS_H
#define PHP_FUNCTIONS_H
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c
index 0160b5042..29b833653 100755
--- a/ext/spl/spl_iterators.c
+++ b/ext/spl/spl_iterators.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_iterators.c,v 1.73.2.30.2.31 2008/03/12 13:24:24 colder Exp $ */
+/* $Id: spl_iterators.c,v 1.73.2.30.2.35 2009/01/20 00:47:01 felipe Exp $ */
#ifdef HAVE_CONFIG_H
# include "config.h"
@@ -1118,6 +1118,9 @@ static inline void spl_dual_it_rewind(spl_dual_it_object *intern TSRMLS_DC)
static inline int spl_dual_it_valid(spl_dual_it_object *intern TSRMLS_DC)
{
+ if (!intern->inner.iterator) {
+ return FAILURE;
+ }
/* FAILURE / SUCCESS */
return intern->inner.iterator->funcs->valid(intern->inner.iterator TSRMLS_CC);
}
@@ -1360,6 +1363,10 @@ SPL_METHOD(RegexIterator, accept)
int subject_len, use_copy, count, result_len;
zval subject_copy, zcount, *replacement;
+ if (intern->current.data == NULL) {
+ RETURN_FALSE;
+ }
+
if (intern->u.regex.flags & REGIT_USE_KEY) {
if (intern->current.key_type == HASH_KEY_IS_LONG) {
subject_len = slprintf(tmp, sizeof(tmp), "%ld", intern->current.int_key);
@@ -2023,6 +2030,7 @@ SPL_METHOD(CachingIterator, __toString)
if (!(intern->u.caching.flags & (CIT_CALL_TOSTRING|CIT_TOSTRING_USE_KEY|CIT_TOSTRING_USE_CURRENT|CIT_TOSTRING_USE_INNER))) {
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, "%s does not fetch string value (see CachingIterator::__construct)", Z_OBJCE_P(getThis())->name);
+ return;
}
if (intern->u.caching.flags & CIT_TOSTRING_USE_KEY) {
if (intern->current.key_type == HASH_KEY_IS_STRING) {
@@ -2059,6 +2067,7 @@ SPL_METHOD(CachingIterator, offsetSet)
if (!(intern->u.caching.flags & CIT_FULL_CACHE)) {
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, "%s does not use a full cache (see CachingIterator::__construct)", Z_OBJCE_P(getThis())->name);
+ return;
}
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz", &arKey, &nKeyLength, &value) == FAILURE) {
@@ -2083,6 +2092,7 @@ SPL_METHOD(CachingIterator, offsetGet)
if (!(intern->u.caching.flags & CIT_FULL_CACHE)) {
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, "%s does not use a full cache (see CachingIterator::__construct)", Z_OBJCE_P(getThis())->name);
+ return;
}
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arKey, &nKeyLength) == FAILURE) {
@@ -2110,6 +2120,7 @@ SPL_METHOD(CachingIterator, offsetUnset)
if (!(intern->u.caching.flags & CIT_FULL_CACHE)) {
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, "%s does not use a full cache (see CachingIterator::__construct)", Z_OBJCE_P(getThis())->name);
+ return;
}
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arKey, &nKeyLength) == FAILURE) {
@@ -2132,6 +2143,7 @@ SPL_METHOD(CachingIterator, offsetExists)
if (!(intern->u.caching.flags & CIT_FULL_CACHE)) {
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, "%s does not use a full cache (see CachingIterator::__construct)", Z_OBJCE_P(getThis())->name);
+ return;
}
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arKey, &nKeyLength) == FAILURE) {
diff --git a/ext/spl/spl_iterators.h b/ext/spl/spl_iterators.h
index 104676911..a062b2ca8 100755
--- a/ext/spl/spl_iterators.h
+++ b/ext/spl/spl_iterators.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_iterators.h,v 1.18.2.7.2.14 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: spl_iterators.h,v 1.18.2.7.2.15 2008/12/31 11:17:44 sebastian Exp $ */
#ifndef SPL_ITERATORS_H
#define SPL_ITERATORS_H
diff --git a/ext/spl/spl_observer.c b/ext/spl/spl_observer.c
index 39a293b0f..d149f80e8 100755
--- a/ext/spl/spl_observer.c
+++ b/ext/spl/spl_observer.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is SplSubject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_observer.c,v 1.2.2.6.2.4 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: spl_observer.c,v 1.2.2.6.2.5 2008/12/31 11:17:44 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
# include "config.h"
diff --git a/ext/spl/spl_observer.h b/ext/spl/spl_observer.h
index a1d7d5621..8a991a779 100755
--- a/ext/spl/spl_observer.h
+++ b/ext/spl/spl_observer.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_observer.h,v 1.2.2.2.2.2 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: spl_observer.h,v 1.2.2.2.2.3 2008/12/31 11:17:44 sebastian Exp $ */
#ifndef SPL_OBSERVER_H
#define SPL_OBSERVER_H
diff --git a/ext/spl/spl_sxe.c b/ext/spl/spl_sxe.c
index e5fda429f..41b082435 100755
--- a/ext/spl/spl_sxe.c
+++ b/ext/spl/spl_sxe.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_sxe.c,v 1.8.2.5.2.3 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: spl_sxe.c,v 1.8.2.5.2.4 2008/12/31 11:17:44 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
# include "config.h"
diff --git a/ext/spl/spl_sxe.h b/ext/spl/spl_sxe.h
index 64ff2d225..209e5f6ad 100755
--- a/ext/spl/spl_sxe.h
+++ b/ext/spl/spl_sxe.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_sxe.h,v 1.4.2.1.2.2 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: spl_sxe.h,v 1.4.2.1.2.3 2008/12/31 11:17:44 sebastian Exp $ */
#ifndef SPL_SXE_H
#define SPL_SXE_H
diff --git a/ext/spl/tests/arrayObject___construct_basic1.phpt b/ext/spl/tests/arrayObject___construct_basic1.phpt
new file mode 100644
index 000000000..0d690fcda
--- /dev/null
+++ b/ext/spl/tests/arrayObject___construct_basic1.phpt
@@ -0,0 +1,37 @@
+--TEST--
+SPL: ArrayObject::__construct basic usage.
+--FILE--
+<?php
+echo "--> No arguments:\n";
+var_dump(new ArrayObject());
+
+echo "--> Object argument:\n";
+$a = new stdClass;
+$a->p = 'hello';
+var_dump(new ArrayObject($a));
+
+echo "--> Array argument:\n";
+var_dump(new ArrayObject(array('key1' => 'val1')));
+
+echo "--> Nested ArrayObject argument:\n";
+var_dump(new ArrayObject(new ArrayObject($a)));
+?>
+--EXPECTF--
+--> No arguments:
+object(ArrayObject)#%d (0) {
+}
+--> Object argument:
+object(ArrayObject)#%d (1) {
+ ["p"]=>
+ string(5) "hello"
+}
+--> Array argument:
+object(ArrayObject)#%d (1) {
+ ["key1"]=>
+ string(4) "val1"
+}
+--> Nested ArrayObject argument:
+object(ArrayObject)#%d (1) {
+ ["p"]=>
+ string(5) "hello"
+}
diff --git a/ext/spl/tests/arrayObject___construct_basic2.phpt b/ext/spl/tests/arrayObject___construct_basic2.phpt
new file mode 100644
index 000000000..5d6d7ccfd
--- /dev/null
+++ b/ext/spl/tests/arrayObject___construct_basic2.phpt
@@ -0,0 +1,98 @@
+--TEST--
+SPL: ArrayObject::__construct basic usage.
+--FILE--
+<?php
+class C {
+ public $prop = 'C::prop.orig';
+}
+
+class MyArrayObject extends ArrayObject {
+ public $prop = 'MyArrayObject::prop.orig';
+}
+
+echo "--> Access prop on instance of ArrayObject:\n";
+$c = new C;
+$ao = new ArrayObject($c);
+testAccess($c, $ao);
+
+echo "\n--> Access prop on instance of MyArrayObject:\n";
+$c = new C;
+$ao = new MyArrayObject($c);
+testAccess($c, $ao);
+
+function testAccess($c, $ao) {
+ echo " - Iteration:\n";
+ foreach ($ao as $key=>$value) {
+ echo " $key=>$value\n";
+ }
+
+ echo " - Read:\n";
+ @var_dump($ao->prop, $ao['prop']);
+
+ echo " - Write:\n";
+ $ao->prop = 'changed1';
+ $ao['prop'] = 'changed2';
+ var_dump($ao->prop, $ao['prop']);
+
+ echo " - Isset:\n";
+ var_dump(isset($ao->prop), isset($ao['prop']));
+
+ echo " - Unset:\n";
+ unset($ao->prop);
+ unset($ao['prop']);
+ var_dump($ao->prop, $ao['prop']);
+
+ echo " - After:\n";
+ var_dump($ao, $c);
+}
+?>
+--EXPECTF--
+--> Access prop on instance of ArrayObject:
+ - Iteration:
+ prop=>C::prop.orig
+ - Read:
+NULL
+string(12) "C::prop.orig"
+ - Write:
+string(8) "changed1"
+string(8) "changed2"
+ - Isset:
+bool(true)
+bool(true)
+ - Unset:
+
+Notice: Undefined property: ArrayObject::$prop in %s on line 40
+
+Notice: Undefined index: prop in %s on line 40
+NULL
+NULL
+ - After:
+object(ArrayObject)#%d (0) {
+}
+object(C)#%d (0) {
+}
+
+--> Access prop on instance of MyArrayObject:
+ - Iteration:
+ prop=>C::prop.orig
+ - Read:
+string(24) "MyArrayObject::prop.orig"
+string(12) "C::prop.orig"
+ - Write:
+string(8) "changed1"
+string(8) "changed2"
+ - Isset:
+bool(true)
+bool(true)
+ - Unset:
+
+Notice: Undefined property: MyArrayObject::$prop in %s on line 40
+
+Notice: Undefined index: prop in %s on line 40
+NULL
+NULL
+ - After:
+object(MyArrayObject)#%d (0) {
+}
+object(C)#%d (0) {
+} \ No newline at end of file
diff --git a/ext/spl/tests/arrayObject___construct_basic3.phpt b/ext/spl/tests/arrayObject___construct_basic3.phpt
new file mode 100644
index 000000000..21db65f1b
--- /dev/null
+++ b/ext/spl/tests/arrayObject___construct_basic3.phpt
@@ -0,0 +1,99 @@
+--TEST--
+SPL: ArrayObject::__construct basic usage with ArrayObject::STD_PROP_LIST.
+--FILE--
+<?php
+class C {
+ public $prop = 'C::prop.orig';
+}
+
+class MyArrayObject extends ArrayObject {
+ public $prop = 'MyArrayObject::prop.orig';
+}
+
+echo "\n--> Access prop on instance of ArrayObject with ArrayObject::STD_PROP_LIST:\n";
+$c = new C;
+$ao = new ArrayObject($c, ArrayObject::STD_PROP_LIST);
+testAccess($c, $ao);
+
+echo "\n--> Access prop on instance of MyArrayObject with ArrayObject::STD_PROP_LIST:\n";
+$c = new C;
+$ao = new MyArrayObject($c, ArrayObject::STD_PROP_LIST);
+testAccess($c, $ao);
+
+function testAccess($c, $ao) {
+ echo " - Iteration:\n";
+ foreach ($ao as $key=>$value) {
+ echo " $key=>$value\n";
+ }
+
+ echo " - Read:\n";
+ @var_dump($ao->prop, $ao['prop']);
+
+ echo " - Write:\n";
+ $ao->prop = 'changed1';
+ $ao['prop'] = 'changed2';
+ var_dump($ao->prop, $ao['prop']);
+
+ echo " - Isset:\n";
+ var_dump(isset($ao->prop), isset($ao['prop']));
+
+ echo " - Unset:\n";
+ unset($ao->prop);
+ unset($ao['prop']);
+ var_dump($ao->prop, $ao['prop']);
+
+ echo " - After:\n";
+ var_dump($ao, $c);
+}
+?>
+--EXPECTF--
+
+--> Access prop on instance of ArrayObject with ArrayObject::STD_PROP_LIST:
+ - Iteration:
+ prop=>C::prop.orig
+ - Read:
+NULL
+string(12) "C::prop.orig"
+ - Write:
+string(8) "changed1"
+string(8) "changed2"
+ - Isset:
+bool(true)
+bool(true)
+ - Unset:
+
+Notice: Undefined property: ArrayObject::$prop in %s on line 40
+
+Notice: Undefined index: prop in %s on line 40
+NULL
+NULL
+ - After:
+object(ArrayObject)#%d (0) {
+}
+object(C)#%d (0) {
+}
+
+--> Access prop on instance of MyArrayObject with ArrayObject::STD_PROP_LIST:
+ - Iteration:
+ prop=>C::prop.orig
+ - Read:
+string(24) "MyArrayObject::prop.orig"
+string(12) "C::prop.orig"
+ - Write:
+string(8) "changed1"
+string(8) "changed2"
+ - Isset:
+bool(true)
+bool(true)
+ - Unset:
+
+Notice: Undefined property: MyArrayObject::$prop in %s on line 40
+
+Notice: Undefined index: prop in %s on line 40
+NULL
+NULL
+ - After:
+object(MyArrayObject)#%d (0) {
+}
+object(C)#%d (0) {
+} \ No newline at end of file
diff --git a/ext/spl/tests/arrayObject___construct_basic4.phpt b/ext/spl/tests/arrayObject___construct_basic4.phpt
new file mode 100644
index 000000000..bf7c355ea
--- /dev/null
+++ b/ext/spl/tests/arrayObject___construct_basic4.phpt
@@ -0,0 +1,103 @@
+--TEST--
+SPL: ArrayObject::__construct basic usage with ArrayObject::ARRAY_AS_PROPS.
+--XFAIL--
+Will fail until the fix to bug 45622 is backported from PHP53 to PHP52.
+--FILE--
+<?php
+class C {
+ public $prop = 'C::prop.orig';
+}
+
+class MyArrayObject extends ArrayObject {
+ public $prop = 'MyArrayObject::prop.orig';
+}
+
+echo "\n--> Access prop on instance of ArrayObject with ArrayObject::ARRAY_AS_PROPS:\n";
+$c = new C;
+$ao = new ArrayObject($c, ArrayObject::ARRAY_AS_PROPS);
+testAccess($c, $ao);
+
+echo "\n--> Access prop on instance of MyArrayObject with ArrayObject::ARRAY_AS_PROPS:\n";
+$c = new C;
+$ao = new MyArrayObject($c, ArrayObject::ARRAY_AS_PROPS);
+testAccess($c, $ao);
+
+function testAccess($c, $ao) {
+ echo " - Iteration:\n";
+ foreach ($ao as $key=>$value) {
+ echo " $key=>$value\n";
+ }
+
+ echo " - Read:\n";
+ @var_dump($ao->prop, $ao['prop']);
+
+ echo " - Write:\n";
+ $ao->prop = 'changed1';
+ $ao['prop'] = 'changed2';
+ var_dump($ao->prop, $ao['prop']);
+
+ echo " - Isset:\n";
+ var_dump(isset($ao->prop), isset($ao['prop']));
+
+ echo " - Unset:\n";
+ unset($ao->prop);
+ unset($ao['prop']);
+ var_dump($ao->prop, $ao['prop']);
+
+ echo " - After:\n";
+ var_dump($ao, $c);
+}
+?>
+--EXPECTF--
+
+--> Access prop on instance of ArrayObject with ArrayObject::ARRAY_AS_PROPS:
+ - Iteration:
+ prop=>C::prop.orig
+ - Read:
+string(12) "C::prop.orig"
+string(12) "C::prop.orig"
+ - Write:
+string(8) "changed2"
+string(8) "changed2"
+ - Isset:
+bool(true)
+bool(true)
+ - Unset:
+
+Notice: Undefined index: prop in %s on line 39
+
+Notice: Undefined index: prop in %s on line 40
+
+Notice: Undefined index: prop in %s on line 40
+NULL
+NULL
+ - After:
+object(ArrayObject)#%d (0) {
+}
+object(C)#%d (0) {
+}
+
+--> Access prop on instance of MyArrayObject with ArrayObject::ARRAY_AS_PROPS:
+ - Iteration:
+ prop=>C::prop.orig
+ - Read:
+string(24) "MyArrayObject::prop.orig"
+string(12) "C::prop.orig"
+ - Write:
+string(8) "changed1"
+string(8) "changed2"
+ - Isset:
+bool(true)
+bool(true)
+ - Unset:
+
+Notice: Undefined index: prop in %s on line 40
+
+Notice: Undefined index: prop in %s on line 40
+NULL
+NULL
+ - After:
+object(MyArrayObject)#%d (0) {
+}
+object(C)#%d (0) {
+}
diff --git a/ext/spl/tests/arrayObject___construct_basic5.phpt b/ext/spl/tests/arrayObject___construct_basic5.phpt
new file mode 100644
index 000000000..0254b70d0
--- /dev/null
+++ b/ext/spl/tests/arrayObject___construct_basic5.phpt
@@ -0,0 +1,103 @@
+--TEST--
+SPL: ArrayObject::__construct basic usage with ArrayObject::STD_PROP_LIST|ArrayObject::ARRAY_AS_PROPS.
+--XFAIL--
+Will fail unless the PHP53 fix to bug 45622 is backported to PHP52
+--FILE--
+<?php
+class C {
+ public $prop = 'C::prop.orig';
+}
+
+class MyArrayObject extends ArrayObject {
+ public $prop = 'MyArrayObject::prop.orig';
+}
+
+echo "\n--> Access prop on instance of ArrayObject with ArrayObject::STD_PROP_LIST|ArrayObject::ARRAY_AS_PROPS:\n";
+$c = new C;
+$ao = new ArrayObject($c, ArrayObject::STD_PROP_LIST|ArrayObject::ARRAY_AS_PROPS);
+testAccess($c, $ao);
+
+echo "\n--> Access prop on instance of MyArrayObject with ArrayObject::STD_PROP_LIST|ArrayObject::ARRAY_AS_PROPS:\n";
+$c = new C;
+$ao = new MyArrayObject($c, ArrayObject::STD_PROP_LIST|ArrayObject::ARRAY_AS_PROPS);
+testAccess($c, $ao);
+
+function testAccess($c, $ao) {
+ echo " - Iteration:\n";
+ foreach ($ao as $key=>$value) {
+ echo " $key=>$value\n";
+ }
+
+ echo " - Read:\n";
+ @var_dump($ao->prop, $ao['prop']);
+
+ echo " - Write:\n";
+ $ao->prop = 'changed1';
+ $ao['prop'] = 'changed2';
+ var_dump($ao->prop, $ao['prop']);
+
+ echo " - Isset:\n";
+ var_dump(isset($ao->prop), isset($ao['prop']));
+
+ echo " - Unset:\n";
+ unset($ao->prop);
+ unset($ao['prop']);
+ var_dump($ao->prop, $ao['prop']);
+
+ echo " - After:\n";
+ var_dump($ao, $c);
+}
+?>
+--EXPECTF--
+
+--> Access prop on instance of ArrayObject with ArrayObject::STD_PROP_LIST|ArrayObject::ARRAY_AS_PROPS:
+ - Iteration:
+ prop=>C::prop.orig
+ - Read:
+string(12) "C::prop.orig"
+string(12) "C::prop.orig"
+ - Write:
+string(8) "changed2"
+string(8) "changed2"
+ - Isset:
+bool(true)
+bool(true)
+ - Unset:
+
+Notice: Undefined index: prop in %s on line 39
+
+Notice: Undefined index: prop in %s on line 40
+
+Notice: Undefined index: prop in %s on line 40
+NULL
+NULL
+ - After:
+object(ArrayObject)#%d (0) {
+}
+object(C)#%d (0) {
+}
+
+--> Access prop on instance of MyArrayObject with ArrayObject::STD_PROP_LIST|ArrayObject::ARRAY_AS_PROPS:
+ - Iteration:
+ prop=>C::prop.orig
+ - Read:
+string(24) "MyArrayObject::prop.orig"
+string(12) "C::prop.orig"
+ - Write:
+string(8) "changed1"
+string(8) "changed2"
+ - Isset:
+bool(true)
+bool(true)
+ - Unset:
+
+Notice: Undefined index: prop in %s on line 40
+
+Notice: Undefined index: prop in %s on line 40
+NULL
+NULL
+ - After:
+object(MyArrayObject)#%d (0) {
+}
+object(C)#%d (0) {
+}
diff --git a/ext/spl/tests/arrayObject___construct_basic6.phpt b/ext/spl/tests/arrayObject___construct_basic6.phpt
new file mode 100644
index 000000000..150865d5a
--- /dev/null
+++ b/ext/spl/tests/arrayObject___construct_basic6.phpt
@@ -0,0 +1,50 @@
+--TEST--
+SPL: ArrayObject::__construct: check impact of ArrayObject::STD_PROP_LIST on var_dump.
+--FILE--
+<?php
+class MyArrayObject extends ArrayObject {
+ private $priv1 = 'secret1';
+ public $pub1 = 'public1';
+}
+
+$ao = new ArrayObject(array(1,2,3));
+$ao->p = 1;
+var_dump($ao);
+
+$ao = new ArrayObject(array(1,2,3), ArrayObject::STD_PROP_LIST);
+$ao->p = 1;
+var_dump($ao);
+
+$ao = new MyArrayObject(array(1,2,3));
+var_dump($ao);
+
+$ao = new MyArrayObject(array(1,2,3), ArrayObject::STD_PROP_LIST);
+var_dump($ao);
+?>
+--EXPECTF--
+object(ArrayObject)#%d (3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+}
+object(ArrayObject)#%d (1) {
+ ["p"]=>
+ int(1)
+}
+object(MyArrayObject)#%d (3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+}
+object(MyArrayObject)#%d (2) {
+ ["priv1:private"]=>
+ string(7) "secret1"
+ ["pub1"]=>
+ string(7) "public1"
+} \ No newline at end of file
diff --git a/ext/spl/tests/arrayObject___construct_error1.phpt b/ext/spl/tests/arrayObject___construct_error1.phpt
new file mode 100644
index 000000000..21c312d2d
--- /dev/null
+++ b/ext/spl/tests/arrayObject___construct_error1.phpt
@@ -0,0 +1,25 @@
+--TEST--
+SPL: ArrayObject::__construct with bad iterator.
+--FILE--
+<?php
+echo "Bad iterator type:\n";
+$a = new stdClass;
+$a->p = 1;
+try {
+ var_dump(new ArrayObject($a, 0, "Exception"));
+} catch (InvalidArgumentException $e) {
+ echo $e->getMessage() . "(" . $e->getLine() . ")\n";
+}
+
+echo "Non-existent class:\n";
+try {
+ var_dump(new ArrayObject(new stdClass, 0, "nonExistentClassName"));
+} catch (InvalidArgumentException $e) {
+ echo $e->getMessage() . "(" . $e->getLine() . ")\n";
+}
+?>
+--EXPECTF--
+Bad iterator type:
+ArrayObject::__construct() expects parameter 3 to be a class name derived from Iterator, 'Exception' given(6)
+Non-existent class:
+ArrayObject::__construct() expects parameter 3 to be a class name derived from Iterator, 'nonExistentClassName' given(13)
diff --git a/ext/spl/tests/arrayObject___construct_error2.phpt b/ext/spl/tests/arrayObject___construct_error2.phpt
new file mode 100644
index 000000000..80b68d6b8
--- /dev/null
+++ b/ext/spl/tests/arrayObject___construct_error2.phpt
@@ -0,0 +1,22 @@
+--TEST--
+SPL: ArrayObject::__construct with too many arguments.
+--FILE--
+<?php
+echo "Too many arguments:\n";
+Class C implements Iterator {
+ function current() {}
+ function next() {}
+ function key() {}
+ function valid() {}
+ function rewind() {}
+}
+
+try {
+ var_dump(new ArrayObject(new stdClass, 0, "C", "extra"));
+} catch (InvalidArgumentException $e) {
+ echo $e->getMessage() . "(" . $e->getLine() . ")\n";
+}
+?>
+--EXPECTF--
+Too many arguments:
+ArrayObject::__construct() expects at most 3 parameters, 4 given(12) \ No newline at end of file
diff --git a/ext/spl/tests/arrayObject_asort_basic1.phpt b/ext/spl/tests/arrayObject_asort_basic1.phpt
new file mode 100644
index 000000000..4422f28ed
--- /dev/null
+++ b/ext/spl/tests/arrayObject_asort_basic1.phpt
@@ -0,0 +1,42 @@
+--TEST--
+SPL: Test ArrayObject::asort() function : basic functionality with array based store
+--FILE--
+<?php
+/* Prototype : int ArrayObject::asort()
+ * Description: proto int ArrayIterator::asort()
+ * Sort the entries by values.
+ * Source code: ext/spl/spl_array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing ArrayObject::asort() : basic functionality ***\n";
+
+$ao1 = new ArrayObject(array(4,2,3));
+$ao2 = new ArrayObject(array('a'=>4,'b'=>2,'c'=>3));
+var_dump($ao1->asort());
+var_dump($ao1);
+var_dump($ao2->asort('blah'));
+var_dump($ao2);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ArrayObject::asort() : basic functionality ***
+bool(true)
+object(ArrayObject)#%d (3) {
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [0]=>
+ int(4)
+}
+bool(true)
+object(ArrayObject)#%d (3) {
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["a"]=>
+ int(4)
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/spl/tests/arrayObject_asort_basic2.phpt b/ext/spl/tests/arrayObject_asort_basic2.phpt
new file mode 100644
index 000000000..f411c9e7d
--- /dev/null
+++ b/ext/spl/tests/arrayObject_asort_basic2.phpt
@@ -0,0 +1,49 @@
+--TEST--
+SPL: Test ArrayObject::asort() function : basic functionality with object based store
+--FILE--
+<?php
+/* Prototype : int ArrayObject::asort()
+ * Description: proto int ArrayIterator::asort()
+ * Sort the entries by values.
+ * Source code: ext/spl/spl_array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing ArrayObject::asort() : basic functionality ***\n";
+Class C {
+ public $prop1 = 'x';
+ public $prop2 = 'z';
+ private $prop3 = 'a';
+ public $prop4 = 'x';
+}
+
+$c = new C;
+$ao1 = new ArrayObject($c);
+var_dump($ao1->asort());
+var_dump($ao1, $c);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ArrayObject::asort() : basic functionality ***
+bool(true)
+object(ArrayObject)#%d (4) {
+ ["prop3:private"]=>
+ string(1) "a"
+ ["prop1"]=>
+ string(1) "x"
+ ["prop4"]=>
+ string(1) "x"
+ ["prop2"]=>
+ string(1) "z"
+}
+object(C)#%d (4) {
+ ["prop3:private"]=>
+ string(1) "a"
+ ["prop1"]=>
+ string(1) "x"
+ ["prop4"]=>
+ string(1) "x"
+ ["prop2"]=>
+ string(1) "z"
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/spl/tests/arrayObject_clone_basic1.phpt b/ext/spl/tests/arrayObject_clone_basic1.phpt
new file mode 100644
index 000000000..cc72e4ac3
--- /dev/null
+++ b/ext/spl/tests/arrayObject_clone_basic1.phpt
@@ -0,0 +1,42 @@
+--TEST--
+SPL: Cloning an instance of ArrayObject which wraps an array.
+--FILE--
+<?php
+$a = array(1,2);
+$aa1 = new ArrayObject($a);
+$a['p1'] = 'new element added to a before clone';
+
+$aa2 = clone $aa1;
+
+$a['p2'] = 'new element added to a after clone';
+$aa1['new.aa1'] = 'new element added to aa1';
+$aa2['new.aa2'] = 'new element added to aa2';
+var_dump($a, $aa1, $aa2);
+?>
+--EXPECTF--
+array(4) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ ["p1"]=>
+ string(35) "new element added to a before clone"
+ ["p2"]=>
+ string(34) "new element added to a after clone"
+}
+object(ArrayObject)#%d (3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ ["new.aa1"]=>
+ string(24) "new element added to aa1"
+}
+object(ArrayObject)#%d (3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ ["new.aa2"]=>
+ string(24) "new element added to aa2"
+} \ No newline at end of file
diff --git a/ext/spl/tests/arrayObject_clone_basic2.phpt b/ext/spl/tests/arrayObject_clone_basic2.phpt
new file mode 100644
index 000000000..908907c34
--- /dev/null
+++ b/ext/spl/tests/arrayObject_clone_basic2.phpt
@@ -0,0 +1,40 @@
+--TEST--
+SPL: Cloning an instance of ArrayObject which wraps an object.
+--FILE--
+<?php
+class C { }
+
+$c = new C;
+$ao1 = new ArrayObject($c);
+$c->p1 = 'new prop added to c before clone';
+
+$ao2 = clone $ao1;
+
+$c->p2 = 'new prop added to c after clone';
+$ao1['new.ao1'] = 'new element added to ao1';
+$ao2['new.ao2'] = 'new element added to ao2';
+var_dump($c, $ao1, $ao2);
+?>
+--EXPECTF--
+object(C)#%d (3) {
+ ["p1"]=>
+ string(32) "new prop added to c before clone"
+ ["p2"]=>
+ string(31) "new prop added to c after clone"
+ ["new.ao1"]=>
+ string(24) "new element added to ao1"
+}
+object(ArrayObject)#%d (3) {
+ ["p1"]=>
+ string(32) "new prop added to c before clone"
+ ["p2"]=>
+ string(31) "new prop added to c after clone"
+ ["new.ao1"]=>
+ string(24) "new element added to ao1"
+}
+object(ArrayObject)#%d (2) {
+ ["p1"]=>
+ string(32) "new prop added to c before clone"
+ ["new.ao2"]=>
+ string(24) "new element added to ao2"
+}
diff --git a/ext/spl/tests/arrayObject_clone_basic3.phpt b/ext/spl/tests/arrayObject_clone_basic3.phpt
new file mode 100644
index 000000000..092bdde47
--- /dev/null
+++ b/ext/spl/tests/arrayObject_clone_basic3.phpt
@@ -0,0 +1,68 @@
+--TEST--
+SPL: Cloning nested ArrayObjects.
+--FILE--
+<?php
+class C {
+ public $p = 'C::p.orig';
+}
+
+$wrappedObject = new C;
+$innerArrayObject = new ArrayObject($wrappedObject);
+
+$outerArrayObject = new ArrayObject($innerArrayObject);
+
+$wrappedObject->dynamic1 = 'new prop added to $wrappedObject before clone';
+$clonedOuterArrayObject = clone $outerArrayObject;
+$wrappedObject->dynamic2 = 'new prop added to $wrappedObject after clone';
+
+$innerArrayObject['new.iAO'] = 'new element added $innerArrayObject';
+$outerArrayObject['new.oAO'] = 'new element added to $outerArrayObject';
+$clonedOuterArrayObject['new.coAO'] = 'new element added to $clonedOuterArrayObject';
+
+var_dump($wrappedObject, $innerArrayObject, $outerArrayObject, $clonedOuterArrayObject);
+?>
+--EXPECTF--
+object(C)#%d (5) {
+ ["p"]=>
+ string(9) "C::p.orig"
+ ["dynamic1"]=>
+ string(45) "new prop added to $wrappedObject before clone"
+ ["dynamic2"]=>
+ string(44) "new prop added to $wrappedObject after clone"
+ ["new.iAO"]=>
+ string(35) "new element added $innerArrayObject"
+ ["new.oAO"]=>
+ string(38) "new element added to $outerArrayObject"
+}
+object(ArrayObject)#%d (5) {
+ ["p"]=>
+ string(9) "C::p.orig"
+ ["dynamic1"]=>
+ string(45) "new prop added to $wrappedObject before clone"
+ ["dynamic2"]=>
+ string(44) "new prop added to $wrappedObject after clone"
+ ["new.iAO"]=>
+ string(35) "new element added $innerArrayObject"
+ ["new.oAO"]=>
+ string(38) "new element added to $outerArrayObject"
+}
+object(ArrayObject)#%d (5) {
+ ["p"]=>
+ string(9) "C::p.orig"
+ ["dynamic1"]=>
+ string(45) "new prop added to $wrappedObject before clone"
+ ["dynamic2"]=>
+ string(44) "new prop added to $wrappedObject after clone"
+ ["new.iAO"]=>
+ string(35) "new element added $innerArrayObject"
+ ["new.oAO"]=>
+ string(38) "new element added to $outerArrayObject"
+}
+object(ArrayObject)#%d (3) {
+ ["p"]=>
+ string(9) "C::p.orig"
+ ["dynamic1"]=>
+ string(45) "new prop added to $wrappedObject before clone"
+ ["new.coAO"]=>
+ string(44) "new element added to $clonedOuterArrayObject"
+} \ No newline at end of file
diff --git a/ext/spl/tests/arrayObject_count_basic1.phpt b/ext/spl/tests/arrayObject_count_basic1.phpt
new file mode 100644
index 000000000..63686b063
--- /dev/null
+++ b/ext/spl/tests/arrayObject_count_basic1.phpt
@@ -0,0 +1,80 @@
+--TEST--
+SPL: ArrayObject::count() and ArrayIterator::count() basic functionality.
+--FILE--
+==ArrayObject==
+<?php
+class C extends ArrayObject {
+ function count() {
+ return 99;
+ }
+}
+
+$c = new C;
+$ao = new ArrayObject;
+
+var_dump(count($c), count($ao));
+
+$c[] = 'a';
+$ao[] = 'a';
+var_dump(count($c), count($ao));
+
+$c[] = 'b';
+$ao[] = 'b';
+var_dump(count($c), count($ao));
+
+unset($c[0]);
+unset($ao[0]);
+var_dump($c->count(), $ao->count());
+
+//Extra args are ignored.
+var_dump($ao->count('blah'));
+?>
+==ArrayIterator==
+<?php
+class D extends ArrayIterator {
+ function count() {
+ return 99;
+ }
+}
+
+$c = new D;
+$ao = new ArrayIterator;
+
+var_dump(count($c), count($ao));
+
+$c[] = 'a';
+$ao[] = 'a';
+var_dump(count($c), count($ao));
+
+$c[] = 'b';
+$ao[] = 'b';
+var_dump(count($c), count($ao));
+
+unset($c[0]);
+unset($ao[0]);
+var_dump($c->count(), $ao->count());
+
+//Extra args are ignored.
+var_dump($ao->count('blah'));
+?>
+--EXPECTF--
+==ArrayObject==
+int(99)
+int(0)
+int(99)
+int(1)
+int(99)
+int(2)
+int(99)
+int(1)
+int(1)
+==ArrayIterator==
+int(99)
+int(0)
+int(99)
+int(1)
+int(99)
+int(2)
+int(99)
+int(1)
+int(1) \ No newline at end of file
diff --git a/ext/spl/tests/arrayObject_exchangeArray_basic3.phpt b/ext/spl/tests/arrayObject_exchangeArray_basic3.phpt
new file mode 100644
index 000000000..791ecd45b
--- /dev/null
+++ b/ext/spl/tests/arrayObject_exchangeArray_basic3.phpt
@@ -0,0 +1,121 @@
+--TEST--
+SPL: ArrayObject::exchangeArray() basic usage with object as underlying data store.
+--XFAIL--
+Failing in 5.2 due to http://thread.gmane.org/gmane.comp.php.devel/52545/focus=52559
+--FILE--
+<?php
+
+class C {
+ public $pub1 = 'public1';
+}
+
+echo "--> exchangeArray() with objects:\n";
+$original = new C;
+$ao = new ArrayObject($original);
+$swapIn = new C;
+try {
+ $copy = $ao->exchangeArray($swapIn);
+ $copy['addedToCopy'] = 'added To Copy';
+} catch (Exception $e) {
+ echo "Exception:" . $e->getMessage() . "\n";
+}
+$swapIn->addedToSwapIn = 'added To Swap-In';
+$original->addedToOriginal = 'added To Original';
+var_dump($ao, $original, $swapIn, $copy);
+
+
+echo "\n\n--> exchangeArray() with no arg:\n";
+unset($original, $ao, $swapIn, $copy);
+$original = new C;
+$ao = new ArrayObject($original);
+try {
+ $copy = $ao->exchangeArray();
+ $copy['addedToCopy'] = 'added To Copy';
+} catch (Exception $e) {
+ echo "Exception:" . $e->getMessage() . "\n";
+}
+$original->addedToOriginal = 'added To Original';
+var_dump($ao, $original, $copy);
+
+echo "\n\n--> exchangeArray() with bad arg type:\n";
+unset($original, $ao, $swapIn, $copy);
+$original = new C;
+$ao = new ArrayObject($original);
+try {
+ $copy = $ao->exchangeArray(null);
+ $copy['addedToCopy'] = 'added To Copy';
+} catch (Exception $e) {
+ echo "Exception:" . $e->getMessage() . "\n";
+}
+$original->addedToOriginal = 'added To Original';
+var_dump($ao, $original, $copy);
+
+?>
+--EXPECTF--
+--> exchangeArray() with objects:
+object(ArrayObject)#%d (2) {
+ ["pub1"]=>
+ string(7) "public1"
+ ["addedToSwapIn"]=>
+ string(16) "added To Swap-In"
+}
+object(C)#%d (2) {
+ ["pub1"]=>
+ string(7) "public1"
+ ["addedToOriginal"]=>
+ string(17) "added To Original"
+}
+object(C)#%d (2) {
+ ["pub1"]=>
+ string(7) "public1"
+ ["addedToSwapIn"]=>
+ string(16) "added To Swap-In"
+}
+array(2) {
+ ["pub1"]=>
+ string(7) "public1"
+ ["addedToCopy"]=>
+ string(13) "added To Copy"
+}
+
+
+--> exchangeArray() with no arg:
+
+Warning: ArrayObject::exchangeArray() expects exactly 1 parameter, 0 given in %s on line 27
+object(ArrayObject)#%d (2) {
+ ["pub1"]=>
+ string(7) "public1"
+ ["addedToOriginal"]=>
+ string(17) "added To Original"
+}
+object(C)#%d (2) {
+ ["pub1"]=>
+ string(7) "public1"
+ ["addedToOriginal"]=>
+ string(17) "added To Original"
+}
+array(2) {
+ ["pub1"]=>
+ string(7) "public1"
+ ["addedToCopy"]=>
+ string(13) "added To Copy"
+}
+
+
+--> exchangeArray() with bad arg type:
+Exception:Passed variable is not an array or object, using empty array instead
+
+Notice: Undefined variable: copy in %s on line 46
+object(ArrayObject)#%d (2) {
+ ["pub1"]=>
+ string(7) "public1"
+ ["addedToOriginal"]=>
+ string(17) "added To Original"
+}
+object(C)#%d (2) {
+ ["pub1"]=>
+ string(7) "public1"
+ ["addedToOriginal"]=>
+ string(17) "added To Original"
+}
+NULL
diff --git a/ext/spl/tests/arrayObject_getFlags_basic1.phpt b/ext/spl/tests/arrayObject_getFlags_basic1.phpt
new file mode 100644
index 000000000..b55e99310
--- /dev/null
+++ b/ext/spl/tests/arrayObject_getFlags_basic1.phpt
@@ -0,0 +1,25 @@
+--TEST--
+SPL: ArrayObject::getFlags() basic usage
+--FILE--
+<?php
+$ao = new ArrayObject(new ArrayObject(new stdClass));
+var_dump($ao->getFlags());
+
+$ao = new ArrayObject(new ArrayObject(array(1,2,3)), ArrayObject::STD_PROP_LIST);
+var_dump($ao->getFlags());
+
+$ao = new ArrayObject(new ArrayIterator(new ArrayObject()), ArrayObject::ARRAY_AS_PROPS);
+var_dump($ao->getFlags());
+
+$ao = new ArrayObject(new ArrayObject(), ArrayObject::STD_PROP_LIST|ArrayObject::ARRAY_AS_PROPS);
+var_dump($ao->getFlags());
+
+$cao = clone $ao;
+var_dump($cao->getFlags());
+?>
+--EXPECTF--
+int(0)
+int(1)
+int(2)
+int(3)
+int(3) \ No newline at end of file
diff --git a/ext/spl/tests/arrayObject_getFlags_basic2.phpt b/ext/spl/tests/arrayObject_getFlags_basic2.phpt
new file mode 100644
index 000000000..e171d79a0
--- /dev/null
+++ b/ext/spl/tests/arrayObject_getFlags_basic2.phpt
@@ -0,0 +1,24 @@
+--TEST--
+SPL: ArrayObject::getFlags() - ensure flags are passed on to nested array objects and iterators.
+--FILE--
+<?php
+$ao = new ArrayObject(array(), ArrayObject::STD_PROP_LIST|ArrayObject::ARRAY_AS_PROPS);
+var_dump($ao->getFlags());
+
+$ao2 = new ArrayObject($ao);
+var_dump($ao2->getFlags());
+var_dump($ao2->getIterator()->getFlags());
+
+$ai = new ArrayIterator($ao);
+var_dump($ai->getFlags());
+
+$ao2 = new ArrayObject($ao, 0);
+var_dump($ao2->getFlags());
+
+?>
+--EXPECTF--
+int(3)
+int(3)
+int(3)
+int(3)
+int(0) \ No newline at end of file
diff --git a/ext/spl/tests/arrayObject_getIteratorClass_basic1.phpt b/ext/spl/tests/arrayObject_getIteratorClass_basic1.phpt
new file mode 100644
index 000000000..02186d287
--- /dev/null
+++ b/ext/spl/tests/arrayObject_getIteratorClass_basic1.phpt
@@ -0,0 +1,104 @@
+--TEST--
+SPL: ArrayObject::getIteratorClass and ArrayObject::setIteratorClass basic functionality
+--FILE--
+<?php
+class MyIterator extends ArrayIterator {
+
+ function __construct() {
+ $args = func_get_args();
+ echo " In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+
+ function rewind() {
+ $args = func_get_args();
+ echo " In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ return parent::rewind();
+ }
+
+ function valid() {
+ $args = func_get_args();
+ echo " In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ return parent::valid();
+ }
+
+ function current() {
+ $args = func_get_args();
+ echo " In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ return parent::current();
+ }
+
+ function next() {
+ $args = func_get_args();
+ echo " In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ return parent::next();
+ }
+
+ function key() {
+ $args = func_get_args();
+ echo " In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ return parent::key();
+ }
+}
+
+$ao = new ArrayObject(array('a'=>1,'b'=>2,'c'=>3), 0, "MyIterator");
+
+echo "--> Access using MyIterator:\n";
+var_dump($ao->getIteratorClass());
+var_dump($ao->getIterator());
+foreach($ao as $key=>$value) {
+ echo " $key=>$value\n";
+}
+
+echo "\n\n--> Access using ArrayIterator:\n";
+var_dump($ao->setIteratorClass("ArrayIterator"));
+var_dump($ao->getIteratorClass());
+var_dump($ao->getIterator());
+foreach($ao as $key=>$value) {
+ echo "$key=>$value\n";
+}
+
+?>
+--EXPECTF--
+--> Access using MyIterator:
+string(10) "MyIterator"
+object(MyIterator)#%d (3) {
+ ["a"]=>
+ int(1)
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+}
+ In MyIterator::rewind()
+ In MyIterator::valid()
+ In MyIterator::current()
+ In MyIterator::key()
+ a=>1
+ In MyIterator::next()
+ In MyIterator::valid()
+ In MyIterator::current()
+ In MyIterator::key()
+ b=>2
+ In MyIterator::next()
+ In MyIterator::valid()
+ In MyIterator::current()
+ In MyIterator::key()
+ c=>3
+ In MyIterator::next()
+ In MyIterator::valid()
+
+
+--> Access using ArrayIterator:
+NULL
+string(13) "ArrayIterator"
+object(ArrayIterator)#%d (3) {
+ ["a"]=>
+ int(1)
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+}
+a=>1
+b=>2
+c=>3 \ No newline at end of file
diff --git a/ext/spl/tests/arrayObject_ksort_basic1.phpt b/ext/spl/tests/arrayObject_ksort_basic1.phpt
new file mode 100644
index 000000000..17745c30f
--- /dev/null
+++ b/ext/spl/tests/arrayObject_ksort_basic1.phpt
@@ -0,0 +1,43 @@
+--TEST--
+SPL: Test ArrayObject::ksort() function : basic functionality with array based store
+--FILE--
+<?php
+/* Prototype : int ArrayObject::ksort()
+ * Description: proto int ArrayIterator::ksort()
+ * Sort the entries by key.
+ * Source code: ext/spl/spl_array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing ArrayObject::ksort() : basic functionality ***\n";
+$ao1 = new ArrayObject(array(4,2,3));
+$ao2 = new ArrayObject(array('b'=>4,'a'=>2,'q'=>3, 99=>'x'));
+var_dump($ao1->ksort());
+var_dump($ao1);
+var_dump($ao2->ksort('blah'));
+var_dump($ao2);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ArrayObject::ksort() : basic functionality ***
+bool(true)
+object(ArrayObject)#%d (3) {
+ [0]=>
+ int(4)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+}
+bool(true)
+object(ArrayObject)#%d (4) {
+ ["a"]=>
+ int(2)
+ ["b"]=>
+ int(4)
+ ["q"]=>
+ int(3)
+ [99]=>
+ string(1) "x"
+}
+===DONE===
diff --git a/ext/spl/tests/arrayObject_ksort_basic2.phpt b/ext/spl/tests/arrayObject_ksort_basic2.phpt
new file mode 100644
index 000000000..609d6f531
--- /dev/null
+++ b/ext/spl/tests/arrayObject_ksort_basic2.phpt
@@ -0,0 +1,49 @@
+--TEST--
+SPL: Test ArrayObject::ksort() function : basic functionality with object base store
+--FILE--
+<?php
+/* Prototype : int ArrayObject::ksort()
+ * Description: proto int ArrayIterator::ksort()
+ * Sort the entries by key.
+ * Source code: ext/spl/spl_array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing ArrayObject::ksort() : basic functionality ***\n";
+Class C {
+ public $x = 'prop1';
+ public $z = 'prop2';
+ public $a = 'prop3';
+ private $b = 'prop4';
+}
+
+$c = new C;
+$ao1 = new ArrayObject($c);
+var_dump($ao1->ksort());
+var_dump($ao1, $c);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ArrayObject::ksort() : basic functionality ***
+bool(true)
+object(ArrayObject)#2 (4) {
+ ["b:private"]=>
+ string(5) "prop4"
+ ["a"]=>
+ string(5) "prop3"
+ ["x"]=>
+ string(5) "prop1"
+ ["z"]=>
+ string(5) "prop2"
+}
+object(C)#1 (4) {
+ ["b:private"]=>
+ string(5) "prop4"
+ ["a"]=>
+ string(5) "prop3"
+ ["x"]=>
+ string(5) "prop1"
+ ["z"]=>
+ string(5) "prop2"
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/spl/tests/arrayObject_magicMethods1.phpt b/ext/spl/tests/arrayObject_magicMethods1.phpt
new file mode 100644
index 000000000..2730770e6
--- /dev/null
+++ b/ext/spl/tests/arrayObject_magicMethods1.phpt
@@ -0,0 +1,183 @@
+--TEST--
+SPL: ArrayObject: ensure a wrapped object's magic methods for property access are not invoked when manipulating the ArrayObject's elements using [].
+--FILE--
+<?php
+class UsesMagic {
+ public $a = 1;
+ public $b = 2;
+ public $c = 3;
+
+ private $priv = 'secret';
+
+ function __get($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __set($name, $value) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __isset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __unset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+
+}
+
+$obj = new UsesMagic;
+
+$ao = new ArrayObject($obj);
+echo "\n--> Write existent, non-existent and dynamic:\n";
+$ao['a'] = 'changed';
+$ao['dynamic'] = 'new';
+$ao['dynamic'] = 'new.changed';
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+
+echo "\n--> Read existent, non-existent and dynamic:\n";
+var_dump($ao['a']);
+var_dump($ao['nonexistent']);
+var_dump($ao['dynamic']);
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+
+echo "\n--> isset existent, non-existent and dynamic:\n";
+var_dump(isset($ao['a']));
+var_dump(isset($ao['nonexistent']));
+var_dump(isset($ao['dynamic']));
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+
+echo "\n--> Unset existent, non-existent and dynamic:\n";
+unset($ao['a']);
+unset($ao['nonexistent']);
+unset($ao['dynamic']);
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+?>
+--EXPECTF--
+--> Write existent, non-existent and dynamic:
+ Original wrapped object:
+object(UsesMagic)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+ Wrapping ArrayObject:
+object(ArrayObject)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+
+--> Read existent, non-existent and dynamic:
+string(7) "changed"
+
+Notice: Undefined index: nonexistent in %s on line 42
+NULL
+string(11) "new.changed"
+ Original wrapped object:
+object(UsesMagic)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+ Wrapping ArrayObject:
+object(ArrayObject)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+
+--> isset existent, non-existent and dynamic:
+bool(true)
+bool(false)
+bool(true)
+ Original wrapped object:
+object(UsesMagic)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+ Wrapping ArrayObject:
+object(ArrayObject)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+
+--> Unset existent, non-existent and dynamic:
+
+Notice: Undefined index: nonexistent in %s on line 60
+ Original wrapped object:
+object(UsesMagic)#%d (3) {
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+}
+ Wrapping ArrayObject:
+object(ArrayObject)#%d (3) {
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+} \ No newline at end of file
diff --git a/ext/spl/tests/arrayObject_magicMethods2.phpt b/ext/spl/tests/arrayObject_magicMethods2.phpt
new file mode 100644
index 000000000..425108abd
--- /dev/null
+++ b/ext/spl/tests/arrayObject_magicMethods2.phpt
@@ -0,0 +1,174 @@
+--TEST--
+SPL: ArrayObject: ensure a wrapped object's magic methods for property access are not invoked when manipulating the ArrayObject's elements using ->.
+--FILE--
+<?php
+class UsesMagic {
+ public $a = 1;
+ public $b = 2;
+ public $c = 3;
+
+ private $priv = 'secret';
+
+ function __get($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __set($name, $value) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __isset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __unset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+
+}
+
+$obj = new UsesMagic;
+
+$ao = new ArrayObject($obj);
+echo "\n--> Write existent, non-existent and dynamic:\n";
+$ao->a = 'changed';
+$ao->dynamic = 'new';
+$ao->dynamic = 'new.changed';
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+
+echo "\n--> Read existent, non-existent and dynamic:\n";
+var_dump($ao->a);
+var_dump($ao->nonexistent);
+var_dump($ao->dynamic);
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+
+echo "\n--> isset existent, non-existent and dynamic:\n";
+var_dump(isset($ao->a));
+var_dump(isset($ao->nonexistent));
+var_dump(isset($ao->dynamic));
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+
+echo "\n--> Unset existent, non-existent and dynamic:\n";
+unset($ao->a);
+unset($ao->nonexistent);
+unset($ao->dynamic);
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+?>
+--EXPECTF--
+
+--> Write existent, non-existent and dynamic:
+ Original wrapped object:
+object(UsesMagic)#%d (4) {
+ ["a"]=>
+ int(1)
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+}
+ Wrapping ArrayObject:
+object(ArrayObject)#%d (4) {
+ ["a"]=>
+ int(1)
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+}
+
+--> Read existent, non-existent and dynamic:
+string(7) "changed"
+
+Notice: Undefined property: ArrayObject::$nonexistent in %s on line 42
+NULL
+string(11) "new.changed"
+ Original wrapped object:
+object(UsesMagic)#%d (4) {
+ ["a"]=>
+ int(1)
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+}
+ Wrapping ArrayObject:
+object(ArrayObject)#%d (4) {
+ ["a"]=>
+ int(1)
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+}
+
+--> isset existent, non-existent and dynamic:
+bool(true)
+bool(false)
+bool(true)
+ Original wrapped object:
+object(UsesMagic)#%d (4) {
+ ["a"]=>
+ int(1)
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+}
+ Wrapping ArrayObject:
+object(ArrayObject)#%d (4) {
+ ["a"]=>
+ int(1)
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+}
+
+--> Unset existent, non-existent and dynamic:
+ Original wrapped object:
+object(UsesMagic)#%d (4) {
+ ["a"]=>
+ int(1)
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+}
+ Wrapping ArrayObject:
+object(ArrayObject)#%d (4) {
+ ["a"]=>
+ int(1)
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+} \ No newline at end of file
diff --git a/ext/spl/tests/arrayObject_magicMethods3.phpt b/ext/spl/tests/arrayObject_magicMethods3.phpt
new file mode 100644
index 000000000..29080f25a
--- /dev/null
+++ b/ext/spl/tests/arrayObject_magicMethods3.phpt
@@ -0,0 +1,183 @@
+--TEST--
+SPL: ArrayObject: ensure a wrapped object's magic methods for property access are not invoked when manipulating the ArrayObject's elements using -> and ArrayObject::ARRAY_AS_PROPS.
+--FILE--
+<?php
+class UsesMagic {
+ public $a = 1;
+ public $b = 2;
+ public $c = 3;
+
+ private $priv = 'secret';
+
+ function __get($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __set($name, $value) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __isset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __unset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+
+}
+
+$obj = new UsesMagic;
+
+$ao = new ArrayObject($obj, ArrayObject::ARRAY_AS_PROPS);
+echo "\n--> Write existent, non-existent and dynamic:\n";
+$ao->a = 'changed';
+$ao->dynamic = 'new';
+$ao->dynamic = 'new.changed';
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+
+echo "\n--> Read existent, non-existent and dynamic:\n";
+var_dump($ao->a);
+var_dump($ao->nonexistent);
+var_dump($ao->dynamic);
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+
+echo "\n--> isset existent, non-existent and dynamic:\n";
+var_dump(isset($ao->a));
+var_dump(isset($ao->nonexistent));
+var_dump(isset($ao->dynamic));
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+
+echo "\n--> Unset existent, non-existent and dynamic:\n";
+unset($ao->a);
+unset($ao->nonexistent);
+unset($ao->dynamic);
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+?>
+--EXPECTF--
+--> Write existent, non-existent and dynamic:
+ Original wrapped object:
+object(UsesMagic)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+ Wrapping ArrayObject:
+object(ArrayObject)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+
+--> Read existent, non-existent and dynamic:
+string(7) "changed"
+
+Notice: Undefined index: nonexistent in %s on line 42
+NULL
+string(11) "new.changed"
+ Original wrapped object:
+object(UsesMagic)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+ Wrapping ArrayObject:
+object(ArrayObject)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+
+--> isset existent, non-existent and dynamic:
+bool(true)
+bool(false)
+bool(true)
+ Original wrapped object:
+object(UsesMagic)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+ Wrapping ArrayObject:
+object(ArrayObject)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+
+--> Unset existent, non-existent and dynamic:
+
+Notice: Undefined index: nonexistent in %s on line 60
+ Original wrapped object:
+object(UsesMagic)#%d (3) {
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+}
+ Wrapping ArrayObject:
+object(ArrayObject)#%d (3) {
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+} \ No newline at end of file
diff --git a/ext/spl/tests/arrayObject_magicMethods4.phpt b/ext/spl/tests/arrayObject_magicMethods4.phpt
new file mode 100644
index 000000000..967103510
--- /dev/null
+++ b/ext/spl/tests/arrayObject_magicMethods4.phpt
@@ -0,0 +1,186 @@
+--TEST--
+SPL: ArrayObject: ensure the magic methods for property access of a subclass of ArrayObject are not invoked when manipulating its elements using [].
+--FILE--
+<?php
+class C {
+ public $a = 1;
+ public $b = 2;
+ public $c = 3;
+
+ private $priv = 'secret';
+}
+
+class UsesMagic extends ArrayObject {
+
+ public $b = "This should never show up";
+
+ function __get($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __set($name, $value) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __isset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __unset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+
+}
+$obj = new C;
+$ao = new UsesMagic($obj);
+echo "\n--> Write existent, non-existent and dynamic:\n";
+$ao['a'] = 'changed';
+$ao['dynamic'] = 'new';
+$ao['dynamic'] = 'new.changed';
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+
+echo "\n--> Read existent, non-existent and dynamic:\n";
+var_dump($ao['a']);
+var_dump($ao['nonexistent']);
+var_dump($ao['dynamic']);
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+
+echo "\n--> isset existent, non-existent and dynamic:\n";
+var_dump(isset($ao['a']));
+var_dump(isset($ao['nonexistent']));
+var_dump(isset($ao['dynamic']));
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+
+echo "\n--> Unset existent, non-existent and dynamic:\n";
+unset($ao['a']);
+unset($ao['nonexistent']);
+unset($ao['dynamic']);
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+?>
+--EXPECTF--
+--> Write existent, non-existent and dynamic:
+ Original wrapped object:
+object(C)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+ Wrapping ArrayObject:
+object(UsesMagic)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+
+--> Read existent, non-existent and dynamic:
+string(7) "changed"
+
+Notice: Undefined index: nonexistent in %s on line 45
+NULL
+string(11) "new.changed"
+ Original wrapped object:
+object(C)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+ Wrapping ArrayObject:
+object(UsesMagic)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+
+--> isset existent, non-existent and dynamic:
+bool(true)
+bool(false)
+bool(true)
+ Original wrapped object:
+object(C)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+ Wrapping ArrayObject:
+object(UsesMagic)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+
+--> Unset existent, non-existent and dynamic:
+
+Notice: Undefined index: nonexistent in %s on line 63
+ Original wrapped object:
+object(C)#%d (3) {
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+}
+ Wrapping ArrayObject:
+object(UsesMagic)#%d (3) {
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+} \ No newline at end of file
diff --git a/ext/spl/tests/arrayObject_magicMethods5.phpt b/ext/spl/tests/arrayObject_magicMethods5.phpt
new file mode 100644
index 000000000..0b866588e
--- /dev/null
+++ b/ext/spl/tests/arrayObject_magicMethods5.phpt
@@ -0,0 +1,187 @@
+--TEST--
+SPL: ArrayObject: ensure the magic methods for property access of a subclass of ArrayObject ARE invoked when manipulating its elements using ->.
+--FILE--
+<?php
+class C {
+ public $a = 1;
+ public $b = 2;
+ public $c = 3;
+
+ private $priv = 'secret';
+}
+
+class UsesMagic extends ArrayObject {
+
+ public $b = "This should never show up";
+
+ function __get($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __set($name, $value) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __isset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __unset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+
+}
+$obj = new C;
+$ao = new UsesMagic($obj);
+echo "\n--> Write existent, non-existent and dynamic:\n";
+$ao->a = 'changed';
+$ao->dynamic = 'new';
+$ao->dynamic = 'new.changed';
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+
+echo "\n--> Read existent, non-existent and dynamic:\n";
+var_dump($ao->a);
+var_dump($ao->nonexistent);
+var_dump($ao->dynamic);
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+
+echo "\n--> isset existent, non-existent and dynamic:\n";
+var_dump(isset($ao->a));
+var_dump(isset($ao->nonexistent));
+var_dump(isset($ao->dynamic));
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+
+echo "\n--> Unset existent, non-existent and dynamic:\n";
+unset($ao->a);
+unset($ao->nonexistent);
+unset($ao->dynamic);
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+?>
+--EXPECTF--
+
+--> Write existent, non-existent and dynamic:
+In UsesMagic::__set(a,changed)
+In UsesMagic::__set(dynamic,new)
+In UsesMagic::__set(dynamic,new.changed)
+ Original wrapped object:
+object(C)#%d (4) {
+ ["a"]=>
+ int(1)
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+}
+ Wrapping ArrayObject:
+object(UsesMagic)#%d (4) {
+ ["a"]=>
+ int(1)
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+}
+
+--> Read existent, non-existent and dynamic:
+In UsesMagic::__get(a)
+NULL
+In UsesMagic::__get(nonexistent)
+NULL
+In UsesMagic::__get(dynamic)
+NULL
+ Original wrapped object:
+object(C)#%d (4) {
+ ["a"]=>
+ int(1)
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+}
+ Wrapping ArrayObject:
+object(UsesMagic)#%d (4) {
+ ["a"]=>
+ int(1)
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+}
+
+--> isset existent, non-existent and dynamic:
+In UsesMagic::__isset(a)
+bool(false)
+In UsesMagic::__isset(nonexistent)
+bool(false)
+In UsesMagic::__isset(dynamic)
+bool(false)
+ Original wrapped object:
+object(C)#%d (4) {
+ ["a"]=>
+ int(1)
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+}
+ Wrapping ArrayObject:
+object(UsesMagic)#%d (4) {
+ ["a"]=>
+ int(1)
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+}
+
+--> Unset existent, non-existent and dynamic:
+In UsesMagic::__unset(a)
+In UsesMagic::__unset(nonexistent)
+In UsesMagic::__unset(dynamic)
+ Original wrapped object:
+object(C)#%d (4) {
+ ["a"]=>
+ int(1)
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+}
+ Wrapping ArrayObject:
+object(UsesMagic)#%d (4) {
+ ["a"]=>
+ int(1)
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+} \ No newline at end of file
diff --git a/ext/spl/tests/arrayObject_magicMethods6.phpt b/ext/spl/tests/arrayObject_magicMethods6.phpt
new file mode 100644
index 000000000..3b3fff8f7
--- /dev/null
+++ b/ext/spl/tests/arrayObject_magicMethods6.phpt
@@ -0,0 +1,186 @@
+--TEST--
+SPL: ArrayObject: ensure the magic methods for property access of a subclass of ArrayObject are not invoked when manipulating its elements using -> ArrayObject::ARRAY_AS_PROPS.
+--FILE--
+<?php
+class C {
+ public $a = 1;
+ public $b = 2;
+ public $c = 3;
+
+ private $priv = 'secret';
+}
+
+class UsesMagic extends ArrayObject {
+
+ public $b = "This should never show up";
+
+ function __get($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __set($name, $value) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __isset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __unset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+
+}
+$obj = new C;
+$ao = new UsesMagic($obj, ArrayObject::ARRAY_AS_PROPS);
+echo "\n--> Write existent, non-existent and dynamic:\n";
+$ao->a = 'changed';
+$ao->dynamic = 'new';
+$ao->dynamic = 'new.changed';
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+
+echo "\n--> Read existent, non-existent and dynamic:\n";
+var_dump($ao->a);
+var_dump($ao->nonexistent);
+var_dump($ao->dynamic);
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+
+echo "\n--> isset existent, non-existent and dynamic:\n";
+var_dump(isset($ao->a));
+var_dump(isset($ao->nonexistent));
+var_dump(isset($ao->dynamic));
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+
+echo "\n--> Unset existent, non-existent and dynamic:\n";
+unset($ao->a);
+unset($ao->nonexistent);
+unset($ao->dynamic);
+echo " Original wrapped object:\n";
+var_dump($obj);
+echo " Wrapping ArrayObject:\n";
+var_dump($ao);
+?>
+--EXPECTF--
+--> Write existent, non-existent and dynamic:
+ Original wrapped object:
+object(C)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+ Wrapping ArrayObject:
+object(UsesMagic)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+
+--> Read existent, non-existent and dynamic:
+string(7) "changed"
+
+Notice: Undefined index: nonexistent in %s on line 45
+NULL
+string(11) "new.changed"
+ Original wrapped object:
+object(C)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+ Wrapping ArrayObject:
+object(UsesMagic)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+
+--> isset existent, non-existent and dynamic:
+bool(true)
+bool(false)
+bool(true)
+ Original wrapped object:
+object(C)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+ Wrapping ArrayObject:
+object(UsesMagic)#%d (5) {
+ ["a"]=>
+ string(7) "changed"
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+ ["dynamic"]=>
+ string(11) "new.changed"
+}
+
+--> Unset existent, non-existent and dynamic:
+
+Notice: Undefined index: nonexistent in %s on line 63
+ Original wrapped object:
+object(C)#%d (3) {
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+}
+ Wrapping ArrayObject:
+object(UsesMagic)#%d (3) {
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ ["priv:private"]=>
+ string(6) "secret"
+} \ No newline at end of file
diff --git a/ext/spl/tests/arrayObject_natcasesort_basic1.phpt b/ext/spl/tests/arrayObject_natcasesort_basic1.phpt
new file mode 100644
index 000000000..834da6c69
--- /dev/null
+++ b/ext/spl/tests/arrayObject_natcasesort_basic1.phpt
@@ -0,0 +1,50 @@
+--TEST--
+SPL: Test ArrayObject::natcasesort() function : basic functionality
+--FILE--
+<?php
+/* Prototype : int ArrayObject::natcasesort()
+ * Description: proto int ArrayIterator::natcasesort()
+ Sort the entries by values using case insensitive "natural order" algorithm.
+ * Source code: ext/spl/spl_array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing ArrayObject::natcasesort() : basic functionality ***\n";
+
+$ao1 = new ArrayObject(array('boo10','boo1','boo2','boo22','BOO5'));
+$ao2 = new ArrayObject(array('a'=>'boo10','b'=>'boo1','c'=>'boo2','d'=>'boo22','e'=>'BOO5'));
+var_dump($ao1->natcasesort());
+var_dump($ao1);
+var_dump($ao2->natcasesort('blah'));
+var_dump($ao2);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ArrayObject::natcasesort() : basic functionality ***
+bool(true)
+object(ArrayObject)#%d (5) {
+ [1]=>
+ string(4) "boo1"
+ [2]=>
+ string(4) "boo2"
+ [4]=>
+ string(4) "BOO5"
+ [0]=>
+ string(5) "boo10"
+ [3]=>
+ string(5) "boo22"
+}
+bool(true)
+object(ArrayObject)#%d (5) {
+ ["b"]=>
+ string(4) "boo1"
+ ["c"]=>
+ string(4) "boo2"
+ ["e"]=>
+ string(4) "BOO5"
+ ["a"]=>
+ string(5) "boo10"
+ ["d"]=>
+ string(5) "boo22"
+}
+===DONE===
diff --git a/ext/spl/tests/arrayObject_natsort_basic1.phpt b/ext/spl/tests/arrayObject_natsort_basic1.phpt
new file mode 100644
index 000000000..7ade720f4
--- /dev/null
+++ b/ext/spl/tests/arrayObject_natsort_basic1.phpt
@@ -0,0 +1,50 @@
+--TEST--
+SPL: Test ArrayObject::natsort() function : basic functionality
+--FILE--
+<?php
+/* Prototype : int ArrayObject::natsort()
+ * Description: proto int ArrayIterator::natsort()
+ Sort the entries by values using "natural order" algorithm.
+ * Source code: ext/spl/spl_array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing ArrayObject::natsort() : basic functionality ***\n";
+
+$ao1 = new ArrayObject(array('boo10','boo1','boo2','boo22','BOO5'));
+$ao2 = new ArrayObject(array('a'=>'boo10','b'=>'boo1','c'=>'boo2','d'=>'boo22','e'=>'BOO5'));
+var_dump($ao1->natsort());
+var_dump($ao1);
+var_dump($ao2->natsort('blah'));
+var_dump($ao2);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ArrayObject::natsort() : basic functionality ***
+bool(true)
+object(ArrayObject)#%d (5) {
+ [4]=>
+ string(4) "BOO5"
+ [1]=>
+ string(4) "boo1"
+ [2]=>
+ string(4) "boo2"
+ [0]=>
+ string(5) "boo10"
+ [3]=>
+ string(5) "boo22"
+}
+bool(true)
+object(ArrayObject)#%d (5) {
+ ["e"]=>
+ string(4) "BOO5"
+ ["b"]=>
+ string(4) "boo1"
+ ["c"]=>
+ string(4) "boo2"
+ ["a"]=>
+ string(5) "boo10"
+ ["d"]=>
+ string(5) "boo22"
+}
+===DONE===
diff --git a/ext/spl/tests/arrayObject_setFlags_basic1.phpt b/ext/spl/tests/arrayObject_setFlags_basic1.phpt
new file mode 100644
index 000000000..e420b0401
--- /dev/null
+++ b/ext/spl/tests/arrayObject_setFlags_basic1.phpt
@@ -0,0 +1,53 @@
+--TEST--
+SPL: ArrayObject::setFlags basic usage with ArrayObject::ARRAY_AS_PROPS.
+--XFAIL--
+Currently fails on php.net due to bug 45622.
+--FILE--
+<?php
+class C extends ArrayObject {
+ public $p = 'object property';
+}
+
+function access_p($ao) {
+ // isset
+ var_dump(isset($ao->p));
+ // read
+ var_dump($ao->p);
+ // write
+ $ao->p = $ao->p . '.changed';
+ var_dump($ao->p);
+}
+
+$ao = new C(array('p'=>'array element'));
+$ao->setFlags(ArrayObject::ARRAY_AS_PROPS);
+
+echo "\n--> Access the real property:\n";
+access_p($ao);
+
+echo "\n--> Remove the real property and access the array element:\n";
+unset($ao->p);
+access_p($ao);
+
+echo "\n--> Remove the array element and try access again:\n";
+unset($ao->p);
+access_p($ao);
+?>
+--EXPECTF--
+--> Access the real property:
+bool(true)
+string(15) "object property"
+string(23) "object property.changed"
+
+--> Remove the real property and access the array element:
+bool(true)
+string(13) "array element"
+string(21) "array element.changed"
+
+--> Remove the array element and try access again:
+bool(false)
+
+Notice: Undefined index: p in %s on line 10
+NULL
+
+Notice: Undefined index: p in %s on line 12
+string(8) ".changed"
diff --git a/ext/spl/tests/arrayObject_setFlags_basic2.phpt b/ext/spl/tests/arrayObject_setFlags_basic2.phpt
new file mode 100644
index 000000000..1af312ab4
--- /dev/null
+++ b/ext/spl/tests/arrayObject_setFlags_basic2.phpt
@@ -0,0 +1,29 @@
+--TEST--
+SPL: Ensure access to non-visible properties falls back to dimension access with ArrayObject::ARRAY_AS_PROPS.
+--FILE--
+<?php
+class C extends ArrayObject {
+ private $x = 'secret';
+
+ static function go($c) {
+ var_dump($c->x);
+ }
+}
+
+$c = new C(array('x'=>'public'));
+
+$c->setFlags(ArrayObject::ARRAY_AS_PROPS);
+C::go($c);
+var_dump($c->x);
+
+
+$c->setFlags(0);
+C::go($c);
+var_dump($c->x);
+?>
+--EXPECTF--
+string(6) "secret"
+string(6) "public"
+string(6) "secret"
+
+Fatal error: Cannot access private property C::$x in %s on line 19
diff --git a/ext/spl/tests/arrayObject_setIteratorClass_error1.phpt b/ext/spl/tests/arrayObject_setIteratorClass_error1.phpt
new file mode 100644
index 000000000..85c31b500
--- /dev/null
+++ b/ext/spl/tests/arrayObject_setIteratorClass_error1.phpt
@@ -0,0 +1,57 @@
+--TEST--
+SPL: ArrayObject::setIteratorClass with bad iterator class.
+--FILE--
+<?php
+try {
+ $ao = new ArrayObject(array('a'=>1,'b'=>2,'c'=>3));
+ $ao->setIteratorClass("nonExistentClass");
+ foreach($ao as $key=>$value) {
+ echo " $key=>$value\n";
+ }
+} catch (Exception $e) {
+ var_dump($e->getMessage());
+}
+
+try {
+ $ao = new ArrayObject(array('a'=>1,'b'=>2,'c'=>3));
+ $ao->setIteratorClass("stdClass");
+ foreach($ao as $key=>$value) {
+ echo " $key=>$value\n";
+ }
+} catch (Exception $e) {
+ var_dump($e->getMessage());
+}
+
+
+try {
+ $ao = new ArrayObject(array('a'=>1,'b'=>2,'c'=>3), 0, "nonExistentClass");
+ foreach($ao as $key=>$value) {
+ echo " $key=>$value\n";
+ }
+} catch (Exception $e) {
+ var_dump($e->getMessage());
+}
+
+try {
+ $ao = new ArrayObject(array('a'=>1,'b'=>2,'c'=>3), 0, "stdClass");
+ foreach($ao as $key=>$value) {
+ echo " $key=>$value\n";
+ }
+} catch (Exception $e) {
+ var_dump($e->getMessage());
+}
+
+?>
+--EXPECTF--
+
+Warning: ArrayObject::setIteratorClass() expects parameter 1 to be a class name derived from Iterator, 'nonExistentClass' given in %s on line 4
+ a=>1
+ b=>2
+ c=>3
+
+Warning: ArrayObject::setIteratorClass() expects parameter 1 to be a class name derived from Iterator, 'stdClass' given in %s on line 14
+ a=>1
+ b=>2
+ c=>3
+string(113) "ArrayObject::__construct() expects parameter 3 to be a class name derived from Iterator, 'nonExistentClass' given"
+string(105) "ArrayObject::__construct() expects parameter 3 to be a class name derived from Iterator, 'stdClass' given"
diff --git a/ext/spl/tests/arrayObject_uasort_basic1.phpt b/ext/spl/tests/arrayObject_uasort_basic1.phpt
new file mode 100644
index 000000000..a1619b8d3
--- /dev/null
+++ b/ext/spl/tests/arrayObject_uasort_basic1.phpt
@@ -0,0 +1,41 @@
+--TEST--
+SPL: Test ArrayObject::uasort() function : basic functionality
+--FILE--
+<?php
+/* Prototype : int ArrayObject::uasort(callback cmp_function)
+ * Description: proto int ArrayIterator::uasort(callback cmp_function)
+ Sort the entries by values user defined function.
+ * Source code: ext/spl/spl_array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing ArrayObject::uasort() : basic functionality ***\n";
+
+// Reverse sorter
+function cmp($value1, $value2) {
+ if($value1 == $value2) {
+ return 0;
+ }
+ else if($value1 < $value2) {
+ return 1;
+ }
+ else
+ return -1;
+}
+$ao = new ArrayObject(array(2,3,1));
+
+$ao->uasort('cmp');
+var_dump($ao);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ArrayObject::uasort() : basic functionality ***
+object(ArrayObject)#%d (3) {
+ [1]=>
+ int(3)
+ [0]=>
+ int(2)
+ [2]=>
+ int(1)
+}
+===DONE===
diff --git a/ext/spl/tests/arrayObject_uasort_error1.phpt b/ext/spl/tests/arrayObject_uasort_error1.phpt
new file mode 100644
index 000000000..0a766102b
--- /dev/null
+++ b/ext/spl/tests/arrayObject_uasort_error1.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Test ArrayObject::uasort() function : wrong arg count
+--FILE--
+<?php
+/* Prototype : int ArrayObject::uasort(callback cmp_function)
+ * Description: proto int ArrayIterator::uasort(callback cmp_function)
+ Sort the entries by values user defined function.
+ * Source code: ext/spl/spl_array.c
+ * Alias to functions:
+ */
+
+$ao = new ArrayObject();
+
+try {
+ $ao->uasort();
+} catch (BadMethodCallException $e) {
+ echo $e->getMessage() . "\n";
+}
+
+try {
+ $ao->uasort(1,2);
+} catch (BadMethodCallException $e) {
+ echo $e->getMessage() . "\n";
+}
+?>
+===DONE===
+--EXPECTF--
+Function expects exactly one argument
+Function expects exactly one argument
+===DONE===
diff --git a/ext/spl/tests/arrayObject_uksort_basic1.phpt b/ext/spl/tests/arrayObject_uksort_basic1.phpt
new file mode 100644
index 000000000..86048d354
--- /dev/null
+++ b/ext/spl/tests/arrayObject_uksort_basic1.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test ArrayObject::uksort() function : basic functionality
+--FILE--
+<?php
+/* Prototype : int ArrayObject::uksort(callback cmp_function)
+ * Description: proto int ArrayIterator::uksort(callback cmp_function)
+ * Sort the entries by key using user defined function.
+ * Source code: ext/spl/spl_array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing ArrayObject::uksort() : basic functionality ***\n";
+// Reverse sorter
+function cmp($value1, $value2) {
+ if($value1 == $value2) {
+ return 0;
+ }
+ else if($value1 < $value2) {
+ return 1;
+ }
+ else
+ return -1;
+}
+$ao = new ArrayObject(array(3=>0, 2=>1, 5=>2, 6=>3, 1=>4));
+
+$ao->uksort('cmp');
+var_dump($ao);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ArrayObject::uksort() : basic functionality ***
+object(ArrayObject)#%d (5) {
+ [6]=>
+ int(3)
+ [5]=>
+ int(2)
+ [3]=>
+ int(0)
+ [2]=>
+ int(1)
+ [1]=>
+ int(4)
+}
+===DONE===
diff --git a/ext/spl/tests/arrayObject_uksort_error1.phpt b/ext/spl/tests/arrayObject_uksort_error1.phpt
new file mode 100644
index 000000000..56b449af3
--- /dev/null
+++ b/ext/spl/tests/arrayObject_uksort_error1.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Test ArrayObject::uksort() function : wrong arg count
+--FILE--
+<?php
+/* Prototype : int ArrayObject::uksort(callback cmp_function)
+ * Description: proto int ArrayIterator::uksort(callback cmp_function)
+ Sort the entries by key using user defined function.
+ * Source code: ext/spl/spl_array.c
+ * Alias to functions:
+ */
+
+$ao = new ArrayObject();
+
+try {
+ $ao->uksort();
+} catch (BadMethodCallException $e) {
+ echo $e->getMessage() . "\n";
+}
+
+try {
+ $ao->uksort(1,2);
+} catch (BadMethodCallException $e) {
+ echo $e->getMessage() . "\n";
+}
+?>
+===DONE===
+--EXPECTF--
+Function expects exactly one argument
+Function expects exactly one argument
+===DONE===
diff --git a/ext/spl/tests/array_001.phpt b/ext/spl/tests/array_001.phpt
index 1c7566ecb..4f73406d3 100755
--- a/ext/spl/tests/array_001.phpt
+++ b/ext/spl/tests/array_001.phpt
@@ -38,7 +38,7 @@ var_dump($ar);
===DONE===
<?php exit(0); ?>
--EXPECTF--
-object(ArrayObject)#1 (2) {
+object(ArrayObject)#%d (2) {
[0]=>
int(0)
[1]=>
@@ -61,7 +61,7 @@ array(6) {
int(5)
}
string(1) "a"
-object(ArrayObject)#1 (5) {
+object(ArrayObject)#%d (5) {
[0]=>
int(0)
[1]=>
@@ -84,13 +84,13 @@ NULL
Notice: Undefined offset: 7 in %sarray_001.php on line %d
Notice: Undefined index: c in %sarray_001.php on line %d
-object(ArrayObject)#1 (2) {
+object(ArrayObject)#%d (2) {
[0]=>
int(0)
[2]=>
int(2)
}
-object(ArrayObject)#1 (4) {
+object(ArrayObject)#%d (4) {
[0]=>
int(0)
[2]=>
diff --git a/ext/spl/tests/array_026.phpt b/ext/spl/tests/array_026.phpt
new file mode 100644
index 000000000..94642f04b
--- /dev/null
+++ b/ext/spl/tests/array_026.phpt
@@ -0,0 +1,21 @@
+--TEST--
+SPL: ArrayObject indirect offsetGet overwriting EG(uninitialized_zvar_ptr)
+--FILE--
+<?php
+$test = new ArrayObject();
+$test['d1']['d2'] = 'hello';
+$test['d1']['d3'] = 'world';
+var_dump($test, $test3['mmmmm']);
+?>
+--EXPECTF--
+Notice: Undefined variable: test3 in %s%earray_026.php on line %d
+object(ArrayObject)#%d (1) {
+ ["d1"]=>
+ array(2) {
+ ["d2"]=>
+ string(5) "hello"
+ ["d3"]=>
+ string(5) "world"
+ }
+}
+NULL
diff --git a/ext/spl/tests/bug46031.phpt b/ext/spl/tests/bug46031.phpt
new file mode 100644
index 000000000..9261ff0fe
--- /dev/null
+++ b/ext/spl/tests/bug46031.phpt
@@ -0,0 +1,9 @@
+--TEST--
+Bug #46031 (Segfault in AppendIterator::next)
+--FILE--
+<?php
+$x = new AppendIterator();
+var_dump($x->next());
+?>
+--EXPECT--
+NULL
diff --git a/ext/spl/tests/bug46051.phpt b/ext/spl/tests/bug46051.phpt
new file mode 100644
index 000000000..e993951ff
--- /dev/null
+++ b/ext/spl/tests/bug46051.phpt
@@ -0,0 +1,14 @@
+--TEST--
+Bug #46051 (SplFileInfo::openFile - memory overlap)
+--FILE--
+<?php
+
+$x = new splfileinfo(__FILE__);
+
+try {
+$x->openFile(NULL, NULL, NULL);
+} catch (Exception $e) { }
+
+var_dump($x->getPathName());
+--EXPECTF--
+string(%d) "%sbug46051.php"
diff --git a/ext/spl/tests/bug46053.phpt b/ext/spl/tests/bug46053.phpt
new file mode 100644
index 000000000..75da7f3bb
--- /dev/null
+++ b/ext/spl/tests/bug46053.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Bug #46053 (SplFileObject::seek - Endless loop)
+--FILE--
+<?php
+
+$x = new splfileobject(__FILE__);
+$x->getPathName();
+$x->seek(10);
+$x->seek(0);
+var_dump(trim($x->fgets()));
+--EXPECTF--
+string(%d) "<?php"
diff --git a/ext/spl/tests/bug46088.phpt b/ext/spl/tests/bug46088.phpt
new file mode 100644
index 000000000..478537762
--- /dev/null
+++ b/ext/spl/tests/bug46088.phpt
@@ -0,0 +1,11 @@
+--TEST--
+Bug #46088 (RegexIterator::accept - segfault)
+--FILE--
+<?php
+
+$x = new RegexIterator(new ArrayIterator(range(1, 10)), '/\d/');
+var_dump($x->accept());
+
+?>
+--EXPECT--
+bool(false)
diff --git a/ext/spl/tests/bug46115.phpt b/ext/spl/tests/bug46115.phpt
new file mode 100644
index 000000000..b58559913
--- /dev/null
+++ b/ext/spl/tests/bug46115.phpt
@@ -0,0 +1,13 @@
+--TEST--
+Bug #46115 (Memory leak when calling a method using Reflection)
+--SKIPIF--
+<?php if (!extension_loaded('reflection')) die('skip Reflection extension not loaded'); ?>
+--FILE--
+<?php
+$h = new RecursiveArrayIterator(array());
+$x = new reflectionmethod('RecursiveArrayIterator', 'asort');
+$z = $x->invoke($h);
+?>
+DONE
+--EXPECT--
+DONE
diff --git a/ext/spl/tests/class_implements_basic.phpt b/ext/spl/tests/class_implements_basic.phpt
new file mode 100644
index 000000000..1170b214f
--- /dev/null
+++ b/ext/spl/tests/class_implements_basic.phpt
@@ -0,0 +1,33 @@
+--TEST--
+SPL: Test class_implements() function : basic
+--FILE--
+<?php
+/* Prototype : array class_implements(mixed what [, bool autoload ])
+ * Description: Return all classes and interfaces implemented by SPL
+ * Source code: ext/spl/php_spl.c
+ * Alias to functions:
+ */
+
+echo "*** Testing class_implements() : basic ***\n";
+
+
+interface foo { }
+class bar implements foo {}
+
+var_dump(class_implements(new bar));
+var_dump(class_implements('bar'));
+
+
+?>
+===DONE===
+--EXPECT--
+*** Testing class_implements() : basic ***
+array(1) {
+ ["foo"]=>
+ string(3) "foo"
+}
+array(1) {
+ ["foo"]=>
+ string(3) "foo"
+}
+===DONE===
diff --git a/ext/spl/tests/class_implements_basic2.phpt b/ext/spl/tests/class_implements_basic2.phpt
new file mode 100644
index 000000000..ea25e5b98
--- /dev/null
+++ b/ext/spl/tests/class_implements_basic2.phpt
@@ -0,0 +1,74 @@
+--TEST--
+SPL: Test class_implements() function : basic
+--FILE--
+<?php
+/* Prototype : array class_implements(mixed what [, bool autoload ])
+ * Description: Return all classes and interfaces implemented by SPL
+ * Source code: ext/spl/php_spl.c
+ * Alias to functions:
+ */
+
+echo "*** Testing class_implements() : basic ***\n";
+
+
+interface foo { }
+class fooImpl implements foo {}
+
+interface bar { }
+class barImpl implements bar {}
+
+class foobarImpl implements foo, bar {}
+
+class fooViaBarImpl extends barImpl implements foo {}
+
+class fooExtended extends fooImpl {}
+
+s_var_dump(class_implements(new foobarImpl));
+s_var_dump(class_implements('foobarImpl'));
+s_var_dump(class_implements(new fooViaBarImpl));
+s_var_dump(class_implements('fooViaBarImpl'));
+s_var_dump(class_implements(new fooExtended));
+s_var_dump(class_implements('fooExtended'));
+
+
+function s_var_dump($arr) {
+ krsort($arr);
+ var_dump($arr);
+}
+?>
+===DONE===
+--EXPECT--
+*** Testing class_implements() : basic ***
+array(2) {
+ ["foo"]=>
+ string(3) "foo"
+ ["bar"]=>
+ string(3) "bar"
+}
+array(2) {
+ ["foo"]=>
+ string(3) "foo"
+ ["bar"]=>
+ string(3) "bar"
+}
+array(2) {
+ ["foo"]=>
+ string(3) "foo"
+ ["bar"]=>
+ string(3) "bar"
+}
+array(2) {
+ ["foo"]=>
+ string(3) "foo"
+ ["bar"]=>
+ string(3) "bar"
+}
+array(1) {
+ ["foo"]=>
+ string(3) "foo"
+}
+array(1) {
+ ["foo"]=>
+ string(3) "foo"
+}
+===DONE===
diff --git a/ext/spl/tests/class_implements_error.phpt b/ext/spl/tests/class_implements_error.phpt
new file mode 100644
index 000000000..ad5dd4378
--- /dev/null
+++ b/ext/spl/tests/class_implements_error.phpt
@@ -0,0 +1,28 @@
+--TEST--
+SPL: Test class_implements() function : error
+--FILE--
+<?php
+/* Prototype : array class_implements(mixed what [, bool autoload ])
+ * Description: Return all classes and interfaces implemented by SPL
+ * Source code: ext/spl/php_spl.c
+ * Alias to functions:
+ */
+
+echo "*** Testing class_implements() : error ***\n";
+
+interface foo { }
+class bar implements foo {}
+
+var_dump(class_implements());
+var_dump(class_implements("bar", true, 10));
+?>
+===DONE===
+--EXPECTF--
+*** Testing class_implements() : error ***
+
+Warning: class_implements() expects at least 1 parameter, 0 given in %s on line %d
+bool(false)
+
+Warning: class_implements() expects at most 2 parameters, 3 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/spl/tests/class_implements_variation.phpt b/ext/spl/tests/class_implements_variation.phpt
new file mode 100644
index 000000000..52fdbcaf7
--- /dev/null
+++ b/ext/spl/tests/class_implements_variation.phpt
@@ -0,0 +1,45 @@
+--TEST--
+SPL: Test class_implements() function : variation - no interfaces and autoload
+--FILE--
+<?php
+/* Prototype : array class_implements(mixed what [, bool autoload ])
+ * Description: Return all classes and interfaces implemented by SPL
+ * Source code: ext/spl/php_spl.c
+ * Alias to functions:
+ */
+
+echo "*** Testing class_implements() : variation ***\n";
+
+echo "--- testing no interfaces ---\n";
+class fs {}
+var_dump(class_implements(new fs));
+var_dump(class_implements('fs'));
+
+echo "\n--- testing autoload ---\n";
+var_dump(class_implements('non-existent'));
+var_dump(class_implements('non-existent2', false));
+
+
+function __autoload($classname) {
+ echo "attempting to autoload $classname\n";
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing class_implements() : variation ***
+--- testing no interfaces ---
+array(0) {
+}
+array(0) {
+}
+
+--- testing autoload ---
+attempting to autoload non-existent
+
+Warning: class_implements(): Class non-existent does not exist and could not be loaded in %s on line %d
+bool(false)
+
+Warning: class_implements(): Class non-existent2 does not exist in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/spl/tests/class_implements_variation1.phpt b/ext/spl/tests/class_implements_variation1.phpt
new file mode 100644
index 000000000..d8a45ce6a
--- /dev/null
+++ b/ext/spl/tests/class_implements_variation1.phpt
@@ -0,0 +1,221 @@
+--TEST--
+SPL: Test class_implements() function : variation
+--FILE--
+<?php
+/* Prototype : array class_implements(mixed what [, bool autoload ])
+ * Description: Return all classes and interfaces implemented by SPL
+ * Source code: ext/spl/php_spl.c
+ * Alias to functions:
+ */
+
+echo "*** Testing class_implements() : variation ***\n";
+
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$autoload = true;
+
+//resource
+$res = fopen(__FILE__,'r');
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ //resource
+ 'resource' => $res,
+);
+
+// loop through each element of the array for pattern
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( class_implements($value, $autoload) );
+};
+
+fclose($res);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing class_implements() : variation ***
+
+--int 0--
+Error: 2 - class_implements(): object or string expected, %s(%d)
+bool(false)
+
+--int 1--
+Error: 2 - class_implements(): object or string expected, %s(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - class_implements(): object or string expected, %s(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - class_implements(): object or string expected, %s(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - class_implements(): object or string expected, %s(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - class_implements(): object or string expected, %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - class_implements(): object or string expected, %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - class_implements(): object or string expected, %s(%d)
+bool(false)
+
+--float .5--
+Error: 2 - class_implements(): object or string expected, %s(%d)
+bool(false)
+
+--empty array--
+Error: 2 - class_implements(): object or string expected, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - class_implements(): object or string expected, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - class_implements(): object or string expected, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - class_implements(): object or string expected, %s(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - class_implements(): object or string expected, %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - class_implements(): object or string expected, %s(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - class_implements(): object or string expected, %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - class_implements(): object or string expected, %s(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - class_implements(): object or string expected, %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - class_implements(): object or string expected, %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - class_implements(): Class does not exist and could not be loaded, %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - class_implements(): Class does not exist and could not be loaded, %s(%d)
+bool(false)
+
+--instance of classWithToString--
+array(0) {
+}
+
+--instance of classWithoutToString--
+array(0) {
+}
+
+--undefined var--
+Error: 2 - class_implements(): object or string expected, %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - class_implements(): object or string expected, %s(%d)
+bool(false)
+
+--resource--
+Error: 2 - class_implements(): object or string expected, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/spl/tests/class_implements_variation2.phpt b/ext/spl/tests/class_implements_variation2.phpt
new file mode 100644
index 000000000..f6953577f
--- /dev/null
+++ b/ext/spl/tests/class_implements_variation2.phpt
@@ -0,0 +1,259 @@
+--TEST--
+SPL: Test class_implements() function : variation
+--FILE--
+<?php
+/* Prototype : array class_implements(mixed what [, bool autoload ])
+ * Description: Return all classes and interfaces implemented by SPL
+ * Source code: ext/spl/php_spl.c
+ * Alias to functions:
+ */
+
+echo "*** Testing class_implements() : variation ***\n";
+
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$class = 'Iterator';
+
+//resource
+$res = fopen(__FILE__,'r');
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ //resource
+ 'resource' => $res,
+);
+
+// loop through each element of the array for pattern
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( class_implements($class, $value) );
+};
+
+fclose($res);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing class_implements() : variation ***
+
+--int 0--
+array(1) {
+ ["Traversable"]=>
+ string(11) "Traversable"
+}
+
+--int 1--
+array(1) {
+ ["Traversable"]=>
+ string(11) "Traversable"
+}
+
+--int 12345--
+array(1) {
+ ["Traversable"]=>
+ string(11) "Traversable"
+}
+
+--int -12345--
+array(1) {
+ ["Traversable"]=>
+ string(11) "Traversable"
+}
+
+--float 10.5--
+array(1) {
+ ["Traversable"]=>
+ string(11) "Traversable"
+}
+
+--float -10.5--
+array(1) {
+ ["Traversable"]=>
+ string(11) "Traversable"
+}
+
+--float 12.3456789000e10--
+array(1) {
+ ["Traversable"]=>
+ string(11) "Traversable"
+}
+
+--float -12.3456789000e10--
+array(1) {
+ ["Traversable"]=>
+ string(11) "Traversable"
+}
+
+--float .5--
+array(1) {
+ ["Traversable"]=>
+ string(11) "Traversable"
+}
+
+--empty array--
+Error: 2 - class_implements() expects parameter 2 to be boolean, array given, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - class_implements() expects parameter 2 to be boolean, array given, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - class_implements() expects parameter 2 to be boolean, array given, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - class_implements() expects parameter 2 to be boolean, array given, %s(%d)
+bool(false)
+
+--uppercase NULL--
+array(1) {
+ ["Traversable"]=>
+ string(11) "Traversable"
+}
+
+--lowercase null--
+array(1) {
+ ["Traversable"]=>
+ string(11) "Traversable"
+}
+
+--lowercase true--
+array(1) {
+ ["Traversable"]=>
+ string(11) "Traversable"
+}
+
+--lowercase false--
+array(1) {
+ ["Traversable"]=>
+ string(11) "Traversable"
+}
+
+--uppercase TRUE--
+array(1) {
+ ["Traversable"]=>
+ string(11) "Traversable"
+}
+
+--uppercase FALSE--
+array(1) {
+ ["Traversable"]=>
+ string(11) "Traversable"
+}
+
+--empty string DQ--
+array(1) {
+ ["Traversable"]=>
+ string(11) "Traversable"
+}
+
+--empty string SQ--
+array(1) {
+ ["Traversable"]=>
+ string(11) "Traversable"
+}
+
+--instance of classWithToString--
+Error: 2 - class_implements() expects parameter 2 to be boolean, object given, %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - class_implements() expects parameter 2 to be boolean, object given, %s(%d)
+bool(false)
+
+--undefined var--
+array(1) {
+ ["Traversable"]=>
+ string(11) "Traversable"
+}
+
+--unset var--
+array(1) {
+ ["Traversable"]=>
+ string(11) "Traversable"
+}
+
+--resource--
+Error: 2 - class_implements() expects parameter 2 to be boolean, resource given, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/spl/tests/countable_class_basic1.phpt b/ext/spl/tests/countable_class_basic1.phpt
new file mode 100644
index 000000000..11d7637ba
--- /dev/null
+++ b/ext/spl/tests/countable_class_basic1.phpt
@@ -0,0 +1,28 @@
+--TEST--
+SPL: Test shape of interface Countable.
+--SKIPIF--
+<?php if (!extension_loaded('spl') || !extension_loaded('reflection')) print 'skip'; ?>
+--FILE--
+<?php
+ReflectionClass::export('Countable');
+?>
+--EXPECTF--
+Interface [ <internal%s> interface Countable ] {
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [1] {
+ Method [ <internal%s> abstract public method count ] {
+ }
+ }
+}
diff --git a/ext/spl/tests/countable_count_variation1.phpt b/ext/spl/tests/countable_count_variation1.phpt
new file mode 100644
index 000000000..3538a20b2
--- /dev/null
+++ b/ext/spl/tests/countable_count_variation1.phpt
@@ -0,0 +1,68 @@
+--TEST--
+SPL: Countable::count() with wrong return types and exception.
+--FILE--
+<?php
+
+Class returnNull implements Countable {
+ function count() {
+ }
+}
+
+Class returnString implements Countable {
+ function count() {
+ return "hello";
+ }
+}
+
+Class returnObject implements Countable {
+ function count() {
+ return new returnObject;
+ }
+}
+
+Class returnArray implements Countable {
+ function count() {
+ return array(1,2,3);
+ }
+}
+
+Class throwException implements Countable {
+ function count() {
+ throw new Exception('Thrown from count');
+ }
+}
+
+
+echo "Count returns null:\n";
+var_dump(count(new returnNull));
+
+echo "Count returns a string:\n";
+var_dump(count(new returnString));
+
+echo "Count returns an object:\n";
+var_dump(count(new returnObject));
+
+echo "Count returns an array:\n";
+var_dump(count(new returnArray));
+
+echo "Count throws an exception:\n";
+try {
+ echo count(new throwException);
+} catch (Exception $e) {
+ echo $e->getMessage();
+}
+
+?>
+--EXPECTF--
+Count returns null:
+int(0)
+Count returns a string:
+int(0)
+Count returns an object:
+
+Notice: Object of class returnObject could not be converted to int in %s on line 40
+int(1)
+Count returns an array:
+int(1)
+Count throws an exception:
+Thrown from count \ No newline at end of file
diff --git a/ext/spl/tests/dit_002.phpt b/ext/spl/tests/dit_002.phpt
index f18d1198d..ed9ef785f 100755
--- a/ext/spl/tests/dit_002.phpt
+++ b/ext/spl/tests/dit_002.phpt
@@ -1,7 +1,7 @@
--TEST--
SPL: DirectoryIterator defaults
--SKIPIF--
-<?php if (!extension_loaded("spl")) print "skip"; ?>
+<?php if (!extension_loaded("spl") || !extension_loaded('reflection')) print "skip"; ?>
--FILE--
<?php
diff --git a/ext/spl/tests/iterator_044.phpt b/ext/spl/tests/iterator_044.phpt
index d3c625314..febf49594 100755
--- a/ext/spl/tests/iterator_044.phpt
+++ b/ext/spl/tests/iterator_044.phpt
@@ -72,8 +72,6 @@ $it->test($checks);
<?php exit(0); ?>
--EXPECTF--
Exception: MyCachingIterator does not use a full cache (see CachingIterator::__construct)
-
-Notice: Undefined index: 0 in %siterator_044.php on line %d
Exception: MyCachingIterator does not use a full cache (see CachingIterator::__construct)
Warning: CachingIterator::offsetExists() expects exactly 1 parameter, 0 given in %siterator_044.php on line %d
diff --git a/ext/sqlite/config.m4 b/ext/sqlite/config.m4
index 4c7a3c8a3..bd1b1c294 100644
--- a/ext/sqlite/config.m4
+++ b/ext/sqlite/config.m4
@@ -1,9 +1,9 @@
-dnl $Id: config.m4,v 1.41.2.1.2.2 2007/07/03 17:25:35 sniper Exp $
+dnl $Id: config.m4,v 1.41.2.1.2.4 2008/09/13 00:24:12 moriyoshi Exp $
dnl config.m4 for extension sqlite
dnl vim:et:ts=2:sw=2
PHP_ARG_WITH(sqlite, for sqlite support,
-[ --without-sqlite Do not include sqlite support. DIR is the sqlite base
+[ --without-sqlite=DIR Do not include sqlite support. DIR is the sqlite base
install directory [BUNDLED]], yes)
PHP_ARG_ENABLE(sqlite-utf8, whether to enable UTF-8 support in sqlite (default: ISO-8859-1),
diff --git a/ext/sqlite/pdo_sqlite2.c b/ext/sqlite/pdo_sqlite2.c
index 5a6f7f5c2..5885486a0 100644
--- a/ext/sqlite/pdo_sqlite2.c
+++ b/ext/sqlite/pdo_sqlite2.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pdo_sqlite2.c,v 1.6.2.3.2.3 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: pdo_sqlite2.c,v 1.6.2.3.2.4 2008/12/31 11:17:44 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
diff --git a/ext/sqlite/php_sqlite.h b/ext/sqlite/php_sqlite.h
index 83e420097..29032781b 100644
--- a/ext/sqlite/php_sqlite.h
+++ b/ext/sqlite/php_sqlite.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
| Marcus Boerger <helly@php.net> |
+----------------------------------------------------------------------+
- $Id: php_sqlite.h,v 1.32.2.2.2.3 2007/12/31 07:20:11 sebastian Exp $
+ $Id: php_sqlite.h,v 1.32.2.2.2.4 2008/12/31 11:17:44 sebastian Exp $
*/
#ifndef PHP_SQLITE_H
diff --git a/ext/sqlite/sess_sqlite.c b/ext/sqlite/sess_sqlite.c
index e2671051c..1a4608215 100644
--- a/ext/sqlite/sess_sqlite.c
+++ b/ext/sqlite/sess_sqlite.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: sess_sqlite.c,v 1.18.2.1.2.3 2007/12/31 07:20:11 sebastian Exp $ */
+/* $Id: sess_sqlite.c,v 1.18.2.1.2.4 2008/12/31 11:17:44 sebastian Exp $ */
#include "php.h"
diff --git a/ext/sqlite/sqlite.c b/ext/sqlite/sqlite.c
index 84cf22cd3..17576f0d5 100644
--- a/ext/sqlite/sqlite.c
+++ b/ext/sqlite/sqlite.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
| Marcus Boerger <helly@php.net> |
+----------------------------------------------------------------------+
- $Id: sqlite.c,v 1.166.2.13.2.10 2007/12/31 07:20:11 sebastian Exp $
+ $Id: sqlite.c,v 1.166.2.13.2.12 2008/12/31 11:17:44 sebastian Exp $
*/
#ifdef HAVE_CONFIG_H
@@ -1128,7 +1128,7 @@ PHP_MINFO_FUNCTION(sqlite)
{
php_info_print_table_start();
php_info_print_table_header(2, "SQLite support", "enabled");
- php_info_print_table_row(2, "PECL Module version", PHP_SQLITE_MODULE_VERSION " $Id: sqlite.c,v 1.166.2.13.2.10 2007/12/31 07:20:11 sebastian Exp $");
+ php_info_print_table_row(2, "PECL Module version", PHP_SQLITE_MODULE_VERSION " $Id: sqlite.c,v 1.166.2.13.2.12 2008/12/31 11:17:44 sebastian Exp $");
php_info_print_table_row(2, "SQLite Library", sqlite_libversion());
php_info_print_table_row(2, "SQLite Encoding", sqlite_libencoding());
php_info_print_table_end();
@@ -2917,11 +2917,13 @@ static enum callback_prep_t prep_callback_struct(struct php_sqlite_db *db, int i
MAKE_STD_ZVAL(alloc_funcs->step);
*(alloc_funcs->step) = *step;
zval_copy_ctor(alloc_funcs->step);
+ INIT_PZVAL(alloc_funcs->step);
if (is_agg) {
MAKE_STD_ZVAL(alloc_funcs->fini);
*(alloc_funcs->fini) = *fini;
zval_copy_ctor(alloc_funcs->fini);
+ INIT_PZVAL(alloc_funcs->fini);
} else {
alloc_funcs->fini = NULL;
}
diff --git a/ext/standard/array.c b/ext/standard/array.c
index 6f154b7d9..bf11bdc29 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -21,7 +21,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: array.c,v 1.308.2.21.2.55 2008/03/12 19:13:00 felipe Exp $ */
+/* $Id: array.c,v 1.308.2.21.2.65 2009/02/13 22:26:46 andrei Exp $ */
#include "php.h"
#include "php_ini.h"
@@ -667,6 +667,7 @@ PHP_FUNCTION(usort)
PHP_ARRAY_CMP_FUNC_RESTORE();
WRONG_PARAM_COUNT;
}
+
target_hash = HASH_OF(*array);
if (!target_hash) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "The argument should be an array");
@@ -675,6 +676,7 @@ PHP_FUNCTION(usort)
}
PHP_ARRAY_CMP_FUNC_CHECK(BG(user_compare_func_name))
+ BG(user_compare_fci_cache).initialized = 0;
if (zend_hash_sort(target_hash, zend_qsort, array_user_compare, 1 TSRMLS_CC) == FAILURE) {
PHP_ARRAY_CMP_FUNC_RESTORE();
@@ -707,6 +709,7 @@ PHP_FUNCTION(uasort)
}
PHP_ARRAY_CMP_FUNC_CHECK(BG(user_compare_func_name))
+ BG(user_compare_fci_cache).initialized = 0;
if (zend_hash_sort(target_hash, zend_qsort, array_user_compare, 0 TSRMLS_CC) == FAILURE) {
PHP_ARRAY_CMP_FUNC_RESTORE();
@@ -790,6 +793,7 @@ PHP_FUNCTION(uksort)
}
PHP_ARRAY_CMP_FUNC_CHECK(BG(user_compare_func_name))
+ BG(user_compare_fci_cache).initialized = 0;
if (zend_hash_sort(target_hash, zend_qsort, array_user_key_compare, 0 TSRMLS_CC) == FAILURE) {
PHP_ARRAY_CMP_FUNC_RESTORE();
@@ -1330,7 +1334,7 @@ static int php_valid_var_name(char *var_name, int len) /* {{{ */
Imports variables into symbol table from an array */
PHP_FUNCTION(extract)
{
- zval **var_array, **z_extract_type, **prefix;
+ zval **var_array, *orig_var_array, **z_extract_type, **prefix;
zval **entry, *data;
char *var_name;
smart_str final_name = {0};
@@ -1387,7 +1391,15 @@ PHP_FUNCTION(extract)
php_error_docref(NULL TSRMLS_CC, E_WARNING, "First argument should be an array");
return;
}
-
+
+ /* var_array is passed by ref for the needs of EXTR_REFS (needs to
+ * work on the original array to create refs to its members)
+ * simulate pass_by_value if EXTR_REFS is not used */
+ if (!extract_refs) {
+ orig_var_array = *var_array;
+ SEPARATE_ARG_IF_REF((*var_array));
+ }
+
zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(var_array), &pos);
while (zend_hash_get_current_data_ex(Z_ARRVAL_PP(var_array), (void **)&entry, &pos) == SUCCESS) {
key_type = zend_hash_get_current_key_ex(Z_ARRVAL_PP(var_array), &var_name, &var_name_len, &num_key, 0, &pos);
@@ -1462,20 +1474,13 @@ PHP_FUNCTION(extract)
if (extract_refs) {
zval **orig_var;
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(entry);
+ zval_add_ref(entry);
+
if (zend_hash_find(EG(active_symbol_table), final_name.c, final_name.len+1, (void **) &orig_var) == SUCCESS) {
- SEPARATE_ZVAL_TO_MAKE_IS_REF(entry);
- zval_add_ref(entry);
-
zval_ptr_dtor(orig_var);
-
*orig_var = *entry;
} else {
- if ((*var_array)->refcount > 1 || *entry == EG(uninitialized_zval_ptr)) {
- SEPARATE_ZVAL_TO_MAKE_IS_REF(entry);
- } else {
- (*entry)->is_ref = 1;
- }
- zval_add_ref(entry);
zend_hash_update(EG(active_symbol_table), final_name.c, final_name.len+1, (void **) entry, sizeof(zval *), NULL);
}
} else {
@@ -1494,6 +1499,10 @@ PHP_FUNCTION(extract)
zend_hash_move_forward_ex(Z_ARRVAL_PP(var_array), &pos);
}
+ if (!extract_refs) {
+ zval_ptr_dtor(var_array);
+ *var_array = orig_var_array;
+ }
smart_str_free(&final_name);
RETURN_LONG(count);
@@ -2001,7 +2010,7 @@ static void _phpi_pop(INTERNAL_FUNCTION_PARAMETERS, int off_the_end)
zval **stack, /* Input stack */
**val; /* Value to be popped */
char *key = NULL;
- int key_len = 0;
+ uint key_len = 0;
ulong index;
/* Get the arguments and do error-checking */
@@ -2019,10 +2028,11 @@ static void _phpi_pop(INTERNAL_FUNCTION_PARAMETERS, int off_the_end)
}
/* Get the first or last value and copy it into the return value */
- if (off_the_end)
+ if (off_the_end) {
zend_hash_internal_pointer_end(Z_ARRVAL_PP(stack));
- else
+ } else {
zend_hash_internal_pointer_reset(Z_ARRVAL_PP(stack));
+ }
zend_hash_get_current_data(Z_ARRVAL_PP(stack), (void **)&val);
RETVAL_ZVAL(*val, 1, 0);
@@ -2250,7 +2260,7 @@ PHP_FUNCTION(array_slice)
/* ..and the length */
if (length < 0) {
length = num_in - offset + length;
- } else if (((unsigned) offset + (unsigned) length) > (unsigned) num_in) {
+ } else if (((unsigned long) offset + (unsigned long) length) > (unsigned) num_in) {
length = num_in - offset;
}
@@ -2816,7 +2826,7 @@ PHP_FUNCTION(array_change_key_case)
}
/* }}} */
-/* {{{ proto array array_unique(array input)
+/* {{{ proto array array_unique(array input [, int sort_flags])
Removes duplicate values from array */
PHP_FUNCTION(array_unique)
{
@@ -2829,9 +2839,10 @@ PHP_FUNCTION(array_unique)
};
struct bucketindex *arTmp, *cmpdata, *lastkept;
unsigned int i;
+ long sort_type = SORT_REGULAR;
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
- WRONG_PARAM_COUNT;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|l", &array, &sort_type) == FAILURE) {
+ return;
}
target_hash = HASH_OF(*array);
if (!target_hash) {
@@ -2839,6 +2850,8 @@ PHP_FUNCTION(array_unique)
RETURN_FALSE;
}
+ set_compare_func(sort_type TSRMLS_CC);
+
array_init(return_value);
zend_hash_copy(Z_ARRVAL_P(return_value), target_hash, (copy_ctor_func_t) zval_add_ref, (void *)&tmp, sizeof(zval*));
@@ -2856,7 +2869,6 @@ PHP_FUNCTION(array_unique)
arTmp[i].i = i;
}
arTmp[i].b = NULL;
- set_compare_func(SORT_STRING TSRMLS_CC);
zend_qsort((void *) arTmp, i, sizeof(struct bucketindex), array_data_compare TSRMLS_CC);
/* go through the sorted array and delete duplicates from the copy */
@@ -2988,14 +3000,17 @@ static void php_array_intersect_key(INTERNAL_FUNCTION_PARAMETERS, int data_compa
efree(callback_name);
intersect_data_compare_func = zval_user_compare;
BG(user_compare_func_name) = args[argc];
+ BG(user_compare_fci_cache).initialized = 0;
} else if (data_compare_type == INTERSECT_COMP_DATA_INTERNAL) {
intersect_data_compare_func = zval_compare;
}
- if (Z_TYPE_PP(args[0]) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument #1 is not an array");
- RETVAL_NULL();
- goto out;
+ for (i = 0; i < argc; i++) {
+ if (Z_TYPE_PP(args[i]) != IS_ARRAY) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument #%d is not an array", i + 1);
+ RETVAL_NULL();
+ goto out;
+ }
}
array_init(return_value);
@@ -3004,12 +3019,7 @@ static void php_array_intersect_key(INTERNAL_FUNCTION_PARAMETERS, int data_compa
if (p->nKeyLength == 0) {
ok = 1;
for (i = 1; i < argc; i++) {
- if (Z_TYPE_PP(args[i]) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument #%d is not an array", i + 1);
- zval_dtor(return_value);
- RETVAL_NULL();
- goto out;
- } else if (zend_hash_index_find(Z_ARRVAL_PP(args[i]), p->h, (void**)&data) == FAILURE ||
+ if (zend_hash_index_find(Z_ARRVAL_PP(args[i]), p->h, (void**)&data) == FAILURE ||
(intersect_data_compare_func &&
intersect_data_compare_func((zval**)p->pData, data TSRMLS_CC) != 0)) {
ok = 0;
@@ -3023,12 +3033,7 @@ static void php_array_intersect_key(INTERNAL_FUNCTION_PARAMETERS, int data_compa
} else {
ok = 1;
for (i = 1; i < argc; i++) {
- if (Z_TYPE_PP(args[i]) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument #%d is not an array", i + 1);
- zval_dtor(return_value);
- RETVAL_NULL();
- goto out;
- } else if (zend_hash_quick_find(Z_ARRVAL_PP(args[i]), p->arKey, p->nKeyLength, p->h, (void**)&data) == FAILURE ||
+ if (zend_hash_quick_find(Z_ARRVAL_PP(args[i]), p->arKey, p->nKeyLength, p->h, (void**)&data) == FAILURE ||
(intersect_data_compare_func &&
intersect_data_compare_func((zval**)p->pData, data TSRMLS_CC) != 0)) {
ok = 0;
@@ -3099,6 +3104,7 @@ static void php_array_intersect(INTERNAL_FUNCTION_PARAMETERS, int behavior, int
efree(callback_name);
BG(user_compare_func_name) = args[arr_argc];
+ BG(user_compare_fci_cache).initialized = 0;
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "data_compare_type is %d. This should never happen. Please report as a bug", data_compare_type);
return;
@@ -3160,6 +3166,7 @@ static void php_array_intersect(INTERNAL_FUNCTION_PARAMETERS, int behavior, int
intersect_key_compare_func = array_user_key_compare;
intersect_data_compare_func = array_data_compare;
BG(user_compare_func_name) = args[arr_argc];
+ BG(user_compare_fci_cache).initialized = 0;
} else if (data_compare_type == INTERSECT_COMP_DATA_USER
&&
key_compare_type == INTERSECT_COMP_KEY_USER) {
@@ -3187,6 +3194,7 @@ static void php_array_intersect(INTERNAL_FUNCTION_PARAMETERS, int behavior, int
intersect_key_compare_func = array_user_key_compare;
intersect_data_compare_func = array_user_compare;
BG(user_compare_func_name) = args[arr_argc + 1];/* data - key */
+ BG(user_compare_fci_cache).initialized = 0;
} else {
efree(args);
php_error_docref(NULL TSRMLS_CC, E_WARNING, "data_compare_type is %d. key_compare_type is %d. This should never happen. Please report as a bug", data_compare_type, key_compare_type);
@@ -3245,6 +3253,7 @@ static void php_array_intersect(INTERNAL_FUNCTION_PARAMETERS, int behavior, int
if ((behavior & INTERSECT_NORMAL) && data_compare_type == INTERSECT_COMP_DATA_USER) {
/* array_uintersect() */
BG(user_compare_func_name) = args[arr_argc];
+ BG(user_compare_fci_cache).initialized = 0;
}
/* go through the lists and look for common values */
@@ -3254,6 +3263,7 @@ static void php_array_intersect(INTERNAL_FUNCTION_PARAMETERS, int behavior, int
key_compare_type == INTERSECT_COMP_KEY_USER) {
BG(user_compare_func_name) = args[argc - 1];
+ BG(user_compare_fci_cache).initialized = 0;
}
for (i = 1; i < arr_argc; i++) {
@@ -3275,11 +3285,13 @@ static void php_array_intersect(INTERNAL_FUNCTION_PARAMETERS, int behavior, int
*/
if (data_compare_type == INTERSECT_COMP_DATA_USER) {
BG(user_compare_func_name) = args[arr_argc];
+ BG(user_compare_fci_cache).initialized = 0;
}
if (intersect_data_compare_func(ptrs[0], ptrs[i] TSRMLS_CC) != 0) {
c = 1;
if (key_compare_type == INTERSECT_COMP_KEY_USER) {
BG(user_compare_func_name) = args[argc - 1];
+ BG(user_compare_fci_cache).initialized = 0;
/* When KEY_USER, the last parameter is always the callback */
}
/* we are going to the break */
@@ -3466,14 +3478,17 @@ static void php_array_diff_key(INTERNAL_FUNCTION_PARAMETERS, int data_compare_ty
efree(callback_name);
diff_data_compare_func = zval_user_compare;
BG(user_compare_func_name) = args[argc];
+ BG(user_compare_fci_cache).initialized = 0;
} else if (data_compare_type == DIFF_COMP_DATA_INTERNAL) {
diff_data_compare_func = zval_compare;
}
- if (Z_TYPE_PP(args[0]) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument #1 is not an array");
- RETVAL_NULL();
- goto out;
+ for (i = 0; i < argc; i++) {
+ if (Z_TYPE_PP(args[i]) != IS_ARRAY) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument #%d is not an array", i + 1);
+ RETVAL_NULL();
+ goto out;
+ }
}
array_init(return_value);
@@ -3482,12 +3497,7 @@ static void php_array_diff_key(INTERNAL_FUNCTION_PARAMETERS, int data_compare_ty
if (p->nKeyLength == 0) {
ok = 1;
for (i = 1; i < argc; i++) {
- if (Z_TYPE_PP(args[i]) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument #%d is not an array", i + 1);
- zval_dtor(return_value);
- RETVAL_NULL();
- goto out;
- } else if (zend_hash_index_find(Z_ARRVAL_PP(args[i]), p->h, (void**)&data) == SUCCESS &&
+ if (zend_hash_index_find(Z_ARRVAL_PP(args[i]), p->h, (void**)&data) == SUCCESS &&
(!diff_data_compare_func ||
diff_data_compare_func((zval**)p->pData, data TSRMLS_CC) == 0)) {
ok = 0;
@@ -3501,12 +3511,7 @@ static void php_array_diff_key(INTERNAL_FUNCTION_PARAMETERS, int data_compare_ty
} else {
ok = 1;
for (i = 1; i < argc; i++) {
- if (Z_TYPE_PP(args[i]) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument #%d is not an array", i + 1);
- zval_dtor(return_value);
- RETVAL_NULL();
- goto out;
- } else if (zend_hash_quick_find(Z_ARRVAL_PP(args[i]), p->arKey, p->nKeyLength, p->h, (void**)&data) == SUCCESS &&
+ if (zend_hash_quick_find(Z_ARRVAL_PP(args[i]), p->arKey, p->nKeyLength, p->h, (void**)&data) == SUCCESS &&
(!diff_data_compare_func ||
diff_data_compare_func((zval**)p->pData, data TSRMLS_CC) == 0)) {
ok = 0;
@@ -3577,6 +3582,7 @@ static void php_array_diff(INTERNAL_FUNCTION_PARAMETERS, int behavior, int data_
efree(callback_name);
BG(user_compare_func_name) = args[arr_argc];
+ BG(user_compare_fci_cache).initialized = 0;
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "data_compare_type is %d. This should never happen. Please report as a bug", data_compare_type);
return;
@@ -3638,6 +3644,7 @@ static void php_array_diff(INTERNAL_FUNCTION_PARAMETERS, int behavior, int data_
diff_key_compare_func = array_user_key_compare;
diff_data_compare_func = array_data_compare;
BG(user_compare_func_name) = args[arr_argc];
+ BG(user_compare_fci_cache).initialized = 0;
} else if (data_compare_type == DIFF_COMP_DATA_USER
&&
key_compare_type == DIFF_COMP_KEY_USER) {
@@ -3665,6 +3672,7 @@ static void php_array_diff(INTERNAL_FUNCTION_PARAMETERS, int behavior, int data_
diff_key_compare_func = array_user_key_compare;
diff_data_compare_func = array_user_compare;
BG(user_compare_func_name) = args[arr_argc + 1];/* data - key*/
+ BG(user_compare_fci_cache).initialized = 0;
} else {
efree(args);
php_error_docref(NULL TSRMLS_CC, E_WARNING, "data_compare_type is %d. key_compare_type is %d. This should never happen. Please report as a bug", data_compare_type, key_compare_type);
@@ -3723,6 +3731,7 @@ static void php_array_diff(INTERNAL_FUNCTION_PARAMETERS, int behavior, int data_
if (behavior == DIFF_NORMAL && data_compare_type == DIFF_COMP_DATA_USER) {
/* array_udiff() */
BG(user_compare_func_name) = args[arr_argc];
+ BG(user_compare_fci_cache).initialized = 0;
}
/* go through the lists and look for values of ptr[0] that are not in the others */
@@ -3732,6 +3741,7 @@ static void php_array_diff(INTERNAL_FUNCTION_PARAMETERS, int behavior, int data_
key_compare_type == DIFF_COMP_KEY_USER) {
BG(user_compare_func_name) = args[argc - 1];
+ BG(user_compare_fci_cache).initialized = 0;
}
c = 1;
for (i = 1; i < arr_argc; i++) {
@@ -3759,12 +3769,14 @@ static void php_array_diff(INTERNAL_FUNCTION_PARAMETERS, int behavior, int data_
if (*ptr) {
if (data_compare_type == DIFF_COMP_DATA_USER) {
BG(user_compare_func_name) = args[arr_argc];
+ BG(user_compare_fci_cache).initialized = 0;
}
if (diff_data_compare_func(ptrs[0], ptr TSRMLS_CC) != 0) {
/* the data is not the same */
c = -1;
if (key_compare_type == DIFF_COMP_KEY_USER) {
BG(user_compare_func_name) = args[argc - 1];
+ BG(user_compare_fci_cache).initialized = 0;
}
} else {
break;
diff --git a/ext/standard/assert.c b/ext/standard/assert.c
index c4fb5a13e..b9b8e95d5 100644
--- a/ext/standard/assert.c
+++ b/ext/standard/assert.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: assert.c,v 1.60.2.3.2.7 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: assert.c,v 1.60.2.3.2.8 2008/12/31 11:17:44 sebastian Exp $ */
/* {{{ includes/startup/misc */
diff --git a/ext/standard/base64.c b/ext/standard/base64.c
index b3179b99f..1f24c17f3 100644
--- a/ext/standard/base64.c
+++ b/ext/standard/base64.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -15,7 +15,7 @@
| Author: Jim Winstead <jimw@php.net> |
+----------------------------------------------------------------------+
*/
-/* $Id: base64.c,v 1.43.2.2.2.4 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: base64.c,v 1.43.2.2.2.7 2009/01/25 18:27:39 iliaa Exp $ */
#include <string.h>
@@ -153,7 +153,13 @@ PHPAPI unsigned char *php_base64_decode_ex(const unsigned char *str, int length,
/* run through the whole string, converting as we go */
while ((ch = *current++) != '\0' && length-- > 0) {
- if (ch == base64_pad) break;
+ if (ch == base64_pad) {
+ if (*current != '=' && (i % 4) == 1) {
+ efree(result);
+ return NULL;
+ }
+ continue;
+ }
ch = base64_reverse_table[ch];
if ((!strict && ch < 0) || ch == -1) { /* a space or some other separator character, we simply skip over */
diff --git a/ext/standard/base64.h b/ext/standard/base64.h
index 11a65e1b1..f01e30dd9 100644
--- a/ext/standard/base64.h
+++ b/ext/standard/base64.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: base64.h,v 1.14.2.1.2.3 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: base64.h,v 1.14.2.1.2.4 2008/12/31 11:17:44 sebastian Exp $ */
#ifndef BASE64_H
#define BASE64_H
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c
index 3d61f3d0c..1b3b07cd2 100644
--- a/ext/standard/basic_functions.c
+++ b/ext/standard/basic_functions.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: basic_functions.c,v 1.725.2.31.2.69 2008/03/20 00:55:26 dsp Exp $ */
+/* $Id: basic_functions.c,v 1.725.2.31.2.80 2008/12/31 11:17:44 sebastian Exp $ */
#include "php.h"
#include "php_streams.h"
@@ -59,7 +59,7 @@ typedef struct yy_buffer_state *YY_BUFFER_STATE;
#include <netinet/in.h>
#endif
-#include<netdb.h>
+#include <netdb.h>
#if HAVE_ARPA_INET_H
# include <arpa/inet.h>
@@ -378,7 +378,7 @@ ZEND_END_ARG_INFO()
static
ZEND_BEGIN_ARG_INFO_EX(arginfo_extract, 0, 0, 1)
- ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
+ ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, arg) /* ARRAY_INFO(0, arg, 0) */
ZEND_ARG_INFO(0, extract_type)
ZEND_ARG_INFO(0, prefix)
ZEND_END_ARG_INFO()
@@ -3917,6 +3917,8 @@ static void basic_globals_ctor(php_basic_globals *basic_globals_p TSRMLS_DC)
memset(&BG(mblen_state), 0, sizeof(BG(mblen_state)));
#endif
BG(incomplete_class) = incomplete_class_entry;
+ BG(page_uid) = -1;
+ BG(page_gid) = -1;
}
@@ -4131,6 +4133,7 @@ PHP_RINIT_FUNCTION(basic)
memset(BG(strtok_table), 0, 256);
BG(strtok_string) = NULL;
BG(strtok_zval) = NULL;
+ BG(strtok_last) = NULL;
BG(locale_string) = NULL;
BG(user_compare_func_name) = NULL;
BG(array_walk_func_name) = NULL;
@@ -4219,6 +4222,8 @@ PHP_RSHUTDOWN_FUNCTION(basic)
PHP_RSHUTDOWN(user_filters)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
+ BG(page_uid) = -1;
+ BG(page_gid) = -1;
return SUCCESS;
}
@@ -4944,6 +4949,7 @@ error options:
1 = send via email to 3rd parameter 4th option = additional headers
2 = send via tcp/ip to 3rd parameter (name or ip:port)
3 = save to file in 3rd parameter
+ 4 = send to SAPI logger directly
*/
/* {{{ proto bool error_log(string message [, int message_type [, string destination [, string extra_headers]]])
@@ -5046,7 +5052,13 @@ PHPAPI int _php_error_log(int opt_err, char *message, char *opt, char *headers T
php_stream_write(stream, message, strlen(message));
php_stream_close(stream);
break;
-
+ case 4: /* send to SAPI */
+ if (sapi_module.log_message) {
+ sapi_module.log_message(message);
+ } else {
+ return FAILURE;
+ }
+ break;
default:
php_log_err(message TSRMLS_CC);
break;
@@ -6305,7 +6317,11 @@ PHP_FUNCTION(parse_ini_file)
Z_TYPE(fh) = ZEND_HANDLE_FILENAME;
array_init(return_value);
- zend_parse_ini_file(&fh, 0, ini_parser_cb, return_value);
+ if (zend_parse_ini_file(&fh, 0, ini_parser_cb, return_value) == FAILURE) {
+ zend_hash_destroy(Z_ARRVAL_P(return_value));
+ efree(Z_ARRVAL_P(return_value));
+ RETURN_FALSE;
+ }
}
/* }}} */
diff --git a/ext/standard/basic_functions.h b/ext/standard/basic_functions.h
index b9269fe8a..e0dddabd7 100644
--- a/ext/standard/basic_functions.h
+++ b/ext/standard/basic_functions.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: basic_functions.h,v 1.139.2.4.2.7 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: basic_functions.h,v 1.139.2.4.2.8 2008/12/31 11:17:44 sebastian Exp $ */
#ifndef BASIC_FUNCTIONS_H
#define BASIC_FUNCTIONS_H
diff --git a/ext/standard/browscap.c b/ext/standard/browscap.c
index f8fde93dd..585271cf2 100644
--- a/ext/standard/browscap.c
+++ b/ext/standard/browscap.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: browscap.c,v 1.85.2.2.2.5 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: browscap.c,v 1.85.2.2.2.6 2008/12/31 11:17:44 sebastian Exp $ */
#include "php.h"
#include "php_regex.h"
diff --git a/ext/standard/crc32.c b/ext/standard/crc32.c
index 44e711b1b..fd43e4686 100644
--- a/ext/standard/crc32.c
+++ b/ext/standard/crc32.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: crc32.c,v 1.16.2.4.2.2 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: crc32.c,v 1.16.2.4.2.3 2008/12/31 11:17:44 sebastian Exp $ */
#include "php.h"
#include "basic_functions.h"
diff --git a/ext/standard/crc32.h b/ext/standard/crc32.h
index 477bac1de..9182d8a26 100644
--- a/ext/standard/crc32.h
+++ b/ext/standard/crc32.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: crc32.h,v 1.6.2.1.2.2 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: crc32.h,v 1.6.2.1.2.3 2008/12/31 11:17:44 sebastian Exp $ */
/*
* This code implements the AUTODIN II polynomial
diff --git a/ext/standard/credits.c b/ext/standard/credits.c
index d6f0a8e6f..d96c7cb42 100644
--- a/ext/standard/credits.c
+++ b/ext/standard/credits.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: credits.c,v 1.36.2.4.2.6 2008/04/10 05:32:26 philip Exp $ */
+/* $Id: credits.c,v 1.36.2.4.2.9 2008/12/31 11:17:44 sebastian Exp $ */
#include "php.h"
#include "info.h"
@@ -65,7 +65,7 @@ PHPAPI void php_print_credits(int flag TSRMLS_DC)
php_info_print_table_header(2, "Contribution", "Authors");
CREDIT_LINE("Zend Scripting Language Engine", "Andi Gutmans, Zeev Suraski");
CREDIT_LINE("Extension Module API", "Andi Gutmans, Zeev Suraski, Andrei Zmievski");
- CREDIT_LINE("UNIX Build and Modularization", "Stig Bakken, Sascha Schumann");
+ CREDIT_LINE("UNIX Build and Modularization", "Stig Bakken, Sascha Schumann, Jani Taskinen");
CREDIT_LINE("Win32 Port", "Shane Caraveo, Zeev Suraski, Wez Furlong");
CREDIT_LINE("Server API (SAPI) Abstraction Layer", "Andi Gutmans, Shane Caraveo, Zeev Suraski");
CREDIT_LINE("Streams Abstraction Layer", "Wez Furlong, Sara Golemon");
@@ -114,7 +114,7 @@ PHPAPI void php_print_credits(int flag TSRMLS_DC)
/* Website Team */
php_info_print_table_start();
php_info_print_table_header(1, "PHP Website Team");
- php_info_print_table_row(1, "Hannes Magnusson, Colin Viebrock, Jim Winstead");
+ php_info_print_table_row(1, "Rasmus Lerdorf, Hannes Magnusson, Philip Olson");
php_info_print_table_end();
}
diff --git a/ext/standard/credits.h b/ext/standard/credits.h
index f8466147a..8b524c9fd 100644
--- a/ext/standard/credits.h
+++ b/ext/standard/credits.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: credits.h,v 1.11.2.1.2.2 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: credits.h,v 1.11.2.1.2.3 2008/12/31 11:17:44 sebastian Exp $ */
#ifndef CREDITS_H
#define CREDITS_H
diff --git a/ext/standard/crypt.c b/ext/standard/crypt.c
index fa51d6f7d..a525402a7 100644
--- a/ext/standard/crypt.c
+++ b/ext/standard/crypt.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
| Rasmus Lerdorf <rasmus@php.net> |
+----------------------------------------------------------------------+
*/
-/* $Id: crypt.c,v 1.62.2.1.2.7 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: crypt.c,v 1.62.2.1.2.8 2008/12/31 11:17:44 sebastian Exp $ */
#include <stdlib.h>
#include "php.h"
diff --git a/ext/standard/css.c b/ext/standard/css.c
index e138ab6c6..ce0b0ffb6 100644
--- a/ext/standard/css.c
+++ b/ext/standard/css.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: css.c,v 1.13.2.1.2.2 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: css.c,v 1.13.2.1.2.3 2008/12/31 11:17:44 sebastian Exp $ */
#include "php.h"
#include "info.h"
diff --git a/ext/standard/css.h b/ext/standard/css.h
index ad80fa783..47bf1ae67 100644
--- a/ext/standard/css.h
+++ b/ext/standard/css.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: css.h,v 1.6.2.1.2.2 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: css.h,v 1.6.2.1.2.3 2008/12/31 11:17:44 sebastian Exp $ */
#ifndef CSS_H
#define CSS_H
diff --git a/ext/standard/cyr_convert.c b/ext/standard/cyr_convert.c
index ff1bd5f94..588c1fe11 100644
--- a/ext/standard/cyr_convert.c
+++ b/ext/standard/cyr_convert.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: cyr_convert.c,v 1.27.2.3.2.2 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: cyr_convert.c,v 1.27.2.3.2.3 2008/12/31 11:17:44 sebastian Exp $ */
#include <stdlib.h>
diff --git a/ext/standard/cyr_convert.h b/ext/standard/cyr_convert.h
index 970edc992..9c775fc49 100644
--- a/ext/standard/cyr_convert.h
+++ b/ext/standard/cyr_convert.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: cyr_convert.h,v 1.11.2.1.2.2 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: cyr_convert.h,v 1.11.2.1.2.3 2008/12/31 11:17:44 sebastian Exp $ */
#ifndef CYR_CONVERT_H
#define CYR_CONVERT_H
diff --git a/ext/standard/datetime.c b/ext/standard/datetime.c
index c0bb09be0..7f1a9d321 100644
--- a/ext/standard/datetime.c
+++ b/ext/standard/datetime.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: datetime.c,v 1.134.2.2.2.5 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: datetime.c,v 1.134.2.2.2.6 2008/12/31 11:17:44 sebastian Exp $ */
#include "php.h"
#include "zend_operators.h"
diff --git a/ext/standard/datetime.h b/ext/standard/datetime.h
index c0c7a47d0..76f533f0e 100644
--- a/ext/standard/datetime.h
+++ b/ext/standard/datetime.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: datetime.h,v 1.23.2.2.2.2 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: datetime.h,v 1.23.2.2.2.3 2008/12/31 11:17:44 sebastian Exp $ */
#ifndef DATETIME_H
#define DATETIME_H
diff --git a/ext/standard/dir.c b/ext/standard/dir.c
index f6737ed1a..c65cd9f8f 100644
--- a/ext/standard/dir.c
+++ b/ext/standard/dir.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dir.c,v 1.147.2.3.2.16 2008/03/05 12:10:18 tony2001 Exp $ */
+/* $Id: dir.c,v 1.147.2.3.2.21 2008/12/31 11:17:44 sebastian Exp $ */
/* {{{ includes/startup/misc */
@@ -26,6 +26,7 @@
#include "php_dir.h"
#include "php_string.h"
#include "php_scandir.h"
+#include "basic_functions.h"
#ifdef HAVE_DIRENT_H
#include <dirent.h>
@@ -220,6 +221,8 @@ static void _php_do_opendir(INTERNAL_FUNCTION_PARAMETERS, int createobject)
if (dirp == NULL) {
RETURN_FALSE;
}
+
+ dirp->flags |= PHP_STREAM_FLAG_NO_FCLOSE;
php_set_default_dir(dirp->rsrc_id TSRMLS_CC);
@@ -260,6 +263,11 @@ PHP_FUNCTION(closedir)
FETCH_DIRP();
+ if (!(dirp->flags & PHP_STREAM_FLAG_IS_DIR)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a valid Directory resource", dirp->rsrc_id);
+ RETURN_FALSE;
+ }
+
rsrc_id = dirp->rsrc_id;
zend_list_delete(dirp->rsrc_id);
@@ -287,7 +295,7 @@ PHP_FUNCTION(chroot)
RETURN_FALSE;
}
- realpath_cache_clean(TSRMLS_C);
+ php_clear_stat_cache(TSRMLS_C);
ret = chdir("/");
@@ -322,6 +330,15 @@ PHP_FUNCTION(chdir)
RETURN_FALSE;
}
+ if (BG(CurrentStatFile) && !IS_ABSOLUTE_PATH(BG(CurrentStatFile), strlen(BG(CurrentStatFile)))) {
+ efree(BG(CurrentStatFile));
+ BG(CurrentStatFile) = NULL;
+ }
+ if (BG(CurrentLStatFile) && !IS_ABSOLUTE_PATH(BG(CurrentLStatFile), strlen(BG(CurrentLStatFile)))) {
+ efree(BG(CurrentLStatFile));
+ BG(CurrentLStatFile) = NULL;
+ }
+
RETURN_TRUE;
}
/* }}} */
@@ -360,6 +377,11 @@ PHP_FUNCTION(rewinddir)
FETCH_DIRP();
+ if (!(dirp->flags & PHP_STREAM_FLAG_IS_DIR)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a valid Directory resource", dirp->rsrc_id);
+ RETURN_FALSE;
+ }
+
php_stream_rewinddir(dirp);
}
/* }}} */
@@ -374,6 +396,11 @@ PHP_NAMED_FUNCTION(php_if_readdir)
FETCH_DIRP();
+ if (!(dirp->flags & PHP_STREAM_FLAG_IS_DIR)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a valid Directory resource", dirp->rsrc_id);
+ RETURN_FALSE;
+ }
+
if (php_stream_readdir(dirp, &entry)) {
RETURN_STRINGL(entry.d_name, strlen(entry.d_name), 1);
}
diff --git a/ext/standard/dl.c b/ext/standard/dl.c
index f652d2536..8565b67c8 100644
--- a/ext/standard/dl.c
+++ b/ext/standard/dl.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dl.c,v 1.106.2.1.2.6 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: dl.c,v 1.106.2.1.2.7 2008/12/31 11:17:44 sebastian Exp $ */
#include "php.h"
#include "dl.h"
diff --git a/ext/standard/dl.h b/ext/standard/dl.h
index 6b00fa74e..906c666be 100644
--- a/ext/standard/dl.h
+++ b/ext/standard/dl.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dl.h,v 1.23.2.1.2.2 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: dl.h,v 1.23.2.1.2.3 2008/12/31 11:17:44 sebastian Exp $ */
#ifndef DL_H
#define DL_H
diff --git a/ext/standard/dns.c b/ext/standard/dns.c
index a224a1cd9..9227cd32b 100644
--- a/ext/standard/dns.c
+++ b/ext/standard/dns.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dns.c,v 1.70.2.7.2.6 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: dns.c,v 1.70.2.7.2.9 2009/01/08 17:20:21 felipe Exp $ */
/* {{{ includes */
#include "php.h"
@@ -472,14 +472,23 @@ static u_char *php_parserr(u_char *cp, querybuf *answer, int type_to_fetch, int
add_assoc_stringl(*subarray, "os", cp, n, 1);
cp += n;
break;
- case DNS_T_TXT:
- add_assoc_string(*subarray, "type", "TXT", 1);
- n = cp[0];
- tp = emalloc(n + 1);
- memcpy(tp, cp + 1, n);
- tp[n] = '\0';
- cp += dlen;
- add_assoc_stringl(*subarray, "txt", tp, n, 0);
+ case DNS_T_TXT:
+ {
+ int ll = 0;
+
+ add_assoc_string(*subarray, "type", "TXT", 1);
+ tp = emalloc(dlen + 1);
+
+ while (ll < dlen) {
+ n = cp[ll];
+ memcpy(tp + ll , cp + ll + 1, n);
+ ll = ll + n + 1;
+ }
+ tp[dlen] = '\0';
+ cp += dlen;
+
+ add_assoc_stringl(*subarray, "txt", tp, dlen - 1, 0);
+ }
break;
case DNS_T_SOA:
add_assoc_string(*subarray, "type", "SOA", 1);
diff --git a/ext/standard/dns.h b/ext/standard/dns.h
index 356ced73e..6c3788cfd 100644
--- a/ext/standard/dns.h
+++ b/ext/standard/dns.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dns.h,v 1.19.2.1.2.2 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: dns.h,v 1.19.2.1.2.3 2008/12/31 11:17:44 sebastian Exp $ */
#ifndef DNS_H
#define DNS_H
diff --git a/ext/standard/exec.c b/ext/standard/exec.c
index 7f1aea174..19d25270c 100644
--- a/ext/standard/exec.c
+++ b/ext/standard/exec.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
| Ilia Alshanetsky <iliaa@php.net> |
+----------------------------------------------------------------------+
*/
-/* $Id: exec.c,v 1.113.2.3.2.10 2008/04/08 17:17:07 iliaa Exp $ */
+/* $Id: exec.c,v 1.113.2.3.2.11 2008/12/31 11:17:44 sebastian Exp $ */
#include <stdio.h>
#include "php.h"
diff --git a/ext/standard/exec.h b/ext/standard/exec.h
index 371f695e1..d63db57bc 100644
--- a/ext/standard/exec.h
+++ b/ext/standard/exec.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: exec.h,v 1.24.2.3.2.2 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: exec.h,v 1.24.2.3.2.3 2008/12/31 11:17:44 sebastian Exp $ */
#ifndef EXEC_H
#define EXEC_H
diff --git a/ext/standard/file.c b/ext/standard/file.c
index 8ff709c58..10f987fe2 100644
--- a/ext/standard/file.c
+++ b/ext/standard/file.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -21,7 +21,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: file.c,v 1.409.2.6.2.31 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: file.c,v 1.409.2.6.2.38 2008/12/31 11:17:44 sebastian Exp $ */
/* Synced with php 3.0 revision 1.218 1999-06-16 [ssb] */
@@ -195,10 +195,10 @@ PHP_MINIT_FUNCTION(file)
REGISTER_LONG_CONSTANT("SEEK_SET", SEEK_SET, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("SEEK_CUR", SEEK_CUR, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("SEEK_END", SEEK_END, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOCK_SH", 1, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOCK_EX", 2, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOCK_UN", 3, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("LOCK_NB", 4, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOCK_SH", PHP_LOCK_SH, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOCK_EX", PHP_LOCK_EX, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOCK_UN", PHP_LOCK_UN, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("LOCK_NB", PHP_LOCK_NB, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("STREAM_NOTIFY_CONNECT", PHP_STREAM_NOTIFY_CONNECT, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("STREAM_NOTIFY_AUTH_REQUIRED", PHP_STREAM_NOTIFY_AUTH_REQUIRED, CONST_CS | CONST_PERSISTENT);
@@ -291,7 +291,9 @@ PHP_MINIT_FUNCTION(file)
REGISTER_LONG_CONSTANT("FILE_SKIP_EMPTY_LINES", PHP_FILE_SKIP_EMPTY_LINES, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("FILE_APPEND", PHP_FILE_APPEND, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("FILE_NO_DEFAULT_CONTEXT", PHP_FILE_NO_DEFAULT_CONTEXT, CONST_CS | CONST_PERSISTENT);
-
+ REGISTER_LONG_CONSTANT("FILE_TEXT", 0, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("FILE_BINARY", 0, CONST_CS | CONST_PERSISTENT);
+
#ifdef HAVE_FNMATCH
REGISTER_LONG_CONSTANT("FNM_NOESCAPE", FNM_NOESCAPE, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("FNM_PATHNAME", FNM_PATHNAME, CONST_CS | CONST_PERSISTENT);
@@ -345,7 +347,7 @@ PHP_FUNCTION(flock)
}
/* flock_values contains all possible actions if (operation & 4) we won't block on the lock */
- act = flock_values[act - 1] | (operation & 4 ? LOCK_NB : 0);
+ act = flock_values[act - 1] | (operation & PHP_LOCK_NB ? LOCK_NB : 0);
if (php_stream_lock(stream, act)) {
if (operation && errno == EWOULDBLOCK && arg3 && PZVAL_IS_REF(arg3)) {
Z_LVAL_P(arg3) = 1;
@@ -891,7 +893,7 @@ PHP_NAMED_FUNCTION(php_if_fopen)
if (stream == NULL) {
RETURN_FALSE;
}
-
+
php_stream_to_zval(stream, return_value);
if (zcontext) {
@@ -912,6 +914,12 @@ PHPAPI PHP_FUNCTION(fclose)
}
PHP_STREAM_TO_ZVAL(stream, arg1);
+
+ if ((stream->flags & PHP_STREAM_FLAG_NO_FCLOSE) != 0) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a valid stream resource", stream->rsrc_id);
+ RETURN_FALSE;
+ }
+
if (!stream->is_persistent) {
zend_list_delete(stream->rsrc_id);
} else {
@@ -1129,7 +1137,7 @@ PHPAPI PHP_FUNCTION(fgetc)
}
/* }}} */
-/* {{{ proto string fgetss(resource fp [, int length, string allowable_tags])
+/* {{{ proto string fgetss(resource fp [, int length [, string allowable_tags]])
Get a line from file pointer and strip HTML tags */
PHPAPI PHP_FUNCTION(fgetss)
{
@@ -1913,7 +1921,7 @@ quit_loop:
}
/* }}} */
-#define FPUTCSV_FLD_CHK(c) memchr(Z_STRVAL_PP(field), c, Z_STRLEN_PP(field))
+#define FPUTCSV_FLD_CHK(c) memchr(Z_STRVAL(field), c, Z_STRLEN(field))
/* {{{ proto int fputcsv(resource fp, array fields [, string delimiter [, string enclosure]])
Format line as CSV and write to file pointer */
@@ -1924,7 +1932,7 @@ PHP_FUNCTION(fputcsv)
const char escape_char = '\\';
php_stream *stream;
int ret;
- zval *fp = NULL, *fields = NULL, **field = NULL;
+ zval *fp = NULL, *fields = NULL, **field_tmp = NULL, field;
char *delimiter_str = NULL, *enclosure_str = NULL;
int delimiter_str_len, enclosure_str_len;
HashPosition pos;
@@ -1965,11 +1973,14 @@ PHP_FUNCTION(fputcsv)
count = zend_hash_num_elements(Z_ARRVAL_P(fields));
zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(fields), &pos);
- while (zend_hash_get_current_data_ex(Z_ARRVAL_P(fields), (void **) &field, &pos) == SUCCESS) {
- if (Z_TYPE_PP(field) != IS_STRING) {
- SEPARATE_ZVAL(field);
- convert_to_string(*field);
- }
+ while (zend_hash_get_current_data_ex(Z_ARRVAL_P(fields), (void **) &field_tmp, &pos) == SUCCESS) {
+ field = **field_tmp;
+
+ if (Z_TYPE_PP(field_tmp) != IS_STRING) {
+ zval_copy_ctor(&field);
+ convert_to_string(&field);
+ }
+
/* enclose a field that contains a delimiter, an enclosure character, or a newline */
if (FPUTCSV_FLD_CHK(delimiter) ||
FPUTCSV_FLD_CHK(enclosure) ||
@@ -1978,8 +1989,8 @@ PHP_FUNCTION(fputcsv)
FPUTCSV_FLD_CHK('\r') ||
FPUTCSV_FLD_CHK('\t') ||
FPUTCSV_FLD_CHK(' ')) {
- char *ch = Z_STRVAL_PP(field);
- char *end = ch + Z_STRLEN_PP(field);
+ char *ch = Z_STRVAL(field);
+ char *end = ch + Z_STRLEN(field);
int escaped = 0;
smart_str_appendc(&csvline, enclosure);
@@ -1996,13 +2007,17 @@ PHP_FUNCTION(fputcsv)
}
smart_str_appendc(&csvline, enclosure);
} else {
- smart_str_appendl(&csvline, Z_STRVAL_PP(field), Z_STRLEN_PP(field));
+ smart_str_appendl(&csvline, Z_STRVAL(field), Z_STRLEN(field));
}
if (++i != count) {
smart_str_appendl(&csvline, &delimiter, 1);
}
zend_hash_move_forward_ex(Z_ARRVAL_P(fields), &pos);
+
+ if (Z_TYPE_PP(field_tmp) != IS_STRING) {
+ zval_dtor(&field);
+ }
}
smart_str_appendc(&csvline, '\n');
diff --git a/ext/standard/file.h b/ext/standard/file.h
index d4d16bc09..315d30dbb 100644
--- a/ext/standard/file.h
+++ b/ext/standard/file.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: file.h,v 1.94.2.2.2.6 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: file.h,v 1.94.2.2.2.7 2008/12/31 11:17:45 sebastian Exp $ */
/* Synced with php 3.0 revision 1.30 1999-06-16 [ssb] */
diff --git a/ext/standard/filestat.c b/ext/standard/filestat.c
index a9f3f1000..d91cab231 100644
--- a/ext/standard/filestat.c
+++ b/ext/standard/filestat.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: filestat.c,v 1.136.2.8.2.16 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: filestat.c,v 1.136.2.8.2.17 2008/12/31 11:17:45 sebastian Exp $ */
#include "php.h"
#include "safe_mode.h"
diff --git a/ext/standard/filters.c b/ext/standard/filters.c
index 4e41063c4..eedac4467 100644
--- a/ext/standard/filters.c
+++ b/ext/standard/filters.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -20,7 +20,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: filters.c,v 1.44.2.6.2.6 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: filters.c,v 1.44.2.6.2.7 2008/12/31 11:17:45 sebastian Exp $ */
#include "php.h"
#include "php_globals.h"
diff --git a/ext/standard/flock_compat.c b/ext/standard/flock_compat.c
index 167702b85..06009243a 100644
--- a/ext/standard/flock_compat.c
+++ b/ext/standard/flock_compat.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: flock_compat.c,v 1.29.2.1.2.2 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: flock_compat.c,v 1.29.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#include "php.h"
#include <errno.h>
diff --git a/ext/standard/flock_compat.h b/ext/standard/flock_compat.h
index ac6d55cb3..901e3390a 100644
--- a/ext/standard/flock_compat.h
+++ b/ext/standard/flock_compat.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: flock_compat.h,v 1.20.2.1.2.2 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: flock_compat.h,v 1.20.2.1.2.4 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef FLOCK_COMPAT_H
#define FLOCK_COMPAT_H
@@ -35,6 +35,12 @@ PHPAPI int php_flock(int fd, int operation);
PHPAPI int flock(int fd, int operation);
#endif
+/* Userland LOCK_* constants */
+#define PHP_LOCK_SH 1
+#define PHP_LOCK_EX 2
+#define PHP_LOCK_UN 3
+#define PHP_LOCK_NB 4
+
#ifdef PHP_WIN32
#define EWOULDBLOCK WSAEWOULDBLOCK
# define fsync _commit
diff --git a/ext/standard/formatted_print.c b/ext/standard/formatted_print.c
index 662d85cd2..2a763bc59 100644
--- a/ext/standard/formatted_print.c
+++ b/ext/standard/formatted_print.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: formatted_print.c,v 1.82.2.1.2.19 2008/03/17 23:00:41 stas Exp $ */
+/* $Id: formatted_print.c,v 1.82.2.1.2.21 2009/01/20 18:03:19 iliaa Exp $ */
#include <math.h> /* modf() */
#include "php.h"
@@ -225,6 +225,7 @@ php_sprintf_appenddouble(char **buffer, int *pos,
if ((adjust & ADJ_PRECISION) == 0) {
precision = FLOAT_PRECISION;
} else if (precision > MAX_FLOAT_PRECISION) {
+ php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Requested precision of %d digits was truncated to PHP maximum of %d digits", precision, MAX_FLOAT_PRECISION);
precision = MAX_FLOAT_PRECISION;
}
diff --git a/ext/standard/fsock.c b/ext/standard/fsock.c
index d54b3b5e9..3b1254e8e 100644
--- a/ext/standard/fsock.c
+++ b/ext/standard/fsock.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: fsock.c,v 1.121.2.1.2.2 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: fsock.c,v 1.121.2.1.2.5 2008/12/31 11:17:45 sebastian Exp $ */
#include "php.h"
#include "php_globals.h"
diff --git a/ext/standard/fsock.h b/ext/standard/fsock.h
index 10531b68a..6e4fd8701 100644
--- a/ext/standard/fsock.h
+++ b/ext/standard/fsock.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: fsock.h,v 1.50.2.1.2.2 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: fsock.h,v 1.50.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
/* Synced with php 3.0 revision 1.24 1999-06-18 [ssb] */
diff --git a/ext/standard/ftok.c b/ext/standard/ftok.c
index 40b74d547..09b68ecc6 100644
--- a/ext/standard/ftok.c
+++ b/ext/standard/ftok.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: ftok.c,v 1.16.2.1.2.2 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: ftok.c,v 1.16.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#include "php.h"
diff --git a/ext/standard/ftp_fopen_wrapper.c b/ext/standard/ftp_fopen_wrapper.c
index c2e3896dc..87198210d 100644
--- a/ext/standard/ftp_fopen_wrapper.c
+++ b/ext/standard/ftp_fopen_wrapper.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
| Sara Golemon <pollita@php.net> |
+----------------------------------------------------------------------+
*/
-/* $Id: ftp_fopen_wrapper.c,v 1.85.2.4.2.9 2008/01/08 19:10:16 iliaa Exp $ */
+/* $Id: ftp_fopen_wrapper.c,v 1.85.2.4.2.11 2008/12/31 11:17:45 sebastian Exp $ */
#include "php.h"
#include "php_globals.h"
@@ -777,6 +777,13 @@ static int php_stream_ftp_url_stat(php_stream_wrapper *wrapper, char *url, int f
}
php_stream_write_string(stream, "TYPE I\r\n"); /* we need this since some servers refuse to accept SIZE command in ASCII mode */
+
+ result = GET_FTP_RESULT(stream);
+
+ if(result < 200 || result > 299) {
+ goto stat_errexit;
+ }
+
php_stream_printf(stream TSRMLS_CC, "SIZE %s\r\n", (resource->path != NULL ? resource->path : "/"));
result = GET_FTP_RESULT(stream);
if (result < 200 || result > 299) {
diff --git a/ext/standard/head.c b/ext/standard/head.c
index f0502ab21..d7d9d6d53 100644
--- a/ext/standard/head.c
+++ b/ext/standard/head.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -15,7 +15,7 @@
| Author: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
+----------------------------------------------------------------------+
*/
-/* $Id: head.c,v 1.84.2.1.2.8 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: head.c,v 1.84.2.1.2.11 2008/12/31 11:17:45 sebastian Exp $ */
#include <stdio.h>
#include "php.h"
@@ -69,12 +69,12 @@ PHPAPI int php_setcookie(char *name, int name_len, char *value, int value_len, t
int result;
if (name && strpbrk(name, "=,; \t\r\n\013\014") != NULL) { /* man isspace for \013 and \014 */
- zend_error( E_WARNING, "Cookie names can not contain any of the folllowing '=,; \\t\\r\\n\\013\\014' (%s)", name );
+ zend_error( E_WARNING, "Cookie names can not contain any of the following '=,; \\t\\r\\n\\013\\014'" );
return FAILURE;
}
if (!url_encode && value && strpbrk(value, ",; \t\r\n\013\014") != NULL) { /* man isspace for \013 and \014 */
- zend_error( E_WARNING, "Cookie values can not contain any of the folllowing ',; \\t\\r\\n\\013\\014' (%s)", value );
+ zend_error( E_WARNING, "Cookie values can not contain any of the following ',; \\t\\r\\n\\013\\014'" );
return FAILURE;
}
diff --git a/ext/standard/head.h b/ext/standard/head.h
index 365ef3ea1..cfb38d8b1 100644
--- a/ext/standard/head.h
+++ b/ext/standard/head.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: head.h,v 1.28.2.1.2.3 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: head.h,v 1.28.2.1.2.4 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef HEAD_H
#define HEAD_H
diff --git a/ext/standard/html.c b/ext/standard/html.c
index dd8afdc9c..6e073e566 100644
--- a/ext/standard/html.c
+++ b/ext/standard/html.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: html.c,v 1.111.2.2.2.20 2008/04/11 19:01:25 felipe Exp $ */
+/* $Id: html.c,v 1.111.2.2.2.23 2008/12/31 11:17:45 sebastian Exp $ */
/*
* HTML entity resources:
@@ -1199,14 +1199,25 @@ encode_amp:
} else {
if (*s == '#') { /* numeric entities */
s++;
- while (s < e) {
- if (!isdigit(*s++)) {
- goto encode_amp;
+ /* Hex (&#x5A;) */
+ if (*s == 'x' || *s == 'X') {
+ s++;
+ while (s < e) {
+ if (!isxdigit((int)*(unsigned char *)s++)) {
+ goto encode_amp;
+ }
+ }
+ /* Dec (&#90;)*/
+ } else {
+ while (s < e) {
+ if (!isdigit((int)*(unsigned char *)s++)) {
+ goto encode_amp;
+ }
}
}
} else { /* text entities */
while (s < e) {
- if (!isalnum(*s++)) {
+ if (!isalnum((int)*(unsigned char *)s++)) {
goto encode_amp;
}
}
diff --git a/ext/standard/html.h b/ext/standard/html.h
index e5bdafc4d..155b58ce9 100644
--- a/ext/standard/html.h
+++ b/ext/standard/html.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: html.h,v 1.20.2.1.2.4 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: html.h,v 1.20.2.1.2.5 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef HTML_H
#define HTML_H
diff --git a/ext/standard/http.c b/ext/standard/http.c
index 85ad35c83..0ea24328b 100644
--- a/ext/standard/http.c
+++ b/ext/standard/http.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: http.c,v 1.14.2.4.2.6 2008/01/10 20:32:41 shire Exp $ */
+/* $Id: http.c,v 1.14.2.4.2.7 2008/12/31 11:17:45 sebastian Exp $ */
#include "php_http.h"
#include "php_ini.h"
diff --git a/ext/standard/http_fopen_wrapper.c b/ext/standard/http_fopen_wrapper.c
index bdd811f8a..022ce8624 100644
--- a/ext/standard/http_fopen_wrapper.c
+++ b/ext/standard/http_fopen_wrapper.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -19,7 +19,7 @@
| Sara Golemon <pollita@php.net> |
+----------------------------------------------------------------------+
*/
-/* $Id: http_fopen_wrapper.c,v 1.99.2.12.2.12 2008/04/08 00:03:34 iliaa Exp $ */
+/* $Id: http_fopen_wrapper.c,v 1.99.2.12.2.13 2008/12/31 11:17:45 sebastian Exp $ */
#include "php.h"
#include "php_globals.h"
diff --git a/ext/standard/image.c b/ext/standard/image.c
index 8dbd04299..ef167d060 100644
--- a/ext/standard/image.c
+++ b/ext/standard/image.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: image.c,v 1.114.2.2.2.7 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: image.c,v 1.114.2.2.2.8 2008/12/31 11:17:45 sebastian Exp $ */
#include "php.h"
#include <stdio.h>
diff --git a/ext/standard/incomplete_class.c b/ext/standard/incomplete_class.c
index d669f2ce6..06d2202eb 100644
--- a/ext/standard/incomplete_class.c
+++ b/ext/standard/incomplete_class.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
*/
-/* $Id: incomplete_class.c,v 1.28.2.2.2.3 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: incomplete_class.c,v 1.28.2.2.2.4 2008/12/31 11:17:45 sebastian Exp $ */
#include "php.h"
#include "basic_functions.h"
diff --git a/ext/standard/info.c b/ext/standard/info.c
index 6cd9057a3..81c76eea2 100644
--- a/ext/standard/info.c
+++ b/ext/standard/info.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: info.c,v 1.249.2.10.2.17 2008/03/05 21:09:29 pajoye Exp $ */
+/* $Id: info.c,v 1.249.2.10.2.19 2008/12/31 11:17:45 sebastian Exp $ */
#include "php.h"
#include "php_ini.h"
@@ -57,6 +57,7 @@ ZEND_EXTERN_MODULE_GLOBALS(iconv)
} \
PHPAPI extern char *php_ini_opened_path;
+PHPAPI extern char *php_ini_scanned_path;
PHPAPI extern char *php_ini_scanned_files;
static int php_info_write_wrapper(const char *str, uint str_length)
@@ -501,14 +502,9 @@ PHPAPI void php_print_info(int flag TSRMLS_DC)
php_info_print_table_row(2, "Configuration File (php.ini) Path", PHP_CONFIG_FILE_PATH);
php_info_print_table_row(2, "Loaded Configuration File", php_ini_opened_path ? php_ini_opened_path : "(none)");
+ php_info_print_table_row(2, "Scan this dir for additional .ini files", php_ini_scanned_path ? php_ini_scanned_path : "(none)");
+ php_info_print_table_row(2, "additional .ini files parsed", php_ini_scanned_files ? php_ini_scanned_files : "(none)");
- if (strlen(PHP_CONFIG_FILE_SCAN_DIR)) {
- php_info_print_table_row(2, "Scan this dir for additional .ini files", PHP_CONFIG_FILE_SCAN_DIR);
- if (php_ini_scanned_files) {
- php_info_print_table_row(2, "additional .ini files parsed", php_ini_scanned_files);
- }
- }
-
snprintf(temp_api, sizeof(temp_api), "%d", PHP_API_VERSION);
php_info_print_table_row(2, "PHP API", temp_api);
diff --git a/ext/standard/info.h b/ext/standard/info.h
index 931c842ef..09f163d8c 100644
--- a/ext/standard/info.h
+++ b/ext/standard/info.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: info.h,v 1.38.2.1.2.6 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: info.h,v 1.38.2.1.2.7 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef INFO_H
#define INFO_H
diff --git a/ext/standard/iptc.c b/ext/standard/iptc.c
index 578534d41..db8aef37f 100644
--- a/ext/standard/iptc.c
+++ b/ext/standard/iptc.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: iptc.c,v 1.50.2.2.2.6 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: iptc.c,v 1.50.2.2.2.7 2008/12/31 11:17:45 sebastian Exp $ */
/*
* Functions to parse & compse IPTC data.
diff --git a/ext/standard/lcg.c b/ext/standard/lcg.c
index c5bd5c866..e7f0a3d68 100644
--- a/ext/standard/lcg.c
+++ b/ext/standard/lcg.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: lcg.c,v 1.41.2.1.2.3 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: lcg.c,v 1.41.2.1.2.4 2008/12/31 11:17:45 sebastian Exp $ */
#include "php.h"
#include "php_lcg.h"
diff --git a/ext/standard/levenshtein.c b/ext/standard/levenshtein.c
index c5c6caa08..e3a991858 100644
--- a/ext/standard/levenshtein.c
+++ b/ext/standard/levenshtein.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -15,7 +15,7 @@
| Author: Hartmut Holzgraefe <hholzgra@php.net> |
+----------------------------------------------------------------------+
*/
-/* $Id: levenshtein.c,v 1.34.2.1.2.4 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: levenshtein.c,v 1.34.2.1.2.6 2008/12/31 11:17:45 sebastian Exp $ */
#include "php.h"
#include <stdlib.h>
@@ -23,43 +23,51 @@
#include <ctype.h>
#include "php_string.h"
-#define LEVENSHTEIN_MAX_LENTH 255
+#define LEVENSHTEIN_MAX_LENGTH 255
/* {{{ reference_levdist
* reference implementation, only optimized for memory usage, not speed */
-static int reference_levdist(const char *s1, int l1,
- const char *s2, int l2,
- int cost_ins, int cost_rep, int cost_del )
+static int reference_levdist(const char *s1, int l1, const char *s2, int l2, int cost_ins, int cost_rep, int cost_del )
{
int *p1, *p2, *tmp;
int i1, i2, c0, c1, c2;
-
- if(l1==0) return l2*cost_ins;
- if(l2==0) return l1*cost_del;
- if((l1>LEVENSHTEIN_MAX_LENTH)||(l2>LEVENSHTEIN_MAX_LENTH))
+ if (l1 == 0) {
+ return l2 * cost_ins;
+ }
+ if (l2 == 0) {
+ return l1 * cost_del;
+ }
+
+ if ((l1 > LEVENSHTEIN_MAX_LENGTH) || (l2 > LEVENSHTEIN_MAX_LENGTH)) {
return -1;
+ }
+ p1 = safe_emalloc((l2 + 1), sizeof(int), 0);
+ p2 = safe_emalloc((l2 + 1), sizeof(int), 0);
- p1 = safe_emalloc((l2+1), sizeof(int), 0);
- p2 = safe_emalloc((l2+1), sizeof(int), 0);
-
- for(i2=0;i2<=l2;i2++)
- p1[i2] = i2*cost_ins;
-
- for(i1=0;i1<l1;i1++)
- {
- p2[0]=p1[0]+cost_del;
- for(i2=0;i2<l2;i2++)
- {
- c0=p1[i2]+((s1[i1]==s2[i2])?0:cost_rep);
- c1=p1[i2+1]+cost_del; if(c1<c0) c0=c1;
- c2=p2[i2]+cost_ins; if(c2<c0) c0=c2;
- p2[i2+1]=c0;
- }
- tmp=p1; p1=p2; p2=tmp;
+ for (i2 = 0; i2 <= l2; i2++) {
+ p1[i2] = i2 * cost_ins;
+ }
+ for (i1 = 0; i1 < l1 ; i1++) {
+ p2[0] = p1[0] + cost_del;
+
+ for (i2 = 0; i2 < l2; i2++) {
+ c0 = p1[i2] + ((s1[i1] == s2[i2]) ? 0 : cost_rep);
+ c1 = p1[i2 + 1] + cost_del;
+ if (c1 < c0) {
+ c0 = c1;
+ }
+ c2 = p2[i2] + cost_ins;
+ if (c2 < c0) {
+ c0 = c2;
+ }
+ p2[i2 + 1] = c0;
}
-
- c0=p1[l2];
+ tmp = p1;
+ p1 = p2;
+ p2 = tmp;
+ }
+ c0 = p1[l2];
efree(p1);
efree(p2);
@@ -70,7 +78,7 @@ static int reference_levdist(const char *s1, int l1,
/* {{{ custom_levdist
*/
-static int custom_levdist(char *str1, char *str2, char *callback_name TSRMLS_DC)
+static int custom_levdist(char *str1, char *str2, char *callback_name TSRMLS_DC)
{
php_error_docref(NULL TSRMLS_CC, E_WARNING, "The general Levenshtein support is not there yet");
/* not there yet */
@@ -83,59 +91,43 @@ static int custom_levdist(char *str1, char *str2, char *callback_name TSRMLS_DC)
Calculate Levenshtein distance between two strings */
PHP_FUNCTION(levenshtein)
{
- zval **str1, **str2, **cost_ins, **cost_rep, **cost_del, **callback_name;
- int distance=-1;
-
- switch(ZEND_NUM_ARGS()) {
- case 2: /* just two string: use maximum performance version */
- if (zend_get_parameters_ex(2, &str1, &str2) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str1);
- convert_to_string_ex(str2);
-
- distance = reference_levdist(Z_STRVAL_PP(str1), Z_STRLEN_PP(str1),
- Z_STRVAL_PP(str2), Z_STRLEN_PP(str2), 1, 1, 1);
-
- break;
-
- case 5: /* more general version: calc cost by ins/rep/del weights */
- if (zend_get_parameters_ex(5, &str1, &str2, &cost_ins, &cost_rep, &cost_del) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str1);
- convert_to_string_ex(str2);
- convert_to_long_ex(cost_ins);
- convert_to_long_ex(cost_rep);
- convert_to_long_ex(cost_del);
-
- distance = reference_levdist(Z_STRVAL_PP(str1), Z_STRLEN_PP(str1),
- Z_STRVAL_PP(str2), Z_STRLEN_PP(str2),
- Z_LVAL_PP(cost_ins), Z_LVAL_PP(cost_rep),
- Z_LVAL_PP(cost_del));
-
- break;
-
- case 3: /* most general version: calc cost by user-supplied function */
- if (zend_get_parameters_ex(3, &str1, &str2, &callback_name) == FAILURE) {
+ int argc = ZEND_NUM_ARGS();
+ char *str1, *str2;
+ char *callback_name;
+ int str1_len, str2_len, callback_len;
+ long cost_ins, cost_rep, cost_del;
+ int distance = -1;
+
+ switch (argc) {
+ case 2: /* just two strings: use maximum performance version */
+ if (zend_parse_parameters(2 TSRMLS_CC, "ss", &str1, &str1_len, &str2, &str2_len) == FAILURE) {
+ return;
+ }
+ distance = reference_levdist(str1, str1_len, str2, str2_len, 1, 1, 1);
+ break;
+
+ case 5: /* more general version: calc cost by ins/rep/del weights */
+ if (zend_parse_parameters(5 TSRMLS_CC, "sslll", &str1, &str1_len, &str2, &str2_len, &cost_ins, &cost_rep, &cost_del) == FAILURE) {
+ return;
+ }
+ distance = reference_levdist(str1, str1_len, str2, str2_len, cost_ins, cost_rep, cost_del);
+ break;
+
+ case 3: /* most general version: calc cost by user-supplied function */
+ if (zend_parse_parameters(3 TSRMLS_CC, "sss", &str1, &str1_len, &str2, &str2_len, &callback_name, &callback_len) == FAILURE) {
+ return;
+ }
+ distance = custom_levdist(str1, str2, callback_name TSRMLS_CC);
+ break;
+
+ default:
WRONG_PARAM_COUNT;
- }
- convert_to_string_ex(str1);
- convert_to_string_ex(str2);
- convert_to_string_ex(callback_name);
-
- distance = custom_levdist(Z_STRVAL_PP(str1), Z_STRVAL_PP(str2),
- Z_STRVAL_PP(callback_name) TSRMLS_CC);
- break;
-
- default:
- WRONG_PARAM_COUNT;
- }
+ }
- if(distance < 0 && /* TODO */ ZEND_NUM_ARGS() != 3) {
+ if (distance < 0 && /* TODO */ ZEND_NUM_ARGS() != 3) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument string(s) too long");
}
-
+
RETURN_LONG(distance);
}
/* }}} */
diff --git a/ext/standard/link.c b/ext/standard/link.c
index 24afc561d..125d9e6ee 100644
--- a/ext/standard/link.c
+++ b/ext/standard/link.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: link.c,v 1.52.2.1.2.4 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: link.c,v 1.52.2.1.2.7 2008/12/31 11:17:45 sebastian Exp $ */
#include "php.h"
#include "php_filestat.h"
@@ -49,6 +49,7 @@
#include "safe_mode.h"
#include "php_link.h"
+#include "php_string.h"
/* {{{ proto string readlink(string filename)
Return the target of a symbolic link */
@@ -115,6 +116,8 @@ PHP_FUNCTION(symlink)
int ret;
char source_p[MAXPATHLEN];
char dest_p[MAXPATHLEN];
+ char dirname[MAXPATHLEN];
+ size_t len;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &topath, &frompath) == FAILURE) {
WRONG_PARAM_COUNT;
@@ -122,7 +125,15 @@ PHP_FUNCTION(symlink)
convert_to_string_ex(topath);
convert_to_string_ex(frompath);
- if (!expand_filepath(Z_STRVAL_PP(frompath), source_p TSRMLS_CC) || !expand_filepath(Z_STRVAL_PP(topath), dest_p TSRMLS_CC)) {
+ if (!expand_filepath(Z_STRVAL_PP(frompath), source_p TSRMLS_CC)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "No such file or directory");
+ RETURN_FALSE;
+ }
+
+ memcpy(dirname, source_p, sizeof(source_p));
+ len = php_dirname(dirname, strlen(dirname));
+
+ if (!expand_filepath_ex(Z_STRVAL_PP(topath), dest_p, dirname, len TSRMLS_CC)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "No such file or directory");
RETURN_FALSE;
}
@@ -150,11 +161,11 @@ PHP_FUNCTION(symlink)
RETURN_FALSE;
}
-#ifndef ZTS
- ret = symlink(Z_STRVAL_PP(topath), Z_STRVAL_PP(frompath));
-#else
- ret = symlink(dest_p, source_p);
-#endif
+ /* For the source, an expanded path must be used (in ZTS an other thread could have changed the CWD).
+ * For the target the exact string given by the user must be used, relative or not, existing or not.
+ * The target is relative to the link itself, not to the CWD. */
+ ret = symlink(Z_STRVAL_PP(topath), source_p);
+
if (ret == -1) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", strerror(errno));
RETURN_FALSE;
diff --git a/ext/standard/mail.c b/ext/standard/mail.c
index 3f9763ba0..400015086 100644
--- a/ext/standard/mail.c
+++ b/ext/standard/mail.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: mail.c,v 1.87.2.1.2.9 2007/12/31 07:20:12 sebastian Exp $ */
+/* $Id: mail.c,v 1.87.2.1.2.11 2008/12/31 11:17:45 sebastian Exp $ */
#include <stdlib.h>
#include <ctype.h>
@@ -31,6 +31,12 @@
#include <sys/sysexits.h>
#endif
+#if PHP_SIGCHILD
+#if HAVE_SIGNAL_H
+#include <signal.h>
+#endif
+#endif
+
#include "php_mail.h"
#include "php_ini.h"
#include "safe_mode.h"
@@ -200,6 +206,9 @@ PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char
int ret;
char *sendmail_path = INI_STR("sendmail_path");
char *sendmail_cmd = NULL;
+#if PHP_SIGCHILD
+ void (*sig_handler)() = NULL;
+#endif
if (!sendmail_path) {
#if (defined PHP_WIN32 || defined NETWARE)
@@ -224,6 +233,16 @@ PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char
sendmail_cmd = sendmail_path;
}
+#if PHP_SIGCHILD
+ /* Set signal handler of SIGCHLD to default to prevent other signal handlers
+ * from being called and reaping the return code when our child exits.
+ * The original handler needs to be restored after pclose() */
+ sig_handler = (void *)signal(SIGCHLD, SIG_DFL);
+ if (sig_handler == SIG_ERR) {
+ sig_handler = NULL;
+ }
+#endif
+
#ifdef PHP_WIN32
sendmail = popen(sendmail_cmd, "wb");
#else
@@ -241,6 +260,13 @@ PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char
if (EACCES == errno) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Permission denied: unable to execute shell to run mail delivery binary '%s'", sendmail_path);
pclose(sendmail);
+#if PHP_SIGCHILD
+ /* Restore handler in case of error on Windows
+ Not sure if this applicable on Win but just in case. */
+ if (sig_handler) {
+ signal(SIGCHLD, sig_handler);
+ }
+#endif
return 0;
}
#endif
@@ -251,6 +277,12 @@ PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char
}
fprintf(sendmail, "\n%s\n", message);
ret = pclose(sendmail);
+#if PHP_SIGCHILD
+ if (sig_handler) {
+ signal(SIGCHLD, sig_handler);
+ }
+#endif
+
#ifdef PHP_WIN32
if (ret == -1)
#else
@@ -269,6 +301,11 @@ PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char
}
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not execute mail delivery program '%s'", sendmail_path);
+#if PHP_SIGCHILD
+ if (sig_handler) {
+ signal(SIGCHLD, sig_handler);
+ }
+#endif
return 0;
}
diff --git a/ext/standard/math.c b/ext/standard/math.c
index 8f293ae71..78ec5b50f 100644
--- a/ext/standard/math.c
+++ b/ext/standard/math.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -19,7 +19,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: math.c,v 1.131.2.2.2.9 2008/02/21 11:53:51 tony2001 Exp $ */
+/* $Id: math.c,v 1.131.2.2.2.11 2008/12/31 11:17:45 sebastian Exp $ */
#include "php.h"
#include "php_math.h"
@@ -29,25 +29,59 @@
#include <float.h>
#include <stdlib.h>
-#ifndef PHP_ROUND_FUZZ
-# ifndef PHP_WIN32
-# define PHP_ROUND_FUZZ 0.50000000001
-# else
-# define PHP_ROUND_FUZZ 0.5
-# endif
-#endif
+/*
+ * Pertains to some of the code found in the php_round() function
+ * Ref: http://www.freebsd.org/cgi/query-pr.cgi?pr=59797
+ *
+ * Copyright (c) 2003, Steven G. Kargl
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice unmodified, this list of conditions, and the following
+ * disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+static double php_round(double val, int places) {
+ double t;
+ double f = pow(10.0, (double) places);
+ double x = val * f;
+
+ if (zend_isinf(x) || zend_isnan(x)) {
+ return val;
+ }
+
+ if (x >= 0.0) {
+ t = ceil(x);
+ if ((t - x) > 0.50000000001) {
+ t -= 1.0;
+ }
+ } else {
+ t = ceil(-x);
+ if ((t + x) > 0.50000000001) {
+ t -= 1.0;
+ }
+ t = -t;
+ }
+ x = t / f;
-#define PHP_ROUND_WITH_FUZZ(val, places) { \
- double tmp_val=val, f = pow(10.0, (double) places); \
- tmp_val *= f; \
- if (tmp_val >= 0.0) { \
- tmp_val = floor(tmp_val + PHP_ROUND_FUZZ); \
- } else { \
- tmp_val = ceil(tmp_val - PHP_ROUND_FUZZ); \
- } \
- tmp_val /= f; \
- val = !zend_isnan(tmp_val) ? tmp_val : val; \
-} \
+ return !zend_isnan(x) ? x : t;
+}
/* {{{ proto int abs(int number)
Return the absolute value of the number */
@@ -152,7 +186,7 @@ PHP_FUNCTION(round)
return_val = (Z_TYPE_PP(value) == IS_LONG) ?
(double)Z_LVAL_PP(value) : Z_DVAL_PP(value);
- PHP_ROUND_WITH_FUZZ(return_val, places);
+ return_val = php_round(return_val, places);
RETURN_DOUBLE(return_val);
break;
@@ -967,7 +1001,7 @@ PHPAPI char *_php_math_number_format(double d, int dec, char dec_point, char tho
}
dec = MAX(0, dec);
- PHP_ROUND_WITH_FUZZ(d, dec);
+ d = php_round(d, dec);
tmplen = spprintf(&tmpbuf, 0, "%.*F", dec, d);
diff --git a/ext/standard/md5.c b/ext/standard/md5.c
index 16c295b4b..42609bb81 100644
--- a/ext/standard/md5.c
+++ b/ext/standard/md5.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: md5.c,v 1.39.2.1.2.5 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: md5.c,v 1.39.2.1.2.6 2008/12/31 11:17:45 sebastian Exp $ */
/*
* md5.c - Copyright 1997 Lachlan Roche
diff --git a/ext/standard/md5.h b/ext/standard/md5.h
index b9285c1ba..6a4268ef6 100644
--- a/ext/standard/md5.h
+++ b/ext/standard/md5.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: md5.h,v 1.17.2.1.2.3 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: md5.h,v 1.17.2.1.2.4 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef MD5_H
#define MD5_H
diff --git a/ext/standard/metaphone.c b/ext/standard/metaphone.c
index 3c8cb93aa..4dbf45247 100644
--- a/ext/standard/metaphone.c
+++ b/ext/standard/metaphone.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: metaphone.c,v 1.28.2.1.2.7 2008/02/27 01:10:56 felipe Exp $ */
+/* $Id: metaphone.c,v 1.28.2.1.2.8 2008/12/31 11:17:45 sebastian Exp $ */
/*
Based on CPANs "Text-Metaphone-1.96" by Michael G Schwern <schwern@pobox.com>
diff --git a/ext/standard/microtime.c b/ext/standard/microtime.c
index 6b26c641d..9be244541 100644
--- a/ext/standard/microtime.c
+++ b/ext/standard/microtime.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: microtime.c,v 1.53.2.2.2.4 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: microtime.c,v 1.53.2.2.2.5 2008/12/31 11:17:45 sebastian Exp $ */
#include "php.h"
diff --git a/ext/standard/microtime.h b/ext/standard/microtime.h
index ca564c55c..1e13bc6d1 100644
--- a/ext/standard/microtime.h
+++ b/ext/standard/microtime.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: microtime.h,v 1.14.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: microtime.h,v 1.14.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef MICROTIME_H
#define MICROTIME_H
diff --git a/ext/standard/pack.c b/ext/standard/pack.c
index 7233cb3b3..d0c01ccfb 100644
--- a/ext/standard/pack.c
+++ b/ext/standard/pack.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -15,7 +15,7 @@
| Author: Chris Schneider <cschneid@relog.ch> |
+----------------------------------------------------------------------+
*/
-/* $Id: pack.c,v 1.57.2.5.2.7 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: pack.c,v 1.57.2.5.2.8 2008/12/31 11:17:45 sebastian Exp $ */
#include "php.h"
diff --git a/ext/standard/pack.h b/ext/standard/pack.h
index 88680fada..2665af43d 100644
--- a/ext/standard/pack.h
+++ b/ext/standard/pack.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pack.h,v 1.16.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: pack.h,v 1.16.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PACK_H
#define PACK_H
diff --git a/ext/standard/pageinfo.c b/ext/standard/pageinfo.c
index 1dd1c6123..6af85eed6 100644
--- a/ext/standard/pageinfo.c
+++ b/ext/standard/pageinfo.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pageinfo.c,v 1.40.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: pageinfo.c,v 1.40.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#include "php.h"
#include "pageinfo.h"
diff --git a/ext/standard/pageinfo.h b/ext/standard/pageinfo.h
index e3e59f96c..354bbfaa7 100644
--- a/ext/standard/pageinfo.h
+++ b/ext/standard/pageinfo.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pageinfo.h,v 1.14.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: pageinfo.h,v 1.14.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PAGEINFO_H
#define PAGEINFO_H
diff --git a/ext/standard/php_array.h b/ext/standard/php_array.h
index d77edf899..d5d197321 100644
--- a/ext/standard/php_array.h
+++ b/ext/standard/php_array.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -19,7 +19,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_array.h,v 1.50.2.2.2.4 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_array.h,v 1.50.2.2.2.5 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_ARRAY_H
#define PHP_ARRAY_H
diff --git a/ext/standard/php_assert.h b/ext/standard/php_assert.h
index b3c61c1bf..acd5891ae 100644
--- a/ext/standard/php_assert.h
+++ b/ext/standard/php_assert.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_assert.h,v 1.15.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_assert.h,v 1.15.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_ASSERT_H
#define PHP_ASSERT_H
diff --git a/ext/standard/php_browscap.h b/ext/standard/php_browscap.h
index a5a79c7a8..d687fe433 100644
--- a/ext/standard/php_browscap.h
+++ b/ext/standard/php_browscap.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_browscap.h,v 1.13.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_browscap.h,v 1.13.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_BROWSCAP_H
#define PHP_BROWSCAP_H
diff --git a/ext/standard/php_crypt.h b/ext/standard/php_crypt.h
index 1a631057c..a848cdeab 100644
--- a/ext/standard/php_crypt.h
+++ b/ext/standard/php_crypt.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_crypt.h,v 1.18.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_crypt.h,v 1.18.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_CRYPT_H
#define PHP_CRYPT_H
diff --git a/ext/standard/php_dir.h b/ext/standard/php_dir.h
index 14fb5d69f..a422a3e10 100644
--- a/ext/standard/php_dir.h
+++ b/ext/standard/php_dir.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_dir.h,v 1.24.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_dir.h,v 1.24.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_DIR_H
#define PHP_DIR_H
diff --git a/ext/standard/php_ext_syslog.h b/ext/standard/php_ext_syslog.h
index e5ff1e918..a47aa1325 100644
--- a/ext/standard/php_ext_syslog.h
+++ b/ext/standard/php_ext_syslog.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_ext_syslog.h,v 1.12.2.2.2.3 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_ext_syslog.h,v 1.12.2.2.2.4 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_EXT_SYSLOG_H
#define PHP_EXT_SYSLOG_H
diff --git a/ext/standard/php_filestat.h b/ext/standard/php_filestat.h
index bd66459ba..7992f4cb5 100644
--- a/ext/standard/php_filestat.h
+++ b/ext/standard/php_filestat.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_filestat.h,v 1.24.2.4.2.3 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_filestat.h,v 1.24.2.4.2.4 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_FILESTAT_H
#define PHP_FILESTAT_H
diff --git a/ext/standard/php_fopen_wrapper.c b/ext/standard/php_fopen_wrapper.c
index 64e05e0c3..9140121c3 100644
--- a/ext/standard/php_fopen_wrapper.c
+++ b/ext/standard/php_fopen_wrapper.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
| Hartmut Holzgraefe <hholzgra@php.net> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_fopen_wrapper.c,v 1.45.2.4.2.9 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_fopen_wrapper.c,v 1.45.2.4.2.13 2008/12/31 11:17:45 sebastian Exp $ */
#include <stdio.h>
#include <stdlib.h>
@@ -48,17 +48,11 @@ static int php_stream_output_close(php_stream *stream, int close_handle TSRMLS_D
return 0;
}
-static int php_stream_output_flush(php_stream *stream TSRMLS_DC)
-{
- sapi_flush(TSRMLS_C);
- return 0;
-}
-
php_stream_ops php_stream_output_ops = {
php_stream_output_write,
php_stream_output_read,
php_stream_output_close,
- php_stream_output_flush,
+ NULL, /* flush */
"Output",
NULL, /* seek */
NULL, /* cast */
@@ -176,11 +170,21 @@ php_stream * php_stream_url_wrap_php(php_stream_wrapper *wrapper, char *path, ch
return NULL;
}
}
- return php_stream_temp_create(TEMP_STREAM_DEFAULT, max_memory);
+ if (strpbrk(mode, "wa+")) {
+ mode_rw = TEMP_STREAM_DEFAULT;
+ } else {
+ mode_rw = TEMP_STREAM_READONLY;
+ }
+ return php_stream_temp_create(mode_rw, max_memory);
}
if (!strcasecmp(path, "memory")) {
- return php_stream_memory_create(TEMP_STREAM_DEFAULT);
+ if (strpbrk(mode, "wa+")) {
+ mode_rw = TEMP_STREAM_DEFAULT;
+ } else {
+ mode_rw = TEMP_STREAM_READONLY;
+ }
+ return php_stream_memory_create(mode_rw);
}
if (!strcasecmp(path, "output")) {
@@ -290,9 +294,23 @@ php_stream * php_stream_url_wrap_php(php_stream_wrapper *wrapper, char *path, ch
return NULL;
}
+#if defined(S_IFSOCK) && !defined(WIN32) && !defined(__BEOS__)
+ do {
+ struct stat st;
+ memset(&st, 0, sizeof(st));
+ if (fstat(fd, &st) == 0 && (st.st_mode & S_IFMT) == S_IFSOCK) {
+ stream = php_stream_sock_open_from_socket(fd, NULL);
+ if (stream) {
+ stream->ops = &php_stream_socket_ops;
+ return stream;
+ }
+ }
+ } while (0);
+#endif
+
if (file) {
stream = php_stream_fopen_from_file(file, mode);
- } else {
+ } else {
stream = php_stream_fopen_from_fd(fd, mode, NULL);
if (stream == NULL) {
close(fd);
diff --git a/ext/standard/php_fopen_wrappers.h b/ext/standard/php_fopen_wrappers.h
index b32ae7272..9ad3869f1 100644
--- a/ext/standard/php_fopen_wrappers.h
+++ b/ext/standard/php_fopen_wrappers.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_fopen_wrappers.h,v 1.21.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_fopen_wrappers.h,v 1.21.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_FOPEN_WRAPPERS_H
#define PHP_FOPEN_WRAPPERS_H
diff --git a/ext/standard/php_ftok.h b/ext/standard/php_ftok.h
index c3b4b9825..6c75236db 100644
--- a/ext/standard/php_ftok.h
+++ b/ext/standard/php_ftok.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_ftok.h,v 1.9.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_ftok.h,v 1.9.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_FTOK_H
#define PHP_FTOK_H
diff --git a/ext/standard/php_http.h b/ext/standard/php_http.h
index 9097a67de..92783e6a1 100644
--- a/ext/standard/php_http.h
+++ b/ext/standard/php_http.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_http.h,v 1.5.2.2.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_http.h,v 1.5.2.2.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_HTTP_H
#define PHP_HTTP_H
diff --git a/ext/standard/php_image.h b/ext/standard/php_image.h
index 33f8495e9..c76eb27ad 100644
--- a/ext/standard/php_image.h
+++ b/ext/standard/php_image.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_image.h,v 1.29.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_image.h,v 1.29.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_IMAGE_H
#define PHP_IMAGE_H
diff --git a/ext/standard/php_incomplete_class.h b/ext/standard/php_incomplete_class.h
index 8d3061af3..7eae8e93a 100644
--- a/ext/standard/php_incomplete_class.h
+++ b/ext/standard/php_incomplete_class.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_incomplete_class.h,v 1.17.2.2.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_incomplete_class.h,v 1.17.2.2.2.4 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_INCOMPLETE_CLASS_H
#define PHP_INCOMPLETE_CLASS_H
@@ -31,6 +31,10 @@
if (Z_OBJ_HT_P(struc)->get_class_entry && \
Z_OBJCE_P(struc) == BG(incomplete_class)) { \
class_name = php_lookup_class_name(struc, &name_len); \
+ if (!class_name) { \
+ name_len = sizeof(INCOMPLETE_CLASS) - 1; \
+ class_name = estrndup(INCOMPLETE_CLASS, name_len); \
+ } \
free_class_name = 1; \
incomplete_class = 1; \
} else { \
diff --git a/ext/standard/php_iptc.h b/ext/standard/php_iptc.h
index 18d77e3f8..3c0e50966 100644
--- a/ext/standard/php_iptc.h
+++ b/ext/standard/php_iptc.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_iptc.h,v 1.11.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_iptc.h,v 1.11.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_IPTC_H
#define PHP_IPTC_H
diff --git a/ext/standard/php_lcg.h b/ext/standard/php_lcg.h
index 93aa78e64..4c07f3a8d 100644
--- a/ext/standard/php_lcg.h
+++ b/ext/standard/php_lcg.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_lcg.h,v 1.21.2.1.2.3 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_lcg.h,v 1.21.2.1.2.4 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_LCG_H
#define PHP_LCG_H
diff --git a/ext/standard/php_link.h b/ext/standard/php_link.h
index 353f5dc27..5844cc97d 100644
--- a/ext/standard/php_link.h
+++ b/ext/standard/php_link.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_link.h,v 1.12.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_link.h,v 1.12.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_LINK_H
#define PHP_LINK_H
diff --git a/ext/standard/php_mail.h b/ext/standard/php_mail.h
index 7b249a015..40ca27b9e 100644
--- a/ext/standard/php_mail.h
+++ b/ext/standard/php_mail.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_mail.h,v 1.18.2.1.2.3 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_mail.h,v 1.18.2.1.2.4 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_MAIL_H
#define PHP_MAIL_H
diff --git a/ext/standard/php_math.h b/ext/standard/php_math.h
index 84b750a0e..d03aeb057 100644
--- a/ext/standard/php_math.h
+++ b/ext/standard/php_math.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_math.h,v 1.28.2.2.2.4 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_math.h,v 1.28.2.2.2.5 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_MATH_H
#define PHP_MATH_H
diff --git a/ext/standard/php_metaphone.h b/ext/standard/php_metaphone.h
index 3706392bc..5b778fbf5 100644
--- a/ext/standard/php_metaphone.h
+++ b/ext/standard/php_metaphone.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_metaphone.h,v 1.16.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_metaphone.h,v 1.16.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_METAPHONE_H
#define PHP_METAPHONE_H
diff --git a/ext/standard/php_rand.h b/ext/standard/php_rand.h
index 7a12d2466..093359085 100644
--- a/ext/standard/php_rand.h
+++ b/ext/standard/php_rand.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -20,7 +20,7 @@
| Based on code from: Shawn Cokus <Cokus@math.washington.edu> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_rand.h,v 1.28.2.1.2.4 2008/03/07 08:56:45 tony2001 Exp $ */
+/* $Id: php_rand.h,v 1.28.2.1.2.5 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_RAND_H
#define PHP_RAND_H
diff --git a/ext/standard/php_smart_str.h b/ext/standard/php_smart_str.h
index fd6dfb6dc..e56655fdc 100644
--- a/ext/standard/php_smart_str.h
+++ b/ext/standard/php_smart_str.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_smart_str.h,v 1.30.2.3.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_smart_str.h,v 1.30.2.3.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_SMART_STR_H
#define PHP_SMART_STR_H
diff --git a/ext/standard/php_smart_str_public.h b/ext/standard/php_smart_str_public.h
index 2d119e790..a1b93ffb7 100644
--- a/ext/standard/php_smart_str_public.h
+++ b/ext/standard/php_smart_str_public.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_smart_str_public.h,v 1.10.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_smart_str_public.h,v 1.10.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_SMART_STR_PUBLIC_H
#define PHP_SMART_STR_PUBLIC_H
diff --git a/ext/standard/php_standard.h b/ext/standard/php_standard.h
index dd41fc25a..2fe6f834a 100644
--- a/ext/standard/php_standard.h
+++ b/ext/standard/php_standard.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_standard.h,v 1.24.2.2.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_standard.h,v 1.24.2.2.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#include "basic_functions.h"
#include "php_math.h"
diff --git a/ext/standard/php_string.h b/ext/standard/php_string.h
index c2b038fdd..ab7edab01 100644
--- a/ext/standard/php_string.h
+++ b/ext/standard/php_string.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_string.h,v 1.87.2.2.2.4 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_string.h,v 1.87.2.2.2.5 2008/12/31 11:17:45 sebastian Exp $ */
/* Synced with php 3.0 revision 1.43 1999-06-16 [ssb] */
diff --git a/ext/standard/php_type.h b/ext/standard/php_type.h
index bd170239e..e1cfe3088 100644
--- a/ext/standard/php_type.h
+++ b/ext/standard/php_type.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_type.h,v 1.6.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_type.h,v 1.6.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_TYPE_H
#define PHP_TYPE_H
diff --git a/ext/standard/php_uuencode.h b/ext/standard/php_uuencode.h
index 0bab2fc6c..b3a07061e 100644
--- a/ext/standard/php_uuencode.h
+++ b/ext/standard/php_uuencode.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_uuencode.h,v 1.4.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_uuencode.h,v 1.4.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_UUENCODE_H
#define PHP_UUENCODE_H
diff --git a/ext/standard/php_var.h b/ext/standard/php_var.h
index 19527286b..1590a09c7 100644
--- a/ext/standard/php_var.h
+++ b/ext/standard/php_var.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_var.h,v 1.30.2.1.2.7 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_var.h,v 1.30.2.1.2.8 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_VAR_H
#define PHP_VAR_H
diff --git a/ext/standard/php_versioning.h b/ext/standard/php_versioning.h
index 2f502e305..86f049e90 100644
--- a/ext/standard/php_versioning.h
+++ b/ext/standard/php_versioning.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_versioning.h,v 1.10.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_versioning.h,v 1.10.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef PHP_VERSIONING_H
#define PHP_VERSIONING_H
diff --git a/ext/standard/proc_open.c b/ext/standard/proc_open.c
index 69fca4d71..fe50d9d54 100644
--- a/ext/standard/proc_open.c
+++ b/ext/standard/proc_open.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -15,7 +15,7 @@
| Author: Wez Furlong <wez@thebrainroom.com> |
+----------------------------------------------------------------------+
*/
-/* $Id: proc_open.c,v 1.36.2.1.2.19 2008/04/08 08:45:51 jani Exp $ */
+/* $Id: proc_open.c,v 1.36.2.1.2.23 2008/12/31 11:17:45 sebastian Exp $ */
#if 0 && (defined(__linux__) || defined(sun) || defined(__IRIX__))
# define _BSD_SOURCE /* linux wants this when XOPEN mode is on */
@@ -769,6 +769,8 @@ PHP_FUNCTION(proc_open)
}
if (FALSE == newprocok) {
+ DWORD dw = GetLastError();
+
/* clean up all the descriptors */
for (i = 0; i < ndesc; i++) {
CloseHandle(descriptors[i].childend);
@@ -776,7 +778,7 @@ PHP_FUNCTION(proc_open)
CloseHandle(descriptors[i].parentend);
}
}
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "CreateProcess failed");
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "CreateProcess failed, error code - %u", dw);
goto exit_fail;
}
diff --git a/ext/standard/proc_open.h b/ext/standard/proc_open.h
index 10625f5b1..217e9251e 100644
--- a/ext/standard/proc_open.h
+++ b/ext/standard/proc_open.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -15,7 +15,7 @@
| Author: Wez Furlong <wez@thebrainroom.com> |
+----------------------------------------------------------------------+
*/
-/* $Id: proc_open.h,v 1.5.2.1.2.3 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: proc_open.h,v 1.5.2.1.2.4 2008/12/31 11:17:45 sebastian Exp $ */
#ifdef PHP_WIN32
typedef HANDLE php_file_descriptor_t;
diff --git a/ext/standard/quot_print.c b/ext/standard/quot_print.c
index b57d826a6..f8af37f9e 100644
--- a/ext/standard/quot_print.c
+++ b/ext/standard/quot_print.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: quot_print.c,v 1.29.2.2.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: quot_print.c,v 1.29.2.2.2.5 2009/01/07 17:38:13 felipe Exp $ */
#include <stdlib.h>
diff --git a/ext/standard/quot_print.h b/ext/standard/quot_print.h
index 37a10ff2e..3c17dc4eb 100644
--- a/ext/standard/quot_print.h
+++ b/ext/standard/quot_print.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: quot_print.h,v 1.13.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: quot_print.h,v 1.13.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef QUOT_PRINT_H
#define QUOT_PRINT_H
diff --git a/ext/standard/rand.c b/ext/standard/rand.c
index eee131b78..e3ba1c9f3 100644
--- a/ext/standard/rand.c
+++ b/ext/standard/rand.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -23,7 +23,7 @@
| Shawn Cokus <Cokus@math.washington.edu> |
+----------------------------------------------------------------------+
*/
-/* $Id: rand.c,v 1.70.2.1.2.3 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: rand.c,v 1.70.2.1.2.5 2008/12/31 11:17:45 sebastian Exp $ */
#include <stdlib.h>
@@ -138,14 +138,6 @@ PHPAPI long php_rand(TSRMLS_D)
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- The original code included the following notice:
-
- When you use this, send an email to: matumoto@math.keio.ac.jp
- with an appropriate reference to your work.
-
- It would be nice to CC: rjwagner@writeme.com and Cokus@math.washington.edu
- when you write.
*/
#define N MT_N /* length of state vector */
diff --git a/ext/standard/reg.c b/ext/standard/reg.c
index 3c3a02c54..e95e65a9c 100644
--- a/ext/standard/reg.c
+++ b/ext/standard/reg.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
| Jaakko Hyvätti <jaakko@hyvatti.iki.fi> |
+----------------------------------------------------------------------+
*/
-/* $Id: reg.c,v 1.82.2.3.2.5 2008/04/20 01:43:18 felipe Exp $ */
+/* $Id: reg.c,v 1.82.2.3.2.6 2008/12/31 11:17:45 sebastian Exp $ */
#include <stdio.h>
#include <ctype.h>
diff --git a/ext/standard/reg.h b/ext/standard/reg.h
index 6557916cf..12c490ee0 100644
--- a/ext/standard/reg.h
+++ b/ext/standard/reg.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
*/
-/* $Id: reg.h,v 1.21.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: reg.h,v 1.21.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef REG_H
#define REG_H
diff --git a/ext/standard/scanf.c b/ext/standard/scanf.c
index d5c591d1f..12713288f 100644
--- a/ext/standard/scanf.c
+++ b/ext/standard/scanf.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: scanf.c,v 1.31.2.2.2.6 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: scanf.c,v 1.31.2.2.2.9 2009/02/06 10:22:34 felipe Exp $ */
/*
scanf.c --
@@ -1066,9 +1066,9 @@ addToInt:
break;
} else if (numVars) {
/* change passed value type to string */
- current = args[objIndex++];
- convert_to_string( *current );
- ZVAL_STRING( *current, buf, 1 );
+ current = args[objIndex++];
+ zval_dtor(*current);
+ ZVAL_STRING( *current, buf, 1 );
} else {
add_index_string(*return_value, objIndex++, buf, 1);
}
@@ -1077,8 +1077,8 @@ addToInt:
break;
} else if (numVars) {
current = args[objIndex++];
- convert_to_long( *current );
- Z_LVAL(**current) = value;
+ zval_dtor(*current);
+ ZVAL_LONG(*current, value);
} else {
add_index_long(*return_value, objIndex++, value);
}
@@ -1182,8 +1182,8 @@ addToFloat:
break;
} else if (numVars) {
current = args[objIndex++];
- convert_to_double( *current );
- Z_DVAL_PP( current ) = dvalue;
+ zval_dtor(*current);
+ ZVAL_DOUBLE(*current, dvalue);
} else {
add_index_double( *return_value, objIndex++, dvalue );
}
diff --git a/ext/standard/scanf.h b/ext/standard/scanf.h
index 25ef8c45c..e87bc17e1 100644
--- a/ext/standard/scanf.h
+++ b/ext/standard/scanf.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: scanf.h,v 1.14.2.2.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: scanf.h,v 1.14.2.2.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef SCANF_H
#define SCANF_H
diff --git a/ext/standard/sha1.c b/ext/standard/sha1.c
index 1fae65324..d14167fff 100644
--- a/ext/standard/sha1.c
+++ b/ext/standard/sha1.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: sha1.c,v 1.13.2.1.2.4 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: sha1.c,v 1.13.2.1.2.5 2008/12/31 11:17:45 sebastian Exp $ */
#include "php.h"
diff --git a/ext/standard/sha1.h b/ext/standard/sha1.h
index a29f96190..bb7a4516c 100644
--- a/ext/standard/sha1.h
+++ b/ext/standard/sha1.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: sha1.h,v 1.5.2.1.2.3 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: sha1.h,v 1.5.2.1.2.4 2008/12/31 11:17:45 sebastian Exp $ */
#ifndef SHA1_H
#define SHA1_H
diff --git a/ext/standard/soundex.c b/ext/standard/soundex.c
index 20ee0b73a..ee8c2ac36 100644
--- a/ext/standard/soundex.c
+++ b/ext/standard/soundex.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -15,7 +15,7 @@
| Author: Bjørn Borud - Guardian Networks AS <borud@guardian.no> |
+----------------------------------------------------------------------+
*/
-/* $Id: soundex.c,v 1.25.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: soundex.c,v 1.25.2.1.2.3 2008/12/31 11:17:45 sebastian Exp $ */
#include "php.h"
#include <stdlib.h>
diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c
index c8542fba8..2dedc8d33 100644
--- a/ext/standard/streamsfuncs.c
+++ b/ext/standard/streamsfuncs.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: streamsfuncs.c,v 1.58.2.6.2.19 2008/02/03 16:15:30 iliaa Exp $ */
+/* $Id: streamsfuncs.c,v 1.58.2.6.2.31 2009/01/08 17:03:42 lbarnaud Exp $ */
#include "php.h"
#include "php_globals.h"
@@ -69,13 +69,18 @@ PHP_FUNCTION(stream_socket_pair)
s1 = php_stream_sock_open_from_socket(pair[0], 0);
s2 = php_stream_sock_open_from_socket(pair[1], 0);
+ /* set the __exposed flag.
+ * php_stream_to_zval() does, add_next_index_resource() does not */
+ php_stream_auto_cleanup(s1);
+ php_stream_auto_cleanup(s2);
+
add_next_index_resource(return_value, php_stream_get_resource_id(s1));
add_next_index_resource(return_value, php_stream_get_resource_id(s2));
}
/* }}} */
#endif
-/* {{{ proto resource stream_socket_client(string remoteaddress [, long &errcode, string &errstring, double timeout, long flags, resource context])
+/* {{{ proto resource stream_socket_client(string remoteaddress [, long &errcode [, string &errstring [, double timeout [, long flags [, resource context]]]]])
Open a client connection to a remote address */
PHP_FUNCTION(stream_socket_client)
{
@@ -122,6 +127,7 @@ PHP_FUNCTION(stream_socket_client)
STREAM_XPORT_CLIENT | (flags & PHP_STREAM_CLIENT_CONNECT ? STREAM_XPORT_CONNECT : 0) |
(flags & PHP_STREAM_CLIENT_ASYNC_CONNECT ? STREAM_XPORT_CONNECT_ASYNC : 0),
hashkey, &tv, context, &errstr, &err);
+
if (stream == NULL) {
/* host might contain binary characters */
@@ -162,7 +168,7 @@ PHP_FUNCTION(stream_socket_client)
}
/* }}} */
-/* {{{ proto resource stream_socket_server(string localaddress [, long &errcode, string &errstring, long flags, resource context])
+/* {{{ proto resource stream_socket_server(string localaddress [, long &errcode [, string &errstring [, long flags [, resource context]]]])
Create a server socket bound to localaddress */
PHP_FUNCTION(stream_socket_server)
{
@@ -195,7 +201,7 @@ PHP_FUNCTION(stream_socket_server)
stream = php_stream_xport_create(host, host_len, ENFORCE_SAFE_MODE | REPORT_ERRORS,
STREAM_XPORT_SERVER | flags,
NULL, NULL, context, &errstr, &err);
-
+
if (stream == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to connect to %s (%s)", host, errstr == NULL ? "Unknown error" : errstr);
}
@@ -227,7 +233,7 @@ PHP_FUNCTION(stream_socket_server)
}
/* }}} */
-/* {{{ proto resource stream_socket_accept(resource serverstream, [ double timeout, string &peername ])
+/* {{{ proto resource stream_socket_accept(resource serverstream [, double timeout [, string &peername ]])
Accept a client connection from a server socket */
PHP_FUNCTION(stream_socket_accept)
{
@@ -262,7 +268,7 @@ PHP_FUNCTION(stream_socket_accept)
NULL, NULL,
&tv, &errstr
TSRMLS_CC) && clistream) {
-
+
if (peername) {
Z_TYPE_P(peername) = IS_STRING;
}
@@ -405,23 +411,21 @@ PHP_FUNCTION(stream_get_contents)
php_stream_from_zval(stream, &zsrc);
- if (pos > 0 && php_stream_seek(stream, pos, SEEK_SET) < 0) {
+ if ((pos > 0 || (pos == 0 && ZEND_NUM_ARGS() > 2)) && php_stream_seek(stream, pos, SEEK_SET) < 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to seek to position %ld in the stream", pos);
RETURN_FALSE;
}
- if ((len = php_stream_copy_to_mem(stream, &contents, maxlen, 0)) > 0) {
-
- if (PG(magic_quotes_runtime)) {
+ len = php_stream_copy_to_mem(stream, &contents, maxlen, 0);
+
+ if (contents) {
+ if (len && PG(magic_quotes_runtime)) {
contents = php_addslashes(contents, len, &newlen, 1 TSRMLS_CC); /* 1 = free source string */
len = newlen;
}
-
RETVAL_STRINGL(contents, len, 0);
- } else if (len == 0) {
- RETVAL_EMPTY_STRING();
} else {
- RETVAL_FALSE;
+ RETVAL_EMPTY_STRING();
}
}
/* }}} */
@@ -783,6 +787,12 @@ PHP_FUNCTION(stream_select)
retval = stream_array_emulate_read_fd_set(r_array TSRMLS_CC);
if (retval > 0) {
+ if (w_array != NULL) {
+ zend_hash_clean(Z_ARRVAL_P(w_array));
+ }
+ if (e_array != NULL) {
+ zend_hash_clean(Z_ARRVAL_P(e_array));
+ }
RETURN_LONG(retval);
}
}
@@ -818,12 +828,13 @@ static void user_space_stream_notifier(php_stream_context *context, int notifyco
INIT_ZVAL(zvs[i]);
ps[i] = &zvs[i];
ptps[i] = &ps[i];
+ MAKE_STD_ZVAL(ps[i]);
}
ZVAL_LONG(ps[0], notifycode);
ZVAL_LONG(ps[1], severity);
if (xmsg) {
- ZVAL_STRING(ps[2], xmsg, 0);
+ ZVAL_STRING(ps[2], xmsg, 1);
} else {
ZVAL_NULL(ps[2]);
}
@@ -834,6 +845,9 @@ static void user_space_stream_notifier(php_stream_context *context, int notifyco
if (FAILURE == call_user_function_ex(EG(function_table), NULL, callback, &retval, 6, ptps, 0, NULL TSRMLS_CC)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed to call user notifier");
}
+ for (i = 0; i < 6; i++) {
+ zval_ptr_dtor(&ps[i]);
+ }
if (retval) {
zval_ptr_dtor(&retval);
}
@@ -879,7 +893,7 @@ static int parse_context_options(php_stream_context *context, zval *options)
return ret;
}
-static int parse_context_params(php_stream_context *context, zval *params)
+static int parse_context_params(php_stream_context *context, zval *params TSRMLS_DC)
{
int ret = SUCCESS;
zval **tmp;
@@ -898,7 +912,11 @@ static int parse_context_params(php_stream_context *context, zval *params)
context->notifier->dtor = user_space_stream_notifier_dtor;
}
if (SUCCESS == zend_hash_find(Z_ARRVAL_P(params), "options", sizeof("options"), (void**)&tmp)) {
- parse_context_options(context, *tmp);
+ if (Z_TYPE_PP(tmp) == IS_ARRAY) {
+ parse_context_options(context, *tmp);
+ } else {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid stream/context parameter");
+ }
}
return ret;
@@ -1006,7 +1024,7 @@ PHP_FUNCTION(stream_context_set_params)
RETURN_FALSE;
}
- RETVAL_BOOL(parse_context_params(context, params) == SUCCESS);
+ RETVAL_BOOL(parse_context_params(context, params TSRMLS_CC) == SUCCESS);
}
/* }}} */
@@ -1065,6 +1083,7 @@ static void apply_filter_to_stream(int append, INTERNAL_FUNCTION_PARAMETERS)
long read_write = 0;
zval *filterparams = NULL;
php_stream_filter *filter = NULL;
+ int ret;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|lz", &zstream,
&filtername, &filternamelen, &read_write, &filterparams) == FAILURE) {
@@ -1094,9 +1113,13 @@ static void apply_filter_to_stream(int append, INTERNAL_FUNCTION_PARAMETERS)
}
if (append) {
- php_stream_filter_append(&stream->readfilters, filter);
+ ret = php_stream_filter_append_ex(&stream->readfilters, filter TSRMLS_CC);
} else {
- php_stream_filter_prepend(&stream->readfilters, filter);
+ ret = php_stream_filter_prepend_ex(&stream->readfilters, filter TSRMLS_CC);
+ }
+ if (ret != SUCCESS) {
+ php_stream_filter_remove(filter, 1 TSRMLS_CC);
+ RETURN_FALSE;
}
}
@@ -1107,9 +1130,13 @@ static void apply_filter_to_stream(int append, INTERNAL_FUNCTION_PARAMETERS)
}
if (append) {
- php_stream_filter_append(&stream->writefilters, filter);
+ ret = php_stream_filter_append_ex(&stream->writefilters, filter TSRMLS_CC);
} else {
- php_stream_filter_prepend(&stream->writefilters, filter);
+ ret = php_stream_filter_prepend_ex(&stream->writefilters, filter TSRMLS_CC);
+ }
+ if (ret != SUCCESS) {
+ php_stream_filter_remove(filter, 1 TSRMLS_CC);
+ RETURN_FALSE;
}
}
@@ -1301,7 +1328,7 @@ PHP_FUNCTION(stream_set_write_buffer)
}
/* }}} */
-/* {{{ proto int stream_socket_enable_crypto(resource stream, bool enable [, int cryptokind, resource sessionstream])
+/* {{{ proto int stream_socket_enable_crypto(resource stream, bool enable [, int cryptokind [, resource sessionstream]])
Enable or disable a specific kind of crypto on the stream */
PHP_FUNCTION(stream_socket_enable_crypto)
{
diff --git a/ext/standard/streamsfuncs.h b/ext/standard/streamsfuncs.h
index b966ed57d..d07465561 100644
--- a/ext/standard/streamsfuncs.h
+++ b/ext/standard/streamsfuncs.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: streamsfuncs.h,v 1.13.2.1.2.5 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: streamsfuncs.h,v 1.13.2.1.2.6 2008/12/31 11:17:45 sebastian Exp $ */
/* Flags for stream_socket_client */
#define PHP_STREAM_CLIENT_PERSISTENT 1
diff --git a/ext/standard/string.c b/ext/standard/string.c
index 8125c18e2..5feca517f 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: string.c,v 1.445.2.14.2.73 2008/01/16 08:35:59 tony2001 Exp $ */
+/* $Id: string.c,v 1.445.2.14.2.81 2009/02/14 07:00:24 moriyoshi Exp $ */
/* Synced with php 3.0 revision 1.193 1999-06-16 [ssb] */
@@ -592,14 +592,12 @@ PHP_FUNCTION(nl_langinfo)
#endif
#ifdef DECIMAL_POINT
case DECIMAL_POINT:
-#endif
-#ifdef RADIXCHAR
+#elif defined(RADIXCHAR)
case RADIXCHAR:
#endif
#ifdef THOUSANDS_SEP
case THOUSANDS_SEP:
-#endif
-#ifdef THOUSEP
+#elif defined(THOUSEP)
case THOUSEP:
#endif
#ifdef GROUPING
@@ -1035,7 +1033,9 @@ PHP_FUNCTION(explode)
array_init(return_value);
if (! Z_STRLEN_PP(str)) {
- add_next_index_stringl(return_value, "", sizeof("") - 1, 1);
+ if (limit >= 0 || argc == 2) {
+ add_next_index_stringl(return_value, "", sizeof("") - 1, 1);
+ }
return;
}
@@ -1949,14 +1949,14 @@ PHP_FUNCTION(strrpos)
if (offset >= 0) {
if (offset > haystack_len) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Offset is greater than the length of haystack string");
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset is greater than the length of haystack string");
RETURN_FALSE;
}
p = haystack + offset;
e = haystack + haystack_len - needle_len;
} else {
if (-offset > haystack_len) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Offset is greater than the length of haystack string");
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset is greater than the length of haystack string");
RETURN_FALSE;
}
@@ -2025,7 +2025,7 @@ PHP_FUNCTION(strripos)
Can also avoid tolower emallocs */
if (offset >= 0) {
if (offset > haystack_len) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Offset is greater than the length of haystack string");
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset is greater than the length of haystack string");
RETURN_FALSE;
}
p = haystack + offset;
@@ -2033,7 +2033,7 @@ PHP_FUNCTION(strripos)
} else {
p = haystack;
if (-offset > haystack_len || offset < -INT_MAX) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Offset is greater than the length of haystack string");
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset is greater than the length of haystack string");
RETURN_FALSE;
}
e = haystack + haystack_len + offset;
@@ -2058,7 +2058,7 @@ PHP_FUNCTION(strripos)
if (offset > haystack_len) {
efree(needle_dup);
efree(haystack_dup);
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Offset is greater than the length of haystack string");
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset is greater than the length of haystack string");
RETURN_FALSE;
}
p = haystack_dup + offset;
@@ -2067,7 +2067,7 @@ PHP_FUNCTION(strripos)
if (-offset > haystack_len || offset < -INT_MAX) {
efree(needle_dup);
efree(haystack_dup);
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Offset is greater than the length of haystack string");
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset is greater than the length of haystack string");
RETURN_FALSE;
}
p = haystack_dup;
@@ -2262,8 +2262,10 @@ PHP_FUNCTION(substr)
}
f = Z_LVAL_PP(from);
- if (f > Z_STRLEN_PP(str) || (f < 0 && -f > Z_STRLEN_PP(str))) {
+ if (f > Z_STRLEN_PP(str)) {
RETURN_FALSE;
+ } else if (f < 0 && -f > Z_STRLEN_PP(str)) {
+ f = 0;
}
if (l < 0 && (l + Z_STRLEN_PP(str) - f) < 0) {
@@ -4357,6 +4359,9 @@ PHPAPI size_t php_strip_tags_ex(char *rbuf, int len, int *stateptr, char *allow,
case '\0':
break;
case '<':
+ if (in_q) {
+ break;
+ }
if (isspace(*(p + 1)) && !allow_tag_spaces) {
goto reg_char;
}
@@ -4521,12 +4526,13 @@ PHPAPI size_t php_strip_tags_ex(char *rbuf, int len, int *stateptr, char *allow,
/* fall-through */
case 'l':
+ case 'L':
/* swm: If we encounter '<?xml' then we shouldn't be in
* state == 2 (PHP). Switch back to HTML.
*/
- if (state == 2 && p > buf+2 && *(p-1) == 'm' && *(p-2) == 'x') {
+ if (state == 2 && p > buf+2 && strncasecmp(p-2, "xm", 2) == 0) {
state = 1;
break;
}
@@ -4916,7 +4922,7 @@ PHP_FUNCTION(str_pad)
/* If resulting string turns out to be shorter than input string,
we simply copy the input and return. */
- if (Z_LVAL_PP(pad_length) < 0 || num_pad_chars < 0) {
+ if (Z_LVAL_PP(pad_length) <= 0 || num_pad_chars <= 0) {
RETURN_ZVAL(*input, 1, 0);
}
diff --git a/ext/standard/syslog.c b/ext/standard/syslog.c
index 985bb8411..ad1445ead 100644
--- a/ext/standard/syslog.c
+++ b/ext/standard/syslog.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: syslog.c,v 1.49.2.3.2.4 2008/02/20 15:28:37 iliaa Exp $ */
+/* $Id: syslog.c,v 1.49.2.3.2.5 2008/12/31 11:17:46 sebastian Exp $ */
#include "php.h"
diff --git a/ext/standard/tests/array/array_chunk.phpt b/ext/standard/tests/array/array_chunk.phpt
index 061c6994b..2ee77e129 100644
--- a/ext/standard/tests/array/array_chunk.phpt
+++ b/ext/standard/tests/array/array_chunk.phpt
@@ -2,5325 +2,20 @@
array_chunk()
--FILE--
<?php
-$arrays = array (
- array (),
- array (0),
- array (1),
- array (-1),
- array (0, 2),
- array (1, 2, 3),
-
- array (1 => 0),
- array (2 => 1),
- array (3 => -1),
-
- array (1 => 0, 2 => 2),
- array (1 => 1, 2 => 2, 3 => 3),
- array (0 => 0, 3 => 2),
- array (1 => 1, 5 => 2, 8 => 3),
-
- array (1, 2),
- array (0, 1, 2),
- array (1, 2, 3),
- array (0, 1, 2, 3),
- array (1, 2, 3, 4),
- array (0, 1, 2, 3, 4),
- array (1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
- array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
-
- array ("a" => 1),
- array ("b" => 1, "c" => 2),
- array ("p" => 1, "q" => 2, "r" => 3, "s" => 4, "u" => 5, "v" => 6),
-
- array ("a" => "A"),
- array ("p" => "A", "q" => "B", "r" => "C", "s" => "D", "u" => "E", "v" => "F"),
-);
-
-foreach ($arrays as $item) {
- echo "===========================================\n";
- var_dump ($item);
- echo "-------------------------------------------\n";
- for ($i = 0; $i < (sizeof($item) + 1); $i++) {
- echo "[$i]\n";
- var_dump (@array_chunk ($item, $i));
- var_dump (@array_chunk ($item, $i, TRUE));
- var_dump (@array_chunk ($item, $i, FALSE));
- echo "\n";
- }
+$array = array ();
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
echo "\n";
}
-echo "end\n";
?>
--EXPECT--
-===========================================
array(0) {
}
--------------------------------------------
[0]
NULL
NULL
NULL
-
-
-===========================================
-array(1) {
- [0]=>
- int(0)
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
-}
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
-}
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
-}
-
-
-===========================================
-array(1) {
- [0]=>
- int(1)
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
-}
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
-}
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
-}
-
-
-===========================================
-array(1) {
- [0]=>
- int(-1)
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(-1)
- }
-}
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(-1)
- }
-}
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(-1)
- }
-}
-
-
-===========================================
-array(2) {
- [0]=>
- int(0)
- [1]=>
- int(2)
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(2) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
-}
-array(2) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- [1]=>
- array(1) {
- [1]=>
- int(2)
- }
-}
-array(2) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
-}
-
-[2]
-array(1) {
- [0]=>
- array(2) {
- [0]=>
- int(0)
- [1]=>
- int(2)
- }
-}
-array(1) {
- [0]=>
- array(2) {
- [0]=>
- int(0)
- [1]=>
- int(2)
- }
-}
-array(1) {
- [0]=>
- array(2) {
- [0]=>
- int(0)
- [1]=>
- int(2)
- }
-}
-
-
-===========================================
-array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(3) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
- [2]=>
- array(1) {
- [0]=>
- int(3)
- }
-}
-array(3) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
- [1]=>
- array(1) {
- [1]=>
- int(2)
- }
- [2]=>
- array(1) {
- [2]=>
- int(3)
- }
-}
-array(3) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
- [2]=>
- array(1) {
- [0]=>
- int(3)
- }
-}
-
-[2]
-array(2) {
- [0]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
- [1]=>
- array(1) {
- [0]=>
- int(3)
- }
-}
-array(2) {
- [0]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
- [1]=>
- array(1) {
- [2]=>
- int(3)
- }
-}
-array(2) {
- [0]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
- [1]=>
- array(1) {
- [0]=>
- int(3)
- }
-}
-
-[3]
-array(1) {
- [0]=>
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- }
-}
-array(1) {
- [0]=>
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- }
-}
-array(1) {
- [0]=>
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- }
-}
-
-
-===========================================
-array(1) {
- [1]=>
- int(0)
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
-}
-array(1) {
- [0]=>
- array(1) {
- [1]=>
- int(0)
- }
-}
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
-}
-
-
-===========================================
-array(1) {
- [2]=>
- int(1)
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
-}
-array(1) {
- [0]=>
- array(1) {
- [2]=>
- int(1)
- }
-}
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
-}
-
-
-===========================================
-array(1) {
- [3]=>
- int(-1)
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(-1)
- }
-}
-array(1) {
- [0]=>
- array(1) {
- [3]=>
- int(-1)
- }
-}
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(-1)
- }
-}
-
-
-===========================================
-array(2) {
- [1]=>
- int(0)
- [2]=>
- int(2)
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(2) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
-}
-array(2) {
- [0]=>
- array(1) {
- [1]=>
- int(0)
- }
- [1]=>
- array(1) {
- [2]=>
- int(2)
- }
-}
-array(2) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
-}
-
-[2]
-array(1) {
- [0]=>
- array(2) {
- [0]=>
- int(0)
- [1]=>
- int(2)
- }
-}
-array(1) {
- [0]=>
- array(2) {
- [1]=>
- int(0)
- [2]=>
- int(2)
- }
-}
-array(1) {
- [0]=>
- array(2) {
- [0]=>
- int(0)
- [1]=>
- int(2)
- }
-}
-
-
-===========================================
-array(3) {
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(3) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
- [2]=>
- array(1) {
- [0]=>
- int(3)
- }
-}
-array(3) {
- [0]=>
- array(1) {
- [1]=>
- int(1)
- }
- [1]=>
- array(1) {
- [2]=>
- int(2)
- }
- [2]=>
- array(1) {
- [3]=>
- int(3)
- }
-}
-array(3) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
- [2]=>
- array(1) {
- [0]=>
- int(3)
- }
-}
-
-[2]
-array(2) {
- [0]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
- [1]=>
- array(1) {
- [0]=>
- int(3)
- }
-}
-array(2) {
- [0]=>
- array(2) {
- [1]=>
- int(1)
- [2]=>
- int(2)
- }
- [1]=>
- array(1) {
- [3]=>
- int(3)
- }
-}
-array(2) {
- [0]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
- [1]=>
- array(1) {
- [0]=>
- int(3)
- }
-}
-
-[3]
-array(1) {
- [0]=>
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- }
-}
-array(1) {
- [0]=>
- array(3) {
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- }
-}
-array(1) {
- [0]=>
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- }
-}
-
-
-===========================================
-array(2) {
- [0]=>
- int(0)
- [3]=>
- int(2)
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(2) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
-}
-array(2) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- [1]=>
- array(1) {
- [3]=>
- int(2)
- }
-}
-array(2) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
-}
-
-[2]
-array(1) {
- [0]=>
- array(2) {
- [0]=>
- int(0)
- [1]=>
- int(2)
- }
-}
-array(1) {
- [0]=>
- array(2) {
- [0]=>
- int(0)
- [3]=>
- int(2)
- }
-}
-array(1) {
- [0]=>
- array(2) {
- [0]=>
- int(0)
- [1]=>
- int(2)
- }
-}
-
-
-===========================================
-array(3) {
- [1]=>
- int(1)
- [5]=>
- int(2)
- [8]=>
- int(3)
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(3) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
- [2]=>
- array(1) {
- [0]=>
- int(3)
- }
-}
-array(3) {
- [0]=>
- array(1) {
- [1]=>
- int(1)
- }
- [1]=>
- array(1) {
- [5]=>
- int(2)
- }
- [2]=>
- array(1) {
- [8]=>
- int(3)
- }
-}
-array(3) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
- [2]=>
- array(1) {
- [0]=>
- int(3)
- }
-}
-
-[2]
-array(2) {
- [0]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
- [1]=>
- array(1) {
- [0]=>
- int(3)
- }
-}
-array(2) {
- [0]=>
- array(2) {
- [1]=>
- int(1)
- [5]=>
- int(2)
- }
- [1]=>
- array(1) {
- [8]=>
- int(3)
- }
-}
-array(2) {
- [0]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
- [1]=>
- array(1) {
- [0]=>
- int(3)
- }
-}
-
-[3]
-array(1) {
- [0]=>
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- }
-}
-array(1) {
- [0]=>
- array(3) {
- [1]=>
- int(1)
- [5]=>
- int(2)
- [8]=>
- int(3)
- }
-}
-array(1) {
- [0]=>
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- }
-}
-
-
-===========================================
-array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(2) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
-}
-array(2) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
- [1]=>
- array(1) {
- [1]=>
- int(2)
- }
-}
-array(2) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
-}
-
-[2]
-array(1) {
- [0]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
-}
-array(1) {
- [0]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
-}
-array(1) {
- [0]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
-}
-
-
-===========================================
-array(3) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(3) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- [1]=>
- array(1) {
- [0]=>
- int(1)
- }
- [2]=>
- array(1) {
- [0]=>
- int(2)
- }
-}
-array(3) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- [1]=>
- array(1) {
- [1]=>
- int(1)
- }
- [2]=>
- array(1) {
- [2]=>
- int(2)
- }
-}
-array(3) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- [1]=>
- array(1) {
- [0]=>
- int(1)
- }
- [2]=>
- array(1) {
- [0]=>
- int(2)
- }
-}
-
-[2]
-array(2) {
- [0]=>
- array(2) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
-}
-array(2) {
- [0]=>
- array(2) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- }
- [1]=>
- array(1) {
- [2]=>
- int(2)
- }
-}
-array(2) {
- [0]=>
- array(2) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
-}
-
-[3]
-array(1) {
- [0]=>
- array(3) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- }
-}
-array(1) {
- [0]=>
- array(3) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- }
-}
-array(1) {
- [0]=>
- array(3) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- }
-}
-
-
-===========================================
-array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(3) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
- [2]=>
- array(1) {
- [0]=>
- int(3)
- }
-}
-array(3) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
- [1]=>
- array(1) {
- [1]=>
- int(2)
- }
- [2]=>
- array(1) {
- [2]=>
- int(3)
- }
-}
-array(3) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
- [2]=>
- array(1) {
- [0]=>
- int(3)
- }
-}
-
-[2]
-array(2) {
- [0]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
- [1]=>
- array(1) {
- [0]=>
- int(3)
- }
-}
-array(2) {
- [0]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
- [1]=>
- array(1) {
- [2]=>
- int(3)
- }
-}
-array(2) {
- [0]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
- [1]=>
- array(1) {
- [0]=>
- int(3)
- }
-}
-
-[3]
-array(1) {
- [0]=>
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- }
-}
-array(1) {
- [0]=>
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- }
-}
-array(1) {
- [0]=>
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- }
-}
-
-
-===========================================
-array(4) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(4) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- [1]=>
- array(1) {
- [0]=>
- int(1)
- }
- [2]=>
- array(1) {
- [0]=>
- int(2)
- }
- [3]=>
- array(1) {
- [0]=>
- int(3)
- }
-}
-array(4) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- [1]=>
- array(1) {
- [1]=>
- int(1)
- }
- [2]=>
- array(1) {
- [2]=>
- int(2)
- }
- [3]=>
- array(1) {
- [3]=>
- int(3)
- }
-}
-array(4) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- [1]=>
- array(1) {
- [0]=>
- int(1)
- }
- [2]=>
- array(1) {
- [0]=>
- int(2)
- }
- [3]=>
- array(1) {
- [0]=>
- int(3)
- }
-}
-
-[2]
-array(2) {
- [0]=>
- array(2) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- }
- [1]=>
- array(2) {
- [0]=>
- int(2)
- [1]=>
- int(3)
- }
-}
-array(2) {
- [0]=>
- array(2) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- }
- [1]=>
- array(2) {
- [2]=>
- int(2)
- [3]=>
- int(3)
- }
-}
-array(2) {
- [0]=>
- array(2) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- }
- [1]=>
- array(2) {
- [0]=>
- int(2)
- [1]=>
- int(3)
- }
-}
-
-[3]
-array(2) {
- [0]=>
- array(3) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- }
- [1]=>
- array(1) {
- [0]=>
- int(3)
- }
-}
-array(2) {
- [0]=>
- array(3) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- }
- [1]=>
- array(1) {
- [3]=>
- int(3)
- }
-}
-array(2) {
- [0]=>
- array(3) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- }
- [1]=>
- array(1) {
- [0]=>
- int(3)
- }
-}
-
-[4]
-array(1) {
- [0]=>
- array(4) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- }
-}
-array(1) {
- [0]=>
- array(4) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- }
-}
-array(1) {
- [0]=>
- array(4) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- }
-}
-
-
-===========================================
-array(4) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(4) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
- [2]=>
- array(1) {
- [0]=>
- int(3)
- }
- [3]=>
- array(1) {
- [0]=>
- int(4)
- }
-}
-array(4) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
- [1]=>
- array(1) {
- [1]=>
- int(2)
- }
- [2]=>
- array(1) {
- [2]=>
- int(3)
- }
- [3]=>
- array(1) {
- [3]=>
- int(4)
- }
-}
-array(4) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
- [2]=>
- array(1) {
- [0]=>
- int(3)
- }
- [3]=>
- array(1) {
- [0]=>
- int(4)
- }
-}
-
-[2]
-array(2) {
- [0]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
- [1]=>
- array(2) {
- [0]=>
- int(3)
- [1]=>
- int(4)
- }
-}
-array(2) {
- [0]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
- [1]=>
- array(2) {
- [2]=>
- int(3)
- [3]=>
- int(4)
- }
-}
-array(2) {
- [0]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
- [1]=>
- array(2) {
- [0]=>
- int(3)
- [1]=>
- int(4)
- }
-}
-
-[3]
-array(2) {
- [0]=>
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- }
- [1]=>
- array(1) {
- [0]=>
- int(4)
- }
-}
-array(2) {
- [0]=>
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- }
- [1]=>
- array(1) {
- [3]=>
- int(4)
- }
-}
-array(2) {
- [0]=>
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- }
- [1]=>
- array(1) {
- [0]=>
- int(4)
- }
-}
-
-[4]
-array(1) {
- [0]=>
- array(4) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- }
-}
-array(1) {
- [0]=>
- array(4) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- }
-}
-array(1) {
- [0]=>
- array(4) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- }
-}
-
-
-===========================================
-array(5) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(5) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- [1]=>
- array(1) {
- [0]=>
- int(1)
- }
- [2]=>
- array(1) {
- [0]=>
- int(2)
- }
- [3]=>
- array(1) {
- [0]=>
- int(3)
- }
- [4]=>
- array(1) {
- [0]=>
- int(4)
- }
-}
-array(5) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- [1]=>
- array(1) {
- [1]=>
- int(1)
- }
- [2]=>
- array(1) {
- [2]=>
- int(2)
- }
- [3]=>
- array(1) {
- [3]=>
- int(3)
- }
- [4]=>
- array(1) {
- [4]=>
- int(4)
- }
-}
-array(5) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- [1]=>
- array(1) {
- [0]=>
- int(1)
- }
- [2]=>
- array(1) {
- [0]=>
- int(2)
- }
- [3]=>
- array(1) {
- [0]=>
- int(3)
- }
- [4]=>
- array(1) {
- [0]=>
- int(4)
- }
-}
-
-[2]
-array(3) {
- [0]=>
- array(2) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- }
- [1]=>
- array(2) {
- [0]=>
- int(2)
- [1]=>
- int(3)
- }
- [2]=>
- array(1) {
- [0]=>
- int(4)
- }
-}
-array(3) {
- [0]=>
- array(2) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- }
- [1]=>
- array(2) {
- [2]=>
- int(2)
- [3]=>
- int(3)
- }
- [2]=>
- array(1) {
- [4]=>
- int(4)
- }
-}
-array(3) {
- [0]=>
- array(2) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- }
- [1]=>
- array(2) {
- [0]=>
- int(2)
- [1]=>
- int(3)
- }
- [2]=>
- array(1) {
- [0]=>
- int(4)
- }
-}
-
-[3]
-array(2) {
- [0]=>
- array(3) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- }
- [1]=>
- array(2) {
- [0]=>
- int(3)
- [1]=>
- int(4)
- }
-}
-array(2) {
- [0]=>
- array(3) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- }
- [1]=>
- array(2) {
- [3]=>
- int(3)
- [4]=>
- int(4)
- }
-}
-array(2) {
- [0]=>
- array(3) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- }
- [1]=>
- array(2) {
- [0]=>
- int(3)
- [1]=>
- int(4)
- }
-}
-
-[4]
-array(2) {
- [0]=>
- array(4) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- }
- [1]=>
- array(1) {
- [0]=>
- int(4)
- }
-}
-array(2) {
- [0]=>
- array(4) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- }
- [1]=>
- array(1) {
- [4]=>
- int(4)
- }
-}
-array(2) {
- [0]=>
- array(4) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- }
- [1]=>
- array(1) {
- [0]=>
- int(4)
- }
-}
-
-[5]
-array(1) {
- [0]=>
- array(5) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- }
-}
-array(1) {
- [0]=>
- array(5) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- }
-}
-array(1) {
- [0]=>
- array(5) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- }
-}
-
-
-===========================================
-array(10) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- [7]=>
- int(8)
- [8]=>
- int(9)
- [9]=>
- int(10)
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(10) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
- [2]=>
- array(1) {
- [0]=>
- int(3)
- }
- [3]=>
- array(1) {
- [0]=>
- int(4)
- }
- [4]=>
- array(1) {
- [0]=>
- int(5)
- }
- [5]=>
- array(1) {
- [0]=>
- int(6)
- }
- [6]=>
- array(1) {
- [0]=>
- int(7)
- }
- [7]=>
- array(1) {
- [0]=>
- int(8)
- }
- [8]=>
- array(1) {
- [0]=>
- int(9)
- }
- [9]=>
- array(1) {
- [0]=>
- int(10)
- }
-}
-array(10) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
- [1]=>
- array(1) {
- [1]=>
- int(2)
- }
- [2]=>
- array(1) {
- [2]=>
- int(3)
- }
- [3]=>
- array(1) {
- [3]=>
- int(4)
- }
- [4]=>
- array(1) {
- [4]=>
- int(5)
- }
- [5]=>
- array(1) {
- [5]=>
- int(6)
- }
- [6]=>
- array(1) {
- [6]=>
- int(7)
- }
- [7]=>
- array(1) {
- [7]=>
- int(8)
- }
- [8]=>
- array(1) {
- [8]=>
- int(9)
- }
- [9]=>
- array(1) {
- [9]=>
- int(10)
- }
-}
-array(10) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
- [2]=>
- array(1) {
- [0]=>
- int(3)
- }
- [3]=>
- array(1) {
- [0]=>
- int(4)
- }
- [4]=>
- array(1) {
- [0]=>
- int(5)
- }
- [5]=>
- array(1) {
- [0]=>
- int(6)
- }
- [6]=>
- array(1) {
- [0]=>
- int(7)
- }
- [7]=>
- array(1) {
- [0]=>
- int(8)
- }
- [8]=>
- array(1) {
- [0]=>
- int(9)
- }
- [9]=>
- array(1) {
- [0]=>
- int(10)
- }
-}
-
-[2]
-array(5) {
- [0]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
- [1]=>
- array(2) {
- [0]=>
- int(3)
- [1]=>
- int(4)
- }
- [2]=>
- array(2) {
- [0]=>
- int(5)
- [1]=>
- int(6)
- }
- [3]=>
- array(2) {
- [0]=>
- int(7)
- [1]=>
- int(8)
- }
- [4]=>
- array(2) {
- [0]=>
- int(9)
- [1]=>
- int(10)
- }
-}
-array(5) {
- [0]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
- [1]=>
- array(2) {
- [2]=>
- int(3)
- [3]=>
- int(4)
- }
- [2]=>
- array(2) {
- [4]=>
- int(5)
- [5]=>
- int(6)
- }
- [3]=>
- array(2) {
- [6]=>
- int(7)
- [7]=>
- int(8)
- }
- [4]=>
- array(2) {
- [8]=>
- int(9)
- [9]=>
- int(10)
- }
-}
-array(5) {
- [0]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
- [1]=>
- array(2) {
- [0]=>
- int(3)
- [1]=>
- int(4)
- }
- [2]=>
- array(2) {
- [0]=>
- int(5)
- [1]=>
- int(6)
- }
- [3]=>
- array(2) {
- [0]=>
- int(7)
- [1]=>
- int(8)
- }
- [4]=>
- array(2) {
- [0]=>
- int(9)
- [1]=>
- int(10)
- }
-}
-
-[3]
-array(4) {
- [0]=>
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- }
- [1]=>
- array(3) {
- [0]=>
- int(4)
- [1]=>
- int(5)
- [2]=>
- int(6)
- }
- [2]=>
- array(3) {
- [0]=>
- int(7)
- [1]=>
- int(8)
- [2]=>
- int(9)
- }
- [3]=>
- array(1) {
- [0]=>
- int(10)
- }
-}
-array(4) {
- [0]=>
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- }
- [1]=>
- array(3) {
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- }
- [2]=>
- array(3) {
- [6]=>
- int(7)
- [7]=>
- int(8)
- [8]=>
- int(9)
- }
- [3]=>
- array(1) {
- [9]=>
- int(10)
- }
-}
-array(4) {
- [0]=>
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- }
- [1]=>
- array(3) {
- [0]=>
- int(4)
- [1]=>
- int(5)
- [2]=>
- int(6)
- }
- [2]=>
- array(3) {
- [0]=>
- int(7)
- [1]=>
- int(8)
- [2]=>
- int(9)
- }
- [3]=>
- array(1) {
- [0]=>
- int(10)
- }
-}
-
-[4]
-array(3) {
- [0]=>
- array(4) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- }
- [1]=>
- array(4) {
- [0]=>
- int(5)
- [1]=>
- int(6)
- [2]=>
- int(7)
- [3]=>
- int(8)
- }
- [2]=>
- array(2) {
- [0]=>
- int(9)
- [1]=>
- int(10)
- }
-}
-array(3) {
- [0]=>
- array(4) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- }
- [1]=>
- array(4) {
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- [7]=>
- int(8)
- }
- [2]=>
- array(2) {
- [8]=>
- int(9)
- [9]=>
- int(10)
- }
-}
-array(3) {
- [0]=>
- array(4) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- }
- [1]=>
- array(4) {
- [0]=>
- int(5)
- [1]=>
- int(6)
- [2]=>
- int(7)
- [3]=>
- int(8)
- }
- [2]=>
- array(2) {
- [0]=>
- int(9)
- [1]=>
- int(10)
- }
-}
-
-[5]
-array(2) {
- [0]=>
- array(5) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- }
- [1]=>
- array(5) {
- [0]=>
- int(6)
- [1]=>
- int(7)
- [2]=>
- int(8)
- [3]=>
- int(9)
- [4]=>
- int(10)
- }
-}
-array(2) {
- [0]=>
- array(5) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- }
- [1]=>
- array(5) {
- [5]=>
- int(6)
- [6]=>
- int(7)
- [7]=>
- int(8)
- [8]=>
- int(9)
- [9]=>
- int(10)
- }
-}
-array(2) {
- [0]=>
- array(5) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- }
- [1]=>
- array(5) {
- [0]=>
- int(6)
- [1]=>
- int(7)
- [2]=>
- int(8)
- [3]=>
- int(9)
- [4]=>
- int(10)
- }
-}
-
-[6]
-array(2) {
- [0]=>
- array(6) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- }
- [1]=>
- array(4) {
- [0]=>
- int(7)
- [1]=>
- int(8)
- [2]=>
- int(9)
- [3]=>
- int(10)
- }
-}
-array(2) {
- [0]=>
- array(6) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- }
- [1]=>
- array(4) {
- [6]=>
- int(7)
- [7]=>
- int(8)
- [8]=>
- int(9)
- [9]=>
- int(10)
- }
-}
-array(2) {
- [0]=>
- array(6) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- }
- [1]=>
- array(4) {
- [0]=>
- int(7)
- [1]=>
- int(8)
- [2]=>
- int(9)
- [3]=>
- int(10)
- }
-}
-
-[7]
-array(2) {
- [0]=>
- array(7) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- }
- [1]=>
- array(3) {
- [0]=>
- int(8)
- [1]=>
- int(9)
- [2]=>
- int(10)
- }
-}
-array(2) {
- [0]=>
- array(7) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- }
- [1]=>
- array(3) {
- [7]=>
- int(8)
- [8]=>
- int(9)
- [9]=>
- int(10)
- }
-}
-array(2) {
- [0]=>
- array(7) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- }
- [1]=>
- array(3) {
- [0]=>
- int(8)
- [1]=>
- int(9)
- [2]=>
- int(10)
- }
-}
-
-[8]
-array(2) {
- [0]=>
- array(8) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- [7]=>
- int(8)
- }
- [1]=>
- array(2) {
- [0]=>
- int(9)
- [1]=>
- int(10)
- }
-}
-array(2) {
- [0]=>
- array(8) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- [7]=>
- int(8)
- }
- [1]=>
- array(2) {
- [8]=>
- int(9)
- [9]=>
- int(10)
- }
-}
-array(2) {
- [0]=>
- array(8) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- [7]=>
- int(8)
- }
- [1]=>
- array(2) {
- [0]=>
- int(9)
- [1]=>
- int(10)
- }
-}
-
-[9]
-array(2) {
- [0]=>
- array(9) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- [7]=>
- int(8)
- [8]=>
- int(9)
- }
- [1]=>
- array(1) {
- [0]=>
- int(10)
- }
-}
-array(2) {
- [0]=>
- array(9) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- [7]=>
- int(8)
- [8]=>
- int(9)
- }
- [1]=>
- array(1) {
- [9]=>
- int(10)
- }
-}
-array(2) {
- [0]=>
- array(9) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- [7]=>
- int(8)
- [8]=>
- int(9)
- }
- [1]=>
- array(1) {
- [0]=>
- int(10)
- }
-}
-
-[10]
-array(1) {
- [0]=>
- array(10) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- [7]=>
- int(8)
- [8]=>
- int(9)
- [9]=>
- int(10)
- }
-}
-array(1) {
- [0]=>
- array(10) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- [7]=>
- int(8)
- [8]=>
- int(9)
- [9]=>
- int(10)
- }
-}
-array(1) {
- [0]=>
- array(10) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- [6]=>
- int(7)
- [7]=>
- int(8)
- [8]=>
- int(9)
- [9]=>
- int(10)
- }
-}
-
-
-===========================================
-array(11) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- [5]=>
- int(5)
- [6]=>
- int(6)
- [7]=>
- int(7)
- [8]=>
- int(8)
- [9]=>
- int(9)
- [10]=>
- int(10)
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(11) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- [1]=>
- array(1) {
- [0]=>
- int(1)
- }
- [2]=>
- array(1) {
- [0]=>
- int(2)
- }
- [3]=>
- array(1) {
- [0]=>
- int(3)
- }
- [4]=>
- array(1) {
- [0]=>
- int(4)
- }
- [5]=>
- array(1) {
- [0]=>
- int(5)
- }
- [6]=>
- array(1) {
- [0]=>
- int(6)
- }
- [7]=>
- array(1) {
- [0]=>
- int(7)
- }
- [8]=>
- array(1) {
- [0]=>
- int(8)
- }
- [9]=>
- array(1) {
- [0]=>
- int(9)
- }
- [10]=>
- array(1) {
- [0]=>
- int(10)
- }
-}
-array(11) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- [1]=>
- array(1) {
- [1]=>
- int(1)
- }
- [2]=>
- array(1) {
- [2]=>
- int(2)
- }
- [3]=>
- array(1) {
- [3]=>
- int(3)
- }
- [4]=>
- array(1) {
- [4]=>
- int(4)
- }
- [5]=>
- array(1) {
- [5]=>
- int(5)
- }
- [6]=>
- array(1) {
- [6]=>
- int(6)
- }
- [7]=>
- array(1) {
- [7]=>
- int(7)
- }
- [8]=>
- array(1) {
- [8]=>
- int(8)
- }
- [9]=>
- array(1) {
- [9]=>
- int(9)
- }
- [10]=>
- array(1) {
- [10]=>
- int(10)
- }
-}
-array(11) {
- [0]=>
- array(1) {
- [0]=>
- int(0)
- }
- [1]=>
- array(1) {
- [0]=>
- int(1)
- }
- [2]=>
- array(1) {
- [0]=>
- int(2)
- }
- [3]=>
- array(1) {
- [0]=>
- int(3)
- }
- [4]=>
- array(1) {
- [0]=>
- int(4)
- }
- [5]=>
- array(1) {
- [0]=>
- int(5)
- }
- [6]=>
- array(1) {
- [0]=>
- int(6)
- }
- [7]=>
- array(1) {
- [0]=>
- int(7)
- }
- [8]=>
- array(1) {
- [0]=>
- int(8)
- }
- [9]=>
- array(1) {
- [0]=>
- int(9)
- }
- [10]=>
- array(1) {
- [0]=>
- int(10)
- }
-}
-
-[2]
-array(6) {
- [0]=>
- array(2) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- }
- [1]=>
- array(2) {
- [0]=>
- int(2)
- [1]=>
- int(3)
- }
- [2]=>
- array(2) {
- [0]=>
- int(4)
- [1]=>
- int(5)
- }
- [3]=>
- array(2) {
- [0]=>
- int(6)
- [1]=>
- int(7)
- }
- [4]=>
- array(2) {
- [0]=>
- int(8)
- [1]=>
- int(9)
- }
- [5]=>
- array(1) {
- [0]=>
- int(10)
- }
-}
-array(6) {
- [0]=>
- array(2) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- }
- [1]=>
- array(2) {
- [2]=>
- int(2)
- [3]=>
- int(3)
- }
- [2]=>
- array(2) {
- [4]=>
- int(4)
- [5]=>
- int(5)
- }
- [3]=>
- array(2) {
- [6]=>
- int(6)
- [7]=>
- int(7)
- }
- [4]=>
- array(2) {
- [8]=>
- int(8)
- [9]=>
- int(9)
- }
- [5]=>
- array(1) {
- [10]=>
- int(10)
- }
-}
-array(6) {
- [0]=>
- array(2) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- }
- [1]=>
- array(2) {
- [0]=>
- int(2)
- [1]=>
- int(3)
- }
- [2]=>
- array(2) {
- [0]=>
- int(4)
- [1]=>
- int(5)
- }
- [3]=>
- array(2) {
- [0]=>
- int(6)
- [1]=>
- int(7)
- }
- [4]=>
- array(2) {
- [0]=>
- int(8)
- [1]=>
- int(9)
- }
- [5]=>
- array(1) {
- [0]=>
- int(10)
- }
-}
-
-[3]
-array(4) {
- [0]=>
- array(3) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- }
- [1]=>
- array(3) {
- [0]=>
- int(3)
- [1]=>
- int(4)
- [2]=>
- int(5)
- }
- [2]=>
- array(3) {
- [0]=>
- int(6)
- [1]=>
- int(7)
- [2]=>
- int(8)
- }
- [3]=>
- array(2) {
- [0]=>
- int(9)
- [1]=>
- int(10)
- }
-}
-array(4) {
- [0]=>
- array(3) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- }
- [1]=>
- array(3) {
- [3]=>
- int(3)
- [4]=>
- int(4)
- [5]=>
- int(5)
- }
- [2]=>
- array(3) {
- [6]=>
- int(6)
- [7]=>
- int(7)
- [8]=>
- int(8)
- }
- [3]=>
- array(2) {
- [9]=>
- int(9)
- [10]=>
- int(10)
- }
-}
-array(4) {
- [0]=>
- array(3) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- }
- [1]=>
- array(3) {
- [0]=>
- int(3)
- [1]=>
- int(4)
- [2]=>
- int(5)
- }
- [2]=>
- array(3) {
- [0]=>
- int(6)
- [1]=>
- int(7)
- [2]=>
- int(8)
- }
- [3]=>
- array(2) {
- [0]=>
- int(9)
- [1]=>
- int(10)
- }
-}
-
-[4]
-array(3) {
- [0]=>
- array(4) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- }
- [1]=>
- array(4) {
- [0]=>
- int(4)
- [1]=>
- int(5)
- [2]=>
- int(6)
- [3]=>
- int(7)
- }
- [2]=>
- array(3) {
- [0]=>
- int(8)
- [1]=>
- int(9)
- [2]=>
- int(10)
- }
-}
-array(3) {
- [0]=>
- array(4) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- }
- [1]=>
- array(4) {
- [4]=>
- int(4)
- [5]=>
- int(5)
- [6]=>
- int(6)
- [7]=>
- int(7)
- }
- [2]=>
- array(3) {
- [8]=>
- int(8)
- [9]=>
- int(9)
- [10]=>
- int(10)
- }
-}
-array(3) {
- [0]=>
- array(4) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- }
- [1]=>
- array(4) {
- [0]=>
- int(4)
- [1]=>
- int(5)
- [2]=>
- int(6)
- [3]=>
- int(7)
- }
- [2]=>
- array(3) {
- [0]=>
- int(8)
- [1]=>
- int(9)
- [2]=>
- int(10)
- }
-}
-
-[5]
-array(3) {
- [0]=>
- array(5) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- }
- [1]=>
- array(5) {
- [0]=>
- int(5)
- [1]=>
- int(6)
- [2]=>
- int(7)
- [3]=>
- int(8)
- [4]=>
- int(9)
- }
- [2]=>
- array(1) {
- [0]=>
- int(10)
- }
-}
-array(3) {
- [0]=>
- array(5) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- }
- [1]=>
- array(5) {
- [5]=>
- int(5)
- [6]=>
- int(6)
- [7]=>
- int(7)
- [8]=>
- int(8)
- [9]=>
- int(9)
- }
- [2]=>
- array(1) {
- [10]=>
- int(10)
- }
-}
-array(3) {
- [0]=>
- array(5) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- }
- [1]=>
- array(5) {
- [0]=>
- int(5)
- [1]=>
- int(6)
- [2]=>
- int(7)
- [3]=>
- int(8)
- [4]=>
- int(9)
- }
- [2]=>
- array(1) {
- [0]=>
- int(10)
- }
-}
-
-[6]
-array(2) {
- [0]=>
- array(6) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- [5]=>
- int(5)
- }
- [1]=>
- array(5) {
- [0]=>
- int(6)
- [1]=>
- int(7)
- [2]=>
- int(8)
- [3]=>
- int(9)
- [4]=>
- int(10)
- }
-}
-array(2) {
- [0]=>
- array(6) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- [5]=>
- int(5)
- }
- [1]=>
- array(5) {
- [6]=>
- int(6)
- [7]=>
- int(7)
- [8]=>
- int(8)
- [9]=>
- int(9)
- [10]=>
- int(10)
- }
-}
-array(2) {
- [0]=>
- array(6) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- [5]=>
- int(5)
- }
- [1]=>
- array(5) {
- [0]=>
- int(6)
- [1]=>
- int(7)
- [2]=>
- int(8)
- [3]=>
- int(9)
- [4]=>
- int(10)
- }
-}
-
-[7]
-array(2) {
- [0]=>
- array(7) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- [5]=>
- int(5)
- [6]=>
- int(6)
- }
- [1]=>
- array(4) {
- [0]=>
- int(7)
- [1]=>
- int(8)
- [2]=>
- int(9)
- [3]=>
- int(10)
- }
-}
-array(2) {
- [0]=>
- array(7) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- [5]=>
- int(5)
- [6]=>
- int(6)
- }
- [1]=>
- array(4) {
- [7]=>
- int(7)
- [8]=>
- int(8)
- [9]=>
- int(9)
- [10]=>
- int(10)
- }
-}
-array(2) {
- [0]=>
- array(7) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- [5]=>
- int(5)
- [6]=>
- int(6)
- }
- [1]=>
- array(4) {
- [0]=>
- int(7)
- [1]=>
- int(8)
- [2]=>
- int(9)
- [3]=>
- int(10)
- }
-}
-
-[8]
-array(2) {
- [0]=>
- array(8) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- [5]=>
- int(5)
- [6]=>
- int(6)
- [7]=>
- int(7)
- }
- [1]=>
- array(3) {
- [0]=>
- int(8)
- [1]=>
- int(9)
- [2]=>
- int(10)
- }
-}
-array(2) {
- [0]=>
- array(8) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- [5]=>
- int(5)
- [6]=>
- int(6)
- [7]=>
- int(7)
- }
- [1]=>
- array(3) {
- [8]=>
- int(8)
- [9]=>
- int(9)
- [10]=>
- int(10)
- }
-}
-array(2) {
- [0]=>
- array(8) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- [5]=>
- int(5)
- [6]=>
- int(6)
- [7]=>
- int(7)
- }
- [1]=>
- array(3) {
- [0]=>
- int(8)
- [1]=>
- int(9)
- [2]=>
- int(10)
- }
-}
-
-[9]
-array(2) {
- [0]=>
- array(9) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- [5]=>
- int(5)
- [6]=>
- int(6)
- [7]=>
- int(7)
- [8]=>
- int(8)
- }
- [1]=>
- array(2) {
- [0]=>
- int(9)
- [1]=>
- int(10)
- }
-}
-array(2) {
- [0]=>
- array(9) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- [5]=>
- int(5)
- [6]=>
- int(6)
- [7]=>
- int(7)
- [8]=>
- int(8)
- }
- [1]=>
- array(2) {
- [9]=>
- int(9)
- [10]=>
- int(10)
- }
-}
-array(2) {
- [0]=>
- array(9) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- [5]=>
- int(5)
- [6]=>
- int(6)
- [7]=>
- int(7)
- [8]=>
- int(8)
- }
- [1]=>
- array(2) {
- [0]=>
- int(9)
- [1]=>
- int(10)
- }
-}
-
-[10]
-array(2) {
- [0]=>
- array(10) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- [5]=>
- int(5)
- [6]=>
- int(6)
- [7]=>
- int(7)
- [8]=>
- int(8)
- [9]=>
- int(9)
- }
- [1]=>
- array(1) {
- [0]=>
- int(10)
- }
-}
-array(2) {
- [0]=>
- array(10) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- [5]=>
- int(5)
- [6]=>
- int(6)
- [7]=>
- int(7)
- [8]=>
- int(8)
- [9]=>
- int(9)
- }
- [1]=>
- array(1) {
- [10]=>
- int(10)
- }
-}
-array(2) {
- [0]=>
- array(10) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- [5]=>
- int(5)
- [6]=>
- int(6)
- [7]=>
- int(7)
- [8]=>
- int(8)
- [9]=>
- int(9)
- }
- [1]=>
- array(1) {
- [0]=>
- int(10)
- }
-}
-
-[11]
-array(1) {
- [0]=>
- array(11) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- [5]=>
- int(5)
- [6]=>
- int(6)
- [7]=>
- int(7)
- [8]=>
- int(8)
- [9]=>
- int(9)
- [10]=>
- int(10)
- }
-}
-array(1) {
- [0]=>
- array(11) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- [5]=>
- int(5)
- [6]=>
- int(6)
- [7]=>
- int(7)
- [8]=>
- int(8)
- [9]=>
- int(9)
- [10]=>
- int(10)
- }
-}
-array(1) {
- [0]=>
- array(11) {
- [0]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [3]=>
- int(3)
- [4]=>
- int(4)
- [5]=>
- int(5)
- [6]=>
- int(6)
- [7]=>
- int(7)
- [8]=>
- int(8)
- [9]=>
- int(9)
- [10]=>
- int(10)
- }
-}
-
-
-===========================================
-array(1) {
- ["a"]=>
- int(1)
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
-}
-array(1) {
- [0]=>
- array(1) {
- ["a"]=>
- int(1)
- }
-}
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
-}
-
-
-===========================================
-array(2) {
- ["b"]=>
- int(1)
- ["c"]=>
- int(2)
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(2) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
-}
-array(2) {
- [0]=>
- array(1) {
- ["b"]=>
- int(1)
- }
- [1]=>
- array(1) {
- ["c"]=>
- int(2)
- }
-}
-array(2) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
-}
-
-[2]
-array(1) {
- [0]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
-}
-array(1) {
- [0]=>
- array(2) {
- ["b"]=>
- int(1)
- ["c"]=>
- int(2)
- }
-}
-array(1) {
- [0]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
-}
-
-
-===========================================
-array(6) {
- ["p"]=>
- int(1)
- ["q"]=>
- int(2)
- ["r"]=>
- int(3)
- ["s"]=>
- int(4)
- ["u"]=>
- int(5)
- ["v"]=>
- int(6)
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(6) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
- [2]=>
- array(1) {
- [0]=>
- int(3)
- }
- [3]=>
- array(1) {
- [0]=>
- int(4)
- }
- [4]=>
- array(1) {
- [0]=>
- int(5)
- }
- [5]=>
- array(1) {
- [0]=>
- int(6)
- }
-}
-array(6) {
- [0]=>
- array(1) {
- ["p"]=>
- int(1)
- }
- [1]=>
- array(1) {
- ["q"]=>
- int(2)
- }
- [2]=>
- array(1) {
- ["r"]=>
- int(3)
- }
- [3]=>
- array(1) {
- ["s"]=>
- int(4)
- }
- [4]=>
- array(1) {
- ["u"]=>
- int(5)
- }
- [5]=>
- array(1) {
- ["v"]=>
- int(6)
- }
-}
-array(6) {
- [0]=>
- array(1) {
- [0]=>
- int(1)
- }
- [1]=>
- array(1) {
- [0]=>
- int(2)
- }
- [2]=>
- array(1) {
- [0]=>
- int(3)
- }
- [3]=>
- array(1) {
- [0]=>
- int(4)
- }
- [4]=>
- array(1) {
- [0]=>
- int(5)
- }
- [5]=>
- array(1) {
- [0]=>
- int(6)
- }
-}
-
-[2]
-array(3) {
- [0]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
- [1]=>
- array(2) {
- [0]=>
- int(3)
- [1]=>
- int(4)
- }
- [2]=>
- array(2) {
- [0]=>
- int(5)
- [1]=>
- int(6)
- }
-}
-array(3) {
- [0]=>
- array(2) {
- ["p"]=>
- int(1)
- ["q"]=>
- int(2)
- }
- [1]=>
- array(2) {
- ["r"]=>
- int(3)
- ["s"]=>
- int(4)
- }
- [2]=>
- array(2) {
- ["u"]=>
- int(5)
- ["v"]=>
- int(6)
- }
-}
-array(3) {
- [0]=>
- array(2) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- }
- [1]=>
- array(2) {
- [0]=>
- int(3)
- [1]=>
- int(4)
- }
- [2]=>
- array(2) {
- [0]=>
- int(5)
- [1]=>
- int(6)
- }
-}
-
-[3]
-array(2) {
- [0]=>
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- }
- [1]=>
- array(3) {
- [0]=>
- int(4)
- [1]=>
- int(5)
- [2]=>
- int(6)
- }
-}
-array(2) {
- [0]=>
- array(3) {
- ["p"]=>
- int(1)
- ["q"]=>
- int(2)
- ["r"]=>
- int(3)
- }
- [1]=>
- array(3) {
- ["s"]=>
- int(4)
- ["u"]=>
- int(5)
- ["v"]=>
- int(6)
- }
-}
-array(2) {
- [0]=>
- array(3) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- }
- [1]=>
- array(3) {
- [0]=>
- int(4)
- [1]=>
- int(5)
- [2]=>
- int(6)
- }
-}
-
-[4]
-array(2) {
- [0]=>
- array(4) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- }
- [1]=>
- array(2) {
- [0]=>
- int(5)
- [1]=>
- int(6)
- }
-}
-array(2) {
- [0]=>
- array(4) {
- ["p"]=>
- int(1)
- ["q"]=>
- int(2)
- ["r"]=>
- int(3)
- ["s"]=>
- int(4)
- }
- [1]=>
- array(2) {
- ["u"]=>
- int(5)
- ["v"]=>
- int(6)
- }
-}
-array(2) {
- [0]=>
- array(4) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- }
- [1]=>
- array(2) {
- [0]=>
- int(5)
- [1]=>
- int(6)
- }
-}
-
-[5]
-array(2) {
- [0]=>
- array(5) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- }
- [1]=>
- array(1) {
- [0]=>
- int(6)
- }
-}
-array(2) {
- [0]=>
- array(5) {
- ["p"]=>
- int(1)
- ["q"]=>
- int(2)
- ["r"]=>
- int(3)
- ["s"]=>
- int(4)
- ["u"]=>
- int(5)
- }
- [1]=>
- array(1) {
- ["v"]=>
- int(6)
- }
-}
-array(2) {
- [0]=>
- array(5) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- }
- [1]=>
- array(1) {
- [0]=>
- int(6)
- }
-}
-
-[6]
-array(1) {
- [0]=>
- array(6) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- }
-}
-array(1) {
- [0]=>
- array(6) {
- ["p"]=>
- int(1)
- ["q"]=>
- int(2)
- ["r"]=>
- int(3)
- ["s"]=>
- int(4)
- ["u"]=>
- int(5)
- ["v"]=>
- int(6)
- }
-}
-array(1) {
- [0]=>
- array(6) {
- [0]=>
- int(1)
- [1]=>
- int(2)
- [2]=>
- int(3)
- [3]=>
- int(4)
- [4]=>
- int(5)
- [5]=>
- int(6)
- }
-}
-
-
-===========================================
-array(1) {
- ["a"]=>
- string(1) "A"
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- string(1) "A"
- }
-}
-array(1) {
- [0]=>
- array(1) {
- ["a"]=>
- string(1) "A"
- }
-}
-array(1) {
- [0]=>
- array(1) {
- [0]=>
- string(1) "A"
- }
-}
-
-
-===========================================
-array(6) {
- ["p"]=>
- string(1) "A"
- ["q"]=>
- string(1) "B"
- ["r"]=>
- string(1) "C"
- ["s"]=>
- string(1) "D"
- ["u"]=>
- string(1) "E"
- ["v"]=>
- string(1) "F"
-}
--------------------------------------------
-[0]
-NULL
-NULL
-NULL
-
-[1]
-array(6) {
- [0]=>
- array(1) {
- [0]=>
- string(1) "A"
- }
- [1]=>
- array(1) {
- [0]=>
- string(1) "B"
- }
- [2]=>
- array(1) {
- [0]=>
- string(1) "C"
- }
- [3]=>
- array(1) {
- [0]=>
- string(1) "D"
- }
- [4]=>
- array(1) {
- [0]=>
- string(1) "E"
- }
- [5]=>
- array(1) {
- [0]=>
- string(1) "F"
- }
-}
-array(6) {
- [0]=>
- array(1) {
- ["p"]=>
- string(1) "A"
- }
- [1]=>
- array(1) {
- ["q"]=>
- string(1) "B"
- }
- [2]=>
- array(1) {
- ["r"]=>
- string(1) "C"
- }
- [3]=>
- array(1) {
- ["s"]=>
- string(1) "D"
- }
- [4]=>
- array(1) {
- ["u"]=>
- string(1) "E"
- }
- [5]=>
- array(1) {
- ["v"]=>
- string(1) "F"
- }
-}
-array(6) {
- [0]=>
- array(1) {
- [0]=>
- string(1) "A"
- }
- [1]=>
- array(1) {
- [0]=>
- string(1) "B"
- }
- [2]=>
- array(1) {
- [0]=>
- string(1) "C"
- }
- [3]=>
- array(1) {
- [0]=>
- string(1) "D"
- }
- [4]=>
- array(1) {
- [0]=>
- string(1) "E"
- }
- [5]=>
- array(1) {
- [0]=>
- string(1) "F"
- }
-}
-
-[2]
-array(3) {
- [0]=>
- array(2) {
- [0]=>
- string(1) "A"
- [1]=>
- string(1) "B"
- }
- [1]=>
- array(2) {
- [0]=>
- string(1) "C"
- [1]=>
- string(1) "D"
- }
- [2]=>
- array(2) {
- [0]=>
- string(1) "E"
- [1]=>
- string(1) "F"
- }
-}
-array(3) {
- [0]=>
- array(2) {
- ["p"]=>
- string(1) "A"
- ["q"]=>
- string(1) "B"
- }
- [1]=>
- array(2) {
- ["r"]=>
- string(1) "C"
- ["s"]=>
- string(1) "D"
- }
- [2]=>
- array(2) {
- ["u"]=>
- string(1) "E"
- ["v"]=>
- string(1) "F"
- }
-}
-array(3) {
- [0]=>
- array(2) {
- [0]=>
- string(1) "A"
- [1]=>
- string(1) "B"
- }
- [1]=>
- array(2) {
- [0]=>
- string(1) "C"
- [1]=>
- string(1) "D"
- }
- [2]=>
- array(2) {
- [0]=>
- string(1) "E"
- [1]=>
- string(1) "F"
- }
-}
-
-[3]
-array(2) {
- [0]=>
- array(3) {
- [0]=>
- string(1) "A"
- [1]=>
- string(1) "B"
- [2]=>
- string(1) "C"
- }
- [1]=>
- array(3) {
- [0]=>
- string(1) "D"
- [1]=>
- string(1) "E"
- [2]=>
- string(1) "F"
- }
-}
-array(2) {
- [0]=>
- array(3) {
- ["p"]=>
- string(1) "A"
- ["q"]=>
- string(1) "B"
- ["r"]=>
- string(1) "C"
- }
- [1]=>
- array(3) {
- ["s"]=>
- string(1) "D"
- ["u"]=>
- string(1) "E"
- ["v"]=>
- string(1) "F"
- }
-}
-array(2) {
- [0]=>
- array(3) {
- [0]=>
- string(1) "A"
- [1]=>
- string(1) "B"
- [2]=>
- string(1) "C"
- }
- [1]=>
- array(3) {
- [0]=>
- string(1) "D"
- [1]=>
- string(1) "E"
- [2]=>
- string(1) "F"
- }
-}
-
-[4]
-array(2) {
- [0]=>
- array(4) {
- [0]=>
- string(1) "A"
- [1]=>
- string(1) "B"
- [2]=>
- string(1) "C"
- [3]=>
- string(1) "D"
- }
- [1]=>
- array(2) {
- [0]=>
- string(1) "E"
- [1]=>
- string(1) "F"
- }
-}
-array(2) {
- [0]=>
- array(4) {
- ["p"]=>
- string(1) "A"
- ["q"]=>
- string(1) "B"
- ["r"]=>
- string(1) "C"
- ["s"]=>
- string(1) "D"
- }
- [1]=>
- array(2) {
- ["u"]=>
- string(1) "E"
- ["v"]=>
- string(1) "F"
- }
-}
-array(2) {
- [0]=>
- array(4) {
- [0]=>
- string(1) "A"
- [1]=>
- string(1) "B"
- [2]=>
- string(1) "C"
- [3]=>
- string(1) "D"
- }
- [1]=>
- array(2) {
- [0]=>
- string(1) "E"
- [1]=>
- string(1) "F"
- }
-}
-
-[5]
-array(2) {
- [0]=>
- array(5) {
- [0]=>
- string(1) "A"
- [1]=>
- string(1) "B"
- [2]=>
- string(1) "C"
- [3]=>
- string(1) "D"
- [4]=>
- string(1) "E"
- }
- [1]=>
- array(1) {
- [0]=>
- string(1) "F"
- }
-}
-array(2) {
- [0]=>
- array(5) {
- ["p"]=>
- string(1) "A"
- ["q"]=>
- string(1) "B"
- ["r"]=>
- string(1) "C"
- ["s"]=>
- string(1) "D"
- ["u"]=>
- string(1) "E"
- }
- [1]=>
- array(1) {
- ["v"]=>
- string(1) "F"
- }
-}
-array(2) {
- [0]=>
- array(5) {
- [0]=>
- string(1) "A"
- [1]=>
- string(1) "B"
- [2]=>
- string(1) "C"
- [3]=>
- string(1) "D"
- [4]=>
- string(1) "E"
- }
- [1]=>
- array(1) {
- [0]=>
- string(1) "F"
- }
-}
-
-[6]
-array(1) {
- [0]=>
- array(6) {
- [0]=>
- string(1) "A"
- [1]=>
- string(1) "B"
- [2]=>
- string(1) "C"
- [3]=>
- string(1) "D"
- [4]=>
- string(1) "E"
- [5]=>
- string(1) "F"
- }
-}
-array(1) {
- [0]=>
- array(6) {
- ["p"]=>
- string(1) "A"
- ["q"]=>
- string(1) "B"
- ["r"]=>
- string(1) "C"
- ["s"]=>
- string(1) "D"
- ["u"]=>
- string(1) "E"
- ["v"]=>
- string(1) "F"
- }
-}
-array(1) {
- [0]=>
- array(6) {
- [0]=>
- string(1) "A"
- [1]=>
- string(1) "B"
- [2]=>
- string(1) "C"
- [3]=>
- string(1) "D"
- [4]=>
- string(1) "E"
- [5]=>
- string(1) "F"
- }
-}
-
-
-end
diff --git a/ext/standard/tests/array/array_chunk_variation10.phpt b/ext/standard/tests/array/array_chunk_variation10.phpt
new file mode 100644
index 000000000..7b4bee172
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation10.phpt
@@ -0,0 +1,159 @@
+--TEST--
+array_chunk() - variation 10
+--FILE--
+<?php
+$array = array (1 => 1, 2 => 2, 3 => 3);
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(3) {
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(3) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+}
+array(3) {
+ [0]=>
+ array(1) {
+ [1]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [2]=>
+ int(2)
+ }
+ [2]=>
+ array(1) {
+ [3]=>
+ int(3)
+ }
+}
+array(3) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+}
+
+[2]
+array(2) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+}
+array(2) {
+ [0]=>
+ array(2) {
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ }
+ [1]=>
+ array(1) {
+ [3]=>
+ int(3)
+ }
+}
+array(2) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+}
+
+[3]
+array(1) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ }
+}
+array(1) {
+ [0]=>
+ array(3) {
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ }
+}
+array(1) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation11.phpt b/ext/standard/tests/array/array_chunk_variation11.phpt
new file mode 100644
index 000000000..dca366652
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation11.phpt
@@ -0,0 +1,93 @@
+--TEST--
+array_chunk() - variation 11
+--FILE--
+<?php
+$array = array (0 => 0, 3 => 2);
+
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(2) {
+ [0]=>
+ int(0)
+ [3]=>
+ int(2)
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(2) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+}
+array(2) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+ [1]=>
+ array(1) {
+ [3]=>
+ int(2)
+ }
+}
+array(2) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+}
+
+[2]
+array(1) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(2)
+ }
+}
+array(1) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(0)
+ [3]=>
+ int(2)
+ }
+}
+array(1) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(2)
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation12.phpt b/ext/standard/tests/array/array_chunk_variation12.phpt
new file mode 100644
index 000000000..3b87dbab9
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation12.phpt
@@ -0,0 +1,159 @@
+--TEST--
+array_chunk() - variation 12
+--FILE--
+<?php
+$array = array (1 => 1, 5 => 2, 8 => 3);
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(3) {
+ [1]=>
+ int(1)
+ [5]=>
+ int(2)
+ [8]=>
+ int(3)
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(3) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+}
+array(3) {
+ [0]=>
+ array(1) {
+ [1]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [5]=>
+ int(2)
+ }
+ [2]=>
+ array(1) {
+ [8]=>
+ int(3)
+ }
+}
+array(3) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+}
+
+[2]
+array(2) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+}
+array(2) {
+ [0]=>
+ array(2) {
+ [1]=>
+ int(1)
+ [5]=>
+ int(2)
+ }
+ [1]=>
+ array(1) {
+ [8]=>
+ int(3)
+ }
+}
+array(2) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+}
+
+[3]
+array(1) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ }
+}
+array(1) {
+ [0]=>
+ array(3) {
+ [1]=>
+ int(1)
+ [5]=>
+ int(2)
+ [8]=>
+ int(3)
+ }
+}
+array(1) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation13.phpt b/ext/standard/tests/array/array_chunk_variation13.phpt
new file mode 100644
index 000000000..f6369df1c
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation13.phpt
@@ -0,0 +1,92 @@
+--TEST--
+array_chunk() - variation 13
+--FILE--
+<?php
+$array = array (1, 2);
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(2) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+}
+array(2) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [1]=>
+ int(2)
+ }
+}
+array(2) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+}
+
+[2]
+array(1) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ }
+}
+array(1) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ }
+}
+array(1) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation14.phpt b/ext/standard/tests/array/array_chunk_variation14.phpt
new file mode 100644
index 000000000..f8d1b1179
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation14.phpt
@@ -0,0 +1,159 @@
+--TEST--
+array_chunk() - variation 14
+--FILE--
+<?php
+$array = array (0, 1, 2);
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(3) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(3) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+}
+array(3) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+ [1]=>
+ array(1) {
+ [1]=>
+ int(1)
+ }
+ [2]=>
+ array(1) {
+ [2]=>
+ int(2)
+ }
+}
+array(3) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+}
+
+[2]
+array(2) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+}
+array(2) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [2]=>
+ int(2)
+ }
+}
+array(2) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+}
+
+[3]
+array(1) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ }
+}
+array(1) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ }
+}
+array(1) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation15.phpt b/ext/standard/tests/array/array_chunk_variation15.phpt
new file mode 100644
index 000000000..abec754a3
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation15.phpt
@@ -0,0 +1,159 @@
+--TEST--
+array_chunk() - variation 15
+--FILE--
+<?php
+$array = array (1, 2, 3);
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(3) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+}
+array(3) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [1]=>
+ int(2)
+ }
+ [2]=>
+ array(1) {
+ [2]=>
+ int(3)
+ }
+}
+array(3) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+}
+
+[2]
+array(2) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+}
+array(2) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ }
+ [1]=>
+ array(1) {
+ [2]=>
+ int(3)
+ }
+}
+array(2) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+}
+
+[3]
+array(1) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ }
+}
+array(1) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ }
+}
+array(1) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation16.phpt b/ext/standard/tests/array/array_chunk_variation16.phpt
new file mode 100644
index 000000000..18179c8b0
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation16.phpt
@@ -0,0 +1,238 @@
+--TEST--
+array_chunk() - variation 16
+--FILE--
+<?php
+$array = array (0, 1, 2, 3);
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(4) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(4) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+ [3]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+}
+array(4) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+ [1]=>
+ array(1) {
+ [1]=>
+ int(1)
+ }
+ [2]=>
+ array(1) {
+ [2]=>
+ int(2)
+ }
+ [3]=>
+ array(1) {
+ [3]=>
+ int(3)
+ }
+}
+array(4) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+ [3]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+}
+
+[2]
+array(2) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ int(2)
+ [1]=>
+ int(3)
+ }
+}
+array(2) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ }
+ [1]=>
+ array(2) {
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ }
+}
+array(2) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ int(2)
+ [1]=>
+ int(3)
+ }
+}
+
+[3]
+array(2) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+}
+array(2) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ }
+ [1]=>
+ array(1) {
+ [3]=>
+ int(3)
+ }
+}
+array(2) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+}
+
+[4]
+array(1) {
+ [0]=>
+ array(4) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ }
+}
+array(1) {
+ [0]=>
+ array(4) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ }
+}
+array(1) {
+ [0]=>
+ array(4) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation17.phpt b/ext/standard/tests/array/array_chunk_variation17.phpt
new file mode 100644
index 000000000..27507ea8c
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation17.phpt
@@ -0,0 +1,238 @@
+--TEST--
+array_chunk() - variation 17
+--FILE--
+<?php
+$array = array (1, 2, 3, 4);
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(4) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(4) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+ [3]=>
+ array(1) {
+ [0]=>
+ int(4)
+ }
+}
+array(4) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [1]=>
+ int(2)
+ }
+ [2]=>
+ array(1) {
+ [2]=>
+ int(3)
+ }
+ [3]=>
+ array(1) {
+ [3]=>
+ int(4)
+ }
+}
+array(4) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+ [3]=>
+ array(1) {
+ [0]=>
+ int(4)
+ }
+}
+
+[2]
+array(2) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ int(3)
+ [1]=>
+ int(4)
+ }
+}
+array(2) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ }
+ [1]=>
+ array(2) {
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ }
+}
+array(2) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ int(3)
+ [1]=>
+ int(4)
+ }
+}
+
+[3]
+array(2) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(4)
+ }
+}
+array(2) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ }
+ [1]=>
+ array(1) {
+ [3]=>
+ int(4)
+ }
+}
+array(2) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(4)
+ }
+}
+
+[4]
+array(1) {
+ [0]=>
+ array(4) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ }
+}
+array(1) {
+ [0]=>
+ array(4) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ }
+}
+array(1) {
+ [0]=>
+ array(4) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation18.phpt b/ext/standard/tests/array/array_chunk_variation18.phpt
new file mode 100644
index 000000000..7f0946f49
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation18.phpt
@@ -0,0 +1,338 @@
+--TEST--
+array_chunk() - variation 18
+--FILE--
+<?php
+$array = array (0, 1, 2, 3, 4);
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(5) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(5) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+ [3]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+ [4]=>
+ array(1) {
+ [0]=>
+ int(4)
+ }
+}
+array(5) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+ [1]=>
+ array(1) {
+ [1]=>
+ int(1)
+ }
+ [2]=>
+ array(1) {
+ [2]=>
+ int(2)
+ }
+ [3]=>
+ array(1) {
+ [3]=>
+ int(3)
+ }
+ [4]=>
+ array(1) {
+ [4]=>
+ int(4)
+ }
+}
+array(5) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+ [3]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+ [4]=>
+ array(1) {
+ [0]=>
+ int(4)
+ }
+}
+
+[2]
+array(3) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ int(2)
+ [1]=>
+ int(3)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(4)
+ }
+}
+array(3) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ }
+ [1]=>
+ array(2) {
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ }
+ [2]=>
+ array(1) {
+ [4]=>
+ int(4)
+ }
+}
+array(3) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ int(2)
+ [1]=>
+ int(3)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(4)
+ }
+}
+
+[3]
+array(2) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ int(3)
+ [1]=>
+ int(4)
+ }
+}
+array(2) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ }
+ [1]=>
+ array(2) {
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ }
+}
+array(2) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ int(3)
+ [1]=>
+ int(4)
+ }
+}
+
+[4]
+array(2) {
+ [0]=>
+ array(4) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(4)
+ }
+}
+array(2) {
+ [0]=>
+ array(4) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ }
+ [1]=>
+ array(1) {
+ [4]=>
+ int(4)
+ }
+}
+array(2) {
+ [0]=>
+ array(4) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(4)
+ }
+}
+
+[5]
+array(1) {
+ [0]=>
+ array(5) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ }
+}
+array(1) {
+ [0]=>
+ array(5) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ }
+}
+array(1) {
+ [0]=>
+ array(5) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation19.phpt b/ext/standard/tests/array/array_chunk_variation19.phpt
new file mode 100644
index 000000000..d51389c9f
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation19.phpt
@@ -0,0 +1,1018 @@
+--TEST--
+array_chunk() - variation 19
+--FILE--
+<?php
+$array = array (1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(10) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ [6]=>
+ int(7)
+ [7]=>
+ int(8)
+ [8]=>
+ int(9)
+ [9]=>
+ int(10)
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(10) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+ [3]=>
+ array(1) {
+ [0]=>
+ int(4)
+ }
+ [4]=>
+ array(1) {
+ [0]=>
+ int(5)
+ }
+ [5]=>
+ array(1) {
+ [0]=>
+ int(6)
+ }
+ [6]=>
+ array(1) {
+ [0]=>
+ int(7)
+ }
+ [7]=>
+ array(1) {
+ [0]=>
+ int(8)
+ }
+ [8]=>
+ array(1) {
+ [0]=>
+ int(9)
+ }
+ [9]=>
+ array(1) {
+ [0]=>
+ int(10)
+ }
+}
+array(10) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [1]=>
+ int(2)
+ }
+ [2]=>
+ array(1) {
+ [2]=>
+ int(3)
+ }
+ [3]=>
+ array(1) {
+ [3]=>
+ int(4)
+ }
+ [4]=>
+ array(1) {
+ [4]=>
+ int(5)
+ }
+ [5]=>
+ array(1) {
+ [5]=>
+ int(6)
+ }
+ [6]=>
+ array(1) {
+ [6]=>
+ int(7)
+ }
+ [7]=>
+ array(1) {
+ [7]=>
+ int(8)
+ }
+ [8]=>
+ array(1) {
+ [8]=>
+ int(9)
+ }
+ [9]=>
+ array(1) {
+ [9]=>
+ int(10)
+ }
+}
+array(10) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+ [3]=>
+ array(1) {
+ [0]=>
+ int(4)
+ }
+ [4]=>
+ array(1) {
+ [0]=>
+ int(5)
+ }
+ [5]=>
+ array(1) {
+ [0]=>
+ int(6)
+ }
+ [6]=>
+ array(1) {
+ [0]=>
+ int(7)
+ }
+ [7]=>
+ array(1) {
+ [0]=>
+ int(8)
+ }
+ [8]=>
+ array(1) {
+ [0]=>
+ int(9)
+ }
+ [9]=>
+ array(1) {
+ [0]=>
+ int(10)
+ }
+}
+
+[2]
+array(5) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ int(3)
+ [1]=>
+ int(4)
+ }
+ [2]=>
+ array(2) {
+ [0]=>
+ int(5)
+ [1]=>
+ int(6)
+ }
+ [3]=>
+ array(2) {
+ [0]=>
+ int(7)
+ [1]=>
+ int(8)
+ }
+ [4]=>
+ array(2) {
+ [0]=>
+ int(9)
+ [1]=>
+ int(10)
+ }
+}
+array(5) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ }
+ [1]=>
+ array(2) {
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ }
+ [2]=>
+ array(2) {
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ }
+ [3]=>
+ array(2) {
+ [6]=>
+ int(7)
+ [7]=>
+ int(8)
+ }
+ [4]=>
+ array(2) {
+ [8]=>
+ int(9)
+ [9]=>
+ int(10)
+ }
+}
+array(5) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ int(3)
+ [1]=>
+ int(4)
+ }
+ [2]=>
+ array(2) {
+ [0]=>
+ int(5)
+ [1]=>
+ int(6)
+ }
+ [3]=>
+ array(2) {
+ [0]=>
+ int(7)
+ [1]=>
+ int(8)
+ }
+ [4]=>
+ array(2) {
+ [0]=>
+ int(9)
+ [1]=>
+ int(10)
+ }
+}
+
+[3]
+array(4) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ }
+ [1]=>
+ array(3) {
+ [0]=>
+ int(4)
+ [1]=>
+ int(5)
+ [2]=>
+ int(6)
+ }
+ [2]=>
+ array(3) {
+ [0]=>
+ int(7)
+ [1]=>
+ int(8)
+ [2]=>
+ int(9)
+ }
+ [3]=>
+ array(1) {
+ [0]=>
+ int(10)
+ }
+}
+array(4) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ }
+ [1]=>
+ array(3) {
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ }
+ [2]=>
+ array(3) {
+ [6]=>
+ int(7)
+ [7]=>
+ int(8)
+ [8]=>
+ int(9)
+ }
+ [3]=>
+ array(1) {
+ [9]=>
+ int(10)
+ }
+}
+array(4) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ }
+ [1]=>
+ array(3) {
+ [0]=>
+ int(4)
+ [1]=>
+ int(5)
+ [2]=>
+ int(6)
+ }
+ [2]=>
+ array(3) {
+ [0]=>
+ int(7)
+ [1]=>
+ int(8)
+ [2]=>
+ int(9)
+ }
+ [3]=>
+ array(1) {
+ [0]=>
+ int(10)
+ }
+}
+
+[4]
+array(3) {
+ [0]=>
+ array(4) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ }
+ [1]=>
+ array(4) {
+ [0]=>
+ int(5)
+ [1]=>
+ int(6)
+ [2]=>
+ int(7)
+ [3]=>
+ int(8)
+ }
+ [2]=>
+ array(2) {
+ [0]=>
+ int(9)
+ [1]=>
+ int(10)
+ }
+}
+array(3) {
+ [0]=>
+ array(4) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ }
+ [1]=>
+ array(4) {
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ [6]=>
+ int(7)
+ [7]=>
+ int(8)
+ }
+ [2]=>
+ array(2) {
+ [8]=>
+ int(9)
+ [9]=>
+ int(10)
+ }
+}
+array(3) {
+ [0]=>
+ array(4) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ }
+ [1]=>
+ array(4) {
+ [0]=>
+ int(5)
+ [1]=>
+ int(6)
+ [2]=>
+ int(7)
+ [3]=>
+ int(8)
+ }
+ [2]=>
+ array(2) {
+ [0]=>
+ int(9)
+ [1]=>
+ int(10)
+ }
+}
+
+[5]
+array(2) {
+ [0]=>
+ array(5) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ }
+ [1]=>
+ array(5) {
+ [0]=>
+ int(6)
+ [1]=>
+ int(7)
+ [2]=>
+ int(8)
+ [3]=>
+ int(9)
+ [4]=>
+ int(10)
+ }
+}
+array(2) {
+ [0]=>
+ array(5) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ }
+ [1]=>
+ array(5) {
+ [5]=>
+ int(6)
+ [6]=>
+ int(7)
+ [7]=>
+ int(8)
+ [8]=>
+ int(9)
+ [9]=>
+ int(10)
+ }
+}
+array(2) {
+ [0]=>
+ array(5) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ }
+ [1]=>
+ array(5) {
+ [0]=>
+ int(6)
+ [1]=>
+ int(7)
+ [2]=>
+ int(8)
+ [3]=>
+ int(9)
+ [4]=>
+ int(10)
+ }
+}
+
+[6]
+array(2) {
+ [0]=>
+ array(6) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ }
+ [1]=>
+ array(4) {
+ [0]=>
+ int(7)
+ [1]=>
+ int(8)
+ [2]=>
+ int(9)
+ [3]=>
+ int(10)
+ }
+}
+array(2) {
+ [0]=>
+ array(6) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ }
+ [1]=>
+ array(4) {
+ [6]=>
+ int(7)
+ [7]=>
+ int(8)
+ [8]=>
+ int(9)
+ [9]=>
+ int(10)
+ }
+}
+array(2) {
+ [0]=>
+ array(6) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ }
+ [1]=>
+ array(4) {
+ [0]=>
+ int(7)
+ [1]=>
+ int(8)
+ [2]=>
+ int(9)
+ [3]=>
+ int(10)
+ }
+}
+
+[7]
+array(2) {
+ [0]=>
+ array(7) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ [6]=>
+ int(7)
+ }
+ [1]=>
+ array(3) {
+ [0]=>
+ int(8)
+ [1]=>
+ int(9)
+ [2]=>
+ int(10)
+ }
+}
+array(2) {
+ [0]=>
+ array(7) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ [6]=>
+ int(7)
+ }
+ [1]=>
+ array(3) {
+ [7]=>
+ int(8)
+ [8]=>
+ int(9)
+ [9]=>
+ int(10)
+ }
+}
+array(2) {
+ [0]=>
+ array(7) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ [6]=>
+ int(7)
+ }
+ [1]=>
+ array(3) {
+ [0]=>
+ int(8)
+ [1]=>
+ int(9)
+ [2]=>
+ int(10)
+ }
+}
+
+[8]
+array(2) {
+ [0]=>
+ array(8) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ [6]=>
+ int(7)
+ [7]=>
+ int(8)
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ int(9)
+ [1]=>
+ int(10)
+ }
+}
+array(2) {
+ [0]=>
+ array(8) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ [6]=>
+ int(7)
+ [7]=>
+ int(8)
+ }
+ [1]=>
+ array(2) {
+ [8]=>
+ int(9)
+ [9]=>
+ int(10)
+ }
+}
+array(2) {
+ [0]=>
+ array(8) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ [6]=>
+ int(7)
+ [7]=>
+ int(8)
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ int(9)
+ [1]=>
+ int(10)
+ }
+}
+
+[9]
+array(2) {
+ [0]=>
+ array(9) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ [6]=>
+ int(7)
+ [7]=>
+ int(8)
+ [8]=>
+ int(9)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(10)
+ }
+}
+array(2) {
+ [0]=>
+ array(9) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ [6]=>
+ int(7)
+ [7]=>
+ int(8)
+ [8]=>
+ int(9)
+ }
+ [1]=>
+ array(1) {
+ [9]=>
+ int(10)
+ }
+}
+array(2) {
+ [0]=>
+ array(9) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ [6]=>
+ int(7)
+ [7]=>
+ int(8)
+ [8]=>
+ int(9)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(10)
+ }
+}
+
+[10]
+array(1) {
+ [0]=>
+ array(10) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ [6]=>
+ int(7)
+ [7]=>
+ int(8)
+ [8]=>
+ int(9)
+ [9]=>
+ int(10)
+ }
+}
+array(1) {
+ [0]=>
+ array(10) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ [6]=>
+ int(7)
+ [7]=>
+ int(8)
+ [8]=>
+ int(9)
+ [9]=>
+ int(10)
+ }
+}
+array(1) {
+ [0]=>
+ array(10) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ [6]=>
+ int(7)
+ [7]=>
+ int(8)
+ [8]=>
+ int(9)
+ [9]=>
+ int(10)
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation20.phpt b/ext/standard/tests/array/array_chunk_variation20.phpt
new file mode 100644
index 000000000..cd5314ff0
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation20.phpt
@@ -0,0 +1,1199 @@
+--TEST--
+array_chunk() - variation 20
+--FILE--
+<?php
+$array = array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(11) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ [5]=>
+ int(5)
+ [6]=>
+ int(6)
+ [7]=>
+ int(7)
+ [8]=>
+ int(8)
+ [9]=>
+ int(9)
+ [10]=>
+ int(10)
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(11) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+ [3]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+ [4]=>
+ array(1) {
+ [0]=>
+ int(4)
+ }
+ [5]=>
+ array(1) {
+ [0]=>
+ int(5)
+ }
+ [6]=>
+ array(1) {
+ [0]=>
+ int(6)
+ }
+ [7]=>
+ array(1) {
+ [0]=>
+ int(7)
+ }
+ [8]=>
+ array(1) {
+ [0]=>
+ int(8)
+ }
+ [9]=>
+ array(1) {
+ [0]=>
+ int(9)
+ }
+ [10]=>
+ array(1) {
+ [0]=>
+ int(10)
+ }
+}
+array(11) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+ [1]=>
+ array(1) {
+ [1]=>
+ int(1)
+ }
+ [2]=>
+ array(1) {
+ [2]=>
+ int(2)
+ }
+ [3]=>
+ array(1) {
+ [3]=>
+ int(3)
+ }
+ [4]=>
+ array(1) {
+ [4]=>
+ int(4)
+ }
+ [5]=>
+ array(1) {
+ [5]=>
+ int(5)
+ }
+ [6]=>
+ array(1) {
+ [6]=>
+ int(6)
+ }
+ [7]=>
+ array(1) {
+ [7]=>
+ int(7)
+ }
+ [8]=>
+ array(1) {
+ [8]=>
+ int(8)
+ }
+ [9]=>
+ array(1) {
+ [9]=>
+ int(9)
+ }
+ [10]=>
+ array(1) {
+ [10]=>
+ int(10)
+ }
+}
+array(11) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+ [3]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+ [4]=>
+ array(1) {
+ [0]=>
+ int(4)
+ }
+ [5]=>
+ array(1) {
+ [0]=>
+ int(5)
+ }
+ [6]=>
+ array(1) {
+ [0]=>
+ int(6)
+ }
+ [7]=>
+ array(1) {
+ [0]=>
+ int(7)
+ }
+ [8]=>
+ array(1) {
+ [0]=>
+ int(8)
+ }
+ [9]=>
+ array(1) {
+ [0]=>
+ int(9)
+ }
+ [10]=>
+ array(1) {
+ [0]=>
+ int(10)
+ }
+}
+
+[2]
+array(6) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ int(2)
+ [1]=>
+ int(3)
+ }
+ [2]=>
+ array(2) {
+ [0]=>
+ int(4)
+ [1]=>
+ int(5)
+ }
+ [3]=>
+ array(2) {
+ [0]=>
+ int(6)
+ [1]=>
+ int(7)
+ }
+ [4]=>
+ array(2) {
+ [0]=>
+ int(8)
+ [1]=>
+ int(9)
+ }
+ [5]=>
+ array(1) {
+ [0]=>
+ int(10)
+ }
+}
+array(6) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ }
+ [1]=>
+ array(2) {
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ }
+ [2]=>
+ array(2) {
+ [4]=>
+ int(4)
+ [5]=>
+ int(5)
+ }
+ [3]=>
+ array(2) {
+ [6]=>
+ int(6)
+ [7]=>
+ int(7)
+ }
+ [4]=>
+ array(2) {
+ [8]=>
+ int(8)
+ [9]=>
+ int(9)
+ }
+ [5]=>
+ array(1) {
+ [10]=>
+ int(10)
+ }
+}
+array(6) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ int(2)
+ [1]=>
+ int(3)
+ }
+ [2]=>
+ array(2) {
+ [0]=>
+ int(4)
+ [1]=>
+ int(5)
+ }
+ [3]=>
+ array(2) {
+ [0]=>
+ int(6)
+ [1]=>
+ int(7)
+ }
+ [4]=>
+ array(2) {
+ [0]=>
+ int(8)
+ [1]=>
+ int(9)
+ }
+ [5]=>
+ array(1) {
+ [0]=>
+ int(10)
+ }
+}
+
+[3]
+array(4) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ }
+ [1]=>
+ array(3) {
+ [0]=>
+ int(3)
+ [1]=>
+ int(4)
+ [2]=>
+ int(5)
+ }
+ [2]=>
+ array(3) {
+ [0]=>
+ int(6)
+ [1]=>
+ int(7)
+ [2]=>
+ int(8)
+ }
+ [3]=>
+ array(2) {
+ [0]=>
+ int(9)
+ [1]=>
+ int(10)
+ }
+}
+array(4) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ }
+ [1]=>
+ array(3) {
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ [5]=>
+ int(5)
+ }
+ [2]=>
+ array(3) {
+ [6]=>
+ int(6)
+ [7]=>
+ int(7)
+ [8]=>
+ int(8)
+ }
+ [3]=>
+ array(2) {
+ [9]=>
+ int(9)
+ [10]=>
+ int(10)
+ }
+}
+array(4) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ }
+ [1]=>
+ array(3) {
+ [0]=>
+ int(3)
+ [1]=>
+ int(4)
+ [2]=>
+ int(5)
+ }
+ [2]=>
+ array(3) {
+ [0]=>
+ int(6)
+ [1]=>
+ int(7)
+ [2]=>
+ int(8)
+ }
+ [3]=>
+ array(2) {
+ [0]=>
+ int(9)
+ [1]=>
+ int(10)
+ }
+}
+
+[4]
+array(3) {
+ [0]=>
+ array(4) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ }
+ [1]=>
+ array(4) {
+ [0]=>
+ int(4)
+ [1]=>
+ int(5)
+ [2]=>
+ int(6)
+ [3]=>
+ int(7)
+ }
+ [2]=>
+ array(3) {
+ [0]=>
+ int(8)
+ [1]=>
+ int(9)
+ [2]=>
+ int(10)
+ }
+}
+array(3) {
+ [0]=>
+ array(4) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ }
+ [1]=>
+ array(4) {
+ [4]=>
+ int(4)
+ [5]=>
+ int(5)
+ [6]=>
+ int(6)
+ [7]=>
+ int(7)
+ }
+ [2]=>
+ array(3) {
+ [8]=>
+ int(8)
+ [9]=>
+ int(9)
+ [10]=>
+ int(10)
+ }
+}
+array(3) {
+ [0]=>
+ array(4) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ }
+ [1]=>
+ array(4) {
+ [0]=>
+ int(4)
+ [1]=>
+ int(5)
+ [2]=>
+ int(6)
+ [3]=>
+ int(7)
+ }
+ [2]=>
+ array(3) {
+ [0]=>
+ int(8)
+ [1]=>
+ int(9)
+ [2]=>
+ int(10)
+ }
+}
+
+[5]
+array(3) {
+ [0]=>
+ array(5) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ }
+ [1]=>
+ array(5) {
+ [0]=>
+ int(5)
+ [1]=>
+ int(6)
+ [2]=>
+ int(7)
+ [3]=>
+ int(8)
+ [4]=>
+ int(9)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(10)
+ }
+}
+array(3) {
+ [0]=>
+ array(5) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ }
+ [1]=>
+ array(5) {
+ [5]=>
+ int(5)
+ [6]=>
+ int(6)
+ [7]=>
+ int(7)
+ [8]=>
+ int(8)
+ [9]=>
+ int(9)
+ }
+ [2]=>
+ array(1) {
+ [10]=>
+ int(10)
+ }
+}
+array(3) {
+ [0]=>
+ array(5) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ }
+ [1]=>
+ array(5) {
+ [0]=>
+ int(5)
+ [1]=>
+ int(6)
+ [2]=>
+ int(7)
+ [3]=>
+ int(8)
+ [4]=>
+ int(9)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(10)
+ }
+}
+
+[6]
+array(2) {
+ [0]=>
+ array(6) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ [5]=>
+ int(5)
+ }
+ [1]=>
+ array(5) {
+ [0]=>
+ int(6)
+ [1]=>
+ int(7)
+ [2]=>
+ int(8)
+ [3]=>
+ int(9)
+ [4]=>
+ int(10)
+ }
+}
+array(2) {
+ [0]=>
+ array(6) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ [5]=>
+ int(5)
+ }
+ [1]=>
+ array(5) {
+ [6]=>
+ int(6)
+ [7]=>
+ int(7)
+ [8]=>
+ int(8)
+ [9]=>
+ int(9)
+ [10]=>
+ int(10)
+ }
+}
+array(2) {
+ [0]=>
+ array(6) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ [5]=>
+ int(5)
+ }
+ [1]=>
+ array(5) {
+ [0]=>
+ int(6)
+ [1]=>
+ int(7)
+ [2]=>
+ int(8)
+ [3]=>
+ int(9)
+ [4]=>
+ int(10)
+ }
+}
+
+[7]
+array(2) {
+ [0]=>
+ array(7) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ [5]=>
+ int(5)
+ [6]=>
+ int(6)
+ }
+ [1]=>
+ array(4) {
+ [0]=>
+ int(7)
+ [1]=>
+ int(8)
+ [2]=>
+ int(9)
+ [3]=>
+ int(10)
+ }
+}
+array(2) {
+ [0]=>
+ array(7) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ [5]=>
+ int(5)
+ [6]=>
+ int(6)
+ }
+ [1]=>
+ array(4) {
+ [7]=>
+ int(7)
+ [8]=>
+ int(8)
+ [9]=>
+ int(9)
+ [10]=>
+ int(10)
+ }
+}
+array(2) {
+ [0]=>
+ array(7) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ [5]=>
+ int(5)
+ [6]=>
+ int(6)
+ }
+ [1]=>
+ array(4) {
+ [0]=>
+ int(7)
+ [1]=>
+ int(8)
+ [2]=>
+ int(9)
+ [3]=>
+ int(10)
+ }
+}
+
+[8]
+array(2) {
+ [0]=>
+ array(8) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ [5]=>
+ int(5)
+ [6]=>
+ int(6)
+ [7]=>
+ int(7)
+ }
+ [1]=>
+ array(3) {
+ [0]=>
+ int(8)
+ [1]=>
+ int(9)
+ [2]=>
+ int(10)
+ }
+}
+array(2) {
+ [0]=>
+ array(8) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ [5]=>
+ int(5)
+ [6]=>
+ int(6)
+ [7]=>
+ int(7)
+ }
+ [1]=>
+ array(3) {
+ [8]=>
+ int(8)
+ [9]=>
+ int(9)
+ [10]=>
+ int(10)
+ }
+}
+array(2) {
+ [0]=>
+ array(8) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ [5]=>
+ int(5)
+ [6]=>
+ int(6)
+ [7]=>
+ int(7)
+ }
+ [1]=>
+ array(3) {
+ [0]=>
+ int(8)
+ [1]=>
+ int(9)
+ [2]=>
+ int(10)
+ }
+}
+
+[9]
+array(2) {
+ [0]=>
+ array(9) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ [5]=>
+ int(5)
+ [6]=>
+ int(6)
+ [7]=>
+ int(7)
+ [8]=>
+ int(8)
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ int(9)
+ [1]=>
+ int(10)
+ }
+}
+array(2) {
+ [0]=>
+ array(9) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ [5]=>
+ int(5)
+ [6]=>
+ int(6)
+ [7]=>
+ int(7)
+ [8]=>
+ int(8)
+ }
+ [1]=>
+ array(2) {
+ [9]=>
+ int(9)
+ [10]=>
+ int(10)
+ }
+}
+array(2) {
+ [0]=>
+ array(9) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ [5]=>
+ int(5)
+ [6]=>
+ int(6)
+ [7]=>
+ int(7)
+ [8]=>
+ int(8)
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ int(9)
+ [1]=>
+ int(10)
+ }
+}
+
+[10]
+array(2) {
+ [0]=>
+ array(10) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ [5]=>
+ int(5)
+ [6]=>
+ int(6)
+ [7]=>
+ int(7)
+ [8]=>
+ int(8)
+ [9]=>
+ int(9)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(10)
+ }
+}
+array(2) {
+ [0]=>
+ array(10) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ [5]=>
+ int(5)
+ [6]=>
+ int(6)
+ [7]=>
+ int(7)
+ [8]=>
+ int(8)
+ [9]=>
+ int(9)
+ }
+ [1]=>
+ array(1) {
+ [10]=>
+ int(10)
+ }
+}
+array(2) {
+ [0]=>
+ array(10) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ [5]=>
+ int(5)
+ [6]=>
+ int(6)
+ [7]=>
+ int(7)
+ [8]=>
+ int(8)
+ [9]=>
+ int(9)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(10)
+ }
+}
+
+[11]
+array(1) {
+ [0]=>
+ array(11) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ [5]=>
+ int(5)
+ [6]=>
+ int(6)
+ [7]=>
+ int(7)
+ [8]=>
+ int(8)
+ [9]=>
+ int(9)
+ [10]=>
+ int(10)
+ }
+}
+array(1) {
+ [0]=>
+ array(11) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ [5]=>
+ int(5)
+ [6]=>
+ int(6)
+ [7]=>
+ int(7)
+ [8]=>
+ int(8)
+ [9]=>
+ int(9)
+ [10]=>
+ int(10)
+ }
+}
+array(1) {
+ [0]=>
+ array(11) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(1)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ [5]=>
+ int(5)
+ [6]=>
+ int(6)
+ [7]=>
+ int(7)
+ [8]=>
+ int(8)
+ [9]=>
+ int(9)
+ [10]=>
+ int(10)
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation21.phpt b/ext/standard/tests/array/array_chunk_variation21.phpt
new file mode 100644
index 000000000..678bf1675
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation21.phpt
@@ -0,0 +1,46 @@
+--TEST--
+array_chunk() - variation 21
+--FILE--
+<?php
+$array = array ("a" => 1);
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(1) {
+ ["a"]=>
+ int(1)
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(1) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+}
+array(1) {
+ [0]=>
+ array(1) {
+ ["a"]=>
+ int(1)
+ }
+}
+array(1) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation22.phpt b/ext/standard/tests/array/array_chunk_variation22.phpt
new file mode 100644
index 000000000..45c458ebf
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation22.phpt
@@ -0,0 +1,92 @@
+--TEST--
+array_chunk() - variation 22
+--FILE--
+<?php
+$array = array ("b" => 1, "c" => 2);
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(2) {
+ ["b"]=>
+ int(1)
+ ["c"]=>
+ int(2)
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(2) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+}
+array(2) {
+ [0]=>
+ array(1) {
+ ["b"]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ ["c"]=>
+ int(2)
+ }
+}
+array(2) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+}
+
+[2]
+array(1) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ }
+}
+array(1) {
+ [0]=>
+ array(2) {
+ ["b"]=>
+ int(1)
+ ["c"]=>
+ int(2)
+ }
+}
+array(1) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation23.phpt b/ext/standard/tests/array/array_chunk_variation23.phpt
new file mode 100644
index 000000000..80b92985b
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation23.phpt
@@ -0,0 +1,441 @@
+--TEST--
+array_chunk() - variation 23
+--FILE--
+<?php
+$array = array ("p" => 1, "q" => 2, "r" => 3, "s" => 4, "u" => 5, "v" => 6);
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(6) {
+ ["p"]=>
+ int(1)
+ ["q"]=>
+ int(2)
+ ["r"]=>
+ int(3)
+ ["s"]=>
+ int(4)
+ ["u"]=>
+ int(5)
+ ["v"]=>
+ int(6)
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(6) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+ [3]=>
+ array(1) {
+ [0]=>
+ int(4)
+ }
+ [4]=>
+ array(1) {
+ [0]=>
+ int(5)
+ }
+ [5]=>
+ array(1) {
+ [0]=>
+ int(6)
+ }
+}
+array(6) {
+ [0]=>
+ array(1) {
+ ["p"]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ ["q"]=>
+ int(2)
+ }
+ [2]=>
+ array(1) {
+ ["r"]=>
+ int(3)
+ }
+ [3]=>
+ array(1) {
+ ["s"]=>
+ int(4)
+ }
+ [4]=>
+ array(1) {
+ ["u"]=>
+ int(5)
+ }
+ [5]=>
+ array(1) {
+ ["v"]=>
+ int(6)
+ }
+}
+array(6) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+ [3]=>
+ array(1) {
+ [0]=>
+ int(4)
+ }
+ [4]=>
+ array(1) {
+ [0]=>
+ int(5)
+ }
+ [5]=>
+ array(1) {
+ [0]=>
+ int(6)
+ }
+}
+
+[2]
+array(3) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ int(3)
+ [1]=>
+ int(4)
+ }
+ [2]=>
+ array(2) {
+ [0]=>
+ int(5)
+ [1]=>
+ int(6)
+ }
+}
+array(3) {
+ [0]=>
+ array(2) {
+ ["p"]=>
+ int(1)
+ ["q"]=>
+ int(2)
+ }
+ [1]=>
+ array(2) {
+ ["r"]=>
+ int(3)
+ ["s"]=>
+ int(4)
+ }
+ [2]=>
+ array(2) {
+ ["u"]=>
+ int(5)
+ ["v"]=>
+ int(6)
+ }
+}
+array(3) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ int(3)
+ [1]=>
+ int(4)
+ }
+ [2]=>
+ array(2) {
+ [0]=>
+ int(5)
+ [1]=>
+ int(6)
+ }
+}
+
+[3]
+array(2) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ }
+ [1]=>
+ array(3) {
+ [0]=>
+ int(4)
+ [1]=>
+ int(5)
+ [2]=>
+ int(6)
+ }
+}
+array(2) {
+ [0]=>
+ array(3) {
+ ["p"]=>
+ int(1)
+ ["q"]=>
+ int(2)
+ ["r"]=>
+ int(3)
+ }
+ [1]=>
+ array(3) {
+ ["s"]=>
+ int(4)
+ ["u"]=>
+ int(5)
+ ["v"]=>
+ int(6)
+ }
+}
+array(2) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ }
+ [1]=>
+ array(3) {
+ [0]=>
+ int(4)
+ [1]=>
+ int(5)
+ [2]=>
+ int(6)
+ }
+}
+
+[4]
+array(2) {
+ [0]=>
+ array(4) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ int(5)
+ [1]=>
+ int(6)
+ }
+}
+array(2) {
+ [0]=>
+ array(4) {
+ ["p"]=>
+ int(1)
+ ["q"]=>
+ int(2)
+ ["r"]=>
+ int(3)
+ ["s"]=>
+ int(4)
+ }
+ [1]=>
+ array(2) {
+ ["u"]=>
+ int(5)
+ ["v"]=>
+ int(6)
+ }
+}
+array(2) {
+ [0]=>
+ array(4) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ int(5)
+ [1]=>
+ int(6)
+ }
+}
+
+[5]
+array(2) {
+ [0]=>
+ array(5) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(6)
+ }
+}
+array(2) {
+ [0]=>
+ array(5) {
+ ["p"]=>
+ int(1)
+ ["q"]=>
+ int(2)
+ ["r"]=>
+ int(3)
+ ["s"]=>
+ int(4)
+ ["u"]=>
+ int(5)
+ }
+ [1]=>
+ array(1) {
+ ["v"]=>
+ int(6)
+ }
+}
+array(2) {
+ [0]=>
+ array(5) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(6)
+ }
+}
+
+[6]
+array(1) {
+ [0]=>
+ array(6) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ }
+}
+array(1) {
+ [0]=>
+ array(6) {
+ ["p"]=>
+ int(1)
+ ["q"]=>
+ int(2)
+ ["r"]=>
+ int(3)
+ ["s"]=>
+ int(4)
+ ["u"]=>
+ int(5)
+ ["v"]=>
+ int(6)
+ }
+}
+array(1) {
+ [0]=>
+ array(6) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation24.phpt b/ext/standard/tests/array/array_chunk_variation24.phpt
new file mode 100644
index 000000000..e25f53f6b
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation24.phpt
@@ -0,0 +1,46 @@
+--TEST--
+array_chunk() - variation 24
+--FILE--
+<?php
+$array = array ("a" => "A");
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(1) {
+ ["a"]=>
+ string(1) "A"
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(1) {
+ [0]=>
+ array(1) {
+ [0]=>
+ string(1) "A"
+ }
+}
+array(1) {
+ [0]=>
+ array(1) {
+ ["a"]=>
+ string(1) "A"
+ }
+}
+array(1) {
+ [0]=>
+ array(1) {
+ [0]=>
+ string(1) "A"
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation25.phpt b/ext/standard/tests/array/array_chunk_variation25.phpt
new file mode 100644
index 000000000..eae89e952
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation25.phpt
@@ -0,0 +1,441 @@
+--TEST--
+array_chunk() - variation 25
+--FILE--
+<?php
+$array = array ("p" => "A", "q" => "B", "r" => "C", "s" => "D", "u" => "E", "v" => "F");
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(6) {
+ ["p"]=>
+ string(1) "A"
+ ["q"]=>
+ string(1) "B"
+ ["r"]=>
+ string(1) "C"
+ ["s"]=>
+ string(1) "D"
+ ["u"]=>
+ string(1) "E"
+ ["v"]=>
+ string(1) "F"
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(6) {
+ [0]=>
+ array(1) {
+ [0]=>
+ string(1) "A"
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ string(1) "B"
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ string(1) "C"
+ }
+ [3]=>
+ array(1) {
+ [0]=>
+ string(1) "D"
+ }
+ [4]=>
+ array(1) {
+ [0]=>
+ string(1) "E"
+ }
+ [5]=>
+ array(1) {
+ [0]=>
+ string(1) "F"
+ }
+}
+array(6) {
+ [0]=>
+ array(1) {
+ ["p"]=>
+ string(1) "A"
+ }
+ [1]=>
+ array(1) {
+ ["q"]=>
+ string(1) "B"
+ }
+ [2]=>
+ array(1) {
+ ["r"]=>
+ string(1) "C"
+ }
+ [3]=>
+ array(1) {
+ ["s"]=>
+ string(1) "D"
+ }
+ [4]=>
+ array(1) {
+ ["u"]=>
+ string(1) "E"
+ }
+ [5]=>
+ array(1) {
+ ["v"]=>
+ string(1) "F"
+ }
+}
+array(6) {
+ [0]=>
+ array(1) {
+ [0]=>
+ string(1) "A"
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ string(1) "B"
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ string(1) "C"
+ }
+ [3]=>
+ array(1) {
+ [0]=>
+ string(1) "D"
+ }
+ [4]=>
+ array(1) {
+ [0]=>
+ string(1) "E"
+ }
+ [5]=>
+ array(1) {
+ [0]=>
+ string(1) "F"
+ }
+}
+
+[2]
+array(3) {
+ [0]=>
+ array(2) {
+ [0]=>
+ string(1) "A"
+ [1]=>
+ string(1) "B"
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ string(1) "C"
+ [1]=>
+ string(1) "D"
+ }
+ [2]=>
+ array(2) {
+ [0]=>
+ string(1) "E"
+ [1]=>
+ string(1) "F"
+ }
+}
+array(3) {
+ [0]=>
+ array(2) {
+ ["p"]=>
+ string(1) "A"
+ ["q"]=>
+ string(1) "B"
+ }
+ [1]=>
+ array(2) {
+ ["r"]=>
+ string(1) "C"
+ ["s"]=>
+ string(1) "D"
+ }
+ [2]=>
+ array(2) {
+ ["u"]=>
+ string(1) "E"
+ ["v"]=>
+ string(1) "F"
+ }
+}
+array(3) {
+ [0]=>
+ array(2) {
+ [0]=>
+ string(1) "A"
+ [1]=>
+ string(1) "B"
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ string(1) "C"
+ [1]=>
+ string(1) "D"
+ }
+ [2]=>
+ array(2) {
+ [0]=>
+ string(1) "E"
+ [1]=>
+ string(1) "F"
+ }
+}
+
+[3]
+array(2) {
+ [0]=>
+ array(3) {
+ [0]=>
+ string(1) "A"
+ [1]=>
+ string(1) "B"
+ [2]=>
+ string(1) "C"
+ }
+ [1]=>
+ array(3) {
+ [0]=>
+ string(1) "D"
+ [1]=>
+ string(1) "E"
+ [2]=>
+ string(1) "F"
+ }
+}
+array(2) {
+ [0]=>
+ array(3) {
+ ["p"]=>
+ string(1) "A"
+ ["q"]=>
+ string(1) "B"
+ ["r"]=>
+ string(1) "C"
+ }
+ [1]=>
+ array(3) {
+ ["s"]=>
+ string(1) "D"
+ ["u"]=>
+ string(1) "E"
+ ["v"]=>
+ string(1) "F"
+ }
+}
+array(2) {
+ [0]=>
+ array(3) {
+ [0]=>
+ string(1) "A"
+ [1]=>
+ string(1) "B"
+ [2]=>
+ string(1) "C"
+ }
+ [1]=>
+ array(3) {
+ [0]=>
+ string(1) "D"
+ [1]=>
+ string(1) "E"
+ [2]=>
+ string(1) "F"
+ }
+}
+
+[4]
+array(2) {
+ [0]=>
+ array(4) {
+ [0]=>
+ string(1) "A"
+ [1]=>
+ string(1) "B"
+ [2]=>
+ string(1) "C"
+ [3]=>
+ string(1) "D"
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ string(1) "E"
+ [1]=>
+ string(1) "F"
+ }
+}
+array(2) {
+ [0]=>
+ array(4) {
+ ["p"]=>
+ string(1) "A"
+ ["q"]=>
+ string(1) "B"
+ ["r"]=>
+ string(1) "C"
+ ["s"]=>
+ string(1) "D"
+ }
+ [1]=>
+ array(2) {
+ ["u"]=>
+ string(1) "E"
+ ["v"]=>
+ string(1) "F"
+ }
+}
+array(2) {
+ [0]=>
+ array(4) {
+ [0]=>
+ string(1) "A"
+ [1]=>
+ string(1) "B"
+ [2]=>
+ string(1) "C"
+ [3]=>
+ string(1) "D"
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ string(1) "E"
+ [1]=>
+ string(1) "F"
+ }
+}
+
+[5]
+array(2) {
+ [0]=>
+ array(5) {
+ [0]=>
+ string(1) "A"
+ [1]=>
+ string(1) "B"
+ [2]=>
+ string(1) "C"
+ [3]=>
+ string(1) "D"
+ [4]=>
+ string(1) "E"
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ string(1) "F"
+ }
+}
+array(2) {
+ [0]=>
+ array(5) {
+ ["p"]=>
+ string(1) "A"
+ ["q"]=>
+ string(1) "B"
+ ["r"]=>
+ string(1) "C"
+ ["s"]=>
+ string(1) "D"
+ ["u"]=>
+ string(1) "E"
+ }
+ [1]=>
+ array(1) {
+ ["v"]=>
+ string(1) "F"
+ }
+}
+array(2) {
+ [0]=>
+ array(5) {
+ [0]=>
+ string(1) "A"
+ [1]=>
+ string(1) "B"
+ [2]=>
+ string(1) "C"
+ [3]=>
+ string(1) "D"
+ [4]=>
+ string(1) "E"
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ string(1) "F"
+ }
+}
+
+[6]
+array(1) {
+ [0]=>
+ array(6) {
+ [0]=>
+ string(1) "A"
+ [1]=>
+ string(1) "B"
+ [2]=>
+ string(1) "C"
+ [3]=>
+ string(1) "D"
+ [4]=>
+ string(1) "E"
+ [5]=>
+ string(1) "F"
+ }
+}
+array(1) {
+ [0]=>
+ array(6) {
+ ["p"]=>
+ string(1) "A"
+ ["q"]=>
+ string(1) "B"
+ ["r"]=>
+ string(1) "C"
+ ["s"]=>
+ string(1) "D"
+ ["u"]=>
+ string(1) "E"
+ ["v"]=>
+ string(1) "F"
+ }
+}
+array(1) {
+ [0]=>
+ array(6) {
+ [0]=>
+ string(1) "A"
+ [1]=>
+ string(1) "B"
+ [2]=>
+ string(1) "C"
+ [3]=>
+ string(1) "D"
+ [4]=>
+ string(1) "E"
+ [5]=>
+ string(1) "F"
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation26.phpt b/ext/standard/tests/array/array_chunk_variation26.phpt
new file mode 100644
index 000000000..487f6b4f6
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation26.phpt
@@ -0,0 +1,46 @@
+--TEST--
+array_chunk() - variation 26
+--FILE--
+<?php
+$array =array (0);
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(1) {
+ [0]=>
+ int(0)
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(1) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+}
+array(1) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+}
+array(1) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation27.phpt b/ext/standard/tests/array/array_chunk_variation27.phpt
new file mode 100644
index 000000000..a83a16b7f
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation27.phpt
@@ -0,0 +1,46 @@
+--TEST--
+array_chunk() - variation 27
+--FILE--
+<?php
+$array = array (1);
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(1) {
+ [0]=>
+ int(1)
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(1) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+}
+array(1) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+}
+array(1) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation28.phpt b/ext/standard/tests/array/array_chunk_variation28.phpt
new file mode 100644
index 000000000..bdbaf45cb
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation28.phpt
@@ -0,0 +1,46 @@
+--TEST--
+array_chunk() - variation 28
+--FILE--
+<?php
+$array = array (-1);
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(1) {
+ [0]=>
+ int(-1)
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(1) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(-1)
+ }
+}
+array(1) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(-1)
+ }
+}
+array(1) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(-1)
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation29.phpt b/ext/standard/tests/array/array_chunk_variation29.phpt
new file mode 100644
index 000000000..12f50c119
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation29.phpt
@@ -0,0 +1,92 @@
+--TEST--
+array_chunk() - variation 29
+--FILE--
+<?php
+$array = array (0, 2);
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(2) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(2)
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(2) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+}
+array(2) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+ [1]=>
+ array(1) {
+ [1]=>
+ int(2)
+ }
+}
+array(2) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+}
+
+[2]
+array(1) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(2)
+ }
+}
+array(1) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(2)
+ }
+}
+array(1) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(2)
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation30.phpt b/ext/standard/tests/array/array_chunk_variation30.phpt
new file mode 100644
index 000000000..281537a87
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation30.phpt
@@ -0,0 +1,159 @@
+--TEST--
+array_chunk() - variation 30
+--FILE--
+<?php
+$array = array (1, 2, 3);
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(3) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+}
+array(3) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [1]=>
+ int(2)
+ }
+ [2]=>
+ array(1) {
+ [2]=>
+ int(3)
+ }
+}
+array(3) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+}
+
+[2]
+array(2) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+}
+array(2) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ }
+ [1]=>
+ array(1) {
+ [2]=>
+ int(3)
+ }
+}
+array(2) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(3)
+ }
+}
+
+[3]
+array(1) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ }
+}
+array(1) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ }
+}
+array(1) {
+ [0]=>
+ array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation31.phpt b/ext/standard/tests/array/array_chunk_variation31.phpt
new file mode 100644
index 000000000..159267983
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation31.phpt
@@ -0,0 +1,46 @@
+--TEST--
+array_chunk() - variation 31
+--FILE--
+<?php
+$array = array (1 => 0);
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(1) {
+ [1]=>
+ int(0)
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(1) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+}
+array(1) {
+ [0]=>
+ array(1) {
+ [1]=>
+ int(0)
+ }
+}
+array(1) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation32.phpt b/ext/standard/tests/array/array_chunk_variation32.phpt
new file mode 100644
index 000000000..cf65993c0
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation32.phpt
@@ -0,0 +1,46 @@
+--TEST--
+array_chunk() - variation 32
+--FILE--
+<?php
+$array = array (2 => 1);
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(1) {
+ [2]=>
+ int(1)
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(1) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+}
+array(1) {
+ [0]=>
+ array(1) {
+ [2]=>
+ int(1)
+ }
+}
+array(1) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation8.phpt b/ext/standard/tests/array/array_chunk_variation8.phpt
new file mode 100644
index 000000000..6a6e752ec
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation8.phpt
@@ -0,0 +1,46 @@
+--TEST--
+array_chunk() - variation 8
+--FILE--
+<?php
+$array = array (3 => -1);
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(1) {
+ [3]=>
+ int(-1)
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(1) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(-1)
+ }
+}
+array(1) {
+ [0]=>
+ array(1) {
+ [3]=>
+ int(-1)
+ }
+}
+array(1) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(-1)
+ }
+}
diff --git a/ext/standard/tests/array/array_chunk_variation9.phpt b/ext/standard/tests/array/array_chunk_variation9.phpt
new file mode 100644
index 000000000..ec57da4f8
--- /dev/null
+++ b/ext/standard/tests/array/array_chunk_variation9.phpt
@@ -0,0 +1,92 @@
+--TEST--
+array_chunk() - variation 9
+--FILE--
+<?php
+$array = array (1 => 0, 2 => 2);
+var_dump ($array);
+for ($i = 0; $i < (sizeof($array) + 1); $i++) {
+ echo "[$i]\n";
+ var_dump (@array_chunk ($array, $i));
+ var_dump (@array_chunk ($array, $i, TRUE));
+ var_dump (@array_chunk ($array, $i, FALSE));
+ echo "\n";
+}
+?>
+--EXPECT--
+array(2) {
+ [1]=>
+ int(0)
+ [2]=>
+ int(2)
+}
+[0]
+NULL
+NULL
+NULL
+
+[1]
+array(2) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+}
+array(2) {
+ [0]=>
+ array(1) {
+ [1]=>
+ int(0)
+ }
+ [1]=>
+ array(1) {
+ [2]=>
+ int(2)
+ }
+}
+array(2) {
+ [0]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+}
+
+[2]
+array(1) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(2)
+ }
+}
+array(1) {
+ [0]=>
+ array(2) {
+ [1]=>
+ int(0)
+ [2]=>
+ int(2)
+ }
+}
+array(1) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(2)
+ }
+}
diff --git a/ext/standard/tests/array/array_count_values_error.phpt b/ext/standard/tests/array/array_count_values_error.phpt
new file mode 100644
index 000000000..10aa883fb
--- /dev/null
+++ b/ext/standard/tests/array/array_count_values_error.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test array_count_values() function : Invalid parameters
+--FILE--
+<?php
+/* Prototype : proto array array_count_values(array input)
+ * Description: Return the value as key and the frequency of that value in input as value
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+/*
+ * Test for handling of incorrect parameters.
+ */
+
+echo "*** Testing array_count_values() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing array_count_values() function with Zero arguments --\n";
+var_dump( array_count_values() );
+
+//Test array_count_values with one more than the expected number of arguments
+echo "\n-- Testing array_count_values() function with more than expected no. of arguments --\n";
+$input = array(1, 2);
+$extra_arg = 10;
+var_dump( array_count_values($input, $extra_arg) );
+
+//Test array_count_values with integer arguments
+echo "\n-- Testing array_count_values() function integer arguments --\n";
+var_dump( array_count_values(1 ));
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing array_count_values() : error conditions ***
+
+-- Testing array_count_values() function with Zero arguments --
+
+Warning: Wrong parameter count for array_count_values() in %sarray_count_values_error.php on line 16
+NULL
+
+-- Testing array_count_values() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for array_count_values() in %sarray_count_values_error.php on line 22
+NULL
+
+-- Testing array_count_values() function integer arguments --
+
+Warning: array_count_values(): The argument should be an array in %sarray_count_values_error.php on line 26
+NULL
+Done
diff --git a/ext/standard/tests/array/array_count_values_variation.phpt b/ext/standard/tests/array/array_count_values_variation.phpt
new file mode 100644
index 000000000..efd3c81cc
--- /dev/null
+++ b/ext/standard/tests/array/array_count_values_variation.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test array_count_values() function : Test all normal paramter variations
+--FILE--
+<?php
+/* Prototype : proto array array_count_values(array input)
+ * Description: Return the value as key and the frequency of that value in input as value
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+/*
+ * Test behaviour with paramter variations
+ */
+
+echo "*** Testing array_count_values() : parameter variations ***\n";
+
+class A {
+ static function hello() {
+ echo "Hello\n";
+ }
+}
+
+$ob = new A();
+
+$fp = fopen("array_count_file", "w+");
+
+$arrays = array ("bobk" => "bobv", "val", 6 => "val6", $fp, $ob);
+
+var_dump (@array_count_values ($arrays));
+echo "\n";
+
+
+echo "Done";
+?>
+
+--EXPECTF--
+*** Testing array_count_values() : parameter variations ***
+array(3) {
+ ["bobv"]=>
+ int(1)
+ ["val"]=>
+ int(1)
+ ["val6"]=>
+ int(1)
+}
+
+Done \ No newline at end of file
diff --git a/ext/standard/tests/array/array_diff_assoc_error.phpt b/ext/standard/tests/array/array_diff_assoc_error.phpt
index 0c9da2f2c..e8b259bf7 100644
--- a/ext/standard/tests/array/array_diff_assoc_error.phpt
+++ b/ext/standard/tests/array/array_diff_assoc_error.phpt
@@ -15,7 +15,7 @@ Test array_diff_assoc() function : error conditions - pass array_diff_assoc() to
echo "*** Testing array_diff_assoc() : error conditions ***\n";
// Zero arguments
-echo "\n-- Testing array_diff() function with zero arguments --\n";
+echo "\n-- Testing array_diff_assoc() function with zero arguments --\n";
var_dump( array_diff_assoc() );
// Testing array_diff_assoc with one less than the expected number of arguments
@@ -29,7 +29,7 @@ echo "Done";
--EXPECTF--
*** Testing array_diff_assoc() : error conditions ***
--- Testing array_diff() function with zero arguments --
+-- Testing array_diff_assoc() function with zero arguments --
Warning: Wrong parameter count for array_diff_assoc() in %s on line %d
NULL
@@ -38,4 +38,5 @@ NULL
Warning: Wrong parameter count for array_diff_assoc() in %s on line %d
NULL
-Done \ No newline at end of file
+Done
+
diff --git a/ext/standard/tests/array/array_diff_key_error.phpt b/ext/standard/tests/array/array_diff_key_error.phpt
new file mode 100644
index 000000000..786c1f30c
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_key_error.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test array_diff_key() function : error conditions
+--FILE--
+<?php
+/* Prototype : array array_diff_key(array arr1, array arr2 [, array ...])
+ * Description: Returns the entries of arr1 that have keys which are not present in any of the others arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_key() : error conditions ***\n";
+
+// Initialise the variables
+$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
+
+// Testing array_diff_key with one less than the expected number of arguments
+echo "\n-- Testing array_diff_key() function with less than expected no. of arguments --\n";
+var_dump( array_diff_key($array1) );
+
+// Testing array_diff_key with no arguments
+echo "\n-- Testing array_diff_key() function with no arguments --\n";
+var_dump( array_diff_key() );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_key() : error conditions ***
+
+-- Testing array_diff_key() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for array_diff_key() in %s on line %d
+NULL
+
+-- Testing array_diff_key() function with no arguments --
+
+Warning: Wrong parameter count for array_diff_key() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_key_variation1.phpt b/ext/standard/tests/array/array_diff_key_variation1.phpt
index 00da7afa9..9f2c20b2e 100644
--- a/ext/standard/tests/array/array_diff_key_variation1.phpt
+++ b/ext/standard/tests/array/array_diff_key_variation1.phpt
@@ -1,89 +1,310 @@
--TEST--
-array_diff_key() : type variations
+Test array_diff_key() function : usage variation - Passing unexpected values to first argument
--FILE--
<?php
-/*
-* proto array array_diff_key(array arr1, array arr2 [, array ...])
-* Function is implemented in ext/standard/array.c
-*/
-/*
-* Testing how array_diff_key treats keys that are numbers, floating point numbers or strings.
-*/
-$arr1 = array(1 => 'a', 2 => 'b', 3 => 'c', 'key1' => 'value');
-$arr2 = array(1.00 => 'a', 2.00 => 'b', 3.00 => 'c', 'key2' => 'value');
-$arr3 = array('1' => 'a', '2' => 'b', '3' => 'c', 'key3' => 'value');
-$arr4 = array('1.00' => 'a', '2.00' => 'b', '3.00' => 'c', 'key4' => 'value'); //$arr4 looks different to the other three arrays.
-print "Result of comparing integers and floating point value:\n"; //1 and 1.00 are treated as the same thing
-print_r(array_diff_key($arr1, $arr2));
-print_r(array_diff_key($arr2, $arr1));
-print "Result of comparing integers and strings containing an integers:\n"; //1 and the string 1 are treated as the same thing
-print_r(array_diff_key($arr1, $arr3));
-print_r(array_diff_key($arr3, $arr1));
-print "Result of comparing integers and strings containing floating points:\n"; //1 and the string 1.00 are not treated as the same thing
-print_r(array_diff_key($arr1, $arr4));
-print_r(array_diff_key($arr4, $arr1));
-print "Result of comparing floating points and strings containing integers:\n";
-print_r(array_diff_key($arr2, $arr3)); //1.00 and the string 1 are treated as the same thing
-print_r(array_diff_key($arr3, $arr2));
-print "Result of comparing strings containing integers and strings containing floating points:\n"; //the strings 1 and 1.00 are not treated as the same thing.
-print_r(array_diff_key($arr3, $arr4));
-print_r(array_diff_key($arr4, $arr3));
+/* Prototype : array array_diff_key(array arr1, array arr2 [, array ...])
+ * Description: Returns the entries of arr1 that have keys which are not present in any of the others arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_key() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
+$array3 = array(1, 2, 3, 4, 5);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//resource variable
+$fp = fopen(__FILE__, "r");
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource data
+ 'resource' => $fp,
+);
+
+// loop through each element of the array for arr1
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_diff_key($value, $array2) );
+ var_dump( array_diff_key($value, $array2, $array3) );
+};
+
+fclose($fp);
?>
+===DONE===
--EXPECTF--
-Result of comparing integers and floating point value:
-Array
-(
- [key1] => value
-)
-Array
-(
- [key2] => value
-)
-Result of comparing integers and strings containing an integers:
-Array
-(
- [key1] => value
-)
-Array
-(
- [key3] => value
-)
-Result of comparing integers and strings containing floating points:
-Array
-(
- [1] => a
- [2] => b
- [3] => c
- [key1] => value
-)
-Array
-(
- [1.00] => a
- [2.00] => b
- [3.00] => c
- [key4] => value
-)
-Result of comparing floating points and strings containing integers:
-Array
-(
- [key2] => value
-)
-Array
-(
- [key3] => value
-)
-Result of comparing strings containing integers and strings containing floating points:
-Array
-(
- [1] => a
- [2] => b
- [3] => c
- [key3] => value
-)
-Array
-(
- [1.00] => a
- [2.00] => b
- [3.00] => c
- [key4] => value
-)
+*** Testing array_diff_key() : usage variation ***
+
+--int 0--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--resource--
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #1 is not an array in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_diff_key_variation2.phpt b/ext/standard/tests/array/array_diff_key_variation2.phpt
new file mode 100644
index 000000000..7293d3a0a
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_key_variation2.phpt
@@ -0,0 +1,310 @@
+--TEST--
+Test array_diff_key() function : usage variation - Passing unexpected values to second argument
+--FILE--
+<?php
+/* Prototype : array array_diff_key(array arr1, array arr2 [, array ...])
+ * Description: Returns the entries of arr1 that have keys which are not present in any of the others arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_key() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$array1 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
+$array3 = array(1, 2, 3, 4, 5);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//resource variable
+$fp = fopen(__FILE__, "r");
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource data
+ 'resource' => $fp,
+);
+
+// loop through each element of the array for arr1
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_diff_key($array1, $value) );
+ var_dump( array_diff_key($array1, $value, $array3) );
+};
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_key() : usage variation ***
+
+--int 0--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--resource--
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_key(): Argument #2 is not an array in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_diff_key_variation3.phpt b/ext/standard/tests/array/array_diff_key_variation3.phpt
new file mode 100644
index 000000000..4cb8e51fb
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_key_variation3.phpt
@@ -0,0 +1,231 @@
+--TEST--
+Test array_diff_key() function : usage variation - Passing unexpected values to third optional argument
+--FILE--
+<?php
+/* Prototype : array array_diff_key(array arr1, array arr2 [, array ...])
+ * Description: Returns the entries of arr1 that have keys which are not present in any of the others arguments. This function is like array_diff() but works on the keys instead of the values.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_key() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
+$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//resource variable
+$fp = fopen(__FILE__, "r");
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource data
+ 'resource' => $fp,
+);
+
+// loop through each element of the array for arr1
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_diff_key($array1, $array2, $value) );
+};
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_key() : usage variation ***
+
+--int 0--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--resource--
+
+Warning: array_diff_key(): Argument #3 is not an array in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_diff_key_variation4.phpt b/ext/standard/tests/array/array_diff_key_variation4.phpt
new file mode 100644
index 000000000..d3ef45c46
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_key_variation4.phpt
@@ -0,0 +1,61 @@
+--TEST--
+Test array_diff_key() function : usage variation - Passing integer indexed array
+--FILE--
+<?php
+/* Prototype : array array_diff_key(array arr1, array arr2 [, array ...])
+ * Description: Returns the entries of arr1 that have keys which are not present in any of the others arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_key() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$input_array = array(-07 => '-07', 0xA => '0xA');
+
+$input_arrays = array(
+ 'decimal indexed' => array(10 => '10', '-17' => '-17'),
+ 'octal indexed' => array(-011 => '-011', 012 => '012'),
+ 'hexa indexed' => array(0x12 => '0x12', -0x7 => '-0x7', ),
+);
+
+// loop through each element of the array for arr1
+foreach($input_arrays as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_diff_key($input_array, $value) );
+ var_dump( array_diff_key($value, $input_array) );
+}
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_key() : usage variation ***
+
+--decimal indexed--
+array(1) {
+ [-7]=>
+ string(3) "-07"
+}
+array(1) {
+ [-17]=>
+ string(3) "-17"
+}
+
+--octal indexed--
+array(1) {
+ [-7]=>
+ string(3) "-07"
+}
+array(1) {
+ [-9]=>
+ string(4) "-011"
+}
+
+--hexa indexed--
+array(1) {
+ [10]=>
+ string(3) "0xA"
+}
+array(1) {
+ [18]=>
+ string(4) "0x12"
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_diff_key_variation5.phpt b/ext/standard/tests/array/array_diff_key_variation5.phpt
new file mode 100644
index 000000000..f777953c5
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_key_variation5.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test array_diff_key() function : usage variation - Passing float indexed array
+--FILE--
+<?php
+/* Prototype : array array_diff_key(array arr1, array arr2 [, array ...])
+ * Description: Returns the entries of arr1 that have keys which are not present in any of the others arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_key() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$input_array = array(0 => '0', 10 => '10', -10 => '-10', 20 =>'20', -20 => '-20');
+$float_indx_array = array(0.0 => '0.0', 10.5 => '10.5', -10.5 => '-10.5', 0.5 => '0.5');
+
+echo "\n-- Testing array_diff_key() function with float indexed array --\n";
+// loop through each element of the array for arr1
+var_dump( array_diff_key($input_array, $float_indx_array) );
+var_dump( array_diff_key($float_indx_array, $input_array) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_key() : usage variation ***
+
+-- Testing array_diff_key() function with float indexed array --
+array(2) {
+ [20]=>
+ string(2) "20"
+ [-20]=>
+ string(3) "-20"
+}
+array(0) {
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_diff_key_variation6.phpt b/ext/standard/tests/array/array_diff_key_variation6.phpt
new file mode 100644
index 000000000..48334fc0a
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_key_variation6.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test array_diff_key() function : usage variation - Passing boolean indexed array
+--FILE--
+<?php
+/* Prototype : array array_diff_key(array arr1, array arr2 [, array ...])
+ * Description: Returns the entries of arr1 that have keys which are not present in any of the others arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_key() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$input_array = array(0 => '0', 1 => '1', -10 => '-10', 'true' => 1, 'false' => 0);
+$boolean_indx_array = array(true => 'boolt', false => 'boolf', TRUE => 'boolT', FALSE => 'boolF');
+
+echo "\n-- Testing array_diff_key() function with boolean indexed array --\n";
+// loop through each element of the array for arr1
+var_dump( array_diff_key($input_array, $boolean_indx_array) );
+var_dump( array_diff_key($boolean_indx_array, $input_array) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_key() : usage variation ***
+
+-- Testing array_diff_key() function with boolean indexed array --
+array(3) {
+ [-10]=>
+ string(3) "-10"
+ ["true"]=>
+ int(1)
+ ["false"]=>
+ int(0)
+}
+array(0) {
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_diff_key_variation7.phpt b/ext/standard/tests/array/array_diff_key_variation7.phpt
new file mode 100644
index 000000000..c2e806c00
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_key_variation7.phpt
@@ -0,0 +1,59 @@
+--TEST--
+Test array_diff_key() function : usage variation - Passing null,unset and undefined variable indexed array
+--FILE--
+<?php
+/* Prototype : array array_diff_key(array arr1, array arr2 [, array ...])
+ * Description: Returns the entries of arr1 that have keys which are not present in any of the others arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_key() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$input_array = array(10 => '10', "" => 'empty');
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$input_arrays = array(
+ 'null indexed' => array(NULL => 'null 1', null => 'null 2'),
+ 'undefined indexed' => array(@$undefined_var => 'undefined'),
+ 'unset indexed' => array(@$unset_var => 'unset'),
+);
+
+foreach($input_arrays as $key =>$value) {
+ echo "\n--$key--\n";
+ // loop through each element of the array for arr1
+ var_dump( array_diff_key($input_array, $value) );
+ var_dump( array_diff_key($value, $input_array) );
+}
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_key() : usage variation ***
+
+--null indexed--
+array(1) {
+ [10]=>
+ string(2) "10"
+}
+array(0) {
+}
+
+--undefined indexed--
+array(1) {
+ [10]=>
+ string(2) "10"
+}
+array(0) {
+}
+
+--unset indexed--
+array(1) {
+ [10]=>
+ string(2) "10"
+}
+array(0) {
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_diff_key_variation8.phpt b/ext/standard/tests/array/array_diff_key_variation8.phpt
new file mode 100644
index 000000000..3242e6970
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_key_variation8.phpt
@@ -0,0 +1,54 @@
+--TEST--
+Test array_diff_key() function : usage variation - Passing multi-dimensional array
+--FILE--
+<?php
+/* Prototype : array array_diff_key(array arr1, array arr2 [, array ...])
+ * Description: Returns the entries of arr1 that have keys which are not present in any of the others arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_key() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$array1 = array(
+
+ 'first' => array('blue' => 1, 'red' => 2),
+
+ 'second' => array('yellow' => 7),
+
+ 'third' => array(0 => 'zero'),
+);
+
+$array2 = array (
+
+ 'first' => array('blue' => 1, 'red' => 2,),
+
+ 'second' => array('cyan' => 8),
+
+ 'fourth' => array(2 => 'two'),
+);
+
+echo "\n-- Testing array_diff_key() function with multi dimensional array --\n";
+var_dump( array_diff_key($array1, $array2) );
+var_dump( array_diff_key($array2, $array1) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_key() : usage variation ***
+
+-- Testing array_diff_key() function with multi dimensional array --
+array(1) {
+ ["third"]=>
+ array(1) {
+ [0]=>
+ string(4) "zero"
+ }
+}
+array(1) {
+ ["fourth"]=>
+ array(1) {
+ [2]=>
+ string(3) "two"
+ }
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_diff_uassoc_error.phpt b/ext/standard/tests/array/array_diff_uassoc_error.phpt
new file mode 100644
index 000000000..e3006958d
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_uassoc_error.phpt
@@ -0,0 +1,63 @@
+--TEST--
+Test array_diff_uassoc() function : error conditions
+--FILE--
+<?php
+/* Prototype : array array_diff_uassoc(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Computes the difference of arrays with additional index check which is performed by a
+ * user supplied callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_uassoc() : error conditions ***\n";
+
+//Initialize array
+$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
+$array2 = array("a" => "green", "yellow", "red");
+$array3 = array("a" => "green", "red");
+$array4 = array();
+$extra_arg = array(1, 2, 3, 4);
+
+function key_compare_func($a, $b)
+{
+ if ($a === $b) {
+ return 0;
+ }
+ return ($a > $b)? 1:-1;
+}
+
+//Test array_diff_uassoc with one more than the expected number of arguments
+echo "\n-- Testing array_diff_uassoc() function with more than expected no. of arguments --\n";
+
+var_dump( array_diff_uassoc($array1, $array2, "key_compare_func", $extra_arg) );
+var_dump( array_diff_uassoc($array1, $array2, $array3, $array4, "key_compare_func", $extra_arg) );
+
+// Testing array_diff_uassoc with one less than the expected number of arguments
+echo "\n-- Testing array_diff_uassoc() function with less than expected no. of arguments --\n";
+var_dump( array_diff_uassoc($array1, $array2) );
+
+// Testing array_diff_uassoc with no arguments
+echo "\n-- Testing array_diff_uassoc() function with no arguments --\n";
+var_dump( array_diff_uassoc() );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_uassoc() : error conditions ***
+
+-- Testing array_diff_uassoc() function with more than expected no. of arguments --
+
+Warning: array_diff_uassoc(): Not a valid callback Array in %s on line %d
+NULL
+
+Warning: array_diff_uassoc(): Not a valid callback Array in %s on line %d
+NULL
+
+-- Testing array_diff_uassoc() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for array_diff_uassoc() in %s on line %d
+NULL
+
+-- Testing array_diff_uassoc() function with no arguments --
+
+Warning: Wrong parameter count for array_diff_uassoc() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_uassoc_variation1.phpt b/ext/standard/tests/array/array_diff_uassoc_variation1.phpt
new file mode 100644
index 000000000..75494c7e5
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_uassoc_variation1.phpt
@@ -0,0 +1,244 @@
+--TEST--
+Test array_diff_uassoc() function : usage variation - Passing unexpected values to first argument
+--FILE--
+<?php
+/* Prototype : array array_diff_uassoc(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Computes the difference of arrays with additional index check which is performed by a
+ * user supplied callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_uassoc() : usage variation ***\n";
+
+//Initialize variables
+$array2 = array("a" => "green", "yellow", "red");
+
+function key_compare_func($a, $b)
+{
+ if ($a === $b) {
+ return 0;
+ }
+ return ($a > $b)? 1:-1;
+}
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//resource variable
+$fp = fopen(__FILE__, "r");
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource data
+ 'resource' => $fp,
+);
+
+// loop through each element of the array for arr1
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_diff_uassoc($value, $array2, "key_compare_func") );
+};
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_uassoc() : usage variation ***
+
+--int 0--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--resource--
+
+Warning: array_diff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_uassoc_variation10.phpt b/ext/standard/tests/array/array_diff_uassoc_variation10.phpt
new file mode 100644
index 000000000..57b17d1bc
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_uassoc_variation10.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test array_diff_uassoc() function : usage variation - Passing float indexed array
+--FILE--
+<?php
+/* Prototype : array array_diff_uassoc(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Computes the difference of arrays with additional index check which is performed by a
+ * user supplied callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_uassoc() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$input_array = array(0 => '0', 10 => '10', -10 => '-10', 20 =>'20', -20 => '-20');
+$float_indx_array = array(0.0 => '0.0', 10.5 => '10.5', -10.5 => '-10.5', 0.5 => '0.5');
+
+echo "\n-- Testing array_diff_key() function with float indexed array --\n";
+var_dump( array_diff_uassoc($input_array, $float_indx_array, "strcasecmp") );
+var_dump( array_diff_uassoc($float_indx_array, $input_array, "strcasecmp") );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_uassoc() : usage variation ***
+
+-- Testing array_diff_key() function with float indexed array --
+array(5) {
+ [0]=>
+ string(1) "0"
+ [10]=>
+ string(2) "10"
+ [-10]=>
+ string(3) "-10"
+ [20]=>
+ string(2) "20"
+ [-20]=>
+ string(3) "-20"
+}
+array(3) {
+ [0]=>
+ string(3) "0.5"
+ [10]=>
+ string(4) "10.5"
+ [-10]=>
+ string(5) "-10.5"
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_uassoc_variation11.phpt b/ext/standard/tests/array/array_diff_uassoc_variation11.phpt
new file mode 100644
index 000000000..b77df3279
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_uassoc_variation11.phpt
@@ -0,0 +1,45 @@
+--TEST--
+Test array_diff_uassoc() function : usage variation - Passing boolean indexed array
+--FILE--
+<?php
+/* Prototype : array array_diff_uassoc(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Computes the difference of arrays with additional index check which is performed by a
+ * user supplied callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_uassoc() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$input_array = array(0 => '0', 1 => '1', -10 => '-10', 'true' => 1, 'false' => 0);
+$boolean_indx_array = array(true => 'boolt', false => 'boolf', TRUE => 'boolT', FALSE => 'boolF');
+
+echo "\n-- Testing array_diff_key() function with float indexed array --\n";
+var_dump( array_diff_uassoc($input_array, $boolean_indx_array, "strcasecmp") );
+var_dump( array_diff_uassoc($boolean_indx_array, $input_array, "strcasecmp") );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_uassoc() : usage variation ***
+
+-- Testing array_diff_key() function with float indexed array --
+array(5) {
+ [0]=>
+ string(1) "0"
+ [1]=>
+ string(1) "1"
+ [-10]=>
+ string(3) "-10"
+ ["true"]=>
+ int(1)
+ ["false"]=>
+ int(0)
+}
+array(2) {
+ [1]=>
+ string(5) "boolT"
+ [0]=>
+ string(5) "boolF"
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_uassoc_variation12.phpt b/ext/standard/tests/array/array_diff_uassoc_variation12.phpt
new file mode 100644
index 000000000..9d48231a3
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_uassoc_variation12.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test array_diff_uassoc() function : usage variation - Passing null,unset and undefined variable indexed array
+--FILE--
+<?php
+/* Prototype : array array_diff_uassoc(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Computes the difference of arrays with additional index check which is performed by a
+ * user supplied callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_uassoc() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$input_array = array(10 => '10', "" => '');
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$input_arrays = array(
+ 'null indexed' => array(NULL => NULL, null => null),
+ 'undefined indexed' => array(@$undefined_var => @$undefined_var),
+ 'unset indexed' => array(@$unset_var => @$unset_var),
+);
+
+foreach($input_arrays as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_diff_uassoc($input_array, $value, "strcasecmp") );
+ var_dump( array_diff_uassoc($value, $input_array, "strcasecmp") );
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_uassoc() : usage variation ***
+
+--null indexed--
+array(1) {
+ [10]=>
+ string(2) "10"
+}
+array(0) {
+}
+
+--undefined indexed--
+array(1) {
+ [10]=>
+ string(2) "10"
+}
+array(0) {
+}
+
+--unset indexed--
+array(1) {
+ [10]=>
+ string(2) "10"
+}
+array(0) {
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_uassoc_variation13.phpt b/ext/standard/tests/array/array_diff_uassoc_variation13.phpt
new file mode 100644
index 000000000..92194262a
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_uassoc_variation13.phpt
@@ -0,0 +1,68 @@
+--TEST--
+Test array_diff_uassoc() function : usage variations - arrays containing referenced variables
+--FILE--
+<?php
+/* Prototype : array array_diff_uassoc(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Computes the difference of arrays with additional index check which is performed by a
+ * user supplied callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_uassoc() : usage variation ***\n";
+
+//Initialize variables
+$ref_var = 'a';
+$array1 = array('a', $ref_var);
+$array2 = array('a' => 1, &$ref_var);
+
+echo "\n-- Testing array_diff_uassoc() function with referenced variable \$ref_var has value '$ref_var' --\n";
+var_dump( array_diff_uassoc($array1, $array2, "strcasecmp") );
+var_dump( array_diff_uassoc($array2, $array1, "strcasecmp") );
+
+// re-assign reference variable to different value
+$ref_var = 10.00;
+echo "\n-- Testing array_diff_uassoc() function with referenced variable \$ref_var value changed to $ref_var --\n";
+var_dump( array_diff_uassoc($array1, $array2, "strcasecmp") );
+var_dump( array_diff_uassoc($array2, $array1, "strcasecmp") );
+
+//When array are refenced
+$array2 = &$array1;
+echo "\n-- Testing array_diff_uassoc() function when \$array2 is referenced to \$array1 --\n";
+var_dump( array_diff_uassoc($array1, $array2, "strcasecmp") );
+var_dump( array_diff_uassoc($array2, $array1, "strcasecmp") );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_uassoc() : usage variation ***
+
+-- Testing array_diff_uassoc() function with referenced variable $ref_var has value 'a' --
+array(1) {
+ [1]=>
+ string(1) "a"
+}
+array(1) {
+ ["a"]=>
+ int(1)
+}
+
+-- Testing array_diff_uassoc() function with referenced variable $ref_var value changed to 10 --
+array(2) {
+ [0]=>
+ string(1) "a"
+ [1]=>
+ string(1) "a"
+}
+array(2) {
+ ["a"]=>
+ int(1)
+ [0]=>
+ &float(10)
+}
+
+-- Testing array_diff_uassoc() function when $array2 is referenced to $array1 --
+array(0) {
+}
+array(0) {
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_uassoc_variation14.phpt b/ext/standard/tests/array/array_diff_uassoc_variation14.phpt
new file mode 100644
index 000000000..4ff5a90a0
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_uassoc_variation14.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Test array_diff_uassoc() function : usage variation -Passing classWithoutToString (handling fatal error) to callback
+--FILE--
+<?php
+/* Prototype : array array_diff_uassoc(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Computes the difference of arrays with additional index check which is performed by a
+ * user supplied callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_uassoc() : usage variation ***\n";
+
+//Initialize array
+$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
+$array2 = array("a" => "green", "yellow", "red");
+
+class classWithoutToString
+{
+}
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+$value = new classWithoutToString();
+var_dump( array_diff_uassoc($array1, $array2, $value) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_uassoc() : usage variation ***
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 2 - array_diff_uassoc(): Not a valid callback , %s(%d)
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_uassoc_variation2.phpt b/ext/standard/tests/array/array_diff_uassoc_variation2.phpt
new file mode 100644
index 000000000..4ecf4455b
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_uassoc_variation2.phpt
@@ -0,0 +1,244 @@
+--TEST--
+Test array_diff_uassoc() function : usage variation -Passing unexpected values to second argument
+--FILE--
+<?php
+/* Prototype : array array_diff_uassoc(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Computes the difference of arrays with additional index check which is performed by a
+ * user supplied callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_uassoc() : usage variation ***\n";
+
+//Initialize variables
+$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
+
+function key_compare_func($a, $b)
+{
+ if ($a === $b) {
+ return 0;
+ }
+ return ($a > $b)? 1:-1;
+}
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//resource variable
+$fp = fopen(__FILE__, "r");
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource data
+ 'resource' => $fp,
+);
+
+// loop through each element of the array for arr2
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_diff_uassoc($array1, $value, "key_compare_func") );
+};
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_uassoc() : usage variation ***
+
+--int 0--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--resource--
+
+Warning: array_diff_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_diff_uassoc_variation3.phpt b/ext/standard/tests/array/array_diff_uassoc_variation3.phpt
new file mode 100644
index 000000000..0246f9455
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_uassoc_variation3.phpt
@@ -0,0 +1,256 @@
+--TEST--
+Test array_diff_uassoc() function : usage variation -Passing unexpected values to callback argument
+--FILE--
+<?php
+/* Prototype : array array_diff_uassoc(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Computes the difference of arrays with additional index check which is performed by a
+ * user supplied callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_uassoc() : usage variation ***\n";
+
+//Initialize array
+$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
+$array2 = array("a" => "green", "yellow", "red");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//resource variable
+$fp = fopen(__FILE__, "r");
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource data
+ 'resource' => $fp,
+);
+
+// loop through each element of the array for key_comp_func
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_diff_uassoc($array1, $array2, $value) );
+};
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_uassoc() : usage variation ***
+
+--int 0--
+
+Warning: array_diff_uassoc(): Not a valid callback 0 in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_diff_uassoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_diff_uassoc(): Not a valid callback 12345 in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_diff_uassoc(): Not a valid callback -12345 in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_diff_uassoc(): Not a valid callback 10.5 in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_diff_uassoc(): Not a valid callback -10.5 in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_diff_uassoc(): Not a valid callback 123456789000 in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_diff_uassoc(): Not a valid callback -123456789000 in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_diff_uassoc(): Not a valid callback 0.5 in %s on line %d
+NULL
+
+--empty array--
+
+Warning: array_diff_uassoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--int indexed array--
+
+Warning: array_diff_uassoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--associative array--
+
+Warning: array_diff_uassoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--nested arrays--
+
+Warning: array_diff_uassoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_diff_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_diff_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_diff_uassoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_diff_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_diff_uassoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_diff_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_diff_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_diff_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_diff_uassoc(): Not a valid callback string in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_diff_uassoc(): Not a valid callback string in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_diff_uassoc(): Not a valid callback sTrInG in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_diff_uassoc(): Not a valid callback hello world in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_diff_uassoc(): Not a valid callback Class A object in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_diff_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_diff_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--resource--
+
+Warning: array_diff_uassoc(): Not a valid callback Resource id #5 in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_uassoc_variation4.phpt b/ext/standard/tests/array/array_diff_uassoc_variation4.phpt
new file mode 100644
index 000000000..ab8744981
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_uassoc_variation4.phpt
@@ -0,0 +1,246 @@
+--TEST--
+Test array_diff_uassoc() function : usage variation -Passing unexpected values as third optional argument
+--FILE--
+<?php
+/* Prototype : array array_diff_uassoc(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Computes the difference of arrays with additional index check which is performed by a
+ * user supplied callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_uassoc() : usage variation ***\n";
+
+//Initialize variables
+$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
+$array2 = array("a" => "green", "yellow", "red");
+
+
+function key_compare_func($a, $b)
+{
+ if ($a === $b) {
+ return 0;
+ }
+ return ($a > $b)? 1:-1;
+}
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//resource variable
+$fp = fopen(__FILE__, "r");
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource data
+ 'resource' => $fp,
+);
+
+// loop through each element of the array for arr2
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_diff_uassoc($array1, $array2, $value, "key_compare_func") );
+};
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_uassoc() : usage variation ***
+
+--int 0--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--resource--
+
+Warning: array_diff_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_uassoc_variation5.phpt b/ext/standard/tests/array/array_diff_uassoc_variation5.phpt
new file mode 100644
index 000000000..c35b2ebd9
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_uassoc_variation5.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Test array_diff_uassoc() function : usage variation - Comparing integers and floating point numbers
+--FILE--
+<?php
+/* Prototype : array array_diff_uassoc(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Computes the difference of arrays with additional index check which is performed by a
+ * user supplied callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_uassoc() : usage variation ***\n";
+
+//Initialize variables
+$arr_default_int = array(1, 2, 3, 4);
+$arr_float = array(0 => 1.00, 1.00 => 2.00, 2.00 => 3.00, 3.00 => 4.00);
+
+
+function key_compare_func($key1, $key2)
+{
+ if ($key1 === $key2) {
+ return 0;
+ }
+ return ($key1 > $key2)? 1:-1;
+}
+
+echo "\n-- Result of comparing integers and floating point numbers --\n";
+var_dump( array_diff_uassoc($arr_default_int, $arr_float, "key_compare_func") );
+var_dump( array_diff_uassoc($arr_float, $arr_default_int, "key_compare_func") );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_uassoc() : usage variation ***
+
+-- Result of comparing integers and floating point numbers --
+array(0) {
+}
+array(0) {
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_uassoc_variation6.phpt b/ext/standard/tests/array/array_diff_uassoc_variation6.phpt
new file mode 100644
index 000000000..ad4e8ffda
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_uassoc_variation6.phpt
@@ -0,0 +1,58 @@
+--TEST--
+Test array_diff_uassoc() function : usage variation - Comparing floating points with strings having integers and float
+--FILE--
+<?php
+/* Prototype : array array_diff_uassoc(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Computes the difference of arrays with additional index check which is performed by a
+ * user supplied callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_uassoc() : usage variation ***\n";
+
+//Initialize variables
+$arr_float = array(0 => 1.00, 1.00 => 2.00);
+$arr_string_int = array('1', '2');
+$arr_string_float = array('0' => '1.00', '1.00' => '2.00');
+
+function key_compare_func($key1, $key2)
+{
+ if ($key1 === $key2) {
+ return 0;
+ }
+ return ($key1 > $key2)? 1:-1;
+}
+
+echo "\n-- Result of comparing floating points and strings containing integers --\n";
+var_dump( array_diff_uassoc($arr_float, $arr_string_int, "key_compare_func") );
+var_dump( array_diff_uassoc($arr_string_int, $arr_float, "key_compare_func") );
+
+echo "\n-- Result of comparing floating points and strings containing floating point --\n";
+var_dump( array_diff_uassoc($arr_float, $arr_string_float, "key_compare_func") );
+var_dump( array_diff_uassoc($arr_string_float, $arr_float, "key_compare_func") );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_uassoc() : usage variation ***
+
+-- Result of comparing floating points and strings containing integers --
+array(0) {
+}
+array(0) {
+}
+
+-- Result of comparing floating points and strings containing floating point --
+array(2) {
+ [0]=>
+ float(1)
+ [1]=>
+ float(2)
+}
+array(2) {
+ [0]=>
+ string(4) "1.00"
+ ["1.00"]=>
+ string(4) "2.00"
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_uassoc_variation7.phpt b/ext/standard/tests/array/array_diff_uassoc_variation7.phpt
new file mode 100644
index 000000000..da2030cf1
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_uassoc_variation7.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test array_diff_uassoc() function : usage variation - Comparing strings containing integers and float
+--FILE--
+<?php
+/* Prototype : array array_diff_uassoc(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Computes the difference of arrays with additional index check which is performed by a
+ * user supplied callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_uassoc() : usage variation ***\n";
+
+//Initialize variables
+$arr_string_int = array('1', '2');
+$arr_string_float = array('0' => '1.00', '1.00' => '2.00');
+
+function key_compare_func($key1, $key2)
+{
+ if ($key1 === $key2) {
+ return 0;
+ }
+ return ($key1 > $key2)? 1:-1;
+}
+
+echo "\n-- Result of comparing strings containing integers and strings containing floating points --\n";
+var_dump( array_diff_uassoc($arr_string_int, $arr_string_float, "key_compare_func") );
+var_dump( array_diff_uassoc($arr_string_float, $arr_string_int, "key_compare_func") );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_uassoc() : usage variation ***
+
+-- Result of comparing strings containing integers and strings containing floating points --
+array(2) {
+ [0]=>
+ string(1) "1"
+ [1]=>
+ string(1) "2"
+}
+array(2) {
+ [0]=>
+ string(4) "1.00"
+ ["1.00"]=>
+ string(4) "2.00"
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_uassoc_variation8.phpt b/ext/standard/tests/array/array_diff_uassoc_variation8.phpt
new file mode 100644
index 000000000..d450def21
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_uassoc_variation8.phpt
@@ -0,0 +1,62 @@
+--TEST--
+Test array_diff_uassoc() function : usage variation - Comparing integers with strings containing integers and float
+--FILE--
+<?php
+/* Prototype : array array_diff_uassoc(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Computes the difference of arrays with additional index check which is performed by a
+ * user supplied callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_uassoc() : usage variation ***\n";
+
+//Initialize variables
+$arr_default_int = array(1, 2, 3);
+$arr_string_int = array('1', '2');
+$arr_string_float = array('0' => '1.00', '1.00' => '2.00');
+
+function key_compare_func($key1, $key2)
+{
+ if ($key1 === $key2) {
+ return 0;
+ }
+ return ($key1 > $key2)? 1:-1;
+}
+
+echo "\n-- Result of comparing integers and strings containing an integers --\n";
+var_dump( array_diff_uassoc($arr_default_int, $arr_string_int, "key_compare_func") );
+var_dump( array_diff_uassoc($arr_string_int, $arr_default_int, "key_compare_func") );
+
+echo "\n-- Result of comparing integers and strings containing floating points --\n";
+var_dump( array_diff_uassoc($arr_default_int, $arr_string_float, "key_compare_func") );
+var_dump( array_diff_uassoc($arr_string_float, $arr_default_int, "key_compare_func") );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_uassoc() : usage variation ***
+
+-- Result of comparing integers and strings containing an integers --
+array(1) {
+ [2]=>
+ int(3)
+}
+array(0) {
+}
+
+-- Result of comparing integers and strings containing floating points --
+array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+}
+array(2) {
+ [0]=>
+ string(4) "1.00"
+ ["1.00"]=>
+ string(4) "2.00"
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_uassoc_variation9.phpt b/ext/standard/tests/array/array_diff_uassoc_variation9.phpt
new file mode 100644
index 000000000..72746bb90
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_uassoc_variation9.phpt
@@ -0,0 +1,62 @@
+--TEST--
+Test array_diff_uassoc() function : usage variation - Passing integer indexed array
+--FILE--
+<?php
+/* Prototype : array array_diff_uassoc(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Computes the difference of arrays with additional index check which is performed by a
+ * user supplied callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_uassoc() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$input_array = array(10 => 10, 12 => 12);
+
+$input_arrays = array(
+ 'decimal indexed' => array(10 => 10, -17 => -17),
+ 'octal indexed' => array( 012 => 10, -011 => -011,),
+ 'hexa indexed' => array(0xA => 10, -0x7 => -0x7 ),
+);
+
+foreach($input_arrays as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_diff_uassoc($input_array, $value, "strcasecmp") );
+ var_dump( array_diff_uassoc($value, $input_array, "strcasecmp") );
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_uassoc() : usage variation ***
+
+--decimal indexed--
+array(1) {
+ [12]=>
+ int(12)
+}
+array(1) {
+ [-17]=>
+ int(-17)
+}
+
+--octal indexed--
+array(1) {
+ [12]=>
+ int(12)
+}
+array(1) {
+ [-9]=>
+ int(-9)
+}
+
+--hexa indexed--
+array(1) {
+ [12]=>
+ int(12)
+}
+array(1) {
+ [-7]=>
+ int(-7)
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_ukey_error.phpt b/ext/standard/tests/array/array_diff_ukey_error.phpt
new file mode 100644
index 000000000..d96324fea
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_ukey_error.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Test array_diff_ukey() function : error conditions
+--FILE--
+<?php
+/* Prototype : array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Returns the entries of arr1 that have keys which are not present in any of the others arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_ukey() : error conditions ***\n";
+
+// Initialize
+$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
+$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
+$extra_arg = 10;
+
+function key_compare_func($key1, $key2)
+{
+ if ($key1 == $key2) {
+ return 0;
+ }
+ return ($key1 > $key2)? 1:-1;
+}
+
+//Test array_diff_ukey with one more than the expected number of arguments
+echo "\n-- Testing array_diff_ukey() function with more than expected no. of arguments --\n";
+var_dump( array_diff_ukey($array1, $array2, 'key_compare_func', $extra_arg) );
+
+// Testing array_diff_ukey with one less than the expected number of arguments
+echo "\n-- Testing array_diff_ukey() function with less than expected no. of arguments --\n";
+var_dump( array_diff_ukey($array1, $array2) );
+
+// Testing array_diff_ukey with one less than the expected number of arguments
+echo "\n-- Testing array_diff_ukey() function with no arguments --\n";
+var_dump( array_diff_ukey() );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_ukey() : error conditions ***
+
+-- Testing array_diff_ukey() function with more than expected no. of arguments --
+
+Warning: array_diff_ukey(): Not a valid callback 10 in %s on line %d
+NULL
+
+-- Testing array_diff_ukey() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for array_diff_ukey() in %s on line %d
+NULL
+
+-- Testing array_diff_ukey() function with no arguments --
+
+Warning: Wrong parameter count for array_diff_ukey() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_ukey_variation1.phpt b/ext/standard/tests/array/array_diff_ukey_variation1.phpt
new file mode 100644
index 000000000..9a849e0eb
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_ukey_variation1.phpt
@@ -0,0 +1,318 @@
+--TEST--
+Test array_diff_ukey() function : usage variation - Passing unexpected values to first argument
+--FILE--
+<?php
+/* Prototype : array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Returns the entries of arr1 that have keys which are not present in any of the others arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_ukey() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
+$array3 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
+
+function key_compare_func($key1, $key2)
+{
+ if ($key1 == $key2) {
+ return 0;
+ }
+ return ($key1 > $key2)? 1:-1;
+}
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//resource variable
+$fp = fopen(__FILE__, "r");
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource data
+ 'resource' => $fp,
+);
+
+// loop through each element of the array for arr1
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_diff_ukey($value, $array2, 'key_compare_func') );
+ var_dump( array_diff_ukey($value, $array2, $array3, 'key_compare_func') );
+};
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_ukey() : usage variation ***
+
+--int 0--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--resource--
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_ukey_variation10.phpt b/ext/standard/tests/array/array_diff_ukey_variation10.phpt
new file mode 100644
index 000000000..7658ed379
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_ukey_variation10.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Test array_diff_ukey() function : usage variation - Passing non-existing function name to callback
+--FILE--
+<?php
+/* Prototype : array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Returns the entries of arr1 that have keys which are not present in any of the others arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_ukey() : usage variation ***\n";
+
+//Initialize variables
+$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
+$array2 = array("a" => "green", "yellow", "red");
+
+//function name within double quotes
+var_dump( array_diff_ukey($array1, $array1, "unknown_function") );
+
+//function name within single quotes
+var_dump( array_diff_ukey($array1, $array1, 'unknown_function') );
+
+//function name without quotes
+var_dump( array_diff_ukey($array1, $array1, unknown_function) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_ukey() : usage variation ***
+
+Warning: array_diff_ukey(): Not a valid callback unknown_function in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Not a valid callback unknown_function in %s on line %d
+NULL
+
+Notice: Use of undefined constant unknown_function - assumed 'unknown_function' in %s on line %d
+
+Warning: array_diff_ukey(): Not a valid callback unknown_function in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_ukey_variation11.phpt b/ext/standard/tests/array/array_diff_ukey_variation11.phpt
new file mode 100644
index 000000000..4882e729b
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_ukey_variation11.phpt
@@ -0,0 +1,53 @@
+--TEST--
+Test array_diff_ukey() function : usage variation - Passing class without string to callback (Handling fatal error)
+--SKIPIF--
+<?php
+$php_version = phpversion();
+if(stristr($php_version, "5.2" ) == FALSE){
+ die('skip Test is applicable only for PHP5.2');
+}
+?>
+--FILE--
+<?php
+/* Prototype : array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Returns the entries of arr1 that have keys which are not present in any of the others arguments. User supplied function is used for comparing the keys. This function is like array_udiff() but works on the keys instead of the values. The associativity is preserved.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_ukey() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$array1 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
+$array2 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
+$array3 = array(1, 2, 3, 4, 5);
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+
+class classWithoutToString
+{
+}
+
+$value = new classWithoutToString();
+
+var_dump( array_diff_ukey($array1, $array2, $value) );
+var_dump( array_diff_ukey($array1, $array2, $array3, $value) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_ukey() : usage variation ***
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 2 - array_diff_ukey(): Not a valid callback , %s(%d)
+NULL
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 2 - array_diff_ukey(): Not a valid callback , %s(%d)
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_diff_ukey_variation2.phpt b/ext/standard/tests/array/array_diff_ukey_variation2.phpt
new file mode 100644
index 000000000..19eab4d62
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_ukey_variation2.phpt
@@ -0,0 +1,322 @@
+--TEST--
+Test array_diff_ukey() function : usage variation - Passing unexpected values to second argument
+--FILE--
+<?php
+/* Prototype : array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Returns the entries of arr1 that have keys which are not present in any of the others arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_ukey() : usage variation ***\n";
+
+// Initialize function arguments not being substituted (if any)
+$array1 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
+$array3 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
+
+
+//Initialize key_comp_func of type callback
+function key_compare_func($key1, $key2)
+{
+ if ($key1 == $key2) {
+ return 0;
+ }
+ return ($key1 > $key2)? 1:-1;
+}
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//resource variable
+$fp = fopen(__FILE__, "r");
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource data
+ 'resource' => $fp,
+
+);
+
+// loop through each element of the array for arr2
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_diff_ukey($array1, $value, 'key_compare_func') );
+ var_dump( array_diff_ukey($array1, $value, $array3, 'key_compare_func') );
+};
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_ukey() : usage variation ***
+
+--int 0--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--resource--
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_ukey_variation3.phpt b/ext/standard/tests/array/array_diff_ukey_variation3.phpt
new file mode 100644
index 000000000..f7a2ea862
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_ukey_variation3.phpt
@@ -0,0 +1,240 @@
+--TEST--
+Test array_diff_ukey() function : usage variation - Passing unexpected values to third optional argument
+--FILE--
+<?php
+/* Prototype : array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Returns the entries of arr1 that have keys which are not present in any of the others arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_ukey() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$array1 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
+$array2 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
+
+function key_compare_func($key1, $key2)
+{
+ if ($key1 == $key2) {
+ return 0;
+ }
+ return ($key1 > $key2)? 1:-1;
+}
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// resource variable
+$fp = fopen(__FILE__, "r");
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource data
+ 'resource' => $fp,
+);
+
+// loop through each element of the array for key_comp_func
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_diff_ukey($array1, $array2, $value, 'key_compare_func') );
+};
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_ukey() : usage variation ***
+
+--int 0--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--resource--
+
+Warning: array_diff_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_ukey_variation4.phpt b/ext/standard/tests/array/array_diff_ukey_variation4.phpt
new file mode 100644
index 000000000..5f9457edf
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_ukey_variation4.phpt
@@ -0,0 +1,236 @@
+--TEST--
+Test array_diff_ukey() function : usage variation - Passing unexpected values to callback argument
+--FILE--
+<?php
+/* Prototype : array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Returns the entries of arr1 that have keys which are not present in any of the others arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_ukey() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$array1 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
+$array2 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
+$array3 = array(1, 2, 3, 4, 5);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//resource variable
+$fp = fopen(__FILE__, "r");
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource data
+ 'resource' => $fp,
+);
+
+// loop through each element of the array for ...
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_diff_ukey($array1, $array2, $value) );
+ var_dump( array_diff_ukey($array1, $array2, $array3, $value) );
+};
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_ukey() : usage variation ***
+
+--int 0--
+
+Warning: array_diff_ukey(): Not a valid callback 0 in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Not a valid callback 0 in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_diff_ukey(): Not a valid callback 1 in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Not a valid callback 1 in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_diff_ukey(): Not a valid callback 12345 in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Not a valid callback 12345 in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_diff_ukey(): Not a valid callback -12345 in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Not a valid callback -12345 in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_diff_ukey(): Not a valid callback 10.5 in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Not a valid callback 10.5 in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_diff_ukey(): Not a valid callback -10.5 in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Not a valid callback -10.5 in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_diff_ukey(): Not a valid callback 123456789000 in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Not a valid callback 123456789000 in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_diff_ukey(): Not a valid callback -123456789000 in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Not a valid callback -123456789000 in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_diff_ukey(): Not a valid callback 0.5 in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Not a valid callback 0.5 in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_diff_ukey(): Not a valid callback in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_diff_ukey(): Not a valid callback in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_diff_ukey(): Not a valid callback 1 in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Not a valid callback 1 in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_diff_ukey(): Not a valid callback in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Not a valid callback in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_diff_ukey(): Not a valid callback 1 in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Not a valid callback 1 in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_diff_ukey(): Not a valid callback in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Not a valid callback in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_diff_ukey(): Not a valid callback Class A object in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Not a valid callback Class A object in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_diff_ukey(): Not a valid callback in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Not a valid callback in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_diff_ukey(): Not a valid callback in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Not a valid callback in %s on line %d
+NULL
+
+--resource--
+
+Warning: array_diff_ukey(): Not a valid callback Resource id #5 in %s on line %d
+NULL
+
+Warning: array_diff_ukey(): Not a valid callback Resource id #5 in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_ukey_variation5.phpt b/ext/standard/tests/array/array_diff_ukey_variation5.phpt
new file mode 100644
index 000000000..fb0c97af0
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_ukey_variation5.phpt
@@ -0,0 +1,54 @@
+--TEST--
+Test array_diff_ukey() function : usage variation - Passing multi-dimensional array
+--FILE--
+<?php
+/* Prototype : array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Returns the entries of arr1 that have keys which are not present in any of the others arguments. User supplied function is used for comparing the keys. This function is like array_udiff() but works on the keys instead of the values. The associativity is preserved.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_ukey() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$array1 = array(
+
+ 'first' => array('blue' => 1, 'red' => 2),
+
+ 'second' => array('yellow' => 7),
+
+ 'third' => array(0 => 'zero'),
+);
+
+$array2 = array (
+
+ 'first' => array('blue' => 1, 'red' => 2,),
+
+ 'second' => array('cyan' => 8),
+
+ 'fourth' => array(2 => 'two'),
+);
+
+echo "\n-- Testing array_diff_ukey() function with multi dimensional array --\n";
+var_dump( array_diff_ukey($array1, $array2, 'strcasecmp') );
+var_dump( array_diff_ukey($array2, $array1, 'strcasecmp') );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_ukey() : usage variation ***
+
+-- Testing array_diff_ukey() function with multi dimensional array --
+array(1) {
+ ["third"]=>
+ array(1) {
+ [0]=>
+ string(4) "zero"
+ }
+}
+array(1) {
+ ["fourth"]=>
+ array(1) {
+ [2]=>
+ string(3) "two"
+ }
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_ukey_variation6.phpt b/ext/standard/tests/array/array_diff_ukey_variation6.phpt
new file mode 100644
index 000000000..2188a88dd
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_ukey_variation6.phpt
@@ -0,0 +1,65 @@
+--TEST--
+Test array_diff_ukey() function : usage variation - Passing integer indexed array
+--FILE--
+<?php
+/* Prototype : array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Returns the entries of arr1 that have keys which are not present in any of the others arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_ukey() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$input_array = array(-07 => '-07', 0xA => '0xA');
+
+$input_arrays = array(
+ 'decimal indexed' => array(10 => '10', '-17' => '-17'),
+ 'octal indexed' => array(-011 => '-011', 012 => '012'),
+ 'hexa indexed' => array(0x12 => '0x12', -0x7 => '-0x7', ),
+);
+
+function key_compare_func($key1, $key2)
+{
+ return strcasecmp($key1, $key2);
+}
+
+foreach($input_arrays as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_diff_ukey($value, $input_array, 'key_compare_func') );
+ var_dump( array_diff_ukey($input_array, $value, 'key_compare_func') );
+}
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_ukey() : usage variation ***
+
+--decimal indexed--
+array(1) {
+ [-17]=>
+ string(3) "-17"
+}
+array(1) {
+ [-7]=>
+ string(3) "-07"
+}
+
+--octal indexed--
+array(1) {
+ [-9]=>
+ string(4) "-011"
+}
+array(1) {
+ [-7]=>
+ string(3) "-07"
+}
+
+--hexa indexed--
+array(1) {
+ [18]=>
+ string(4) "0x12"
+}
+array(1) {
+ [10]=>
+ string(3) "0xA"
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_ukey_variation7.phpt b/ext/standard/tests/array/array_diff_ukey_variation7.phpt
new file mode 100644
index 000000000..88888d6b3
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_ukey_variation7.phpt
@@ -0,0 +1,42 @@
+--TEST--
+Test array_diff_ukey() function : usage variation - Passing float indexed array
+--FILE--
+<?php
+/* Prototype : array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Returns the entries of arr1 that have keys which are not present in any of the others arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_ukey() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$input_array = array(0 => '0', 10 => '10', -10 => '-10', 20 =>'20');
+$float_indx_array = array(0.0 => '0.0', 10.5 => '10.5', -30.5 => '-30.5');
+
+function key_compare_func($key1, $key2)
+{
+ return strcasecmp($key1, $key2);
+}
+
+echo "\n-- Testing array_diff_ukey() function with float indexed array --\n";
+
+var_dump( array_diff_ukey($float_indx_array, $input_array, 'key_compare_func') );
+var_dump( array_diff_ukey($input_array, $float_indx_array, 'key_compare_func') );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_ukey() : usage variation ***
+
+-- Testing array_diff_ukey() function with float indexed array --
+array(1) {
+ [-30]=>
+ string(5) "-30.5"
+}
+array(2) {
+ [-10]=>
+ string(3) "-10"
+ [20]=>
+ string(2) "20"
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_ukey_variation8.phpt b/ext/standard/tests/array/array_diff_ukey_variation8.phpt
new file mode 100644
index 000000000..9bb949899
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_ukey_variation8.phpt
@@ -0,0 +1,42 @@
+--TEST--
+Test array_diff_ukey() function : usage variation - Passing boolean indexed array
+--FILE--
+<?php
+/* Prototype : array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Returns the entries of arr1 that have keys which are not present in any of the others arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_ukey() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$input_array = array(0 => '0', 1 => '1', -10 => '-10', 'true' => 1, 'false' => 0);
+$boolean_indx_array = array(true => 'boolt', false => 'boolf', TRUE => 'boolT', FALSE => 'boolF');
+
+function key_compare_func($key1, $key2)
+{
+ return strcasecmp($key1, $key2);
+}
+
+echo "\n-- Testing array_diff_ukey() function with boolean indexed array --\n";
+
+var_dump( array_diff_ukey($boolean_indx_array, $input_array, 'key_compare_func') );
+var_dump( array_diff_ukey($input_array, $boolean_indx_array, 'key_compare_func') );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_ukey() : usage variation ***
+
+-- Testing array_diff_ukey() function with boolean indexed array --
+array(0) {
+}
+array(3) {
+ [-10]=>
+ string(3) "-10"
+ ["true"]=>
+ int(1)
+ ["false"]=>
+ int(0)
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_diff_ukey_variation9.phpt b/ext/standard/tests/array/array_diff_ukey_variation9.phpt
new file mode 100644
index 000000000..024f5f424
--- /dev/null
+++ b/ext/standard/tests/array/array_diff_ukey_variation9.phpt
@@ -0,0 +1,59 @@
+--TEST--
+Test array_diff_ukey() function : usage variation - Passing null,unset and undefined variable indexed array
+--FILE--
+<?php
+/* Prototype : array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Returns the entries of arr1 that have keys which are not present in any of the others arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_diff_ukey() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$input_array = array(10 => '10', "" => 'empty');
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$input_arrays = array(
+ 'null indexed' => array(NULL => 'null 1', null => 'null 2'),
+ 'undefined indexed' => array(@$undefined_var => 'undefined'),
+ 'unset indexed' => array(@$unset_var => 'unset'),
+);
+
+foreach($input_arrays as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_diff_ukey($value, $input_array, 'strcasecmp') );
+ var_dump( array_diff_ukey($input_array, $value, 'strcasecmp') );
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_diff_ukey() : usage variation ***
+
+--null indexed--
+array(0) {
+}
+array(1) {
+ [10]=>
+ string(2) "10"
+}
+
+--undefined indexed--
+array(0) {
+}
+array(1) {
+ [10]=>
+ string(2) "10"
+}
+
+--unset indexed--
+array(0) {
+}
+array(1) {
+ [10]=>
+ string(2) "10"
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_fill_keys_error.phpt b/ext/standard/tests/array/array_fill_keys_error.phpt
new file mode 100644
index 000000000..31a03e7f5
--- /dev/null
+++ b/ext/standard/tests/array/array_fill_keys_error.phpt
@@ -0,0 +1,45 @@
+--TEST--
+Test array_fill_keys() function : error conditions
+--FILE--
+<?php
+/* Prototype : proto array array_fill_keys(array keys, mixed val)
+ * Description: Create an array using the elements of the first parameter as keys each initialized to val
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_fill_keys() : error conditions ***\n";
+
+$keys = array(1, 2);
+$val = 1;
+$extra_arg = 10;
+
+echo "\n-- Testing array_fill_keys() function with more than expected no. of arguments --\n";
+var_dump( array_fill_keys($keys, $val, $extra_arg) );
+
+echo "\n-- Testing array_fill_keys() function with less than expected no. of arguments --\n";
+var_dump( array_fill_keys($keys) );
+
+echo "\n-- Testing array_fill_keys() function with no argumets --\n";
+var_dump( array_fill_keys() );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing array_fill_keys() : error conditions ***
+
+-- Testing array_fill_keys() function with more than expected no. of arguments --
+
+Warning: array_fill_keys() expects exactly 2 parameters, 3 given in %sarray_fill_keys_error.php on line %d
+NULL
+
+-- Testing array_fill_keys() function with less than expected no. of arguments --
+
+Warning: array_fill_keys() expects exactly 2 parameters, 1 given in %sarray_fill_keys_error.php on line %d
+NULL
+
+-- Testing array_fill_keys() function with no argumets --
+
+Warning: array_fill_keys() expects exactly 2 parameters, 0 given in %sarray_fill_keys_error.php on line %d
+NULL
+Done
diff --git a/ext/standard/tests/array/array_fill_keys_variation1.phpt b/ext/standard/tests/array/array_fill_keys_variation1.phpt
new file mode 100644
index 000000000..9fab89d7f
--- /dev/null
+++ b/ext/standard/tests/array/array_fill_keys_variation1.phpt
@@ -0,0 +1,79 @@
+--TEST--
+Test array_fill_keys() function : variation of parameter
+--FILE--
+<?php
+/* Prototype : proto array array_fill_keys(array keys, mixed val)
+ * Description: Create an array using the elements of the first parameter as keys each initialized to val
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+
+echo "*** Testing array_fill_keys() : parameter variations ***\n";
+
+$nullVal = null;
+$simpleStr = "simple";
+$fp = fopen(__FILE__, "r");
+$emptyArr = array();
+$bool = false;
+$float = 2.4;
+
+class classA {
+ public function __toString() { return "Class A object"; }
+}
+$obj = new classA();
+
+
+echo "\n-- Testing array_fill_keys() function with empty arguments --\n";
+var_dump( array_fill_keys($emptyArr, $nullVal) );
+
+echo "\n-- Testing array_fill_keys() function with keyed array --\n";
+$keyedArray = array("two" => 2, "strk1" => "strv1", 4, $simpleStr);
+var_dump( array_fill_keys($keyedArray, $simpleStr) );
+
+echo "\n-- Testing array_fill_keys() function with mixed array --\n";
+$mixedArray = array($fp, $obj, $simpleStr, $emptyArr, 2, $bool, $float);
+var_dump( array_fill_keys($mixedArray, $simpleStr) );
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing array_fill_keys() : parameter variations ***
+
+-- Testing array_fill_keys() function with empty arguments --
+array(0) {
+}
+
+-- Testing array_fill_keys() function with keyed array --
+array(4) {
+ [2]=>
+ string(6) "simple"
+ ["strv1"]=>
+ string(6) "simple"
+ [4]=>
+ string(6) "simple"
+ ["simple"]=>
+ string(6) "simple"
+}
+
+-- Testing array_fill_keys() function with mixed array --
+
+Notice: Array to string conversion in %sarray_fill_keys_variation1.php on line %d
+array(7) {
+ ["Resource id #%d"]=>
+ string(6) "simple"
+ ["Class A object"]=>
+ string(6) "simple"
+ ["simple"]=>
+ string(6) "simple"
+ ["Array"]=>
+ string(6) "simple"
+ [2]=>
+ string(6) "simple"
+ [""]=>
+ string(6) "simple"
+ ["2.4"]=>
+ string(6) "simple"
+}
+Done \ No newline at end of file
diff --git a/ext/standard/tests/array/array_fill_keys_variation2.phpt b/ext/standard/tests/array/array_fill_keys_variation2.phpt
new file mode 100644
index 000000000..4f3681aaf
--- /dev/null
+++ b/ext/standard/tests/array/array_fill_keys_variation2.phpt
@@ -0,0 +1,81 @@
+--TEST--
+Test array_fill_keys() function : variation of parameter
+--FILE--
+<?php
+/* Prototype : proto array array_fill_keys(array keys, mixed val)
+ * Description: Create an array using the elements of the first parameter as keys each initialized to val
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+/* Testing with reference types for the arguments */
+
+echo "*** Testing array_fill_keys() : parameter variations ***\n";
+
+$nullVal = null;
+$simpleStr = "simple";
+$refString = &$simpleStr;
+$fp = fopen(__FILE__, "r");
+$emptyArr = array();
+$bool = false;
+$float = 2.4;
+
+class classA {
+ public function __toString() { return "Class A object"; }
+}
+$obj = new classA();
+
+
+echo "\n-- Testing array_fill_keys() function with reference value --\n";
+$keyedArray = array("one", "two");
+var_dump(array_fill_keys($keyedArray, $refString));
+
+echo "\n-- Testing array_fill_keys() function with reference keys --\n";
+$refKeys = array("one", &$simpleStr);
+$res = array_fill_keys($refKeys, $simpleStr);
+var_dump($res);
+$simpleStr = "bob";
+var_dump($res);
+
+
+echo "\n-- Testing array_fill_keys() function with reference array input --\n";
+$newArray = array("one", "two");
+$refArray = &$newArray;
+var_dump(array_fill_keys($refArray, $simpleStr));
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing array_fill_keys() : parameter variations ***
+
+-- Testing array_fill_keys() function with reference value --
+array(2) {
+ ["one"]=>
+ string(6) "simple"
+ ["two"]=>
+ string(6) "simple"
+}
+
+-- Testing array_fill_keys() function with reference keys --
+array(2) {
+ ["one"]=>
+ string(6) "simple"
+ ["simple"]=>
+ string(6) "simple"
+}
+array(2) {
+ ["one"]=>
+ string(6) "simple"
+ ["simple"]=>
+ string(6) "simple"
+}
+
+-- Testing array_fill_keys() function with reference array input --
+array(2) {
+ ["one"]=>
+ string(3) "bob"
+ ["two"]=>
+ string(3) "bob"
+}
+Done \ No newline at end of file
diff --git a/ext/standard/tests/array/array_fill_keys_variation3.phpt b/ext/standard/tests/array/array_fill_keys_variation3.phpt
new file mode 100644
index 000000000..00f926803
--- /dev/null
+++ b/ext/standard/tests/array/array_fill_keys_variation3.phpt
@@ -0,0 +1,54 @@
+--TEST--
+Test array_fill_keys() function : variation of parameter
+--FILE--
+<?php
+/* Prototype : proto array array_fill_keys(array keys, mixed val)
+ * Description: Create an array using the elements of the first parameter as keys each initialized to val
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+/* Testing with unexpected argument types */
+
+echo "*** Testing array_fill_keys() : parameter variations ***\n";
+
+$simpleStr = "simple";
+$fp = fopen(__FILE__, "r");
+$bool = false;
+$float = 2.4;
+$array = array("one", "two");
+$nullVal = null;
+
+echo "\n-- Testing array_fill_keys() function with both wrong arguments --\n";
+var_dump( array_fill_keys($bool, $float) );
+
+echo "\n-- Testing array_fill_keys() function with resources --\n";
+var_dump( array_fill_keys($array, $fp) );
+
+echo "\n-- Testing array_fill_keys() function with null --\n";
+var_dump( array_fill_keys($nullVal, $simpleStr) );
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing array_fill_keys() : parameter variations ***
+
+-- Testing array_fill_keys() function with both wrong arguments --
+
+Warning: array_fill_keys() expects parameter 1 to be array, boolean given in %sarray_fill_keys_variation3.php on line %d
+NULL
+
+-- Testing array_fill_keys() function with resources --
+array(2) {
+ ["one"]=>
+ resource(%d) of type (stream)
+ ["two"]=>
+ resource(%d) of type (stream)
+}
+
+-- Testing array_fill_keys() function with null --
+
+Warning: array_fill_keys() expects parameter 1 to be array, null given in %sarray_fill_keys_variation3.php on line %d
+NULL
+Done \ No newline at end of file
diff --git a/ext/standard/tests/array/array_fill_keys_variation4.phpt b/ext/standard/tests/array/array_fill_keys_variation4.phpt
new file mode 100644
index 000000000..209443db0
--- /dev/null
+++ b/ext/standard/tests/array/array_fill_keys_variation4.phpt
@@ -0,0 +1,91 @@
+--TEST--
+Test array_fill_keys() function : variation of parameter
+--FILE--
+<?php
+/* Prototype : proto array array_fill_keys(array keys, mixed val)
+ * Description: Create an array using the elements of the first parameter as keys each initialized to val
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+/* Testing with unexpected argument types */
+
+echo "*** Testing array_fill_keys() : parameter variations ***\n";
+
+$fp = fopen(__FILE__, "r");
+$bool = false;
+$float = 2.4;
+$array = array("one");
+$nullVal = null;
+$unset_var = 10;
+unset ($unset_var);
+
+
+class classA {
+ public function __toString() { return "Class A object"; }
+}
+$obj = new classA();
+
+echo "\n-- Testing array_fill_keys() function with float --\n";
+var_dump( array_fill_keys($array, $float) );
+
+echo "\n-- Testing array_fill_keys() function with null --\n";
+var_dump( array_fill_keys($array, $nullVal) );
+
+echo "\n-- Testing array_fill_keys() function with object --\n";
+var_dump( array_fill_keys($array, $obj) );
+
+echo "\n-- Testing array_fill_keys() function with boolean --\n";
+var_dump( array_fill_keys($array, $bool) );
+
+echo "\n-- Testing array_fill_keys() function with resource --\n";
+var_dump( array_fill_keys($array, $fp) );
+
+echo "\n-- Testing array_fill_keys() function with unset var --\n";
+var_dump( array_fill_keys($array, $unset_var) );
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing array_fill_keys() : parameter variations ***
+
+-- Testing array_fill_keys() function with float --
+array(1) {
+ ["one"]=>
+ float(2.4)
+}
+
+-- Testing array_fill_keys() function with null --
+array(1) {
+ ["one"]=>
+ NULL
+}
+
+-- Testing array_fill_keys() function with object --
+array(1) {
+ ["one"]=>
+ object(classA)#%d (0) {
+ }
+}
+
+-- Testing array_fill_keys() function with boolean --
+array(1) {
+ ["one"]=>
+ bool(false)
+}
+
+-- Testing array_fill_keys() function with resource --
+array(1) {
+ ["one"]=>
+ resource(%d) of type (stream)
+}
+
+-- Testing array_fill_keys() function with unset var --
+
+Notice: Undefined variable: unset_var in %sarray_fill_keys_variation4.php on line %d
+array(1) {
+ ["one"]=>
+ NULL
+}
+Done \ No newline at end of file
diff --git a/ext/standard/tests/array/array_intersect_assoc_variation5.phpt b/ext/standard/tests/array/array_intersect_assoc_variation5.phpt
index b85dd7cee..7d8e09eb2 100644
--- a/ext/standard/tests/array/array_intersect_assoc_variation5.phpt
+++ b/ext/standard/tests/array/array_intersect_assoc_variation5.phpt
@@ -20,17 +20,6 @@ echo "*** Testing array_intersect_assoc() : assoc array with diff keys to \$arr1
$unset_var = 10;
unset ($unset_var);
-// get a resource variable
-$fp = fopen(__FILE__, "r");
-
-// get a class
-class classA
-{
- public function __toString(){
- return "Class A object";
- }
-}
-
// get a heredoc string
$heredoc = <<<EOT
Hello world
@@ -61,18 +50,18 @@ $arrays = array (
array("hello", $heredoc => "string"), // heredoc
// array with object, unset variable and resource variable
-/*10*/ array(new classA() => 11, @$unset_var => "hello", $fp => 'resource'),
+/*10*/ array(@$unset_var => "hello"),
// array with mixed keys
-/*11*/ array('hello' => 1, new classA() => 2, "fruit" => 2.2,
- $fp => 'resource', 133 => "int", 444.432 => "float",
+/*11*/ array('hello' => 1, "fruit" => 2.2,
+ 133 => "int", 444.432 => "float",
@$unset_var => "unset", $heredoc => "heredoc")
);
// array to be passsed to $arr2 argument
$arr2 = array(0 => 0, 2 => "float", 4 => "f3", 33333333 => "f4",
"\tHello" => 111, 2.2, 'color', "Hello world" => "string",
- "pen\n" => 33, new classA() => 11, 133 => "int");
+ "pen\n" => 33, 133 => "int");
// loop through each sub-array within $arrrays to check the behavior of array_intersect_assoc()
$iterator = 1;
@@ -88,23 +77,10 @@ foreach($arrays as $arr1) {
$iterator++;
}
-// close the file resource used
-fclose($fp);
-
echo "Done";
?>
--EXPECTF--
*** Testing array_intersect_assoc() : assoc array with diff keys to $arr1 argument ***
-
-Warning: Illegal offset type in %s on line %d
-
-Warning: Illegal offset type in %s on line %d
-
-Warning: Illegal offset type in %s on line %d
-
-Warning: Illegal offset type in %s on line %d
-
-Warning: Illegal offset type in %s on line %d
-- Iteration 1 --
array(0) {
}
diff --git a/ext/standard/tests/array/array_intersect_assoc_variation6.phpt b/ext/standard/tests/array/array_intersect_assoc_variation6.phpt
index ed96d3276..75806225c 100644
--- a/ext/standard/tests/array/array_intersect_assoc_variation6.phpt
+++ b/ext/standard/tests/array/array_intersect_assoc_variation6.phpt
@@ -20,17 +20,6 @@ echo "*** Testing array_intersect_assoc() : assoc array with diff keys to \$arr2
$unset_var = 10;
unset ($unset_var);
-// get a resource variable
-$fp = fopen(__FILE__, "r");
-
-// get a class
-class classA
-{
- public function __toString(){
- return "Class A object";
- }
-}
-
// get a heredoc string
$heredoc = <<<EOT
Hello world
@@ -60,19 +49,19 @@ $arrays = array (
"\v\fworld" => 2.2, "pen\n" => 33),
array("hello", $heredoc => "string"), // heredoc
- // array with object, unset variable and resource variable
-/*10*/ array(new classA() => 11, @$unset_var => "hello", $fp => 'resource'),
+ // array with unset variable
+/*10*/ array( @$unset_var => "hello"),
// array with mixed keys
-/*11*/ array('hello' => 1, new classA() => 2, "fruit" => 2.2,
- $fp => 'resource', 133 => "int", 444.432 => "float",
+/*11*/ array('hello' => 1, "fruit" => 2.2,
+ 133 => "int", 444.432 => "float",
@$unset_var => "unset", $heredoc => "heredoc")
);
// array to be passsed to $arr1 argument
$arr1 = array(0 => 0, 2 => "float", 4 => "f3", 33333333 => "f4",
"\tHello" => 111, 2.2, 'color', "Hello world" => "string",
- "pen\n" => 33, new classA() => 11, 133 => "int");
+ "pen\n" => 33, 133 => "int");
// loop through each sub-array within $arrrays to check the behavior of array_intersect_assoc()
$iterator = 1;
@@ -88,23 +77,10 @@ foreach($arrays as $arr2) {
$iterator++;
}
-// close the file resource used
-fclose($fp);
-
echo "Done";
?>
--EXPECTF--
*** Testing array_intersect_assoc() : assoc array with diff keys to $arr2 argument ***
-
-Warning: Illegal offset type in %s on line %d
-
-Warning: Illegal offset type in %s on line %d
-
-Warning: Illegal offset type in %s on line %d
-
-Warning: Illegal offset type in %s on line %d
-
-Warning: Illegal offset type in %s on line %d
-- Iteration 1 --
array(0) {
}
diff --git a/ext/standard/tests/array/array_intersect_key_error.phpt b/ext/standard/tests/array/array_intersect_key_error.phpt
new file mode 100644
index 000000000..78f074fe4
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_key_error.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test array_intersect_key() function : error conditions
+--FILE--
+<?php
+/* Prototype : array array_intersect_key(array arr1, array arr2 [, array ...])
+ * Description: Returns the entries of arr1 that have keys which are present in all the other arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_key() : error conditions ***\n";
+
+//Initialise function arguments
+$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
+
+// Testing array_intersect_key with one less than the expected number of arguments
+echo "\n-- Testing array_intersect_key() function with less than expected no. of arguments --\n";
+var_dump( array_intersect_key($array1) );
+
+// Testing array_intersect_key with one less than the expected number of arguments
+echo "\n-- Testing array_intersect_key() function with no arguments --\n";
+var_dump( array_intersect_key() );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_key() : error conditions ***
+
+-- Testing array_intersect_key() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for array_intersect_key() in %s on line %d
+NULL
+
+-- Testing array_intersect_key() function with no arguments --
+
+Warning: Wrong parameter count for array_intersect_key() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_intersect_key_variation1.phpt b/ext/standard/tests/array/array_intersect_key_variation1.phpt
new file mode 100644
index 000000000..c28394ba8
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_key_variation1.phpt
@@ -0,0 +1,315 @@
+--TEST--
+Test array_intersect_key() function : usage variation - Passing unexpected values to first argument
+--FILE--
+<?php
+/* Prototype : array array_intersect_key(array arr1, array arr2 [, array ...])
+ * Description: Returns the entries of arr1 that have keys which are present in all the other arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_key() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$array2 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
+$array3 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//resource variable
+$fp = fopen(__FILE__, "r");
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource data
+ 'resource var' => $fp,
+);
+
+// loop through each element of the array for arr1
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_intersect_key($value, $array2) );
+ var_dump( array_intersect_key($value, $array2, $array3) );
+}
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_key() : usage variation ***
+
+--int 0--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+--resource var--
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #1 is not an array in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_intersect_key_variation2.phpt b/ext/standard/tests/array/array_intersect_key_variation2.phpt
new file mode 100644
index 000000000..59b769be6
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_key_variation2.phpt
@@ -0,0 +1,314 @@
+--TEST--
+Test array_intersect_key() function : usage variation - Passing unexpected values to second argument
+--FILE--
+<?php
+/* Prototype : array array_intersect_key(array arr1, array arr2 [, array ...])
+ * Description: Returns the entries of arr1 that have keys which are present in all the other arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_key() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
+$array3 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//resource variable
+$fp = fopen(__FILE__, "r");
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource data
+ 'resource var' => $fp,
+);
+
+// loop through each element of the array for arr2
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_intersect_key($array1, $value) );
+ var_dump( array_intersect_key($array1, $value, $array3) );
+}
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_key() : usage variation ***
+
+--int 0--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+--resource var--
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_key(): Argument #2 is not an array in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_intersect_key_variation3.phpt b/ext/standard/tests/array/array_intersect_key_variation3.phpt
new file mode 100644
index 000000000..8fd3d3c77
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_key_variation3.phpt
@@ -0,0 +1,235 @@
+--TEST--
+Test array_intersect_key() function : usage variation - Passing unexpected values to optional argument
+--FILE--
+<?php
+/* Prototype : array array_intersect_key(array arr1, array arr2 [, array ...])
+ * Description: Returns the entries of arr1 that have keys which are present in all the other arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_key() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
+$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//resource variable
+$fp = fopen(__FILE__, "r");
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource data
+ 'resource var' => $fp,
+);
+
+// loop through each element of the array for arr2
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_intersect_key($array1, $array2, $value) );
+}
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_key() : usage variation ***
+
+--int 0--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+
+--resource var--
+
+Warning: array_intersect_key(): Argument #3 is not an array in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_intersect_key_variation4.phpt b/ext/standard/tests/array/array_intersect_key_variation4.phpt
new file mode 100644
index 000000000..1223d2153
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_key_variation4.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test array_intersect_key() function : usage variation - Passing integer indexed array
+--FILE--
+<?php
+/* Prototype : array array_intersect_key(array arr1, array arr2 [, array ...])
+ * Description: Returns the entries of arr1 that have keys which are present in all the other arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_key() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$input_array = array(0 => '0', -1 => '-1' , 02 => 'two', -07 => '-07', 0xA => '0xA', -0xC => '-0xc');
+
+$input_arrays = array(
+ 'decimal indexed' => array(10 => '10', '-17' => '-17'),
+ 'octal indexed' => array(-011 => '-011', 012 => '012'),
+ 'hexa indexed' => array(0x12 => '0x12', -0x7 => '-0x7', ),
+);
+
+foreach($input_arrays as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_intersect_key($input_array, $value) );
+ var_dump( array_intersect_key($value, $input_array ) );
+}
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_key() : usage variation ***
+
+--decimal indexed--
+array(1) {
+ [10]=>
+ string(3) "0xA"
+}
+array(1) {
+ [10]=>
+ string(2) "10"
+}
+
+--octal indexed--
+array(1) {
+ [10]=>
+ string(3) "0xA"
+}
+array(1) {
+ [10]=>
+ string(3) "012"
+}
+
+--hexa indexed--
+array(1) {
+ [-7]=>
+ string(3) "-07"
+}
+array(1) {
+ [-7]=>
+ string(4) "-0x7"
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_intersect_key_variation5.phpt b/ext/standard/tests/array/array_intersect_key_variation5.phpt
new file mode 100644
index 000000000..c286de6e3
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_key_variation5.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Test array_intersect_key() function : usage variation - Passing float indexed array
+--FILE--
+<?php
+/* Prototype : array array_intersect_key(array arr1, array arr2 [, array ...])
+ * Description: Returns the entries of arr1 that have keys which are present in all the other arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_key() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$input_array = array(0 => '0', 10 => '10' , -10 => '-10');
+$float_indx_array = array(0.0 => '0.0', 10.5 => '10.5' , -10.5 => '-10.5', 0.5 => '0.5');
+
+echo "\n-- Testing array_intersect_key() function with float indexed array --\n";
+var_dump( array_intersect_key($input_array, $float_indx_array) );
+var_dump( array_intersect_key($float_indx_array,$input_array ) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_key() : usage variation ***
+
+-- Testing array_intersect_key() function with float indexed array --
+array(3) {
+ [0]=>
+ string(1) "0"
+ [10]=>
+ string(2) "10"
+ [-10]=>
+ string(3) "-10"
+}
+array(3) {
+ [0]=>
+ string(3) "0.5"
+ [10]=>
+ string(4) "10.5"
+ [-10]=>
+ string(5) "-10.5"
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_intersect_key_variation6.phpt b/ext/standard/tests/array/array_intersect_key_variation6.phpt
new file mode 100644
index 000000000..823b0707d
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_key_variation6.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test array_intersect_key() function : usage variation - Passing boolean indexed array
+--FILE--
+<?php
+/* Prototype : array array_intersect_key(array arr1, array arr2 [, array ...])
+ * Description: Returns the entries of arr1 that have keys which are present in all the other arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_key() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$input_array = array(0 => '0', 1 => '1' , -10 => '-10');
+$boolean_indx_array = array(true => 'boolt', false => 'boolf', TRUE => 'boolT', FALSE => 'boolF');
+
+echo "\n-- Testing array_intersect_key() function with boolean indexed array --\n";
+var_dump( array_intersect_key($input_array, $boolean_indx_array) );
+var_dump( array_intersect_key($boolean_indx_array,$input_array ) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_key() : usage variation ***
+
+-- Testing array_intersect_key() function with boolean indexed array --
+array(2) {
+ [0]=>
+ string(1) "0"
+ [1]=>
+ string(1) "1"
+}
+array(2) {
+ [1]=>
+ string(5) "boolT"
+ [0]=>
+ string(5) "boolF"
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_intersect_key_variation7.phpt b/ext/standard/tests/array/array_intersect_key_variation7.phpt
new file mode 100644
index 000000000..fe4446a24
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_key_variation7.phpt
@@ -0,0 +1,63 @@
+--TEST--
+Test array_intersect_key() function : usage variation - Passing null,unset and undefeined variable indexed array
+--FILE--
+<?php
+/* Prototype : array array_intersect_key(array arr1, array arr2 [, array ...])
+ * Description: Returns the entries of arr1 that have keys which are present in all the other arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_key() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$input_array = array(0 => '0', 1 => '1' , -10 => '-10' , null => 'null');
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$input_arrays = array(
+ 'null indexed' => array(NULL => 'null 1', null => 'null 2'),
+ 'undefined indexed' => array(@$undefined_var => 'undefined'),
+ 'unset indexed' => array(@$unset_var => 'unset'),
+);
+
+foreach($input_arrays as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_intersect_key($input_array, $value) );
+ var_dump( array_intersect_key($value,$input_array ) );
+}
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_key() : usage variation ***
+
+--null indexed--
+array(1) {
+ [""]=>
+ string(4) "null"
+}
+array(1) {
+ [""]=>
+ string(6) "null 2"
+}
+
+--undefined indexed--
+array(1) {
+ [""]=>
+ string(4) "null"
+}
+array(1) {
+ [""]=>
+ string(9) "undefined"
+}
+
+--unset indexed--
+array(1) {
+ [""]=>
+ string(4) "null"
+}
+array(1) {
+ [""]=>
+ string(5) "unset"
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_intersect_key_variation8.phpt b/ext/standard/tests/array/array_intersect_key_variation8.phpt
new file mode 100644
index 000000000..2b889b596
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_key_variation8.phpt
@@ -0,0 +1,64 @@
+--TEST--
+Test array_intersect_key() function : usage variation - Passing Multi dimensional array
+--FILE--
+<?php
+/* Prototype : array array_intersect_key(array arr1, array arr2 [, array ...])
+ * Description: Returns the entries of arr1 that have keys which are present in all the other arguments.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_key() : usage variation ***\n";
+
+/// Initialise function arguments not being substituted (if any)
+$array1 = array(
+
+ 'first' => array('blue' => 1, 'red' => 2),
+
+ 'second' => array('yellow' => 7),
+
+ 'third' => array(0 =>'zero'),
+);
+
+$array2 = array (
+
+ 'first' => array('blue' => 1, 'red' => 2,),
+
+ 'second' => array('cyan' => 8),
+
+ 'fourth' => array(2 => 'two'),
+);
+var_dump( array_intersect_key($array1, $array2) );
+var_dump( array_intersect_key($array2,$array1 ) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_key() : usage variation ***
+array(2) {
+ ["first"]=>
+ array(2) {
+ ["blue"]=>
+ int(1)
+ ["red"]=>
+ int(2)
+ }
+ ["second"]=>
+ array(1) {
+ ["yellow"]=>
+ int(7)
+ }
+}
+array(2) {
+ ["first"]=>
+ array(2) {
+ ["blue"]=>
+ int(1)
+ ["red"]=>
+ int(2)
+ }
+ ["second"]=>
+ array(1) {
+ ["cyan"]=>
+ int(8)
+ }
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_intersect_uassoc_error.phpt b/ext/standard/tests/array/array_intersect_uassoc_error.phpt
new file mode 100644
index 000000000..80e1d2a1a
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_uassoc_error.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test array_intersect_uassoc() function : error conditions
+--FILE--
+<?php
+/* Prototype : array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)
+ * Description: Computes the intersection of arrays with additional index check, compares indexes by a callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_uassoc() : error conditions ***\n";
+
+// Initialise function arguments
+$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
+$array2 = array("a" => "green", "yellow", "red");
+$array3 = array("a"=>"green", "brown");
+$extra_arg = 10;
+
+//Callback function
+function key_compare_func($key1, $key2) {
+ if ($key1 === $key2) {
+ return 0;
+ }
+ return ($a > $b) ? 1 : -1;
+}
+
+//Test array_intersect_uassoc with one more than the expected number of arguments
+echo "\n-- Testing array_intersect_uassoc() function with more than expected no. of arguments --\n";
+var_dump( array_intersect_uassoc($array1, $array2, 'key_compare_func',$extra_arg) );
+
+// Testing array_intersect_uassoc with one less than the expected number of arguments
+echo "\n-- Testing array_intersect_uassoc() function with less than expected no. of arguments --\n";
+var_dump( array_intersect_uassoc($array1, $array2) );
+var_dump( array_intersect_uassoc($array1, $array2, $array3) );
+
+// Testing array_intersect_uassoc with no arguments
+echo "\n-- Testing array_intersect_uassoc() function with no arguments --\n";
+var_dump( array_intersect_uassoc() );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_uassoc() : error conditions ***
+
+-- Testing array_intersect_uassoc() function with more than expected no. of arguments --
+
+Warning: array_intersect_uassoc(): Not a valid callback 10 in %s on line %d
+NULL
+
+-- Testing array_intersect_uassoc() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for array_intersect_uassoc() in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Not a valid callback Array in %s on line %d
+NULL
+
+-- Testing array_intersect_uassoc() function with no arguments --
+
+Warning: Wrong parameter count for array_intersect_uassoc() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_intersect_uassoc_variation1.phpt b/ext/standard/tests/array/array_intersect_uassoc_variation1.phpt
new file mode 100644
index 000000000..86dec03d2
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_uassoc_variation1.phpt
@@ -0,0 +1,323 @@
+--TEST--
+Test array_intersect_uassoc() function : usage variation - Passing unexpected values to first argument
+--FILE--
+<?php
+/* Prototype : array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)
+ * Description: Computes the intersection of arrays with additional index check, compares indexes by a callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_uassoc() : usage variation ***\n";
+
+// Initialise function arguments
+$array2 = array("a" => "green", "yellow", "red");
+$array3 = array("a"=>"green", "brown");
+
+//Callback function
+function key_compare_func($a, $b) {
+ if ($a === $b) {
+ return 0;
+ }
+ return ($a > $b) ? 1 : -1;
+}
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//resource variable
+$fp = fopen(__FILE__, "r");
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource data
+ 'resource' => $fp,
+);
+
+// loop through each element of the array for arr1
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_intersect_uassoc($value, $array2, 'key_compare_func') );
+ var_dump( array_intersect_uassoc($value, $array2, $array3, 'key_compare_func') );
+};
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+
+*** Testing array_intersect_uassoc() : usage variation ***
+
+--int 0--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--resource--
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_intersect_uassoc_variation10.phpt b/ext/standard/tests/array/array_intersect_uassoc_variation10.phpt
new file mode 100644
index 000000000..aa0c82d15
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_uassoc_variation10.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Test array_intersect_uassoc() function : usage variation - Passing class/object methods to callback
+--FILE--
+<?php
+/* Prototype : array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)
+ * Description: Computes the intersection of arrays with additional index check, compares indexes by a callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_uassoc() : usage variation ***\n";
+
+//Initialize variables
+$array1 = array("a" => "green", "c" => "blue", "red");
+$array2 = array("a" => "green", "yellow", "red");
+// define some class with method
+class MyClass
+{
+ static function static_compare_func($a, $b) {
+ return strcasecmp($a, $b);
+ }
+
+ public function class_compare_func($a, $b) {
+ return strcasecmp($a, $b);
+ }
+
+}
+
+echo "\n-- Testing array_intersect_uassoc() function using class with static method as callback --\n";
+var_dump( array_intersect_uassoc($array1, $array2, array('MyClass','static_compare_func')) );
+var_dump( array_intersect_uassoc($array1, $array2, 'MyClass::static_compare_func'));
+
+echo "\n-- Testing array_intersect_uassoc() function using class with regular method as callback --\n";
+$obj = new MyClass();
+var_dump( array_intersect_uassoc($array1, $array2, array($obj,'class_compare_func')) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_uassoc() : usage variation ***
+
+-- Testing array_intersect_uassoc() function using class with static method as callback --
+array(1) {
+ ["a"]=>
+ string(5) "green"
+}
+array(1) {
+ ["a"]=>
+ string(5) "green"
+}
+
+-- Testing array_intersect_uassoc() function using class with regular method as callback --
+array(1) {
+ ["a"]=>
+ string(5) "green"
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_intersect_uassoc_variation11.phpt b/ext/standard/tests/array/array_intersect_uassoc_variation11.phpt
new file mode 100644
index 000000000..ba3776e20
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_uassoc_variation11.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test array_intersect_uassoc() function : usage variation - Passing class without string to callback (Handling fatal error)
+--SKIPIF--
+<?php
+$php_version = phpversion();
+if(stristr($php_version, "5.2" ) == FALSE){
+ die('skip Test is applicable only for PHP5.2');
+}
+?>
+--FILE--
+<?php
+/* Prototype : array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)
+ * Description: Computes the intersection of arrays with additional index check, compares indexes by a callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_uassoc() : usage variation ***\n";
+
+// Initialise function arguments
+$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
+$array2 = array("a" => "green", "yellow", "red");
+$array3 = array("a"=>"green", "brown");
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+
+class classWithoutToString
+{
+}
+
+$value = new classWithoutToString();
+
+var_dump( array_intersect_uassoc($array1, $array2, $value) );
+var_dump( array_intersect_uassoc($array1, $array2, $array3, $value) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_uassoc() : usage variation ***
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 2 - array_intersect_uassoc(): Not a valid callback , %s(%d)
+NULL
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 2 - array_intersect_uassoc(): Not a valid callback , %s(%d)
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_intersect_uassoc_variation2.phpt b/ext/standard/tests/array/array_intersect_uassoc_variation2.phpt
new file mode 100644
index 000000000..51341bb45
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_uassoc_variation2.phpt
@@ -0,0 +1,323 @@
+--TEST--
+Test array_intersect_uassoc() function : usage variation - Passing unexpected values to second argument
+--FILE--
+<?php
+/* Prototype : array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)
+ * Description: Computes the intersection of arrays with additional index check, compares indexes by a callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_uassoc() : usage variation ***\n";
+
+// Initialise function arguments
+$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
+$array3 = array("a"=>"green", "brown");
+
+//Callback function
+function key_compare_func($a, $b) {
+ if ($a === $b) {
+ return 0;
+ }
+ return ($a > $b) ? 1 : -1;
+}
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//resource variable
+$fp = fopen(__FILE__, "r");
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource data
+ 'resource' => $fp,
+);
+
+// loop through each element of the array for arr1
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_intersect_uassoc($array1, $value, 'key_compare_func') );
+ var_dump( array_intersect_uassoc($array1, $value, $array3, 'key_compare_func') );
+};
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+
+*** Testing array_intersect_uassoc() : usage variation ***
+
+--int 0--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+--resource--
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Argument #2 is not an array in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_intersect_uassoc_variation3.phpt b/ext/standard/tests/array/array_intersect_uassoc_variation3.phpt
new file mode 100644
index 000000000..f596e9c32
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_uassoc_variation3.phpt
@@ -0,0 +1,244 @@
+--TEST--
+Test array_intersect_uassoc() function : usage variation - Passing unexpected values to optional third argument
+--FILE--
+<?php
+/* Prototype : array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)
+ * Description: Computes the intersection of arrays with additional index check, compares indexes by a callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_uassoc() : usage variation ***\n";
+
+// Initialise function arguments
+$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
+$array2 = array("a" => "green", "yellow", "red");
+
+//Callback function
+function key_compare_func($a, $b) {
+ if ($a === $b) {
+ return 0;
+ }
+ return ($a > $b) ? 1 : -1;
+}
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//resource variable
+$fp = fopen(__FILE__, "r");
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource data
+ 'resource' => $fp,
+);
+
+// loop through each element of the array for arr1
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_intersect_uassoc($array1, $array2, $value, 'key_compare_func') );
+};
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+
+*** Testing array_intersect_uassoc() : usage variation ***
+
+--int 0--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+
+--resource--
+
+Warning: array_intersect_uassoc(): Argument #3 is not an array in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_intersect_uassoc_variation4.phpt b/ext/standard/tests/array/array_intersect_uassoc_variation4.phpt
new file mode 100644
index 000000000..42a1755bf
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_uassoc_variation4.phpt
@@ -0,0 +1,244 @@
+--TEST--
+Test array_intersect_uassoc() function : usage variation - Passing unexpected values to mandatory third argument
+--FILE--
+<?php
+/* Prototype : array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)
+ * Description: Computes the intersection of arrays with additional index check, compares indexes by a callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_uassoc() : usage variation ***\n";
+
+// Initialise function arguments
+$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
+$array2 = array("a" => "green", "yellow", "red");
+$array3 = array("a"=>"green", "brown");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//resource variable
+$fp = fopen(__FILE__, "r");
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource data
+ 'resource' => $fp,
+);
+
+// loop through each element of the array for arr1
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_intersect_uassoc($array1, $array2, $value) );
+ var_dump( array_intersect_uassoc($array1, $array2, $array3, $value) );
+};
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_uassoc() : usage variation ***
+
+--int 0--
+
+Warning: array_intersect_uassoc(): Not a valid callback 0 in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Not a valid callback 0 in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_intersect_uassoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_intersect_uassoc(): Not a valid callback 12345 in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Not a valid callback 12345 in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_intersect_uassoc(): Not a valid callback -12345 in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Not a valid callback -12345 in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_intersect_uassoc(): Not a valid callback 10.5 in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Not a valid callback 10.5 in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_intersect_uassoc(): Not a valid callback -10.5 in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Not a valid callback -10.5 in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_intersect_uassoc(): Not a valid callback 123456789000 in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Not a valid callback 123456789000 in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_intersect_uassoc(): Not a valid callback -123456789000 in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Not a valid callback -123456789000 in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_intersect_uassoc(): Not a valid callback 0.5 in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Not a valid callback 0.5 in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_intersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_intersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_intersect_uassoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_intersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_intersect_uassoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_intersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_intersect_uassoc(): Not a valid callback Class A object in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Not a valid callback Class A object in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_intersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_intersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--resource--
+
+Warning: array_intersect_uassoc(): Not a valid callback Resource id #5 in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Not a valid callback Resource id #5 in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_intersect_uassoc_variation5.phpt b/ext/standard/tests/array/array_intersect_uassoc_variation5.phpt
new file mode 100644
index 000000000..0733eadf3
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_uassoc_variation5.phpt
@@ -0,0 +1,58 @@
+--TEST--
+Test array_intersect_ukey() function : usage variation - Intersection of integers with floats and strings.
+--FILE--
+<?php
+/* Prototype : array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)
+ * Description: Computes the intersection of arrays with additional index check, compares indexes by a callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_uassoc() : usage variation ***\n";
+
+//Initialize variables
+$arr_default_int = array(1, 2 );
+$arr_float = array(0 => 1.00, 1.00 => 2.00, 2.00 => 3.00);
+$arr_string = array('1', '2', '3');
+$arr_string_float = array('1.00', '2.00');
+
+function key_compare_func($a, $b)
+{
+ if ($a === $b) {
+ return 0;
+ }
+ return ($a > $b)? 1:-1;
+}
+
+echo "\n-- Result of integers and floating point intersection --\n";
+var_dump( array_intersect_uassoc($arr_default_int, $arr_float, "key_compare_func") );
+
+echo "\n-- Result of integers and strings containing integers intersection --\n";
+var_dump( array_intersect_uassoc($arr_default_int, $arr_string, "key_compare_func") );
+
+echo "\n-- Result of integers and strings containing floating points intersection --\n";
+var_dump( array_intersect_uassoc($arr_default_int, $arr_string_float, "key_compare_func") );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_uassoc() : usage variation ***
+
+-- Result of integers and floating point intersection --
+array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+}
+
+-- Result of integers and strings containing integers intersection --
+array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+}
+
+-- Result of integers and strings containing floating points intersection --
+array(0) {
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_intersect_uassoc_variation6.phpt b/ext/standard/tests/array/array_intersect_uassoc_variation6.phpt
new file mode 100644
index 000000000..55dd46d48
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_uassoc_variation6.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test array_intersect_uassoc() function : usage variation - Intersection of floating points with strings.
+--FILE--
+<?php
+/* Prototype : array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)
+ * Description: Computes the intersection of arrays with additional index check, compares indexes by a callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_uassoc() : usage variation ***\n";
+
+//Initialize variables
+$arr_float = array(0 => 1.00, 1.00 => 2.00);
+$arr_string = array('1', '2', '3');
+$arr_string_float = array('1.00', '2.00');
+
+function key_compare_func($a, $b)
+{
+ if ($a === $b) {
+ return 0;
+ }
+ return ($a > $b)? 1:-1;
+}
+
+echo "\n-- Result of floating points and strings containing integers intersection --\n";
+var_dump( array_intersect_uassoc($arr_float, $arr_string, "key_compare_func") );
+
+echo "\n-- Result of floating points and strings containing floating point intersection --\n";
+var_dump( array_intersect_uassoc($arr_float, $arr_string_float, "key_compare_func") );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_uassoc() : usage variation ***
+
+-- Result of floating points and strings containing integers intersection --
+array(2) {
+ [0]=>
+ float(1)
+ [1]=>
+ float(2)
+}
+
+-- Result of floating points and strings containing floating point intersection --
+array(0) {
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_intersect_uassoc_variation7.phpt b/ext/standard/tests/array/array_intersect_uassoc_variation7.phpt
new file mode 100644
index 000000000..7fa053a91
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_uassoc_variation7.phpt
@@ -0,0 +1,54 @@
+--TEST--
+Test array_intersect_uassoc() function : usage variation - Intersection of strings containing integers, float
+--FILE--
+<?php
+/* Prototype : array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)
+ * Description: Computes the intersection of arrays with additional index check, compares indexes by a callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_uassoc() : usage variation ***\n";
+
+//Initialize variables
+$arr1_string_int = array('1', '2');
+$arr2_string_int = array('1', '3');
+$arr1_string_float = array('1.00', '2.00');
+$arr2_string_float = array('1.00', '3.00');
+
+function key_compare_func($a, $b)
+{
+ if ($a === $b) {
+ return 0;
+ }
+ return ($a > $b)? 1:-1;
+}
+
+echo "\n-- Result of strings containing integers intersection --\n";
+var_dump( array_intersect_uassoc($arr1_string_int, $arr2_string_int, "key_compare_func") );
+
+echo "\n-- Result of strings containing floating points intersection --\n";
+var_dump( array_intersect_uassoc($arr1_string_float, $arr2_string_float, "key_compare_func") );
+
+echo "\n-- Result of strings containing integers and strings containing floating points intersection --\n";
+var_dump( array_intersect_uassoc($arr1_string_int, $arr2_string_float, "key_compare_func") );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_uassoc() : usage variation ***
+
+-- Result of strings containing integers intersection --
+array(1) {
+ [0]=>
+ string(1) "1"
+}
+
+-- Result of strings containing floating points intersection --
+array(1) {
+ [0]=>
+ string(4) "1.00"
+}
+
+-- Result of strings containing integers and strings containing floating points intersection --
+array(0) {
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_intersect_uassoc_variation8.phpt b/ext/standard/tests/array/array_intersect_uassoc_variation8.phpt
new file mode 100644
index 000000000..7b218f7fa
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_uassoc_variation8.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test array_intersect_uassoc() function : usage variation - arrays containing referenced variables
+--FILE--
+<?php
+/* Prototype : array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)
+ * Description: Computes the intersection of arrays with additional index check, compares indexes by a callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_uassoc() : usage variation ***\n";
+
+//Initialize variables
+$ref_var = 'a';
+$array1 = array('a', $ref_var);
+$array2 = array('a' => 1, &$ref_var);
+
+echo "\n-- Testing array_intersect_uassoc() function with referenced variable \$ref_var has value '$ref_var' --\n";
+var_dump( array_intersect_uassoc($array1, $array2, "strcasecmp") );
+
+// re-assign reference variable to different value
+$ref_var = 10;
+echo "\n-- Testing array_intersect_uassoc() function with referenced variable \$ref_var value changed to $ref_var --\n";
+var_dump( array_intersect_uassoc($array1, $array2, "strcasecmp") );
+
+//When array are referenced
+$array2 = &$array1;
+echo "\n-- Testing array_intersect_uassoc() function when \$array2 is referencd to \$array1 --\n";
+var_dump( array_intersect_uassoc($array1, $array2, "strcasecmp") );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_uassoc() : usage variation ***
+
+-- Testing array_intersect_uassoc() function with referenced variable $ref_var has value 'a' --
+array(1) {
+ [0]=>
+ string(1) "a"
+}
+
+-- Testing array_intersect_uassoc() function with referenced variable $ref_var value changed to 10 --
+array(0) {
+}
+
+-- Testing array_intersect_uassoc() function when $array2 is referencd to $array1 --
+array(2) {
+ [0]=>
+ string(1) "a"
+ [1]=>
+ string(1) "a"
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_intersect_uassoc_variation9.phpt b/ext/standard/tests/array/array_intersect_uassoc_variation9.phpt
new file mode 100644
index 000000000..c47980b6b
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_uassoc_variation9.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test array_intersect_uassoc() function : usage variation - Passing non-existing function name to callback
+--FILE--
+<?php
+/* Prototype : array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)
+ * Description: Computes the intersection of arrays with additional index check, compares indexes by a callback function
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_uassoc() : usage variation ***\n";
+
+//Initialize variables
+$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
+$array2 = array("a" => "green", "yellow", "red");
+
+//function name within double quotes
+var_dump( array_intersect_uassoc($array1, $array2, "unknown_function") );
+
+//function name within single quotes
+var_dump( array_intersect_uassoc($array1, $array2, 'unknown_function') );
+
+//function name without quotes
+var_dump( array_intersect_uassoc($array1, $array2, unknown_function) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_uassoc() : usage variation ***
+
+Warning: array_intersect_uassoc(): Not a valid callback unknown_function in %s on line %d
+NULL
+
+Warning: array_intersect_uassoc(): Not a valid callback unknown_function in %s on line %d
+NULL
+
+Notice: Use of undefined constant unknown_function - assumed 'unknown_function' in %s on line %d
+
+Warning: array_intersect_uassoc(): Not a valid callback unknown_function in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_intersect_ukey_error.phpt b/ext/standard/tests/array/array_intersect_ukey_error.phpt
new file mode 100644
index 000000000..1ae85f4ba
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_ukey_error.phpt
@@ -0,0 +1,56 @@
+--TEST--
+Test array_intersect_ukey() function : error conditions
+--FILE--
+<?php
+/* Prototype : array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)
+ * Description: Computes the intersection of arrays using a callback function on the keys for comparison.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_ukey() : error conditions ***\n";
+
+//Initialise arguments
+$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
+$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
+
+//Call back function
+function key_compare_func($key1, $key2)
+{
+ if ($key1 == $key2)
+ return 0;
+ else
+ return ($key1 > $key2)? 1:-1;
+}
+
+//Test array_intersect_ukey with one more than the expected number of arguments
+echo "\n-- Testing array_intersect_ukey() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( array_intersect_ukey($array1, $array2, 'key_compare_func',$extra_arg) );
+
+// Testing array_intersect_ukey with one less than the expected number of arguments
+echo "\n-- Testing array_intersect_ukey() function with less than expected no. of arguments --\n";
+var_dump( array_intersect_ukey($array1, $array2) );
+
+// Testing array_intersect_ukey with no arguments
+echo "\n-- Testing array_intersect_ukey() function with no arguments --\n";
+var_dump( array_intersect_ukey() );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_ukey() : error conditions ***
+
+-- Testing array_intersect_ukey() function with more than expected no. of arguments --
+
+Warning: array_intersect_ukey(): Not a valid callback 10 in %s on line %d
+NULL
+
+-- Testing array_intersect_ukey() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for array_intersect_ukey() in %s on line %d
+NULL
+
+-- Testing array_intersect_ukey() function with no arguments --
+
+Warning: Wrong parameter count for array_intersect_ukey() in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_intersect_ukey_variation1.phpt b/ext/standard/tests/array/array_intersect_ukey_variation1.phpt
new file mode 100644
index 000000000..701205780
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_ukey_variation1.phpt
@@ -0,0 +1,320 @@
+--TEST--
+Test array_intersect_ukey() function : usage variation - Passing unexpected values to first argument
+--FILE--
+<?php
+/* Prototype : array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)
+ * Description: Computes the intersection of arrays using a callback function on the keys for comparison.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_ukey() : usage variation ***\n";
+
+//Initialise arguments
+$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
+$array3 = array('green' => 5, 'cyan' => 8);
+
+//Call back function
+function key_compare_func($key1, $key2)
+{
+ if ($key1 == $key2)
+ return 0;
+ else
+ return ($key1 > $key2)? 1:-1;
+}
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//resource variable
+$fp = fopen(__FILE__, "r");
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource data
+ 'resource var' => $fp,
+);
+
+// loop through each element of the array for arr1
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_intersect_ukey($value, $array2, 'key_compare_func') );
+ var_dump( array_intersect_ukey($value, $array2, $array3, 'key_compare_func') );
+};
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_ukey() : usage variation ***
+
+--int 0--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+--resource var--
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #1 is not an array in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_intersect_ukey_variation10.phpt b/ext/standard/tests/array/array_intersect_ukey_variation10.phpt
new file mode 100644
index 000000000..b080eb230
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_ukey_variation10.phpt
@@ -0,0 +1,52 @@
+--TEST--
+Test array_intersect_ukey() function : usage variation - Passing class without string to callback (Handling fatal error)
+--SKIPIF--
+<?php
+$php_version = phpversion();
+if(stristr($php_version, "5.2" ) == FALSE){
+ die('skip Test is applicable only for PHP5.2');
+}
+?>
+--FILE--
+<?php
+/* Prototype : array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)
+ * Description: Computes the intersection of arrays using a callback function on the keys for comparison.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_uassoc() : usage variation ***\n";
+
+//Initialise arguments
+$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
+$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
+$array3 = array("a"=>"green", "cyan");
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+
+class classWithoutToString
+{
+}
+
+$value = new classWithoutToString();
+
+var_dump( array_intersect_ukey($array1, $array2, $value) );
+var_dump( array_intersect_ukey($array1, $array2, $array3, $value) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_uassoc() : usage variation ***
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 2 - array_intersect_ukey(): Not a valid callback , %s(%d)
+NULL
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 2 - array_intersect_ukey(): Not a valid callback , %s(%d)
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_intersect_ukey_variation2.phpt b/ext/standard/tests/array/array_intersect_ukey_variation2.phpt
new file mode 100644
index 000000000..b7a1b078f
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_ukey_variation2.phpt
@@ -0,0 +1,320 @@
+--TEST--
+Test array_intersect_ukey() function : usage variation - Passing unexpected values to second argument
+--FILE--
+<?php
+/* Prototype : array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)
+ * Description: Computes the intersection of arrays using a callback function on the keys for comparison.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_ukey() : usage variation ***\n";
+
+//Initialise arguments
+$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
+$array3 = array('green' => 5, 'cyan' => 8);
+
+//Call back function
+function key_compare_func($key1, $key2)
+{
+ if ($key1 == $key2)
+ return 0;
+ else
+ return ($key1 > $key2)? 1:-1;
+}
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//resource variable
+$fp = fopen(__FILE__, "r");
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource data
+ 'resource var' => $fp,
+);
+
+// loop through each element of the array for arr2
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_intersect_ukey($array1, $value, 'key_compare_func') );
+ var_dump( array_intersect_ukey($array1, $value, $array3, 'key_compare_func') );
+};
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_ukey() : usage variation ***
+
+--int 0--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+--resource var--
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #2 is not an array in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_intersect_ukey_variation3.phpt b/ext/standard/tests/array/array_intersect_ukey_variation3.phpt
new file mode 100644
index 000000000..f7a1c0b4b
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_ukey_variation3.phpt
@@ -0,0 +1,277 @@
+--TEST--
+Test array_intersect_ukey() function : usage variation - Passing unexpected values to callback argument
+--FILE--
+<?php
+/* Prototype : array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)
+ * Description: Computes the intersection of arrays using a callback function on the keys for comparison.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_ukey() : usage variation ***\n";
+
+//Initialise arguments
+$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
+$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
+$array3 = array('green' => 5, 'cyan' => 8);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//resource variable
+$fp = fopen(__FILE__, "r");
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource data
+ 'resource var' => $fp,
+);
+
+// loop through each element of the array for key_compare_func
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_intersect_ukey($array1, $array2, $value) );
+ var_dump( array_intersect_ukey($array1, $array2, $array3, $value) );
+};
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_ukey() : usage variation ***
+
+--int 0--
+
+Warning: array_intersect_ukey(): Not a valid callback 0 in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback 0 in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_intersect_ukey(): Not a valid callback 1 in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback 1 in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_intersect_ukey(): Not a valid callback 12345 in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback 12345 in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_intersect_ukey(): Not a valid callback -12345 in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback -12345 in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_intersect_ukey(): Not a valid callback 10.5 in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback 10.5 in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_intersect_ukey(): Not a valid callback -10.5 in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback -10.5 in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_intersect_ukey(): Not a valid callback 123456789000 in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback 123456789000 in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_intersect_ukey(): Not a valid callback -123456789000 in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback -123456789000 in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_intersect_ukey(): Not a valid callback 0.5 in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback 0.5 in %s on line %d
+NULL
+
+--empty array--
+
+Warning: array_intersect_ukey(): Not a valid callback Array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback Array in %s on line %d
+NULL
+
+--int indexed array--
+
+Warning: array_intersect_ukey(): Not a valid callback Array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback Array in %s on line %d
+NULL
+
+--associative array--
+
+Warning: array_intersect_ukey(): Not a valid callback Array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback Array in %s on line %d
+NULL
+
+--nested arrays--
+
+Warning: array_intersect_ukey(): Not a valid callback Array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback Array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_intersect_ukey(): Not a valid callback in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_intersect_ukey(): Not a valid callback in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_intersect_ukey(): Not a valid callback 1 in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback 1 in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_intersect_ukey(): Not a valid callback in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_intersect_ukey(): Not a valid callback 1 in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback 1 in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_intersect_ukey(): Not a valid callback in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_intersect_ukey(): Not a valid callback Class A object in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback Class A object in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_intersect_ukey(): Not a valid callback in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_intersect_ukey(): Not a valid callback in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback in %s on line %d
+NULL
+
+--resource var--
+
+Warning: array_intersect_ukey(): Not a valid callback Resource id #5 in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback Resource id #5 in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_intersect_ukey_variation4.phpt b/ext/standard/tests/array/array_intersect_ukey_variation4.phpt
new file mode 100644
index 000000000..88eff1e89
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_ukey_variation4.phpt
@@ -0,0 +1,321 @@
+--TEST--
+Test array_intersect_ukey() function : usage variation - Passing unexpected values to optional third argument
+--FILE--
+<?php
+/* Prototype : array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)
+ * Description: Computes the intersection of arrays using a callback function on the keys for comparison.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_ukey() : usage variation ***\n";
+
+//Initialise arguments
+$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
+$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
+$array4 = array('green' => 5, 'cyan' => 8);
+
+//Call back function
+function key_compare_func($key1, $key2)
+{
+ if ($key1 == $key2)
+ return 0;
+ else
+ return ($key1 > $key2)? 1:-1;
+}
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//resource variable
+$fp = fopen(__FILE__, "r");
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -12345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource data
+ 'resource var' => $fp,
+);
+
+// loop through each element of the array for arr2
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_intersect_ukey($array1, $array2, $value, 'key_compare_func') );
+ var_dump( array_intersect_ukey($array1, $array2, $value, $array4, 'key_compare_func') );
+};
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_ukey() : usage variation ***
+
+--int 0--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+--resource var--
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Argument #3 is not an array in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_intersect_ukey_variation5.phpt b/ext/standard/tests/array/array_intersect_ukey_variation5.phpt
new file mode 100644
index 000000000..c1520fbb6
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_ukey_variation5.phpt
@@ -0,0 +1,63 @@
+--TEST--
+Test array_intersect_ukey() function : usage variation - Intersection of integers with floats and strings.
+--FILE--
+<?php
+/* Prototype : array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)
+ * Description: Computes the intersection of arrays using a callback function on the keys for comparison.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_ukey() : usage variation ***\n";
+
+//Initialize variables
+$arr_default_int = array(1, 2 );
+$arr_float = array(0 => 1.00, 1.00 => 2.00, 2.00 => 3.00);
+$arr_string = array('0' => '1', '1' => '2', '2' => '3');
+$arr_string_float = array('0.00' => '1.00', '1.00' => '2.00');
+
+//Call back function
+function key_compare_func($key1, $key2)
+{
+ if ($key1 == $key2)
+ return 0;
+ else
+ return ($key1 > $key2)? 1:-1;
+}
+
+echo "\n-- Result of integers and floating point intersection --\n";
+var_dump( array_intersect_ukey($arr_default_int, $arr_float, "key_compare_func") );
+
+echo "\n-- Result of integers and strings containing integers intersection --\n";
+var_dump( array_intersect_ukey($arr_default_int, $arr_string, "key_compare_func") );
+
+echo "\n-- Result of integers and strings containing floating points intersection --\n";
+var_dump( array_intersect_ukey($arr_default_int, $arr_string_float, "key_compare_func") );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_ukey() : usage variation ***
+
+-- Result of integers and floating point intersection --
+array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+}
+
+-- Result of integers and strings containing integers intersection --
+array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+}
+
+-- Result of integers and strings containing floating points intersection --
+array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_intersect_ukey_variation6.phpt b/ext/standard/tests/array/array_intersect_ukey_variation6.phpt
new file mode 100644
index 000000000..a918660e4
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_ukey_variation6.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test array_intersect_ukey() function : usage variation - Intersection of floating points with strings.
+--FILE--
+<?php
+/* Prototype : array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)
+ * Description: Computes the intersection of arrays using a callback function on the keys for comparison.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_ukey() : usage variation ***\n";
+
+//Initialize variables
+$arr_float = array(0.00 => 1.00, 1.00 => 2.00);
+$arr_string = array('0' => '1', '1' => '2', '2' => '3');
+$arr_string_float = array('0.00' => '1.00', '1.00' => '2.00');
+
+//Call back function
+function key_compare_func($key1, $key2)
+{
+ if ($key1 == $key2)
+ return 0;
+ else
+ return ($key1 > $key2)? 1:-1;
+}
+
+echo "\n-- Result of floating points and strings containing integers intersection --\n";
+var_dump( array_intersect_ukey($arr_float, $arr_string, 'key_compare_func') );
+
+echo "\n-- Result of floating points and strings containing floating point intersection --\n";
+var_dump( array_intersect_ukey($arr_float, $arr_string_float, 'key_compare_func') );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_ukey() : usage variation ***
+
+-- Result of floating points and strings containing integers intersection --
+array(2) {
+ [0]=>
+ float(1)
+ [1]=>
+ float(2)
+}
+
+-- Result of floating points and strings containing floating point intersection --
+array(2) {
+ [0]=>
+ float(1)
+ [1]=>
+ float(2)
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_intersect_ukey_variation7.phpt b/ext/standard/tests/array/array_intersect_ukey_variation7.phpt
new file mode 100644
index 000000000..75b601c11
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_ukey_variation7.phpt
@@ -0,0 +1,63 @@
+--TEST--
+Test array_intersect_ukey() function : usage variation - Intersection of strings containing integer and float
+--FILE--
+<?php
+/* Prototype : array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)
+ * Description: Computes the intersection of arrays using a callback function on the keys for comparison.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_ukey() : usage variation ***\n";
+
+//Initialize variables
+$arr1_string_int = array('0' => '1', '1' => '2');
+$arr2_string_int = array('0' => '1', '1' => '3');
+$arr1_string_float = array('0.00' => '1.00', '1.00' => '2.00');
+$arr2_string_float = array('0.00' => '1.00', '1.00' => '3.00');
+
+//Call back function
+function key_compare_func($key1, $key2)
+{
+ if ($key1 == $key2)
+ return 0;
+ else
+ return ($key1 > $key2)? 1:-1;
+}
+
+echo "\n-- Result of strings containing integers intersection --\n";
+var_dump( array_intersect_ukey($arr1_string_int, $arr2_string_int, 'key_compare_func') );
+
+echo "\n-- Result of strings containing floating points intersection --\n";
+var_dump( array_intersect_ukey($arr1_string_float, $arr2_string_float, 'key_compare_func') );
+
+echo "\n-- Result of strings containing integers and strings containing floating points intersection --\n";
+var_dump( array_intersect_ukey($arr1_string_int, $arr2_string_float, 'key_compare_func') );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_ukey() : usage variation ***
+
+-- Result of strings containing integers intersection --
+array(2) {
+ [0]=>
+ string(1) "1"
+ [1]=>
+ string(1) "2"
+}
+
+-- Result of strings containing floating points intersection --
+array(2) {
+ ["0.00"]=>
+ string(4) "1.00"
+ ["1.00"]=>
+ string(4) "2.00"
+}
+
+-- Result of strings containing integers and strings containing floating points intersection --
+array(2) {
+ [0]=>
+ string(1) "1"
+ [1]=>
+ string(1) "2"
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_intersect_ukey_variation8.phpt b/ext/standard/tests/array/array_intersect_ukey_variation8.phpt
new file mode 100644
index 000000000..98c935590
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_ukey_variation8.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test array_intersect_ukey() function : usage variation - Passing non-existing function name to callback
+--FILE--
+<?php
+/* Prototype : array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)
+ * Description: Computes the intersection of arrays using a callback function on the keys for comparison.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_ukey() : usage variation ***\n";
+
+//Initialise arguments
+$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
+$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
+
+//function name within double quotes
+var_dump( array_intersect_ukey($array1, $array2, "unknown_function") );
+
+//function name within single quotes
+var_dump( array_intersect_ukey($array1, $array2, 'unknown_function') );
+
+//function name without quotes
+var_dump( array_intersect_ukey($array1, $array2, unknown_function) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_ukey() : usage variation ***
+
+Warning: array_intersect_ukey(): Not a valid callback unknown_function in %s on line %d
+NULL
+
+Warning: array_intersect_ukey(): Not a valid callback unknown_function in %s on line %d
+NULL
+
+Notice: Use of undefined constant unknown_function - assumed 'unknown_function' in %s on line %d
+
+Warning: array_intersect_ukey(): Not a valid callback unknown_function in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_intersect_ukey_variation9.phpt b/ext/standard/tests/array/array_intersect_ukey_variation9.phpt
new file mode 100644
index 000000000..fe130a86f
--- /dev/null
+++ b/ext/standard/tests/array/array_intersect_ukey_variation9.phpt
@@ -0,0 +1,61 @@
+--TEST--
+Test array_intersect_ukey() function : usage variation - Passing class/object methods to callback
+--FILE--
+<?php
+/* Prototype : array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)
+ * Description: Computes the intersection of arrays using a callback function on the keys for comparison.
+ * Source code: ext/standard/array.c
+ */
+
+echo "*** Testing array_intersect_ukey() : usage variation ***\n";
+
+//Initialise arguments
+$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
+$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
+
+class MyClass
+{
+ static function static_compare_func($key1, $key2) {
+ return strcasecmp($key1, $key2);
+ }
+
+ public function class_compare_func($key1, $key2) {
+ return strcasecmp($key1, $key2);
+ }
+
+}
+
+echo "\n-- Testing array_intersect_ukey() function using class with static method as callback --\n";
+var_dump( array_intersect_ukey($array1, $array2, array('MyClass','static_compare_func')) );
+var_dump( array_intersect_ukey($array1, $array2, 'MyClass::static_compare_func') );
+
+echo "\n-- Testing array_intersect_uassoc() function using class with regular method as callback --\n";
+$obj = new MyClass();
+var_dump( array_intersect_ukey($array1, $array2, array($obj,'class_compare_func')) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_intersect_ukey() : usage variation ***
+
+-- Testing array_intersect_ukey() function using class with static method as callback --
+array(2) {
+ ["blue"]=>
+ int(1)
+ ["green"]=>
+ int(3)
+}
+array(2) {
+ ["blue"]=>
+ int(1)
+ ["green"]=>
+ int(3)
+}
+
+-- Testing array_intersect_uassoc() function using class with regular method as callback --
+array(2) {
+ ["blue"]=>
+ int(1)
+ ["green"]=>
+ int(3)
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_intersect_variation5.phpt b/ext/standard/tests/array/array_intersect_variation5.phpt
index 7f36ee3f2..9aaedeb38 100644
--- a/ext/standard/tests/array/array_intersect_variation5.phpt
+++ b/ext/standard/tests/array/array_intersect_variation5.phpt
@@ -19,17 +19,6 @@ echo "*** Testing array_intersect() : assoc array with diff keys to \$arr1 argum
$unset_var = 10;
unset ($unset_var);
-// get a resource variable
-$fp = fopen(__FILE__, "r");
-
-// get a class
-class classA
-{
- public function __toString(){
- return "Class A object";
- }
-}
-
// get a heredoc string
$heredoc = <<<EOT
Hello world
@@ -59,12 +48,12 @@ $arrays = array (
"\v\fworld" => 2.2, "pen\n" => 33),
array("hello", $heredoc => "string"), // heredoc
- // array with object, unset variable and resource variable
-/*10*/ array(new classA() => 11, @$unset_var => "hello", $fp => 'resource'),
+ // array with unset variable
+/*10*/ array( @$unset_var => "hello"),
// array with mixed keys
-/*11*/ array('hello' => 1, new classA() => 2, "fruit" => 2.2,
- $fp => 'resource', 133 => "int", 444.432 => "float",
+/*11*/ array('hello' => 1, "fruit" => 2.2,
+ 133 => "int", 444.432 => "float",
@$unset_var => "unset", $heredoc => "heredoc")
);
@@ -85,21 +74,10 @@ foreach($arrays as $arr1) {
$iterator++;
}
-// close the file resource used
-fclose($fp);
-
echo "Done";
?>
--EXPECTF--
*** Testing array_intersect() : assoc array with diff keys to $arr1 argument ***
-
-Warning: Illegal offset type in %s on line %d
-
-Warning: Illegal offset type in %s on line %d
-
-Warning: Illegal offset type in %s on line %d
-
-Warning: Illegal offset type in %s on line %d
-- Iterator 1 --
array(0) {
}
diff --git a/ext/standard/tests/array/array_intersect_variation6.phpt b/ext/standard/tests/array/array_intersect_variation6.phpt
index cecde34db..48d01f7d5 100644
--- a/ext/standard/tests/array/array_intersect_variation6.phpt
+++ b/ext/standard/tests/array/array_intersect_variation6.phpt
@@ -19,17 +19,6 @@ echo "*** Testing array_intersect() : assoc array with diff keys to \$arr2 argum
$unset_var = 10;
unset ($unset_var);
-// get a resource variable
-$fp = fopen(__FILE__, "r");
-
-// get a class
-class classA
-{
- public function __toString(){
- return "Class A object";
- }
-}
-
// get a heredoc string
$heredoc = <<<EOT
Hello world
@@ -59,12 +48,12 @@ $arrays = array (
"\v\fworld" => 2.2, "pen\n" => 33),
array("hello", $heredoc => "string"), // heredoc
- // array with object, unset variable and resource variable
-/*10*/ array(new classA() => 11, @$unset_var => "hello", $fp => 'resource'),
+ // array with unset variable
+/*10*/ array( @$unset_var => "hello"),
// array with mixed keys
-/*11*/ array('hello' => 1, new classA() => 2, "fruit" => 2.2,
- $fp => 'resource', 133 => "int", 444.432 => "float",
+/*11*/ array('hello' => 1, "fruit" => 2.2,
+ 133 => "int", 444.432 => "float",
@$unset_var => "unset", $heredoc => "heredoc")
);
@@ -85,21 +74,10 @@ foreach($arrays as $arr2) {
$iterator++;
}
-// close the file resource used
-fclose($fp);
-
echo "Done";
?>
--EXPECTF--
*** Testing array_intersect() : assoc array with diff keys to $arr2 argument ***
-
-Warning: Illegal offset type in %s on line %d
-
-Warning: Illegal offset type in %s on line %d
-
-Warning: Illegal offset type in %s on line %d
-
-Warning: Illegal offset type in %s on line %d
-- Iterator 1 --
array(0) {
}
diff --git a/ext/standard/tests/array/array_map_variation19.phpt b/ext/standard/tests/array/array_map_variation19.phpt
new file mode 100644
index 000000000..9478f70ef
--- /dev/null
+++ b/ext/standard/tests/array/array_map_variation19.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Test array_map() function : usage variations - callback pass semantics
+--FILE--
+<?php
+/* Prototype : array array_map ( callback $callback , array $arr1 [, array $... ] )
+ * Description: Applies the callback to the elements of the given arrays
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Test array_map() with a pass-by-value callback forced to behave as a pass-by-reference function.
+ */
+
+$arr1 = array('original.0', 'original.1');
+$arr2 = array('original.0', 'original.1');
+
+function callback($a) {
+ $a = "changed";
+}
+
+array_map('callback', $arr1);
+var_dump($arr1);
+
+$ref =& $arr2[0];
+array_map("callback", $arr2);
+var_dump($arr2);
+?>
+--EXPECTF--
+array(2) {
+ [0]=>
+ string(10) "original.0"
+ [1]=>
+ string(10) "original.1"
+}
+array(2) {
+ [0]=>
+ &string(7) "changed"
+ [1]=>
+ string(10) "original.1"
+} \ No newline at end of file
diff --git a/ext/standard/tests/array/array_multisort_basic1.phpt b/ext/standard/tests/array/array_multisort_basic1.phpt
new file mode 100644
index 000000000..af5f8df4f
--- /dev/null
+++ b/ext/standard/tests/array/array_multisort_basic1.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test array_multisort() function : basic functionality
+--FILE--
+<?php
+/* Prototype : bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])
+ * Description: Sort multiple arrays at once similar to how ORDER BY clause works in SQL
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_multisort() : basic functionality ***\n";
+
+// Initialise all required variables
+$ar1 = array("row1" => 2, "row2" => 1, "row3" => 1);
+$ar2 = array("row1" => 2, "row2" => "aa", "row3" => "1");
+
+echo "\n-- Testing array_multisort() function with all normal arguments --\n";
+var_dump( array_multisort($ar1, SORT_ASC, SORT_REGULAR, $ar2, SORT_DESC, SORT_STRING) );
+var_dump($ar1, $ar2);
+
+echo "\n-- Testing array_multisort() function with one argument --\n";
+var_dump( array_multisort($ar2) );
+var_dump($ar2);
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_multisort() : basic functionality ***
+
+-- Testing array_multisort() function with all normal arguments --
+bool(true)
+array(3) {
+ ["row2"]=>
+ int(1)
+ ["row3"]=>
+ int(1)
+ ["row1"]=>
+ int(2)
+}
+array(3) {
+ ["row2"]=>
+ string(2) "aa"
+ ["row3"]=>
+ string(1) "1"
+ ["row1"]=>
+ int(2)
+}
+
+-- Testing array_multisort() function with one argument --
+bool(true)
+array(3) {
+ ["row3"]=>
+ string(1) "1"
+ ["row2"]=>
+ string(2) "aa"
+ ["row1"]=>
+ int(2)
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_multisort_basic2.phpt b/ext/standard/tests/array/array_multisort_basic2.phpt
new file mode 100644
index 000000000..d2c7ac20b
--- /dev/null
+++ b/ext/standard/tests/array/array_multisort_basic2.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test array_multisort() function : basic functionality
+--FILE--
+<?php
+/* Prototype : bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])
+ * Description: Sort multiple arrays at once similar to how ORDER BY clause works in SQL
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_multisort() : basic functionality - renumbering of numeric keys ***\n";
+
+// Initialise all required variables
+$ar1 = array( "strkey" => 2, 1, 9 => 1);
+$ar2 = array( 2, "aa" , "1");
+
+echo "\n-- Testing array_multisort() function with all normal arguments --\n";
+var_dump( array_multisort($ar1, SORT_ASC, SORT_REGULAR, $ar2, SORT_ASC, SORT_NUMERIC) );
+var_dump($ar1, $ar2);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_multisort() : basic functionality - renumbering of numeric keys ***
+
+-- Testing array_multisort() function with all normal arguments --
+bool(true)
+array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(1)
+ ["strkey"]=>
+ int(2)
+}
+array(3) {
+ [0]=>
+ string(2) "aa"
+ [1]=>
+ string(1) "1"
+ [2]=>
+ int(2)
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_multisort_error.phpt b/ext/standard/tests/array/array_multisort_error.phpt
new file mode 100644
index 000000000..2d1c18bc6
--- /dev/null
+++ b/ext/standard/tests/array/array_multisort_error.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test array_multisort() function : error conditions
+--FILE--
+<?php
+/* Prototype : bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])
+ * Description: Sort multiple arrays at once similar to how ORDER BY clause works in SQL
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_multisort() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing array_multisort() function with Zero arguments --\n";
+var_dump( array_multisort() );
+
+echo "\n-- Testing array_multisort() function with repeated flags --\n";
+$ar1 = array(1);
+var_dump( array_multisort($ar1, SORT_ASC, SORT_ASC) );
+
+echo "\n-- Testing array_multisort() function with repeated flags --\n";
+$ar1 = array(1);
+var_dump( array_multisort($ar1, SORT_STRING, SORT_NUMERIC) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_multisort() : error conditions ***
+
+-- Testing array_multisort() function with Zero arguments --
+
+Warning: Wrong parameter count for array_multisort() in %sarray_multisort_error.php on line %d
+NULL
+
+-- Testing array_multisort() function with repeated flags --
+
+Warning: array_multisort(): Argument #3 is expected to be an array or sorting flag that has not already been specified in %sarray_multisort_error.php on line %d
+bool(false)
+
+-- Testing array_multisort() function with repeated flags --
+
+Warning: array_multisort(): Argument #3 is expected to be an array or sorting flag that has not already been specified in %sarray_multisort_error.php on line %d
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_multisort_variation1.phpt b/ext/standard/tests/array/array_multisort_variation1.phpt
new file mode 100644
index 000000000..084addef4
--- /dev/null
+++ b/ext/standard/tests/array/array_multisort_variation1.phpt
@@ -0,0 +1,207 @@
+--TEST--
+Test array_multisort() function : usage variation
+--FILE--
+<?php
+/* Prototype : bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])
+ * Description: Sort multiple arrays at once similar to how ORDER BY clause works in SQL
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_multisort() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+$ar2 = array(1, 2);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for ar1
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_multisort($value));
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_multisort() : usage variation ***
+
+--int 0--
+Error: 2 - array_multisort(): Argument #1 is expected to be an array or sorting flag that has not already been specified, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--int 1--
+Error: 2 - array_multisort(): Argument #1 is expected to be an array or sorting flag that has not already been specified, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - array_multisort(): Argument #1 is an unknown sort flag, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - array_multisort(): Argument #1 is an unknown sort flag, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--float .5--
+Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--string DQ--
+Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--string SQ--
+Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--mixed case string--
+Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--heredoc--
+Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
+bool(false)
+
+--unset var--
+Error: 2 - array_multisort(): Argument #1 is expected to be an array or a sort flag, %sarray_multisort_variation1.php(%d)
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_multisort_variation10.phpt b/ext/standard/tests/array/array_multisort_variation10.phpt
new file mode 100644
index 000000000..4e9f4890c
--- /dev/null
+++ b/ext/standard/tests/array/array_multisort_variation10.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Test array_multisort() function : usage variation - testing with anonymous arrary arguments
+--FILE--
+<?php
+/* Prototype : bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])
+ * Description: Sort multiple arrays at once similar to how ORDER BY clause works in SQL
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_multisort() : Testing with anonymous arguments ***\n";
+
+var_dump(array_multisort(array(1,3,2,4)));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_multisort() : Testing with anonymous arguments ***
+bool(true)
+===DONE===
diff --git a/ext/standard/tests/array/array_multisort_variation2.phpt b/ext/standard/tests/array/array_multisort_variation2.phpt
new file mode 100644
index 000000000..bad20188e
--- /dev/null
+++ b/ext/standard/tests/array/array_multisort_variation2.phpt
@@ -0,0 +1,228 @@
+--TEST--
+Test array_multisort() function : usage variation
+--FILE--
+<?php
+/* Prototype : bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])
+ * Description: Sort multiple arrays at once similar to how ORDER BY clause works in SQL
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_multisort() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$ar1 = array(1, 2);
+$ar2 = array(1, 2);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for SORT_REGULAR|SORT_NUMERIC|SORT_STRING]]
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_multisort($ar1, $value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_multisort() : usage variation ***
+
+--int 0--
+bool(true)
+
+--int 1--
+bool(true)
+
+--int 12345--
+Error: 2 - array_multisort(): Argument #2 is an unknown sort flag, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - array_multisort(): Argument #2 is an unknown sort flag, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--float .5--
+Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--empty array--
+Error: 2 - array_multisort(): Array sizes are inconsistent, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - array_multisort(): Array sizes are inconsistent, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--associative array--
+bool(true)
+
+--nested arrays--
+Error: 2 - array_multisort(): Array sizes are inconsistent, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--string DQ--
+Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--string SQ--
+Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--mixed case string--
+Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--heredoc--
+Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
+bool(false)
+
+--unset var--
+Error: 2 - array_multisort(): Argument #2 is expected to be an array or a sort flag, %sarray_multisort_variation2.php(%d)
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/array/array_multisort_variation3.phpt b/ext/standard/tests/array/array_multisort_variation3.phpt
new file mode 100644
index 000000000..534374c43
--- /dev/null
+++ b/ext/standard/tests/array/array_multisort_variation3.phpt
@@ -0,0 +1,208 @@
+--TEST--
+Test array_multisort() function : usage variation
+--FILE--
+<?php
+/* Prototype : bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])
+ * Description: Sort multiple arrays at once similar to how ORDER BY clause works in SQL
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_multisort() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$ar1 = array(1, 2);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for ar2
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_multisort($ar1, SORT_REGULAR, $value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_multisort() : usage variation ***
+
+--int 0--
+Error: 2 - array_multisort(): Argument #3 is expected to be an array or sorting flag that has not already been specified, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--int 1--
+Error: 2 - array_multisort(): Argument #3 is expected to be an array or sorting flag that has not already been specified, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - array_multisort(): Argument #3 is an unknown sort flag, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - array_multisort(): Argument #3 is an unknown sort flag, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--float .5--
+Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--string DQ--
+Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--string SQ--
+Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--mixed case string--
+Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--heredoc--
+Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d)
+bool(false)
+
+--unset var--
+Error: 2 - array_multisort(): Argument #3 is expected to be an array or a sort flag, %sarray_multisort_variation3.php(%d)
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/array/array_multisort_variation4.phpt b/ext/standard/tests/array/array_multisort_variation4.phpt
new file mode 100644
index 000000000..ce2ae2356
--- /dev/null
+++ b/ext/standard/tests/array/array_multisort_variation4.phpt
@@ -0,0 +1,58 @@
+--TEST--
+Test array_multisort() function : usage variation - testing with multiple array arguments
+--FILE--
+<?php
+/* Prototype : bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])
+ * Description: Sort multiple arrays at once similar to how ORDER BY clause works in SQL
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_multisort() : Testing with multiple array arguments ***\n";
+
+$arr1 = array (4,3,3,3);
+$arr2 = array (9,3,2,2);
+$arr3 = array (9,9,2,1);
+
+var_dump(array_multisort($arr1, $arr2, $arr3));
+
+var_dump($arr1);
+var_dump($arr2);
+var_dump($arr3);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_multisort() : Testing with multiple array arguments ***
+bool(true)
+array(4) {
+ [0]=>
+ int(3)
+ [1]=>
+ int(3)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+}
+array(4) {
+ [0]=>
+ int(2)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(9)
+}
+array(4) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(9)
+ [3]=>
+ int(9)
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_multisort_variation5.phpt b/ext/standard/tests/array/array_multisort_variation5.phpt
new file mode 100644
index 000000000..87e60f22b
--- /dev/null
+++ b/ext/standard/tests/array/array_multisort_variation5.phpt
@@ -0,0 +1,53 @@
+--TEST--
+Test array_multisort() function : usage variation - testing with multiple array arguments
+--FILE--
+<?php
+/* Prototype : bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])
+ * Description: Sort multiple arrays at once similar to how ORDER BY clause works in SQL
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_multisort() : Testing all array sort specifiers ***\n";
+
+$ar = array( 2, "aa" , "1");
+
+array_multisort($ar, SORT_REGULAR, SORT_ASC);
+var_dump($ar);
+
+array_multisort($ar, SORT_STRING, SORT_ASC);
+var_dump($ar);
+
+array_multisort($ar, SORT_NUMERIC, SORT_ASC);
+var_dump($ar);
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_multisort() : Testing all array sort specifiers ***
+array(3) {
+ [0]=>
+ string(1) "1"
+ [1]=>
+ string(2) "aa"
+ [2]=>
+ int(2)
+}
+array(3) {
+ [0]=>
+ string(1) "1"
+ [1]=>
+ int(2)
+ [2]=>
+ string(2) "aa"
+}
+array(3) {
+ [0]=>
+ string(2) "aa"
+ [1]=>
+ string(1) "1"
+ [2]=>
+ int(2)
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_multisort_variation6.phpt b/ext/standard/tests/array/array_multisort_variation6.phpt
new file mode 100644
index 000000000..9774d49ba
--- /dev/null
+++ b/ext/standard/tests/array/array_multisort_variation6.phpt
@@ -0,0 +1,53 @@
+--TEST--
+Test array_multisort() function : usage variation - testing with multiple array arguments
+--FILE--
+<?php
+/* Prototype : bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])
+ * Description: Sort multiple arrays at once similar to how ORDER BY clause works in SQL
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_multisort() : Testing all array sort specifiers ***\n";
+
+$ar = array( 2, "aa" , "1");
+
+array_multisort($ar, SORT_REGULAR, SORT_DESC);
+var_dump($ar);
+
+array_multisort($ar, SORT_STRING, SORT_DESC);
+var_dump($ar);
+
+array_multisort($ar, SORT_NUMERIC, SORT_DESC);
+var_dump($ar);
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_multisort() : Testing all array sort specifiers ***
+array(3) {
+ [0]=>
+ int(2)
+ [1]=>
+ string(2) "aa"
+ [2]=>
+ string(1) "1"
+}
+array(3) {
+ [0]=>
+ string(2) "aa"
+ [1]=>
+ int(2)
+ [2]=>
+ string(1) "1"
+}
+array(3) {
+ [0]=>
+ int(2)
+ [1]=>
+ string(1) "1"
+ [2]=>
+ string(2) "aa"
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_multisort_variation7.phpt b/ext/standard/tests/array/array_multisort_variation7.phpt
new file mode 100644
index 000000000..c8ca24013
--- /dev/null
+++ b/ext/standard/tests/array/array_multisort_variation7.phpt
@@ -0,0 +1,68 @@
+--TEST--
+Test array_multisort() function : usage variation - test sort order of all types
+--FILE--
+<?php
+/* Prototype : bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])
+ * Description: Sort multiple arrays at once similar to how ORDER BY clause works in SQL
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_multisort() : usage variation - test sort order of all types***\n";
+
+// define some classes
+class classWithToString {
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString { }
+
+$inputs = array(
+ 'int 0' => 0,
+ 'float -10.5' => -10.5,
+ array(),
+ 'uppercase NULL' => NULL,
+ 'lowercase true' => true,
+ 'empty string DQ' => "",
+ 'string DQ' => "string",
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+ 'undefined var' => @$undefined_var,
+);
+
+var_dump(array_multisort($inputs));
+var_dump($inputs);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_multisort() : usage variation - test sort order of all types***
+bool(true)
+array(10) {
+ ["empty string DQ"]=>
+ string(0) ""
+ ["int 0"]=>
+ int(0)
+ ["uppercase NULL"]=>
+ NULL
+ ["undefined var"]=>
+ NULL
+ [0]=>
+ array(0) {
+ }
+ ["instance of classWithToString"]=>
+ object(classWithToString)#1 (0) {
+ }
+ ["instance of classWithoutToString"]=>
+ object(classWithoutToString)#2 (0) {
+ }
+ ["lowercase true"]=>
+ bool(true)
+ ["float -10.5"]=>
+ float(-10.5)
+ ["string DQ"]=>
+ string(6) "string"
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_multisort_variation8.phpt b/ext/standard/tests/array/array_multisort_variation8.phpt
new file mode 100644
index 000000000..60f7a97e3
--- /dev/null
+++ b/ext/standard/tests/array/array_multisort_variation8.phpt
@@ -0,0 +1,74 @@
+--TEST--
+Test array_multisort() function : usage variation - test sort order of all types
+--FILE--
+<?php
+/* Prototype : bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])
+ * Description: Sort multiple arrays at once similar to how ORDER BY clause works in SQL
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_multisort() : usage variation - test sort order of all types***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ // We're testing sort order not errors so ignore.
+}
+set_error_handler('test_error_handler');
+
+// define some classes
+class classWithToString {
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString { }
+
+$inputs = array(
+ 'int 0' => 0,
+ 'float -10.5' => -10.5,
+ array(),
+ 'uppercase NULL' => NULL,
+ 'lowercase true' => true,
+ 'empty string DQ' => "",
+ 'string DQ' => "string",
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+ 'undefined var' => @$undefined_var,
+);
+
+var_dump(array_multisort($inputs, SORT_STRING));
+var_dump($inputs);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_multisort() : usage variation - test sort order of all types***
+bool(true)
+array(10) {
+ ["empty string DQ"]=>
+ string(0) ""
+ ["uppercase NULL"]=>
+ NULL
+ ["undefined var"]=>
+ NULL
+ ["instance of classWithoutToString"]=>
+ object(classWithoutToString)#2 (0) {
+ }
+ ["float -10.5"]=>
+ float(-10.5)
+ ["int 0"]=>
+ int(0)
+ ["lowercase true"]=>
+ bool(true)
+ [0]=>
+ array(0) {
+ }
+ ["instance of classWithToString"]=>
+ object(classWithToString)#1 (0) {
+ }
+ ["string DQ"]=>
+ string(6) "string"
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_multisort_variation9.phpt b/ext/standard/tests/array/array_multisort_variation9.phpt
new file mode 100644
index 000000000..98ccd06ed
--- /dev/null
+++ b/ext/standard/tests/array/array_multisort_variation9.phpt
@@ -0,0 +1,78 @@
+--TEST--
+Test array_multisort() function : usage variation - test sort order of all types
+--FILE--
+<?php
+/* Prototype : bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])
+ * Description: Sort multiple arrays at once similar to how ORDER BY clause works in SQL
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_multisort() : usage variation - test sort order of all types***\n";
+
+// define some classes
+class classWithToString {
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString { }
+
+$inputs = array(
+ 'int 0' => 0,
+ 'float -10.5' => -10.5,
+ array(),
+ 'uppercase NULL' => NULL,
+ 'lowercase true' => true,
+ 'empty string DQ' => "",
+ 'string DQ' => "string",
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+ 'undefined var' => @$undefined_var,
+);
+
+var_dump(array_multisort($inputs, SORT_NUMERIC));
+var_dump($inputs);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_multisort() : usage variation - test sort order of all types***
+
+Notice: Object of class classWithToString could not be converted to double in %sarray_multisort_variation9.php on line %d
+
+Notice: Object of class classWithoutToString could not be converted to double in %sarray_multisort_variation9.php on line %d
+
+Notice: Object of class classWithoutToString could not be converted to double in %sarray_multisort_variation9.php on line %d
+
+Notice: Object of class classWithoutToString could not be converted to double in %sarray_multisort_variation9.php on line %d
+
+Notice: Object of class classWithoutToString could not be converted to double in %sarray_multisort_variation9.php on line %d
+bool(true)
+array(10) {
+ ["float -10.5"]=>
+ float(-10.5)
+ ["string DQ"]=>
+ string(6) "string"
+ ["undefined var"]=>
+ NULL
+ ["empty string DQ"]=>
+ string(0) ""
+ ["uppercase NULL"]=>
+ NULL
+ ["int 0"]=>
+ int(0)
+ [0]=>
+ array(0) {
+ }
+ ["instance of classWithoutToString"]=>
+ object(classWithoutToString)#2 (0) {
+ }
+ ["lowercase true"]=>
+ bool(true)
+ ["instance of classWithToString"]=>
+ object(classWithToString)#1 (0) {
+ }
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_next_error1.phpt b/ext/standard/tests/array/array_next_error1.phpt
new file mode 100644
index 000000000..72f2cb9f1
--- /dev/null
+++ b/ext/standard/tests/array/array_next_error1.phpt
@@ -0,0 +1,13 @@
+--TEST--
+next - ensure warning is received when passing an indirect temporary.
+--FILE--
+<?php
+function f() {
+ return array(1, 2);
+}
+var_dump(next(f()));
+?>
+--EXPECTF--
+
+Strict Standards: Only variables should be passed by reference in %s on line %d
+int(2) \ No newline at end of file
diff --git a/ext/standard/tests/array/array_next_error2.phpt b/ext/standard/tests/array/array_next_error2.phpt
new file mode 100644
index 000000000..d4f16666e
--- /dev/null
+++ b/ext/standard/tests/array/array_next_error2.phpt
@@ -0,0 +1,12 @@
+--TEST--
+next - ensure we cannot pass a temporary
+--FILE--
+<?php
+function f() {
+ return array(1, 2);
+}
+var_dump(next(array(1, 2)));
+?>
+--EXPECTF--
+
+Fatal error: Only variables can be passed by reference in %s on line %d \ No newline at end of file
diff --git a/ext/standard/tests/array/array_product_error.phpt b/ext/standard/tests/array/array_product_error.phpt
new file mode 100644
index 000000000..fd2cfc4da
--- /dev/null
+++ b/ext/standard/tests/array/array_product_error.phpt
@@ -0,0 +1,45 @@
+--TEST--
+Test array_product() function : error conditions
+--FILE--
+<?php
+/* Prototype : mixed array_product(array input)
+ * Description: Returns the product of the array entries
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_product() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing array_product() function with Zero arguments --\n";
+var_dump( array_product() );
+
+//Test array_product with one more than the expected number of arguments
+echo "\n-- Testing array_product() function with more than expected no. of arguments --\n";
+$input = array(1, 2);
+$extra_arg = 10;
+var_dump( array_product($input, $extra_arg) );
+
+echo "\n-- Testing array_product() function incorrect argument type --\n";
+var_dump( array_product("bob") );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_product() : error conditions ***
+
+-- Testing array_product() function with Zero arguments --
+
+Warning: Wrong parameter count for array_product() in %sarray_product_error.php on line %d
+NULL
+
+-- Testing array_product() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for array_product() in %sarray_product_error.php on line %d
+NULL
+
+-- Testing array_product() function incorrect argument type --
+
+Warning: array_product(): The argument should be an array in %sarray_product_error.php on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_product_variation1.phpt b/ext/standard/tests/array/array_product_variation1.phpt
new file mode 100644
index 000000000..1d47fa5ea
--- /dev/null
+++ b/ext/standard/tests/array/array_product_variation1.phpt
@@ -0,0 +1,58 @@
+--TEST--
+Test array_product() function : variation
+--FILE--
+<?php
+/* Prototype : mixed array_product(array input)
+ * Description: Returns the product of the array entries
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_product() : variation - using non numeric values ***\n";
+
+class A {
+ static function help() { echo "hello\n"; }
+}
+$fp = fopen(__FILE__, "r");
+
+$types = array("boolean (true)" => true, "boolean (false)" => false,
+ "string" => "hello", "numeric string" => "12",
+ "resource" => $fp, "object" => new A(), "null" => null,
+ "array" => array(3,2));
+
+foreach ($types as $desc => $type) {
+ echo $desc . "\n";
+ var_dump(array_product(array($type)));
+ echo "\n";
+}
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_product() : variation - using non numeric values ***
+boolean (true)
+int(1)
+
+boolean (false)
+int(0)
+
+string
+int(0)
+
+numeric string
+int(12)
+
+resource
+int(%d)
+
+object
+int(1)
+
+null
+int(0)
+
+array
+int(1)
+
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_product_variation2.phpt b/ext/standard/tests/array/array_product_variation2.phpt
new file mode 100644
index 000000000..186987bf1
--- /dev/null
+++ b/ext/standard/tests/array/array_product_variation2.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Test array_product() function : variation - using a keyed array
+--FILE--
+<?php
+/* Prototype : mixed array_product(array input)
+ * Description: Returns the product of the array entries
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_product() : variations ***\n";
+
+echo "\n-- Testing array_product() function with a keyed array --\n";
+var_dump( array_product(array("bob" => 2, "janet" => 5)) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_product() : variations ***
+
+-- Testing array_product() function with a keyed array --
+int(10)
+===DONE===
diff --git a/ext/standard/tests/array/array_product_variation3.phpt b/ext/standard/tests/array/array_product_variation3.phpt
new file mode 100644
index 000000000..33f8110de
--- /dev/null
+++ b/ext/standard/tests/array/array_product_variation3.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Test array_product() function : variation - negative numbers
+--FILE--
+<?php
+/* Prototype : mixed array_product(array input)
+ * Description: Returns the product of the array entries
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_product() : variations - negative numbers***\n";
+
+echo "\n-- Testing array_product() function with one negative number --\n";
+var_dump( array_product(array(-2)) );
+
+echo "\n-- Testing array_product() function with two negative numbers --\n";
+var_dump( array_product(array(-2, -3)) );
+
+echo "\n-- Testing array_product() function with three negative numbers --\n";
+var_dump( array_product(array(-2, -3, -4)) );
+
+echo "\n-- Testing array_product() function with negative floats --\n";
+var_dump( array_product(array(-1.5)));
+
+echo "\n-- Testing array_product() function with negative floats --\n";
+var_dump( array_product(array(-99999999.9, 99999999.1)));
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_product() : variations - negative numbers***
+
+-- Testing array_product() function with one negative number --
+int(-2)
+
+-- Testing array_product() function with two negative numbers --
+int(6)
+
+-- Testing array_product() function with three negative numbers --
+int(-24)
+
+-- Testing array_product() function with negative floats --
+float(-1.5)
+
+-- Testing array_product() function with negative floats --
+float(-9.9999999E+15)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_product_variation4.phpt b/ext/standard/tests/array/array_product_variation4.phpt
new file mode 100644
index 000000000..1493bbd8e
--- /dev/null
+++ b/ext/standard/tests/array/array_product_variation4.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Test array_product() function : variation - testing with a very large array
+--FILE--
+<?php
+/* Prototype : mixed array_product(array input)
+ * Description: Returns the product of the array entries
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_product() : variations ***\n";
+
+echo "\n-- Testing array_product() function with a very large array --\n";
+
+$array = array();
+
+for ($i = 0; $i < 999; $i++) {
+ $array[] = 999;
+}
+
+var_dump( array_product($array) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_product() : variations ***
+
+-- Testing array_product() function with a very large array --
+float(INF)
+===DONE===
diff --git a/ext/standard/tests/array/array_product_variation5.phpt b/ext/standard/tests/array/array_product_variation5.phpt
new file mode 100644
index 000000000..c938ad466
--- /dev/null
+++ b/ext/standard/tests/array/array_product_variation5.phpt
@@ -0,0 +1,223 @@
+--TEST--
+Test array_product() function : usage variation
+--FILE--
+<?php
+/* Prototype : mixed array_product(array input)
+ * Description: Returns the product of the array entries
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_product() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for input
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_product($value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_product() : usage variation ***
+
+--int 0--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--int 1--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--int 12345--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--int -12345--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--float .5--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--string DQ--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--string SQ--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--heredoc--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--undefined var--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+
+--unset var--
+
+Warning: array_product(): The argument should be an array in %sarray_product_variation5.php on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_reduce_error.phpt b/ext/standard/tests/array/array_reduce_error.phpt
new file mode 100644
index 000000000..59c52a772
--- /dev/null
+++ b/ext/standard/tests/array/array_reduce_error.phpt
@@ -0,0 +1,42 @@
+--TEST--
+Test array_reduce() function : error conditions
+--FILE--
+<?php
+/* Prototype : mixed array_reduce(array input, mixed callback [, int initial])
+ * Description: Iteratively reduce the array to a single value via the callback.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_reduce() : error conditions ***\n";
+
+
+//Test array_reduce with one more than the expected number of arguments
+echo "\n-- Testing array_reduce() function with more than expected no. of arguments --\n";
+$input = array(1, 2);
+$callback = 1;
+$initial = 10;
+$extra_arg = 10;
+var_dump( array_reduce($input, $callback, $initial, $extra_arg) );
+
+// Testing array_reduce with one less than the expected number of arguments
+echo "\n-- Testing array_reduce() function with less than expected no. of arguments --\n";
+$input = array(1, 2);
+var_dump( array_reduce($input) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_reduce() : error conditions ***
+
+-- Testing array_reduce() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for array_reduce() in %s on line %d
+NULL
+
+-- Testing array_reduce() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for array_reduce() in %s on line %d
+NULL
+===DONE===
+
diff --git a/ext/standard/tests/array/array_reduce_variation1.phpt b/ext/standard/tests/array/array_reduce_variation1.phpt
new file mode 100644
index 000000000..b02a82a7c
--- /dev/null
+++ b/ext/standard/tests/array/array_reduce_variation1.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test array_reduce() function : variation
+--FILE--
+<?php
+/* Prototype : mixed array_reduce(array input, mixed callback [, int initial])
+ * Description: Iteratively reduce the array to a single value via the callback.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_reduce() : variation ***\n";
+
+
+function oneArg($v) {
+ return $v;
+}
+
+function threeArgs($v, $w, $x) {
+ return $v + $w + $x;
+}
+
+$array = array(1);
+
+echo "\n--- Testing with a callback with too few parameters ---\n";
+var_dump(array_reduce($array, "oneArg", 2));
+
+echo "\n--- Testing with a callback with too many parameters ---\n";
+var_dump(array_reduce($array, "threeArgs", 2));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_reduce() : variation ***
+
+--- Testing with a callback with too few parameters ---
+int(2)
+
+--- Testing with a callback with too many parameters ---
+
+Warning: Missing argument 3 for threeArgs() in %sarray_reduce_variation1.php on line %d
+
+Notice: Undefined variable: x in %sarray_reduce_variation1.php on line %d
+int(3)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_reduce_variation2.phpt b/ext/standard/tests/array/array_reduce_variation2.phpt
new file mode 100644
index 000000000..9303f6d0c
--- /dev/null
+++ b/ext/standard/tests/array/array_reduce_variation2.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test array_reduce() function : variation - invalid parameters
+--FILE--
+<?php
+/* Prototype : mixed array_reduce(array input, mixed callback [, int initial])
+ * Description: Iteratively reduce the array to a single value via the callback.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_reduce() : variation - invalid parameters ***\n";
+
+
+$array = array(1);
+
+var_dump(array_reduce($array, "bogusbogus"));
+
+var_dump(array_reduce("bogusarray", "max"));
+
+var_dump(array_reduce(new stdClass(), "max"));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_reduce() : variation - invalid parameters ***
+
+Warning: array_reduce(): The second argument, 'bogusbogus', should be a valid callback in %s on line %d
+NULL
+
+Warning: array_reduce(): The first argument should be an array in %s on line %d
+NULL
+
+Warning: array_reduce(): The first argument should be an array in %s on line %d
+NULL
+===DONE===
+
diff --git a/ext/standard/tests/array/array_reduce_variation3.phpt b/ext/standard/tests/array/array_reduce_variation3.phpt
new file mode 100644
index 000000000..f6301026b
--- /dev/null
+++ b/ext/standard/tests/array/array_reduce_variation3.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test array_reduce() function : variation - object callbacks
+--FILE--
+<?php
+/* Prototype : mixed array_reduce(array input, mixed callback [, int initial])
+ * Description: Iteratively reduce the array to a single value via the callback.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_reduce() : variation - object callbacks ***\n";
+
+class A {
+ static function adder($a, $b) {return $a + $b;}
+ public function adder2($a, $b) {return $a + $b;}
+}
+
+$array = array(1);
+
+echo "\n--- Static method callback ---\n";
+var_dump(array_reduce($array, array("A", "adder")));
+
+echo "\n--- Instance method callback ---\n";
+var_dump(array_reduce($array, array(new A(), "adder2")));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_reduce() : variation - object callbacks ***
+
+--- Static method callback ---
+int(1)
+
+--- Instance method callback ---
+int(1)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_slice_variation1.phpt b/ext/standard/tests/array/array_slice_variation1.phpt
index 4c7a148c8..daed1d84f 100644
--- a/ext/standard/tests/array/array_slice_variation1.phpt
+++ b/ext/standard/tests/array/array_slice_variation1.phpt
@@ -1,227 +1,61 @@
--TEST--
-Test array_slice() function : usage variations - Pass different data types as $input arg
+Test array_slice() - Third parameter (NULL vs 0)
--FILE--
<?php
-/* Prototype : array array_slice(array $input, int $offset [, int $length [, bool $preserve_keys]])
- * Description: Returns elements specified by offset and length
- * Source code: ext/standard/array.c
- */
-/*
- * Pass different arguments as $input argument to array_slice() to test behaviour
- */
+var_dump(array_slice(range(1, 3), 0, NULL, 1));
+var_dump(array_slice(range(1, 3), 0, 0, 1));
+var_dump(array_slice(range(1, 3), 0, NULL));
+var_dump(array_slice(range(1, 3), 0, 0));
-echo "*** Testing array_slice() : usage variations ***\n";
+var_dump(array_slice(range(1, 3), -1, 0));
+var_dump(array_slice(range(1, 3), -1, 0, 1));
+var_dump(array_slice(range(1, 3), -1, NULL));
+var_dump(array_slice(range(1, 3), -1, NULL, 1));
-// Initialise function arguments not being substituted
-$offset = 2;
-//get an unset variable
-$unset_var = 10;
-unset ($unset_var);
+$a = 'foo';
+var_dump(array_slice(range(1, 3), 0, $a));
+var_dump(array_slice(range(1, 3), 0, $a));
+var_dump($a);
-// get a class
-class classA
-{
- public function __toString() {
- return "Class A object";
- }
-}
-
-// heredoc string
-$heredoc = <<<EOT
-hello world
-EOT;
-
-// get a resource variable
-$fp = fopen(__FILE__, "r");
-
-// unexpected values to be passed to $input argument
-$inputs = array(
-
- // int data
-/*1*/ 0,
- 1,
- 12345,
- -2345,
-
- // float data
-/*5*/ 10.5,
- -10.5,
- 12.3456789000e10,
- 12.3456789000E-10,
- .5,
-
- // null data
-/*10*/ NULL,
- null,
-
- // boolean data
-/*12*/ true,
- false,
- TRUE,
- FALSE,
-
- // empty data
-/*16*/ "",
- '',
- array(),
-
- // string data
-/*19*/ "string",
- 'string',
- $heredoc,
-
- // object data
-/*22*/ new classA(),
-
- // undefined data
-/*23*/ @$undefined_var,
-
- // unset data
-/*24*/ @$unset_var,
-
- // resource variable
-/*25*/ $fp
-);
-
-// loop through each element of $inputs to check the behavior of array_slice()
-$iterator = 1;
-foreach($inputs as $input) {
- echo "\n-- Iteration $iterator --\n";
- var_dump( array_slice($input, $offset) );
- $iterator++;
-};
-
-fclose($fp);
-
-echo "Done";
?>
--EXPECTF--
-*** Testing array_slice() : usage variations ***
-
--- Iteration 1 --
-
-Warning: array_slice() expects parameter 1 to be array, integer given in %s on line %d
-NULL
-
--- Iteration 2 --
-
-Warning: array_slice() expects parameter 1 to be array, integer given in %s on line %d
-NULL
-
--- Iteration 3 --
-
-Warning: array_slice() expects parameter 1 to be array, integer given in %s on line %d
-NULL
-
--- Iteration 4 --
-
-Warning: array_slice() expects parameter 1 to be array, integer given in %s on line %d
-NULL
-
--- Iteration 5 --
-
-Warning: array_slice() expects parameter 1 to be array, double given in %s on line %d
-NULL
-
--- Iteration 6 --
-
-Warning: array_slice() expects parameter 1 to be array, double given in %s on line %d
-NULL
-
--- Iteration 7 --
-
-Warning: array_slice() expects parameter 1 to be array, double given in %s on line %d
-NULL
-
--- Iteration 8 --
-
-Warning: array_slice() expects parameter 1 to be array, double given in %s on line %d
-NULL
-
--- Iteration 9 --
-
-Warning: array_slice() expects parameter 1 to be array, double given in %s on line %d
-NULL
-
--- Iteration 10 --
-
-Warning: array_slice() expects parameter 1 to be array, null given in %s on line %d
-NULL
-
--- Iteration 11 --
-
-Warning: array_slice() expects parameter 1 to be array, null given in %s on line %d
-NULL
-
--- Iteration 12 --
-
-Warning: array_slice() expects parameter 1 to be array, boolean given in %s on line %d
-NULL
-
--- Iteration 13 --
-
-Warning: array_slice() expects parameter 1 to be array, boolean given in %s on line %d
-NULL
-
--- Iteration 14 --
-
-Warning: array_slice() expects parameter 1 to be array, boolean given in %s on line %d
-NULL
-
--- Iteration 15 --
-
-Warning: array_slice() expects parameter 1 to be array, boolean given in %s on line %d
-NULL
-
--- Iteration 16 --
-
-Warning: array_slice() expects parameter 1 to be array, string given in %s on line %d
-NULL
-
--- Iteration 17 --
-
-Warning: array_slice() expects parameter 1 to be array, string given in %s on line %d
-NULL
-
--- Iteration 18 --
+array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+}
array(0) {
}
-
--- Iteration 19 --
-
-Warning: array_slice() expects parameter 1 to be array, string given in %s on line %d
-NULL
-
--- Iteration 20 --
-
-Warning: array_slice() expects parameter 1 to be array, string given in %s on line %d
-NULL
-
--- Iteration 21 --
-
-Warning: array_slice() expects parameter 1 to be array, string given in %s on line %d
-NULL
-
--- Iteration 22 --
-
-Warning: array_slice() expects parameter 1 to be array, object given in %s on line %d
-NULL
-
--- Iteration 23 --
-
-Warning: array_slice() expects parameter 1 to be array, null given in %s on line %d
-NULL
-
--- Iteration 24 --
-
-Warning: array_slice() expects parameter 1 to be array, null given in %s on line %d
-NULL
-
--- Iteration 25 --
-
-Warning: array_slice() expects parameter 1 to be array, resource given in %s on line %d
-NULL
-Done \ No newline at end of file
+array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+}
+array(0) {
+}
+array(0) {
+}
+array(0) {
+}
+array(1) {
+ [0]=>
+ int(3)
+}
+array(1) {
+ [2]=>
+ int(3)
+}
+array(0) {
+}
+array(0) {
+}
+string(3) "foo"
diff --git a/ext/standard/tests/array/array_slice_variation2.phpt b/ext/standard/tests/array/array_slice_variation2.phpt
index d293ce58d..16b73d41b 100644
--- a/ext/standard/tests/array/array_slice_variation2.phpt
+++ b/ext/standard/tests/array/array_slice_variation2.phpt
@@ -1,5 +1,9 @@
--TEST--
Test array_slice() function : usage variations - Pass different data types as $offset arg
+--SKIPIF--
+<?php if (PHP_INT_SIZE > 4) die("skip this test is for 32bit platform only"); ?>
+--INI--
+precision=12
--FILE--
<?php
/* Prototype : array array_slice(array $input, int $offset [, int $length [, bool $preserve_keys]])
@@ -306,4 +310,4 @@ array(4) {
[1]=>
int(4)
}
-Done \ No newline at end of file
+Done
diff --git a/ext/standard/tests/array/array_slice_variation3.phpt b/ext/standard/tests/array/array_slice_variation3.phpt
index 0aafa645e..e3ffa21d9 100644
--- a/ext/standard/tests/array/array_slice_variation3.phpt
+++ b/ext/standard/tests/array/array_slice_variation3.phpt
@@ -1,5 +1,7 @@
--TEST--
Test array_slice() function : usage variations - Pass different data types as $length arg
+--SKIPIF--
+<?php if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only"); ?>
--FILE--
<?php
/* Prototype : array array_slice(array $input, int $offset [, int $length [, bool $preserve_keys]])
@@ -118,7 +120,11 @@ array(0) {
}
-- Iteration 7 --
-array(0) {
+array(2) {
+ ["three"]=>
+ int(3)
+ [0]=>
+ int(4)
}
-- Iteration 8 --
@@ -204,4 +210,4 @@ array(2) {
[0]=>
int(4)
}
-Done \ No newline at end of file
+Done
diff --git a/ext/standard/tests/array/array_splice_errors.phpt b/ext/standard/tests/array/array_splice_errors.phpt
index 4f3223900..2414071e3 100644
--- a/ext/standard/tests/array/array_splice_errors.phpt
+++ b/ext/standard/tests/array/array_splice_errors.phpt
@@ -1,5 +1,5 @@
--TEST--
-Test array_splice() function : error conditions
+Test array_splice() function : error conditions
--FILE--
<?php
/*
@@ -38,4 +38,4 @@ NULL
Warning: array_splice(): The first argument should be an array in %s on line %d
NULL
-Done \ No newline at end of file
+Done
diff --git a/ext/standard/tests/array/array_udiff_assoc_error.phpt b/ext/standard/tests/array/array_udiff_assoc_error.phpt
new file mode 100644
index 000000000..a696f3129
--- /dev/null
+++ b/ext/standard/tests/array/array_udiff_assoc_error.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test array_udiff_assoc() function : error conditions
+--FILE--
+<?php
+/* Prototype : array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_udiff_assoc() : error conditions ***\n";
+
+$arr1 = array(1, 2);
+$arr2 = array(1, 2);
+$extra_arg = 10;
+include('compare_function.inc');
+$key_comp_func = 'compare_function';
+
+
+//Test array_udiff_assoc with one more than the expected number of arguments
+echo "\n-- Testing array_udiff_assoc() function with more than expected no. of arguments --\n";
+var_dump( array_udiff_assoc($arr1, $arr2, $key_comp_func, $extra_arg) );
+
+// Testing array_udiff_assoc with one less than the expected number of arguments
+echo "\n-- Testing array_udiff_assoc() function with less than expected no. of arguments --\n";
+var_dump( array_udiff_assoc($arr1, $arr2) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_udiff_assoc() : error conditions ***
+
+-- Testing array_udiff_assoc() function with more than expected no. of arguments --
+
+Warning: array_udiff_assoc(): Not a valid callback 10 in %s on line %d
+NULL
+
+-- Testing array_udiff_assoc() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for array_udiff_assoc() in %s on line %d
+NULL
+===DONE===
+
diff --git a/ext/standard/tests/array/array_udiff_assoc_variation.phpt b/ext/standard/tests/array/array_udiff_assoc_variation.phpt
new file mode 100644
index 000000000..84e8841b2
--- /dev/null
+++ b/ext/standard/tests/array/array_udiff_assoc_variation.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test array_udiff_assoc() function : variation
+--FILE--
+<?php
+/* Prototype : array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_udiff_assoc() : variation - testing with multiple array arguments ***\n";
+
+include('compare_function.inc');
+$key_compare_function = 'compare_function';
+
+// Initialise all required variables
+$arr1 = array("one" => "one", "02" => "two", '3' => "three", "four", "0.5" => 5, 6.0 => 6, "seven" => "0x7");
+$arr2 = array("one" => "one", "02" => "two", '3' => "three");
+$arr3 = array("four", "0.5" => "five", 6 => 6, "seven" => 7);
+$arr4 = array("four", "0.5" => "five", 6 => 6, "seven" => 7);
+
+
+var_dump( array_udiff_assoc($arr1, $arr2, $arr3, $arr4, $key_compare_function) );
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_udiff_assoc() : variation - testing with multiple array arguments ***
+array(2) {
+ [4]=>
+ string(4) "four"
+ ["0.5"]=>
+ int(5)
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_udiff_assoc_variation1.phpt b/ext/standard/tests/array/array_udiff_assoc_variation1.phpt
new file mode 100644
index 000000000..9886d73ba
--- /dev/null
+++ b/ext/standard/tests/array/array_udiff_assoc_variation1.phpt
@@ -0,0 +1,227 @@
+--TEST--
+Test array_udiff_assoc() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_udiff_assoc() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr2 = array(1, 2);
+
+include('compare_function.inc');
+$key_comp_func = 'compare_function';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for arr1
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_udiff_assoc($value, $arr2, $key_comp_func) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_udiff_assoc() : usage variation ***
+
+--int 0--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--int 1--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--int 12345--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--int -12345--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--float .5--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--string DQ--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--string SQ--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--heredoc--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--undefined var--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+
+--unset var--
+
+Warning: array_udiff_assoc(): Argument #1 is not an array in %sarray_udiff_assoc_variation1.php on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_udiff_assoc_variation2.phpt b/ext/standard/tests/array/array_udiff_assoc_variation2.phpt
new file mode 100644
index 000000000..18484a7ad
--- /dev/null
+++ b/ext/standard/tests/array/array_udiff_assoc_variation2.phpt
@@ -0,0 +1,227 @@
+--TEST--
+Test array_udiff_assoc() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_udiff_assoc() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr1 = array(1, 2);
+
+include('compare_function.inc');
+$key_comp_func = 'compare_function';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for arr2
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_udiff_assoc($arr1, $value, $key_comp_func) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_udiff_assoc() : usage variation ***
+
+--int 0--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--int 1--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--int 12345--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--int -12345--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--float .5--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--string DQ--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--string SQ--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--heredoc--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--undefined var--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+
+--unset var--
+
+Warning: array_udiff_assoc(): Argument #2 is not an array in %sarray_udiff_assoc_variation2.php on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_udiff_assoc_variation3.phpt b/ext/standard/tests/array/array_udiff_assoc_variation3.phpt
new file mode 100644
index 000000000..36f87eacc
--- /dev/null
+++ b/ext/standard/tests/array/array_udiff_assoc_variation3.phpt
@@ -0,0 +1,242 @@
+--TEST--
+Test array_udiff_assoc() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_udiff_assoc() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr1 = array(1, 2);
+$arr2 = array(1, 2);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for key_comp_func
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_udiff_assoc($arr1, $arr2, $value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_udiff_assoc() : usage variation ***
+
+--int 0--
+
+Warning: array_udiff_assoc(): Not a valid callback 0 in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_udiff_assoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_udiff_assoc(): Not a valid callback 12345 in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_udiff_assoc(): Not a valid callback -2345 in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_udiff_assoc(): Not a valid callback 10.5 in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_udiff_assoc(): Not a valid callback -10.5 in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_udiff_assoc(): Not a valid callback 123456789000 in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_udiff_assoc(): Not a valid callback -123456789000 in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_udiff_assoc(): Not a valid callback 0.5 in %s on line %d
+NULL
+
+--empty array--
+
+Warning: array_udiff_assoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--int indexed array--
+
+Warning: array_udiff_assoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--associative array--
+
+Warning: array_udiff_assoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--nested arrays--
+
+Warning: array_udiff_assoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_udiff_assoc(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_udiff_assoc(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_udiff_assoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_udiff_assoc(): Not a valid callback in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_udiff_assoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_udiff_assoc(): Not a valid callback in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_udiff_assoc(): Not a valid callback in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_udiff_assoc(): Not a valid callback in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_udiff_assoc(): Not a valid callback string in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_udiff_assoc(): Not a valid callback string in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_udiff_assoc(): Not a valid callback sTrInG in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_udiff_assoc(): Not a valid callback hello world in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_udiff_assoc(): Not a valid callback Class A object in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_udiff_assoc(): Not a valid callback in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_udiff_assoc(): Not a valid callback in %s on line %d
+NULL
+===DONE===
+
diff --git a/ext/standard/tests/array/array_udiff_assoc_variation4.phpt b/ext/standard/tests/array/array_udiff_assoc_variation4.phpt
new file mode 100644
index 000000000..0bf3e2dbb
--- /dev/null
+++ b/ext/standard/tests/array/array_udiff_assoc_variation4.phpt
@@ -0,0 +1,228 @@
+--TEST--
+Test array_udiff_assoc() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_udiff_assoc() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr1 = array(1, 2);
+$arr2 = array(1, 2);
+
+include('compare_function.inc');
+$key_comp_func = 'compare_function';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for ...
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_udiff_assoc($arr1, $arr2, $value, $key_comp_func) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_udiff_assoc() : usage variation ***
+
+--int 0--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--int 1--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--int 12345--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--int -12345--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--float .5--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--string DQ--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--string SQ--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--heredoc--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--undefined var--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+
+--unset var--
+
+Warning: array_udiff_assoc(): Argument #3 is not an array in %sarray_udiff_assoc_variation4.php on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_udiff_assoc_variation5.phpt b/ext/standard/tests/array/array_udiff_assoc_variation5.phpt
new file mode 100644
index 000000000..69380767b
--- /dev/null
+++ b/ext/standard/tests/array/array_udiff_assoc_variation5.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test array_udiff_assoc() function : usage variation - incorrect comparison functions
+--FILE--
+<?php
+/* Prototype : array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)
+ * Description: Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+
+echo "*** Testing array_udiff_assoc() : usage variation - differing comparison functions***\n";
+
+$arr1 = array(1);
+$arr2 = array(1,2);
+
+echo "\n-- comparison function with an incorrect return value --\n";
+function incorrect_return_value ($val1, $val2) {
+ return array(1);
+}
+var_dump(array_udiff_assoc($arr1, $arr2, 'incorrect_return_value'));
+
+echo "\n-- comparison function taking too many parameters --\n";
+function too_many_parameters ($val1, $val2, $val3) {
+ return 1;
+}
+var_dump(array_udiff_assoc($arr1, $arr2, 'too_many_parameters'));
+
+echo "\n-- comparison function taking too few parameters --\n";
+function too_few_parameters ($val1) {
+ return 1;
+}
+var_dump(array_udiff_assoc($arr1, $arr2, 'too_few_parameters'));
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_udiff_assoc() : usage variation - differing comparison functions***
+
+-- comparison function with an incorrect return value --
+array(1) {
+ [0]=>
+ int(1)
+}
+
+-- comparison function taking too many parameters --
+
+Warning: Missing argument 3 for too_many_parameters() in %sarray_udiff_assoc_variation5.php on line %d
+array(1) {
+ [0]=>
+ int(1)
+}
+
+-- comparison function taking too few parameters --
+array(1) {
+ [0]=>
+ int(1)
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_udiff_error.phpt b/ext/standard/tests/array/array_udiff_error.phpt
new file mode 100644
index 000000000..2b7bac85c
--- /dev/null
+++ b/ext/standard/tests/array/array_udiff_error.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test array_udiff() function : error conditions
+--FILE--
+<?php
+/* Prototype : array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)
+ * Description: Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_udiff() : error conditions ***\n";
+
+$arr1 = array(1, 2);
+$arr2 = array(1, 2);
+include('compare_function.inc');
+$data_comp_func = 'compare_function';
+$extra_arg = 10;
+
+
+//Test array_udiff with one more than the expected number of arguments
+echo "\n-- Testing array_udiff() function with more than expected no. of arguments --\n";
+var_dump( array_udiff($arr1, $arr2, $data_comp_func, $extra_arg) );
+
+// Testing array_udiff with one less than the expected number of arguments
+echo "\n-- Testing array_udiff() function with less than expected no. of arguments --\n";
+var_dump( array_udiff($arr1, $arr2) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_udiff() : error conditions ***
+
+-- Testing array_udiff() function with more than expected no. of arguments --
+
+Warning: array_udiff(): Not a valid callback 10 in %s on line %d
+NULL
+
+-- Testing array_udiff() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for array_udiff() in %s on line %d
+NULL
+===DONE===
+
diff --git a/ext/standard/tests/array/array_udiff_uassoc_error.phpt b/ext/standard/tests/array/array_udiff_uassoc_error.phpt
new file mode 100644
index 000000000..0ee132e28
--- /dev/null
+++ b/ext/standard/tests/array/array_udiff_uassoc_error.phpt
@@ -0,0 +1,45 @@
+--TEST--
+Test array_udiff_uassoc() function : error conditions
+--FILE--
+<?php
+/* Prototype : array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)
+ * Description: Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_udiff_uassoc() : error conditions ***\n";
+
+
+$arr1 = array(1, 2);
+$arr2 = array(1, 2);
+
+include('compare_function.inc');
+$data_comp_func = 'compare_function';
+$key_comp_func = 'compare_function';
+$extra_arg = 10;
+
+//Test array_udiff_uassoc with one more than the expected number of arguments
+echo "\n-- Testing array_udiff_uassoc() function with more than expected no. of arguments --\n";
+var_dump( array_udiff_uassoc($arr1, $arr2, $data_comp_func, $key_comp_func, $extra_arg) );
+
+// Testing array_udiff_uassoc with one less than the expected number of arguments
+echo "\n-- Testing array_udiff_uassoc() function with less than expected no. of arguments --\n";
+var_dump( array_udiff_uassoc($arr1, $arr2, $data_comp_func) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_udiff_uassoc() : error conditions ***
+
+-- Testing array_udiff_uassoc() function with more than expected no. of arguments --
+
+Warning: array_udiff_uassoc(): Not a valid callback 10 in %s on line %d
+NULL
+
+-- Testing array_udiff_uassoc() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for array_udiff_uassoc() in %s on line %d
+NULL
+===DONE===
+
diff --git a/ext/standard/tests/array/array_udiff_uassoc_variation1.phpt b/ext/standard/tests/array/array_udiff_uassoc_variation1.phpt
new file mode 100644
index 000000000..366358fa4
--- /dev/null
+++ b/ext/standard/tests/array/array_udiff_uassoc_variation1.phpt
@@ -0,0 +1,219 @@
+--TEST--
+Test array_udiff_uassoc() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)
+ * Description: Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_udiff_uassoc() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr2 = array(1, 2);
+
+include('compare_function.inc');
+$data_comp_func = 'compare_function';
+$key_comp_func = 'compare_function';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for arr1
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_udiff_uassoc($value, $arr2, $data_comp_func, $key_comp_func) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_udiff_uassoc() : usage variation ***
+
+--int 0--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_udiff_uassoc(): Argument #1 is not an array in %s on line %d
+NULL
+===DONE===
+
diff --git a/ext/standard/tests/array/array_udiff_uassoc_variation2.phpt b/ext/standard/tests/array/array_udiff_uassoc_variation2.phpt
new file mode 100644
index 000000000..c205da73f
--- /dev/null
+++ b/ext/standard/tests/array/array_udiff_uassoc_variation2.phpt
@@ -0,0 +1,228 @@
+--TEST--
+Test array_udiff_uassoc() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)
+ * Description: Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_udiff_uassoc() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr1 = array(1, 2);
+
+include('compare_function.inc');
+$data_comp_func = 'compare_function';
+$key_comp_func = 'compare_function';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for arr2
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_udiff_uassoc($arr1, $value, $data_comp_func, $key_comp_func) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_udiff_uassoc() : usage variation ***
+
+--int 0--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--int 1--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--int 12345--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--int -12345--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--float .5--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--string DQ--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--string SQ--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--heredoc--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--undefined var--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+
+--unset var--
+
+Warning: array_udiff_uassoc(): Argument #2 is not an array in %sarray_udiff_uassoc_variation2.php on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_udiff_uassoc_variation3.phpt b/ext/standard/tests/array/array_udiff_uassoc_variation3.phpt
new file mode 100644
index 000000000..5e77598ef
--- /dev/null
+++ b/ext/standard/tests/array/array_udiff_uassoc_variation3.phpt
@@ -0,0 +1,245 @@
+--TEST--
+Test array_udiff_uassoc() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)
+ * Description: Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_udiff_uassoc() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr1 = array(1, 2);
+$arr2 = array(1, 2);
+
+include('compare_function.inc');
+$key_comp_func = 'compare_function';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for data_comp_func
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_udiff_uassoc($arr1, $arr2, $value, $key_comp_func) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_udiff_uassoc() : usage variation ***
+
+--int 0--
+
+Warning: array_udiff_uassoc(): Not a valid callback 0 in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_udiff_uassoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_udiff_uassoc(): Not a valid callback 12345 in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_udiff_uassoc(): Not a valid callback -2345 in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_udiff_uassoc(): Not a valid callback 10.5 in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_udiff_uassoc(): Not a valid callback -10.5 in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_udiff_uassoc(): Not a valid callback 123456789000 in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_udiff_uassoc(): Not a valid callback -123456789000 in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_udiff_uassoc(): Not a valid callback 0.5 in %s on line %d
+NULL
+
+--empty array--
+
+Warning: array_udiff_uassoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--int indexed array--
+
+Warning: array_udiff_uassoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--associative array--
+
+Warning: array_udiff_uassoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--nested arrays--
+
+Warning: array_udiff_uassoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_udiff_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_udiff_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_udiff_uassoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_udiff_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_udiff_uassoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_udiff_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_udiff_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_udiff_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_udiff_uassoc(): Not a valid callback string in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_udiff_uassoc(): Not a valid callback string in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_udiff_uassoc(): Not a valid callback sTrInG in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_udiff_uassoc(): Not a valid callback hello world in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_udiff_uassoc(): Not a valid callback Class A object in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_udiff_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_udiff_uassoc(): Not a valid callback in %s on line %d
+NULL
+===DONE===
+
diff --git a/ext/standard/tests/array/array_udiff_uassoc_variation4.phpt b/ext/standard/tests/array/array_udiff_uassoc_variation4.phpt
new file mode 100644
index 000000000..112d1244a
--- /dev/null
+++ b/ext/standard/tests/array/array_udiff_uassoc_variation4.phpt
@@ -0,0 +1,245 @@
+--TEST--
+Test array_udiff_uassoc() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)
+ * Description: Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_udiff_uassoc() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr1 = array(1, 2);
+$arr2 = array(1, 2);
+
+include('compare_function.inc');
+$data_comp_func = 'compare_function';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for key_comp_func
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_udiff_uassoc($arr1, $arr2, $data_comp_func, $value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_udiff_uassoc() : usage variation ***
+
+--int 0--
+
+Warning: array_udiff_uassoc(): Not a valid callback 0 in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_udiff_uassoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_udiff_uassoc(): Not a valid callback 12345 in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_udiff_uassoc(): Not a valid callback -2345 in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_udiff_uassoc(): Not a valid callback 10.5 in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_udiff_uassoc(): Not a valid callback -10.5 in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_udiff_uassoc(): Not a valid callback 123456789000 in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_udiff_uassoc(): Not a valid callback -123456789000 in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_udiff_uassoc(): Not a valid callback 0.5 in %s on line %d
+NULL
+
+--empty array--
+
+Warning: array_udiff_uassoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--int indexed array--
+
+Warning: array_udiff_uassoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--associative array--
+
+Warning: array_udiff_uassoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--nested arrays--
+
+Warning: array_udiff_uassoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_udiff_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_udiff_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_udiff_uassoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_udiff_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_udiff_uassoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_udiff_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_udiff_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_udiff_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_udiff_uassoc(): Not a valid callback string in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_udiff_uassoc(): Not a valid callback string in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_udiff_uassoc(): Not a valid callback sTrInG in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_udiff_uassoc(): Not a valid callback hello world in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_udiff_uassoc(): Not a valid callback Class A object in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_udiff_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_udiff_uassoc(): Not a valid callback in %s on line %d
+NULL
+===DONE===
+
diff --git a/ext/standard/tests/array/array_udiff_uassoc_variation5.phpt b/ext/standard/tests/array/array_udiff_uassoc_variation5.phpt
new file mode 100644
index 000000000..87c707185
--- /dev/null
+++ b/ext/standard/tests/array/array_udiff_uassoc_variation5.phpt
@@ -0,0 +1,229 @@
+--TEST--
+Test array_udiff_uassoc() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)
+ * Description: Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_udiff_uassoc() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr1 = array(1, 2);
+$arr2 = array(1, 2);
+
+include('compare_function.inc');
+$data_comp_func = 'compare_function';
+$key_comp_func = 'compare_function';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for ...
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_udiff_uassoc($arr1, $arr2, $value, $data_comp_func, $key_comp_func) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_udiff_uassoc() : usage variation ***
+
+--int 0--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--int 1--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--int 12345--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--int -12345--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--float .5--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--string DQ--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--string SQ--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--heredoc--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--undefined var--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+
+--unset var--
+
+Warning: array_udiff_uassoc(): Argument #3 is not an array in %sarray_udiff_uassoc_variation5.php on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_udiff_uassoc_variation6.phpt b/ext/standard/tests/array/array_udiff_uassoc_variation6.phpt
new file mode 100644
index 000000000..ec752a31b
--- /dev/null
+++ b/ext/standard/tests/array/array_udiff_uassoc_variation6.phpt
@@ -0,0 +1,58 @@
+--TEST--
+Test array_udiff_uassoc() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)
+ * Description: Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_udiff_uassoc() : usage variation - differing comparison functions***\n";
+
+$arr1 = array(1);
+$arr2 = array(1);
+
+echo "\n-- comparison function with an incorrect return value --\n";
+function incorrect_return_value ($val1, $val2) {
+ return array(1);
+}
+var_dump(array_udiff_uassoc($arr1, $arr2, 'incorrect_return_value', 'incorrect_return_value'));
+
+echo "\n-- comparison function taking too many parameters --\n";
+function too_many_parameters ($val1, $val2, $val3) {
+ return 1;
+}
+var_dump(array_udiff_uassoc($arr1, $arr2, 'too_many_parameters', 'too_many_parameters'));
+
+echo "\n-- comparison function taking too few parameters --\n";
+function too_few_parameters ($val1) {
+ return 1;
+}
+var_dump(array_udiff_uassoc($arr1, $arr2, 'too_few_parameters', 'too_few_parameters'));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_udiff_uassoc() : usage variation - differing comparison functions***
+
+-- comparison function with an incorrect return value --
+array(1) {
+ [0]=>
+ int(1)
+}
+
+-- comparison function taking too many parameters --
+
+Warning: Missing argument 3 for too_many_parameters() in %sarray_udiff_uassoc_variation6.php on line %d
+array(1) {
+ [0]=>
+ int(1)
+}
+
+-- comparison function taking too few parameters --
+array(1) {
+ [0]=>
+ int(1)
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_udiff_variation1.phpt b/ext/standard/tests/array/array_udiff_variation1.phpt
new file mode 100644
index 000000000..d2c0e2409
--- /dev/null
+++ b/ext/standard/tests/array/array_udiff_variation1.phpt
@@ -0,0 +1,227 @@
+--TEST--
+Test array_udiff() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)
+ * Description: Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_udiff() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr2 = array(1, 2);
+
+include('compare_function.inc');
+$data_comp_func = 'compare_function';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for arr1
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_udiff($value, $arr2, $data_comp_func) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_udiff() : usage variation ***
+
+--int 0--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--int 1--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--int 12345--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--int -12345--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--float .5--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--string DQ--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--string SQ--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--heredoc--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--undefined var--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+
+--unset var--
+
+Warning: array_udiff(): Argument #1 is not an array in %sarray_udiff_variation1.php on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_udiff_variation2.phpt b/ext/standard/tests/array/array_udiff_variation2.phpt
new file mode 100644
index 000000000..fd2c12d8a
--- /dev/null
+++ b/ext/standard/tests/array/array_udiff_variation2.phpt
@@ -0,0 +1,227 @@
+--TEST--
+Test array_udiff() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)
+ * Description: Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_udiff() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr1 = array(1, 2);
+
+include('compare_function.inc');
+$data_comp_func = 'compare_function';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for arr2
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_udiff($arr1, $value, $data_comp_func) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_udiff() : usage variation ***
+
+--int 0--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--int 1--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--int 12345--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--int -12345--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--float .5--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--string DQ--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--string SQ--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--heredoc--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--undefined var--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+
+--unset var--
+
+Warning: array_udiff(): Argument #2 is not an array in %sarray_udiff_variation2.php on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_udiff_variation3.phpt b/ext/standard/tests/array/array_udiff_variation3.phpt
new file mode 100644
index 000000000..6abb2a033
--- /dev/null
+++ b/ext/standard/tests/array/array_udiff_variation3.phpt
@@ -0,0 +1,242 @@
+--TEST--
+Test array_udiff() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)
+ * Description: Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_udiff() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr1 = array(1, 2);
+$arr2 = array(1, 2);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for data_comp_func
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_udiff($arr1, $arr2, $value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_udiff() : usage variation ***
+
+--int 0--
+
+Warning: array_udiff(): Not a valid callback 0 in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_udiff(): Not a valid callback 1 in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_udiff(): Not a valid callback 12345 in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_udiff(): Not a valid callback -2345 in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_udiff(): Not a valid callback 10.5 in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_udiff(): Not a valid callback -10.5 in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_udiff(): Not a valid callback 123456789000 in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_udiff(): Not a valid callback -123456789000 in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_udiff(): Not a valid callback 0.5 in %s on line %d
+NULL
+
+--empty array--
+
+Warning: array_udiff(): Not a valid callback Array in %s on line %d
+NULL
+
+--int indexed array--
+
+Warning: array_udiff(): Not a valid callback Array in %s on line %d
+NULL
+
+--associative array--
+
+Warning: array_udiff(): Not a valid callback Array in %s on line %d
+NULL
+
+--nested arrays--
+
+Warning: array_udiff(): Not a valid callback Array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_udiff(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_udiff(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_udiff(): Not a valid callback 1 in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_udiff(): Not a valid callback in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_udiff(): Not a valid callback 1 in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_udiff(): Not a valid callback in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_udiff(): Not a valid callback in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_udiff(): Not a valid callback in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_udiff(): Not a valid callback string in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_udiff(): Not a valid callback string in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_udiff(): Not a valid callback sTrInG in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_udiff(): Not a valid callback hello world in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_udiff(): Not a valid callback Class A object in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_udiff(): Not a valid callback in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_udiff(): Not a valid callback in %s on line %d
+NULL
+===DONE===
+
diff --git a/ext/standard/tests/array/array_udiff_variation4.phpt b/ext/standard/tests/array/array_udiff_variation4.phpt
new file mode 100644
index 000000000..09dec4f9e
--- /dev/null
+++ b/ext/standard/tests/array/array_udiff_variation4.phpt
@@ -0,0 +1,228 @@
+--TEST--
+Test array_udiff() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)
+ * Description: Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_udiff() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr1 = array(1, 2);
+$arr2 = array(1, 2);
+
+include('compare_function.inc');
+$data_comp_func = 'compare_function';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for ...
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_udiff($arr1, $arr2, $value, $data_comp_func) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_udiff() : usage variation ***
+
+--int 0--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--int 1--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--int 12345--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--int -12345--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--float .5--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--string DQ--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--string SQ--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--heredoc--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--undefined var--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+
+--unset var--
+
+Warning: array_udiff(): Argument #3 is not an array in %sarray_udiff_variation4.php on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_udiff_variation5.phpt b/ext/standard/tests/array/array_udiff_variation5.phpt
new file mode 100644
index 000000000..49405d40b
--- /dev/null
+++ b/ext/standard/tests/array/array_udiff_variation5.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Test array_udiff() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)
+ * Description: Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_udiff() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr1 = array(1);
+$arr2 = array(1);
+
+echo "\n-- comparison function with an incorrect return value --\n";
+function incorrect_return_value ($val1, $val2) {
+ return array(1);
+}
+var_dump(array_udiff($arr1, $arr2, 'incorrect_return_value'));
+
+echo "\n-- comparison function taking too many parameters --\n";
+function too_many_parameters ($val1, $val2, $val3) {
+ return 0;
+}
+var_dump(array_udiff($arr1, $arr2, 'too_many_parameters'));
+
+echo "\n-- comparison function taking too few parameters --\n";
+function too_few_parameters ($val1) {
+ return 0;
+}
+var_dump(array_udiff($arr1, $arr2, 'too_few_parameters'));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_udiff() : usage variation ***
+
+-- comparison function with an incorrect return value --
+array(1) {
+ [0]=>
+ int(1)
+}
+
+-- comparison function taking too many parameters --
+
+Warning: Missing argument 3 for too_many_parameters() in %sarray_udiff_variation5.php on line %d
+array(0) {
+}
+
+-- comparison function taking too few parameters --
+array(0) {
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_uintersect_assoc_basic2.phpt b/ext/standard/tests/array/array_uintersect_assoc_basic2.phpt
new file mode 100644
index 000000000..f0c7ecc80
--- /dev/null
+++ b/ext/standard/tests/array/array_uintersect_assoc_basic2.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test array_uintersect_assoc() function : basic functionality - testing with multiple array arguments
+--FILE--
+<?php
+/* Prototype : array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)
+ * Description: U
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_uintersect_assoc() : basic functionality - testing with multiple array arguments ***\n";
+
+include('compare_function.inc');
+$data_compare_function = 'compare_function';
+
+// Initialise all required variables
+$arr1 = array("one" => "one", "02" => "two", '3' => "three", "four", "0.5" => 5, 0.6 => 6, "0x7" => "seven");
+$arr2 = array("one" => "one", "02" => "two", '3' => "three");
+$arr3 = array("one" => "one", '3' => "three", "0.5" => 5);
+$arr4 = array("one" => "one", '3' => "three", "0.5" => 5);
+
+
+var_dump( array_uintersect_assoc($arr1, $arr2, $arr3, $arr4, $data_compare_function) );
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_uintersect_assoc() : basic functionality - testing with multiple array arguments ***
+array(2) {
+ ["one"]=>
+ string(3) "one"
+ [3]=>
+ string(5) "three"
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_uintersect_assoc_error.phpt b/ext/standard/tests/array/array_uintersect_assoc_error.phpt
new file mode 100644
index 000000000..6114224ac
--- /dev/null
+++ b/ext/standard/tests/array/array_uintersect_assoc_error.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test array_uintersect_assoc() function : error conditions
+--FILE--
+<?php
+/* Prototype : array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)
+ * Description: U
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_uintersect_assoc() : error conditions ***\n";
+
+//Test array_uintersect_assoc with one more than the expected number of arguments
+echo "\n-- Testing array_uintersect_assoc() function with more than expected no. of arguments --\n";
+$arr1 = array(1, 2);
+$arr2 = array(1, 2);
+include('compare_function.inc');
+$data_compare_function = 'compare_function';
+
+$extra_arg = 10;
+var_dump( array_uintersect_assoc($arr1, $arr2, $data_compare_function, $extra_arg) );
+
+// Testing array_uintersect_assoc with one less than the expected number of arguments
+echo "\n-- Testing array_uintersect_assoc() function with less than expected no. of arguments --\n";
+$arr1 = array(1, 2);
+$arr2 = array(1, 2);
+var_dump( array_uintersect_assoc($arr1, $arr2) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_uintersect_assoc() : error conditions ***
+
+-- Testing array_uintersect_assoc() function with more than expected no. of arguments --
+
+Warning: array_uintersect_assoc(): Not a valid callback 10 in %s on line %d
+NULL
+
+-- Testing array_uintersect_assoc() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for array_uintersect_assoc() in %s on line %d
+NULL
+===DONE===
+
diff --git a/ext/standard/tests/array/array_uintersect_assoc_variation1.phpt b/ext/standard/tests/array/array_uintersect_assoc_variation1.phpt
new file mode 100644
index 000000000..45d0a8da7
--- /dev/null
+++ b/ext/standard/tests/array/array_uintersect_assoc_variation1.phpt
@@ -0,0 +1,227 @@
+--TEST--
+Test array_uintersect_assoc() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)
+ * Description: U
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_uintersect_assoc() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr2 = array(1, 2);
+
+include('compare_function.inc');
+$data_compare_function = 'compare_function';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for arr1
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_uintersect_assoc($value, $arr2, $data_compare_function) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_uintersect_assoc() : usage variation ***
+
+--int 0--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--int 1--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--int 12345--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--int -12345--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--float .5--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--string DQ--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--string SQ--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--heredoc--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--undefined var--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+
+--unset var--
+
+Warning: array_uintersect_assoc(): Argument #1 is not an array in %sarray_uintersect_assoc_variation1.php on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_uintersect_assoc_variation2.phpt b/ext/standard/tests/array/array_uintersect_assoc_variation2.phpt
new file mode 100644
index 000000000..a421c252a
--- /dev/null
+++ b/ext/standard/tests/array/array_uintersect_assoc_variation2.phpt
@@ -0,0 +1,227 @@
+--TEST--
+Test array_uintersect_assoc() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)
+ * Description: U
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_uintersect_assoc() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr1 = array(1, 2);
+
+include('compare_function.inc');
+$data_compare_function = 'compare_function';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for arr2
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_uintersect_assoc($arr1, $value, $data_compare_function) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_uintersect_assoc() : usage variation ***
+
+--int 0--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--int 1--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--int 12345--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--int -12345--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--float .5--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--string DQ--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--string SQ--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--heredoc--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--undefined var--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+
+--unset var--
+
+Warning: array_uintersect_assoc(): Argument #2 is not an array in %sarray_uintersect_assoc_variation2.php on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_uintersect_assoc_variation3.phpt b/ext/standard/tests/array/array_uintersect_assoc_variation3.phpt
new file mode 100644
index 000000000..2654b1008
--- /dev/null
+++ b/ext/standard/tests/array/array_uintersect_assoc_variation3.phpt
@@ -0,0 +1,242 @@
+--TEST--
+Test array_uintersect_assoc() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)
+ * Description: U
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_uintersect_assoc() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr1 = array(1, 2);
+$arr2 = array(1, 2);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for data_compare_func
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_uintersect_assoc($arr1, $arr2, $value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_uintersect_assoc() : usage variation ***
+
+--int 0--
+
+Warning: array_uintersect_assoc(): Not a valid callback 0 in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_uintersect_assoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_uintersect_assoc(): Not a valid callback 12345 in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_uintersect_assoc(): Not a valid callback -2345 in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_uintersect_assoc(): Not a valid callback 10.5 in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_uintersect_assoc(): Not a valid callback -10.5 in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_uintersect_assoc(): Not a valid callback 123456789000 in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_uintersect_assoc(): Not a valid callback -123456789000 in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_uintersect_assoc(): Not a valid callback 0.5 in %s on line %d
+NULL
+
+--empty array--
+
+Warning: array_uintersect_assoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--int indexed array--
+
+Warning: array_uintersect_assoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--associative array--
+
+Warning: array_uintersect_assoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--nested arrays--
+
+Warning: array_uintersect_assoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_uintersect_assoc(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_uintersect_assoc(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_uintersect_assoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_uintersect_assoc(): Not a valid callback in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_uintersect_assoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_uintersect_assoc(): Not a valid callback in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_uintersect_assoc(): Not a valid callback in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_uintersect_assoc(): Not a valid callback in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_uintersect_assoc(): Not a valid callback string in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_uintersect_assoc(): Not a valid callback string in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_uintersect_assoc(): Not a valid callback sTrInG in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_uintersect_assoc(): Not a valid callback hello world in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_uintersect_assoc(): Not a valid callback Class A object in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_uintersect_assoc(): Not a valid callback in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_uintersect_assoc(): Not a valid callback in %s on line %d
+NULL
+===DONE===
+
diff --git a/ext/standard/tests/array/array_uintersect_assoc_variation4.phpt b/ext/standard/tests/array/array_uintersect_assoc_variation4.phpt
new file mode 100644
index 000000000..abff23ad5
--- /dev/null
+++ b/ext/standard/tests/array/array_uintersect_assoc_variation4.phpt
@@ -0,0 +1,228 @@
+--TEST--
+Test array_uintersect_assoc() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)
+ * Description: U
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_uintersect_assoc() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr1 = array(1, 2);
+$arr2 = array(1, 2);
+
+include('compare_function.inc');
+$data_compare_function = 'compare_function';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for ...
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_uintersect_assoc($arr1, $arr2, $value, $data_compare_function ) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_uintersect_assoc() : usage variation ***
+
+--int 0--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--int 1--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--int 12345--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--int -12345--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--float .5--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--string DQ--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--string SQ--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--heredoc--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--undefined var--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+
+--unset var--
+
+Warning: array_uintersect_assoc(): Argument #3 is not an array in %sarray_uintersect_assoc_variation4.php on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/array_uintersect_assoc_variation5.phpt b/ext/standard/tests/array/array_uintersect_assoc_variation5.phpt
new file mode 100644
index 000000000..e2d7bd03a
--- /dev/null
+++ b/ext/standard/tests/array/array_uintersect_assoc_variation5.phpt
@@ -0,0 +1,54 @@
+--TEST--
+Test array_uintersect_assoc() function : usage variation - differing comparison functions
+--FILE--
+<?php
+/* Prototype : array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)
+ * Description: Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_uintersect_assoc() : usage variation - differing comparison functions***\n";
+
+$arr1 = array(1);
+$arr2 = array(1,2);
+
+echo "\n-- comparison function with an incorrect return value --\n";
+function incorrect_return_value ($val1, $val2) {
+ return array(1);
+}
+var_dump(array_uintersect_assoc($arr1, $arr2, 'incorrect_return_value'));
+
+echo "\n-- comparison function taking too many parameters --\n";
+function too_many_parameters ($val1, $val2, $val3) {
+ return 1;
+}
+var_dump(array_uintersect_assoc($arr1, $arr2, 'too_many_parameters'));
+
+echo "\n-- comparison function taking too few parameters --\n";
+function too_few_parameters ($val1) {
+ return 1;
+}
+var_dump(array_uintersect_assoc($arr1, $arr2, 'too_few_parameters'));
+
+?>
+
+===DONE===
+--EXPECTF--
+*** Testing array_uintersect_assoc() : usage variation - differing comparison functions***
+
+-- comparison function with an incorrect return value --
+array(0) {
+}
+
+-- comparison function taking too many parameters --
+
+Warning: Missing argument 3 for too_many_parameters() in %sarray_uintersect_assoc_variation5.php on line %d
+array(0) {
+}
+
+-- comparison function taking too few parameters --
+array(0) {
+}
+
+===DONE===
diff --git a/ext/standard/tests/array/array_uintersect_error.phpt b/ext/standard/tests/array/array_uintersect_error.phpt
new file mode 100644
index 000000000..eb111c5fd
--- /dev/null
+++ b/ext/standard/tests/array/array_uintersect_error.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test array_uintersect() function : error conditions
+--FILE--
+<?php
+/* Prototype : array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)
+ * Description: Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_uintersect() : error conditions ***\n";
+
+
+//Test array_uintersect with one more than the expected number of arguments
+echo "\n-- Testing array_uintersect() function with more than expected no. of arguments --\n";
+$arr1 = array(1, 2);
+$arr2 = array(1, 2);
+
+include('compare_function.inc');
+$data_compare_function = 'compare_function';
+
+$extra_arg = 10;
+var_dump( array_uintersect($arr1, $arr2, $data_compare_function, $extra_arg) );
+
+// Testing array_uintersect with one less than the expected number of arguments
+echo "\n-- Testing array_uintersect() function with less than expected no. of arguments --\n";
+$arr1 = array(1, 2);
+$arr2 = array(1, 2);
+var_dump( array_uintersect($arr1, $arr2) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_uintersect() : error conditions ***
+
+-- Testing array_uintersect() function with more than expected no. of arguments --
+
+Warning: array_uintersect(): Not a valid callback 10 in %s on line %d
+NULL
+
+-- Testing array_uintersect() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for array_uintersect() in %s on line %d
+NULL
+===DONE===
+
diff --git a/ext/standard/tests/array/array_uintersect_uassoc_error.phpt b/ext/standard/tests/array/array_uintersect_uassoc_error.phpt
new file mode 100644
index 000000000..ee317a5d5
--- /dev/null
+++ b/ext/standard/tests/array/array_uintersect_uassoc_error.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test array_uintersect_uassoc() function : error conditions
+--FILE--
+<?php
+/* Prototype : array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)
+ * Description: Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_uintersect_uassoc() : error conditions ***\n";
+
+$arr1 = array(1, 2);
+$arr2 = array(1, 2);
+
+include('compare_function.inc');
+$data_compare_func = 'compare_function';
+$key_compare_func = 'compare_function';
+
+$extra_arg = 10;
+
+
+//Test array_uintersect_uassoc with one more than the expected number of arguments
+echo "\n-- Testing array_uintersect_uassoc() function with more than expected no. of arguments --\n";
+var_dump( array_uintersect_uassoc($arr1, $arr2, $data_compare_func, $key_compare_func, $extra_arg) );
+
+// Testing array_uintersect_uassoc with one less than the expected number of arguments
+echo "\n-- Testing array_uintersect_uassoc() function with less than expected no. of arguments --\n";
+var_dump( array_uintersect_uassoc($arr1, $arr2, $data_compare_func) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_uintersect_uassoc() : error conditions ***
+
+-- Testing array_uintersect_uassoc() function with more than expected no. of arguments --
+
+Warning: array_uintersect_uassoc(): Not a valid callback 10 in %s on line %d
+NULL
+
+-- Testing array_uintersect_uassoc() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for array_uintersect_uassoc() in %s on line %d
+NULL
+===DONE===
+
diff --git a/ext/standard/tests/array/array_uintersect_uassoc_variation1.phpt b/ext/standard/tests/array/array_uintersect_uassoc_variation1.phpt
new file mode 100644
index 000000000..764c584b2
--- /dev/null
+++ b/ext/standard/tests/array/array_uintersect_uassoc_variation1.phpt
@@ -0,0 +1,228 @@
+--TEST--
+Test array_uintersect_uassoc() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)
+ * Description: Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_uintersect_uassoc() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr2 = array(1, 2);
+
+include('compare_function.inc');
+$data_compare_func = 'compare_function';
+$key_compare_func = 'compare_function';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for arr1
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_uintersect_uassoc($value, $arr2, $data_compare_func, $key_compare_func) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_uintersect_uassoc() : usage variation ***
+
+--int 0--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--int 1--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--int 12345--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--int -12345--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--float .5--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--string DQ--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--string SQ--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--heredoc--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--undefined var--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+
+--unset var--
+
+Warning: array_uintersect_uassoc(): Argument #1 is not an array in %sarray_uintersect_uassoc_variation1.php on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_uintersect_uassoc_variation2.phpt b/ext/standard/tests/array/array_uintersect_uassoc_variation2.phpt
new file mode 100644
index 000000000..2efa93d0c
--- /dev/null
+++ b/ext/standard/tests/array/array_uintersect_uassoc_variation2.phpt
@@ -0,0 +1,228 @@
+--TEST--
+Test array_uintersect_uassoc() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)
+ * Description: Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_uintersect_uassoc() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr1 = array(1, 2);
+
+include('compare_function.inc');
+$data_compare_func = 'compare_function';
+$key_compare_func = 'compare_function';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for arr2
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_uintersect_uassoc($arr1, $value, $data_compare_func, $key_compare_func) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_uintersect_uassoc() : usage variation ***
+
+--int 0--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--int 1--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--int 12345--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--int -12345--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--float .5--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--string DQ--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--string SQ--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--heredoc--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--undefined var--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+
+--unset var--
+
+Warning: array_uintersect_uassoc(): Argument #2 is not an array in %sarray_uintersect_uassoc_variation2.php on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_uintersect_uassoc_variation3.phpt b/ext/standard/tests/array/array_uintersect_uassoc_variation3.phpt
new file mode 100644
index 000000000..29fa37605
--- /dev/null
+++ b/ext/standard/tests/array/array_uintersect_uassoc_variation3.phpt
@@ -0,0 +1,245 @@
+--TEST--
+Test array_uintersect_uassoc() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)
+ * Description: Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_uintersect_uassoc() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr1 = array(1, 2);
+$arr2 = array(1, 2);
+
+include('compare_function.inc');
+$key_compare_func = 'compare_function';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for data_compare_func
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_uintersect_uassoc($arr1, $arr2, $value, $key_compare_func) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_uintersect_uassoc() : usage variation ***
+
+--int 0--
+
+Warning: array_uintersect_uassoc(): Not a valid callback 0 in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_uintersect_uassoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_uintersect_uassoc(): Not a valid callback 12345 in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_uintersect_uassoc(): Not a valid callback -2345 in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_uintersect_uassoc(): Not a valid callback 10.5 in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_uintersect_uassoc(): Not a valid callback -10.5 in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_uintersect_uassoc(): Not a valid callback 123456789000 in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_uintersect_uassoc(): Not a valid callback -123456789000 in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_uintersect_uassoc(): Not a valid callback 0.5 in %s on line %d
+NULL
+
+--empty array--
+
+Warning: array_uintersect_uassoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--int indexed array--
+
+Warning: array_uintersect_uassoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--associative array--
+
+Warning: array_uintersect_uassoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--nested arrays--
+
+Warning: array_uintersect_uassoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_uintersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_uintersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_uintersect_uassoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_uintersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_uintersect_uassoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_uintersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_uintersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_uintersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_uintersect_uassoc(): Not a valid callback string in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_uintersect_uassoc(): Not a valid callback string in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_uintersect_uassoc(): Not a valid callback sTrInG in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_uintersect_uassoc(): Not a valid callback hello world in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_uintersect_uassoc(): Not a valid callback Class A object in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_uintersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_uintersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+===DONE===
+
diff --git a/ext/standard/tests/array/array_uintersect_uassoc_variation4.phpt b/ext/standard/tests/array/array_uintersect_uassoc_variation4.phpt
new file mode 100644
index 000000000..2398f125d
--- /dev/null
+++ b/ext/standard/tests/array/array_uintersect_uassoc_variation4.phpt
@@ -0,0 +1,245 @@
+--TEST--
+Test array_uintersect_uassoc() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)
+ * Description: Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_uintersect_uassoc() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr1 = array(1, 2);
+$arr2 = array(1, 2);
+
+include('compare_function.inc');
+$data_compare_func = 'compare_function';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for key_compare_func
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_uintersect_uassoc($arr1, $arr2, $data_compare_func, $value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_uintersect_uassoc() : usage variation ***
+
+--int 0--
+
+Warning: array_uintersect_uassoc(): Not a valid callback 0 in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_uintersect_uassoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_uintersect_uassoc(): Not a valid callback 12345 in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_uintersect_uassoc(): Not a valid callback -2345 in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_uintersect_uassoc(): Not a valid callback 10.5 in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_uintersect_uassoc(): Not a valid callback -10.5 in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_uintersect_uassoc(): Not a valid callback 123456789000 in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_uintersect_uassoc(): Not a valid callback -123456789000 in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_uintersect_uassoc(): Not a valid callback 0.5 in %s on line %d
+NULL
+
+--empty array--
+
+Warning: array_uintersect_uassoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--int indexed array--
+
+Warning: array_uintersect_uassoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--associative array--
+
+Warning: array_uintersect_uassoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--nested arrays--
+
+Warning: array_uintersect_uassoc(): Not a valid callback Array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_uintersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_uintersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_uintersect_uassoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_uintersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_uintersect_uassoc(): Not a valid callback 1 in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_uintersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_uintersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_uintersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_uintersect_uassoc(): Not a valid callback string in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_uintersect_uassoc(): Not a valid callback string in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_uintersect_uassoc(): Not a valid callback sTrInG in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_uintersect_uassoc(): Not a valid callback hello world in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_uintersect_uassoc(): Not a valid callback Class A object in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_uintersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_uintersect_uassoc(): Not a valid callback in %s on line %d
+NULL
+===DONE===
+
diff --git a/ext/standard/tests/array/array_uintersect_uassoc_variation5.phpt b/ext/standard/tests/array/array_uintersect_uassoc_variation5.phpt
new file mode 100644
index 000000000..061ac60ed
--- /dev/null
+++ b/ext/standard/tests/array/array_uintersect_uassoc_variation5.phpt
@@ -0,0 +1,229 @@
+--TEST--
+Test array_uintersect_uassoc() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)
+ * Description: Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_uintersect_uassoc() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr1 = array(1, 2);
+$arr2 = array(1, 2);
+
+include('compare_function.inc');
+$data_compare_func = 'compare_function';
+$key_compare_func = 'compare_function';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for ...
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_uintersect_uassoc($arr1, $arr2, $value, $data_compare_func, $key_compare_func) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_uintersect_uassoc() : usage variation ***
+
+--int 0--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--int 1--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--int 12345--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--int -12345--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--float .5--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--string DQ--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--string SQ--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--heredoc--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--undefined var--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+
+--unset var--
+
+Warning: array_uintersect_uassoc(): Argument #3 is not an array in %sarray_uintersect_uassoc_variation5.php on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_uintersect_uassoc_variation6.phpt b/ext/standard/tests/array/array_uintersect_uassoc_variation6.phpt
new file mode 100644
index 000000000..6ed86f841
--- /dev/null
+++ b/ext/standard/tests/array/array_uintersect_uassoc_variation6.phpt
@@ -0,0 +1,56 @@
+--TEST--
+Test array_uintersect_uassoc() function : usage variation - incorrect callbacks
+--FILE--
+<?php
+/* Prototype : array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)
+ * Description: Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_uintersect_uassoc() : usage variation - incorrect callbacks ***\n";
+
+$arr1 = array(1);
+$arr2 = array(1,2);
+
+echo "\n-- comparison function with an incorrect return value --\n";
+function incorrect_return_value ($val1, $val2) {
+ return array(1);
+}
+var_dump(array_uintersect_uassoc($arr1, $arr2, 'incorrect_return_value', 'incorrect_return_value'));
+
+echo "\n-- comparison function taking too many parameters --\n";
+function too_many_parameters ($val1, $val2, $val3) {
+ return 1;
+}
+var_dump(array_uintersect_uassoc($arr1, $arr2, 'too_many_parameters', 'too_many_parameters'));
+
+echo "\n-- comparison function taking too few parameters --\n";
+function too_few_parameters ($val1) {
+ return 1;
+}
+var_dump(array_uintersect_uassoc($arr1, $arr2, 'too_few_parameters', 'too_few_parameters'));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_uintersect_uassoc() : usage variation - incorrect callbacks ***
+
+-- comparison function with an incorrect return value --
+array(0) {
+}
+
+-- comparison function taking too many parameters --
+
+Warning: Missing argument 3 for too_many_parameters() in %sarray_uintersect_uassoc_variation6.php on line %d
+
+Warning: Missing argument 3 for too_many_parameters() in %sarray_uintersect_uassoc_variation6.php on line %d
+
+Warning: Missing argument 3 for too_many_parameters() in %sarray_uintersect_uassoc_variation6.php on line %d
+array(0) {
+}
+
+-- comparison function taking too few parameters --
+array(0) {
+}
+===DONE===
diff --git a/ext/standard/tests/array/array_uintersect_variation1.phpt b/ext/standard/tests/array/array_uintersect_variation1.phpt
new file mode 100644
index 000000000..0663a958f
--- /dev/null
+++ b/ext/standard/tests/array/array_uintersect_variation1.phpt
@@ -0,0 +1,227 @@
+--TEST--
+Test array_uintersect() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)
+ * Description: Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_uintersect() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr2 = array(1, 2);
+
+include('compare_function.inc');
+$data_compare_function = 'compare_function';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for arr1
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_uintersect($value, $arr2, $data_compare_function) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_uintersect() : usage variation ***
+
+--int 0--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--int 1--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--int 12345--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--int -12345--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--float .5--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--string DQ--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--string SQ--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--heredoc--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--undefined var--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+
+--unset var--
+
+Warning: array_uintersect(): Argument #1 is not an array in %sarray_uintersect_variation1.php on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_uintersect_variation2.phpt b/ext/standard/tests/array/array_uintersect_variation2.phpt
new file mode 100644
index 000000000..79f4cd09c
--- /dev/null
+++ b/ext/standard/tests/array/array_uintersect_variation2.phpt
@@ -0,0 +1,227 @@
+--TEST--
+Test array_uintersect() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)
+ * Description: Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_uintersect() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr1 = array(1, 2);
+
+include('compare_function.inc');
+$data_compare_function = 'compare_function';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for arr2
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_uintersect($arr1, $value, $data_compare_function) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_uintersect() : usage variation ***
+
+--int 0--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--int 1--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--int 12345--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--int -12345--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--float .5--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--string DQ--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--string SQ--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--heredoc--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--undefined var--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+
+--unset var--
+
+Warning: array_uintersect(): Argument #2 is not an array in %sarray_uintersect_variation2.php on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_uintersect_variation3.phpt b/ext/standard/tests/array/array_uintersect_variation3.phpt
new file mode 100644
index 000000000..5093f3a27
--- /dev/null
+++ b/ext/standard/tests/array/array_uintersect_variation3.phpt
@@ -0,0 +1,242 @@
+--TEST--
+Test array_uintersect() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)
+ * Description: Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_uintersect() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr1 = array(1, 2);
+$arr2 = array(1, 2);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for data_compare_func
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_uintersect($arr1, $arr2, $value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_uintersect() : usage variation ***
+
+--int 0--
+
+Warning: array_uintersect(): Not a valid callback 0 in %s on line %d
+NULL
+
+--int 1--
+
+Warning: array_uintersect(): Not a valid callback 1 in %s on line %d
+NULL
+
+--int 12345--
+
+Warning: array_uintersect(): Not a valid callback 12345 in %s on line %d
+NULL
+
+--int -12345--
+
+Warning: array_uintersect(): Not a valid callback -2345 in %s on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_uintersect(): Not a valid callback 10.5 in %s on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_uintersect(): Not a valid callback -10.5 in %s on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_uintersect(): Not a valid callback 123456789000 in %s on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_uintersect(): Not a valid callback -123456789000 in %s on line %d
+NULL
+
+--float .5--
+
+Warning: array_uintersect(): Not a valid callback 0.5 in %s on line %d
+NULL
+
+--empty array--
+
+Warning: array_uintersect(): Not a valid callback Array in %s on line %d
+NULL
+
+--int indexed array--
+
+Warning: array_uintersect(): Not a valid callback Array in %s on line %d
+NULL
+
+--associative array--
+
+Warning: array_uintersect(): Not a valid callback Array in %s on line %d
+NULL
+
+--nested arrays--
+
+Warning: array_uintersect(): Not a valid callback Array in %s on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_uintersect(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_uintersect(): Not a valid callback in %s on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_uintersect(): Not a valid callback 1 in %s on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_uintersect(): Not a valid callback in %s on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_uintersect(): Not a valid callback 1 in %s on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_uintersect(): Not a valid callback in %s on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_uintersect(): Not a valid callback in %s on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_uintersect(): Not a valid callback in %s on line %d
+NULL
+
+--string DQ--
+
+Warning: array_uintersect(): Not a valid callback string in %s on line %d
+NULL
+
+--string SQ--
+
+Warning: array_uintersect(): Not a valid callback string in %s on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_uintersect(): Not a valid callback sTrInG in %s on line %d
+NULL
+
+--heredoc--
+
+Warning: array_uintersect(): Not a valid callback hello world in %s on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_uintersect(): Not a valid callback Class A object in %s on line %d
+NULL
+
+--undefined var--
+
+Warning: array_uintersect(): Not a valid callback in %s on line %d
+NULL
+
+--unset var--
+
+Warning: array_uintersect(): Not a valid callback in %s on line %d
+NULL
+===DONE===
+
diff --git a/ext/standard/tests/array/array_uintersect_variation4.phpt b/ext/standard/tests/array/array_uintersect_variation4.phpt
new file mode 100644
index 000000000..45207b3c1
--- /dev/null
+++ b/ext/standard/tests/array/array_uintersect_variation4.phpt
@@ -0,0 +1,228 @@
+--TEST--
+Test array_uintersect() function : usage variation
+--FILE--
+<?php
+/* Prototype : array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)
+ * Description: Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_uintersect() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$arr1 = array(1, 2);
+$arr2 = array(1, 2);
+
+include('compare_function.inc');
+$data_compare_function = 'compare_function';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for ...
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( array_uintersect($arr1, $arr2, $value, $data_compare_function) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing array_uintersect() : usage variation ***
+
+--int 0--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--int 1--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--int 12345--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--int -12345--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--float 10.5--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--float -10.5--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--float 12.3456789000e10--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--float -12.3456789000e10--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--float .5--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--uppercase NULL--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--lowercase null--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--lowercase true--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--lowercase false--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--uppercase TRUE--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--uppercase FALSE--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--empty string DQ--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--empty string SQ--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--string DQ--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--string SQ--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--mixed case string--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--heredoc--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--instance of classWithToString--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--instance of classWithoutToString--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--undefined var--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+
+--unset var--
+
+Warning: array_uintersect(): Argument #3 is not an array in %sarray_uintersect_variation4.php on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/array_uintersect_variation5.phpt b/ext/standard/tests/array/array_uintersect_variation5.phpt
new file mode 100644
index 000000000..75cf08e27
--- /dev/null
+++ b/ext/standard/tests/array/array_uintersect_variation5.phpt
@@ -0,0 +1,58 @@
+--TEST--
+Test array_uintersect() function : usage variation - differing comparison functions
+--FILE--
+<?php
+/* Prototype : array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)
+ * Description: Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback.
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing array_uintersect() : usage variation - differing comparison functions***\n";
+
+$arr1 = array(1);
+$arr2 = array(1,2);
+
+echo "\n-- comparison function with an incorrect return value --\n";
+function incorrect_return_value ($val1, $val2) {
+ return array(1);
+}
+var_dump(array_uintersect($arr1, $arr2, 'incorrect_return_value'));
+
+echo "\n-- comparison function taking too many parameters --\n";
+function too_many_parameters ($val1, $val2, $val3) {
+ return 1;
+}
+var_dump(array_uintersect($arr1, $arr2, 'too_many_parameters'));
+
+echo "\n-- comparison function taking too few parameters --\n";
+function too_few_parameters ($val1) {
+ return 1;
+}
+var_dump(array_uintersect($arr1, $arr2, 'too_few_parameters'));
+
+?>
+
+===DONE===
+--EXPECTF--
+*** Testing array_uintersect() : usage variation - differing comparison functions***
+
+-- comparison function with an incorrect return value --
+array(0) {
+}
+
+-- comparison function taking too many parameters --
+
+Warning: Missing argument 3 for too_many_parameters() in %sarray_uintersect_variation5.php on line %d
+
+Warning: Missing argument 3 for too_many_parameters() in %sarray_uintersect_variation5.php on line %d
+
+Warning: Missing argument 3 for too_many_parameters() in %sarray_uintersect_variation5.php on line %d
+array(0) {
+}
+
+-- comparison function taking too few parameters --
+array(0) {
+}
+
+===DONE===
diff --git a/ext/standard/tests/array/array_unique_error.phpt b/ext/standard/tests/array/array_unique_error.phpt
index 59d458a2a..9da3dfcad 100644
--- a/ext/standard/tests/array/array_unique_error.phpt
+++ b/ext/standard/tests/array/array_unique_error.phpt
@@ -17,7 +17,7 @@ var_dump( array_unique() );
echo "\n-- Testing array_unique() function with more than expected no. of arguments --\n";
$input = array(1, 2);
$extra_arg = 10;
-var_dump( array_unique($input, $extra_arg) );
+var_dump( array_unique($input, SORT_NUMERIC, $extra_arg) );
echo "Done";
?>
@@ -26,11 +26,11 @@ echo "Done";
-- Testing array_unique() function with zero arguments --
-Warning: Wrong parameter count for array_unique() in %s on line %d
+Warning: array_unique() expects at least 1 parameter, 0 given in %s on line %d
NULL
-- Testing array_unique() function with more than expected no. of arguments --
-Warning: Wrong parameter count for array_unique() in %s on line %d
+Warning: array_unique() expects at most 2 parameters, 3 given in %s on line %d
NULL
Done
diff --git a/ext/standard/tests/array/array_unique_variation1.phpt b/ext/standard/tests/array/array_unique_variation1.phpt
index 3a9ae10dd..8029807bb 100644
--- a/ext/standard/tests/array/array_unique_variation1.phpt
+++ b/ext/standard/tests/array/array_unique_variation1.phpt
@@ -191,4 +191,4 @@ bool(false)
Warning: array_unique(): The argument should be an array in %s on line %d
bool(false)
-Done \ No newline at end of file
+Done
diff --git a/ext/standard/tests/array/array_unique_variation2.phpt b/ext/standard/tests/array/array_unique_variation2.phpt
index 5cdb43a8e..3ec3f288b 100644
--- a/ext/standard/tests/array/array_unique_variation2.phpt
+++ b/ext/standard/tests/array/array_unique_variation2.phpt
@@ -74,7 +74,7 @@ $inputs = array (
$iterator = 1;
foreach($inputs as $input) {
echo "-- Iteration $iterator --\n";
- var_dump( array_unique($input) );
+ var_dump( array_unique($input, SORT_STRING) );
$iterator++;
}
diff --git a/ext/standard/tests/array/array_unique_variation6.phpt b/ext/standard/tests/array/array_unique_variation6.phpt
index fd8b226fa..15a46518b 100644
--- a/ext/standard/tests/array/array_unique_variation6.phpt
+++ b/ext/standard/tests/array/array_unique_variation6.phpt
@@ -29,7 +29,7 @@ $input = array(
5 => $value4
);
-var_dump( array_unique($input) );
+var_dump( array_unique($input, SORT_STRING) );
echo "Done";
?>
diff --git a/ext/standard/tests/array/array_unique_variation8.phpt b/ext/standard/tests/array/array_unique_variation8.phpt
index ae6e8bb5c..6cf343221 100644
--- a/ext/standard/tests/array/array_unique_variation8.phpt
+++ b/ext/standard/tests/array/array_unique_variation8.phpt
@@ -22,7 +22,7 @@ $input = array(
array(1, 2, 3, 1)
);
-var_dump( array_unique($input) );
+var_dump( array_unique($input, SORT_STRING) );
echo "Done";
?>
diff --git a/ext/standard/tests/array/array_unshift_variation1.phpt b/ext/standard/tests/array/array_unshift_variation1.phpt
index b1292d626..32b987654 100644
--- a/ext/standard/tests/array/array_unshift_variation1.phpt
+++ b/ext/standard/tests/array/array_unshift_variation1.phpt
@@ -301,12 +301,12 @@ string(11) "hello world"
-- Iteration 21 --
Warning: array_unshift(): The first argument should be an array in %s on line %d
bool(false)
-object(classA)#%d (0) {
+object(classA)#1 (0) {
}
Warning: array_unshift(): The first argument should be an array in %s on line %d
bool(false)
-object(classA)#%d (0) {
+object(classA)#1 (0) {
}
-- Iteration 22 --
@@ -330,9 +330,10 @@ NULL
-- Iteration 24 --
Warning: array_unshift(): The first argument should be an array in %s on line %d
bool(false)
-resource(%d) of type (stream)
+resource(5) of type (stream)
Warning: array_unshift(): The first argument should be an array in %s on line %d
bool(false)
-resource(%d) of type (stream)
+resource(5) of type (stream)
Done
+
diff --git a/ext/standard/tests/array/array_values_error.phpt b/ext/standard/tests/array/array_values_error.phpt
new file mode 100644
index 000000000..1c6a92131
--- /dev/null
+++ b/ext/standard/tests/array/array_values_error.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Test array_values() function : error conditions - Pass incorrect number of functions
+--FILE--
+<?php
+/* Prototype : array array_values(array $input)
+ * Description: Return just the values from the input array
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Pass incorrect number of arguments to array_values to test behaviour
+ */
+
+echo "*** Testing array_values() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing array_values() function with Zero arguments --\n";
+var_dump( array_values() );
+
+//Test array_values with one more than the expected number of arguments
+echo "\n-- Testing array_values() function with more than expected no. of arguments --\n";
+$input = array(1, 2);
+$extra_arg = 10;
+var_dump( array_values($input, $extra_arg) );
+
+echo "Done";
+?>
+
+--EXPECTF--
+*** Testing array_values() : error conditions ***
+
+-- Testing array_values() function with Zero arguments --
+
+Warning: Wrong parameter count for array_values() in %s on line %d
+NULL
+
+-- Testing array_values() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for array_values() in %s on line %d
+NULL
+Done \ No newline at end of file
diff --git a/ext/standard/tests/array/arsort_basic.phpt b/ext/standard/tests/array/arsort_basic.phpt
new file mode 100644
index 000000000..481a59070
--- /dev/null
+++ b/ext/standard/tests/array/arsort_basic.phpt
@@ -0,0 +1,133 @@
+--TEST--
+Test arsort() function : basic functionality
+--FILE--
+<?php
+/* Prototype : bool arsort ( array &$array [, int $sort_flags] )
+ * Description: Sort an array and maintain index association
+ Elements will be arranged from highest to lowest when this function has completed.
+ * Source code: ext/standard/array.c
+*/
+
+/*
+ * Testing arsort() by providing integer/string arrays to check the basic functionality
+ * with following flag values.
+ * flag value as default
+ * SORT_REGULAR - compare items normally
+ * SORT_NUMERIC - compare items numerically
+ * SORT_STRING - compare items as strings
+*/
+
+echo "*** Testing arsort() : basic functionality ***\n";
+
+// an array containing unsorted string values with indices
+$unsorted_strings = array( "l" => "lemon", "o" => "orange", "b" => "banana" );
+// an array containing unsorted numeric values with indices
+$unsorted_numerics = array( 1 => 100, 2 => 33, 3 => 555, 4 => 22 );
+
+echo "\n-- Testing arsort() by supplying string array, 'flag' value is default --\n";
+$temp_array = $unsorted_strings;
+var_dump( arsort($temp_array) ); // expecting : bool(true)
+var_dump( $temp_array);
+
+echo "\n-- Testing arsort() by supplying numeric array, 'flag' value is default --\n";
+$temp_array = $unsorted_numerics;
+var_dump( arsort($temp_array) ); // expecting : bool(true)
+var_dump( $temp_array);
+
+echo "\n-- Testing arsort() by supplying string array, 'flag' = SORT_REGULAR --\n";
+$temp_array = $unsorted_strings;
+var_dump( arsort($temp_array, SORT_REGULAR) ); // expecting : bool(true)
+var_dump( $temp_array);
+
+echo "\n-- Testing arsort() by supplying numeric array, 'flag' = SORT_REGULAR --\n";
+$temp_array = $unsorted_numerics;
+var_dump( arsort($temp_array, SORT_REGULAR) ); // expecting : bool(true)
+var_dump( $temp_array);
+
+echo "\n-- Testing arsort() by supplying string array, 'flag' = SORT_STRING --\n";
+$temp_array = $unsorted_strings;
+var_dump( arsort($temp_array, SORT_STRING) ); // expecting : bool(true)
+var_dump( $temp_array);
+
+echo "\n-- Testing arsort() by supplying numeric array, 'flag' = SORT_NUMERIC --\n";
+$temp_array = $unsorted_numerics;
+var_dump( arsort($temp_array, SORT_NUMERIC) ); // expecting : bool(true)
+var_dump( $temp_array);
+
+echo "Done\n";
+?>
+--EXPECTF--
+*** Testing arsort() : basic functionality ***
+
+-- Testing arsort() by supplying string array, 'flag' value is default --
+bool(true)
+array(3) {
+ ["o"]=>
+ string(6) "orange"
+ ["l"]=>
+ string(5) "lemon"
+ ["b"]=>
+ string(6) "banana"
+}
+
+-- Testing arsort() by supplying numeric array, 'flag' value is default --
+bool(true)
+array(4) {
+ [3]=>
+ int(555)
+ [1]=>
+ int(100)
+ [2]=>
+ int(33)
+ [4]=>
+ int(22)
+}
+
+-- Testing arsort() by supplying string array, 'flag' = SORT_REGULAR --
+bool(true)
+array(3) {
+ ["o"]=>
+ string(6) "orange"
+ ["l"]=>
+ string(5) "lemon"
+ ["b"]=>
+ string(6) "banana"
+}
+
+-- Testing arsort() by supplying numeric array, 'flag' = SORT_REGULAR --
+bool(true)
+array(4) {
+ [3]=>
+ int(555)
+ [1]=>
+ int(100)
+ [2]=>
+ int(33)
+ [4]=>
+ int(22)
+}
+
+-- Testing arsort() by supplying string array, 'flag' = SORT_STRING --
+bool(true)
+array(3) {
+ ["o"]=>
+ string(6) "orange"
+ ["l"]=>
+ string(5) "lemon"
+ ["b"]=>
+ string(6) "banana"
+}
+
+-- Testing arsort() by supplying numeric array, 'flag' = SORT_NUMERIC --
+bool(true)
+array(4) {
+ [3]=>
+ int(555)
+ [1]=>
+ int(100)
+ [2]=>
+ int(33)
+ [4]=>
+ int(22)
+}
+Done \ No newline at end of file
diff --git a/ext/standard/tests/array/arsort_object1.phpt b/ext/standard/tests/array/arsort_object1.phpt
new file mode 100644
index 000000000..8fd80f91b
--- /dev/null
+++ b/ext/standard/tests/array/arsort_object1.phpt
@@ -0,0 +1,90 @@
+--TEST--
+Test arsort() function : object functionality - sort objects
+--FILE--
+<?php
+/* Prototype : bool arsort ( array &$array [, int $asort_flags] )
+ * Description: Sort an array and maintain index association.
+ Elements will be arranged from highest to lowest when this function has completed.
+ * Source code: ext/standard/array.c
+*/
+
+/*
+ * testing arsort() by providing integer/string object arrays with following flag values
+ * 1. Defualt flag value
+ * 2. SORT_REGULAR - compare items normally
+*/
+
+echo "*** Testing arsort() : object functionality ***\n";
+
+// class declaration for integer objects
+class for_integer_arsort
+{
+ public $class_value;
+ // initializing object member value
+ function __construct($value){
+ $this->class_value = $value;
+ }
+
+}
+
+// class declaration for string objects
+class for_string_arsort
+{
+ public $class_value;
+ // initializing object member value
+ function __construct($value){
+ $this->class_value = $value;
+ }
+
+ // return string value
+ function __tostring() {
+ return (string)$this->value;
+ }
+
+}
+
+// array of integer objects
+$unsorted_int_obj = array (
+ 1 => new for_integer_arsort(11), 2 => new for_integer_asort(66),
+ 3 => new for_integer_arsort(23), 4 => new for_integer_asort(-5),
+ 5 => new for_integer_arsort(0.001), 6 => new for_integer_asort(0)
+);
+
+// array of string objects
+$unsorted_str_obj = array (
+ "a" => new for_string_arsort("axx"), "b" => new for_string_asort("t"),
+ "c" => new for_string_arsort("w"), "d" => new for_string_asort("py"),
+ "e" => new for_string_arsort("apple"), "f" => new for_string_asort("Orange"),
+ "g" => new for_string_arsort("Lemon"), "h" => new for_string_asort("aPPle")
+);
+
+
+echo "\n-- Testing arsort() by supplying various object arrays, 'flag' value is defualt --\n";
+
+// testing arsort() function by supplying integer object array, flag value is defualt
+$temp_array = $unsorted_int_obj;
+var_dump(arsort($temp_array) );
+var_dump($temp_array);
+
+// testing arsort() function by supplying string object array, flag value is defualt
+$temp_array = $unsorted_str_obj;
+var_dump(arsort($temp_array) );
+var_dump($temp_array);
+
+echo "\n-- Testing arsort() by supplying various object arrays, 'flag' value is SORT_REGULAR --\n";
+// testing arsort() function by supplying integer object array, flag value = SORT_REGULAR
+$temp_array = $unsorted_int_obj;
+var_dump(arsort($temp_array, SORT_REGULAR) );
+var_dump($temp_array);
+
+// testing arsort() function by supplying string object array, flag value = SORT_REGULAR
+$temp_array = $unsorted_str_obj;
+var_dump(arsort($temp_array, SORT_REGULAR) );
+var_dump($temp_array);
+
+echo "Done\n";
+?>
+--EXPECTF--
+*** Testing arsort() : object functionality ***
+
+Fatal error: Class 'for_integer_asort' not found in %sarsort_object1.php on line %d \ No newline at end of file
diff --git a/ext/standard/tests/array/arsort_object2.phpt b/ext/standard/tests/array/arsort_object2.phpt
new file mode 100644
index 000000000..24da65787
--- /dev/null
+++ b/ext/standard/tests/array/arsort_object2.phpt
@@ -0,0 +1,94 @@
+--TEST--
+Test arsort() function : object functionality - sorting objects with diff. accessibility of member vars
+--FILE--
+<?php
+/* Prototype : bool arsort ( array &$array [, int $asort_flags] )
+ * Description: Sort an array and maintain index association.
+ Elements will be arranged from highest to lowest when this function has completed.
+ * Source code: ext/standard/array.c
+*/
+
+/*
+ * testing arsort() by providing integer/string object arrays with following flag values
+ * 1. Defualt flag value
+ 2. SORT_REGULAR - compare items normally
+*/
+
+echo "*** Testing arsort() : object functionality ***\n";
+
+// class declaration for integer objects
+class for_integer_arsort
+{
+ public $public_class_value;
+ private $private_class_value;
+ protected $protected_class_value;
+ // initializing object member value
+ function __construct($value1, $value2,$value3){
+ $this->public_class_value = $value1;
+ $this->private_class_value = $value2;
+ $this->protected_class_value = $value3;
+ }
+
+}
+
+// class declaration for string objects
+class for_string_arsort
+{
+ public $public_class_value;
+ private $private_class_value;
+ protected $protected_class_value;
+ // initializing object member value
+ function __construct($value1, $value2,$value3){
+ $this->public_class_value = $value1;
+ $this->private_class_value = $value2;
+ $this->protected_class_value = $value3;
+ }
+
+ // return string value
+ function __tostring() {
+ return (string)$this->value;
+ }
+}
+
+// array of integer objects
+$unsorted_int_obj = array (
+ 1 => new for_integer_arsort(11, 33,2), 2 => new for_integer_asort(44, 66,3),
+ 3 => new for_integer_arsort(23, 32,6), 4 => new for_integer_asort(-88, -5,-4),
+);
+
+// array of string objects
+$unsorted_str_obj = array (
+ "a" => new for_string_arsort("axx","AXX","d"), "b" => new for_string_asort("T", "t","q"),
+ "c" => new for_string_arsort("w", "W","c"), "d" => new for_string_asort("PY", "py","s"),
+);
+
+
+echo "\n-- Testing arsort() by supplying various object arrays, 'flag' value is default --\n";
+
+// testing arsort() function by supplying integer object array, flag value is default
+$temp_array = $unsorted_int_obj;
+var_dump(arsort($temp_array) );
+var_dump($temp_array);
+
+// testing arsort() function by supplying string object array, flag value is default
+$temp_array = $unsorted_str_obj;
+var_dump(arsort($temp_array) );
+var_dump($temp_array);
+
+echo "\n-- Testing arsort() by supplying various object arrays, 'flag' value is SORT_REGULAR --\n";
+// testing arsort() function by supplying integer object array, flag value = SORT_REGULAR
+$temp_array = $unsorted_int_obj;
+var_dump(arsort($temp_array, SORT_REGULAR) );
+var_dump($temp_array);
+
+// testing arsort() function by supplying string object array, flag value = SORT_REGULAR
+$temp_array = $unsorted_str_obj;
+var_dump(arsort($temp_array, SORT_REGULAR) );
+var_dump($temp_array);
+
+echo "Done\n";
+?>
+--EXPECTF--
+*** Testing arsort() : object functionality ***
+
+Fatal error: Class 'for_integer_asort' not found in %sarsort_object2.php on line %d \ No newline at end of file
diff --git a/ext/standard/tests/array/bug42850.phpt b/ext/standard/tests/array/bug42850.phpt
index 737cd170d..7a83f182a 100644
--- a/ext/standard/tests/array/bug42850.phpt
+++ b/ext/standard/tests/array/bug42850.phpt
@@ -1,5 +1,5 @@
--TEST--
-Bug #42850 array_walk_recursive() leaves references, #34982 array_walk_recursive() modifies elements outside function scope
+Bug #42850 (array_walk_recursive() leaves references)
--FILE--
<?php
diff --git a/ext/standard/tests/array/bug43495.phpt b/ext/standard/tests/array/bug43495.phpt
index cd0fab141..8b8f3a6ed 100644
--- a/ext/standard/tests/array/bug43495.phpt
+++ b/ext/standard/tests/array/bug43495.phpt
@@ -17,5 +17,5 @@ $b["key1"]["key2"]["key3"] = null;
echo "Done.\n";
?>
--EXPECTF--
-Warning: array_merge_recursive(): recursion detected in %s/bug43495.php on line %d
+Warning: array_merge_recursive(): recursion detected in %sbug43495.php on line %d
Done.
diff --git a/ext/standard/tests/array/bug44181.phpt b/ext/standard/tests/array/bug44181.phpt
new file mode 100644
index 000000000..92dda674e
--- /dev/null
+++ b/ext/standard/tests/array/bug44181.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Bug #44181 (extract EXTR_OVERWRITE|EXTR_REFS can fail to create references)
+--FILE--
+<?php
+$a = array('foo' => 'original.foo');
+
+$foo = 'test';
+$ref = &$a;
+
+extract($a, EXTR_OVERWRITE|EXTR_REFS);
+$foo = 'changed.foo';
+
+var_dump($a['foo']);
+echo "Done\n";
+?>
+--EXPECTF--
+string(%d) "changed.foo"
+Done
diff --git a/ext/standard/tests/array/bug44182.phpt b/ext/standard/tests/array/bug44182.phpt
new file mode 100644
index 000000000..a77ddc42b
--- /dev/null
+++ b/ext/standard/tests/array/bug44182.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Bug #44182 (extract EXTR_REFS can fail to split copy-on-write references)
+--FILE--
+<?php
+$a = array('foo' => 'original.foo');
+
+$nonref = $a['foo'];
+$ref = &$a;
+
+extract($a, EXTR_REFS);
+$a['foo'] = 'changed.foo';
+
+var_dump($nonref);
+echo "Done\n";
+?>
+--EXPECTF--
+string(%d) "original.foo"
+Done
diff --git a/ext/standard/tests/array/bug45312.phpt b/ext/standard/tests/array/bug45312.phpt
new file mode 100644
index 000000000..017defefa
--- /dev/null
+++ b/ext/standard/tests/array/bug45312.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Bug #45312 (Segmentation fault on second request for array functions)
+--FILE--
+<?php
+class cr {
+ private $priv_member;
+ function cr($val) {
+ $this->priv_member = $val;
+ }
+ static function comp_func_cr($a, $b) {
+ if ($a->priv_member === $b->priv_member) return 0;
+ return ($a->priv_member > $b->priv_member) ? 1 : -1;
+ }
+ static function comp_func_cr2($a, $b) {
+ echo ".";
+ if ($a->priv_member === $b->priv_member) return 0;
+ return ($a->priv_member < $b->priv_member) ? 1 : -1;
+ }
+ function dump() {
+ echo $this->priv_member . "\n";
+ }
+}
+$a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1 => new cr(4), 2 => new cr(-15),);
+$b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1 => new cr(4), 2 => new cr(-15),);
+$result = array_udiff_assoc($a, $b, array("cr", "comp_func_cr"));
+foreach($result as $val) {
+ $val->dump();
+}
+$result = array_udiff_assoc($a, $b, array("cr", "comp_func_cr2"));
+foreach($result as $val) {
+ $val->dump();
+}
+?>
+--EXPECT--
+9
+12
+23
+....9
+12
+23
diff --git a/ext/standard/tests/array/bug46873.phpt b/ext/standard/tests/array/bug46873.phpt
new file mode 100644
index 000000000..1f11c9d22
--- /dev/null
+++ b/ext/standard/tests/array/bug46873.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Bug #46873 (extract($foo) crashes if $foo['foo'] exists)
+--FILE--
+<?php
+$foo = array('foo' => 1, 'bar' => 2, 'test' => 3);
+extract($foo);
+var_dump($foo, $bar, $test);
+?>
+--EXPECT--
+int(1)
+int(2)
+int(3)
diff --git a/ext/standard/tests/array/compact_variation2.phpt b/ext/standard/tests/array/compact_variation2.phpt
new file mode 100644
index 000000000..79db8ab04
--- /dev/null
+++ b/ext/standard/tests/array/compact_variation2.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Test compact() function: ensure compact() doesn't pick up variables declared outside of current scope.
+--FILE--
+<?php
+/* Prototype : proto array compact(mixed var_names [, mixed ...])
+* Description: Creates a hash containing variables and their values
+* Source code: ext/standard/array.c
+* Alias to functions:
+*/
+echo "*** Testing compact() : usage variations - variables outside of current scope ***\n";
+
+$a = 'main.a';
+$b = 'main.b';
+
+function f() {
+ $b = 'f.b';
+ $c = 'f.c';
+ var_dump(compact('a','b','c'));
+ var_dump(compact(array('a','b','c')));
+}
+
+f();
+
+?>
+==Done==
+--EXPECTF--
+*** Testing compact() : usage variations - variables outside of current scope ***
+array(2) {
+ ["b"]=>
+ string(3) "f.b"
+ ["c"]=>
+ string(3) "f.c"
+}
+array(2) {
+ ["b"]=>
+ string(3) "f.b"
+ ["c"]=>
+ string(3) "f.c"
+}
+==Done== \ No newline at end of file
diff --git a/ext/standard/tests/array/compare_function.inc b/ext/standard/tests/array/compare_function.inc
new file mode 100644
index 000000000..e5176802a
--- /dev/null
+++ b/ext/standard/tests/array/compare_function.inc
@@ -0,0 +1,13 @@
+<?php
+
+function compare_function($var1, $var2) {
+ if ($var1 == $var2) {
+ return 0;
+ } else if ($var1 < $var2) {
+ return -1;
+ } else {
+ return 1;
+ }
+}
+
+?> \ No newline at end of file
diff --git a/ext/standard/tests/array/extract_variation10.phpt b/ext/standard/tests/array/extract_variation10.phpt
new file mode 100644
index 000000000..d520be775
--- /dev/null
+++ b/ext/standard/tests/array/extract_variation10.phpt
@@ -0,0 +1,13 @@
+--TEST--
+Test extract() function - ensure EXTR_REFS doesn't mess with isRef flag on COW references to array elements.
+--FILE--
+<?php
+$a = array('foo' => 'original.foo');
+$nonref = $a['foo'];
+$ref = &$a;
+extract($a, EXTR_REFS);
+$a['foo'] = 'changed.foo';
+var_dump($nonref);
+?>
+--EXPECTF--
+%unicode|string%(12) "original.foo"
diff --git a/ext/standard/tests/array/extract_variation11.phpt b/ext/standard/tests/array/extract_variation11.phpt
new file mode 100644
index 000000000..7f6e08c98
--- /dev/null
+++ b/ext/standard/tests/array/extract_variation11.phpt
@@ -0,0 +1,13 @@
+--TEST--
+Test extract() function - ensure EXTR_REFS works when array is referenced and keys clash with variables in current scope.
+--FILE--
+<?php
+$a = array('foo' => 'original.foo');
+$ref = &$a;
+$foo = 'test';
+extract($a, EXTR_OVERWRITE|EXTR_REFS);
+$foo = 'changed.foo';
+var_dump($a['foo']);
+?>
+--EXPECTF--
+%unicode|string%(11) "changed.foo"
diff --git a/ext/standard/tests/array/natsort_basic.phpt b/ext/standard/tests/array/natsort_basic.phpt
new file mode 100644
index 000000000..84d408ed3
--- /dev/null
+++ b/ext/standard/tests/array/natsort_basic.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test natsort(): basic functionality
+--FILE--
+<?php
+/*
+* proto bool natsort ( array &$array )
+* Function is implemented in ext/standard/array.c
+*/
+$array1 = $array2 = array("img12.png", "img10.png", "img2.png", "img1.png");
+sort($array1);
+echo "Standard sorting\n";
+print_r($array1);
+natsort($array2);
+echo "\nNatural order sorting\n";
+print_r($array2);
+?>
+--EXPECT--
+Standard sorting
+Array
+(
+ [0] => img1.png
+ [1] => img10.png
+ [2] => img12.png
+ [3] => img2.png
+)
+
+Natural order sorting
+Array
+(
+ [3] => img1.png
+ [2] => img2.png
+ [1] => img10.png
+ [0] => img12.png
+)
diff --git a/ext/standard/tests/array/prev_basic.phpt b/ext/standard/tests/array/prev_basic.phpt
new file mode 100755
index 000000000..8c1450dd3
--- /dev/null
+++ b/ext/standard/tests/array/prev_basic.phpt
@@ -0,0 +1,53 @@
+--TEST--
+Test prev() function : basic functionality
+--FILE--
+<?php
+/* Prototype : mixed prev(array $array_arg)
+ * Description: Move array argument's internal pointer to the previous element and return it
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Test basic functionality of prev()
+ */
+
+echo "*** Testing prev() : basic functionality ***\n";
+
+$array = array('zero', 'one', 'two');
+end($array);
+echo key($array) . " => " . current($array) . "\n";
+var_dump(prev($array));
+
+echo key($array) . " => " . current($array) . "\n";
+var_dump(prev($array));
+
+echo key($array) . " => " . current($array) . "\n";
+var_dump(prev($array));
+
+echo "\n*** Testing an array with differing values/keys ***\n";
+$array2 = array('one', 2 => "help", 3, false, 'stringkey2' => 'val2', 'stringkey1' => 'val1');
+end($array2);
+$length = count($array2);
+for ($i = $length; $i > 0; $i--) {
+ var_dump(prev($array2));
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing prev() : basic functionality ***
+2 => two
+string(3) "one"
+1 => one
+string(4) "zero"
+0 => zero
+bool(false)
+
+*** Testing an array with differing values/keys ***
+string(4) "val2"
+bool(false)
+int(3)
+string(4) "help"
+string(3) "one"
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/array/prev_error1.phpt b/ext/standard/tests/array/prev_error1.phpt
new file mode 100755
index 000000000..35af7d4a4
--- /dev/null
+++ b/ext/standard/tests/array/prev_error1.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test prev() function : error conditions - Pass incorrect number of arguments
+--FILE--
+<?php
+/* Prototype : mixed prev(array $array_arg)
+ * Description: Move array argument's internal pointer to the previous element and return it
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Pass incorrect number of arguments to prev() to test behaviour
+ */
+
+echo "*** Testing prev() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing prev() function with Zero arguments --\n";
+var_dump( prev() );
+
+//Test prev with one more than the expected number of arguments
+echo "\n-- Testing prev() function with more than expected no. of arguments --\n";
+$array_arg = array(1, 2);
+$extra_arg = 10;
+var_dump( prev($array_arg, $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing prev() : error conditions ***
+
+-- Testing prev() function with Zero arguments --
+
+Warning: Wrong parameter count for prev() in %s on line %d
+NULL
+
+-- Testing prev() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for prev() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/prev_error2.phpt b/ext/standard/tests/array/prev_error2.phpt
new file mode 100755
index 000000000..f26bdd0a4
--- /dev/null
+++ b/ext/standard/tests/array/prev_error2.phpt
@@ -0,0 +1,28 @@
+--TEST--
+prev - ensure warning is received when passing an indirect temporary.
+--FILE--
+<?php
+/* Prototype : mixed prev(array $array_arg)
+ * Description: Move array argument's internal pointer to the previous element and return it
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Pass temporary variables to prev() to test behaviour
+ */
+
+function f() {
+ $array = array(1,2);
+ end($array);
+ return $array;
+}
+
+echo "\n-- Passing an indirect temporary variable --\n";
+var_dump(prev(f()));
+
+?>
+--EXPECTF--
+-- Passing an indirect temporary variable --
+
+Strict Standards: Only variables should be passed by reference in %s on line %d
+int(1)
diff --git a/ext/standard/tests/array/prev_error3.phpt b/ext/standard/tests/array/prev_error3.phpt
new file mode 100755
index 000000000..dfac24eac
--- /dev/null
+++ b/ext/standard/tests/array/prev_error3.phpt
@@ -0,0 +1,19 @@
+--TEST--
+prev - ensure we cannot pass a temporary
+--FILE--
+<?php
+/* Prototype : mixed prev(array $array_arg)
+ * Description: Move array argument's internal pointer to the previous element and return it
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Pass temporary variables to prev() to test behaviour
+ */
+
+
+var_dump(prev(array(1, 2)));
+?>
+--EXPECTF--
+
+Fatal error: Only variables can be passed by reference in %s on line %d \ No newline at end of file
diff --git a/ext/standard/tests/array/prev_variation1.phpt b/ext/standard/tests/array/prev_variation1.phpt
new file mode 100755
index 000000000..a2f5626c4
--- /dev/null
+++ b/ext/standard/tests/array/prev_variation1.phpt
@@ -0,0 +1,219 @@
+--TEST--
+Test prev() function : usage variation - Pass different data types as $array_arg
+--FILE--
+<?php
+/* Prototype : mixed prev(array $array_arg)
+ * Description: Move array argument's internal pointer to the previous element and return it
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Pass different data types as $array_arg argument to prev() to test behaviour
+ */
+
+echo "*** Testing prev() : variation ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $array_arg argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "string",
+ 'string',
+ $heredoc,
+
+ // object data
+/*22*/ new classA(),
+
+ // undefined data
+/*23*/ @$undefined_var,
+
+ // unset data
+/*24*/ @$unset_var,
+
+ // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of prev()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( prev($input) );
+ $iterator++;
+};
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing prev() : variation ***
+
+-- Iteration 1 --
+
+Warning: prev(): Passed variable is not an array or object in %s on line %d
+bool(false)
+
+-- Iteration 2 --
+
+Warning: prev(): Passed variable is not an array or object in %s on line %d
+bool(false)
+
+-- Iteration 3 --
+
+Warning: prev(): Passed variable is not an array or object in %s on line %d
+bool(false)
+
+-- Iteration 4 --
+
+Warning: prev(): Passed variable is not an array or object in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+
+Warning: prev(): Passed variable is not an array or object in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Warning: prev(): Passed variable is not an array or object in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+
+Warning: prev(): Passed variable is not an array or object in %s on line %d
+bool(false)
+
+-- Iteration 8 --
+
+Warning: prev(): Passed variable is not an array or object in %s on line %d
+bool(false)
+
+-- Iteration 9 --
+
+Warning: prev(): Passed variable is not an array or object in %s on line %d
+bool(false)
+
+-- Iteration 10 --
+
+Warning: prev(): Passed variable is not an array or object in %s on line %d
+bool(false)
+
+-- Iteration 11 --
+
+Warning: prev(): Passed variable is not an array or object in %s on line %d
+bool(false)
+
+-- Iteration 12 --
+
+Warning: prev(): Passed variable is not an array or object in %s on line %d
+bool(false)
+
+-- Iteration 13 --
+
+Warning: prev(): Passed variable is not an array or object in %s on line %d
+bool(false)
+
+-- Iteration 14 --
+
+Warning: prev(): Passed variable is not an array or object in %s on line %d
+bool(false)
+
+-- Iteration 15 --
+
+Warning: prev(): Passed variable is not an array or object in %s on line %d
+bool(false)
+
+-- Iteration 16 --
+
+Warning: prev(): Passed variable is not an array or object in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Warning: prev(): Passed variable is not an array or object in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+
+Warning: prev(): Passed variable is not an array or object in %s on line %d
+bool(false)
+
+-- Iteration 20 --
+
+Warning: prev(): Passed variable is not an array or object in %s on line %d
+bool(false)
+
+-- Iteration 21 --
+
+Warning: prev(): Passed variable is not an array or object in %s on line %d
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+
+Warning: prev(): Passed variable is not an array or object in %s on line %d
+bool(false)
+
+-- Iteration 24 --
+
+Warning: prev(): Passed variable is not an array or object in %s on line %d
+bool(false)
+
+-- Iteration 25 --
+
+Warning: prev(): Passed variable is not an array or object in %s on line %d
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/prev_variation2.phpt b/ext/standard/tests/array/prev_variation2.phpt
new file mode 100755
index 000000000..0ce087781
--- /dev/null
+++ b/ext/standard/tests/array/prev_variation2.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Test prev() function : usage variation - Multi-dimensional arrays
+--FILE--
+<?php
+/* Prototype : mixed prev(array $array_arg)
+ * Description: Move array argument's internal pointer to the previous element and return it
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Test prev() when passed:
+ * 1. a two-dimensional array
+ * 2. a sub-array
+ * as $array_arg argument.
+ */
+
+echo "*** Testing prev() : usage variations ***\n";
+
+$subarray = array(9,8,7);
+end($subarray);
+
+$array_arg = array ($subarray, 'a' => 'z');
+end($array_arg);
+
+echo "\n-- Pass a two-dimensional array as \$array_arg --\n";
+var_dump(prev($array_arg));
+var_dump(prev($array_arg));
+
+echo "\n-- Pass a sub-array as \$array_arg --\n";
+var_dump(prev($array_arg[0]));
+?>
+===DONE===
+--EXPECTF--
+*** Testing prev() : usage variations ***
+
+-- Pass a two-dimensional array as $array_arg --
+array(3) {
+ [0]=>
+ int(9)
+ [1]=>
+ int(8)
+ [2]=>
+ int(7)
+}
+bool(false)
+
+-- Pass a sub-array as $array_arg --
+int(8)
+===DONE===
diff --git a/ext/standard/tests/array/rsort_variation3.phpt b/ext/standard/tests/array/rsort_variation3.phpt
index 798e148c7..f8c002a6f 100644
--- a/ext/standard/tests/array/rsort_variation3.phpt
+++ b/ext/standard/tests/array/rsort_variation3.phpt
@@ -322,4 +322,4 @@ array(7) {
[6]=>
float(-2147483649)
}
-Done
+Done \ No newline at end of file
diff --git a/ext/standard/tests/array/uksort_basic.phpt b/ext/standard/tests/array/uksort_basic.phpt
new file mode 100644
index 000000000..83b60518b
--- /dev/null
+++ b/ext/standard/tests/array/uksort_basic.phpt
@@ -0,0 +1,26 @@
+--TEST--
+Test uksort(): basic functionality
+--FILE--
+<?php
+/*
+* proto bool uksort ( array &$array, callback $cmp_function )
+* Function is implemented in ext/standard/array.c
+*/
+function cmp($a, $b) {
+ if ($a == $b) {
+ return 0;
+ }
+ return ($a < $b) ? -1 : 1;
+}
+$a = array(3=>0, 2=>1, 5=>2, 6=>3, 1=>4);
+uksort($a, "cmp");
+foreach($a as $key => $value) {
+ echo "$key: $value\n";
+}
+?>
+--EXPECT--
+1: 4
+2: 1
+3: 0
+5: 2
+6: 3 \ No newline at end of file
diff --git a/ext/standard/tests/array/uksort_error.phpt b/ext/standard/tests/array/uksort_error.phpt
new file mode 100644
index 000000000..204a5f528
--- /dev/null
+++ b/ext/standard/tests/array/uksort_error.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test uksort() function : error conditions
+--FILE--
+<?php
+/* Prototype : bool uksort(array array_arg, string cmp_function)
+ * Description: Sort an array by keys using a user-defined comparison function
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing uksort() : error conditions ***\n";
+
+echo "\n-- Testing uksort() function with more than expected no. of arguments --\n";
+$array_arg = array(1, 2);
+$cmp_function = 'string_val';
+$extra_arg = 10;
+var_dump( uksort($array_arg, $cmp_function, $extra_arg) );
+
+echo "\n-- Testing uksort() function with less than expected no. of arguments --\n";
+$array_arg = array(1, 2);
+var_dump( uksort($array_arg) );
+
+echo "\n-- Testing uksort() function with zero arguments --\n";
+var_dump( uksort() );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing uksort() : error conditions ***
+
+-- Testing uksort() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for uksort() in %s on line %d
+NULL
+
+-- Testing uksort() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for uksort() in %s on line %d
+NULL
+
+-- Testing uksort() function with zero arguments --
+
+Warning: Wrong parameter count for uksort() in %s on line %d
+NULL
+===DONE===
+
diff --git a/ext/standard/tests/array/uksort_variation1.phpt b/ext/standard/tests/array/uksort_variation1.phpt
new file mode 100644
index 000000000..dfffdb3e6
--- /dev/null
+++ b/ext/standard/tests/array/uksort_variation1.phpt
@@ -0,0 +1,225 @@
+--TEST--
+Test uksort() function : usage variation
+--FILE--
+<?php
+/* Prototype : bool uksort(array array_arg, string cmp_function)
+ * Description: Sort an array by keys using a user-defined comparison function
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing uksort() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$cmp_function = 'string_val';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for array_arg
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( uksort($value, $cmp_function) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing uksort() : usage variation ***
+
+--int 0--
+
+Warning: uksort(): The argument should be an array in %s on line %d
+bool(false)
+
+--int 1--
+
+Warning: uksort(): The argument should be an array in %s on line %d
+bool(false)
+
+--int 12345--
+
+Warning: uksort(): The argument should be an array in %s on line %d
+bool(false)
+
+--int -12345--
+
+Warning: uksort(): The argument should be an array in %s on line %d
+bool(false)
+
+--float 10.5--
+
+Warning: uksort(): The argument should be an array in %s on line %d
+bool(false)
+
+--float -10.5--
+
+Warning: uksort(): The argument should be an array in %s on line %d
+bool(false)
+
+--float 12.3456789000e10--
+
+Warning: uksort(): The argument should be an array in %s on line %d
+bool(false)
+
+--float -12.3456789000e10--
+
+Warning: uksort(): The argument should be an array in %s on line %d
+bool(false)
+
+--float .5--
+
+Warning: uksort(): The argument should be an array in %s on line %d
+bool(false)
+
+--uppercase NULL--
+
+Warning: uksort(): The argument should be an array in %s on line %d
+bool(false)
+
+--lowercase null--
+
+Warning: uksort(): The argument should be an array in %s on line %d
+bool(false)
+
+--lowercase true--
+
+Warning: uksort(): The argument should be an array in %s on line %d
+bool(false)
+
+--lowercase false--
+
+Warning: uksort(): The argument should be an array in %s on line %d
+bool(false)
+
+--uppercase TRUE--
+
+Warning: uksort(): The argument should be an array in %s on line %d
+bool(false)
+
+--uppercase FALSE--
+
+Warning: uksort(): The argument should be an array in %s on line %d
+bool(false)
+
+--empty string DQ--
+
+Warning: uksort(): The argument should be an array in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: uksort(): The argument should be an array in %s on line %d
+bool(false)
+
+--string DQ--
+
+Warning: uksort(): The argument should be an array in %s on line %d
+bool(false)
+
+--string SQ--
+
+Warning: uksort(): The argument should be an array in %s on line %d
+bool(false)
+
+--mixed case string--
+
+Warning: uksort(): The argument should be an array in %s on line %d
+bool(false)
+
+--heredoc--
+
+Warning: uksort(): The argument should be an array in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--undefined var--
+
+Warning: uksort(): The argument should be an array in %s on line %d
+bool(false)
+
+--unset var--
+
+Warning: uksort(): The argument should be an array in %s on line %d
+bool(false)
+===DONE===
+
diff --git a/ext/standard/tests/array/uksort_variation2.phpt b/ext/standard/tests/array/uksort_variation2.phpt
new file mode 100644
index 000000000..e313df31d
--- /dev/null
+++ b/ext/standard/tests/array/uksort_variation2.phpt
@@ -0,0 +1,225 @@
+--TEST--
+Test uksort() function : usage variation
+--FILE--
+<?php
+/* Prototype : bool uksort(array array_arg, string cmp_function)
+ * Description: Sort an array by keys using a user-defined comparison function
+ * Source code: ext/standard/array.c
+ * Alias to functions:
+ */
+
+echo "*** Testing uksort() : usage variation ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$array_arg = array(1, 2);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for cmp_function
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( uksort($array_arg, $value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing uksort() : usage variation ***
+
+--int 0--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--int 1--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--int 12345--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--int -12345--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--float 10.5--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--float -10.5--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--float 12.3456789000e10--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--float -12.3456789000e10--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--float .5--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--empty array--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--int indexed array--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--associative array--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--nested arrays--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--uppercase NULL--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--lowercase null--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--lowercase true--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--lowercase false--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--uppercase TRUE--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--uppercase FALSE--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--empty string DQ--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--empty string SQ--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--instance of classWithToString--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--instance of classWithoutToString--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--undefined var--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+
+--unset var--
+
+Warning: uksort(): Invalid comparison function in %s on line %d
+bool(false)
+===DONE===
+
diff --git a/ext/standard/tests/array/usort_basic.phpt b/ext/standard/tests/array/usort_basic.phpt
new file mode 100644
index 000000000..eaf30188d
--- /dev/null
+++ b/ext/standard/tests/array/usort_basic.phpt
@@ -0,0 +1,119 @@
+--TEST--
+Test usort() function : basic functionality
+--FILE--
+<?php
+/* Prototype : bool usort(array $array_arg, string $cmp_function)
+ * Description: Sort an array by values using a user-defined comparison function
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Test basic functionality of usort() with indexed and associative arrays
+ */
+
+echo "*** Testing usort() : basic functionality ***\n";
+
+function cmp($value1, $value2)
+{
+ if($value1 == $value2) {
+ return 0;
+ }
+ else if($value1 > $value2) {
+ return 1;
+ }
+ else
+ return -1;
+}
+
+// Int array with default keys
+$int_values = array(1, 8, 9, 3, 2, 6, 7);
+
+echo "\n-- Numeric array with default keys --\n";
+var_dump( usort($int_values, 'cmp') );
+var_dump($int_values);
+
+// String array with default keys
+$string_values = array("This", "is", 'a', "test");
+
+echo "\n-- String array with default keys --\n";
+var_dump( usort($string_values, 'cmp') );
+var_dump($string_values);
+
+// Associative array with numeric keys
+$numeric_key_arg = array(1=> 1, 2 => 2, 3 => 7, 5 => 4, 4 => 9);
+
+echo "\n-- Associative array with numeric keys --\n";
+var_dump( usort($numeric_key_arg, 'cmp') );
+var_dump($numeric_key_arg);
+
+// Associative array with string keys
+$string_key_arg = array('one' => 4, 'two' => 2, 'three' => 1, 'four' => 10);
+
+echo "\n-- Associative array with string keys --\n";
+var_dump( usort($string_key_arg, 'cmp') );
+var_dump($string_key_arg);
+?>
+===DONE===
+--EXPECTF--
+*** Testing usort() : basic functionality ***
+
+-- Numeric array with default keys --
+bool(true)
+array(7) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(6)
+ [4]=>
+ int(7)
+ [5]=>
+ int(8)
+ [6]=>
+ int(9)
+}
+
+-- String array with default keys --
+bool(true)
+array(4) {
+ [0]=>
+ string(4) "This"
+ [1]=>
+ string(1) "a"
+ [2]=>
+ string(2) "is"
+ [3]=>
+ string(4) "test"
+}
+
+-- Associative array with numeric keys --
+bool(true)
+array(5) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(4)
+ [3]=>
+ int(7)
+ [4]=>
+ int(9)
+}
+
+-- Associative array with string keys --
+bool(true)
+array(4) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(4)
+ [3]=>
+ int(10)
+}
+===DONE===
diff --git a/ext/standard/tests/array/usort_error1.phpt b/ext/standard/tests/array/usort_error1.phpt
new file mode 100644
index 000000000..42dc6ba3a
--- /dev/null
+++ b/ext/standard/tests/array/usort_error1.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Test usort() function : error conditions - Pass incorrect number of arguments
+--FILE--
+<?php
+/* Prototype : bool usort(array $array_arg, string $cmp_function)
+ * Description: Sort an array by values using a user-defined comparison function
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Pass incorrect number of arguments to usort() to test behaviour
+ */
+
+echo "*** Testing usort() : error conditions ***\n";
+
+//Test usort with one more than the expected number of arguments
+echo "\n-- Testing usort() function with more than expected no. of arguments --\n";
+$array_arg = array(1, 2);
+$cmp_function = 'string_val';
+$extra_arg = 10;
+var_dump( usort($array_arg, $cmp_function, $extra_arg) );
+
+// Testing usort with one less than the expected number of arguments
+echo "\n-- Testing usort() function with less than expected no. of arguments --\n";
+$array_arg = array(1, 2);
+var_dump( usort($array_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing usort() : error conditions ***
+
+-- Testing usort() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for usort() in %s on line %d
+NULL
+
+-- Testing usort() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for usort() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/usort_error2.phpt b/ext/standard/tests/array/usort_error2.phpt
new file mode 100644
index 000000000..916c8f46f
--- /dev/null
+++ b/ext/standard/tests/array/usort_error2.phpt
@@ -0,0 +1,56 @@
+--TEST--
+Test usort() function : error conditions - Pass unknown 'cmp_function'
+--FILE--
+<?php
+/* Prototype : bool usort(array $array_arg, string $cmp_function)
+ * Description: Sort an array by values using a user-defined comparison function
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Pass an unknown comparison function to usort() to test behaviour.
+ * Pass incorrect number of arguments and an unknown function to test which error
+ * is generated.
+ */
+
+echo "*** Testing usort() : error conditions ***\n";
+
+function cmp($value1, $value2)
+{
+ if($value1 == $value2) {
+ return 0;
+ }
+ else if($value1 > $value2) {
+ return 1;
+ }
+ else {
+ return -1;
+ }
+}
+
+// Initialize 'array_arg'
+$array_arg = array(0 => 1, 1 => 10, 2 => 'string', 3 => 3, 4 => 2, 5 => 100, 6 => 25);
+$extra_arg = 10;
+
+// With non existent comparison function
+echo "\n-- Testing usort() function with non-existent compare function --\n";
+var_dump( usort($array_arg, 'non_existent') );
+
+// With non existent comparison function and extra arguemnt
+echo "\n-- Testing usort() function with non-existent compare function and extra argument --\n";
+var_dump( usort($array_arg, 'non_existent', $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing usort() : error conditions ***
+
+-- Testing usort() function with non-existent compare function --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Testing usort() function with non-existent compare function and extra argument --
+
+Warning: Wrong parameter count for usort() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/array/usort_object1.phpt b/ext/standard/tests/array/usort_object1.phpt
new file mode 100644
index 000000000..39c6ec60a
--- /dev/null
+++ b/ext/standard/tests/array/usort_object1.phpt
@@ -0,0 +1,141 @@
+--TEST--
+Test usort() function : object functionality - different number of properties
+--FILE--
+<?php
+/* Prototype : bool usort(array $array_arg, string $cmp_function)
+ * Description: Sort an array by values using a user-defined comparison function
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Pass an array of objects which have a different number of properties
+ * to test behaviour of usort()
+ */
+
+echo "*** Testing usort() : object functionality ***\n";
+
+function simple_cmp($value1, $value2)
+{
+ if($value1 == $value2) {
+ return 0;
+ }
+ else if($value1 > $value2) {
+ return 1;
+ }
+ else
+ return -1;
+}
+
+// comparison function for SimpleClass2 objects which has more than one member
+function multiple_cmp($value1, $value2)
+{
+ if($value1->getValue() == $value2->getValue())
+ return 0;
+ else if($value1->getValue() > $value2->getValue())
+ return 1;
+ else
+ return -1;
+}
+
+// Simple class with single property
+class SimpleClass1
+{
+ private $int_value;
+
+ public function __construct($value) {
+ $this->int_value = $value;
+ }
+}
+
+// Simple class with more than one property
+class SimpleClass2
+{
+ private $int_value;
+ protected $float_value;
+ public $string_value;
+ public function __construct($int, $float, $str) {
+ $this->int_value = $int;
+ $this->float_value = $float;
+ $this->string_value = $str;
+ }
+ public function getValue() {
+ return $this->int_value;
+ }
+}
+
+// array of SimpleClass objects with only one property
+$array_arg = array(
+0 => new SimpleClass1(10),
+1 => new SimpleClass1(1),
+2 => new SimpleClass1(100),
+3 => new SimpleClass1(50)
+);
+var_dump( usort($array_arg, 'simple_cmp') );
+var_dump($array_arg);
+
+// array of SimpleClass objects having more than one properties
+$array_arg = array(
+0 => new SimpleClass2(2, 3.4, "mango"),
+1 => new SimpleClass2(10, 1.2, "apple"),
+2 => new SimpleClass2(5, 2.5, "orange"),
+);
+var_dump( usort($array_arg, 'multiple_cmp') );
+var_dump($array_arg);
+?>
+===DONE===
+--EXPECTF--
+*** Testing usort() : object functionality ***
+bool(true)
+array(4) {
+ [0]=>
+ object(SimpleClass1)#%d (1) {
+ ["int_value:private"]=>
+ int(1)
+ }
+ [1]=>
+ object(SimpleClass1)#%d (1) {
+ ["int_value:private"]=>
+ int(10)
+ }
+ [2]=>
+ object(SimpleClass1)#%d (1) {
+ ["int_value:private"]=>
+ int(50)
+ }
+ [3]=>
+ object(SimpleClass1)#%d (1) {
+ ["int_value:private"]=>
+ int(100)
+ }
+}
+bool(true)
+array(3) {
+ [0]=>
+ object(SimpleClass2)#%d (3) {
+ ["int_value:private"]=>
+ int(2)
+ ["float_value:protected"]=>
+ float(3.4)
+ ["string_value"]=>
+ string(5) "mango"
+ }
+ [1]=>
+ object(SimpleClass2)#%d (3) {
+ ["int_value:private"]=>
+ int(5)
+ ["float_value:protected"]=>
+ float(2.5)
+ ["string_value"]=>
+ string(6) "orange"
+ }
+ [2]=>
+ object(SimpleClass2)#%d (3) {
+ ["int_value:private"]=>
+ int(10)
+ ["float_value:protected"]=>
+ float(1.2)
+ ["string_value"]=>
+ string(5) "apple"
+ }
+}
+===DONE===
diff --git a/ext/standard/tests/array/usort_object2.phpt b/ext/standard/tests/array/usort_object2.phpt
new file mode 100644
index 000000000..00d302f35
--- /dev/null
+++ b/ext/standard/tests/array/usort_object2.phpt
@@ -0,0 +1,165 @@
+--TEST--
+Test usort() function : object functionality - Different types of classes
+--FILE--
+<?php
+/* Prototype : bool usort(array $array_arg, string $cmp_function)
+ * Description: Sort an array by values using a user-defined comparison function
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Pass an array of objects which are either:
+ * 1. Empty
+ * 2. Static
+ * 2. Inherited
+ * to test behaviour of usort()
+ */
+
+echo "*** Testing usort() : object functionality ***\n";
+
+function cmp_function($value1, $value2)
+{
+ if($value1 == $value2) {
+ return 0;
+ }
+ else if($value1 > $value2) {
+ return 1;
+ }
+ else
+ return -1;
+}
+
+// Class without any member
+class EmptyClass
+{
+}
+
+// Class with static member
+class StaticClass
+{
+ public static $static_value;
+ public function __construct($value) {
+ StaticClass::$static_value = $value;
+ }
+}
+
+// Abstract class
+abstract class AbstractClass
+{
+ public $pub_value;
+ public abstract function abstractMethod();
+}
+
+// Child class extending abstract class
+class ChildClass extends AbstractClass
+{
+ public $child_value = 100;
+ public function abstractMethod() {
+ $pub_value = 5;
+ }
+ public function __construct($value) {
+ $this->child_value = $value;
+ }
+}
+
+// Testing uasort with StaticClass objects as elements of 'array_arg'
+echo "-- Testing usort() with StaticClass objects --\n";
+$array_arg = array(
+ 0 => new StaticClass(20),
+ 1 => new StaticClass(50),
+ 2 => new StaticClass(15),
+ 3 => new StaticClass(70),
+);
+var_dump( usort($array_arg, 'cmp_function') );
+var_dump($array_arg);
+
+// Testing uasort with EmptyClass objects as elements of 'array_arg'
+echo "-- Testing usort() with EmptyClass objects --\n";
+$array_arg = array(
+ 0 => new EmptyClass(),
+ 1 => new EmptyClass(),
+ 2 => new EmptyClass(),
+ 3 => new EmptyClass(),
+);
+var_dump( usort($array_arg, 'cmp_function') );
+var_dump($array_arg);
+
+// Testing uasort with ChildClass objects as elements of 'array_arg'
+echo "-- Testing usort() with ChildClass objects --\n";
+$array_arg = array(
+ 0 => new ChildClass(20),
+ 1 => new ChildClass(500),
+ 2 => new ChildClass(15),
+ 3 => new ChildClass(700),
+);
+var_dump( usort($array_arg, 'cmp_function') );
+var_dump($array_arg);
+?>
+===DONE===
+--EXPECTF--
+*** Testing usort() : object functionality ***
+-- Testing usort() with StaticClass objects --
+bool(true)
+array(4) {
+ [0]=>
+ object(StaticClass)#%d (0) {
+ }
+ [1]=>
+ object(StaticClass)#%d (0) {
+ }
+ [2]=>
+ object(StaticClass)#%d (0) {
+ }
+ [3]=>
+ object(StaticClass)#%d (0) {
+ }
+}
+-- Testing usort() with EmptyClass objects --
+bool(true)
+array(4) {
+ [0]=>
+ object(EmptyClass)#%d (0) {
+ }
+ [1]=>
+ object(EmptyClass)#%d (0) {
+ }
+ [2]=>
+ object(EmptyClass)#%d (0) {
+ }
+ [3]=>
+ object(EmptyClass)#%d (0) {
+ }
+}
+-- Testing usort() with ChildClass objects --
+bool(true)
+array(4) {
+ [0]=>
+ object(ChildClass)#%d (2) {
+ ["child_value"]=>
+ int(15)
+ ["pub_value"]=>
+ NULL
+ }
+ [1]=>
+ object(ChildClass)#%d (2) {
+ ["child_value"]=>
+ int(20)
+ ["pub_value"]=>
+ NULL
+ }
+ [2]=>
+ object(ChildClass)#%d (2) {
+ ["child_value"]=>
+ int(500)
+ ["pub_value"]=>
+ NULL
+ }
+ [3]=>
+ object(ChildClass)#%d (2) {
+ ["child_value"]=>
+ int(700)
+ ["pub_value"]=>
+ NULL
+ }
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/usort_variation1.phpt b/ext/standard/tests/array/usort_variation1.phpt
new file mode 100644
index 000000000..809e73025
--- /dev/null
+++ b/ext/standard/tests/array/usort_variation1.phpt
@@ -0,0 +1,234 @@
+--TEST--
+Test usort() function : usage variations - Pass different data types as $array_arg arg
+--FILE--
+<?php
+/* Prototype : bool usort(array $array_arg, string $cmp_function)
+ * Description: Sort an array by values using a user-defined comparison function
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Pass different data types as $array_arg argument to usort() to test behaviour
+ */
+
+echo "*** Testing usort() : usage variations ***\n";
+
+// Initialise function arguments not being substituted
+function cmp_function($value1, $value2)
+{
+ if($value1 == $value2) {
+ return 0;
+ }
+ else if($value1 > $value2) {
+ return 1;
+ }
+ else {
+ return -1;
+ }
+}
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $array_arg argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "string",
+ 'string',
+ $heredoc,
+
+ // object data
+/*22*/ new classA(),
+
+ // undefined data
+/*23*/ @$undefined_var,
+
+ // unset data
+/*24*/ @$unset_var,
+
+ // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of usort()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( usort($input, 'cmp_function') );
+ $iterator++;
+};
+
+//closing resource
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing usort() : usage variations ***
+
+-- Iteration 1 --
+
+Warning: usort(): The argument should be an array in %s on line %d
+bool(false)
+
+-- Iteration 2 --
+
+Warning: usort(): The argument should be an array in %s on line %d
+bool(false)
+
+-- Iteration 3 --
+
+Warning: usort(): The argument should be an array in %s on line %d
+bool(false)
+
+-- Iteration 4 --
+
+Warning: usort(): The argument should be an array in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+
+Warning: usort(): The argument should be an array in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Warning: usort(): The argument should be an array in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+
+Warning: usort(): The argument should be an array in %s on line %d
+bool(false)
+
+-- Iteration 8 --
+
+Warning: usort(): The argument should be an array in %s on line %d
+bool(false)
+
+-- Iteration 9 --
+
+Warning: usort(): The argument should be an array in %s on line %d
+bool(false)
+
+-- Iteration 10 --
+
+Warning: usort(): The argument should be an array in %s on line %d
+bool(false)
+
+-- Iteration 11 --
+
+Warning: usort(): The argument should be an array in %s on line %d
+bool(false)
+
+-- Iteration 12 --
+
+Warning: usort(): The argument should be an array in %s on line %d
+bool(false)
+
+-- Iteration 13 --
+
+Warning: usort(): The argument should be an array in %s on line %d
+bool(false)
+
+-- Iteration 14 --
+
+Warning: usort(): The argument should be an array in %s on line %d
+bool(false)
+
+-- Iteration 15 --
+
+Warning: usort(): The argument should be an array in %s on line %d
+bool(false)
+
+-- Iteration 16 --
+
+Warning: usort(): The argument should be an array in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Warning: usort(): The argument should be an array in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+bool(true)
+
+-- Iteration 19 --
+
+Warning: usort(): The argument should be an array in %s on line %d
+bool(false)
+
+-- Iteration 20 --
+
+Warning: usort(): The argument should be an array in %s on line %d
+bool(false)
+
+-- Iteration 21 --
+
+Warning: usort(): The argument should be an array in %s on line %d
+bool(false)
+
+-- Iteration 22 --
+bool(true)
+
+-- Iteration 23 --
+
+Warning: usort(): The argument should be an array in %s on line %d
+bool(false)
+
+-- Iteration 24 --
+
+Warning: usort(): The argument should be an array in %s on line %d
+bool(false)
+
+-- Iteration 25 --
+
+Warning: usort(): The argument should be an array in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/array/usort_variation10.phpt b/ext/standard/tests/array/usort_variation10.phpt
new file mode 100644
index 000000000..b343419ce
--- /dev/null
+++ b/ext/standard/tests/array/usort_variation10.phpt
@@ -0,0 +1,79 @@
+--TEST--
+Test usort() function : usage variations - duplicate keys and values
+--FILE--
+<?php
+/* Prototype : bool usort(array $array_arg, string $cmp_function)
+ * Description: Sort an array by values using a user-defined comparison function
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Pass an array with duplicate keys and values to usort() to test behaviour
+ */
+
+echo "*** Testing usort() : usage variation ***\n";
+
+function cmp($value1, $value2)
+{
+ if($value1 == $value2) {
+ return 0;
+ }
+ else if($value1 > $value2) {
+ return 1;
+ }
+ else
+ return -1;
+}
+
+// Array with duplicate string and integer keys and values
+$array_arg = array(0 => 2, "a" => 8, "d" => 9,
+ 3 => 3, 5 => 2, "o" => 6,
+ "z" => -99, 0 => 1, "z" => 3);
+
+echo "\n-- Array with duplicate keys --\n";
+var_dump( usort($array_arg, 'cmp') );
+var_dump($array_arg);
+
+// Array with default and assigned keys
+$array_arg = array(0 => "Banana", 1 => "Mango", "Orange", 2 => "Apple", "Pineapple");
+
+echo "\n-- Array with default/assigned keys --\n";
+var_dump( usort($array_arg, 'cmp') );
+var_dump($array_arg);
+?>
+===DONE===
+--EXPECTF--
+*** Testing usort() : usage variation ***
+
+-- Array with duplicate keys --
+bool(true)
+array(7) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(3)
+ [4]=>
+ int(6)
+ [5]=>
+ int(8)
+ [6]=>
+ int(9)
+}
+
+-- Array with default/assigned keys --
+bool(true)
+array(4) {
+ [0]=>
+ string(5) "Apple"
+ [1]=>
+ string(6) "Banana"
+ [2]=>
+ string(5) "Mango"
+ [3]=>
+ string(9) "Pineapple"
+}
+===DONE===
diff --git a/ext/standard/tests/array/usort_variation2.phpt b/ext/standard/tests/array/usort_variation2.phpt
new file mode 100644
index 000000000..0301ce024
--- /dev/null
+++ b/ext/standard/tests/array/usort_variation2.phpt
@@ -0,0 +1,242 @@
+--TEST--
+Test usort() function : usage variations - Pass different data types as $cmp_function arg
+--FILE--
+<?php
+/* Prototype : bool usort(array $array_arg, string $cmp_function)
+ * Description: Sort an array by values using a user-defined comparison function
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Pass different data types as $cmp_function argument to usort() to test behaviour
+ */
+
+echo "*** Testing usort() : usage variation ***\n";
+
+// Class definition for object variable
+class MyClass
+{
+ public function __toString()
+ {
+ return 'object';
+ }
+}
+
+$array_arg = array(0 => 1, 1 => -1, 2 => 3, 3 => 10, 4 => 4, 5 => 2, 6 => 8, 7 => 5);
+
+// Get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// Get resource variable
+$fp = fopen(__FILE__,'r');
+
+// different values for $cmp_function
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 10.1234567e8,
+ 10.7654321E-8,
+ .5,
+
+ // array data
+/*10*/ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+/*15*/ NULL,
+ null,
+
+ // boolean data
+/*17*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*21*/ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+/*25*/ new MyClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ @$undefined_var,
+
+ // unset data
+/*28*/ @$unset_var,
+);
+
+// loop through each element of $inputs to check the behavior of usort()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( usort($array_arg, $input) );
+ $iterator++;
+};
+
+//closing resource
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing usort() : usage variation ***
+
+-- Iteration 1 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 2 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 3 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 4 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 8 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 9 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 10 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 11 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 12 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 13 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 14 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 15 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 16 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 19 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 20 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 21 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 22 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 23 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 24 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 25 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 26 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 27 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Iteration 28 --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/usort_variation3.phpt b/ext/standard/tests/array/usort_variation3.phpt
new file mode 100644
index 000000000..3758fe9c9
--- /dev/null
+++ b/ext/standard/tests/array/usort_variation3.phpt
@@ -0,0 +1,115 @@
+--TEST--
+Test usort() function : usage variations - diff. array values
+--FILE--
+<?php
+/* Prototype : bool usort(array $array_arg, string $cmp_function)
+ * Description: Sort an array by values using a user-defined comparison function
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Pass an array with different data types as keys to usort() to test how it is re-ordered
+ */
+
+echo "*** Testing usort() : usage variation ***\n";
+
+function cmp_function($value1, $value2)
+{
+ if($value1 == $value2) {
+ return 0;
+ }
+ else if($value1 > $value2) {
+ return -1;
+ }
+ else {
+ return 1;
+ }
+}
+
+// different heredoc strings
+
+// single line heredoc string
+$simple_heredoc = <<<EOT2
+simple
+EOT2;
+
+// multiline heredoc string
+$multiline_heredoc = <<<EOT3
+multiline heredoc with 123
+and speci@! ch@r..\ncheck\talso
+EOT3;
+
+$array_arg = array(
+ // numeric keys
+ -2 => 9,
+ 8.9 => 8,
+ 012 => 7,
+ 0x34 => 6,
+
+ // string keys
+ 'key' => 5, //single quoted key
+ "two" => 4, //double quoted key
+ " " => 0, // space as key
+
+ // bool keys
+ TRUE => 100,
+ FALSE => 25,
+
+ // null keys
+ NULL => 35,
+
+ // binary key
+ "a".chr(0)."b" => 45,
+ b"binary" => 30,
+
+ //heredoc keys
+ $simple_heredoc => 75,
+ $multiline_heredoc => 200,
+
+ // default key
+ 1,
+);
+
+var_dump( usort($array_arg, 'cmp_function') );
+echo "\n-- Sorted array after usort() function call --\n";
+var_dump($array_arg);
+?>
+===DONE===
+--EXPECTF--
+*** Testing usort() : usage variation ***
+bool(true)
+
+-- Sorted array after usort() function call --
+array(15) {
+ [0]=>
+ int(200)
+ [1]=>
+ int(100)
+ [2]=>
+ int(75)
+ [3]=>
+ int(45)
+ [4]=>
+ int(35)
+ [5]=>
+ int(30)
+ [6]=>
+ int(25)
+ [7]=>
+ int(9)
+ [8]=>
+ int(8)
+ [9]=>
+ int(7)
+ [10]=>
+ int(6)
+ [11]=>
+ int(5)
+ [12]=>
+ int(4)
+ [13]=>
+ int(1)
+ [14]=>
+ int(0)
+}
+===DONE===
diff --git a/ext/standard/tests/array/usort_variation4.phpt b/ext/standard/tests/array/usort_variation4.phpt
new file mode 100644
index 000000000..4de45cc61
--- /dev/null
+++ b/ext/standard/tests/array/usort_variation4.phpt
@@ -0,0 +1,155 @@
+--TEST--
+Test usort() function : usage variations - numeric data
+--FILE--
+<?php
+/* Prototype : bool usort(array $array_arg, string $cmp_function)
+ * Description: Sort an array by values using a user-defined comparison function
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Pass arrays of numeric data to usort() to test how it is re-ordered
+ */
+
+echo "*** Testing usort() : usage variation ***\n";
+
+function cmp_function($value1, $value2)
+{
+ if($value1 == $value2) {
+ return 0;
+ }
+ else if($value1 > $value2) {
+ return 1;
+ }
+ else {
+ return -1;
+ }
+}
+
+// Int array
+$int_values = array(0 => 3, 1 => 2, 3 => 100,
+ 4 => 150, 5 => 25, 6 => 350,
+ 7 => 0, 8 => -3, 9 => -1200);
+
+echo "\n-- Sorting Integer array --\n";
+var_dump( usort($int_values, 'cmp_function') );
+var_dump($int_values);
+
+// Octal array
+$octal_values = array(0 => 056, 1 => 023, 2 => 090,
+ 3 => 015, 4 => -045, 5 => 01, 6 => -078);
+
+echo "\n-- Sorting Octal array --\n";
+var_dump( usort($octal_values, 'cmp_function') );
+var_dump($octal_values);
+
+// Hexadecimal array
+$hex_values = array(0 => 0xAE, 1 => 0x2B, 2 => 0X10,
+ 3 => -0xCF, 4 => 0X12, 5 => -0XF2);
+
+echo "\n-- Sorting Hex array --\n";
+var_dump( usort($hex_values, 'cmp_function') );
+var_dump($hex_values);
+
+// Float array
+$float_values = array( 0 => 10.2, 1 => 2.4, 2 => -3.4,
+ 3 => 0, 4 => 0.5, 5 => 7.3e3, 6 => -9.34E-2);
+
+echo "\n-- Sorting Float array --\n";
+var_dump( usort($float_values, 'cmp_function') );
+var_dump($float_values);
+
+// empty array
+$empty_array = array();
+
+echo "\n-- Sorting empty array --\n";
+var_dump( usort($empty_array, 'cmp_function') );
+var_dump($empty_array);
+?>
+===DONE===
+--EXPECTF--
+*** Testing usort() : usage variation ***
+
+-- Sorting Integer array --
+bool(true)
+array(9) {
+ [0]=>
+ int(-1200)
+ [1]=>
+ int(-3)
+ [2]=>
+ int(0)
+ [3]=>
+ int(2)
+ [4]=>
+ int(3)
+ [5]=>
+ int(25)
+ [6]=>
+ int(100)
+ [7]=>
+ int(150)
+ [8]=>
+ int(350)
+}
+
+-- Sorting Octal array --
+bool(true)
+array(7) {
+ [0]=>
+ int(-37)
+ [1]=>
+ int(-7)
+ [2]=>
+ int(0)
+ [3]=>
+ int(1)
+ [4]=>
+ int(13)
+ [5]=>
+ int(19)
+ [6]=>
+ int(46)
+}
+
+-- Sorting Hex array --
+bool(true)
+array(6) {
+ [0]=>
+ int(-242)
+ [1]=>
+ int(-207)
+ [2]=>
+ int(16)
+ [3]=>
+ int(18)
+ [4]=>
+ int(43)
+ [5]=>
+ int(174)
+}
+
+-- Sorting Float array --
+bool(true)
+array(7) {
+ [0]=>
+ float(-3.4)
+ [1]=>
+ float(-0.0934)
+ [2]=>
+ int(0)
+ [3]=>
+ float(0.5)
+ [4]=>
+ float(2.4)
+ [5]=>
+ float(10.2)
+ [6]=>
+ float(7300)
+}
+
+-- Sorting empty array --
+bool(true)
+array(0) {
+}
+===DONE===
diff --git a/ext/standard/tests/array/usort_variation5.phpt b/ext/standard/tests/array/usort_variation5.phpt
new file mode 100644
index 000000000..922321c23
--- /dev/null
+++ b/ext/standard/tests/array/usort_variation5.phpt
@@ -0,0 +1,143 @@
+--TEST--
+Test usort() function : usage variations - string data
+--FILE--
+<?php
+/* Prototype : bool usort(array $array_arg, string $cmp_function)
+ * Description: Sort an array by values using a user-defined comparison function
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Pass arrays of string data to usort() to test how it is re-ordered
+ */
+
+echo "*** Testing usort() : usage variation ***\n";
+
+function cmp_function($value1, $value2)
+{
+ if($value1 == $value2) {
+ return 0;
+ }
+ else if($value1 > $value2) {
+ return 1;
+ }
+ else {
+ return -1;
+ }
+}
+
+// Different heredoc strings to be sorted
+$empty_heredoc =<<<EOT
+EOT;
+
+$simple_heredoc1 =<<<EOT
+Heredoc
+EOT;
+
+$simple_heredoc2 =<<<EOT
+HEREDOC
+EOT;
+
+$multiline_heredoc =<<<EOT
+heredoc string\twith!@# and 123
+Test this!!!
+EOT;
+
+// Single quoted strings
+$single_quoted_values = array(
+ 0 => ' ', 1 => 'test', 3 => 'Hello', 4 => 'HELLO',
+ 5 => '', 6 => '\t', 7 => '0', 8 => '123Hello',
+ 9 => '\'', 10 => '@#$%'
+);
+
+echo "\n-- Sorting Single Quoted String values --\n";
+var_dump( usort($single_quoted_values, 'cmp_function') );
+var_dump($single_quoted_values);
+
+// Double quoted strings
+$double_quoted_values = array(
+ 0 => " ", 1 => "test", 3 => "Hello", 4 => "HELLO",
+ 5 => "", 6 => "\t", 7 => "0", 8 => "123Hello",
+ 9 => "\"", 10 => "@#$%"
+);
+
+echo "\n-- Sorting Double Quoted String values --\n";
+var_dump( usort($double_quoted_values, 'cmp_function') );
+var_dump($double_quoted_values);
+
+// Heredoc strings
+$heredoc_values = array(0 => $empty_heredoc, 1 => $simple_heredoc1,
+ 2 => $simple_heredoc2, 3 => $multiline_heredoc);
+
+echo "\n-- Sorting Heredoc String values --\n";
+var_dump( usort($heredoc_values, 'cmp_function') );
+var_dump($heredoc_values);
+?>
+===DONE===
+--EXPECTF--
+*** Testing usort() : usage variation ***
+
+-- Sorting Single Quoted String values --
+bool(true)
+array(10) {
+ [0]=>
+ string(0) ""
+ [1]=>
+ string(1) " "
+ [2]=>
+ string(1) "'"
+ [3]=>
+ string(1) "0"
+ [4]=>
+ string(8) "123Hello"
+ [5]=>
+ string(4) "@#$%"
+ [6]=>
+ string(5) "HELLO"
+ [7]=>
+ string(5) "Hello"
+ [8]=>
+ string(2) "\t"
+ [9]=>
+ string(4) "test"
+}
+
+-- Sorting Double Quoted String values --
+bool(true)
+array(10) {
+ [0]=>
+ string(0) ""
+ [1]=>
+ string(1) " "
+ [2]=>
+ string(1) " "
+ [3]=>
+ string(1) """
+ [4]=>
+ string(1) "0"
+ [5]=>
+ string(8) "123Hello"
+ [6]=>
+ string(4) "@#$%"
+ [7]=>
+ string(5) "HELLO"
+ [8]=>
+ string(5) "Hello"
+ [9]=>
+ string(4) "test"
+}
+
+-- Sorting Heredoc String values --
+bool(true)
+array(4) {
+ [0]=>
+ string(0) ""
+ [1]=>
+ string(7) "HEREDOC"
+ [2]=>
+ string(7) "Heredoc"
+ [3]=>
+ string(%d) "heredoc string with!@# and 123
+Test this!!!"
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/usort_variation6.phpt b/ext/standard/tests/array/usort_variation6.phpt
new file mode 100644
index 000000000..ab4b3d410
--- /dev/null
+++ b/ext/standard/tests/array/usort_variation6.phpt
@@ -0,0 +1,139 @@
+--TEST--
+Test usort() function : usage variations - multi-dimensional arrays
+--FILE--
+<?php
+/* Prototype : bool usort(array $array_arg, string $cmp_function)
+ * Description: Sort an array by values using a user-defined comparison function
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Pass a multi-dimensional array as $array_arg argument to usort()
+ * to test how array is re-ordered
+ */
+
+echo "*** Testing usort() : usage variation ***\n";
+
+function cmp_function($value1, $value2)
+{
+ if($value1 == $value2) {
+ return 0;
+ }
+ else if($value1 > $value2) {
+ return 1;
+ }
+ else {
+ return -1;
+ }
+}
+
+$array_args = array(
+ 0 => array(2, 10, -1),
+ 1 => array(100),
+ 2 => array(),
+ 3 => array(0),
+ 4 => array(-1),
+ 5 => array(-9, 34, 54, 0, 20),
+ 6 => array(''),
+ 7 => array("apple", "Apple", "APPLE", "aPPle", "aPpLe")
+);
+
+$temp_array = $array_args;
+
+echo "\n-- Pass usort() a two-dimensional array --\n";
+// sorting array_arg as whole array
+var_dump( usort($temp_array, 'cmp_function') );
+
+echo "-- Array after call to usort() --\n";
+var_dump($temp_array);
+
+echo "\n-- Pass usort() a sub-array --\n";
+var_dump( usort($array_args[5], 'cmp_function') );
+
+echo "-- Array after call to usort() --\n";
+var_dump($array_args[5]);
+?>
+===DONE===
+--EXPECTF--
+*** Testing usort() : usage variation ***
+
+-- Pass usort() a two-dimensional array --
+bool(true)
+-- Array after call to usort() --
+array(8) {
+ [0]=>
+ array(0) {
+ }
+ [1]=>
+ array(1) {
+ [0]=>
+ int(-1)
+ }
+ [2]=>
+ array(1) {
+ [0]=>
+ string(0) ""
+ }
+ [3]=>
+ array(1) {
+ [0]=>
+ int(0)
+ }
+ [4]=>
+ array(1) {
+ [0]=>
+ int(100)
+ }
+ [5]=>
+ array(3) {
+ [0]=>
+ int(2)
+ [1]=>
+ int(10)
+ [2]=>
+ int(-1)
+ }
+ [6]=>
+ array(5) {
+ [0]=>
+ int(-9)
+ [1]=>
+ int(34)
+ [2]=>
+ int(54)
+ [3]=>
+ int(0)
+ [4]=>
+ int(20)
+ }
+ [7]=>
+ array(5) {
+ [0]=>
+ string(5) "apple"
+ [1]=>
+ string(5) "Apple"
+ [2]=>
+ string(5) "APPLE"
+ [3]=>
+ string(5) "aPPle"
+ [4]=>
+ string(5) "aPpLe"
+ }
+}
+
+-- Pass usort() a sub-array --
+bool(true)
+-- Array after call to usort() --
+array(5) {
+ [0]=>
+ int(-9)
+ [1]=>
+ int(0)
+ [2]=>
+ int(20)
+ [3]=>
+ int(34)
+ [4]=>
+ int(54)
+}
+===DONE===
diff --git a/ext/standard/tests/array/usort_variation7.phpt b/ext/standard/tests/array/usort_variation7.phpt
new file mode 100644
index 000000000..e567341b1
--- /dev/null
+++ b/ext/standard/tests/array/usort_variation7.phpt
@@ -0,0 +1,61 @@
+--TEST--
+Test usort() function : usage variations - Anonymous comparison function
+--FILE--
+<?php
+/* Prototype : bool usort(array $array_arg, string $cmp_function)
+ * Description: Sort an array by values using a user-defined comparison function
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Pass an anonymous comparison function as $cmp_function argument to test behaviour()
+ */
+
+echo "*** Testing usort() : usage variation ***\n";
+
+$cmp_function = 'if($value1 == $value2) {return 0;} else if($value1 > $value2) {return 1;} else{return -1;}';
+
+$array_arg = array(0 => 100, 1 => 3, 2 => -70, 3 => 24, 4 => 90);
+
+echo "\n-- Anonymous 'cmp_function' with parameters passed by value --\n";
+var_dump( usort($array_arg, create_function('$value1, $value2',$cmp_function) ) );
+var_dump($array_arg);
+
+$array_arg = array("b" => "Banana", "m" => "Mango", "a" => "Apple", "p" => "Pineapple");
+
+echo "\n-- Anonymous 'cmp_function' with parameters passed by reference --\n";
+var_dump( usort($array_arg, create_function('&$value1, &$value2', $cmp_function) ) );
+var_dump($array_arg);
+?>
+===DONE===
+--EXPECTF--
+*** Testing usort() : usage variation ***
+
+-- Anonymous 'cmp_function' with parameters passed by value --
+bool(true)
+array(5) {
+ [0]=>
+ int(-70)
+ [1]=>
+ int(3)
+ [2]=>
+ int(24)
+ [3]=>
+ int(90)
+ [4]=>
+ int(100)
+}
+
+-- Anonymous 'cmp_function' with parameters passed by reference --
+bool(true)
+array(4) {
+ [0]=>
+ string(5) "Apple"
+ [1]=>
+ string(6) "Banana"
+ [2]=>
+ string(5) "Mango"
+ [3]=>
+ string(9) "Pineapple"
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/array/usort_variation8.phpt b/ext/standard/tests/array/usort_variation8.phpt
new file mode 100644
index 000000000..2c5c02b14
--- /dev/null
+++ b/ext/standard/tests/array/usort_variation8.phpt
@@ -0,0 +1,85 @@
+--TEST--
+Test usort() function : usage variations - use built in functions as $cmp_function arg
+--FILE--
+<?php
+/* Prototype : bool usort(array $array_arg, string $cmp_function)
+ * Description: Sort an array by values using a user-defined comparison function
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Test usort() when comparison function is:
+ * 1. a built in comparison function
+ * 2. a language construct
+ */
+
+echo "*** Testing usort() : usage variation ***\n";
+
+// Initializing variables
+$array_arg = array("b" => "Banana", "m" => "Mango", "a" => "apple",
+ "p" => "Pineapple", "o" => "orange");
+
+// Testing library functions as comparison function
+echo "\n-- Testing usort() with built-in 'cmp_function': strcasecmp() --\n";
+$temp_array1 = $array_arg;
+var_dump( usort($temp_array1, 'strcasecmp') );
+var_dump($temp_array1);
+
+echo "\n-- Testing usort() with built-in 'cmp_function': strcmp() --\n";
+$temp_array2 = $array_arg;
+var_dump( usort($temp_array2, 'strcmp') );
+var_dump($temp_array2);
+
+// Testing with language construct as comparison function
+echo "\n-- Testing usort() with language construct as 'cmp_function' --\n";
+$temp_array3 = $array_arg;
+var_dump( usort($temp_array3, 'echo') );
+
+echo "\n-- Testing usort() with language construct as 'cmp_function' --\n";
+$temp_array4 = $array_arg;
+var_dump( usort($temp_array4, 'exit') );
+?>
+===DONE===
+--EXPECTF--
+*** Testing usort() : usage variation ***
+
+-- Testing usort() with built-in 'cmp_function': strcasecmp() --
+bool(true)
+array(5) {
+ [0]=>
+ string(5) "apple"
+ [1]=>
+ string(6) "Banana"
+ [2]=>
+ string(5) "Mango"
+ [3]=>
+ string(6) "orange"
+ [4]=>
+ string(9) "Pineapple"
+}
+
+-- Testing usort() with built-in 'cmp_function': strcmp() --
+bool(true)
+array(5) {
+ [0]=>
+ string(6) "Banana"
+ [1]=>
+ string(5) "Mango"
+ [2]=>
+ string(9) "Pineapple"
+ [3]=>
+ string(5) "apple"
+ [4]=>
+ string(6) "orange"
+}
+
+-- Testing usort() with language construct as 'cmp_function' --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+
+-- Testing usort() with language construct as 'cmp_function' --
+
+Warning: usort(): Invalid comparison function in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/array/usort_variation9.phpt b/ext/standard/tests/array/usort_variation9.phpt
new file mode 100644
index 000000000..6a067992e
--- /dev/null
+++ b/ext/standard/tests/array/usort_variation9.phpt
@@ -0,0 +1,66 @@
+--TEST--
+Test usort() function : usage variations - referenced variables
+--FILE--
+<?php
+/* Prototype : bool usort(array $array_arg, string $cmp_function)
+ * Description: Sort an array by values using a user-defined comparison function
+ * Source code: ext/standard/array.c
+ */
+
+/*
+ * Pass an array of referenced variables as $array_arg to test behaviour
+ */
+
+echo "*** Testing usort() : usage variation ***\n";
+
+function cmp_function($value1, $value2)
+{
+ if($value1 == $value2) {
+ return 0;
+ }
+ else if($value1 > $value2) {
+ return 1;
+ }
+ else {
+ return -1;
+ }
+}
+
+// different variables which are used as elements of $array_arg
+$value1 = -5;
+$value2 = 100;
+$value3 = 0;
+$value4 = &$value1;
+
+// array_args an array containing elements with reference variables
+$array_arg = array(
+ 0 => 10,
+ 1 => &$value4,
+ 2 => &$value2,
+ 3 => 200,
+ 4 => &$value3,
+);
+
+echo "\n-- Sorting \$array_arg containing different references --\n";
+var_dump( usort($array_arg, 'cmp_function') );
+var_dump($array_arg);
+?>
+===DONE===
+--EXPECTF--
+*** Testing usort() : usage variation ***
+
+-- Sorting $array_arg containing different references --
+bool(true)
+array(5) {
+ [0]=>
+ &int(-5)
+ [1]=>
+ &int(0)
+ [2]=>
+ int(10)
+ [3]=>
+ &int(100)
+ [4]=>
+ int(200)
+}
+===DONE===
diff --git a/ext/standard/tests/array/var_export.phpt b/ext/standard/tests/array/var_export.phpt
index acfec7699..8caf40789 100644
--- a/ext/standard/tests/array/var_export.phpt
+++ b/ext/standard/tests/array/var_export.phpt
@@ -7,5 +7,7 @@ var_export($a);
?>
--EXPECT--
stdClass::__set_state(array(
+ 0 => 1,
+ 1 => 3,
'foo' => 'bar',
))
diff --git a/ext/standard/tests/assert/assert.phpt b/ext/standard/tests/assert/assert.phpt
index bced47d8f..44fb6091d 100644
--- a/ext/standard/tests/assert/assert.phpt
+++ b/ext/standard/tests/assert/assert.phpt
@@ -2,6 +2,11 @@
assert()
--INI--
error_reporting = 2039
+assert.active = 0
+assert.warning = 1
+assert.callback =
+assert.bail = 0
+assert.quiet_eval = 0
--FILE--
<?php
function a($file,$line,$myev)
diff --git a/ext/standard/tests/assert/assert02.phpt b/ext/standard/tests/assert/assert02.phpt
index ac0824cda..f3d00a335 100644
--- a/ext/standard/tests/assert/assert02.phpt
+++ b/ext/standard/tests/assert/assert02.phpt
@@ -1,5 +1,11 @@
--TEST--
catch assert() errors
+---INI---
+assert.active = 1
+assert.warning = 1
+assert.callback =
+assert.bail = 0
+assert.quiet_eval = 0
--FILE--
<?php
function handler($errno, $errstr) {
diff --git a/ext/standard/tests/assert/assert03.phpt b/ext/standard/tests/assert/assert03.phpt
index 077474d4d..3fe6abd59 100644
--- a/ext/standard/tests/assert/assert03.phpt
+++ b/ext/standard/tests/assert/assert03.phpt
@@ -1,5 +1,11 @@
--TEST--
assert() - set callback using ini_set()
+---INI---
+assert.active = 1
+assert.warning = 0
+assert.callback =
+assert.bail = 0
+assert.quiet_eval = 1
--FILE--
<?php
function a($file,$line,$myev)
diff --git a/ext/standard/tests/assert/assert04.phpt b/ext/standard/tests/assert/assert04.phpt
index 43028ad3a..dbd2d8d27 100644
--- a/ext/standard/tests/assert/assert04.phpt
+++ b/ext/standard/tests/assert/assert04.phpt
@@ -1,5 +1,11 @@
--TEST--
misc assert() tests tests
+---INI---
+assert.active = 1
+assert.warning = 1
+assert.callback =
+assert.bail = 0
+assert.quiet_eval = 0
--FILE--
<?php
/* Assert not active */
diff --git a/ext/standard/tests/dir/readdir_variation2.phpt b/ext/standard/tests/dir/readdir_variation2.phpt
index 6809ac2f2..c689ed90e 100644
--- a/ext/standard/tests/dir/readdir_variation2.phpt
+++ b/ext/standard/tests/dir/readdir_variation2.phpt
@@ -18,11 +18,20 @@ mkdir($path);
$dir_handle = opendir($path);
echo "\n-- Pass an empty directory to readdir() --\n";
+function mysort($a,$b) {
+ return strlen($a) > strlen($b) ? 1 : -1;
+}
+$entries = array();
while(FALSE !== ($file = readdir($dir_handle))){
- var_dump($file);
+ $entries[] = $file;
}
closedir($dir_handle);
+
+usort($entries, "mysort");
+foreach($entries as $entry) {
+ var_dump($entry);
+}
?>
===DONE===
--CLEAN--
diff --git a/ext/standard/tests/dir/rewinddir_basic.phpt b/ext/standard/tests/dir/rewinddir_basic.phpt
index e9c027818..2d1f783f5 100644
--- a/ext/standard/tests/dir/rewinddir_basic.phpt
+++ b/ext/standard/tests/dir/rewinddir_basic.phpt
@@ -32,22 +32,24 @@ echo "\n-- Read and rewind first directory (argument supplied) --\n";
while(FALSE !== $file1 = readdir($dh1)) {
$data[] = $file1;
}
+$first = $data[0];
sort($data);
var_dump($data);
var_dump(rewinddir($dh1));
-var_dump(readdir($dh1));
+var_dump(readdir($dh1) == $first);
$data = array();
echo "\n-- Read and rewind second directory (no argument supplied) --\n";
while(FALSE !== $file2 = readdir()) {
$data[] = $file2;
}
+$first = $data[0];
sort($data);
var_dump($data);
var_dump(rewinddir());
-var_dump(readdir());
+var_dump(readdir() == $first);
closedir($dh1);
closedir($dh2);
@@ -78,7 +80,7 @@ array(3) {
string(9) "file1.tmp"
}
NULL
-string(1) "."
+bool(true)
-- Read and rewind second directory (no argument supplied) --
array(3) {
@@ -90,5 +92,5 @@ array(3) {
string(9) "file2.tmp"
}
NULL
-string(1) "."
+bool(true)
===DONE===
diff --git a/ext/standard/tests/dir/rewinddir_variation2.phpt b/ext/standard/tests/dir/rewinddir_variation2.phpt
index 37ff324ee..7594cc220 100644
--- a/ext/standard/tests/dir/rewinddir_variation2.phpt
+++ b/ext/standard/tests/dir/rewinddir_variation2.phpt
@@ -36,7 +36,7 @@ rmdir($dir_path);
-- Create the directory handle, read and close the directory --
resource(%d) of type (stream)
-string(1) "."
+string(%d) "%s"
-- Call to rewinddir() --
diff --git a/ext/standard/tests/directory/DirectoryClass_basic_001.phpt b/ext/standard/tests/directory/DirectoryClass_basic_001.phpt
new file mode 100644
index 000000000..e8ffd5752
--- /dev/null
+++ b/ext/standard/tests/directory/DirectoryClass_basic_001.phpt
@@ -0,0 +1,53 @@
+--TEST--
+Directory class behaviour.
+--FILE--
+<?php
+/*
+ * Prototype: object dir(string directory[, resource context])
+ * Description: Directory class with properties, handle and class and methods read, rewind and close
+ * Class is defined in ext/standard/dir.c
+ */
+
+echo "Structure of Directory class:\n";
+$rc = new ReflectionClass("Directory");
+echo $rc;
+
+echo "Cannot instantiate a valid Directory directly:\n";
+$d = new Directory(getcwd());
+var_dump($d);
+var_dump($d->read());
+
+?>
+--EXPECTF--
+Structure of Directory class:
+Class [ <internal%s> class Directory ] {
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [3] {
+ Method [ <internal%s> public method close ] {
+ }
+
+ Method [ <internal%s> public method rewind ] {
+ }
+
+ Method [ <internal%s> public method read ] {
+ }
+ }
+}
+Cannot instantiate a valid Directory directly:
+object(Directory)#%d (0) {
+}
+
+Warning: Directory::read(): Unable to find my handle property in %s on line 15
+bool(false) \ No newline at end of file
diff --git a/ext/standard/tests/directory/DirectoryClass_error_001.phpt b/ext/standard/tests/directory/DirectoryClass_error_001.phpt
new file mode 100644
index 000000000..b435d9e66
--- /dev/null
+++ b/ext/standard/tests/directory/DirectoryClass_error_001.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Directory class behaviour.
+--FILE--
+<?php
+
+echo "\n--> Try all methods with bad handle:\n";
+$d = new Directory(getcwd());
+$d->handle = "Havoc!";
+var_dump($d->read());
+var_dump($d->rewind());
+var_dump($d->close());
+
+echo "\n--> Try all methods with no handle:\n";
+$d = new Directory(getcwd());
+unset($d->handle);
+var_dump($d->read());
+var_dump($d->rewind());
+var_dump($d->close());
+
+echo "\n--> Try all methods with wrong number of args:\n";
+$d = new Directory(getcwd());
+var_dump($d->read(1,2));
+var_dump($d->rewind(1,2));
+var_dump($d->close(1,2));
+
+?>
+--EXPECTF--
+
+--> Try all methods with bad handle:
+
+Warning: Directory::read(): supplied argument is not a valid Directory resource in %s on line 6
+bool(false)
+
+Warning: Directory::rewind(): supplied argument is not a valid Directory resource in %s on line 7
+bool(false)
+
+Warning: Directory::close(): supplied argument is not a valid Directory resource in %s on line 8
+bool(false)
+
+--> Try all methods with no handle:
+
+Warning: Directory::read(): Unable to find my handle property in %s on line 13
+bool(false)
+
+Warning: Directory::rewind(): Unable to find my handle property in %s on line 14
+bool(false)
+
+Warning: Directory::close(): Unable to find my handle property in %s on line 15
+bool(false)
+
+--> Try all methods with wrong number of args:
+
+Warning: Wrong parameter count for Directory::read() in %s on line 19
+NULL
+
+Warning: Wrong parameter count for Directory::rewind() in %s on line 20
+NULL
+
+Warning: Wrong parameter count for Directory::close() in %s on line 21
+NULL \ No newline at end of file
diff --git a/ext/standard/tests/directory/directory_constants-win32.phpt b/ext/standard/tests/directory/directory_constants-win32.phpt
new file mode 100644
index 000000000..6a9a066d6
--- /dev/null
+++ b/ext/standard/tests/directory/directory_constants-win32.phpt
@@ -0,0 +1,26 @@
+--TEST--
+Test that the Directory extension constants are correctly defined.
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) != 'WIN') {
+ die('skip.. only for Windows');
+}
+?>
+--FILE--
+<?php
+
+echo DIRECTORY_SEPARATOR;
+
+echo "\n";
+
+echo PATH_SEPARATOR;
+
+echo "\n";
+
+echo "done";
+
+?>
+--EXPECT--
+\
+;
+done
diff --git a/ext/standard/tests/directory/directory_constants.phpt b/ext/standard/tests/directory/directory_constants.phpt
new file mode 100644
index 000000000..f8e143bc1
--- /dev/null
+++ b/ext/standard/tests/directory/directory_constants.phpt
@@ -0,0 +1,26 @@
+--TEST--
+Test that the Directory extension constants are correctly defined.
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip.. Not valid for Windows');
+}
+?>
+--FILE--
+<?php
+
+echo DIRECTORY_SEPARATOR;
+
+echo "\n";
+
+echo PATH_SEPARATOR;
+
+echo "\n";
+
+echo "done";
+
+?>
+--EXPECT--
+/
+:
+done
diff --git a/ext/standard/tests/file/001-win32.phpt b/ext/standard/tests/file/001-win32.phpt
index 09ab2b7a1..69e82ab89 100644
--- a/ext/standard/tests/file/001-win32.phpt
+++ b/ext/standard/tests/file/001-win32.phpt
@@ -10,7 +10,6 @@ if (substr(PHP_OS, 0, 3) != 'WIN') {
<?php
chdir(dirname(__FILE__));
@unlink('test.file');
-@unlink('test.link');
if (file_exists('test.file')) {
echo "test.file exists\n";
} else {
@@ -23,22 +22,11 @@ if (file_exists('test.file')) {
} else {
echo "test.file does not exist\n";
}
-sleep (2);
-if (file_exists('test.link')) {
- echo "test.link exists\n";
-} else {
- echo "test.link does not exist\n";
-}
if (is_link('test.file')) {
echo "test.file is a symlink\n";
} else {
echo "test.file is not a symlink\n";
}
-if (is_link('test.link')) {
- echo "test.link is a symlink\n";
-} else {
- echo "test.link is not a symlink\n";
-}
if (file_exists('test.file')) {
echo "test.file exists\n";
} else {
@@ -52,7 +40,6 @@ for ($i = 0; $i <= 12; $i++) {
}
}
echo "test.file is " . filetype('test.file') . "\n";
-echo "test.link is " . filetype('test.link') . "\n";
printf ("test.file permissions are 0%o\n", 0777 & fileperms('test.file'));
echo "test.file size is " . filesize('test.file') . "\n";
if (is_writeable('test.file')) {
@@ -70,16 +57,6 @@ if (is_file('test.file')) {
} else {
echo "test.file is not a regular file\n";
}
-if (is_file('test.link')) {
- echo "test.link is a regular file\n";
-} else {
- echo "test.link is not a regular file\n";
-}
-if (is_dir('test.link')) {
- echo "test.link is a directory\n";
-} else {
- echo "test.link is not a directory\n";
-}
if (is_dir('../file')) {
echo "../file is a directory\n";
} else {
@@ -106,20 +83,16 @@ if (file_exists('test.file')) {
--EXPECT--
test.file does not exist
test.file exists
-test.link does not exist
test.file is not a symlink
-test.link is not a symlink
test.file exists
test.file is file
-test.link is file
test.file permissions are 0666
test.file size is 0
test.file is writeable
test.file is readable
test.file is a regular file
-test.link is not a regular file
-test.link is not a directory
../file is a directory
test.file is not a directory
test.file does not exist
test.file does not exist
+
diff --git a/ext/standard/tests/file/005_variation2-win32.phpt b/ext/standard/tests/file/005_variation2-win32.phpt
new file mode 100644
index 000000000..caed7e62f
--- /dev/null
+++ b/ext/standard/tests/file/005_variation2-win32.phpt
@@ -0,0 +1,125 @@
+--TEST--
+Test fileatime(), filemtime(), filectime() & touch() functions : usage variation
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) != 'WIN') {
+ die('skip.. only for Windows');
+}
+?>
+--FILE--
+<?php
+/*
+ Prototype: int fileatime ( string $filename );
+ Description: Returns the time the file was last accessed, or FALSE
+ in case of an error. The time is returned as a Unix timestamp.
+
+ Prototype: int filemtime ( string $filename );
+ Description: Returns the time the file was last modified, or FALSE
+ in case of an error.
+
+ Prototype: int filectime ( string $filename );
+ Description: Returns the time the file was last changed, or FALSE
+ in case of an error. The time is returned as a Unix timestamp.
+
+ Prototype: bool touch ( string $filename [, int $time [, int $atime]] );
+ Description: Attempts to set the access and modification times of the file
+ named in the filename parameter to the value given in time.
+*/
+
+/*
+ Prototype: void stat_fn(string $filename);
+ Description: Prints access, modification and change times of a file
+*/
+function stat_fn( $filename ) {
+ echo "\n-- File '$filename' --\n";
+ echo "-- File access time is => ";
+ echo fileatime($filename)."\n";
+ clearstatcache();
+ echo "-- File modification time is => ";
+ echo filemtime($filename)."\n";
+ clearstatcache();
+ echo "-- inode change time is => ";
+ echo filectime($filename)."\n";
+ clearstatcache();
+
+
+}
+
+echo "*** Testing fileattime(), filemtime(), filectime() & touch() : usage variations ***\n";
+echo "\n*** testing file info ***";
+stat_fn(NULL);
+stat_fn(false);
+stat_fn('');
+stat_fn(' ');
+stat_fn('|');
+echo "\n*** testing touch ***";
+var_dump(touch(NULL));
+var_dump(touch(false));
+var_dump(touch(''));
+
+//php generates permission denied, we generate No such file or dir.
+var_dump(touch(' '));
+var_dump(touch('|'));
+
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing fileattime(), filemtime(), filectime() & touch() : usage variations ***
+
+*** testing file info ***
+-- File '' --
+-- File access time is =>
+-- File modification time is =>
+-- inode change time is =>
+
+-- File '' --
+-- File access time is =>
+-- File modification time is =>
+-- inode change time is =>
+
+-- File '' --
+-- File access time is =>
+-- File modification time is =>
+-- inode change time is =>
+
+-- File ' ' --
+-- File access time is =>
+Warning: fileatime(): stat failed for in %s on line %d
+
+-- File modification time is =>
+Warning: filemtime(): stat failed for in %s on line %d
+
+-- inode change time is =>
+Warning: filectime(): stat failed for in %s on line %d
+
+
+-- File '|' --
+-- File access time is =>
+Warning: fileatime(): stat failed for | in %s on line %d
+
+-- File modification time is =>
+Warning: filemtime(): stat failed for | in %s on line %d
+
+-- inode change time is =>
+Warning: filectime(): stat failed for | in %s on line %d
+
+
+*** testing touch ***
+Warning: touch(): Unable to create file because No such file or directory in %s on line %d
+bool(false)
+
+Warning: touch(): Unable to create file because No such file or directory in %s on line %d
+bool(false)
+
+Warning: touch(): Unable to create file because No such file or directory in %s on line %d
+bool(false)
+
+Warning: touch(): Unable to create file because %s in %s on line %d
+bool(false)
+
+Warning: touch(): Unable to create file | because %s in %s on line %d
+bool(false)
+Done
diff --git a/ext/standard/tests/file/005_variation2.phpt b/ext/standard/tests/file/005_variation2.phpt
new file mode 100644
index 000000000..d70ce1251
--- /dev/null
+++ b/ext/standard/tests/file/005_variation2.phpt
@@ -0,0 +1,113 @@
+--TEST--
+Test fileatime(), filemtime(), filectime() & touch() functions : usage variation
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip.. only for Non Windows Systems');
+}
+?>
+--FILE--
+<?php
+/*
+ Prototype: int fileatime ( string $filename );
+ Description: Returns the time the file was last accessed, or FALSE
+ in case of an error. The time is returned as a Unix timestamp.
+
+ Prototype: int filemtime ( string $filename );
+ Description: Returns the time the file was last modified, or FALSE
+ in case of an error.
+
+ Prototype: int filectime ( string $filename );
+ Description: Returns the time the file was last changed, or FALSE
+ in case of an error. The time is returned as a Unix timestamp.
+
+ Prototype: bool touch ( string $filename [, int $time [, int $atime]] );
+ Description: Attempts to set the access and modification times of the file
+ named in the filename parameter to the value given in time.
+*/
+
+/*
+ Prototype: void stat_fn(string $filename);
+ Description: Prints access, modification and change times of a file
+*/
+function stat_fn( $filename ) {
+ echo "\n-- File '$filename' --\n";
+ echo "-- File access time is => ";
+ echo fileatime($filename)."\n";
+ clearstatcache();
+ echo "-- File modification time is => ";
+ echo filemtime($filename)."\n";
+ clearstatcache();
+ echo "-- inode change time is => ";
+ echo filectime($filename)."\n";
+ clearstatcache();
+
+
+}
+
+echo "*** Testing fileattime(), filemtime(), filectime() & touch() : usage variations ***\n";
+echo "\n*** testing touch ***\n";
+var_dump(touch(NULL));
+var_dump(touch(false));
+var_dump(touch(''));
+var_dump(touch(' '));
+var_dump(touch('|'));
+
+echo "\n*** testing file info ***";
+stat_fn(NULL);
+stat_fn(false);
+stat_fn('');
+stat_fn(' ');
+stat_fn('|');
+
+var_dump(unlink(' '));
+var_dump(unlink('|'));
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing fileattime(), filemtime(), filectime() & touch() : usage variations ***
+
+*** testing touch ***
+
+Warning: touch(): Unable to create file because %s in %s on line %d
+bool(false)
+
+Warning: touch(): Unable to create file because %s in %s on line %d
+bool(false)
+
+Warning: touch(): Unable to create file because %s in %s on line %d
+bool(false)
+bool(true)
+bool(true)
+
+*** testing file info ***
+-- File '' --
+-- File access time is =>
+-- File modification time is =>
+-- inode change time is =>
+
+-- File '' --
+-- File access time is =>
+-- File modification time is =>
+-- inode change time is =>
+
+-- File '' --
+-- File access time is =>
+-- File modification time is =>
+-- inode change time is =>
+
+-- File ' ' --
+-- File access time is => %d
+-- File modification time is => %d
+-- inode change time is => %d
+
+-- File '|' --
+-- File access time is => %d
+-- File modification time is => %d
+-- inode change time is => %d
+bool(true)
+bool(true)
+Done
diff --git a/ext/standard/tests/file/007_error.phpt b/ext/standard/tests/file/007_error.phpt
index bf976093a..82cf7278f 100644
--- a/ext/standard/tests/file/007_error.phpt
+++ b/ext/standard/tests/file/007_error.phpt
@@ -65,6 +65,7 @@ for($loop_counter = 1; $loop_counter <= count($invalid_args); $loop_counter++) {
}
?>
+===Done===
--EXPECTF--
*** Testing error conditions for fopen(), fclsoe() & feof() ***
@@ -74,7 +75,7 @@ bool(false)
Warning: fopen() expects at least 2 parameters, 0 given in %s on line %d
bool(false)
-Warning: fclose(): 5 is not a valid stream resource in %s on line %d
+Warning: fclose(): %d is not a valid stream resource in %s on line %d
bool(false)
Warning: fclose(): supplied argument is not a valid stream resource in %s on line %d
@@ -83,7 +84,7 @@ bool(false)
Warning: Wrong parameter count for fclose() in %s on line %d
NULL
-Warning: feof(): 5 is not a valid stream resource in %s on line %d
+Warning: feof(): %d is not a valid stream resource in %s on line %d
bool(false)
Warning: feof(): supplied argument is not a valid stream resource in %s on line %d
@@ -162,6 +163,8 @@ bool(false)
Warning: feof(): supplied argument is not a valid stream resource in %s on line %d
bool(false)
-- Iteration 7 --
+
+Warning: fopen(): Filename cannot be empty in %s on line %d
bool(false)
Warning: fclose(): supplied argument is not a valid stream resource in %s on line %d
@@ -170,6 +173,8 @@ bool(false)
Warning: feof(): supplied argument is not a valid stream resource in %s on line %d
bool(false)
-- Iteration 8 --
+
+Warning: fopen(): Filename cannot be empty in %s on line %d
bool(false)
Warning: fclose(): supplied argument is not a valid stream resource in %s on line %d
@@ -177,3 +182,4 @@ bool(false)
Warning: feof(): supplied argument is not a valid stream resource in %s on line %d
bool(false)
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/file/basename-win32.phpt b/ext/standard/tests/file/basename-win32.phpt
new file mode 100644
index 000000000..5fd0f9659
--- /dev/null
+++ b/ext/standard/tests/file/basename-win32.phpt
@@ -0,0 +1,341 @@
+--TEST--
+basename
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) != 'WIN') {
+ die('skip Windows only basename tests');
+}
+?>
+--FILE--
+<?php
+/*
+ * proto string basename(string path [, string suffix])
+ * Function is implemented in ext/standard/string.c
+ */
+$file_paths = array (
+ /* simple paths */
+ array("bar"),
+ array("\\foo\\bar"),
+ array("foo\\bar"),
+ array("\\bar"),
+
+ /* simple paths with trailing slashes */
+ array("bar\\"),
+ array("\\bar\\"),
+ array("\\foo\\bar\\"),
+ array("foo\\bar\\"),
+ array("\\bar\\"),
+
+ /* paths with suffix removal */
+ array("bar.zip", ".zip"),
+ array("bar.zip", "bar.zip"),
+ array("\\foo\\bar.zip", ".zip"),
+ array("foo\\bar.zip", ".zip"),
+ array("\\bar.zip", ".zip"),
+
+ /* paths with suffix and trailing slashes with suffix removal*/
+ array("bar.zip\\", ".zip"),
+ array("\\bar.zip\\", ".zip"),
+ array("\\foo\\bar.zip\\", ".zip"),
+ array("foo\\bar.zip\\", ".zip"),
+ array("\\bar.zip\\", ".zip"),
+
+ /* paths with basename only suffix, with suffix removal*/
+ array("\\.zip", ".zip"),
+ array(".zip", ".zip"),
+ array("\\foo\\.zip", ".zip"),
+
+ /* paths with basename only suffix & trailing slashes, with suffix removal*/
+ array(".zip\\", ".zip"),
+ array("\\foo\\.zip\\", ".zip"),
+ array("foo\\.zip\\", ".zip"),
+);
+
+$file_path_variations = array (
+ /* paths with shortcut home dir char, with suffix variation */
+ array("C:\\temp\\bar"),
+ array("C:\\temp\\bar", ""),
+ array("C:\\temp\\bar", NULL),
+ array("C:\\temp\\bar", ' '),
+ array("C:\\temp\\bar.tar", ".tar"),
+ array("C:\\temp\\bar.tar", "~"),
+ array("C:\\temp\\bar.tar\\", "~"),
+ array("C:\\temp\\bar.tar\\", ""),
+ array("C:\\temp\\bar.tar", NULL),
+ array("C:\\temp\\bar.tar", ''),
+ array("C:\\temp\\bar.tar", " "),
+
+ /* paths with numeric strings */
+ array("10.5"),
+ array("10.5", ".5"),
+ array("10.5", "10.5"),
+ array("10"),
+ array("105", "5"),
+ array("/10.5"),
+ array("10.5\\"),
+ array("10/10.zip"),
+ array("0"),
+ array('0'),
+
+ /* paths and suffix given as same */
+ array("bar.zip", "bar.zip"),
+ array("\\bar.zip", "\\bar.zip"),
+ array("\\bar.zip\\", "\\bar.zip\\"),
+ array(" ", " "),
+ array(' ', ' '),
+ array(NULL, NULL),
+
+ /* path with spaces */
+ array(" "),
+ array(' '),
+
+ /* empty paths */
+ array(""),
+ array(''),
+ array(NULL)
+);
+
+function check_basename( $path_arrays ) {
+ $loop_counter = 1;
+ foreach ($path_arrays as $path) {
+ echo "\n--Iteration $loop_counter--\n"; $loop_counter++;
+ if( 1 == count($path) ) { // no suffix provided
+ var_dump( basename($path[0]) );
+ } else { // path as well as suffix provided,
+ var_dump( basename($path[0], $path[1]) );
+ }
+ }
+}
+
+echo "*** Testing basic operations ***\n";
+check_basename( $file_paths );
+
+echo "\n*** Testing possible variations in path and suffix ***\n";
+check_basename( $file_path_variations );
+
+echo "\n*** Testing error conditions ***\n";
+// zero arguments
+var_dump( basename() );
+
+// more than expected no. of arguments
+var_dump( basename("\\blah\\tmp\\bar.zip", ".zip", ".zip") );
+
+// passing invalid type arguments
+$object = new stdclass;
+var_dump( basename( array("string\\bar") ) );
+var_dump( basename( array("string\\bar"), "bar" ) );
+var_dump( basename( "bar", array("string\\bar") ) );
+var_dump( basename( $object, "bar" ) );
+var_dump( basename( $object ) );
+var_dump( basename( $object, $object ) );
+var_dump( basename( "bar", $object ) );
+
+echo "Done\n";
+?>
+--EXPECTF--
+*** Testing basic operations ***
+
+--Iteration 1--
+string(3) "bar"
+
+--Iteration 2--
+string(3) "bar"
+
+--Iteration 3--
+string(3) "bar"
+
+--Iteration 4--
+string(3) "bar"
+
+--Iteration 5--
+string(3) "bar"
+
+--Iteration 6--
+string(3) "bar"
+
+--Iteration 7--
+string(3) "bar"
+
+--Iteration 8--
+string(3) "bar"
+
+--Iteration 9--
+string(3) "bar"
+
+--Iteration 10--
+string(3) "bar"
+
+--Iteration 11--
+string(7) "bar.zip"
+
+--Iteration 12--
+string(3) "bar"
+
+--Iteration 13--
+string(3) "bar"
+
+--Iteration 14--
+string(3) "bar"
+
+--Iteration 15--
+string(3) "bar"
+
+--Iteration 16--
+string(3) "bar"
+
+--Iteration 17--
+string(3) "bar"
+
+--Iteration 18--
+string(3) "bar"
+
+--Iteration 19--
+string(3) "bar"
+
+--Iteration 20--
+string(4) ".zip"
+
+--Iteration 21--
+string(4) ".zip"
+
+--Iteration 22--
+string(4) ".zip"
+
+--Iteration 23--
+string(4) ".zip"
+
+--Iteration 24--
+string(4) ".zip"
+
+--Iteration 25--
+string(4) ".zip"
+
+*** Testing possible variations in path and suffix ***
+
+--Iteration 1--
+string(3) "bar"
+
+--Iteration 2--
+string(3) "bar"
+
+--Iteration 3--
+string(3) "bar"
+
+--Iteration 4--
+string(3) "bar"
+
+--Iteration 5--
+string(3) "bar"
+
+--Iteration 6--
+string(7) "bar.tar"
+
+--Iteration 7--
+string(7) "bar.tar"
+
+--Iteration 8--
+string(7) "bar.tar"
+
+--Iteration 9--
+string(7) "bar.tar"
+
+--Iteration 10--
+string(7) "bar.tar"
+
+--Iteration 11--
+string(7) "bar.tar"
+
+--Iteration 12--
+string(4) "10.5"
+
+--Iteration 13--
+string(2) "10"
+
+--Iteration 14--
+string(4) "10.5"
+
+--Iteration 15--
+string(2) "10"
+
+--Iteration 16--
+string(2) "10"
+
+--Iteration 17--
+string(4) "10.5"
+
+--Iteration 18--
+string(4) "10.5"
+
+--Iteration 19--
+string(6) "10.zip"
+
+--Iteration 20--
+string(1) "0"
+
+--Iteration 21--
+string(1) "0"
+
+--Iteration 22--
+string(7) "bar.zip"
+
+--Iteration 23--
+string(7) "bar.zip"
+
+--Iteration 24--
+string(7) "bar.zip"
+
+--Iteration 25--
+string(1) " "
+
+--Iteration 26--
+string(1) " "
+
+--Iteration 27--
+string(0) ""
+
+--Iteration 28--
+string(1) " "
+
+--Iteration 29--
+string(1) " "
+
+--Iteration 30--
+string(0) ""
+
+--Iteration 31--
+string(0) ""
+
+--Iteration 32--
+string(0) ""
+
+*** Testing error conditions ***
+
+Warning: basename() expects at least 1 parameter, 0 given in %s on line %d
+NULL
+
+Warning: basename() expects at most 2 parameters, 3 given in %s on line %d
+NULL
+
+Warning: basename() expects parameter 1 to be string, array given in %s on line %d
+NULL
+
+Warning: basename() expects parameter 1 to be string, array given in %s on line %d
+NULL
+
+Warning: basename() expects parameter 2 to be string, array given in %s on line %d
+NULL
+
+Warning: basename() expects parameter 1 to be string, object given in %s on line %d
+NULL
+
+Warning: basename() expects parameter 1 to be string, object given in %s on line %d
+NULL
+
+Warning: basename() expects parameter 1 to be string, object given in %s on line %d
+NULL
+
+Warning: basename() expects parameter 2 to be string, object given in %s on line %d
+NULL
+Done
diff --git a/ext/standard/tests/file/basename.phpt b/ext/standard/tests/file/basename.phpt
new file mode 100644
index 000000000..c0e7498f1
--- /dev/null
+++ b/ext/standard/tests/file/basename.phpt
Binary files differ
diff --git a/ext/standard/tests/file/basename_basic-win32.phpt b/ext/standard/tests/file/basename_basic-win32.phpt
new file mode 100644
index 000000000..f575c5aa6
--- /dev/null
+++ b/ext/standard/tests/file/basename_basic-win32.phpt
@@ -0,0 +1,101 @@
+--TEST--
+basename() basic functionality
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) != 'WIN') {
+ die('skip Windows only basename tests');
+}
+?>
+--FILE--
+<?php
+
+$file_paths = array (
+ /* simple paths (forward slashes) */
+ "bar",
+ "/foo/bar",
+ "foo/bar",
+ "/bar",
+
+ /* simple paths with trailing slashes (forward slashes) */
+ "bar/",
+ "/bar/",
+ "/foo/bar/",
+ "foo/bar/",
+ "/bar/",
+
+ /* simple paths (backslashes) */
+ "bar",
+ "\\foo\\bar",
+ "foo\\bar",
+ "\\bar",
+
+ /* simple paths with trailing slashes (backslashes) */
+ "bar\\",
+ "\\bar\\",
+ "\\foo\\bar\\",
+ "foo\\bar\\",
+ "\\bar\\",
+
+ /* paths with numeric strings */
+ "10.5\\10.5",
+ "10.5/10.5",
+ "10.5",
+ "105",
+ "/10.5",
+ "\\10.5",
+ "10.5/",
+ "10.5\\",
+ "10/10.zip",
+ "0",
+ '0',
+
+ /* path with spaces */
+ " ",
+ ' ',
+
+ /* empty paths */
+ "",
+ '',
+ NULL,
+);
+
+foreach ($file_paths as $file_path) {
+ var_dump(basename($file_path));
+}
+
+?>
+--EXPECT--
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(4) "10.5"
+string(4) "10.5"
+string(4) "10.5"
+string(3) "105"
+string(4) "10.5"
+string(4) "10.5"
+string(4) "10.5"
+string(4) "10.5"
+string(6) "10.zip"
+string(1) "0"
+string(1) "0"
+string(1) " "
+string(1) " "
+string(0) ""
+string(0) ""
+string(0) ""
diff --git a/ext/standard/tests/file/basename_basic.phpt b/ext/standard/tests/file/basename_basic.phpt
new file mode 100644
index 000000000..68aefb2a3
--- /dev/null
+++ b/ext/standard/tests/file/basename_basic.phpt
@@ -0,0 +1,101 @@
+--TEST--
+basename() basic functionality
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip non-windows only test');
+}
+?>
+--FILE--
+<?php
+
+$file_paths = array (
+ /* simple paths (forward slashes) */
+ "bar",
+ "/foo/bar",
+ "foo/bar",
+ "/bar",
+
+ /* simple paths with trailing slashes (forward slashes) */
+ "bar/",
+ "/bar/",
+ "/foo/bar/",
+ "foo/bar/",
+ "/bar/",
+
+ /* simple paths (backslashes) */
+ "bar",
+ "\\foo\\bar",
+ "foo\\bar",
+ "\\bar",
+
+ /* simple paths with trailing slashes (backslashes) */
+ "bar\\",
+ "\\bar\\",
+ "\\foo\\bar\\",
+ "foo\\bar\\",
+ "\\bar\\",
+
+ /* paths with numeric strings */
+ "10.5\\10.5",
+ "10.5/10.5",
+ "10.5",
+ "105",
+ "/10.5",
+ "\\10.5",
+ "10.5/",
+ "10.5\\",
+ "10/10.zip",
+ "0",
+ '0',
+
+ /* path with spaces */
+ " ",
+ ' ',
+
+ /* empty paths */
+ "",
+ '',
+ NULL,
+);
+
+foreach ($file_paths as $file_path) {
+ var_dump(basename($file_path));
+}
+
+?>
+--EXPECT--
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(3) "bar"
+string(8) "\foo\bar"
+string(7) "foo\bar"
+string(4) "\bar"
+string(4) "bar\"
+string(5) "\bar\"
+string(9) "\foo\bar\"
+string(8) "foo\bar\"
+string(5) "\bar\"
+string(9) "10.5\10.5"
+string(4) "10.5"
+string(4) "10.5"
+string(3) "105"
+string(4) "10.5"
+string(5) "\10.5"
+string(4) "10.5"
+string(5) "10.5\"
+string(6) "10.zip"
+string(1) "0"
+string(1) "0"
+string(1) " "
+string(1) " "
+string(0) ""
+string(0) ""
+string(0) ""
diff --git a/ext/standard/tests/file/basename_error.phpt b/ext/standard/tests/file/basename_error.phpt
new file mode 100644
index 000000000..9b168188b
--- /dev/null
+++ b/ext/standard/tests/file/basename_error.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Test basename() function : error conditions
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : string basename(string path [, string suffix])
+ * Description: Returns the filename component of the path
+ * Source code: ext/standard/string.c
+ * Alias to functions:
+ */
+
+echo "*** Testing basename() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing basename() function with Zero arguments --\n";
+var_dump( basename() );
+
+//Test basename with one more than the expected number of arguments
+echo "\n-- Testing basename() function with more than expected no. of arguments --\n";
+$path = 'string_val';
+$suffix = 'string_val';
+$extra_arg = 10;
+var_dump( basename($path, $suffix, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing basename() : error conditions ***
+
+-- Testing basename() function with Zero arguments --
+
+Warning: basename() expects at least 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing basename() function with more than expected no. of arguments --
+
+Warning: basename() expects at most 2 parameters, 3 given in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/file/basename_variation1-win32.phpt b/ext/standard/tests/file/basename_variation1-win32.phpt
new file mode 100644
index 000000000..0f4293e0b
--- /dev/null
+++ b/ext/standard/tests/file/basename_variation1-win32.phpt
@@ -0,0 +1,238 @@
+--TEST--
+basename() with various inputs
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) != 'WIN') {
+ die('skip Windows only basename tests');
+}
+?>
+--FILE--
+<?php
+
+$prefixes = array (
+
+ // drive letters
+ "A:/",
+ "Z:/",
+ "A:\\",
+
+ // other prefixes
+ "http://",
+ "blah://",
+ "blah:\\",
+ "hostname:",
+
+ // home directory ~
+ "~/",
+ "~\\",
+);
+
+$paths = array (
+
+ "foo",
+ "foo/",
+ "foo\\",
+ "foo.bar",
+ "foo.bar/",
+ "foo.bar\\",
+ "dir/foo.bar",
+ "dir\\foo.bar",
+ "dir with spaces/foo.bar",
+ "dir with spaces\\foo.bar",
+
+);
+
+foreach ($prefixes as $prefix) {
+ foreach ($paths as $path) {
+ $input = $prefix . $path;
+ echo "basename for path $input is:\n";
+ var_dump(basename($input));
+ }
+}
+
+echo "\ndone\n";
+
+?>
+--EXPECT--
+basename for path A:/foo is:
+string(3) "foo"
+basename for path A:/foo/ is:
+string(3) "foo"
+basename for path A:/foo\ is:
+string(3) "foo"
+basename for path A:/foo.bar is:
+string(7) "foo.bar"
+basename for path A:/foo.bar/ is:
+string(7) "foo.bar"
+basename for path A:/foo.bar\ is:
+string(7) "foo.bar"
+basename for path A:/dir/foo.bar is:
+string(7) "foo.bar"
+basename for path A:/dir\foo.bar is:
+string(7) "foo.bar"
+basename for path A:/dir with spaces/foo.bar is:
+string(7) "foo.bar"
+basename for path A:/dir with spaces\foo.bar is:
+string(7) "foo.bar"
+basename for path Z:/foo is:
+string(3) "foo"
+basename for path Z:/foo/ is:
+string(3) "foo"
+basename for path Z:/foo\ is:
+string(3) "foo"
+basename for path Z:/foo.bar is:
+string(7) "foo.bar"
+basename for path Z:/foo.bar/ is:
+string(7) "foo.bar"
+basename for path Z:/foo.bar\ is:
+string(7) "foo.bar"
+basename for path Z:/dir/foo.bar is:
+string(7) "foo.bar"
+basename for path Z:/dir\foo.bar is:
+string(7) "foo.bar"
+basename for path Z:/dir with spaces/foo.bar is:
+string(7) "foo.bar"
+basename for path Z:/dir with spaces\foo.bar is:
+string(7) "foo.bar"
+basename for path A:\foo is:
+string(3) "foo"
+basename for path A:\foo/ is:
+string(3) "foo"
+basename for path A:\foo\ is:
+string(3) "foo"
+basename for path A:\foo.bar is:
+string(7) "foo.bar"
+basename for path A:\foo.bar/ is:
+string(7) "foo.bar"
+basename for path A:\foo.bar\ is:
+string(7) "foo.bar"
+basename for path A:\dir/foo.bar is:
+string(7) "foo.bar"
+basename for path A:\dir\foo.bar is:
+string(7) "foo.bar"
+basename for path A:\dir with spaces/foo.bar is:
+string(7) "foo.bar"
+basename for path A:\dir with spaces\foo.bar is:
+string(7) "foo.bar"
+basename for path http://foo is:
+string(3) "foo"
+basename for path http://foo/ is:
+string(3) "foo"
+basename for path http://foo\ is:
+string(3) "foo"
+basename for path http://foo.bar is:
+string(7) "foo.bar"
+basename for path http://foo.bar/ is:
+string(7) "foo.bar"
+basename for path http://foo.bar\ is:
+string(7) "foo.bar"
+basename for path http://dir/foo.bar is:
+string(7) "foo.bar"
+basename for path http://dir\foo.bar is:
+string(7) "foo.bar"
+basename for path http://dir with spaces/foo.bar is:
+string(7) "foo.bar"
+basename for path http://dir with spaces\foo.bar is:
+string(7) "foo.bar"
+basename for path blah://foo is:
+string(3) "foo"
+basename for path blah://foo/ is:
+string(3) "foo"
+basename for path blah://foo\ is:
+string(3) "foo"
+basename for path blah://foo.bar is:
+string(7) "foo.bar"
+basename for path blah://foo.bar/ is:
+string(7) "foo.bar"
+basename for path blah://foo.bar\ is:
+string(7) "foo.bar"
+basename for path blah://dir/foo.bar is:
+string(7) "foo.bar"
+basename for path blah://dir\foo.bar is:
+string(7) "foo.bar"
+basename for path blah://dir with spaces/foo.bar is:
+string(7) "foo.bar"
+basename for path blah://dir with spaces\foo.bar is:
+string(7) "foo.bar"
+basename for path blah:\foo is:
+string(3) "foo"
+basename for path blah:\foo/ is:
+string(3) "foo"
+basename for path blah:\foo\ is:
+string(3) "foo"
+basename for path blah:\foo.bar is:
+string(7) "foo.bar"
+basename for path blah:\foo.bar/ is:
+string(7) "foo.bar"
+basename for path blah:\foo.bar\ is:
+string(7) "foo.bar"
+basename for path blah:\dir/foo.bar is:
+string(7) "foo.bar"
+basename for path blah:\dir\foo.bar is:
+string(7) "foo.bar"
+basename for path blah:\dir with spaces/foo.bar is:
+string(7) "foo.bar"
+basename for path blah:\dir with spaces\foo.bar is:
+string(7) "foo.bar"
+basename for path hostname:foo is:
+string(12) "hostname:foo"
+basename for path hostname:foo/ is:
+string(12) "hostname:foo"
+basename for path hostname:foo\ is:
+string(12) "hostname:foo"
+basename for path hostname:foo.bar is:
+string(16) "hostname:foo.bar"
+basename for path hostname:foo.bar/ is:
+string(16) "hostname:foo.bar"
+basename for path hostname:foo.bar\ is:
+string(16) "hostname:foo.bar"
+basename for path hostname:dir/foo.bar is:
+string(7) "foo.bar"
+basename for path hostname:dir\foo.bar is:
+string(7) "foo.bar"
+basename for path hostname:dir with spaces/foo.bar is:
+string(7) "foo.bar"
+basename for path hostname:dir with spaces\foo.bar is:
+string(7) "foo.bar"
+basename for path ~/foo is:
+string(3) "foo"
+basename for path ~/foo/ is:
+string(3) "foo"
+basename for path ~/foo\ is:
+string(3) "foo"
+basename for path ~/foo.bar is:
+string(7) "foo.bar"
+basename for path ~/foo.bar/ is:
+string(7) "foo.bar"
+basename for path ~/foo.bar\ is:
+string(7) "foo.bar"
+basename for path ~/dir/foo.bar is:
+string(7) "foo.bar"
+basename for path ~/dir\foo.bar is:
+string(7) "foo.bar"
+basename for path ~/dir with spaces/foo.bar is:
+string(7) "foo.bar"
+basename for path ~/dir with spaces\foo.bar is:
+string(7) "foo.bar"
+basename for path ~\foo is:
+string(3) "foo"
+basename for path ~\foo/ is:
+string(3) "foo"
+basename for path ~\foo\ is:
+string(3) "foo"
+basename for path ~\foo.bar is:
+string(7) "foo.bar"
+basename for path ~\foo.bar/ is:
+string(7) "foo.bar"
+basename for path ~\foo.bar\ is:
+string(7) "foo.bar"
+basename for path ~\dir/foo.bar is:
+string(7) "foo.bar"
+basename for path ~\dir\foo.bar is:
+string(7) "foo.bar"
+basename for path ~\dir with spaces/foo.bar is:
+string(7) "foo.bar"
+basename for path ~\dir with spaces\foo.bar is:
+string(7) "foo.bar"
+
+done
diff --git a/ext/standard/tests/file/basename_variation1.phpt b/ext/standard/tests/file/basename_variation1.phpt
new file mode 100644
index 000000000..93582389d
--- /dev/null
+++ b/ext/standard/tests/file/basename_variation1.phpt
@@ -0,0 +1,238 @@
+--TEST--
+basename() with various inputs
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip non-windows only test');
+}
+?>
+--FILE--
+<?php
+
+$prefixes = array (
+
+ // drive letters
+ "A:/",
+ "Z:/",
+ "A:\\",
+
+ // other prefixes
+ "http://",
+ "blah://",
+ "blah:\\",
+ "hostname:",
+
+ // home directory ~
+ "~/",
+ "~\\",
+);
+
+$paths = array (
+
+ "foo",
+ "foo/",
+ "foo\\",
+ "foo.bar",
+ "foo.bar/",
+ "foo.bar\\",
+ "dir/foo.bar",
+ "dir\\foo.bar",
+ "dir with spaces/foo.bar",
+ "dir with spaces\\foo.bar",
+
+);
+
+foreach ($prefixes as $prefix) {
+ foreach ($paths as $path) {
+ $input = $prefix . $path;
+ echo "basename for path $input is:\n";
+ var_dump(basename($input));
+ }
+}
+
+echo "\ndone\n";
+
+?>
+--EXPECT--
+basename for path A:/foo is:
+string(3) "foo"
+basename for path A:/foo/ is:
+string(3) "foo"
+basename for path A:/foo\ is:
+string(4) "foo\"
+basename for path A:/foo.bar is:
+string(7) "foo.bar"
+basename for path A:/foo.bar/ is:
+string(7) "foo.bar"
+basename for path A:/foo.bar\ is:
+string(8) "foo.bar\"
+basename for path A:/dir/foo.bar is:
+string(7) "foo.bar"
+basename for path A:/dir\foo.bar is:
+string(11) "dir\foo.bar"
+basename for path A:/dir with spaces/foo.bar is:
+string(7) "foo.bar"
+basename for path A:/dir with spaces\foo.bar is:
+string(23) "dir with spaces\foo.bar"
+basename for path Z:/foo is:
+string(3) "foo"
+basename for path Z:/foo/ is:
+string(3) "foo"
+basename for path Z:/foo\ is:
+string(4) "foo\"
+basename for path Z:/foo.bar is:
+string(7) "foo.bar"
+basename for path Z:/foo.bar/ is:
+string(7) "foo.bar"
+basename for path Z:/foo.bar\ is:
+string(8) "foo.bar\"
+basename for path Z:/dir/foo.bar is:
+string(7) "foo.bar"
+basename for path Z:/dir\foo.bar is:
+string(11) "dir\foo.bar"
+basename for path Z:/dir with spaces/foo.bar is:
+string(7) "foo.bar"
+basename for path Z:/dir with spaces\foo.bar is:
+string(23) "dir with spaces\foo.bar"
+basename for path A:\foo is:
+string(6) "A:\foo"
+basename for path A:\foo/ is:
+string(6) "A:\foo"
+basename for path A:\foo\ is:
+string(7) "A:\foo\"
+basename for path A:\foo.bar is:
+string(10) "A:\foo.bar"
+basename for path A:\foo.bar/ is:
+string(10) "A:\foo.bar"
+basename for path A:\foo.bar\ is:
+string(11) "A:\foo.bar\"
+basename for path A:\dir/foo.bar is:
+string(7) "foo.bar"
+basename for path A:\dir\foo.bar is:
+string(14) "A:\dir\foo.bar"
+basename for path A:\dir with spaces/foo.bar is:
+string(7) "foo.bar"
+basename for path A:\dir with spaces\foo.bar is:
+string(26) "A:\dir with spaces\foo.bar"
+basename for path http://foo is:
+string(3) "foo"
+basename for path http://foo/ is:
+string(3) "foo"
+basename for path http://foo\ is:
+string(4) "foo\"
+basename for path http://foo.bar is:
+string(7) "foo.bar"
+basename for path http://foo.bar/ is:
+string(7) "foo.bar"
+basename for path http://foo.bar\ is:
+string(8) "foo.bar\"
+basename for path http://dir/foo.bar is:
+string(7) "foo.bar"
+basename for path http://dir\foo.bar is:
+string(11) "dir\foo.bar"
+basename for path http://dir with spaces/foo.bar is:
+string(7) "foo.bar"
+basename for path http://dir with spaces\foo.bar is:
+string(23) "dir with spaces\foo.bar"
+basename for path blah://foo is:
+string(3) "foo"
+basename for path blah://foo/ is:
+string(3) "foo"
+basename for path blah://foo\ is:
+string(4) "foo\"
+basename for path blah://foo.bar is:
+string(7) "foo.bar"
+basename for path blah://foo.bar/ is:
+string(7) "foo.bar"
+basename for path blah://foo.bar\ is:
+string(8) "foo.bar\"
+basename for path blah://dir/foo.bar is:
+string(7) "foo.bar"
+basename for path blah://dir\foo.bar is:
+string(11) "dir\foo.bar"
+basename for path blah://dir with spaces/foo.bar is:
+string(7) "foo.bar"
+basename for path blah://dir with spaces\foo.bar is:
+string(23) "dir with spaces\foo.bar"
+basename for path blah:\foo is:
+string(9) "blah:\foo"
+basename for path blah:\foo/ is:
+string(9) "blah:\foo"
+basename for path blah:\foo\ is:
+string(10) "blah:\foo\"
+basename for path blah:\foo.bar is:
+string(13) "blah:\foo.bar"
+basename for path blah:\foo.bar/ is:
+string(13) "blah:\foo.bar"
+basename for path blah:\foo.bar\ is:
+string(14) "blah:\foo.bar\"
+basename for path blah:\dir/foo.bar is:
+string(7) "foo.bar"
+basename for path blah:\dir\foo.bar is:
+string(17) "blah:\dir\foo.bar"
+basename for path blah:\dir with spaces/foo.bar is:
+string(7) "foo.bar"
+basename for path blah:\dir with spaces\foo.bar is:
+string(29) "blah:\dir with spaces\foo.bar"
+basename for path hostname:foo is:
+string(12) "hostname:foo"
+basename for path hostname:foo/ is:
+string(12) "hostname:foo"
+basename for path hostname:foo\ is:
+string(13) "hostname:foo\"
+basename for path hostname:foo.bar is:
+string(16) "hostname:foo.bar"
+basename for path hostname:foo.bar/ is:
+string(16) "hostname:foo.bar"
+basename for path hostname:foo.bar\ is:
+string(17) "hostname:foo.bar\"
+basename for path hostname:dir/foo.bar is:
+string(7) "foo.bar"
+basename for path hostname:dir\foo.bar is:
+string(20) "hostname:dir\foo.bar"
+basename for path hostname:dir with spaces/foo.bar is:
+string(7) "foo.bar"
+basename for path hostname:dir with spaces\foo.bar is:
+string(32) "hostname:dir with spaces\foo.bar"
+basename for path ~/foo is:
+string(3) "foo"
+basename for path ~/foo/ is:
+string(3) "foo"
+basename for path ~/foo\ is:
+string(4) "foo\"
+basename for path ~/foo.bar is:
+string(7) "foo.bar"
+basename for path ~/foo.bar/ is:
+string(7) "foo.bar"
+basename for path ~/foo.bar\ is:
+string(8) "foo.bar\"
+basename for path ~/dir/foo.bar is:
+string(7) "foo.bar"
+basename for path ~/dir\foo.bar is:
+string(11) "dir\foo.bar"
+basename for path ~/dir with spaces/foo.bar is:
+string(7) "foo.bar"
+basename for path ~/dir with spaces\foo.bar is:
+string(23) "dir with spaces\foo.bar"
+basename for path ~\foo is:
+string(5) "~\foo"
+basename for path ~\foo/ is:
+string(5) "~\foo"
+basename for path ~\foo\ is:
+string(6) "~\foo\"
+basename for path ~\foo.bar is:
+string(9) "~\foo.bar"
+basename for path ~\foo.bar/ is:
+string(9) "~\foo.bar"
+basename for path ~\foo.bar\ is:
+string(10) "~\foo.bar\"
+basename for path ~\dir/foo.bar is:
+string(7) "foo.bar"
+basename for path ~\dir\foo.bar is:
+string(13) "~\dir\foo.bar"
+basename for path ~\dir with spaces/foo.bar is:
+string(7) "foo.bar"
+basename for path ~\dir with spaces\foo.bar is:
+string(25) "~\dir with spaces\foo.bar"
+
+done
diff --git a/ext/standard/tests/file/basename_variation2-win32.phpt b/ext/standard/tests/file/basename_variation2-win32.phpt
new file mode 100644
index 000000000..5e9961b98
--- /dev/null
+++ b/ext/standard/tests/file/basename_variation2-win32.phpt
@@ -0,0 +1,253 @@
+--TEST--
+Testing basename() with various values for the suffix parameter
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) != 'WIN') {
+ die('skip Windows only basename tests');
+}
+?>
+--FILE--
+<?php
+
+$paths = array (
+
+ "foo",
+ "foo/",
+ "foo\\",
+ "foo.bar",
+ "foo.bar/",
+ "foo.bar\\",
+ "dir/foo.bar",
+ "dir\\foo.bar",
+ "dir with spaces/foo.bar",
+ "dir with spaces\\foo.bar",
+
+);
+
+$suffixes = array (
+
+ ".bar",
+ ".b",
+ ".",
+ " ",
+ "foo",
+ "foo.bar",
+ "foo/bar",
+ "foo\\bar",
+ "/",
+ "\\",
+);
+
+foreach ($paths as $path) {
+ foreach ($suffixes as $suffix) {
+ echo "basename for path $path, supplying suffix $suffix is:\n";
+ var_dump(basename($path, $suffix));
+ }
+}
+
+echo "\ndone\n";
+
+?>
+--EXPECT--
+basename for path foo, supplying suffix .bar is:
+string(3) "foo"
+basename for path foo, supplying suffix .b is:
+string(3) "foo"
+basename for path foo, supplying suffix . is:
+string(3) "foo"
+basename for path foo, supplying suffix is:
+string(3) "foo"
+basename for path foo, supplying suffix foo is:
+string(3) "foo"
+basename for path foo, supplying suffix foo.bar is:
+string(3) "foo"
+basename for path foo, supplying suffix foo/bar is:
+string(3) "foo"
+basename for path foo, supplying suffix foo\bar is:
+string(3) "foo"
+basename for path foo, supplying suffix / is:
+string(3) "foo"
+basename for path foo, supplying suffix \ is:
+string(3) "foo"
+basename for path foo/, supplying suffix .bar is:
+string(3) "foo"
+basename for path foo/, supplying suffix .b is:
+string(3) "foo"
+basename for path foo/, supplying suffix . is:
+string(3) "foo"
+basename for path foo/, supplying suffix is:
+string(3) "foo"
+basename for path foo/, supplying suffix foo is:
+string(3) "foo"
+basename for path foo/, supplying suffix foo.bar is:
+string(3) "foo"
+basename for path foo/, supplying suffix foo/bar is:
+string(3) "foo"
+basename for path foo/, supplying suffix foo\bar is:
+string(3) "foo"
+basename for path foo/, supplying suffix / is:
+string(3) "foo"
+basename for path foo/, supplying suffix \ is:
+string(3) "foo"
+basename for path foo\, supplying suffix .bar is:
+string(3) "foo"
+basename for path foo\, supplying suffix .b is:
+string(3) "foo"
+basename for path foo\, supplying suffix . is:
+string(3) "foo"
+basename for path foo\, supplying suffix is:
+string(3) "foo"
+basename for path foo\, supplying suffix foo is:
+string(3) "foo"
+basename for path foo\, supplying suffix foo.bar is:
+string(3) "foo"
+basename for path foo\, supplying suffix foo/bar is:
+string(3) "foo"
+basename for path foo\, supplying suffix foo\bar is:
+string(3) "foo"
+basename for path foo\, supplying suffix / is:
+string(3) "foo"
+basename for path foo\, supplying suffix \ is:
+string(3) "foo"
+basename for path foo.bar, supplying suffix .bar is:
+string(3) "foo"
+basename for path foo.bar, supplying suffix .b is:
+string(7) "foo.bar"
+basename for path foo.bar, supplying suffix . is:
+string(7) "foo.bar"
+basename for path foo.bar, supplying suffix is:
+string(7) "foo.bar"
+basename for path foo.bar, supplying suffix foo is:
+string(7) "foo.bar"
+basename for path foo.bar, supplying suffix foo.bar is:
+string(7) "foo.bar"
+basename for path foo.bar, supplying suffix foo/bar is:
+string(7) "foo.bar"
+basename for path foo.bar, supplying suffix foo\bar is:
+string(7) "foo.bar"
+basename for path foo.bar, supplying suffix / is:
+string(7) "foo.bar"
+basename for path foo.bar, supplying suffix \ is:
+string(7) "foo.bar"
+basename for path foo.bar/, supplying suffix .bar is:
+string(3) "foo"
+basename for path foo.bar/, supplying suffix .b is:
+string(7) "foo.bar"
+basename for path foo.bar/, supplying suffix . is:
+string(7) "foo.bar"
+basename for path foo.bar/, supplying suffix is:
+string(7) "foo.bar"
+basename for path foo.bar/, supplying suffix foo is:
+string(7) "foo.bar"
+basename for path foo.bar/, supplying suffix foo.bar is:
+string(7) "foo.bar"
+basename for path foo.bar/, supplying suffix foo/bar is:
+string(7) "foo.bar"
+basename for path foo.bar/, supplying suffix foo\bar is:
+string(7) "foo.bar"
+basename for path foo.bar/, supplying suffix / is:
+string(7) "foo.bar"
+basename for path foo.bar/, supplying suffix \ is:
+string(7) "foo.bar"
+basename for path foo.bar\, supplying suffix .bar is:
+string(3) "foo"
+basename for path foo.bar\, supplying suffix .b is:
+string(7) "foo.bar"
+basename for path foo.bar\, supplying suffix . is:
+string(7) "foo.bar"
+basename for path foo.bar\, supplying suffix is:
+string(7) "foo.bar"
+basename for path foo.bar\, supplying suffix foo is:
+string(7) "foo.bar"
+basename for path foo.bar\, supplying suffix foo.bar is:
+string(7) "foo.bar"
+basename for path foo.bar\, supplying suffix foo/bar is:
+string(7) "foo.bar"
+basename for path foo.bar\, supplying suffix foo\bar is:
+string(7) "foo.bar"
+basename for path foo.bar\, supplying suffix / is:
+string(7) "foo.bar"
+basename for path foo.bar\, supplying suffix \ is:
+string(7) "foo.bar"
+basename for path dir/foo.bar, supplying suffix .bar is:
+string(3) "foo"
+basename for path dir/foo.bar, supplying suffix .b is:
+string(7) "foo.bar"
+basename for path dir/foo.bar, supplying suffix . is:
+string(7) "foo.bar"
+basename for path dir/foo.bar, supplying suffix is:
+string(7) "foo.bar"
+basename for path dir/foo.bar, supplying suffix foo is:
+string(7) "foo.bar"
+basename for path dir/foo.bar, supplying suffix foo.bar is:
+string(7) "foo.bar"
+basename for path dir/foo.bar, supplying suffix foo/bar is:
+string(7) "foo.bar"
+basename for path dir/foo.bar, supplying suffix foo\bar is:
+string(7) "foo.bar"
+basename for path dir/foo.bar, supplying suffix / is:
+string(7) "foo.bar"
+basename for path dir/foo.bar, supplying suffix \ is:
+string(7) "foo.bar"
+basename for path dir\foo.bar, supplying suffix .bar is:
+string(3) "foo"
+basename for path dir\foo.bar, supplying suffix .b is:
+string(7) "foo.bar"
+basename for path dir\foo.bar, supplying suffix . is:
+string(7) "foo.bar"
+basename for path dir\foo.bar, supplying suffix is:
+string(7) "foo.bar"
+basename for path dir\foo.bar, supplying suffix foo is:
+string(7) "foo.bar"
+basename for path dir\foo.bar, supplying suffix foo.bar is:
+string(7) "foo.bar"
+basename for path dir\foo.bar, supplying suffix foo/bar is:
+string(7) "foo.bar"
+basename for path dir\foo.bar, supplying suffix foo\bar is:
+string(7) "foo.bar"
+basename for path dir\foo.bar, supplying suffix / is:
+string(7) "foo.bar"
+basename for path dir\foo.bar, supplying suffix \ is:
+string(7) "foo.bar"
+basename for path dir with spaces/foo.bar, supplying suffix .bar is:
+string(3) "foo"
+basename for path dir with spaces/foo.bar, supplying suffix .b is:
+string(7) "foo.bar"
+basename for path dir with spaces/foo.bar, supplying suffix . is:
+string(7) "foo.bar"
+basename for path dir with spaces/foo.bar, supplying suffix is:
+string(7) "foo.bar"
+basename for path dir with spaces/foo.bar, supplying suffix foo is:
+string(7) "foo.bar"
+basename for path dir with spaces/foo.bar, supplying suffix foo.bar is:
+string(7) "foo.bar"
+basename for path dir with spaces/foo.bar, supplying suffix foo/bar is:
+string(7) "foo.bar"
+basename for path dir with spaces/foo.bar, supplying suffix foo\bar is:
+string(7) "foo.bar"
+basename for path dir with spaces/foo.bar, supplying suffix / is:
+string(7) "foo.bar"
+basename for path dir with spaces/foo.bar, supplying suffix \ is:
+string(7) "foo.bar"
+basename for path dir with spaces\foo.bar, supplying suffix .bar is:
+string(3) "foo"
+basename for path dir with spaces\foo.bar, supplying suffix .b is:
+string(7) "foo.bar"
+basename for path dir with spaces\foo.bar, supplying suffix . is:
+string(7) "foo.bar"
+basename for path dir with spaces\foo.bar, supplying suffix is:
+string(7) "foo.bar"
+basename for path dir with spaces\foo.bar, supplying suffix foo is:
+string(7) "foo.bar"
+basename for path dir with spaces\foo.bar, supplying suffix foo.bar is:
+string(7) "foo.bar"
+basename for path dir with spaces\foo.bar, supplying suffix foo/bar is:
+string(7) "foo.bar"
+basename for path dir with spaces\foo.bar, supplying suffix foo\bar is:
+string(7) "foo.bar"
+basename for path dir with spaces\foo.bar, supplying suffix / is:
+string(7) "foo.bar"
+basename for path dir with spaces\foo.bar, supplying suffix \ is:
+string(7) "foo.bar"
+
+done
diff --git a/ext/standard/tests/file/basename_variation2.phpt b/ext/standard/tests/file/basename_variation2.phpt
new file mode 100644
index 000000000..96cfd6505
--- /dev/null
+++ b/ext/standard/tests/file/basename_variation2.phpt
@@ -0,0 +1,253 @@
+--TEST--
+Testing basename() with various values for the suffix parameter
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip non-windows only test');
+}
+?>
+--FILE--
+<?php
+
+$paths = array (
+
+ "foo",
+ "foo/",
+ "foo\\",
+ "foo.bar",
+ "foo.bar/",
+ "foo.bar\\",
+ "dir/foo.bar",
+ "dir\\foo.bar",
+ "dir with spaces/foo.bar",
+ "dir with spaces\\foo.bar",
+
+);
+
+$suffixes = array (
+
+ ".bar",
+ ".b",
+ ".",
+ " ",
+ "foo",
+ "foo.bar",
+ "foo/bar",
+ "foo\\bar",
+ "/",
+ "\\",
+);
+
+foreach ($paths as $path) {
+ foreach ($suffixes as $suffix) {
+ echo "basename for path $path, supplying suffix $suffix is:\n";
+ var_dump(basename($path, $suffix));
+ }
+}
+
+echo "\ndone\n";
+
+?>
+--EXPECT--
+basename for path foo, supplying suffix .bar is:
+string(3) "foo"
+basename for path foo, supplying suffix .b is:
+string(3) "foo"
+basename for path foo, supplying suffix . is:
+string(3) "foo"
+basename for path foo, supplying suffix is:
+string(3) "foo"
+basename for path foo, supplying suffix foo is:
+string(3) "foo"
+basename for path foo, supplying suffix foo.bar is:
+string(3) "foo"
+basename for path foo, supplying suffix foo/bar is:
+string(3) "foo"
+basename for path foo, supplying suffix foo\bar is:
+string(3) "foo"
+basename for path foo, supplying suffix / is:
+string(3) "foo"
+basename for path foo, supplying suffix \ is:
+string(3) "foo"
+basename for path foo/, supplying suffix .bar is:
+string(3) "foo"
+basename for path foo/, supplying suffix .b is:
+string(3) "foo"
+basename for path foo/, supplying suffix . is:
+string(3) "foo"
+basename for path foo/, supplying suffix is:
+string(3) "foo"
+basename for path foo/, supplying suffix foo is:
+string(3) "foo"
+basename for path foo/, supplying suffix foo.bar is:
+string(3) "foo"
+basename for path foo/, supplying suffix foo/bar is:
+string(3) "foo"
+basename for path foo/, supplying suffix foo\bar is:
+string(3) "foo"
+basename for path foo/, supplying suffix / is:
+string(3) "foo"
+basename for path foo/, supplying suffix \ is:
+string(3) "foo"
+basename for path foo\, supplying suffix .bar is:
+string(4) "foo\"
+basename for path foo\, supplying suffix .b is:
+string(4) "foo\"
+basename for path foo\, supplying suffix . is:
+string(4) "foo\"
+basename for path foo\, supplying suffix is:
+string(4) "foo\"
+basename for path foo\, supplying suffix foo is:
+string(4) "foo\"
+basename for path foo\, supplying suffix foo.bar is:
+string(4) "foo\"
+basename for path foo\, supplying suffix foo/bar is:
+string(4) "foo\"
+basename for path foo\, supplying suffix foo\bar is:
+string(4) "foo\"
+basename for path foo\, supplying suffix / is:
+string(4) "foo\"
+basename for path foo\, supplying suffix \ is:
+string(3) "foo"
+basename for path foo.bar, supplying suffix .bar is:
+string(3) "foo"
+basename for path foo.bar, supplying suffix .b is:
+string(7) "foo.bar"
+basename for path foo.bar, supplying suffix . is:
+string(7) "foo.bar"
+basename for path foo.bar, supplying suffix is:
+string(7) "foo.bar"
+basename for path foo.bar, supplying suffix foo is:
+string(7) "foo.bar"
+basename for path foo.bar, supplying suffix foo.bar is:
+string(7) "foo.bar"
+basename for path foo.bar, supplying suffix foo/bar is:
+string(7) "foo.bar"
+basename for path foo.bar, supplying suffix foo\bar is:
+string(7) "foo.bar"
+basename for path foo.bar, supplying suffix / is:
+string(7) "foo.bar"
+basename for path foo.bar, supplying suffix \ is:
+string(7) "foo.bar"
+basename for path foo.bar/, supplying suffix .bar is:
+string(3) "foo"
+basename for path foo.bar/, supplying suffix .b is:
+string(7) "foo.bar"
+basename for path foo.bar/, supplying suffix . is:
+string(7) "foo.bar"
+basename for path foo.bar/, supplying suffix is:
+string(7) "foo.bar"
+basename for path foo.bar/, supplying suffix foo is:
+string(7) "foo.bar"
+basename for path foo.bar/, supplying suffix foo.bar is:
+string(7) "foo.bar"
+basename for path foo.bar/, supplying suffix foo/bar is:
+string(7) "foo.bar"
+basename for path foo.bar/, supplying suffix foo\bar is:
+string(7) "foo.bar"
+basename for path foo.bar/, supplying suffix / is:
+string(7) "foo.bar"
+basename for path foo.bar/, supplying suffix \ is:
+string(7) "foo.bar"
+basename for path foo.bar\, supplying suffix .bar is:
+string(8) "foo.bar\"
+basename for path foo.bar\, supplying suffix .b is:
+string(8) "foo.bar\"
+basename for path foo.bar\, supplying suffix . is:
+string(8) "foo.bar\"
+basename for path foo.bar\, supplying suffix is:
+string(8) "foo.bar\"
+basename for path foo.bar\, supplying suffix foo is:
+string(8) "foo.bar\"
+basename for path foo.bar\, supplying suffix foo.bar is:
+string(8) "foo.bar\"
+basename for path foo.bar\, supplying suffix foo/bar is:
+string(8) "foo.bar\"
+basename for path foo.bar\, supplying suffix foo\bar is:
+string(8) "foo.bar\"
+basename for path foo.bar\, supplying suffix / is:
+string(8) "foo.bar\"
+basename for path foo.bar\, supplying suffix \ is:
+string(7) "foo.bar"
+basename for path dir/foo.bar, supplying suffix .bar is:
+string(3) "foo"
+basename for path dir/foo.bar, supplying suffix .b is:
+string(7) "foo.bar"
+basename for path dir/foo.bar, supplying suffix . is:
+string(7) "foo.bar"
+basename for path dir/foo.bar, supplying suffix is:
+string(7) "foo.bar"
+basename for path dir/foo.bar, supplying suffix foo is:
+string(7) "foo.bar"
+basename for path dir/foo.bar, supplying suffix foo.bar is:
+string(7) "foo.bar"
+basename for path dir/foo.bar, supplying suffix foo/bar is:
+string(7) "foo.bar"
+basename for path dir/foo.bar, supplying suffix foo\bar is:
+string(7) "foo.bar"
+basename for path dir/foo.bar, supplying suffix / is:
+string(7) "foo.bar"
+basename for path dir/foo.bar, supplying suffix \ is:
+string(7) "foo.bar"
+basename for path dir\foo.bar, supplying suffix .bar is:
+string(7) "dir\foo"
+basename for path dir\foo.bar, supplying suffix .b is:
+string(11) "dir\foo.bar"
+basename for path dir\foo.bar, supplying suffix . is:
+string(11) "dir\foo.bar"
+basename for path dir\foo.bar, supplying suffix is:
+string(11) "dir\foo.bar"
+basename for path dir\foo.bar, supplying suffix foo is:
+string(11) "dir\foo.bar"
+basename for path dir\foo.bar, supplying suffix foo.bar is:
+string(4) "dir\"
+basename for path dir\foo.bar, supplying suffix foo/bar is:
+string(11) "dir\foo.bar"
+basename for path dir\foo.bar, supplying suffix foo\bar is:
+string(11) "dir\foo.bar"
+basename for path dir\foo.bar, supplying suffix / is:
+string(11) "dir\foo.bar"
+basename for path dir\foo.bar, supplying suffix \ is:
+string(11) "dir\foo.bar"
+basename for path dir with spaces/foo.bar, supplying suffix .bar is:
+string(3) "foo"
+basename for path dir with spaces/foo.bar, supplying suffix .b is:
+string(7) "foo.bar"
+basename for path dir with spaces/foo.bar, supplying suffix . is:
+string(7) "foo.bar"
+basename for path dir with spaces/foo.bar, supplying suffix is:
+string(7) "foo.bar"
+basename for path dir with spaces/foo.bar, supplying suffix foo is:
+string(7) "foo.bar"
+basename for path dir with spaces/foo.bar, supplying suffix foo.bar is:
+string(7) "foo.bar"
+basename for path dir with spaces/foo.bar, supplying suffix foo/bar is:
+string(7) "foo.bar"
+basename for path dir with spaces/foo.bar, supplying suffix foo\bar is:
+string(7) "foo.bar"
+basename for path dir with spaces/foo.bar, supplying suffix / is:
+string(7) "foo.bar"
+basename for path dir with spaces/foo.bar, supplying suffix \ is:
+string(7) "foo.bar"
+basename for path dir with spaces\foo.bar, supplying suffix .bar is:
+string(19) "dir with spaces\foo"
+basename for path dir with spaces\foo.bar, supplying suffix .b is:
+string(23) "dir with spaces\foo.bar"
+basename for path dir with spaces\foo.bar, supplying suffix . is:
+string(23) "dir with spaces\foo.bar"
+basename for path dir with spaces\foo.bar, supplying suffix is:
+string(23) "dir with spaces\foo.bar"
+basename for path dir with spaces\foo.bar, supplying suffix foo is:
+string(23) "dir with spaces\foo.bar"
+basename for path dir with spaces\foo.bar, supplying suffix foo.bar is:
+string(16) "dir with spaces\"
+basename for path dir with spaces\foo.bar, supplying suffix foo/bar is:
+string(23) "dir with spaces\foo.bar"
+basename for path dir with spaces\foo.bar, supplying suffix foo\bar is:
+string(23) "dir with spaces\foo.bar"
+basename for path dir with spaces\foo.bar, supplying suffix / is:
+string(23) "dir with spaces\foo.bar"
+basename for path dir with spaces\foo.bar, supplying suffix \ is:
+string(23) "dir with spaces\foo.bar"
+
+done
diff --git a/ext/standard/tests/file/basename_variation3.phpt b/ext/standard/tests/file/basename_variation3.phpt
new file mode 100644
index 000000000..f01f550a7
--- /dev/null
+++ b/ext/standard/tests/file/basename_variation3.phpt
@@ -0,0 +1,185 @@
+--TEST--
+Test basename() function : first parameter type variations
+--FILE--
+<?php
+/* Prototype : string basename(string path [, string suffix])
+ * Description: Returns the filename component of the path
+ * Source code: ext/standard/string.c
+ * Alias to functions:
+ */
+
+echo "*** Testing basename() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for path
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( basename($value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing basename() : usage variation ***
+
+--int 0--
+string(1) "0"
+
+--int 1--
+string(1) "1"
+
+--int 12345--
+string(5) "12345"
+
+--int -12345--
+string(5) "-2345"
+
+--float 10.5--
+string(4) "10.5"
+
+--float -10.5--
+string(5) "-10.5"
+
+--float 12.3456789000e10--
+string(12) "123456789000"
+
+--float -12.3456789000e10--
+string(13) "-123456789000"
+
+--float .5--
+string(3) "0.5"
+
+--empty array--
+Error: 2 - basename() expects parameter 1 to be string, array given, %s(%d)
+NULL
+
+--int indexed array--
+Error: 2 - basename() expects parameter 1 to be string, array given, %s(%d)
+NULL
+
+--associative array--
+Error: 2 - basename() expects parameter 1 to be string, array given, %s(%d)
+NULL
+
+--nested arrays--
+Error: 2 - basename() expects parameter 1 to be string, array given, %s(%d)
+NULL
+
+--uppercase NULL--
+string(0) ""
+
+--lowercase null--
+string(0) ""
+
+--lowercase true--
+string(1) "1"
+
+--lowercase false--
+string(0) ""
+
+--uppercase TRUE--
+string(1) "1"
+
+--uppercase FALSE--
+string(0) ""
+
+--empty string DQ--
+string(0) ""
+
+--empty string SQ--
+string(0) ""
+
+--instance of classWithToString--
+string(14) "Class A object"
+
+--instance of classWithoutToString--
+Error: 2 - basename() expects parameter 1 to be string, object given, %s(%d)
+NULL
+
+--undefined var--
+string(0) ""
+
+--unset var--
+string(0) ""
+===DONE===
diff --git a/ext/standard/tests/file/basename_variation4.phpt b/ext/standard/tests/file/basename_variation4.phpt
new file mode 100644
index 000000000..88ce61a93
--- /dev/null
+++ b/ext/standard/tests/file/basename_variation4.phpt
@@ -0,0 +1,188 @@
+--TEST--
+Test basename() function : second parameter type variation
+--FILE--
+<?php
+/* Prototype : string basename(string path [, string suffix])
+ * Description: Returns the filename component of the path
+ * Source code: ext/standard/string.c
+ * Alias to functions:
+ */
+
+echo "*** Testing basename() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted
+$path = 'path';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for suffix
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( basename($path, $value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing basename() : usage variation ***
+
+--int 0--
+string(4) "path"
+
+--int 1--
+string(4) "path"
+
+--int 12345--
+string(4) "path"
+
+--int -12345--
+string(4) "path"
+
+--float 10.5--
+string(4) "path"
+
+--float -10.5--
+string(4) "path"
+
+--float 12.3456789000e10--
+string(4) "path"
+
+--float -12.3456789000e10--
+string(4) "path"
+
+--float .5--
+string(4) "path"
+
+--empty array--
+Error: 2 - basename() expects parameter 2 to be string, array given, %s(%d)
+NULL
+
+--int indexed array--
+Error: 2 - basename() expects parameter 2 to be string, array given, %s(%d)
+NULL
+
+--associative array--
+Error: 2 - basename() expects parameter 2 to be string, array given, %s(%d)
+NULL
+
+--nested arrays--
+Error: 2 - basename() expects parameter 2 to be string, array given, %s(%d)
+NULL
+
+--uppercase NULL--
+string(4) "path"
+
+--lowercase null--
+string(4) "path"
+
+--lowercase true--
+string(4) "path"
+
+--lowercase false--
+string(4) "path"
+
+--uppercase TRUE--
+string(4) "path"
+
+--uppercase FALSE--
+string(4) "path"
+
+--empty string DQ--
+string(4) "path"
+
+--empty string SQ--
+string(4) "path"
+
+--instance of classWithToString--
+string(4) "path"
+
+--instance of classWithoutToString--
+Error: 2 - basename() expects parameter 2 to be string, object given, %s(%d)
+NULL
+
+--undefined var--
+string(4) "path"
+
+--unset var--
+string(4) "path"
+===DONE===
diff --git a/ext/standard/tests/file/bug26615.phpt b/ext/standard/tests/file/bug26615.phpt
index 4de8b4a46..9fee92a69 100644
--- a/ext/standard/tests/file/bug26615.phpt
+++ b/ext/standard/tests/file/bug26615.phpt
@@ -7,9 +7,9 @@ variables_order=E
$out = array();
$status = -1;
if (substr(PHP_OS, 0, 3) != 'WIN') {
- exec($_ENV['TEST_PHP_EXECUTABLE'].' -r \'for($i=1;$i<=5000;$i++) print "$i\n";\' | tr \'\n\' \' \'', $out, $status);
+ exec($_ENV['TEST_PHP_EXECUTABLE'].' -n -r \'for($i=1;$i<=5000;$i++) print "$i\n";\' | tr \'\n\' \' \'', $out, $status);
} else {
- exec($_ENV['TEST_PHP_EXECUTABLE'].' -r "for($i=1;$i<=5000;$i++) echo $i,\' \';"', $out, $status);
+ exec($_ENV['TEST_PHP_EXECUTABLE'].' -n -r "for($i=1;$i<=5000;$i++) echo $i,\' \';"', $out, $status);
}
print_r($out);
?>
diff --git a/ext/standard/tests/file/bug26938.phpt b/ext/standard/tests/file/bug26938.phpt
index c43e6b103..a68d5728d 100644
--- a/ext/standard/tests/file/bug26938.phpt
+++ b/ext/standard/tests/file/bug26938.phpt
@@ -6,14 +6,14 @@ $out = array();
$status = -1;
$php = getenv('TEST_PHP_EXECUTABLE');
if (substr(PHP_OS, 0, 3) != 'WIN') {
- exec($php . ' -r \''
+ exec($php . ' -n -r \''
. '$lengths = array(10,20000,10000,5,10000,3);'
. 'foreach($lengths as $length) {'
. ' for($i=0;$i<$length;$i++) print chr(65+$i % 27);'
. ' print "\n";'
. '}\'', $out, $status);
} else {
- exec($php . ' -r "'
+ exec($php . ' -n -r "'
. '$lengths = array(10,20000,10000,5,10000,3);'
. 'foreach($lengths as $length) {'
. ' for($i=0;$i<$length;$i++) print chr(65+$i % 27);'
diff --git a/ext/standard/tests/file/bug41655_1.phpt b/ext/standard/tests/file/bug41655_1.phpt
index d02de7066..c2e3c769e 100644
--- a/ext/standard/tests/file/bug41655_1.phpt
+++ b/ext/standard/tests/file/bug41655_1.phpt
@@ -4,9 +4,10 @@ Bug #41655 (open_basedir bypass via glob()) 1/2
open_basedir=/tmp
--FILE--
<?php
- $a=glob("./*.jpeg");
-
+$a=glob("./*.jpeg");
+var_dump($a);
echo "Done\n";
?>
--EXPECT--
+bool(false)
Done \ No newline at end of file
diff --git a/ext/standard/tests/file/bug43248.phpt b/ext/standard/tests/file/bug43248.phpt
index a20e0e06c..109643583 100755
--- a/ext/standard/tests/file/bug43248.phpt
+++ b/ext/standard/tests/file/bug43248.phpt
@@ -1,5 +1,5 @@
--TEST--
-Bug #43248 backward compatibility break in realpath()
+Bug #43248 (backward compatibility break in realpath())
--FILE--
<?php
echo realpath(dirname(__FILE__) . '/../file/');
diff --git a/ext/standard/tests/file/bug43353.phpt b/ext/standard/tests/file/bug43353.phpt
new file mode 100644
index 000000000..a11817895
--- /dev/null
+++ b/ext/standard/tests/file/bug43353.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Bug #43353 wrong detection of 'data' wrapper
+--FILE--
+<?php
+
+var_dump(is_dir('file:///datafoo:test'));
+var_dump(is_dir('datafoo:test'));
+var_dump(file_get_contents('data:text/plain,foo'));
+var_dump(file_get_contents('datafoo:text/plain,foo'));
+
+?>
+--EXPECTF--
+bool(false)
+bool(false)
+string(3) "foo"
+
+Warning: file_get_contents(datafoo:text/plain,foo): failed to open stream: No such file or directory in %s
+bool(false)
diff --git a/ext/standard/tests/file/bug44607.phpt b/ext/standard/tests/file/bug44607.phpt
new file mode 100644
index 000000000..8b2cf97f9
--- /dev/null
+++ b/ext/standard/tests/file/bug44607.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Bug #44607 (stream_get_line unable to correctly identify the "ending" in the stream content)
+--FILE--
+<?php
+$eol = '<EOL>';
+$tempnam = tempnam(sys_get_temp_dir(), 'php');
+$data = str_repeat('.', 14000);
+$data .= $eol;
+$data .= $data;
+file_put_contents($tempnam, $data);
+$fd = fopen($tempnam, 'r');
+var_dump(strlen(stream_get_line($fd, 15000, $eol)));
+var_dump(strlen(stream_get_line($fd, 15000, $eol)));
+fseek($fd, 1, SEEK_SET);
+var_dump(strlen(stream_get_line($fd, 15000, $eol)));
+var_dump(strlen(stream_get_line($fd, 15000, $eol)));
+unlink($tempnam);
+?>
+--EXPECT--
+int(14000)
+int(14000)
+int(13999)
+int(14000)
diff --git a/ext/standard/tests/file/bug45181.phpt b/ext/standard/tests/file/bug45181.phpt
new file mode 100644
index 000000000..d64fa8993
--- /dev/null
+++ b/ext/standard/tests/file/bug45181.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Bug #45181 (chdir() should clear relative entries in stat cache)
+--FILE--
+<?php
+mkdir("bug45181_x");
+var_dump(is_dir("bug45181_x"));
+chdir("bug45181_x");
+var_dump(is_dir("bug45181_x"));
+?>
+--CLEAN--
+<?php
+rmdir("bug45181_x");
+?>
+--EXPECT--
+bool(true)
+bool(false)
diff --git a/ext/standard/tests/file/bug45303.phpt b/ext/standard/tests/file/bug45303.phpt
new file mode 100644
index 000000000..0a4b33bcf
--- /dev/null
+++ b/ext/standard/tests/file/bug45303.phpt
@@ -0,0 +1,13 @@
+--TEST--
+Bug #45303 (Opening php:// wrapper in append mode results in a warning)
+--FILE--
+<?php
+$fd = fopen("php://stdout","a");
+var_dump($fd);
+var_dump(fseek($fd, 1024*1024, SEEK_SET));
+?>
+--EXPECTF--
+resource(%d) of type (stream)
+
+Warning: fseek(): stream does not support seeking in %s
+int(-1)
diff --git a/ext/standard/tests/file/chmod_basic-win32.phpt b/ext/standard/tests/file/chmod_basic-win32.phpt
new file mode 100644
index 000000000..ca224f7d1
--- /dev/null
+++ b/ext/standard/tests/file/chmod_basic-win32.phpt
@@ -0,0 +1,545 @@
+--TEST--
+chmod() basic fuctionality
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) != 'WIN') {
+ die('skip Windows only chmod test');
+}
+?>
+--FILE--
+<?php
+
+define("PERMISSIONS_MASK", 0777);
+
+$filename = __FILE__ . ".tmp";
+
+$fd = fopen($filename, "w+");
+fclose($fd);
+
+for ($perms_to_set = 0777; $perms_to_set >= 0; $perms_to_set--) {
+ chmod($filename, $perms_to_set);
+ $set_perms = (fileperms($filename) & PERMISSIONS_MASK);
+ clearstatcache();
+ printf("Setting mode %o gives mode %o\n", $perms_to_set, $set_perms);
+}
+var_dump(chmod($filename, 0777));
+
+unlink($filename);
+echo "done";
+
+?>
+--EXPECT--
+Setting mode 777 gives mode 666
+Setting mode 776 gives mode 666
+Setting mode 775 gives mode 666
+Setting mode 774 gives mode 666
+Setting mode 773 gives mode 666
+Setting mode 772 gives mode 666
+Setting mode 771 gives mode 666
+Setting mode 770 gives mode 666
+Setting mode 767 gives mode 666
+Setting mode 766 gives mode 666
+Setting mode 765 gives mode 666
+Setting mode 764 gives mode 666
+Setting mode 763 gives mode 666
+Setting mode 762 gives mode 666
+Setting mode 761 gives mode 666
+Setting mode 760 gives mode 666
+Setting mode 757 gives mode 666
+Setting mode 756 gives mode 666
+Setting mode 755 gives mode 666
+Setting mode 754 gives mode 666
+Setting mode 753 gives mode 666
+Setting mode 752 gives mode 666
+Setting mode 751 gives mode 666
+Setting mode 750 gives mode 666
+Setting mode 747 gives mode 666
+Setting mode 746 gives mode 666
+Setting mode 745 gives mode 666
+Setting mode 744 gives mode 666
+Setting mode 743 gives mode 666
+Setting mode 742 gives mode 666
+Setting mode 741 gives mode 666
+Setting mode 740 gives mode 666
+Setting mode 737 gives mode 666
+Setting mode 736 gives mode 666
+Setting mode 735 gives mode 666
+Setting mode 734 gives mode 666
+Setting mode 733 gives mode 666
+Setting mode 732 gives mode 666
+Setting mode 731 gives mode 666
+Setting mode 730 gives mode 666
+Setting mode 727 gives mode 666
+Setting mode 726 gives mode 666
+Setting mode 725 gives mode 666
+Setting mode 724 gives mode 666
+Setting mode 723 gives mode 666
+Setting mode 722 gives mode 666
+Setting mode 721 gives mode 666
+Setting mode 720 gives mode 666
+Setting mode 717 gives mode 666
+Setting mode 716 gives mode 666
+Setting mode 715 gives mode 666
+Setting mode 714 gives mode 666
+Setting mode 713 gives mode 666
+Setting mode 712 gives mode 666
+Setting mode 711 gives mode 666
+Setting mode 710 gives mode 666
+Setting mode 707 gives mode 666
+Setting mode 706 gives mode 666
+Setting mode 705 gives mode 666
+Setting mode 704 gives mode 666
+Setting mode 703 gives mode 666
+Setting mode 702 gives mode 666
+Setting mode 701 gives mode 666
+Setting mode 700 gives mode 666
+Setting mode 677 gives mode 666
+Setting mode 676 gives mode 666
+Setting mode 675 gives mode 666
+Setting mode 674 gives mode 666
+Setting mode 673 gives mode 666
+Setting mode 672 gives mode 666
+Setting mode 671 gives mode 666
+Setting mode 670 gives mode 666
+Setting mode 667 gives mode 666
+Setting mode 666 gives mode 666
+Setting mode 665 gives mode 666
+Setting mode 664 gives mode 666
+Setting mode 663 gives mode 666
+Setting mode 662 gives mode 666
+Setting mode 661 gives mode 666
+Setting mode 660 gives mode 666
+Setting mode 657 gives mode 666
+Setting mode 656 gives mode 666
+Setting mode 655 gives mode 666
+Setting mode 654 gives mode 666
+Setting mode 653 gives mode 666
+Setting mode 652 gives mode 666
+Setting mode 651 gives mode 666
+Setting mode 650 gives mode 666
+Setting mode 647 gives mode 666
+Setting mode 646 gives mode 666
+Setting mode 645 gives mode 666
+Setting mode 644 gives mode 666
+Setting mode 643 gives mode 666
+Setting mode 642 gives mode 666
+Setting mode 641 gives mode 666
+Setting mode 640 gives mode 666
+Setting mode 637 gives mode 666
+Setting mode 636 gives mode 666
+Setting mode 635 gives mode 666
+Setting mode 634 gives mode 666
+Setting mode 633 gives mode 666
+Setting mode 632 gives mode 666
+Setting mode 631 gives mode 666
+Setting mode 630 gives mode 666
+Setting mode 627 gives mode 666
+Setting mode 626 gives mode 666
+Setting mode 625 gives mode 666
+Setting mode 624 gives mode 666
+Setting mode 623 gives mode 666
+Setting mode 622 gives mode 666
+Setting mode 621 gives mode 666
+Setting mode 620 gives mode 666
+Setting mode 617 gives mode 666
+Setting mode 616 gives mode 666
+Setting mode 615 gives mode 666
+Setting mode 614 gives mode 666
+Setting mode 613 gives mode 666
+Setting mode 612 gives mode 666
+Setting mode 611 gives mode 666
+Setting mode 610 gives mode 666
+Setting mode 607 gives mode 666
+Setting mode 606 gives mode 666
+Setting mode 605 gives mode 666
+Setting mode 604 gives mode 666
+Setting mode 603 gives mode 666
+Setting mode 602 gives mode 666
+Setting mode 601 gives mode 666
+Setting mode 600 gives mode 666
+Setting mode 577 gives mode 444
+Setting mode 576 gives mode 444
+Setting mode 575 gives mode 444
+Setting mode 574 gives mode 444
+Setting mode 573 gives mode 444
+Setting mode 572 gives mode 444
+Setting mode 571 gives mode 444
+Setting mode 570 gives mode 444
+Setting mode 567 gives mode 444
+Setting mode 566 gives mode 444
+Setting mode 565 gives mode 444
+Setting mode 564 gives mode 444
+Setting mode 563 gives mode 444
+Setting mode 562 gives mode 444
+Setting mode 561 gives mode 444
+Setting mode 560 gives mode 444
+Setting mode 557 gives mode 444
+Setting mode 556 gives mode 444
+Setting mode 555 gives mode 444
+Setting mode 554 gives mode 444
+Setting mode 553 gives mode 444
+Setting mode 552 gives mode 444
+Setting mode 551 gives mode 444
+Setting mode 550 gives mode 444
+Setting mode 547 gives mode 444
+Setting mode 546 gives mode 444
+Setting mode 545 gives mode 444
+Setting mode 544 gives mode 444
+Setting mode 543 gives mode 444
+Setting mode 542 gives mode 444
+Setting mode 541 gives mode 444
+Setting mode 540 gives mode 444
+Setting mode 537 gives mode 444
+Setting mode 536 gives mode 444
+Setting mode 535 gives mode 444
+Setting mode 534 gives mode 444
+Setting mode 533 gives mode 444
+Setting mode 532 gives mode 444
+Setting mode 531 gives mode 444
+Setting mode 530 gives mode 444
+Setting mode 527 gives mode 444
+Setting mode 526 gives mode 444
+Setting mode 525 gives mode 444
+Setting mode 524 gives mode 444
+Setting mode 523 gives mode 444
+Setting mode 522 gives mode 444
+Setting mode 521 gives mode 444
+Setting mode 520 gives mode 444
+Setting mode 517 gives mode 444
+Setting mode 516 gives mode 444
+Setting mode 515 gives mode 444
+Setting mode 514 gives mode 444
+Setting mode 513 gives mode 444
+Setting mode 512 gives mode 444
+Setting mode 511 gives mode 444
+Setting mode 510 gives mode 444
+Setting mode 507 gives mode 444
+Setting mode 506 gives mode 444
+Setting mode 505 gives mode 444
+Setting mode 504 gives mode 444
+Setting mode 503 gives mode 444
+Setting mode 502 gives mode 444
+Setting mode 501 gives mode 444
+Setting mode 500 gives mode 444
+Setting mode 477 gives mode 444
+Setting mode 476 gives mode 444
+Setting mode 475 gives mode 444
+Setting mode 474 gives mode 444
+Setting mode 473 gives mode 444
+Setting mode 472 gives mode 444
+Setting mode 471 gives mode 444
+Setting mode 470 gives mode 444
+Setting mode 467 gives mode 444
+Setting mode 466 gives mode 444
+Setting mode 465 gives mode 444
+Setting mode 464 gives mode 444
+Setting mode 463 gives mode 444
+Setting mode 462 gives mode 444
+Setting mode 461 gives mode 444
+Setting mode 460 gives mode 444
+Setting mode 457 gives mode 444
+Setting mode 456 gives mode 444
+Setting mode 455 gives mode 444
+Setting mode 454 gives mode 444
+Setting mode 453 gives mode 444
+Setting mode 452 gives mode 444
+Setting mode 451 gives mode 444
+Setting mode 450 gives mode 444
+Setting mode 447 gives mode 444
+Setting mode 446 gives mode 444
+Setting mode 445 gives mode 444
+Setting mode 444 gives mode 444
+Setting mode 443 gives mode 444
+Setting mode 442 gives mode 444
+Setting mode 441 gives mode 444
+Setting mode 440 gives mode 444
+Setting mode 437 gives mode 444
+Setting mode 436 gives mode 444
+Setting mode 435 gives mode 444
+Setting mode 434 gives mode 444
+Setting mode 433 gives mode 444
+Setting mode 432 gives mode 444
+Setting mode 431 gives mode 444
+Setting mode 430 gives mode 444
+Setting mode 427 gives mode 444
+Setting mode 426 gives mode 444
+Setting mode 425 gives mode 444
+Setting mode 424 gives mode 444
+Setting mode 423 gives mode 444
+Setting mode 422 gives mode 444
+Setting mode 421 gives mode 444
+Setting mode 420 gives mode 444
+Setting mode 417 gives mode 444
+Setting mode 416 gives mode 444
+Setting mode 415 gives mode 444
+Setting mode 414 gives mode 444
+Setting mode 413 gives mode 444
+Setting mode 412 gives mode 444
+Setting mode 411 gives mode 444
+Setting mode 410 gives mode 444
+Setting mode 407 gives mode 444
+Setting mode 406 gives mode 444
+Setting mode 405 gives mode 444
+Setting mode 404 gives mode 444
+Setting mode 403 gives mode 444
+Setting mode 402 gives mode 444
+Setting mode 401 gives mode 444
+Setting mode 400 gives mode 444
+Setting mode 377 gives mode 666
+Setting mode 376 gives mode 666
+Setting mode 375 gives mode 666
+Setting mode 374 gives mode 666
+Setting mode 373 gives mode 666
+Setting mode 372 gives mode 666
+Setting mode 371 gives mode 666
+Setting mode 370 gives mode 666
+Setting mode 367 gives mode 666
+Setting mode 366 gives mode 666
+Setting mode 365 gives mode 666
+Setting mode 364 gives mode 666
+Setting mode 363 gives mode 666
+Setting mode 362 gives mode 666
+Setting mode 361 gives mode 666
+Setting mode 360 gives mode 666
+Setting mode 357 gives mode 666
+Setting mode 356 gives mode 666
+Setting mode 355 gives mode 666
+Setting mode 354 gives mode 666
+Setting mode 353 gives mode 666
+Setting mode 352 gives mode 666
+Setting mode 351 gives mode 666
+Setting mode 350 gives mode 666
+Setting mode 347 gives mode 666
+Setting mode 346 gives mode 666
+Setting mode 345 gives mode 666
+Setting mode 344 gives mode 666
+Setting mode 343 gives mode 666
+Setting mode 342 gives mode 666
+Setting mode 341 gives mode 666
+Setting mode 340 gives mode 666
+Setting mode 337 gives mode 666
+Setting mode 336 gives mode 666
+Setting mode 335 gives mode 666
+Setting mode 334 gives mode 666
+Setting mode 333 gives mode 666
+Setting mode 332 gives mode 666
+Setting mode 331 gives mode 666
+Setting mode 330 gives mode 666
+Setting mode 327 gives mode 666
+Setting mode 326 gives mode 666
+Setting mode 325 gives mode 666
+Setting mode 324 gives mode 666
+Setting mode 323 gives mode 666
+Setting mode 322 gives mode 666
+Setting mode 321 gives mode 666
+Setting mode 320 gives mode 666
+Setting mode 317 gives mode 666
+Setting mode 316 gives mode 666
+Setting mode 315 gives mode 666
+Setting mode 314 gives mode 666
+Setting mode 313 gives mode 666
+Setting mode 312 gives mode 666
+Setting mode 311 gives mode 666
+Setting mode 310 gives mode 666
+Setting mode 307 gives mode 666
+Setting mode 306 gives mode 666
+Setting mode 305 gives mode 666
+Setting mode 304 gives mode 666
+Setting mode 303 gives mode 666
+Setting mode 302 gives mode 666
+Setting mode 301 gives mode 666
+Setting mode 300 gives mode 666
+Setting mode 277 gives mode 666
+Setting mode 276 gives mode 666
+Setting mode 275 gives mode 666
+Setting mode 274 gives mode 666
+Setting mode 273 gives mode 666
+Setting mode 272 gives mode 666
+Setting mode 271 gives mode 666
+Setting mode 270 gives mode 666
+Setting mode 267 gives mode 666
+Setting mode 266 gives mode 666
+Setting mode 265 gives mode 666
+Setting mode 264 gives mode 666
+Setting mode 263 gives mode 666
+Setting mode 262 gives mode 666
+Setting mode 261 gives mode 666
+Setting mode 260 gives mode 666
+Setting mode 257 gives mode 666
+Setting mode 256 gives mode 666
+Setting mode 255 gives mode 666
+Setting mode 254 gives mode 666
+Setting mode 253 gives mode 666
+Setting mode 252 gives mode 666
+Setting mode 251 gives mode 666
+Setting mode 250 gives mode 666
+Setting mode 247 gives mode 666
+Setting mode 246 gives mode 666
+Setting mode 245 gives mode 666
+Setting mode 244 gives mode 666
+Setting mode 243 gives mode 666
+Setting mode 242 gives mode 666
+Setting mode 241 gives mode 666
+Setting mode 240 gives mode 666
+Setting mode 237 gives mode 666
+Setting mode 236 gives mode 666
+Setting mode 235 gives mode 666
+Setting mode 234 gives mode 666
+Setting mode 233 gives mode 666
+Setting mode 232 gives mode 666
+Setting mode 231 gives mode 666
+Setting mode 230 gives mode 666
+Setting mode 227 gives mode 666
+Setting mode 226 gives mode 666
+Setting mode 225 gives mode 666
+Setting mode 224 gives mode 666
+Setting mode 223 gives mode 666
+Setting mode 222 gives mode 666
+Setting mode 221 gives mode 666
+Setting mode 220 gives mode 666
+Setting mode 217 gives mode 666
+Setting mode 216 gives mode 666
+Setting mode 215 gives mode 666
+Setting mode 214 gives mode 666
+Setting mode 213 gives mode 666
+Setting mode 212 gives mode 666
+Setting mode 211 gives mode 666
+Setting mode 210 gives mode 666
+Setting mode 207 gives mode 666
+Setting mode 206 gives mode 666
+Setting mode 205 gives mode 666
+Setting mode 204 gives mode 666
+Setting mode 203 gives mode 666
+Setting mode 202 gives mode 666
+Setting mode 201 gives mode 666
+Setting mode 200 gives mode 666
+Setting mode 177 gives mode 444
+Setting mode 176 gives mode 444
+Setting mode 175 gives mode 444
+Setting mode 174 gives mode 444
+Setting mode 173 gives mode 444
+Setting mode 172 gives mode 444
+Setting mode 171 gives mode 444
+Setting mode 170 gives mode 444
+Setting mode 167 gives mode 444
+Setting mode 166 gives mode 444
+Setting mode 165 gives mode 444
+Setting mode 164 gives mode 444
+Setting mode 163 gives mode 444
+Setting mode 162 gives mode 444
+Setting mode 161 gives mode 444
+Setting mode 160 gives mode 444
+Setting mode 157 gives mode 444
+Setting mode 156 gives mode 444
+Setting mode 155 gives mode 444
+Setting mode 154 gives mode 444
+Setting mode 153 gives mode 444
+Setting mode 152 gives mode 444
+Setting mode 151 gives mode 444
+Setting mode 150 gives mode 444
+Setting mode 147 gives mode 444
+Setting mode 146 gives mode 444
+Setting mode 145 gives mode 444
+Setting mode 144 gives mode 444
+Setting mode 143 gives mode 444
+Setting mode 142 gives mode 444
+Setting mode 141 gives mode 444
+Setting mode 140 gives mode 444
+Setting mode 137 gives mode 444
+Setting mode 136 gives mode 444
+Setting mode 135 gives mode 444
+Setting mode 134 gives mode 444
+Setting mode 133 gives mode 444
+Setting mode 132 gives mode 444
+Setting mode 131 gives mode 444
+Setting mode 130 gives mode 444
+Setting mode 127 gives mode 444
+Setting mode 126 gives mode 444
+Setting mode 125 gives mode 444
+Setting mode 124 gives mode 444
+Setting mode 123 gives mode 444
+Setting mode 122 gives mode 444
+Setting mode 121 gives mode 444
+Setting mode 120 gives mode 444
+Setting mode 117 gives mode 444
+Setting mode 116 gives mode 444
+Setting mode 115 gives mode 444
+Setting mode 114 gives mode 444
+Setting mode 113 gives mode 444
+Setting mode 112 gives mode 444
+Setting mode 111 gives mode 444
+Setting mode 110 gives mode 444
+Setting mode 107 gives mode 444
+Setting mode 106 gives mode 444
+Setting mode 105 gives mode 444
+Setting mode 104 gives mode 444
+Setting mode 103 gives mode 444
+Setting mode 102 gives mode 444
+Setting mode 101 gives mode 444
+Setting mode 100 gives mode 444
+Setting mode 77 gives mode 444
+Setting mode 76 gives mode 444
+Setting mode 75 gives mode 444
+Setting mode 74 gives mode 444
+Setting mode 73 gives mode 444
+Setting mode 72 gives mode 444
+Setting mode 71 gives mode 444
+Setting mode 70 gives mode 444
+Setting mode 67 gives mode 444
+Setting mode 66 gives mode 444
+Setting mode 65 gives mode 444
+Setting mode 64 gives mode 444
+Setting mode 63 gives mode 444
+Setting mode 62 gives mode 444
+Setting mode 61 gives mode 444
+Setting mode 60 gives mode 444
+Setting mode 57 gives mode 444
+Setting mode 56 gives mode 444
+Setting mode 55 gives mode 444
+Setting mode 54 gives mode 444
+Setting mode 53 gives mode 444
+Setting mode 52 gives mode 444
+Setting mode 51 gives mode 444
+Setting mode 50 gives mode 444
+Setting mode 47 gives mode 444
+Setting mode 46 gives mode 444
+Setting mode 45 gives mode 444
+Setting mode 44 gives mode 444
+Setting mode 43 gives mode 444
+Setting mode 42 gives mode 444
+Setting mode 41 gives mode 444
+Setting mode 40 gives mode 444
+Setting mode 37 gives mode 444
+Setting mode 36 gives mode 444
+Setting mode 35 gives mode 444
+Setting mode 34 gives mode 444
+Setting mode 33 gives mode 444
+Setting mode 32 gives mode 444
+Setting mode 31 gives mode 444
+Setting mode 30 gives mode 444
+Setting mode 27 gives mode 444
+Setting mode 26 gives mode 444
+Setting mode 25 gives mode 444
+Setting mode 24 gives mode 444
+Setting mode 23 gives mode 444
+Setting mode 22 gives mode 444
+Setting mode 21 gives mode 444
+Setting mode 20 gives mode 444
+Setting mode 17 gives mode 444
+Setting mode 16 gives mode 444
+Setting mode 15 gives mode 444
+Setting mode 14 gives mode 444
+Setting mode 13 gives mode 444
+Setting mode 12 gives mode 444
+Setting mode 11 gives mode 444
+Setting mode 10 gives mode 444
+Setting mode 7 gives mode 444
+Setting mode 6 gives mode 444
+Setting mode 5 gives mode 444
+Setting mode 4 gives mode 444
+Setting mode 3 gives mode 444
+Setting mode 2 gives mode 444
+Setting mode 1 gives mode 444
+Setting mode 0 gives mode 444
+bool(true)
+done
diff --git a/ext/standard/tests/file/chmod_basic.phpt b/ext/standard/tests/file/chmod_basic.phpt
new file mode 100644
index 000000000..582f273d4
--- /dev/null
+++ b/ext/standard/tests/file/chmod_basic.phpt
@@ -0,0 +1,35 @@
+--TEST--
+chmod() basic fuctionality
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip non-windows only test');
+}
+?>
+--FILE--
+<?php
+
+define("MODE_MASK", 07777);
+
+$filename = __FILE__ . ".tmp";
+
+$fd = fopen($filename, "w+");
+fclose($fd);
+
+for ($perms_to_set = 07777; $perms_to_set >= 0; $perms_to_set--) {
+ chmod($filename, $perms_to_set);
+ $set_perms = (fileperms($filename) & MODE_MASK);
+ clearstatcache();
+ if ($set_perms != $perms_to_set) {
+ printf("Error: %o does not match %o\n", $set_perms, $perms_to_set);
+ }
+}
+var_dump(chmod($filename, 0777));
+
+unlink($filename);
+echo "done";
+
+?>
+--EXPECT--
+bool(true)
+done
diff --git a/ext/standard/tests/file/chmod_error.phpt b/ext/standard/tests/file/chmod_error.phpt
new file mode 100644
index 000000000..d63f731fe
--- /dev/null
+++ b/ext/standard/tests/file/chmod_error.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test chmod() function : error conditions
+--FILE--
+<?php
+/* Prototype : bool chmod(string filename, int mode)
+ * Description: Change file mode
+ * Source code: ext/standard/filestat.c
+ * Alias to functions:
+ */
+
+echo "*** Testing chmod() : error conditions ***\n";
+
+
+//Test chmod with one more than the expected number of arguments
+echo "\n-- Testing chmod() function with more than expected no. of arguments --\n";
+$filename = 'string_val';
+$mode = 10;
+$extra_arg = 10;
+var_dump( chmod($filename, $mode, $extra_arg) );
+
+// Testing chmod with one less than the expected number of arguments
+echo "\n-- Testing chmod() function with less than expected no. of arguments --\n";
+$filename = 'string_val';
+var_dump( chmod($filename) );
+
+// testing chmod with a non-existing file
+$filename = "___nonExisitingFile___";
+var_dump(chmod($filename, 0777));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing chmod() : error conditions ***
+
+-- Testing chmod() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for chmod() in %s on line %d
+NULL
+
+-- Testing chmod() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for chmod() in %s on line %d
+NULL
+
+Warning: chmod(): No such file or directory in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/file/chmod_variation1.phpt b/ext/standard/tests/file/chmod_variation1.phpt
new file mode 100644
index 000000000..f35e54efb
--- /dev/null
+++ b/ext/standard/tests/file/chmod_variation1.phpt
@@ -0,0 +1,34 @@
+--TEST--
+chmod() on a directory
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip non-windows only test');
+}
+?>
+--FILE--
+<?php
+
+define("PERMISSIONS_MASK", 0777);
+
+$dirname = dirname(__FILE__) . "/" . basename(__FILE__, ".php") . "testdir";
+mkdir($dirname);
+
+for ($perms_to_set = 0777; $perms_to_set >= 0; $perms_to_set--) {
+ chmod($dirname, $perms_to_set);
+ $set_perms = (fileperms($dirname) & PERMISSIONS_MASK);
+ clearstatcache();
+ if ($set_perms != $perms_to_set) {
+ printf("Error: %o does not match %o\n", $set_perms, $perms_to_set);
+ }
+}
+
+var_dump(chmod($dirname, 0777));
+rmdir($dirname);
+
+echo "done";
+
+?>
+--EXPECT--
+bool(true)
+done
diff --git a/ext/standard/tests/file/chmod_variation2-win32.phpt b/ext/standard/tests/file/chmod_variation2-win32.phpt
new file mode 100644
index 000000000..bc379ffcf
--- /dev/null
+++ b/ext/standard/tests/file/chmod_variation2-win32.phpt
@@ -0,0 +1,74 @@
+--TEST--
+chmod() with various paths
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) != 'WIN') {
+ die('skip Windows only chmod test');
+}
+?>
+--FILE--
+<?php
+
+define("PERMISSIONS_MASK", 0777);
+
+$script_directory = dirname(__FILE__);
+chdir($script_directory);
+$test_dirname = basename(__FILE__, ".php") . "testdir";
+mkdir($test_dirname);
+
+$filepath = __FILE__ . ".tmp";
+$filename = basename($filepath);
+$fd = fopen($filepath, "w+");
+fclose($fd);
+
+echo "chmod() on a path containing .. and .\n";
+var_dump(chmod("./$test_dirname/../$filename", 0777));
+var_dump(chmod("./$test_dirname/../$filename", 0755));
+clearstatcache();
+printf("%o\n", fileperms($filepath) & PERMISSIONS_MASK);
+
+echo "\nchmod() on a path containing .. with invalid directories\n";
+var_dump(chmod($filepath, 0777));
+var_dump(chmod("./$test_dirname/bad_dir/../../$filename", 0755));
+clearstatcache();
+printf("%o\n", fileperms($filepath) & PERMISSIONS_MASK);
+
+echo "\nchmod() on a relative path from a different working directory\n";
+chdir($test_dirname);
+var_dump(chmod("../$filename", 0777));
+var_dump(chmod("../$filename", 0755));
+clearstatcache();
+printf("%o\n", fileperms($filepath) & PERMISSIONS_MASK);
+chdir($script_directory);
+
+echo "\nchmod() on a directory with a trailing /\n";
+var_dump(chmod($test_dirname, 0777));
+var_dump(chmod("$test_dirname/", 0775));
+clearstatcache();
+printf("%o\n", fileperms($filepath) & PERMISSIONS_MASK);
+
+chdir($script_directory);
+rmdir($test_dirname);
+unlink($filepath);
+
+?>
+--EXPECTF--
+chmod() on a path containing .. and .
+bool(true)
+bool(true)
+666
+
+chmod() on a path containing .. with invalid directories
+bool(true)
+bool(true)
+666
+
+chmod() on a relative path from a different working directory
+bool(true)
+bool(true)
+666
+
+chmod() on a directory with a trailing /
+bool(true)
+bool(true)
+666
diff --git a/ext/standard/tests/file/chmod_variation2.phpt b/ext/standard/tests/file/chmod_variation2.phpt
new file mode 100644
index 000000000..b193acfaf
--- /dev/null
+++ b/ext/standard/tests/file/chmod_variation2.phpt
@@ -0,0 +1,92 @@
+--TEST--
+chmod() with various paths
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip non-windows only test');
+}
+?>
+--FILE--
+<?php
+
+define("PERMISSIONS_MASK", 0777);
+
+$script_directory = dirname(__FILE__);
+chdir($script_directory);
+$test_dirname = basename(__FILE__, ".php") . "testdir";
+mkdir($test_dirname);
+
+$filepath = __FILE__ . ".tmp";
+$filename = basename($filepath);
+$fd = fopen($filepath, "w+");
+fclose($fd);
+
+echo "chmod() on a path containing .. and .\n";
+var_dump(chmod("./$test_dirname/../$filename", 0777));
+var_dump(chmod("./$test_dirname/../$filename", 0755));
+clearstatcache();
+printf("%o\n", fileperms($filepath) & PERMISSIONS_MASK);
+
+echo "\nchmod() on a path containing .. with invalid directories\n";
+var_dump(chmod($filepath, 0777));
+var_dump(chmod("./$test_dirname/bad_dir/../../$filename", 0755));
+clearstatcache();
+printf("%o\n", fileperms($filepath) & PERMISSIONS_MASK);
+
+echo "\nchmod() on a linked file\n";
+$linkname = "somelink";
+var_dump(symlink($filepath, $linkname));
+var_dump(chmod($filepath, 0777));
+var_dump(chmod($linkname, 0755));
+clearstatcache();
+printf("%o\n", fileperms($filepath) & PERMISSIONS_MASK);
+var_dump(unlink($linkname));
+
+echo "\nchmod() on a relative path from a different working directory\n";
+chdir($test_dirname);
+var_dump(chmod("../$filename", 0777));
+var_dump(chmod("../$filename", 0755));
+clearstatcache();
+printf("%o\n", fileperms($filepath) & PERMISSIONS_MASK);
+chdir($script_directory);
+
+echo "\nchmod() on a directory with a trailing /\n";
+var_dump(chmod($test_dirname, 0777));
+var_dump(chmod("$test_dirname/", 0775));
+clearstatcache();
+printf("%o\n", fileperms($filepath) & PERMISSIONS_MASK);
+
+chdir($script_directory);
+rmdir($test_dirname);
+unlink($filepath);
+
+?>
+--EXPECTF--
+chmod() on a path containing .. and .
+bool(true)
+bool(true)
+755
+
+chmod() on a path containing .. with invalid directories
+bool(true)
+
+Warning: chmod(): No such file or directory in %s on line %d
+bool(false)
+777
+
+chmod() on a linked file
+bool(true)
+bool(true)
+bool(true)
+755
+bool(true)
+
+chmod() on a relative path from a different working directory
+bool(true)
+bool(true)
+755
+
+chmod() on a directory with a trailing /
+bool(true)
+bool(true)
+755
diff --git a/ext/standard/tests/file/chmod_variation3.phpt b/ext/standard/tests/file/chmod_variation3.phpt
new file mode 100644
index 000000000..b1b455d46
--- /dev/null
+++ b/ext/standard/tests/file/chmod_variation3.phpt
@@ -0,0 +1,216 @@
+--TEST--
+Test chmod() function : first parameter variation
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : bool chmod(string filename, int mode)
+ * Description: Change file mode
+ * Source code: ext/standard/filestat.c
+ * Alias to functions:
+ */
+
+echo "*** Testing chmod() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$mode = 0777;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for filename
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( chmod($value, $mode) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing chmod() : usage variation ***
+
+--int 0--
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--int 1--
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--float .5--
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - chmod(): No such file or directory, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/file/chmod_variation4.phpt b/ext/standard/tests/file/chmod_variation4.phpt
new file mode 100644
index 000000000..a46b61f65
--- /dev/null
+++ b/ext/standard/tests/file/chmod_variation4.phpt
@@ -0,0 +1,192 @@
+--TEST--
+Test chmod() function : second parameter variation
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : bool chmod(string filename, int mode)
+ * Description: Change file mode
+ * Source code: ext/standard/filestat.c
+ * Alias to functions:
+ */
+
+echo "*** Testing chmod() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted
+$filename = __FILE__ . ".tmp";
+$fd = fopen($filename, "w+");
+fclose($fd);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for mode
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( chmod($filename, $value) );
+};
+
+chmod($filename, 0777);
+unlink($filename);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing chmod() : usage variation ***
+
+--float 10.5--
+bool(true)
+
+--float -10.5--
+bool(true)
+
+--float 12.3456789000e10--
+bool(true)
+
+--float -12.3456789000e10--
+bool(true)
+
+--float .5--
+bool(true)
+
+--empty array--
+bool(true)
+
+--int indexed array--
+bool(true)
+
+--associative array--
+bool(true)
+
+--nested arrays--
+bool(true)
+
+--uppercase NULL--
+bool(true)
+
+--lowercase null--
+bool(true)
+
+--lowercase true--
+bool(true)
+
+--lowercase false--
+bool(true)
+
+--uppercase TRUE--
+bool(true)
+
+--uppercase FALSE--
+bool(true)
+
+--empty string DQ--
+bool(true)
+
+--empty string SQ--
+bool(true)
+
+--string DQ--
+bool(true)
+
+--string SQ--
+bool(true)
+
+--mixed case string--
+bool(true)
+
+--heredoc--
+bool(true)
+
+--instance of classWithToString--
+Error: 8 - Object of class classWithToString could not be converted to int, %s(%d)
+bool(true)
+
+--instance of classWithoutToString--
+Error: 8 - Object of class classWithoutToString could not be converted to int, %s(%d)
+bool(true)
+
+--undefined var--
+bool(true)
+
+--unset var--
+bool(true)
+===DONE===
diff --git a/ext/standard/tests/file/chroot_001.phpt b/ext/standard/tests/file/chroot_001.phpt
new file mode 100644
index 000000000..b42b17b89
--- /dev/null
+++ b/ext/standard/tests/file/chroot_001.phpt
@@ -0,0 +1,30 @@
+--TEST--
+chroot()
+--SKIPIF--
+<?php
+chdir("/");
+if (!@mkdir("testtmpskipifdir")) {
+ die("skip for root only");
+}
+rmdir("testtmpskipifdir");
+if (!function_exists("chroot")) {
+ die("skip chroot() not available");
+}
+?>
+--FILE--
+<?php
+mkdir("chroot_001_x");
+var_dump(is_dir("chroot_001_x"));
+var_dump(chroot("chroot_001_x"));
+var_dump(is_dir("chroot_001_x"));
+var_dump(realpath("."));
+?>
+--CLEAN--
+<?php
+rmdir("chroot_001_x");
+?>
+--EXPECTF--
+bool(true)
+bool(true)
+bool(false)
+string(1) "/"
diff --git a/ext/standard/tests/file/copy_variation12-win32.phpt b/ext/standard/tests/file/copy_variation12-win32.phpt
index 769676904..4d39de3bb 100644
--- a/ext/standard/tests/file/copy_variation12-win32.phpt
+++ b/ext/standard/tests/file/copy_variation12-win32.phpt
@@ -40,7 +40,7 @@ rmdir(dirname(__FILE__)."/copy_variation12");
--EXPECTF--
*** Test copy() function: Trying to create a copy of an existing dir ***
-Warning: copy(%s): failed to open stream: Permission denied in %s on line %d
+Warning: copy(): The first argument to copy() function cannot be a directory in %s on line %d
bool(false)
bool(false)
int(0)
diff --git a/ext/standard/tests/file/copy_variation13.phpt b/ext/standard/tests/file/copy_variation13.phpt
index bd1a21dab..779f82b6f 100644
--- a/ext/standard/tests/file/copy_variation13.phpt
+++ b/ext/standard/tests/file/copy_variation13.phpt
@@ -44,7 +44,7 @@ rmdir(dirname(__FILE__)."/copy_variation13");
*** Test copy() function: Trying to copy dir to file ***
*** Testing copy() in copying dir to file ***
-Warning: copy(): The first argument to copy() function cannot be a directory in %s/copy_variation13.php on line %d
+Warning: copy(): The first argument to copy() function cannot be a directory in %scopy_variation13.php on line %d
bool(false)
bool(true)
bool(true)
diff --git a/ext/standard/tests/file/copy_variation18.phpt b/ext/standard/tests/file/copy_variation18.phpt
index 18407bd58..53467af8a 100644
--- a/ext/standard/tests/file/copy_variation18.phpt
+++ b/ext/standard/tests/file/copy_variation18.phpt
@@ -32,8 +32,13 @@ var_dump( copy($src_file_name, $dest_file_name) );
$stat_after_copy = stat($src_file_name);
clearstatcache();
+// compare all stat fields except access time
+$stat_keys_to_compare = array("dev", "ino", "mode", "nlink", "uid", "gid",
+ "rdev", "size", "mtime", "ctime",
+ "blksize", "blocks");
+
echo "Comparing the stats of file before and after copy operation => ";
-var_dump( compare_stats($stat_before_copy, $stat_after_copy, $all_stat_keys) );
+var_dump( compare_stats($stat_before_copy, $stat_after_copy, $stat_keys_to_compare) );
echo "*** Done ***\n";
?>
diff --git a/ext/standard/tests/file/copy_variation4.phpt b/ext/standard/tests/file/copy_variation4.phpt
index 38363fc89..8c6ea1a82 100644
--- a/ext/standard/tests/file/copy_variation4.phpt
+++ b/ext/standard/tests/file/copy_variation4.phpt
Binary files differ
diff --git a/ext/standard/tests/file/directory_wrapper_fstat_basic.phpt b/ext/standard/tests/file/directory_wrapper_fstat_basic.phpt
new file mode 100644
index 000000000..87f85230b
--- /dev/null
+++ b/ext/standard/tests/file/directory_wrapper_fstat_basic.phpt
@@ -0,0 +1,13 @@
+--TEST--
+Test function fstat() on directory wrapper
+--FILE--
+<?php
+$d = dirname(__FILE__);
+$h = opendir($d);
+var_dump(fstat($h));
+closedir($h);
+?>
+===DONE===
+--EXPECT--
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/dirname_basic-win32.phpt b/ext/standard/tests/file/dirname_basic-win32.phpt
new file mode 100644
index 000000000..61a6e33f5
--- /dev/null
+++ b/ext/standard/tests/file/dirname_basic-win32.phpt
@@ -0,0 +1,93 @@
+--TEST--
+Test dirname() function : basic functionality
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Only valid for Windows");
+?>
+--FILE--
+<?php
+/* Prototype : string dirname(string path)
+ * Description: Returns the directory name component of the path
+ * Source code: ext/standard/string.c
+ * Alias to functions:
+ */
+
+echo "*** Testing dirname() : basic functionality ***\n";
+
+
+// Initialise all required variables
+$paths = array(
+ '',
+ ' ',
+ 'c:',
+ 'c:\\',
+ 'c:/',
+ 'afile',
+ 'c:\test\afile',
+ 'c:\\test\\afile',
+ 'c://test//afile',
+ 'c:\test\afile\\',
+ '/usr/lib/locale/en_US',
+ '//usr/lib//locale/en_US',
+ '\\',
+ '\\\\',
+ '/',
+ '//',
+ '///',
+ '/usr/lib/locale/en_US/',
+ 'c:\windows/system32\drivers/etc\hosts',
+ '/usr\lib/locale\en_US',
+ ' c:\test\adir\afile.txt',
+ 'c:\test\adir\afile.txt ',
+ ' c:\test\adir\afile.txt ',
+ ' /usr/lib/locale/en_US',
+ '/usr/lib/locale/en_US ',
+ ' /usr/lib/locale/en_US ',
+ ' c:',
+ ' c:\test\adir\afile.txt',
+ '/usr',
+ '/usr/',
+ );
+
+foreach ($paths as $path) {
+ var_dump( dirname($path) );
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing dirname() : basic functionality ***
+string(0) ""
+string(1) "."
+string(2) "c:"
+string(3) "c:\"
+string(3) "c:\"
+string(1) "."
+string(7) "c:\test"
+string(7) "c:\test"
+string(8) "c://test"
+string(7) "c:\test"
+string(15) "/usr/lib/locale"
+string(17) "//usr/lib//locale"
+string(1) "\"
+string(1) "\"
+string(1) "\"
+string(1) "\"
+string(1) "\"
+string(15) "/usr/lib/locale"
+string(31) "c:\windows/system32\drivers/etc"
+string(15) "/usr\lib/locale"
+string(15) " c:\test\adir"
+string(12) "c:\test\adir"
+string(15) " c:\test\adir"
+string(18) " /usr/lib/locale"
+string(15) "/usr/lib/locale"
+string(18) " /usr/lib/locale"
+string(1) "."
+string(14) " c:\test\adir"
+string(1) "\"
+string(1) "\"
+===DONE===
diff --git a/ext/standard/tests/file/dirname_basic.phpt b/ext/standard/tests/file/dirname_basic.phpt
new file mode 100644
index 000000000..8f1944e2c
--- /dev/null
+++ b/ext/standard/tests/file/dirname_basic.phpt
@@ -0,0 +1,94 @@
+--TEST--
+Test dirname() function : basic functionality
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip Not valid for Windows");
+?>
+--FILE--
+<?php
+/* Prototype : string dirname(string path)
+ * Description: Returns the directory name component of the path
+ * Source code: ext/standard/string.c
+ * Alias to functions:
+ */
+
+echo "*** Testing dirname() : basic functionality ***\n";
+
+
+// Initialise all required variables
+$paths = array(
+ '',
+ ' ',
+ 'c:',
+ 'c:\\',
+ 'c:/',
+ 'afile',
+ 'c:\test\afile',
+ 'c:\\test\\afile',
+ 'c://test//afile',
+ 'c:\test\afile\\',
+ '/usr/lib/locale/en_US',
+ '//usr/lib//locale/en_US',
+ '\\',
+ '\\\\',
+ '/',
+ '//',
+ '///',
+ '/usr/lib/locale/en_US/',
+ 'c:\windows/system32\drivers/etc\hosts',
+ '/usr\lib/locale\en_US',
+ ' c:\test\adir\afile.txt',
+ 'c:\test\adir\afile.txt ',
+ ' c:\test\adir\afile.txt ',
+ ' /usr/lib/locale/en_US',
+ '/usr/lib/locale/en_US ',
+ ' /usr/lib/locale/en_US ',
+ ' c:',
+ ' c:\test\adir\afile.txt',
+ '/usr',
+ '/usr/'
+ );
+
+foreach ($paths as $path) {
+ var_dump( dirname($path) );
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing dirname() : basic functionality ***
+string(0) ""
+string(1) "."
+string(1) "."
+string(1) "."
+string(1) "."
+string(1) "."
+string(1) "."
+string(1) "."
+string(8) "c://test"
+string(1) "."
+string(15) "/usr/lib/locale"
+string(17) "//usr/lib//locale"
+string(1) "."
+string(1) "."
+string(1) "/"
+string(1) "/"
+string(1) "/"
+string(15) "/usr/lib/locale"
+string(27) "c:\windows/system32\drivers"
+string(8) "/usr\lib"
+string(1) "."
+string(1) "."
+string(1) "."
+string(18) " /usr/lib/locale"
+string(15) "/usr/lib/locale"
+string(18) " /usr/lib/locale"
+string(1) "."
+string(1) "."
+string(1) "/"
+string(1) "/"
+===DONE===
+
diff --git a/ext/standard/tests/file/dirname_error.phpt b/ext/standard/tests/file/dirname_error.phpt
new file mode 100644
index 000000000..4785c94f2
--- /dev/null
+++ b/ext/standard/tests/file/dirname_error.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test dirname() function : error conditions
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : string dirname(string path)
+ * Description: Returns the directory name component of the path
+ * Source code: ext/standard/string.c
+ * Alias to functions:
+ */
+
+echo "*** Testing dirname() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing dirname() function with Zero arguments --\n";
+var_dump( dirname() );
+
+//Test dirname with one more than the expected number of arguments
+echo "\n-- Testing dirname() function with more than expected no. of arguments --\n";
+$path = 'string_val';
+$extra_arg = 10;
+var_dump( dirname($path, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing dirname() : error conditions ***
+
+-- Testing dirname() function with Zero arguments --
+
+Warning: Wrong parameter count for dirname() in %s on line %d
+NULL
+
+-- Testing dirname() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for dirname() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/file/dirname_variation1.phpt b/ext/standard/tests/file/dirname_variation1.phpt
new file mode 100644
index 000000000..c48a9bafb
--- /dev/null
+++ b/ext/standard/tests/file/dirname_variation1.phpt
@@ -0,0 +1,190 @@
+--TEST--
+Test dirname() function : usage variation
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : string dirname(string path)
+ * Description: Returns the directory name component of the path
+ * Source code: ext/standard/string.c
+ * Alias to functions:
+ */
+
+echo "*** Testing dirname() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for path
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( dirname($value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing dirname() : usage variation ***
+
+--int 0--
+string(1) "."
+
+--int 1--
+string(1) "."
+
+--int 12345--
+string(1) "."
+
+--int -12345--
+string(1) "."
+
+--float 10.5--
+string(1) "."
+
+--float -10.5--
+string(1) "."
+
+--float 12.3456789000e10--
+string(1) "."
+
+--float -12.3456789000e10--
+string(1) "."
+
+--float .5--
+string(1) "."
+
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+string(1) "."
+
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+string(1) "."
+
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+string(1) "."
+
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+string(1) "."
+
+--uppercase NULL--
+string(0) ""
+
+--lowercase null--
+string(0) ""
+
+--lowercase true--
+string(1) "."
+
+--lowercase false--
+string(0) ""
+
+--uppercase TRUE--
+string(1) "."
+
+--uppercase FALSE--
+string(0) ""
+
+--empty string DQ--
+string(0) ""
+
+--empty string SQ--
+string(0) ""
+
+--instance of classWithToString--
+string(1) "."
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+string(1) "."
+
+--undefined var--
+string(0) ""
+
+--unset var--
+string(0) ""
+===DONE===
diff --git a/ext/standard/tests/file/feof_basic.phpt b/ext/standard/tests/file/feof_basic.phpt
new file mode 100644
index 000000000..ff1d179f6
--- /dev/null
+++ b/ext/standard/tests/file/feof_basic.phpt
@@ -0,0 +1,101 @@
+--TEST--
+Test feof() function : basic functionality
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : proto bool feof(resource fp)
+ * Description: Test for end-of-file on a file pointer
+ * Source code: ext/standard/file.c
+ * Alias to functions: gzeof
+ */
+
+echo "*** Testing feof() : basic functionality ***\n";
+$tmpFile1 = __FILE__.".tmp1";
+$h = fopen($tmpFile1, 'wb');
+$count = 10;
+for ($i = 1; $i <= $count; $i++) {
+ fwrite($h, "some data $i\n");
+}
+fclose($h);
+
+echo "\n*** testing reading complete file using feof to stop ***\n";
+$h = fopen($tmpFile1, 'rb');
+
+//feof is not set to true until you try to read past the end of file.
+//so fgets will be called even if we are at the end of the file on
+//last time to set the eof flag but it will fail to read.
+$lastline = "";
+while (!feof($h)) {
+ $previousLine = $lastline;
+ $lastline = fgets($h);
+}
+echo $previousLine;
+var_dump($lastline); // this should be false
+fclose($h);
+
+$tmpFile2 = __FILE__.".tmp2";
+$h = fopen($tmpFile2, 'wb+');
+$count = 10;
+echo "*** writing $count lines, testing feof ***\n";
+for ($i = 1; $i <=$count; $i++) {
+ fwrite($h, "some data $i\n");
+ var_dump(feof($h));
+}
+
+echo "*** testing feof on unclosed file after a read ***\n";
+
+fread($h, 100);
+var_dump(feof($h));
+
+$eofPointer = ftell($h);
+
+echo "*** testing feof after a seek to near the beginning ***\n";
+fseek($h, 20, SEEK_SET);
+var_dump(feof($h));
+
+echo "*** testing feof after a seek to end ***\n";
+fseek($h, $eofPointer, SEEK_SET);
+var_dump(feof($h));
+
+echo "*** testing feof after a seek passed the end ***\n";
+fseek($h, $eofPointer + 1000, SEEK_SET);
+var_dump(feof($h));
+
+echo "*** closing file, testing eof ***\n";
+fclose($h);
+feof($h);
+unlink($tmpFile1);
+unlink($tmpFile2);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing feof() : basic functionality ***
+
+*** testing reading complete file using feof to stop ***
+some data 10
+bool(false)
+*** writing 10 lines, testing feof ***
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+*** testing feof on unclosed file after a read ***
+bool(true)
+*** testing feof after a seek to near the beginning ***
+bool(false)
+*** testing feof after a seek to end ***
+bool(false)
+*** testing feof after a seek passed the end ***
+bool(false)
+*** closing file, testing eof ***
+
+Warning: feof(): %d is not a valid stream resource in %s on line %d
+Done
diff --git a/ext/standard/tests/file/fgets_error.phpt b/ext/standard/tests/file/fgets_error.phpt
index 347a10d95..d4600480a 100644
--- a/ext/standard/tests/file/fgets_error.phpt
+++ b/ext/standard/tests/file/fgets_error.phpt
@@ -99,7 +99,7 @@ bool(false)
Warning: fgets(): supplied argument is not a valid stream resource in %s on line %d
bool(false)
-- Testing fgets() with closed/unset file handle --
-Warning: fgets(): 5 is not a valid stream resource in %s on line %d
+Warning: fgets(): %d is not a valid stream resource in %s on line %d
bool(false)
Warning: fgets(): supplied argument is not a valid stream resource in %s on line %d
diff --git a/ext/standard/tests/file/fgets_socket_variation1.phpt b/ext/standard/tests/file/fgets_socket_variation1.phpt
new file mode 100644
index 000000000..57944d8b5
--- /dev/null
+++ b/ext/standard/tests/file/fgets_socket_variation1.phpt
@@ -0,0 +1,56 @@
+--TEST--
+fgets() with a socket stream
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+
+/* Setup socket server */
+$server = stream_socket_server('tcp://127.0.0.1:31337');
+
+/* Connect to it */
+$client = fsockopen('tcp://127.0.0.1:31337');
+
+if (!$client) {
+ die("Unable to create socket");
+}
+
+/* Accept that connection */
+$socket = stream_socket_accept($server);
+
+echo "Write some data:\n";
+fwrite($socket, "line1\nline2\nline3\n");
+
+
+echo "\n\nRead a line from the client:\n";
+var_dump(fgets($client));
+
+echo "\n\nRead another line from the client:\n";
+var_dump(fgets($client));
+
+echo "\n\nClose the server side socket and read the remaining data from the client\n";
+fclose($socket);
+fclose($server);
+while(!feof($client)) {
+ fread($client, 1);
+}
+
+echo "done\n";
+
+?>
+--EXPECT--
+Write some data:
+
+
+Read a line from the client:
+string(6) "line1
+"
+
+
+Read another line from the client:
+string(6) "line2
+"
+
+
+Close the server side socket and read the remaining data from the client
+done
diff --git a/ext/standard/tests/file/fgets_socket_variation2.phpt b/ext/standard/tests/file/fgets_socket_variation2.phpt
new file mode 100644
index 000000000..350083713
--- /dev/null
+++ b/ext/standard/tests/file/fgets_socket_variation2.phpt
@@ -0,0 +1,63 @@
+--TEST--
+fgets() over a socket with more than a buffer's worth of data
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+
+// create a file
+$filename = __FILE__ . ".tmp";
+$fd = fopen($filename, "w+");
+
+// populate the file with lines of data
+define("LINE_OF_DATA", "12345678\n");
+for ($i = 0; $i < 1000; $i++) {
+ fwrite($fd, LINE_OF_DATA);
+}
+fclose($fd);
+
+/* Setup socket server */
+$server = stream_socket_server('tcp://127.0.0.1:31337');
+
+/* Connect to it */
+$client = fsockopen('tcp://127.0.0.1:31337');
+
+if (!$client) {
+ die("Unable to create socket");
+}
+
+/* Accept that connection */
+$socket = stream_socket_accept($server);
+
+echo "Write data from the file:\n";
+$data = file_get_contents($filename);
+unlink($filename);
+
+var_dump(fwrite($socket, $data));
+fclose($socket);
+
+echo "\nRead lines from the client\n";
+while ($line = fgets($client,256)) {
+ if (strcmp($line, LINE_OF_DATA) != 0) {
+ echo "Error - $line does not match " . LINE_OF_DATA;
+ break;
+ }
+}
+
+echo "\nClose the server side socket and read the remaining data from the client\n";
+fclose($server);
+while(!feof($client)) {
+ fread($client, 1);
+}
+
+echo "done\n";
+
+?>
+--EXPECT--
+Write data from the file:
+int(9000)
+
+Read lines from the client
+
+Close the server side socket and read the remaining data from the client
+done
diff --git a/ext/standard/tests/file/fgets_variation2.phpt b/ext/standard/tests/file/fgets_variation2.phpt
index b37a9f099..3ba4eae96 100644
--- a/ext/standard/tests/file/fgets_variation2.phpt
+++ b/ext/standard/tests/file/fgets_variation2.phpt
@@ -43,10 +43,10 @@ echo "Done";
*** Testing fgets() : usage variations ***
-- Testing fgets() with closed handle --
-Warning: fgets(): 6 is not a valid stream resource in %s on line %d
+Warning: fgets(): %d is not a valid stream resource in %s on line %d
bool(false)
-Warning: fgets(): 6 is not a valid stream resource in %s on line %d
+Warning: fgets(): %d is not a valid stream resource in %s on line %d
bool(false)
-- Testing fgets() with unset handle --
diff --git a/ext/standard/tests/file/file_exists_error.phpt b/ext/standard/tests/file/file_exists_error.phpt
new file mode 100644
index 000000000..dec102d36
--- /dev/null
+++ b/ext/standard/tests/file/file_exists_error.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test file_exists() function : error conditions
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : proto bool file_exists(string filename)
+ * Description: Returns true if filename exists
+ * Source code: ext/standard/filestat.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file_exists() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing file_exists() function with Zero arguments --\n";
+var_dump( file_exists() );
+
+//Test file_exists with one more than the expected number of arguments
+echo "\n-- Testing file_exists() function with more than expected no. of arguments --\n";
+$filename = 'string_val';
+$extra_arg = 10;
+var_dump( file_exists($filename, $extra_arg) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing file_exists() : error conditions ***
+
+-- Testing file_exists() function with Zero arguments --
+
+Warning: Wrong parameter count for file_exists() in %s on line %d
+NULL
+
+-- Testing file_exists() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for file_exists() in %s on line %d
+NULL
+Done
diff --git a/ext/standard/tests/file/file_exists_variation1.phpt b/ext/standard/tests/file/file_exists_variation1.phpt
new file mode 100644
index 000000000..35c86a280
--- /dev/null
+++ b/ext/standard/tests/file/file_exists_variation1.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Test file_exists() function : usage variations
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : proto bool file_exists(string filename)
+ * Description: Returns true if filename exists
+ * Source code: ext/standard/filestat.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file_exists() : usage variations ***\n";
+
+var_dump(file_exists(NULL));
+var_dump(file_exists(false));
+var_dump(file_exists(''));
+var_dump(file_exists(' '));
+var_dump(file_exists('|'));
+echo "Done";
+?>
+
+--EXPECTF--
+*** Testing file_exists() : usage variations ***
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+Done \ No newline at end of file
diff --git a/ext/standard/tests/file/file_get_contents_basic.phpt b/ext/standard/tests/file/file_get_contents_basic.phpt
new file mode 100644
index 000000000..5dc0a5e5c
--- /dev/null
+++ b/ext/standard/tests/file/file_get_contents_basic.phpt
@@ -0,0 +1,47 @@
+--TEST--
+file_get_contents() function : basic functionality
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+
+/* Prototype: string file_get_contents( string $filename[, bool $use_include_path[,
+ * resource $context[, int $offset[, int $maxlen]]]] )
+ * Description: Reads entire file into a string
+ */
+
+$file_path = dirname(__FILE__);
+include($file_path."/file.inc");
+
+echo "*** Testing the basic functionality of the file_get_contents() function ***\n";
+
+echo "-- Testing with simple valid data file --\n";
+
+
+create_files($file_path, 1, "text", 0755, 100, "w", "file", 1, "byte");
+var_dump( file_get_contents($file_path."/file1.tmp") );
+delete_files($file_path, 1);
+
+echo "\n-- Testing with empty file --\n";
+
+create_files($file_path, 1, "empty", 0755, 100, "w", "file", 1, "byte");
+var_dump( file_get_contents($file_path."/file1.tmp") );
+delete_files($file_path, 1);
+
+echo "\n*** Done ***";
+?>
+--CLEAN--
+<?php
+$file_path = dirname(__FILE__);
+unlink($file_path."/file_put_contents.tmp");
+unlink($file_path."/file_put_contents1.tmp");
+?>
+--EXPECTF--
+*** Testing the basic functionality of the file_get_contents() function ***
+-- Testing with simple valid data file --
+string(100) "text text text text text text text text text text text text text text text text text text text text "
+
+-- Testing with empty file --
+string(0) ""
+
+*** Done ***
diff --git a/ext/standard/tests/file/file_get_contents_error.phpt b/ext/standard/tests/file/file_get_contents_error.phpt
new file mode 100644
index 000000000..9c30c2357
--- /dev/null
+++ b/ext/standard/tests/file/file_get_contents_error.phpt
@@ -0,0 +1,64 @@
+--TEST--
+Test file_get_contents() function : error conditions
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype: string file_get_contents( string $filename{, bool $use_include_path[,
+ * resource $context[, int $offset[, int $maxlen]]]] )
+ * Description: Reads entire file into a string
+ */
+
+echo "*** Testing error conditions ***\n";
+
+$file_path = dirname(__FILE__);
+include($file_path."/file.inc");
+
+echo "\n-- Testing with Non-existing file --\n";
+print( file_get_contents("/no/such/file/or/dir") );
+
+echo "\n-- Testing No.of arguments less than expected --\n";
+print( file_get_contents() );
+
+echo "\n-- Testing No.of arguments greater than expected --\n";
+
+create_files($file_path, 1, "text", 0755, 100, "w", "file", 1, "byte");
+$file_handle = fopen($file_path."/file_put_contents_error.tmp", "w");
+print( file_get_contents($file_path."/file1.tmp", false, $file_handle, 1, 2, "extra_argument") );
+
+echo "\n-- Testing for invalid negative maxlen values --";
+var_dump( file_get_contents($file_path."/file1.tmp", FALSE, $file_handle, 0, -5) );
+
+delete_files($file_path, 1);
+fclose($file_handle);
+unlink($file_path."/file_put_contents_error.tmp");
+
+echo "\n*** Done ***\n";
+?>
+--CLEAN--
+<?php
+$file_path = dirname(__FILE__);
+unlink($file_path."/file_put_contents_error.tmp");
+unlink($file_path."/file_put_contents1.tmp");
+
+?>
+--EXPECTF--
+*** Testing error conditions ***
+
+-- Testing with Non-existing file --
+
+Warning: file_get_contents(/no/such/file/or/dir): failed to open stream: No such file or directory in %s on line %d
+
+-- Testing No.of arguments less than expected --
+
+Warning: file_get_contents() expects at least 1 parameter, 0 given in %s on line %d
+
+-- Testing No.of arguments greater than expected --
+
+Warning: file_get_contents() expects at most 5 parameters, 6 given in %s on line %d
+
+-- Testing for invalid negative maxlen values --
+Warning: file_get_contents(): length must be greater than or equal to zero in %s on line %d
+bool(false)
+
+*** Done *** \ No newline at end of file
diff --git a/ext/standard/tests/file/file_get_contents_variation1.phpt b/ext/standard/tests/file/file_get_contents_variation1.phpt
new file mode 100644
index 000000000..ddc926180
--- /dev/null
+++ b/ext/standard/tests/file/file_get_contents_variation1.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test file_get_contents() function : variation - include path testing
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])
+ * Description: Read the entire file into a string
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file_get_contents() : variation ***\n";
+
+require_once('fopen_include_path.inc');
+
+// this doesn't create the include dirs in this directory
+// we change to this to ensure we are not part of the
+// include paths.
+$thisTestDir = "fileGetContentsVar1.dir";
+mkdir($thisTestDir);
+chdir($thisTestDir);
+
+$filename = "afile.txt";
+$secondFile = $dir2."/".$filename;
+
+$newpath = create_include_path();
+set_include_path($newpath);
+runtest();
+teardown_include_path();
+restore_include_path();
+chdir("..");
+rmdir($thisTestDir);
+
+
+function runtest() {
+ global $secondFile, $filename;
+ $h = fopen($secondFile, "w");
+ fwrite($h, "File in include path");
+ fclose($h);
+ $line = file_get_contents($filename, true);
+ echo "$line\n";
+ unlink($secondFile);
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing file_get_contents() : variation ***
+File in include path
+===DONE===
diff --git a/ext/standard/tests/file/file_get_contents_variation2.phpt b/ext/standard/tests/file/file_get_contents_variation2.phpt
new file mode 100644
index 000000000..54816604c
--- /dev/null
+++ b/ext/standard/tests/file/file_get_contents_variation2.phpt
@@ -0,0 +1,52 @@
+--TEST--
+Test file_get_contents() function : variation - include path testing
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])
+ * Description: Read the entire file into a string
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file_get_contents() : variation ***\n";
+
+
+require_once('fopen_include_path.inc');
+
+// this doesn't create the include dirs in this directory
+// we change to this to ensure we are not part of the
+// include paths.
+$thisTestDir = "fileGetContentsVar7.dir";
+mkdir($thisTestDir);
+chdir($thisTestDir);
+
+$filename = "readFileVar7.tmp";
+$scriptLocFile = dirname(__FILE__)."/".$filename;
+
+$newpath = create_include_path();
+set_include_path($newpath);
+runtest();
+teardown_include_path();
+restore_include_path();
+chdir("..");
+rmdir($thisTestDir);
+
+
+function runtest() {
+ global $scriptLocFile, $filename;
+ $h = fopen($scriptLocFile, "w");
+ fwrite($h, "File in script location");
+ fclose($h);
+ $line = file_get_contents($filename, true);
+ echo "$line\n";
+ unlink($scriptLocFile);
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing file_get_contents() : variation ***
+File in script location
+===DONE===
diff --git a/ext/standard/tests/file/file_get_contents_variation3.phpt b/ext/standard/tests/file/file_get_contents_variation3.phpt
new file mode 100644
index 000000000..f485b0ecf
--- /dev/null
+++ b/ext/standard/tests/file/file_get_contents_variation3.phpt
@@ -0,0 +1,218 @@
+--TEST--
+Test file_get_contents() function : usage variation - different type for use_include_path
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])
+ * Description: Read the entire file into a string
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file_get_contents() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$filename = 'FileGetContentsVar3.tmp';
+$absFile = dirname(__FILE__).'/'.$filename;
+$h = fopen($absFile,"w");
+fwrite($h, "contents read");
+fclose($h);
+
+
+
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for use_include_path
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( file_get_contents($absFile, $value) );
+};
+
+unlink($absFile);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing file_get_contents() : usage variation ***
+
+--int 0--
+string(13) "contents read"
+
+--int 1--
+string(13) "contents read"
+
+--int 12345--
+string(%d) "contents read"
+
+--int -12345--
+string(%d) "contents read"
+
+--float 10.5--
+string(%d) "contents read"
+
+--float -10.5--
+string(%d) "contents read"
+
+--float 12.3456789000e10--
+string(%d) "contents read"
+
+--float -12.3456789000e10--
+string(%d) "contents read"
+
+--float .5--
+string(%d) "contents read"
+
+--empty array--
+Error: 2 - file_get_contents() expects parameter 2 to be boolean, array given, %s(%d)
+NULL
+
+--int indexed array--
+Error: 2 - file_get_contents() expects parameter 2 to be boolean, array given, %s(%d)
+NULL
+
+--associative array--
+Error: 2 - file_get_contents() expects parameter 2 to be boolean, array given, %s(%d)
+NULL
+
+--nested arrays--
+Error: 2 - file_get_contents() expects parameter 2 to be boolean, array given, %s(%d)
+NULL
+
+--uppercase NULL--
+string(%d) "contents read"
+
+--lowercase null--
+string(%d) "contents read"
+
+--lowercase true--
+string(%d) "contents read"
+
+--lowercase false--
+string(%d) "contents read"
+
+--uppercase TRUE--
+string(%d) "contents read"
+
+--uppercase FALSE--
+string(%d) "contents read"
+
+--empty string DQ--
+string(%d) "contents read"
+
+--empty string SQ--
+string(%d) "contents read"
+
+--string DQ--
+string(%d) "contents read"
+
+--string SQ--
+string(%d) "contents read"
+
+--mixed case string--
+string(%d) "contents read"
+
+--heredoc--
+string(%d) "contents read"
+
+--instance of classWithToString--
+Error: 2 - file_get_contents() expects parameter 2 to be boolean, object given, %s(%d)
+NULL
+
+--instance of classWithoutToString--
+Error: 2 - file_get_contents() expects parameter 2 to be boolean, object given, %s(%d)
+NULL
+
+--undefined var--
+string(%d) "contents read"
+
+--unset var--
+string(%d) "contents read"
+===DONE===
diff --git a/ext/standard/tests/file/file_get_contents_variation4.phpt b/ext/standard/tests/file/file_get_contents_variation4.phpt
new file mode 100644
index 000000000..3b494b449
--- /dev/null
+++ b/ext/standard/tests/file/file_get_contents_variation4.phpt
@@ -0,0 +1,251 @@
+--TEST--
+Test file_get_contents() function : usage variation - different types for context.
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])
+ * Description: Read the entire file into a string
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file_get_contents() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$filename = 'FileGetContentsVar4.tmp';
+$absFile = dirname(__FILE__).'/'.$filename;
+$h = fopen($absFile,"w");
+fwrite($h, "contents read");
+fclose($h);
+
+$fileRes = fopen(__FILE__,'r');
+$strContext = stream_context_create();
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ //non context resource
+ 'file resource' => $fileRes,
+
+ //valid stream context
+ 'stream context' => $strContext,
+);
+
+// loop through each element of the array for context
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( file_get_contents($absFile, false, $value) );
+};
+
+unlink($absFile);
+fclose($fileRes);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing file_get_contents() : usage variation ***
+
+--int 0--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, integer given, %s(%d)
+NULL
+
+--int 1--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, integer given, %s(%d)
+NULL
+
+--int 12345--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, integer given, %s(%d)
+NULL
+
+--int -12345--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, integer given, %s(%d)
+NULL
+
+--float 10.5--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, double given, %s(%d)
+NULL
+
+--float -10.5--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, double given, %s(%d)
+NULL
+
+--float 12.3456789000e10--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, double given, %s(%d)
+NULL
+
+--float -12.3456789000e10--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, double given, %s(%d)
+NULL
+
+--float .5--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, double given, %s(%d)
+NULL
+
+--empty array--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, array given, %s(%d)
+NULL
+
+--int indexed array--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, array given, %s(%d)
+NULL
+
+--associative array--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, array given, %s(%d)
+NULL
+
+--nested arrays--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, array given, %s(%d)
+NULL
+
+--uppercase NULL--
+string(%d) "contents read"
+
+--lowercase null--
+string(%d) "contents read"
+
+--lowercase true--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, boolean given, %s(%d)
+NULL
+
+--lowercase false--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, boolean given, %s(%d)
+NULL
+
+--uppercase TRUE--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, boolean given, %s(%d)
+NULL
+
+--uppercase FALSE--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, boolean given, %s(%d)
+NULL
+
+--empty string DQ--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, string given, %s(%d)
+NULL
+
+--empty string SQ--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, string given, %s(%d)
+NULL
+
+--string DQ--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, string given, %s(%d)
+NULL
+
+--string SQ--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, string given, %s(%d)
+NULL
+
+--mixed case string--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, string given, %s(%d)
+NULL
+
+--heredoc--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, string given, %s(%d)
+NULL
+
+--instance of classWithToString--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, object given, %s(%d)
+NULL
+
+--instance of classWithoutToString--
+Error: 2 - file_get_contents() expects parameter 3 to be resource, object given, %s(%d)
+NULL
+
+--undefined var--
+string(%d) "contents read"
+
+--unset var--
+string(%d) "contents read"
+
+--file resource--
+Error: 2 - file_get_contents(): supplied resource is not a valid Stream-Context resource, %s(%d)
+string(%d) "contents read"
+
+--stream context--
+string(%d) "contents read"
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/file_get_contents_variation5.phpt b/ext/standard/tests/file/file_get_contents_variation5.phpt
new file mode 100644
index 000000000..9b400310c
--- /dev/null
+++ b/ext/standard/tests/file/file_get_contents_variation5.phpt
@@ -0,0 +1,222 @@
+--TEST--
+Test file_get_contents() function : usage variation
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])
+ * Description: Read the entire file into a string
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file_get_contents() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$filename = 'FileGetContentsVar5.tmp';
+$absFile = dirname(__FILE__).'/'.$filename;
+$h = fopen($absFile,"w");
+fwrite($h, "contents read");
+fclose($h);
+
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for offset
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( file_get_contents($absFile, false, null, $value) );
+};
+
+unlink($absFile);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing file_get_contents() : usage variation ***
+
+--int 0--
+string(%d) "contents read"
+
+--int 1--
+string(%d) "ontents read"
+
+--int 12345--
+string(%d) ""
+
+--int -12345--
+string(%d) "contents read"
+
+--float 10.5--
+string(3) "ead"
+
+--float -10.5--
+string(%d) "contents read"
+
+--float 12.3456789000e10--
+string(%d) %s
+
+--float -12.3456789000e10--
+string(%d) %s
+
+--float .5--
+string(%d) "contents read"
+
+--empty array--
+Error: 2 - file_get_contents() expects parameter 4 to be long, array given, %s(%d)
+NULL
+
+--int indexed array--
+Error: 2 - file_get_contents() expects parameter 4 to be long, array given, %s(%d)
+NULL
+
+--associative array--
+Error: 2 - file_get_contents() expects parameter 4 to be long, array given, %s(%d)
+NULL
+
+--nested arrays--
+Error: 2 - file_get_contents() expects parameter 4 to be long, array given, %s(%d)
+NULL
+
+--uppercase NULL--
+string(%d) "contents read"
+
+--lowercase null--
+string(%d) "contents read"
+
+--lowercase true--
+string(12) "ontents read"
+
+--lowercase false--
+string(%d) "contents read"
+
+--uppercase TRUE--
+string(12) "ontents read"
+
+--uppercase FALSE--
+string(%d) "contents read"
+
+--empty string DQ--
+Error: 2 - file_get_contents() expects parameter 4 to be long, string given, %s(%d)
+NULL
+
+--empty string SQ--
+Error: 2 - file_get_contents() expects parameter 4 to be long, string given, %s(%d)
+NULL
+
+--string DQ--
+Error: 2 - file_get_contents() expects parameter 4 to be long, string given, %s(%d)
+NULL
+
+--string SQ--
+Error: 2 - file_get_contents() expects parameter 4 to be long, string given, %s(%d)
+NULL
+
+--mixed case string--
+Error: 2 - file_get_contents() expects parameter 4 to be long, string given, %s(%d)
+NULL
+
+--heredoc--
+Error: 2 - file_get_contents() expects parameter 4 to be long, string given, %s(%d)
+NULL
+
+--instance of classWithToString--
+Error: 2 - file_get_contents() expects parameter 4 to be long, object given, %s(%d)
+NULL
+
+--instance of classWithoutToString--
+Error: 2 - file_get_contents() expects parameter 4 to be long, object given, %s(%d)
+NULL
+
+--undefined var--
+string(%d) "contents read"
+
+--unset var--
+string(%d) "contents read"
+===DONE===
diff --git a/ext/standard/tests/file/file_get_contents_variation6.phpt b/ext/standard/tests/file/file_get_contents_variation6.phpt
new file mode 100644
index 000000000..6795e0165
--- /dev/null
+++ b/ext/standard/tests/file/file_get_contents_variation6.phpt
@@ -0,0 +1,215 @@
+--TEST--
+Test file_get_contents() function : usage variation
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])
+ * Description: Read the entire file into a string
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file_get_contents() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$filename = 'FileGetContentsVar5.tmp';
+$absFile = dirname(__FILE__).'/'.$filename;
+$h = fopen($absFile,"w");
+fwrite($h, "contents read");
+fclose($h);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for maxlen
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( file_get_contents($absFile, false, null, 0, $value) );
+};
+
+unlink($absFile);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing file_get_contents() : usage variation ***
+
+--int 0--
+string(%d) ""
+
+--int 1--
+string(%d) "c"
+
+--int 12345--
+string(%d) "contents read"
+
+--int -12345--
+Error: 2 - file_get_contents(): length must be greater than or equal to zero, %s(%d)
+bool(false)
+
+--float 10.5--
+string(%d) "contents r"
+
+--float -10.5--
+Error: 2 - file_get_contents(): length must be greater than or equal to zero, %s(%d)
+bool(false)
+
+--float .5--
+string(%d) ""
+
+--empty array--
+Error: 2 - file_get_contents() expects parameter 5 to be long, array given, %s(%d)
+NULL
+
+--int indexed array--
+Error: 2 - file_get_contents() expects parameter 5 to be long, array given, %s(%d)
+NULL
+
+--associative array--
+Error: 2 - file_get_contents() expects parameter 5 to be long, array given, %s(%d)
+NULL
+
+--nested arrays--
+Error: 2 - file_get_contents() expects parameter 5 to be long, array given, %s(%d)
+NULL
+
+--uppercase NULL--
+string(%d) ""
+
+--lowercase null--
+string(%d) ""
+
+--lowercase true--
+string(%d) "c"
+
+--lowercase false--
+string(%d) ""
+
+--uppercase TRUE--
+string(%d) "c"
+
+--uppercase FALSE--
+string(%d) ""
+
+--empty string DQ--
+Error: 2 - file_get_contents() expects parameter 5 to be long, string given, %s(%d)
+NULL
+
+--empty string SQ--
+Error: 2 - file_get_contents() expects parameter 5 to be long, string given, %s(%d)
+NULL
+
+--string DQ--
+Error: 2 - file_get_contents() expects parameter 5 to be long, string given, %s(%d)
+NULL
+
+--string SQ--
+Error: 2 - file_get_contents() expects parameter 5 to be long, string given, %s(%d)
+NULL
+
+--mixed case string--
+Error: 2 - file_get_contents() expects parameter 5 to be long, string given, %s(%d)
+NULL
+
+--heredoc--
+Error: 2 - file_get_contents() expects parameter 5 to be long, string given, %s(%d)
+NULL
+
+--instance of classWithToString--
+Error: 2 - file_get_contents() expects parameter 5 to be long, object given, %s(%d)
+NULL
+
+--instance of classWithoutToString--
+Error: 2 - file_get_contents() expects parameter 5 to be long, object given, %s(%d)
+NULL
+
+--undefined var--
+string(%d) ""
+
+--unset var--
+string(%d) ""
+===DONE===
diff --git a/ext/standard/tests/file/file_get_contents_variation7-win32.phpt b/ext/standard/tests/file/file_get_contents_variation7-win32.phpt
new file mode 100644
index 000000000..d350b4b03
--- /dev/null
+++ b/ext/standard/tests/file/file_get_contents_variation7-win32.phpt
@@ -0,0 +1,115 @@
+--TEST--
+Test file_get_contents() function : variation - various absolute and relative paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Only run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])
+ * Description: Read the entire file into a string
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file_get_contents() : variation ***\n";
+$mainDir = "fileGetContentsVar7.dir";
+$subDir = "fileGetContentsVar7Sub";
+$absMainDir = dirname(__FILE__)."\\".$mainDir;
+mkdir($absMainDir);
+$absSubDir = $absMainDir."\\".$subDir;
+mkdir($absSubDir);
+
+$old_dir_path = getcwd();
+chdir(dirname(__FILE__));
+$unixifiedDir = '/'.substr(str_replace('\\','/',$absSubDir),3);
+
+$allDirs = array(
+ // absolute paths
+ "$absSubDir\\",
+ "$absSubDir\\..\\".$subDir,
+ "$absSubDir\\\\..\\.\\".$subDir,
+ "$absSubDir\\..\\..\\".$mainDir."\\.\\".$subDir,
+ "$absSubDir\\..\\\\\\".$subDir."\\\\..\\\\..\\".$subDir,
+ "$absSubDir\\BADDIR",
+
+ // relative paths
+ $mainDir."\\".$subDir,
+ $mainDir."\\\\".$subDir,
+ $mainDir."\\\\\\".$subDir,
+ ".\\".$mainDir."\\..\\".$mainDir."\\".$subDir,
+ "BADDIR",
+
+ // unixifed path
+ $unixifiedDir,
+);
+
+$filename = 'FileGetContentsVar7.tmp';
+$absFile = $absSubDir.'/'.$filename;
+$h = fopen($absFile,"w");
+fwrite($h, "contents read");
+fclose($h);
+
+for($i = 0; $i<count($allDirs); $i++) {
+ $j = $i+1;
+ $dir = $allDirs[$i];
+ echo "\n-- Iteration $j --\n";
+ var_dump(file_get_contents($dir."\\".$filename));
+}
+
+unlink($absFile);
+chdir($old_dir_path);
+rmdir($absSubDir);
+rmdir($absMainDir);
+
+echo "\n*** Done ***\n";
+?>
+--EXPECTF--
+*** Testing file_get_contents() : variation ***
+
+-- Iteration 1 --
+string(%d) "contents read"
+
+-- Iteration 2 --
+string(%d) "contents read"
+
+-- Iteration 3 --
+string(%d) "contents read"
+
+-- Iteration 4 --
+string(%d) "contents read"
+
+-- Iteration 5 --
+
+Warning: file_get_contents(%sfileGetContentsVar7.dir\fileGetContentsVar7Sub\..\\\fileGetContentsVar7Sub\\..\\..\fileGetContentsVar7Sub\FileGetContentsVar7.tmp): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Warning: file_get_contents(%sfileGetContentsVar7.dir\fileGetContentsVar7Sub\BADDIR\FileGetContentsVar7.tmp): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+string(%d) "contents read"
+
+-- Iteration 8 --
+string(%d) "contents read"
+
+-- Iteration 9 --
+string(%d) "contents read"
+
+-- Iteration 10 --
+string(%d) "contents read"
+
+-- Iteration 11 --
+
+Warning: file_get_contents(BADDIR\FileGetContentsVar7.tmp): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+-- Iteration 12 --
+string(%d) "contents read"
+
+*** Done *** \ No newline at end of file
diff --git a/ext/standard/tests/file/file_get_contents_variation7.phpt b/ext/standard/tests/file/file_get_contents_variation7.phpt
new file mode 100644
index 000000000..17c55b613
--- /dev/null
+++ b/ext/standard/tests/file/file_get_contents_variation7.phpt
@@ -0,0 +1,104 @@
+--TEST--
+Test file_get_contents() function : variation - various absolute and relative paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])
+ * Description: Read the entire file into a string
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file_get_contents() : variation ***\n";
+$mainDir = "fileGetContentsVar7.dir";
+$subDir = "fileGetContentsVar7Sub";
+$absMainDir = dirname(__FILE__)."/".$mainDir;
+mkdir($absMainDir);
+$absSubDir = $absMainDir."/".$subDir;
+mkdir($absSubDir);
+
+$old_dir_path = getcwd();
+chdir(dirname(__FILE__));
+
+$allDirs = array(
+ // absolute paths
+ "$absSubDir/",
+ "$absSubDir/../".$subDir,
+ "$absSubDir//.././".$subDir,
+ "$absSubDir/../../".$mainDir."/./".$subDir,
+ "$absSubDir/..///".$subDir."//..//../".$subDir,
+ "$absSubDir/BADDIR",
+
+ // relative paths
+ $mainDir."/".$subDir,
+ $mainDir."//".$subDir,
+ $mainDir."///".$subDir,
+ "./".$mainDir."/../".$mainDir."/".$subDir,
+ "BADDIR",
+
+);
+
+$filename = 'FileGetContentsVar7.tmp';
+$absFile = $absSubDir.'/'.$filename;
+$h = fopen($absFile,"w");
+fwrite($h, "contents read");
+fclose($h);
+
+for($i = 0; $i<count($allDirs); $i++) {
+ $j = $i+1;
+ $dir = $allDirs[$i];
+ echo "\n-- Iteration $j --\n";
+ var_dump(file_get_contents($dir."/".$filename));
+}
+
+chdir($old_dir_path);
+unlink($absFile);
+rmdir($absSubDir);
+rmdir($absMainDir);
+
+echo "\n*** Done ***\n";
+?>
+--EXPECTF--
+*** Testing file_get_contents() : variation ***
+
+-- Iteration 1 --
+string(%d) "contents read"
+
+-- Iteration 2 --
+string(%d) "contents read"
+
+-- Iteration 3 --
+string(%d) "contents read"
+
+-- Iteration 4 --
+string(%d) "contents read"
+
+-- Iteration 5 --
+
+Warning: file_get_contents(%sfileGetContentsVar7.dir/fileGetContentsVar7Sub/..///fileGetContentsVar7Sub//..//../fileGetContentsVar7Sub/FileGetContentsVar7.tmp): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Warning: file_get_contents(%sfileGetContentsVar7.dir/fileGetContentsVar7Sub/BADDIR/FileGetContentsVar7.tmp): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+string(%d) "contents read"
+
+-- Iteration 8 --
+string(%d) "contents read"
+
+-- Iteration 9 --
+string(%d) "contents read"
+
+-- Iteration 10 --
+string(%d) "contents read"
+
+-- Iteration 11 --
+
+Warning: file_get_contents(BADDIR/FileGetContentsVar7.tmp): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+*** Done ***
diff --git a/ext/standard/tests/file/file_get_contents_variation8-win32.phpt b/ext/standard/tests/file/file_get_contents_variation8-win32.phpt
new file mode 100644
index 000000000..8598f4335
--- /dev/null
+++ b/ext/standard/tests/file/file_get_contents_variation8-win32.phpt
@@ -0,0 +1,97 @@
+--TEST--
+Test file_get_contents() function : variation - obscure filenames
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Only run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])
+ * Description: Read the entire file into a string
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file_get_contents() : variation ***\n";
+
+/* An array of filenames */
+$names_arr = array(
+ /* Invalid args */
+ "-1" => -1,
+ "TRUE" => TRUE,
+ "FALSE" => FALSE,
+ "NULL" => NULL,
+ "\"\"" => "",
+ "\" \"" => " ",
+ "\\0" => "\0",
+ "array()" => array(),
+
+ /* prefix with path separator of a non existing directory*/
+ "/no/such/file/dir" => "/no/such/file/dir",
+ "php/php"=> "php/php"
+
+);
+
+foreach($names_arr as $key =>$value) {
+ echo "\n-- Filename: $key --\n";
+ var_dump(file_get_contents($value));
+}
+
+?>
+===Done===
+--EXPECTF--
+*** Testing file_get_contents() : variation ***
+
+-- Filename: -1 --
+
+Warning: file_get_contents(-1): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+-- Filename: TRUE --
+
+Warning: file_get_contents(1): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+-- Filename: FALSE --
+
+Warning: file_get_contents(): Filename cannot be empty in %s on line %d
+bool(false)
+
+-- Filename: NULL --
+
+Warning: file_get_contents(): Filename cannot be empty in %s on line %d
+bool(false)
+
+-- Filename: "" --
+
+Warning: file_get_contents(): Filename cannot be empty in %s on line %d
+bool(false)
+
+-- Filename: " " --
+
+Warning: file_get_contents( ): failed to open stream: Permission denied in %s on line %d
+bool(false)
+
+-- Filename: \0 --
+
+Warning: file_get_contents(): Filename cannot be empty in %s on line %d
+bool(false)
+
+-- Filename: array() --
+
+Warning: file_get_contents() expects parameter 1 to be string, array given in %s on line %d
+NULL
+
+-- Filename: /no/such/file/dir --
+
+Warning: file_get_contents(/no/such/file/dir): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+-- Filename: php/php --
+
+Warning: file_get_contents(php/php): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/file/file_get_contents_variation8.phpt b/ext/standard/tests/file/file_get_contents_variation8.phpt
new file mode 100644
index 000000000..c7d1c171e
--- /dev/null
+++ b/ext/standard/tests/file/file_get_contents_variation8.phpt
@@ -0,0 +1,87 @@
+--TEST--
+Test file_get_contents() function : variation - obscure filenames
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip Do not run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])
+ * Description: Read the entire file into a string
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file_get_contents() : variation ***\n";
+/* An array of filenames */
+$names_arr = array(
+ /* Invalid args */
+ -1,
+ TRUE,
+ FALSE,
+ NULL,
+ "",
+ " ",
+ "\0",
+ array(),
+
+ /* prefix with path separator of a non existing directory*/
+ "/no/such/file/dir",
+ "php/php"
+
+);
+
+for( $i=0; $i<count($names_arr); $i++ ) {
+ echo "-- Iteration $i --\n";
+ var_dump(file_get_contents($names_arr[$i]));
+}
+
+echo "\n*** Done ***\n";
+?>
+--EXPECTF--
+*** Testing file_get_contents() : variation ***
+-- Iteration 0 --
+
+Warning: file_get_contents(-1): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+-- Iteration 1 --
+
+Warning: file_get_contents(1): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+-- Iteration 2 --
+
+Warning: file_get_contents(): Filename cannot be empty in %s on line %d
+bool(false)
+-- Iteration 3 --
+
+Warning: file_get_contents(): Filename cannot be empty in %s on line %d
+bool(false)
+-- Iteration 4 --
+
+Warning: file_get_contents(): Filename cannot be empty in %s on line %d
+bool(false)
+-- Iteration 5 --
+
+Warning: file_get_contents( ): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+-- Iteration 6 --
+
+Warning: file_get_contents(): Filename cannot be empty in %s on line %d
+bool(false)
+-- Iteration 7 --
+
+Warning: file_get_contents() expects parameter 1 to be string, array given in %s on line %d
+NULL
+-- Iteration 8 --
+
+Warning: file_get_contents(/no/such/file/dir): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+-- Iteration 9 --
+
+Warning: file_get_contents(php/php): failed to open stream: %s in %s on line %d
+bool(false)
+
+*** Done ***
diff --git a/ext/standard/tests/file/file_get_contents_variation9.phpt b/ext/standard/tests/file/file_get_contents_variation9.phpt
new file mode 100644
index 000000000..988a3102d
--- /dev/null
+++ b/ext/standard/tests/file/file_get_contents_variation9.phpt
@@ -0,0 +1,56 @@
+--TEST--
+Test file_get_contents() function : variation - linked files
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip Do not run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])
+ * Description: Read the entire file into a string
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file_get_contents() : variation ***\n";
+$filename = dirname(__FILE__).'/fileGetContentsVar9.tmp';
+$softlink = dirname(__FILE__).'/fileGetContentsVar9.SoftLink';
+$hardlink = dirname(__FILE__).'/fileGetContentsVar9.HardLink';
+$chainlink = dirname(__FILE__).'/fileGetContentsVar9.ChainLink';
+
+// create file
+$h = fopen($filename,"w");
+//Data should be more than the size of a link.
+for ($i = 1; $i <= 10; $i++) {
+ fwrite($h, "Here is a repeated amount of data");
+}
+fclose($h);
+
+// link files
+link($filename, $hardlink);
+symlink($filename, $softlink);
+symlink($softlink, $chainlink);
+
+// perform tests
+var_dump(file_get_contents($chainlink));
+var_dump(file_get_contents($softlink));
+var_dump(file_get_contents($hardlink));
+
+unlink($chainlink);
+unlink($softlink);
+unlink($hardlink);
+unlink($filename);
+
+echo "\n*** Done ***\n";
+?>
+--EXPECTF--
+*** Testing file_get_contents() : variation ***
+string(330) "Here is a repeated amount of data%s"
+string(330) "Here is a repeated amount of data%s"
+string(330) "Here is a repeated amount of data%s"
+
+*** Done ***
+
diff --git a/ext/standard/tests/file/file_put_contents_variation1.phpt b/ext/standard/tests/file/file_put_contents_variation1.phpt
new file mode 100644
index 000000000..35d193095
--- /dev/null
+++ b/ext/standard/tests/file/file_put_contents_variation1.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test file_put_contents() function : variation - test append flag
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : int file_put_contents(string file, mixed data [, int flags [, resource context]])
+ * Description: Write/Create a file with contents data and return the number of bytes written
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file_put_contents() : variation ***\n";
+
+$filename = "FilePutContentsVar1.tmp";
+
+$data = "The first string to write";
+$extra = ", followed by this";
+
+var_dump(file_put_contents($filename, $data));
+var_dump(file_put_contents($filename, $extra, FILE_APPEND));
+echo filesize($filename)."\n";
+readfile($filename);
+echo "\n";
+clearstatcache();
+file_put_contents($filename, $data);
+echo filesize($filename)."\n";
+readfile($filename);
+echo "\n";
+unlink($filename);
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing file_put_contents() : variation ***
+int(25)
+int(18)
+43
+The first string to write, followed by this
+25
+The first string to write
+===DONE===
diff --git a/ext/standard/tests/file/file_put_contents_variation2.phpt b/ext/standard/tests/file/file_put_contents_variation2.phpt
new file mode 100644
index 000000000..dccb96792
--- /dev/null
+++ b/ext/standard/tests/file/file_put_contents_variation2.phpt
@@ -0,0 +1,167 @@
+--TEST--
+Test file_put_contents() function : usage variation - different data types to write
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : int file_put_contents(string file, mixed data [, int flags [, resource context]])
+ * Description: Write/Create a file with contents data and return the number of bytes written
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file_put_contents() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+
+$filename = 'fwriteVar5.tmp';
+
+
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for str
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ file_put_contents($filename, $value);
+ readfile($filename);
+};
+unlink($filename);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing file_put_contents() : usage variation ***
+
+--int 0--
+0
+--int 1--
+1
+--int 12345--
+12345
+--int -12345--
+-2345
+--float 10.5--
+10.5
+--float -10.5--
+-10.5
+--float 12.3456789000e10--
+123456789000
+--float -12.3456789000e10--
+-123456789000
+--float .5--
+0.5
+--empty array--
+
+--int indexed array--
+123
+--associative array--
+12
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 8 - Array to string conversion, %s(%d)
+fooArrayArray
+--uppercase NULL--
+
+--lowercase null--
+
+--lowercase true--
+1
+--lowercase false--
+
+--uppercase TRUE--
+1
+--uppercase FALSE--
+
+--empty string DQ--
+
+--empty string SQ--
+
+--instance of classWithToString--
+Class A object
+--instance of classWithoutToString--
+
+--undefined var--
+
+--unset var--
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/file_put_contents_variation3.phpt b/ext/standard/tests/file/file_put_contents_variation3.phpt
new file mode 100644
index 000000000..e16f6403c
--- /dev/null
+++ b/ext/standard/tests/file/file_put_contents_variation3.phpt
@@ -0,0 +1,250 @@
+--TEST--
+Test file_put_contents() function : usage variation - different types for context.
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : int file_put_contents(string file, mixed data [, int flags [, resource context]])
+ * Description: Write/Create a file with contents data and return the number of bytes written
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file_put_contents() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$filename = 'FilePutContentsVar4.tmp';
+$absFile = dirname(__FILE__).'/'.$filename;
+
+$fileRes = fopen(__FILE__,'r');
+$strContext = stream_context_create();
+
+$data = "data to write";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ //non context resource
+ 'file resource' => $fileRes,
+
+ //valid stream context
+ 'stream context' => $strContext,
+);
+
+// loop through each element of the array for context
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( file_put_contents($absFile, $data, null, $value) );
+};
+
+unlink($absFile);
+fclose($fileRes);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing file_put_contents() : usage variation ***
+
+--int 0--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, integer given, %s(%d)
+NULL
+
+--int 1--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, integer given, %s(%d)
+NULL
+
+--int 12345--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, integer given, %s(%d)
+NULL
+
+--int -12345--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, integer given, %s(%d)
+NULL
+
+--float 10.5--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, double given, %s(%d)
+NULL
+
+--float -10.5--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, double given, %s(%d)
+NULL
+
+--float 12.3456789000e10--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, double given, %s(%d)
+NULL
+
+--float -12.3456789000e10--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, double given, %s(%d)
+NULL
+
+--float .5--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, double given, %s(%d)
+NULL
+
+--empty array--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, array given, %s(%d)
+NULL
+
+--int indexed array--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, array given, %s(%d)
+NULL
+
+--associative array--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, array given, %s(%d)
+NULL
+
+--nested arrays--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, array given, %s(%d)
+NULL
+
+--uppercase NULL--
+int(13)
+
+--lowercase null--
+int(13)
+
+--lowercase true--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, boolean given, %s(%d)
+NULL
+
+--lowercase false--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, boolean given, %s(%d)
+NULL
+
+--uppercase TRUE--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, boolean given, %s(%d)
+NULL
+
+--uppercase FALSE--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, boolean given, %s(%d)
+NULL
+
+--empty string DQ--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, string given, %s(%d)
+NULL
+
+--empty string SQ--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, string given, %s(%d)
+NULL
+
+--string DQ--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, string given, %s(%d)
+NULL
+
+--string SQ--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, string given, %s(%d)
+NULL
+
+--mixed case string--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, string given, %s(%d)
+NULL
+
+--heredoc--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, string given, %s(%d)
+NULL
+
+--instance of classWithToString--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, object given, %s(%d)
+NULL
+
+--instance of classWithoutToString--
+Error: 2 - file_put_contents() expects parameter 4 to be resource, object given, %s(%d)
+NULL
+
+--undefined var--
+int(13)
+
+--unset var--
+int(13)
+
+--file resource--
+Error: 2 - file_put_contents(): supplied resource is not a valid Stream-Context resource, %s(%d)
+int(13)
+
+--stream context--
+int(13)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/file_put_contents_variation4.phpt b/ext/standard/tests/file/file_put_contents_variation4.phpt
new file mode 100644
index 000000000..15fdceb8d
--- /dev/null
+++ b/ext/standard/tests/file/file_put_contents_variation4.phpt
@@ -0,0 +1,53 @@
+--TEST--
+Test file_put_contents() function : variation - include path testing
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : int file_put_contents(string file, mixed data [, int flags [, resource context]])
+ * Description: Write/Create a file with contents data and return the number of bytes written
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file_put_contents() : variation ***\n";
+
+require_once('fopen_include_path.inc');
+
+// this doesn't create the include dirs in this directory
+// we change to this to ensure we are not part of the
+// include paths.
+$thisTestDir = "filePutContentsVar4.dir";
+mkdir($thisTestDir);
+chdir($thisTestDir);
+
+$filename = "afile.txt";
+$firstFile = $dir1."/".$filename;
+
+$newpath = create_include_path();
+set_include_path($newpath);
+runtest();
+$newpath = generate_next_path();
+set_include_path($newpath);
+runtest();
+teardown_include_path();
+restore_include_path();
+chdir("..");
+rmdir($thisTestDir);
+
+
+function runtest() {
+ global $firstFile, $filename;
+ file_put_contents($filename, "File in include path", FILE_USE_INCLUDE_PATH);
+ $line = file_get_contents($firstFile);
+ echo "$line\n";
+ unlink($firstFile);
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing file_put_contents() : variation ***
+File in include path
+File in include path
+===DONE===
diff --git a/ext/standard/tests/file/file_put_contents_variation5.phpt b/ext/standard/tests/file/file_put_contents_variation5.phpt
new file mode 100644
index 000000000..d4ccacc25
--- /dev/null
+++ b/ext/standard/tests/file/file_put_contents_variation5.phpt
@@ -0,0 +1,58 @@
+--TEST--
+Test file_put_contents() function : variation - include path testing
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : int file_put_contents(string file, mixed data [, int flags [, resource context]])
+ * Description: Write/Create a file with contents data and return the number of bytes written
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file_put_contents() : variation ***\n";
+
+require_once('fopen_include_path.inc');
+
+// this doesn't create the include dirs in this directory
+// we change to this to ensure we are not part of the
+// include paths.
+$thisTestDir = "fileGetContentsVar7.dir";
+mkdir($thisTestDir);
+chdir($thisTestDir);
+
+$filename = "readFileVar7.tmp";
+$scriptLocFile = dirname(__FILE__)."/".$filename;
+
+$newpath = "rubbish";
+set_include_path($newpath);
+runtest();
+$newpath = "";
+set_include_path($newpath);
+runtest();
+set_include_path(null);
+runtest();
+set_include_path(";; ; ;c:\\rubbish");
+runtest();
+chdir("..");
+rmdir($thisTestDir);
+
+
+function runtest() {
+ global $scriptLocFile, $filename;
+ file_put_contents($filename, "File in script location", FILE_USE_INCLUDE_PATH);
+ $line = file_get_contents($scriptLocFile);
+ echo "$line\n";
+ unlink($scriptLocFile);
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing file_put_contents() : variation ***
+File in script location
+File in script location
+File in script location
+File in script location
+===DONE===
+
diff --git a/ext/standard/tests/file/file_put_contents_variation6.phpt b/ext/standard/tests/file/file_put_contents_variation6.phpt
new file mode 100644
index 000000000..dbe6c9daa
--- /dev/null
+++ b/ext/standard/tests/file/file_put_contents_variation6.phpt
@@ -0,0 +1,54 @@
+--TEST--
+Test file_put_contents() function : variation - include path testing
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : int file_put_contents(string file, mixed data [, int flags [, resource context]])
+ * Description: Write/Create a file with contents data and return the number of bytes written
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file_put_contents() : variation ***\n";
+
+require_once('fopen_include_path.inc');
+
+// this doesn't create the include dirs in this directory
+// we change to this to ensure we are not part of the
+// include paths.
+$thisTestDir = "filePutContentsVar6.dir";
+mkdir($thisTestDir);
+chdir($thisTestDir);
+
+$filename = "afile.txt";
+$firstFile = $dir1."/".$filename;
+
+$newpath = create_include_path();
+set_include_path($newpath);
+runtest();
+$newpath = generate_next_path();
+set_include_path($newpath);
+runtest();
+teardown_include_path();
+restore_include_path();
+chdir("..");
+rmdir($thisTestDir);
+
+
+function runtest() {
+ global $firstFile, $filename;
+ file_put_contents($filename, "File in include path", FILE_USE_INCLUDE_PATH);
+ file_put_contents($filename, ". This was appended", FILE_USE_INCLUDE_PATH | FILE_APPEND);
+ $line = file_get_contents($firstFile);
+ echo "$line\n";
+ unlink($firstFile);
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing file_put_contents() : variation ***
+File in include path. This was appended
+File in include path. This was appended
+===DONE===
diff --git a/ext/standard/tests/file/file_put_contents_variation7-win32.phpt b/ext/standard/tests/file/file_put_contents_variation7-win32.phpt
new file mode 100644
index 000000000..d7bfdf923
--- /dev/null
+++ b/ext/standard/tests/file/file_put_contents_variation7-win32.phpt
@@ -0,0 +1,130 @@
+--TEST--
+Test file_put_contents() function : usage variation - various absolute and relative paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Only run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : int file_put_contents(string file, mixed data [, int flags [, resource context]])
+ * Description: Write/Create a file with contents data and return the number of bytes written
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file_put_contents() : usage variation ***\n";
+
+$mainDir = "filePutContentsVar7.dir";
+$subDir = "filePutContentsVar7Sub";
+$absMainDir = dirname(__FILE__)."/".$mainDir;
+mkdir($absMainDir);
+$absSubDir = $absMainDir."\\".$subDir;
+mkdir($absSubDir);
+
+$old_dir_path = getcwd();
+chdir(dirname(__FILE__));
+$unixifiedDir = '/'.substr(str_replace('\\','/',$absSubDir),3);
+
+
+// Note invalid dirs in p8 result in (The system cannot find the path specified.)
+// rather than No Such File or Directory in php.net
+$allDirs = array(
+ // absolute paths
+ "$absSubDir\\",
+ "$absSubDir\\..\\".$subDir,
+ "$absSubDir\\\\..\\.\\".$subDir,
+ "$absSubDir\\..\\..\\".$mainDir."\\.\\".$subDir,
+ "$absSubDir\\..\\\\\\".$subDir."\\\\..\\\\..\\".$subDir,
+ "$absSubDir\\BADDIR",
+
+ // relative paths
+ $mainDir."\\".$subDir,
+ $mainDir."\\\\".$subDir,
+ $mainDir."\\\\\\".$subDir,
+ ".\\".$mainDir."\\..\\".$mainDir."\\".$subDir,
+ "BADDIR",
+
+ // unixifed path
+ $unixifiedDir,
+);
+
+$filename = 'FileGetContentsVar7.tmp';
+$absFile = $absSubDir.'/'.$filename;
+$data = "This was the written data";
+
+for($i = 0; $i<count($allDirs); $i++) {
+ $j = $i+1;
+ $dir = $allDirs[$i];
+ echo "\n-- Iteration $j --\n";
+ $res = file_put_contents($dir."\\".$filename, ($data + $i));
+ if ($res !== false) {
+ $in = file_get_contents($absFile);
+ if ($in == ($data + $i)) {
+ echo "Data written correctly\n";
+ }
+ else {
+ echo "Data not written correctly or to correct place\n";
+ }
+ unlink($dir."/".$filename);
+ }
+ else {
+ echo "No data written\n";
+ }
+
+}
+
+chdir($old_dir_path);
+rmdir($absSubDir);
+rmdir($absMainDir);
+
+echo "\n*** Done ***\n";
+?>
+--EXPECTF--
+*** Testing file_put_contents() : usage variation ***
+
+-- Iteration 1 --
+Data written correctly
+
+-- Iteration 2 --
+Data written correctly
+
+-- Iteration 3 --
+Data written correctly
+
+-- Iteration 4 --
+Data written correctly
+
+-- Iteration 5 --
+
+Warning: file_put_contents(%sfilePutContentsVar7.dir\filePutContentsVar7Sub\..\\\filePutContentsVar7Sub\\..\\..\filePutContentsVar7Sub\FileGetContentsVar7.tmp): failed to open stream: %s in %s on line %d
+No data written
+
+-- Iteration 6 --
+
+Warning: file_put_contents(%sfilePutContentsVar7.dir\filePutContentsVar7Sub\BADDIR\FileGetContentsVar7.tmp): failed to open stream: %s in %s on line %d
+No data written
+
+-- Iteration 7 --
+Data written correctly
+
+-- Iteration 8 --
+Data written correctly
+
+-- Iteration 9 --
+Data written correctly
+
+-- Iteration 10 --
+Data written correctly
+
+-- Iteration 11 --
+
+Warning: file_put_contents(BADDIR\FileGetContentsVar7.tmp): failed to open stream: %s in %s on line %d
+No data written
+
+-- Iteration 12 --
+Data written correctly
+
+*** Done *** \ No newline at end of file
diff --git a/ext/standard/tests/file/file_put_contents_variation7.phpt b/ext/standard/tests/file/file_put_contents_variation7.phpt
new file mode 100644
index 000000000..5c8e5f360
--- /dev/null
+++ b/ext/standard/tests/file/file_put_contents_variation7.phpt
@@ -0,0 +1,119 @@
+--TEST--
+Test file_put_contents() function : usage variation - various absolute and relative paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : int file_put_contents(string file, mixed data [, int flags [, resource context]])
+ * Description: Write/Create a file with contents data and return the number of bytes written
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file_put_contents() : usage variation ***\n";
+
+$mainDir = "filePutContentsVar7.dir";
+$subDir = "filePutContentsVar7Sub";
+$absMainDir = dirname(__FILE__)."/".$mainDir;
+mkdir($absMainDir);
+$absSubDir = $absMainDir."/".$subDir;
+mkdir($absSubDir);
+
+$old_dir_path = getcwd();
+chdir(dirname(__FILE__));
+
+
+// Note invalid dirs in p8 result in (The system cannot find the path specified.)
+// rather than No Such File or Directory in php.net
+$allDirs = array(
+ // absolute paths
+ "$absSubDir/",
+ "$absSubDir/../".$subDir,
+ "$absSubDir//.././".$subDir,
+ "$absSubDir/../../".$mainDir."/./".$subDir,
+ "$absSubDir/..///".$subDir."//..//../".$subDir,
+ "$absSubDir/BADDIR",
+
+ // relative paths
+ $mainDir."/".$subDir,
+ $mainDir."//".$subDir,
+ $mainDir."///".$subDir,
+ "./".$mainDir."/../".$mainDir."/".$subDir,
+ "BADDIR",
+
+);
+
+$filename = 'FileGetContentsVar7.tmp';
+$absFile = $absSubDir.'/'.$filename;
+$data = "This was the written data";
+
+for($i = 0; $i<count($allDirs); $i++) {
+ $j = $i+1;
+ $dir = $allDirs[$i];
+ echo "\n-- Iteration $j --\n";
+ $res = file_put_contents($dir."/".$filename, ($data + $i));
+ if ($res !== false) {
+ $in = file_get_contents($absFile);
+ if ($in == ($data + $i)) {
+ echo "Data written correctly\n";
+ }
+ else {
+ echo "Data not written correctly or to correct place\n";
+ }
+ unlink($dir."/".$filename);
+ }
+ else {
+ echo "No data written\n";
+ }
+
+}
+
+chdir($old_dir_path);
+rmdir($absSubDir);
+rmdir($absMainDir);
+
+echo "\n*** Done ***\n";
+?>
+--EXPECTF--
+*** Testing file_put_contents() : usage variation ***
+
+-- Iteration 1 --
+Data written correctly
+
+-- Iteration 2 --
+Data written correctly
+
+-- Iteration 3 --
+Data written correctly
+
+-- Iteration 4 --
+Data written correctly
+
+-- Iteration 5 --
+
+Warning: file_put_contents(%sfilePutContentsVar7.dir/filePutContentsVar7Sub/..///filePutContentsVar7Sub//..//../filePutContentsVar7Sub/FileGetContentsVar7.tmp): failed to open stream: %s in %s on line %d
+No data written
+
+-- Iteration 6 --
+
+Warning: file_put_contents(%sfilePutContentsVar7.dir/filePutContentsVar7Sub/BADDIR/FileGetContentsVar7.tmp): failed to open stream: %s in %s on line %d
+No data written
+
+-- Iteration 7 --
+Data written correctly
+
+-- Iteration 8 --
+Data written correctly
+
+-- Iteration 9 --
+Data written correctly
+
+-- Iteration 10 --
+Data written correctly
+
+-- Iteration 11 --
+
+Warning: file_put_contents(BADDIR/FileGetContentsVar7.tmp): failed to open stream: %s in %s on line %d
+No data written
+
+*** Done *** \ No newline at end of file
diff --git a/ext/standard/tests/file/file_put_contents_variation8-win32.phpt b/ext/standard/tests/file/file_put_contents_variation8-win32.phpt
new file mode 100644
index 000000000..1609b10e1
--- /dev/null
+++ b/ext/standard/tests/file/file_put_contents_variation8-win32.phpt
@@ -0,0 +1,98 @@
+--TEST--
+Test file_put_contents() function : usage variation - obscure filenames
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Only run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : int file_put_contents(string file, mixed data [, int flags [, resource context]])
+ * Description: Write/Create a file with contents data and return the number of bytes written
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file_put_contents() : usage variation ***\n";
+
+/* An array of filenames */
+$names_arr = array(
+ "-1" => -1,
+ "TRUE" => TRUE,
+ "FALSE" => FALSE,
+ "NULL" => NULL,
+ "\"\"" => "",
+ "\" \"" => " ",
+ "\\0" => "\0",
+ "array()" => array(),
+
+ /* prefix with path separator of a non existing directory*/
+ "/no/such/file/dir" => "/no/such/file/dir",
+ "php/php"=> "php/php"
+
+);
+
+foreach($names_arr as $key =>$value) {
+ echo "\n-- Filename: $key --\n";
+ $res = file_put_contents($value, "Some data");
+ if ($res !== false && $res != null) {
+ echo "$res bytes written to: $value\n";
+ unlink($value);
+ } else {
+ echo "Failed to write data to: $key\n";
+ }
+};
+
+?>
+===Done===
+--EXPECTF--
+*** Testing file_put_contents() : usage variation ***
+
+-- Filename: -1 --
+9 bytes written to: -1
+
+-- Filename: TRUE --
+9 bytes written to: 1
+
+-- Filename: FALSE --
+
+Warning: file_put_contents(): Filename cannot be empty in %s on line %d
+Failed to write data to: FALSE
+
+-- Filename: NULL --
+
+Warning: file_put_contents(): Filename cannot be empty in %s on line %d
+Failed to write data to: NULL
+
+-- Filename: "" --
+
+Warning: file_put_contents(): Filename cannot be empty in %s on line %d
+Failed to write data to: ""
+
+-- Filename: " " --
+
+Warning: file_put_contents( ): failed to open stream: Permission denied in %s on line %d
+Failed to write data to: " "
+
+-- Filename: \0 --
+
+Warning: file_put_contents(): Filename cannot be empty in %s on line %d
+Failed to write data to: \0
+
+-- Filename: array() --
+
+Warning: file_put_contents() expects parameter 1 to be string, array given in %s on line %d
+Failed to write data to: array()
+
+-- Filename: /no/such/file/dir --
+
+Warning: file_put_contents(/no/such/file/dir): failed to open stream: %s in %s on line %d
+Failed to write data to: /no/such/file/dir
+
+-- Filename: php/php --
+
+Warning: file_put_contents(php/php): failed to open stream: %s in %s on line %d
+Failed to write data to: php/php
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/file/file_put_contents_variation8.phpt b/ext/standard/tests/file/file_put_contents_variation8.phpt
new file mode 100644
index 000000000..1407a81db
--- /dev/null
+++ b/ext/standard/tests/file/file_put_contents_variation8.phpt
Binary files differ
diff --git a/ext/standard/tests/file/file_put_contents_variation9.phpt b/ext/standard/tests/file/file_put_contents_variation9.phpt
new file mode 100644
index 000000000..7ad09c449
--- /dev/null
+++ b/ext/standard/tests/file/file_put_contents_variation9.phpt
@@ -0,0 +1,70 @@
+--TEST--
+est file_put_contents() function : usage variation - linked files
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip Do not run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : int file_put_contents(string file, mixed data [, int flags [, resource context]])
+ * Description: Write/Create a file with contents data and return the number of bytes written
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file_put_contents() : usage variation ***\n";
+
+$filename = dirname(__FILE__).'/fileGetContentsVar9.tmp';
+$softlink = dirname(__FILE__).'/fileGetContentsVar9.SoftLink';
+$hardlink = dirname(__FILE__).'/fileGetContentsVar9.HardLink';
+$chainlink = dirname(__FILE__).'/fileGetContentsVar9.ChainLink';
+
+
+// link files even though it original file doesn't exist yet
+symlink($filename, $softlink);
+symlink($softlink, $chainlink);
+
+
+// perform tests
+run_test($chainlink);
+run_test($softlink);
+
+//can only create a hardlink if the file exists.
+file_put_contents($filename,"");
+link($filename, $hardlink);
+run_test($hardlink);
+
+unlink($chainlink);
+unlink($softlink);
+unlink($hardlink);
+unlink($filename);
+
+
+function run_test($file) {
+ $data = "Here is some data";
+ $extra = ", more data";
+ var_dump(file_put_contents($file, $data));
+ var_dump(file_put_contents($file, $extra, FILE_APPEND));
+ readfile($file);
+ echo "\n";
+}
+
+
+echo "\n*** Done ***\n";
+?>
+--EXPECT--
+*** Testing file_put_contents() : usage variation ***
+int(17)
+int(11)
+Here is some data, more data
+int(17)
+int(11)
+Here is some data, more data
+int(17)
+int(11)
+Here is some data, more data
+
+*** Done ***
diff --git a/ext/standard/tests/file/file_variation2.phpt b/ext/standard/tests/file/file_variation2.phpt
new file mode 100644
index 000000000..f9c1ef840
--- /dev/null
+++ b/ext/standard/tests/file/file_variation2.phpt
@@ -0,0 +1,210 @@
+--TEST--
+Test file() function : first parameter variation
+--FILE--
+<?php
+/* Prototype : array file(string filename [, int flags[, resource context]])
+ * Description: Read entire file into an array
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted
+$flags = 0;
+$context = stream_context_create();
+
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for filename
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( file($value, $flags, $context) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing file() : usage variation ***
+
+--int 0--
+Error: 2 - file(0): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--int 1--
+Error: 2 - file(1): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - file(12345): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - file(-2345): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - file(10.5): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - file(-10.5): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - file(123456789000): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - file(-123456789000): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--float .5--
+Error: 2 - file(0.5): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--empty array--
+Error: 2 - file() expects parameter 1 to be string, array given, %s(%d)
+NULL
+
+--int indexed array--
+Error: 2 - file() expects parameter 1 to be string, array given, %s(%d)
+NULL
+
+--associative array--
+Error: 2 - file() expects parameter 1 to be string, array given, %s(%d)
+NULL
+
+--nested arrays--
+Error: 2 - file() expects parameter 1 to be string, array given, %s(%d)
+NULL
+
+--uppercase NULL--
+Error: 2 - file(): Filename cannot be empty, %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - file(): Filename cannot be empty, %s(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - file(1): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - file(): Filename cannot be empty, %s(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - file(1): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - file(): Filename cannot be empty, %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - file(): Filename cannot be empty, %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - file(): Filename cannot be empty, %s(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - file(Class A object): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - file() expects parameter 1 to be string, object given, %s(%d)
+NULL
+
+--undefined var--
+Error: 2 - file(): Filename cannot be empty, %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - file(): Filename cannot be empty, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/file/file_variation3.phpt b/ext/standard/tests/file/file_variation3.phpt
new file mode 100644
index 000000000..1dd8520a9
--- /dev/null
+++ b/ext/standard/tests/file/file_variation3.phpt
@@ -0,0 +1,294 @@
+--TEST--
+Test file() function : second parameter variation
+--FILE--
+<?php
+/* Prototype : array file(string filename [, int flags[, resource context]])
+ * Description: Read entire file into an array
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted
+$filename = __FILE__ . ".tmp";
+$fd = fopen($filename, "w+");
+fwrite($fd, "Line 1\nLine 2\nLine 3");
+fclose($fd);
+
+$context = stream_context_create();
+
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for flags
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( file($filename, $value, $context) );
+};
+
+unlink(__FILE__ . ".tmp");
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing file() : usage variation ***
+
+--float 10.5--
+array(3) {
+ [0]=>
+ string(6) "Line 1"
+ [1]=>
+ string(6) "Line 2"
+ [2]=>
+ string(6) "Line 3"
+}
+
+--float -10.5--
+Error: 2 - file(): '-10' flag is not supported, %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - file(): '%i' flag is not supported, %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - file(): '%i' flag is not supported, %s(%d)
+bool(false)
+
+--float .5--
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+
+--empty array--
+Error: 2 - file() expects parameter 2 to be long, array given, %s(%d)
+NULL
+
+--int indexed array--
+Error: 2 - file() expects parameter 2 to be long, array given, %s(%d)
+NULL
+
+--associative array--
+Error: 2 - file() expects parameter 2 to be long, array given, %s(%d)
+NULL
+
+--nested arrays--
+Error: 2 - file() expects parameter 2 to be long, array given, %s(%d)
+NULL
+
+--uppercase NULL--
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+
+--lowercase null--
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+
+--lowercase true--
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+
+--lowercase false--
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+
+--uppercase TRUE--
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+
+--uppercase FALSE--
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+
+--empty string DQ--
+Error: 2 - file() expects parameter 2 to be long, string given, %s(%d)
+NULL
+
+--empty string SQ--
+Error: 2 - file() expects parameter 2 to be long, string given, %s(%d)
+NULL
+
+--string DQ--
+Error: 2 - file() expects parameter 2 to be long, string given, %s(%d)
+NULL
+
+--string SQ--
+Error: 2 - file() expects parameter 2 to be long, string given, %s(%d)
+NULL
+
+--mixed case string--
+Error: 2 - file() expects parameter 2 to be long, string given, %s(%d)
+NULL
+
+--heredoc--
+Error: 2 - file() expects parameter 2 to be long, string given, %s(%d)
+NULL
+
+--instance of classWithToString--
+Error: 2 - file() expects parameter 2 to be long, object given, %s(%d)
+NULL
+
+--instance of classWithoutToString--
+Error: 2 - file() expects parameter 2 to be long, object given, %s(%d)
+NULL
+
+--undefined var--
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+
+--unset var--
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+===DONE===
diff --git a/ext/standard/tests/file/file_variation4.phpt b/ext/standard/tests/file/file_variation4.phpt
new file mode 100644
index 000000000..501036814
--- /dev/null
+++ b/ext/standard/tests/file/file_variation4.phpt
@@ -0,0 +1,291 @@
+--TEST--
+Test file() function : third parameter variation
+--FILE--
+<?php
+/* Prototype : array file(string filename [, int flags[, resource context]])
+ * Description: Read entire file into an array
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted
+$filename = __FILE__ . ".tmp";
+$fd = fopen($filename, "w+");
+fwrite($fd, "Line 1\nLine 2\nLine 3");
+fclose($fd);
+
+$flags = 0;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// create a file stream resource
+$tmp_filename = __FILE__ . ".tmp2";
+$file_stream_resource = fopen($tmp_filename, "w+");
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // file stream resource
+ 'file stream resource' => $file_stream_resource,
+);
+
+// loop through each element of the array for context
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( file($filename, $flags, $value) );
+};
+
+fclose($file_stream_resource);
+unlink($tmp_filename);
+unlink($filename);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing file() : usage variation ***
+
+--int 0--
+Error: 2 - file() expects parameter 3 to be resource, integer given, %s(%d)
+NULL
+
+--int 1--
+Error: 2 - file() expects parameter 3 to be resource, integer given, %s(%d)
+NULL
+
+--int 12345--
+Error: 2 - file() expects parameter 3 to be resource, integer given, %s(%d)
+NULL
+
+--int -12345--
+Error: 2 - file() expects parameter 3 to be resource, integer given, %s(%d)
+NULL
+
+--float 10.5--
+Error: 2 - file() expects parameter 3 to be resource, double given, %s(%d)
+NULL
+
+--float -10.5--
+Error: 2 - file() expects parameter 3 to be resource, double given, %s(%d)
+NULL
+
+--float 12.3456789000e10--
+Error: 2 - file() expects parameter 3 to be resource, double given, %s(%d)
+NULL
+
+--float -12.3456789000e10--
+Error: 2 - file() expects parameter 3 to be resource, double given, %s(%d)
+NULL
+
+--float .5--
+Error: 2 - file() expects parameter 3 to be resource, double given, %s(%d)
+NULL
+
+--empty array--
+Error: 2 - file() expects parameter 3 to be resource, array given, %s(%d)
+NULL
+
+--int indexed array--
+Error: 2 - file() expects parameter 3 to be resource, array given, %s(%d)
+NULL
+
+--associative array--
+Error: 2 - file() expects parameter 3 to be resource, array given, %s(%d)
+NULL
+
+--nested arrays--
+Error: 2 - file() expects parameter 3 to be resource, array given, %s(%d)
+NULL
+
+--uppercase NULL--
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+
+--lowercase null--
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+
+--lowercase true--
+Error: 2 - file() expects parameter 3 to be resource, boolean given, %s(%d)
+NULL
+
+--lowercase false--
+Error: 2 - file() expects parameter 3 to be resource, boolean given, %s(%d)
+NULL
+
+--uppercase TRUE--
+Error: 2 - file() expects parameter 3 to be resource, boolean given, %s(%d)
+NULL
+
+--uppercase FALSE--
+Error: 2 - file() expects parameter 3 to be resource, boolean given, %s(%d)
+NULL
+
+--empty string DQ--
+Error: 2 - file() expects parameter 3 to be resource, string given, %s(%d)
+NULL
+
+--empty string SQ--
+Error: 2 - file() expects parameter 3 to be resource, string given, %s(%d)
+NULL
+
+--string DQ--
+Error: 2 - file() expects parameter 3 to be resource, string given, %s(%d)
+NULL
+
+--string SQ--
+Error: 2 - file() expects parameter 3 to be resource, string given, %s(%d)
+NULL
+
+--mixed case string--
+Error: 2 - file() expects parameter 3 to be resource, string given, %s(%d)
+NULL
+
+--heredoc--
+Error: 2 - file() expects parameter 3 to be resource, string given, %s(%d)
+NULL
+
+--instance of classWithToString--
+Error: 2 - file() expects parameter 3 to be resource, object given, %s(%d)
+NULL
+
+--instance of classWithoutToString--
+Error: 2 - file() expects parameter 3 to be resource, object given, %s(%d)
+NULL
+
+--undefined var--
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+
+--unset var--
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+
+--file stream resource--
+Error: 2 - file(): supplied resource is not a valid Stream-Context resource, %s(%d)
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+===DONE===
diff --git a/ext/standard/tests/file/file_variation5-win32.phpt b/ext/standard/tests/file/file_variation5-win32.phpt
new file mode 100644
index 000000000..d6390db6d
--- /dev/null
+++ b/ext/standard/tests/file/file_variation5-win32.phpt
@@ -0,0 +1,74 @@
+--TEST--
+file() with various paths
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) != 'WIN') {
+ die('skip windows only test');
+}
+?>
+--FILE--
+<?php
+
+$script_directory = dirname(__FILE__);
+chdir($script_directory);
+$test_dirname = basename(__FILE__, ".php") . "testdir";
+mkdir($test_dirname);
+
+$filepath = __FILE__ . ".tmp";
+$filename = basename($filepath);
+$fd = fopen($filepath, "w+");
+fwrite($fd, "Line 1\nLine 2\nLine 3");
+fclose($fd);
+
+echo "file() on a path containing .. and .\n";
+var_dump(file("./$test_dirname/../$filename"));
+
+echo "\nfile() on a path containing .. with invalid directories\n";
+var_dump(file("./$test_dirname/bad_dir/../../$filename"));
+
+echo "\nfile() on a relative path from a different working directory\n";
+chdir($test_dirname);
+var_dump(file("../$filename"));
+chdir($script_directory);
+
+chdir($script_directory);
+rmdir($test_dirname);
+unlink($filepath);
+
+?>
+--EXPECT--
+file() on a path containing .. and .
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+
+file() on a path containing .. with invalid directories
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+
+file() on a relative path from a different working directory
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
diff --git a/ext/standard/tests/file/file_variation5.phpt b/ext/standard/tests/file/file_variation5.phpt
new file mode 100644
index 000000000..1f1549111
--- /dev/null
+++ b/ext/standard/tests/file/file_variation5.phpt
@@ -0,0 +1,94 @@
+--TEST--
+file() with various paths
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip non-windows only test');
+}
+?>
+--FILE--
+<?php
+
+$script_directory = dirname(__FILE__);
+chdir($script_directory);
+$test_dirname = basename(__FILE__, ".php") . "testdir";
+mkdir($test_dirname);
+
+$filepath = __FILE__ . ".tmp";
+$filename = basename($filepath);
+$fd = fopen($filepath, "w+");
+fwrite($fd, "Line 1\nLine 2\nLine 3");
+fclose($fd);
+
+echo "file() on a path containing .. and .\n";
+var_dump(file("./$test_dirname/../$filename"));
+
+echo "\nfile() on a path containing .. with invalid directories\n";
+var_dump(file("./$test_dirname/bad_dir/../../$filename"));
+
+echo "\nfile() on a linked file\n";
+$linkname = "somelink";
+var_dump(symlink($filepath, $linkname));
+var_dump(file($linkname));
+var_dump(unlink($linkname));
+
+echo "\nfile() on a relative path from a different working directory\n";
+chdir($test_dirname);
+var_dump(file("../$filename"));
+chdir($script_directory);
+
+chdir($script_directory);
+rmdir($test_dirname);
+unlink($filepath);
+
+?>
+--EXPECT--
+file() on a path containing .. and .
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+
+file() on a path containing .. with invalid directories
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+
+file() on a linked file
+bool(true)
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+bool(true)
+
+file() on a relative path from a different working directory
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
diff --git a/ext/standard/tests/file/file_variation6.phpt b/ext/standard/tests/file/file_variation6.phpt
new file mode 100644
index 000000000..7e34f285d
--- /dev/null
+++ b/ext/standard/tests/file/file_variation6.phpt
@@ -0,0 +1,261 @@
+--TEST--
+file() with a range of integer flag values
+--FILE--
+<?php
+
+$filepath = __FILE__ . ".tmp";
+$fd = fopen($filepath, "w+");
+fwrite($fd, "Line 1\nLine 2\nLine 3");
+fclose($fd);
+
+for ($flags = 0; $flags <= 32; $flags++) {
+ var_dump(file($filepath, $flags));
+}
+
+unlink($filepath);
+
+?>
+--EXPECTF--
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+array(3) {
+ [0]=>
+ string(6) "Line 1"
+ [1]=>
+ string(6) "Line 2"
+ [2]=>
+ string(6) "Line 3"
+}
+array(3) {
+ [0]=>
+ string(6) "Line 1"
+ [1]=>
+ string(6) "Line 2"
+ [2]=>
+ string(6) "Line 3"
+}
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+array(3) {
+ [0]=>
+ string(6) "Line 1"
+ [1]=>
+ string(6) "Line 2"
+ [2]=>
+ string(6) "Line 3"
+}
+array(3) {
+ [0]=>
+ string(6) "Line 1"
+ [1]=>
+ string(6) "Line 2"
+ [2]=>
+ string(6) "Line 3"
+}
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+array(3) {
+ [0]=>
+ string(6) "Line 1"
+ [1]=>
+ string(6) "Line 2"
+ [2]=>
+ string(6) "Line 3"
+}
+array(3) {
+ [0]=>
+ string(6) "Line 1"
+ [1]=>
+ string(6) "Line 2"
+ [2]=>
+ string(6) "Line 3"
+}
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+array(3) {
+ [0]=>
+ string(6) "Line 1"
+ [1]=>
+ string(6) "Line 2"
+ [2]=>
+ string(6) "Line 3"
+}
+array(3) {
+ [0]=>
+ string(6) "Line 1"
+ [1]=>
+ string(6) "Line 2"
+ [2]=>
+ string(6) "Line 3"
+}
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+array(3) {
+ [0]=>
+ string(6) "Line 1"
+ [1]=>
+ string(6) "Line 2"
+ [2]=>
+ string(6) "Line 3"
+}
+array(3) {
+ [0]=>
+ string(6) "Line 1"
+ [1]=>
+ string(6) "Line 2"
+ [2]=>
+ string(6) "Line 3"
+}
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+array(3) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(7) "Line 2
+"
+ [2]=>
+ string(6) "Line 3"
+}
+array(3) {
+ [0]=>
+ string(6) "Line 1"
+ [1]=>
+ string(6) "Line 2"
+ [2]=>
+ string(6) "Line 3"
+}
+array(3) {
+ [0]=>
+ string(6) "Line 1"
+ [1]=>
+ string(6) "Line 2"
+ [2]=>
+ string(6) "Line 3"
+}
+
+Warning: file(): '24' flag is not supported in %s on line %d
+bool(false)
+
+Warning: file(): '25' flag is not supported in %s on line %d
+bool(false)
+
+Warning: file(): '26' flag is not supported in %s on line %d
+bool(false)
+
+Warning: file(): '27' flag is not supported in %s on line %d
+bool(false)
+
+Warning: file(): '28' flag is not supported in %s on line %d
+bool(false)
+
+Warning: file(): '29' flag is not supported in %s on line %d
+bool(false)
+
+Warning: file(): '30' flag is not supported in %s on line %d
+bool(false)
+
+Warning: file(): '31' flag is not supported in %s on line %d
+bool(false)
+
+Warning: file(): '32' flag is not supported in %s on line %d
+bool(false)
diff --git a/ext/standard/tests/file/file_variation7.phpt b/ext/standard/tests/file/file_variation7.phpt
new file mode 100644
index 000000000..3cd9d7fc8
--- /dev/null
+++ b/ext/standard/tests/file/file_variation7.phpt
@@ -0,0 +1,87 @@
+--TEST--
+file() on a file with blank lines
+--FILE--
+<?php
+
+$filepath = __FILE__ . ".tmp";
+$fd = fopen($filepath, "w+");
+fwrite($fd, "Line 1\n\n \n \n\Line 3");
+fclose($fd);
+
+echo "file():\n";
+var_dump(file($filepath));
+
+echo "\nfile() with FILE_IGNORE_NEW_LINES:\n";
+var_dump(file($filepath, FILE_IGNORE_NEW_LINES));
+
+echo "\nfile() with FILE_SKIP_EMPTY_LINES:\n";
+var_dump(file($filepath, FILE_SKIP_EMPTY_LINES));
+
+echo "\nfile() with FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES:\n";
+var_dump(file($filepath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES));
+
+unlink($filepath);
+
+?>
+--EXPECT--
+file():
+array(5) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(1) "
+"
+ [2]=>
+ string(2) "
+"
+ [3]=>
+ string(3) "
+"
+ [4]=>
+ string(7) "\Line 3"
+}
+
+file() with FILE_IGNORE_NEW_LINES:
+array(5) {
+ [0]=>
+ string(6) "Line 1"
+ [1]=>
+ string(0) ""
+ [2]=>
+ string(1) " "
+ [3]=>
+ string(2) " "
+ [4]=>
+ string(7) "\Line 3"
+}
+
+file() with FILE_SKIP_EMPTY_LINES:
+array(5) {
+ [0]=>
+ string(7) "Line 1
+"
+ [1]=>
+ string(1) "
+"
+ [2]=>
+ string(2) "
+"
+ [3]=>
+ string(3) "
+"
+ [4]=>
+ string(7) "\Line 3"
+}
+
+file() with FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES:
+array(4) {
+ [0]=>
+ string(6) "Line 1"
+ [1]=>
+ string(1) " "
+ [2]=>
+ string(2) " "
+ [3]=>
+ string(7) "\Line 3"
+}
diff --git a/ext/standard/tests/file/file_variation8-win32.phpt b/ext/standard/tests/file/file_variation8-win32.phpt
new file mode 100644
index 000000000..ca3be36b5
--- /dev/null
+++ b/ext/standard/tests/file/file_variation8-win32.phpt
@@ -0,0 +1,142 @@
+--TEST--
+Test file() function : variation - various absolute and relative paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Only run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : array file(string filename [, int flags[, resource context]])
+ * Description: Read entire file into an array
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file() : variation ***\n";
+$mainDir = "fileVar8.dir";
+$subDir = "fileVar8Sub";
+$absMainDir = dirname(__FILE__)."\\".$mainDir;
+mkdir($absMainDir);
+$absSubDir = $absMainDir."\\".$subDir;
+mkdir($absSubDir);
+
+$old_dir_path = getcwd();
+chdir(dirname(__FILE__));
+$unixifiedDir = '/'.substr(str_replace('\\','/',$absSubDir),3);
+
+$allDirs = array(
+ // absolute paths
+ "$absSubDir\\",
+ "$absSubDir\\..\\".$subDir,
+ "$absSubDir\\\\..\\.\\".$subDir,
+ "$absSubDir\\..\\..\\".$mainDir."\\.\\".$subDir,
+ "$absSubDir\\..\\\\\\".$subDir."\\\\..\\\\..\\".$subDir,
+ "$absSubDir\\BADDIR",
+
+ // relative paths
+ $mainDir."\\".$subDir,
+ $mainDir."\\\\".$subDir,
+ $mainDir."\\\\\\".$subDir,
+ ".\\".$mainDir."\\..\\".$mainDir."\\".$subDir,
+ "BADDIR",
+
+ // unixifed path
+ $unixifiedDir,
+);
+
+$filename = 'FileGetContentsVar7.tmp';
+$absFile = $absSubDir.'/'.$filename;
+$h = fopen($absFile,"w");
+fwrite($h, "contents read");
+fclose($h);
+
+for($i = 0; $i<count($allDirs); $i++) {
+ $j = $i+1;
+ $dir = $allDirs[$i];
+ echo "\n-- Iteration $j --\n";
+ var_dump(file($dir."\\".$filename));
+}
+
+unlink($absFile);
+chdir($old_dir_path);
+rmdir($absSubDir);
+rmdir($absMainDir);
+
+echo "\n*** Done ***\n";
+?>
+--EXPECTF--
+*** Testing file() : variation ***
+
+-- Iteration 1 --
+array(1) {
+ [0]=>
+ string(13) "contents read"
+}
+
+-- Iteration 2 --
+array(1) {
+ [0]=>
+ string(13) "contents read"
+}
+
+-- Iteration 3 --
+array(1) {
+ [0]=>
+ string(13) "contents read"
+}
+
+-- Iteration 4 --
+array(1) {
+ [0]=>
+ string(13) "contents read"
+}
+
+-- Iteration 5 --
+
+Warning: file(%sfileVar8.dir\fileVar8Sub\..\\\fileVar8Sub\\..\\..\fileVar8Sub\FileGetContentsVar7.tmp): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Warning: file(%sfileVar8.dir\fileVar8Sub\BADDIR\FileGetContentsVar7.tmp): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+array(1) {
+ [0]=>
+ string(13) "contents read"
+}
+
+-- Iteration 8 --
+array(1) {
+ [0]=>
+ string(13) "contents read"
+}
+
+-- Iteration 9 --
+array(1) {
+ [0]=>
+ string(13) "contents read"
+}
+
+-- Iteration 10 --
+array(1) {
+ [0]=>
+ string(13) "contents read"
+}
+
+-- Iteration 11 --
+
+Warning: file(BADDIR\FileGetContentsVar7.tmp): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+-- Iteration 12 --
+array(1) {
+ [0]=>
+ string(13) "contents read"
+}
+
+*** Done *** \ No newline at end of file
diff --git a/ext/standard/tests/file/file_variation8.phpt b/ext/standard/tests/file/file_variation8.phpt
new file mode 100644
index 000000000..be18fcb03
--- /dev/null
+++ b/ext/standard/tests/file/file_variation8.phpt
@@ -0,0 +1,128 @@
+--TEST--
+Test file function : variation - various absolute and relative paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : array file(string filename [, int flags[, resource context]])
+ * Description: Read entire file into an array
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file() : variation ***\n";
+$mainDir = "fileVar8.dir";
+$subDir = "fileVar8Sub";
+$absMainDir = dirname(__FILE__)."/".$mainDir;
+mkdir($absMainDir);
+$absSubDir = $absMainDir."/".$subDir;
+mkdir($absSubDir);
+
+$old_dir_path = getcwd();
+chdir(dirname(__FILE__));
+
+$allDirs = array(
+ // absolute paths
+ "$absSubDir/",
+ "$absSubDir/../".$subDir,
+ "$absSubDir//.././".$subDir,
+ "$absSubDir/../../".$mainDir."/./".$subDir,
+ "$absSubDir/..///".$subDir."//..//../".$subDir,
+ "$absSubDir/BADDIR",
+
+ // relative paths
+ $mainDir."/".$subDir,
+ $mainDir."//".$subDir,
+ $mainDir."///".$subDir,
+ "./".$mainDir."/../".$mainDir."/".$subDir,
+ "BADDIR",
+
+);
+
+$filename = 'FileGetContentsVar7.tmp';
+$absFile = $absSubDir.'/'.$filename;
+$h = fopen($absFile,"w");
+fwrite($h, "contents read");
+fclose($h);
+
+for($i = 0; $i<count($allDirs); $i++) {
+ $j = $i+1;
+ $dir = $allDirs[$i];
+ echo "\n-- Iteration $j --\n";
+ var_dump(file($dir."/".$filename));
+}
+
+unlink($absFile);
+chdir($old_dir_path);
+rmdir($absSubDir);
+rmdir($absMainDir);
+
+echo "\n*** Done ***\n";
+?>
+--EXPECTF--
+*** Testing file() : variation ***
+
+-- Iteration 1 --
+array(1) {
+ [0]=>
+ string(13) "contents read"
+}
+
+-- Iteration 2 --
+array(1) {
+ [0]=>
+ string(13) "contents read"
+}
+
+-- Iteration 3 --
+array(1) {
+ [0]=>
+ string(13) "contents read"
+}
+
+-- Iteration 4 --
+array(1) {
+ [0]=>
+ string(13) "contents read"
+}
+
+-- Iteration 5 --
+
+Warning: file(%sfileVar8.dir/fileVar8Sub/..///fileVar8Sub//..//../fileVar8Sub/FileGetContentsVar7.tmp): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Warning: file(%sfileVar8.dir/fileVar8Sub/BADDIR/FileGetContentsVar7.tmp): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+array(1) {
+ [0]=>
+ string(13) "contents read"
+}
+
+-- Iteration 8 --
+array(1) {
+ [0]=>
+ string(13) "contents read"
+}
+
+-- Iteration 9 --
+array(1) {
+ [0]=>
+ string(13) "contents read"
+}
+
+-- Iteration 10 --
+array(1) {
+ [0]=>
+ string(13) "contents read"
+}
+
+-- Iteration 11 --
+
+Warning: file(BADDIR/FileGetContentsVar7.tmp): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+*** Done *** \ No newline at end of file
diff --git a/ext/standard/tests/file/file_variation9.phpt b/ext/standard/tests/file/file_variation9.phpt
new file mode 100644
index 000000000..9ddd1e620
--- /dev/null
+++ b/ext/standard/tests/file/file_variation9.phpt
@@ -0,0 +1,89 @@
+--TEST--
+Test file function : variation - test various endings of a file
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : array file(string filename [, int flags[, resource context]])
+ * Description: Read entire file into an array
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing file() : variation ***\n";
+$testfile = dirname(__FILE__)."/fileVar9.txt";
+
+$contents = array(
+ "File ends on a single character\na",
+ "File ends on a new line\n",
+ "File ends on multiple newlines\n\n\n\n",
+ "File has\n\nmultiple lines and newlines\n\n",
+ "File has\r\nmultiple crlfs\n\r\n"
+ );
+
+@unlink($testfile);
+foreach ($contents as $content) {
+ $h = fopen($testfile, "w");
+ fwrite($h, $content);
+ fclose($h);
+ var_dump(file($testfile));
+ unlink($testfile);
+}
+
+echo "\n*** Done ***\n";
+?>
+--EXPECTF--
+*** Testing file() : variation ***
+array(2) {
+ [0]=>
+ string(32) "File ends on a single character
+"
+ [1]=>
+ string(1) "a"
+}
+array(1) {
+ [0]=>
+ string(24) "File ends on a new line
+"
+}
+array(4) {
+ [0]=>
+ string(31) "File ends on multiple newlines
+"
+ [1]=>
+ string(1) "
+"
+ [2]=>
+ string(1) "
+"
+ [3]=>
+ string(1) "
+"
+}
+array(4) {
+ [0]=>
+ string(9) "File has
+"
+ [1]=>
+ string(1) "
+"
+ [2]=>
+ string(28) "multiple lines and newlines
+"
+ [3]=>
+ string(1) "
+"
+}
+array(3) {
+ [0]=>
+ string(10) "File has
+"
+ [1]=>
+ string(15) "multiple crlfs
+"
+ [2]=>
+ string(2) "
+"
+}
+
+*** Done *** \ No newline at end of file
diff --git a/ext/standard/tests/file/filegroup_variation1.phpt b/ext/standard/tests/file/filegroup_variation1.phpt
new file mode 100644
index 000000000..ee76477ac
--- /dev/null
+++ b/ext/standard/tests/file/filegroup_variation1.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test filegroup() function: usage variations - links
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip Do not run on Windows');
+}
+--FILE--
+<?php
+/* Prototype: int filegroup ( string $filename )
+ * Description: Returns the group ID of the file, or FALSE in case of an error.
+ */
+
+/* Creating soft and hard links to a file and applying filegroup() on links */
+
+$file_path = dirname(__FILE__);
+fclose( fopen($file_path."/filegroup_variation1.tmp", "w") );
+
+echo "*** Testing filegroup() with links ***\n";
+/* With symlink */
+symlink($file_path."/filegroup_variation1.tmp", $file_path."/filegroup_variation1_symlink.tmp");
+var_dump( filegroup($file_path."/filegroup_variation1_symlink.tmp") ); //expected true
+clearstatcache();
+
+/* With hardlink */
+link($file_path."/filegroup_variation1.tmp", $file_path."/filegroup_variation1_link.tmp");
+var_dump( filegroup($file_path."/filegroup_variation1_link.tmp") ); // expected: true
+clearstatcache();
+
+echo "\n*** Done ***";
+?>
+--CLEAN--
+<?php
+$file_path = dirname(__FILE__);
+unlink($file_path."/filegroup_variation1_symlink.tmp");
+unlink($file_path."/filegroup_variation1_link.tmp");
+unlink($file_path."/filegroup_variation1.tmp");
+?>
+
+--EXPECTF--
+*** Testing filegroup() with links ***
+int(%d)
+int(%d)
+
+*** Done ***
diff --git a/ext/standard/tests/file/filegroup_variation2.phpt b/ext/standard/tests/file/filegroup_variation2.phpt
new file mode 100644
index 000000000..14f6b86c3
--- /dev/null
+++ b/ext/standard/tests/file/filegroup_variation2.phpt
@@ -0,0 +1,70 @@
+--TEST--
+Test filegroup() function: usage variations - invalid filenames
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype: int filegroup ( string $filename )
+ * Description: Returns the group ID of the file, or FALSE in case of an error.
+ */
+
+/* Testing filegroup() with invalid arguments -int, float, bool, NULL, resource */
+
+$file_path = dirname(__FILE__);
+$file_handle = fopen($file_path."/filegroup_variation2.tmp", "w");
+
+echo "*** Testing Invalid file types ***\n";
+$filenames = array(
+ /* Invalid filenames */
+ -2.34555,
+ " ",
+ "",
+ TRUE,
+ FALSE,
+ NULL,
+ $file_handle,
+
+ /* scalars */
+ 1234,
+ 0
+);
+
+/* loop through to test each element the above array */
+foreach( $filenames as $filename ) {
+ var_dump( filegroup($filename) );
+ clearstatcache();
+}
+fclose($file_handle);
+
+echo "\n*** Done ***";
+?>
+--CLEAN--
+<?php
+$file_path = dirname(__FILE__);
+unlink($file_path."/filegroup_variation2.tmp");
+?>
+--EXPECTF--
+*** Testing Invalid file types ***
+
+Warning: filegroup(): stat failed for -2.34555 in %s on line %d
+bool(false)
+
+Warning: filegroup(): stat failed for in %s on line %d
+bool(false)
+bool(false)
+
+Warning: filegroup(): stat failed for 1 in %s on line %d
+bool(false)
+bool(false)
+bool(false)
+
+Warning: filegroup(): stat failed for Resource id #%d in %s on line %d
+bool(false)
+
+Warning: filegroup(): stat failed for 1234 in %s on line %d
+bool(false)
+
+Warning: filegroup(): stat failed for 0 in %s on line %d
+bool(false)
+
+*** Done *** \ No newline at end of file
diff --git a/ext/standard/tests/file/filegroup_variation3.phpt b/ext/standard/tests/file/filegroup_variation3.phpt
new file mode 100644
index 000000000..dd875a082
--- /dev/null
+++ b/ext/standard/tests/file/filegroup_variation3.phpt
@@ -0,0 +1,81 @@
+--TEST--
+Test filegroup() function: usage variations - diff. path notations
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype: int filegroup ( string $filename )
+ * Description: Returns the group ID of the file, or FALSE in case of an error.
+ */
+
+/* Passing file names with different notations, using slashes, wild-card chars */
+
+$file_path = dirname(__FILE__);
+
+echo "*** Testing filegroup() with different notations of file names ***\n";
+$dir_name = $file_path."/filegroup_variation3";
+mkdir($dir_name);
+$file_handle = fopen($dir_name."/filegroup_variation3.tmp", "w");
+fclose($file_handle);
+
+$files_arr = array(
+ "/filegroup_variation3/filegroup_variation3.tmp",
+
+ /* Testing a file trailing slash */
+ "/filegroup_variation3/filegroup_variation3.tmp/",
+
+ /* Testing file with double slashes */
+ "/filegroup_variation3//filegroup_variation3.tmp",
+ "//filegroup_variation3//filegroup_variation3.tmp",
+ "/filegroup_variation3/*.tmp",
+ "filegroup_variation3/filegroup*.tmp",
+
+ /* Testing Binary safe */
+ "/filegroup_variation3/filegroup_variation3.tmp".chr(0),
+ "/filegroup_variation3/filegroup_variation3.tmp\0"
+);
+
+$count = 1;
+/* loop through to test each element in the above array */
+foreach($files_arr as $file) {
+ echo "- Iteration $count -\n";
+ var_dump( filegroup( $file_path."/".$file ) );
+ clearstatcache();
+ $count++;
+}
+
+echo "\n*** Done ***";
+?>
+--CLEAN--
+<?php
+$file_path = dirname(__FILE__);
+$dir_name = $file_path."/filegroup_variation3";
+unlink($dir_name."/filegroup_variation3.tmp");
+rmdir($dir_name);
+?>
+--EXPECTF--
+*** Testing filegroup() with different notations of file names ***
+- Iteration 1 -
+int(%d)
+- Iteration 2 -
+
+Warning: filegroup(): stat failed for %s//filegroup_variation3/filegroup_variation3.tmp/ in %s on line %d
+bool(false)
+- Iteration 3 -
+int(%d)
+- Iteration 4 -
+int(%d)
+- Iteration 5 -
+
+Warning: filegroup(): stat failed for %s//filegroup_variation3/*.tmp in %s on line %d
+bool(false)
+- Iteration 6 -
+
+Warning: filegroup(): stat failed for %s/filegroup_variation3/filegroup*.tmp in %s on line %d
+bool(false)
+- Iteration 7 -
+int(%d)
+- Iteration 8 -
+int(%d)
+
+*** Done ***
diff --git a/ext/standard/tests/file/fileinode_variation1.phpt b/ext/standard/tests/file/fileinode_variation1.phpt
new file mode 100644
index 000000000..d251cc3f8
--- /dev/null
+++ b/ext/standard/tests/file/fileinode_variation1.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Test fileinode() function: usage variations - links
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip Do not run on Windows');
+}
+--FILE--
+<?php
+/*
+Prototype: int fileinode ( string $filename );
+Description: Returns the inode number of the file, or FALSE in case of an error.
+*/
+
+/* Creating soft and hard links to a file and applying fileinode() on links */
+
+$file_path = dirname(__FILE__);
+fclose( fopen($file_path."/fileinode_variation1.tmp", "w") );
+
+echo "*** Testing fileinode() with links ***\n";
+/* With symlink */
+symlink($file_path."/fileinode_variation1.tmp", $file_path."/fileinode_variation1_symlink.tmp");
+var_dump( fileinode($file_path."/fileinode_variation1_symlink.tmp") ); //expected true
+clearstatcache();
+
+/* With hardlink */
+link($file_path."/fileinode_variation1.tmp", $file_path."/fileinode_variation1_link.tmp");
+var_dump( fileinode($file_path."/fileinode_variation1_link.tmp") ); // expected: true
+clearstatcache();
+
+echo "\n*** Done ***";
+?>
+--CLEAN--
+<?php
+$file_path = dirname(__FILE__);
+unlink($file_path."/fileinode_variation1_symlink.tmp");
+unlink($file_path."/fileinode_variation1_link.tmp");
+unlink($file_path."/fileinode_variation1.tmp");
+?>
+
+--EXPECTF--
+*** Testing fileinode() with links ***
+int(%d)
+int(%d)
+
+*** Done ***
diff --git a/ext/standard/tests/file/fileinode_variation2.phpt b/ext/standard/tests/file/fileinode_variation2.phpt
new file mode 100644
index 000000000..65ba056e6
--- /dev/null
+++ b/ext/standard/tests/file/fileinode_variation2.phpt
@@ -0,0 +1,71 @@
+--TEST--
+Test fileinode() function: usage variations - invalid filenames
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/*
+Prototype: int fileinode ( string $filename );
+Description: Returns the inode number of the file, or FALSE in case of an error.
+*/
+
+/* Testing fileinode() with invalid arguments -int, float, bool, NULL, resource */
+
+$file_path = dirname(__FILE__);
+$file_handle = fopen($file_path."/fileinode_variation2.tmp", "w");
+
+echo "*** Testing Invalid file types ***\n";
+$filenames = array(
+ /* Invalid filenames */
+ -2.34555,
+ " ",
+ "",
+ TRUE,
+ FALSE,
+ NULL,
+ $file_handle,
+
+ /* scalars */
+ 1234,
+ 0
+);
+
+/* loop through to test each element the above array */
+foreach( $filenames as $filename ) {
+ var_dump( fileinode($filename) );
+ clearstatcache();
+}
+fclose($file_handle);
+
+echo "\n*** Done ***";
+?>
+--CLEAN--
+<?php
+$file_path = dirname(__FILE__);
+unlink($file_path."/fileinode_variation2.tmp");
+?>
+--EXPECTF--
+*** Testing Invalid file types ***
+
+Warning: fileinode(): stat failed for -2.34555 in %s on line %d
+bool(false)
+
+Warning: fileinode(): stat failed for in %s on line %d
+bool(false)
+bool(false)
+
+Warning: fileinode(): stat failed for 1 in %s on line %d
+bool(false)
+bool(false)
+bool(false)
+
+Warning: fileinode(): stat failed for Resource id #%d in %s on line %d
+bool(false)
+
+Warning: fileinode(): stat failed for 1234 in %s on line %d
+bool(false)
+
+Warning: fileinode(): stat failed for 0 in %s on line %d
+bool(false)
+
+*** Done *** \ No newline at end of file
diff --git a/ext/standard/tests/file/fileinode_variation3.phpt b/ext/standard/tests/file/fileinode_variation3.phpt
new file mode 100644
index 000000000..c81b57324
--- /dev/null
+++ b/ext/standard/tests/file/fileinode_variation3.phpt
@@ -0,0 +1,82 @@
+--TEST--
+Test fileinode() function: usage variations - diff. path notations
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/*
+Prototype: int fileinode ( string $filename );
+Description: Returns the inode number of the file, or FALSE in case of an error.
+*/
+
+/* Passing file names with different notations, using slashes, wild-card chars */
+
+$file_path = dirname(__FILE__);
+
+echo "*** Testing fileinode() with different notations of file names ***\n";
+$dir_name = $file_path."/fileinode_variation3";
+mkdir($dir_name);
+$file_handle = fopen($dir_name."/fileinode_variation3.tmp", "w");
+fclose($file_handle);
+
+$files_arr = array(
+ "/fileinode_variation3/fileinode_variation3.tmp",
+
+ /* Testing a file trailing slash */
+ "/fileinode_variation3/fileinode_variation3.tmp/",
+
+ /* Testing file with double slashes */
+ "/fileinode_variation3//fileinode_variation3.tmp",
+ "//fileinode_variation3//fileinode_variation3.tmp",
+ "/fileinode_variation3/*.tmp",
+ "fileinode_variation3/fileinode*.tmp",
+
+ /* Testing Binary safe */
+ "/fileinode_variation3/fileinode_variation3.tmp".chr(0),
+ "/fileinode_variation3/fileinode_variation3.tmp\0"
+);
+
+$count = 1;
+/* loop through to test each element in the above array */
+foreach($files_arr as $file) {
+ echo "- Iteration $count -\n";
+ var_dump( fileinode( $file_path."/".$file ) );
+ clearstatcache();
+ $count++;
+}
+
+echo "\n*** Done ***";
+?>
+--CLEAN--
+<?php
+$file_path = dirname(__FILE__);
+$dir_name = $file_path."/fileinode_variation3";
+unlink($dir_name."/fileinode_variation3.tmp");
+rmdir($dir_name);
+?>
+--EXPECTF--
+*** Testing fileinode() with different notations of file names ***
+- Iteration 1 -
+int(%d)
+- Iteration 2 -
+
+Warning: fileinode(): stat failed for %s//fileinode_variation3/fileinode_variation3.tmp/ in %s on line %d
+bool(false)
+- Iteration 3 -
+int(%d)
+- Iteration 4 -
+int(%d)
+- Iteration 5 -
+
+Warning: fileinode(): stat failed for %s//fileinode_variation3/*.tmp in %s on line %d
+bool(false)
+- Iteration 6 -
+
+Warning: fileinode(): stat failed for %s/fileinode_variation3/fileinode*.tmp in %s on line %d
+bool(false)
+- Iteration 7 -
+int(%d)
+- Iteration 8 -
+int(%d)
+
+*** Done ***
diff --git a/ext/standard/tests/file/fileowner_variation1.phpt b/ext/standard/tests/file/fileowner_variation1.phpt
new file mode 100644
index 000000000..b70ac366d
--- /dev/null
+++ b/ext/standard/tests/file/fileowner_variation1.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Test fileowner() function: usage variations - links
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip Do not run on Windows');
+}
+--FILE--
+<?php
+/* Prototype: int fileowner ( string $filename )
+ * Description: Returns the user ID of the owner of the file, or
+ * FALSE in case of an error.
+ */
+
+/* Creating soft and hard links to a file and applying fileowner() on links */
+
+$file_path = dirname(__FILE__);
+fclose( fopen($file_path."/fileowner_variation1.tmp", "w") );
+
+echo "*** Testing fileowner() with links ***\n";
+/* With symlink */
+symlink($file_path."/fileowner_variation1.tmp", $file_path."/fileowner_variation1_symlink.tmp");
+var_dump( fileowner($file_path."/fileowner_variation1_symlink.tmp") ); //expected true
+clearstatcache();
+
+/* With hardlink */
+link($file_path."/fileowner_variation1.tmp", $file_path."/fileowner_variation1_link.tmp");
+var_dump( fileowner($file_path."/fileowner_variation1_link.tmp") ); // expected: true
+clearstatcache();
+
+echo "\n*** Done ***";
+?>
+--CLEAN--
+<?php
+$file_path = dirname(__FILE__);
+unlink($file_path."/fileowner_variation1_symlink.tmp");
+unlink($file_path."/fileowner_variation1_link.tmp");
+unlink($file_path."/fileowner_variation1.tmp");
+?>
+
+--EXPECTF--
+*** Testing fileowner() with links ***
+int(%d)
+int(%d)
+
+*** Done ***
diff --git a/ext/standard/tests/file/fileowner_variation2.phpt b/ext/standard/tests/file/fileowner_variation2.phpt
new file mode 100644
index 000000000..c529c1bc3
--- /dev/null
+++ b/ext/standard/tests/file/fileowner_variation2.phpt
@@ -0,0 +1,71 @@
+--TEST--
+Test fileowner() function: usage variations - invalid filenames
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype: int fileowner ( string $filename )
+ * Description: Returns the user ID of the owner of the file, or
+ * FALSE in case of an error.
+ */
+
+/* Testing fileowner() with invalid arguments -int, float, bool, NULL, resource */
+
+$file_path = dirname(__FILE__);
+$file_handle = fopen($file_path."/fileowner_variation2.tmp", "w");
+
+echo "*** Testing Invalid file types ***\n";
+$filenames = array(
+ /* Invalid filenames */
+ -2.34555,
+ " ",
+ "",
+ TRUE,
+ FALSE,
+ NULL,
+ $file_handle,
+
+ /* scalars */
+ 1234,
+ 0
+);
+
+/* loop through to test each element the above array */
+foreach( $filenames as $filename ) {
+ var_dump( fileowner($filename) );
+ clearstatcache();
+}
+fclose($file_handle);
+
+echo "\n*** Done ***";
+?>
+--CLEAN--
+<?php
+$file_path = dirname(__FILE__);
+unlink($file_path."/fileowner_variation2.tmp");
+?>
+--EXPECTF--
+*** Testing Invalid file types ***
+
+Warning: fileowner(): stat failed for -2.34555 in %s on line %d
+bool(false)
+
+Warning: fileowner(): stat failed for in %s on line %d
+bool(false)
+bool(false)
+
+Warning: fileowner(): stat failed for 1 in %s on line %d
+bool(false)
+bool(false)
+bool(false)
+
+Warning: fileowner(): stat failed for Resource id #%d in %s on line %d
+bool(false)
+
+Warning: fileowner(): stat failed for 1234 in %s on line %d
+bool(false)
+
+Warning: fileowner(): stat failed for 0 in %s on line %d
+bool(false)
+
+*** Done *** \ No newline at end of file
diff --git a/ext/standard/tests/file/fileowner_variation3.phpt b/ext/standard/tests/file/fileowner_variation3.phpt
new file mode 100644
index 000000000..2a322b6db
--- /dev/null
+++ b/ext/standard/tests/file/fileowner_variation3.phpt
@@ -0,0 +1,82 @@
+--TEST--
+Test fileowner() function: usage variations - diff. path notations
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype: int fileowner ( string $filename )
+ * Description: Returns the user ID of the owner of the file, or
+ * FALSE in case of an error.
+ */
+
+/* Passing file names with different notations, using slashes, wild-card chars */
+
+$file_path = dirname(__FILE__);
+
+echo "*** Testing fileowner() with different notations of file names ***\n";
+$dir_name = $file_path."/fileowner_variation3";
+mkdir($dir_name);
+$file_handle = fopen($dir_name."/fileowner_variation3.tmp", "w");
+fclose($file_handle);
+
+$files_arr = array(
+ "/fileowner_variation3/fileowner_variation3.tmp",
+
+ /* Testing a file trailing slash */
+ "/fileowner_variation3/fileowner_variation3.tmp/",
+
+ /* Testing file with double slashes */
+ "/fileowner_variation3//fileowner_variation3.tmp",
+ "//fileowner_variation3//fileowner_variation3.tmp",
+ "/fileowner_variation3/*.tmp",
+ "fileowner_variation3/fileowner*.tmp",
+
+ /* Testing Binary safe */
+ "/fileowner_variation3/fileowner_variation3.tmp".chr(0),
+ "/fileowner_variation3/fileowner_variation3.tmp\0"
+);
+
+$count = 1;
+/* loop through to test each element in the above array */
+foreach($files_arr as $file) {
+ echo "- Iteration $count -\n";
+ var_dump( fileowner( $file_path."/".$file ) );
+ clearstatcache();
+ $count++;
+}
+
+echo "\n*** Done ***";
+?>
+--CLEAN--
+<?php
+$file_path = dirname(__FILE__);
+$dir_name = $file_path."/fileowner_variation3";
+unlink($dir_name."/fileowner_variation3.tmp");
+rmdir($dir_name);
+?>
+--EXPECTF--
+*** Testing fileowner() with different notations of file names ***
+- Iteration 1 -
+int(%d)
+- Iteration 2 -
+
+Warning: fileowner(): stat failed for %s//fileowner_variation3/fileowner_variation3.tmp/ in %s on line %d
+bool(false)
+- Iteration 3 -
+int(%d)
+- Iteration 4 -
+int(%d)
+- Iteration 5 -
+
+Warning: fileowner(): stat failed for %s//fileowner_variation3/*.tmp in %s on line %d
+bool(false)
+- Iteration 6 -
+
+Warning: fileowner(): stat failed for %s/fileowner_variation3/fileowner*.tmp in %s on line %d
+bool(false)
+- Iteration 7 -
+int(%d)
+- Iteration 8 -
+int(%d)
+
+*** Done ***
diff --git a/ext/standard/tests/file/fileperms_variation1.phpt b/ext/standard/tests/file/fileperms_variation1.phpt
new file mode 100644
index 000000000..e90cf8784
--- /dev/null
+++ b/ext/standard/tests/file/fileperms_variation1.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test fileperms() function: usage variations - links
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip Do not run on Windows');
+}
+--FILE--
+<?php
+/* Prototype: int fileperms ( string $filename )
+ * Description: Returns the group ID of the file, or FALSE in case of an error.
+ */
+
+/* Creating soft and hard links to a file and applying fileperms() on links */
+
+$file_path = dirname(__FILE__);
+fclose( fopen($file_path."/fileperms_variation1.tmp", "w") );
+
+echo "*** Testing fileperms() with links ***\n";
+/* With symlink */
+symlink($file_path."/fileperms_variation1.tmp", $file_path."/fileperms_variation1_symlink.tmp");
+var_dump( fileperms($file_path."/fileperms_variation1_symlink.tmp") ); //expected true
+clearstatcache();
+
+/* With hardlink */
+link($file_path."/fileperms_variation1.tmp", $file_path."/fileperms_variation1_link.tmp");
+var_dump( fileperms($file_path."/fileperms_variation1_link.tmp") ); // expected: true
+clearstatcache();
+
+echo "\n*** Done ***";
+?>
+--CLEAN--
+<?php
+$file_path = dirname(__FILE__);
+unlink($file_path."/fileperms_variation1_symlink.tmp");
+unlink($file_path."/fileperms_variation1_link.tmp");
+unlink($file_path."/fileperms_variation1.tmp");
+?>
+
+--EXPECTF--
+*** Testing fileperms() with links ***
+int(%d)
+int(%d)
+
+*** Done ***
diff --git a/ext/standard/tests/file/fileperms_variation2.phpt b/ext/standard/tests/file/fileperms_variation2.phpt
new file mode 100644
index 000000000..ecd6cedb4
--- /dev/null
+++ b/ext/standard/tests/file/fileperms_variation2.phpt
@@ -0,0 +1,70 @@
+--TEST--
+Test fileperms() function: usage variations - invalid filenames
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype: int fileperms ( string $filename )
+ * Description: Returns the group ID of the file, or FALSE in case of an error.
+ */
+
+/* Testing fileperms() with invalid arguments -int, float, bool, NULL, resource */
+
+$file_path = dirname(__FILE__);
+$file_handle = fopen($file_path."/fileperms_variation2.tmp", "w");
+
+echo "*** Testing Invalid file types ***\n";
+$filenames = array(
+ /* Invalid filenames */
+ -2.34555,
+ " ",
+ "",
+ TRUE,
+ FALSE,
+ NULL,
+ $file_handle,
+
+ /* scalars */
+ 1234,
+ 0
+);
+
+/* loop through to test each element the above array */
+foreach( $filenames as $filename ) {
+ var_dump( fileperms($filename) );
+ clearstatcache();
+}
+fclose($file_handle);
+
+echo "\n*** Done ***";
+?>
+--CLEAN--
+<?php
+$file_path = dirname(__FILE__);
+unlink($file_path."/fileperms_variation2.tmp");
+?>
+--EXPECTF--
+*** Testing Invalid file types ***
+
+Warning: fileperms(): stat failed for -2.34555 in %s on line %d
+bool(false)
+
+Warning: fileperms(): stat failed for in %s on line %d
+bool(false)
+bool(false)
+
+Warning: fileperms(): stat failed for 1 in %s on line %d
+bool(false)
+bool(false)
+bool(false)
+
+Warning: fileperms(): stat failed for Resource id #%d in %s on line %d
+bool(false)
+
+Warning: fileperms(): stat failed for 1234 in %s on line %d
+bool(false)
+
+Warning: fileperms(): stat failed for 0 in %s on line %d
+bool(false)
+
+*** Done *** \ No newline at end of file
diff --git a/ext/standard/tests/file/fileperms_variation3.phpt b/ext/standard/tests/file/fileperms_variation3.phpt
new file mode 100644
index 000000000..38101e363
--- /dev/null
+++ b/ext/standard/tests/file/fileperms_variation3.phpt
@@ -0,0 +1,81 @@
+--TEST--
+Test fileperms() function: usage variations - diff. path notations
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype: int fileperms ( string $filename )
+ * Description: Returns the group ID of the file, or FALSE in case of an error.
+ */
+
+/* Passing file names with different notations, using slashes, wild-card chars */
+
+$file_path = dirname(__FILE__);
+
+echo "*** Testing fileperms() with different notations of file names ***\n";
+$dir_name = $file_path."/fileperms_variation3";
+mkdir($dir_name);
+$file_handle = fopen($dir_name."/fileperms_variation3.tmp", "w");
+fclose($file_handle);
+
+$files_arr = array(
+ "/fileperms_variation3/fileperms_variation3.tmp",
+
+ /* Testing a file trailing slash */
+ "/fileperms_variation3/fileperms_variation3.tmp/",
+
+ /* Testing file with double slashes */
+ "/fileperms_variation3//fileperms_variation3.tmp",
+ "//fileperms_variation3//fileperms_variation3.tmp",
+ "/fileperms_variation3/*.tmp",
+ "fileperms_variation3/fileperms*.tmp",
+
+ /* Testing Binary safe */
+ "/fileperms_variation3/fileperms_variation3.tmp".chr(0),
+ "/fileperms_variation3/fileperms_variation3.tmp\0"
+);
+
+$count = 1;
+/* loop through to test each element in the above array */
+foreach($files_arr as $file) {
+ echo "- Iteration $count -\n";
+ var_dump( fileperms( $file_path."/".$file ) );
+ clearstatcache();
+ $count++;
+}
+
+echo "\n*** Done ***";
+?>
+--CLEAN--
+<?php
+$file_path = dirname(__FILE__);
+$dir_name = $file_path."/fileperms_variation3";
+unlink($dir_name."/fileperms_variation3.tmp");
+rmdir($dir_name);
+?>
+--EXPECTF--
+*** Testing fileperms() with different notations of file names ***
+- Iteration 1 -
+int(%d)
+- Iteration 2 -
+
+Warning: fileperms(): stat failed for %s//fileperms_variation3/fileperms_variation3.tmp/ in %s on line %d
+bool(false)
+- Iteration 3 -
+int(%d)
+- Iteration 4 -
+int(%d)
+- Iteration 5 -
+
+Warning: fileperms(): stat failed for %s//fileperms_variation3/*.tmp in %s on line %d
+bool(false)
+- Iteration 6 -
+
+Warning: fileperms(): stat failed for %s/fileperms_variation3/fileperms*.tmp in %s on line %d
+bool(false)
+- Iteration 7 -
+int(%d)
+- Iteration 8 -
+int(%d)
+
+*** Done ***
diff --git a/ext/standard/tests/file/filesize_variation1.phpt b/ext/standard/tests/file/filesize_variation1.phpt
index a8a4d4e7f..8d18f68ee 100644
--- a/ext/standard/tests/file/filesize_variation1.phpt
+++ b/ext/standard/tests/file/filesize_variation1.phpt
@@ -32,14 +32,14 @@ echo "Done\n";
--EXPECTF--
*** Testing filesize(): usage variations ***
*** Checking filesize() with different size of files ***
-int(1024)
-int(1025024)
-int(2049024)
-int(3073024)
-int(4097024)
-int(5121024)
-int(6145024)
-int(7169024)
-int(8193024)
-int(9217024)
+int(%d)
+int(%d)
+int(%d)
+int(%d)
+int(%d)
+int(%d)
+int(%d)
+int(%d)
+int(%d)
+int(%d)
Done
diff --git a/ext/standard/tests/file/filesize_variation5.phpt b/ext/standard/tests/file/filesize_variation5.phpt
new file mode 100644
index 000000000..638f8ba8e
--- /dev/null
+++ b/ext/standard/tests/file/filesize_variation5.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test filesize() function: usage variations - size of files
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/*
+ * Prototype : int filesize ( string $filename );
+ * Description : Returns the size of the file in bytes, or FALSE
+ * (and generates an error of level E_WARNING) in case of an error.
+ */
+
+echo "*** Testing filesize(): usage variations ***\n";
+
+/* null, false, "", " " */
+var_dump( filesize(NULL) );
+var_dump( filesize(false) );
+var_dump( filesize('') );
+var_dump( filesize(' ') );
+var_dump( filesize('|') );
+echo "*** Done ***\n";
+?>
+--EXPECTF--
+*** Testing filesize(): usage variations ***
+bool(false)
+bool(false)
+bool(false)
+
+Warning: filesize(): stat failed for in %s on line %d
+bool(false)
+
+Warning: filesize(): stat failed for | in %s on line %d
+bool(false)
+*** Done ***
diff --git a/ext/standard/tests/file/filetype_variation2.phpt b/ext/standard/tests/file/filetype_variation2.phpt
new file mode 100644
index 000000000..95885757c
--- /dev/null
+++ b/ext/standard/tests/file/filetype_variation2.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test filetype() function: Variations
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip no /dev on Windows');
+}
+?>
+--FILE--
+<?php
+/*
+Prototype: string filetype ( string $filename );
+Description: Returns the type of the file. Possible values are fifo, char,
+ dir, block, link, file, and unknown.
+*/
+
+echo "*** Testing filetype() with various types ***\n";
+echo "-- Checking for char --\n";
+print( filetype("/dev/console") )."\n";
+
+echo "-- Checking for block --\n";
+//we have cheated in our mac build by creating a ram0 block device.
+print( filetype("/dev/ram0") )."\n";
+
+echo "\n*** Done ***\n";
+?>
+--EXPECTF--
+*** Testing filetype() with various types ***
+-- Checking for char --
+char
+-- Checking for block --
+block
+
+*** Done ***
diff --git a/ext/standard/tests/file/flock_error.phpt b/ext/standard/tests/file/flock_error.phpt
index 077e5430b..fe61e2a17 100644
--- a/ext/standard/tests/file/flock_error.phpt
+++ b/ext/standard/tests/file/flock_error.phpt
@@ -94,7 +94,7 @@ NULL
Warning: flock() expects parameter 2 to be long, string given in %s on line %d
NULL
-Warning: flock(): 6 is not a valid stream resource in %s on line %d
+Warning: flock(): %d is not a valid stream resource in %s on line %d
bool(false)
Warning: flock() expects parameter 1 to be resource, string given in %s on line %d
diff --git a/ext/standard/tests/file/fopen_include_path.inc b/ext/standard/tests/file/fopen_include_path.inc
new file mode 100644
index 000000000..7d6723a81
--- /dev/null
+++ b/ext/standard/tests/file/fopen_include_path.inc
@@ -0,0 +1,92 @@
+<?php
+$pwd = getcwd();
+$f = basename(__FILE__);
+$dir1 = $pwd."/".$f.".dir1";
+$dir2 = $pwd."/".$f.".dir2";
+$dir3 = $pwd."/".$f.".dir3";
+//invalid directory
+$dir4 = $pwd."/".$f.".dir4";
+$newdirs = array($dir1, $dir2, $dir3);
+
+$reldirs = array("dir1", "dir2", "dir3");
+
+function generate_next_rel_path() {
+ global $reldirs;
+ //create the include directory structure
+ $pathSep = ":";
+ $newIncludePath = "";
+ if(substr(PHP_OS, 0, 3) == 'WIN' ) {
+ $pathSep = ";";
+ }
+ foreach($reldirs as $newdir) {
+ $newIncludePath .= $newdir.$pathSep;
+ }
+ return "dir4".$pathSep . $newIncludePath;
+}
+
+function generate_next_path() {
+ global $newdirs, $dir4;
+ //create the include directory structure
+ $pathSep = ":";
+ $newIncludePath = "";
+ if(substr(PHP_OS, 0, 3) == 'WIN' ) {
+ $pathSep = ";";
+ }
+ foreach($newdirs as $newdir) {
+ $newIncludePath .= $newdir.$pathSep;
+ }
+ return $dir4.$pathSep . $newIncludePath;
+}
+
+
+function create_include_path() {
+
+ global $newdirs;
+ //create the include directory structure
+ $pathSep = ":";
+ $newIncludePath = "";
+ if(substr(PHP_OS, 0, 3) == 'WIN' ) {
+ $pathSep = ";";
+ }
+ foreach($newdirs as $newdir) {
+ mkdir($newdir);
+ $newIncludePath .= $newdir.$pathSep;
+ }
+ return $newIncludePath;
+}
+
+function relative_include_path() {
+
+ global $reldirs;
+ //create the include directory structure
+ $pathSep = ":";
+ $newIncludePath = "";
+ if(substr(PHP_OS, 0, 3) == 'WIN' ) {
+ $pathSep = ";";
+ }
+ foreach($reldirs as $newdir) {
+ mkdir($newdir);
+ $newIncludePath .= $newdir.$pathSep;
+ }
+ return $newIncludePath;
+}
+
+
+function teardown_include_path() {
+
+ global $newdirs;
+ // remove the directory structure
+ foreach($newdirs as $newdir) {
+ rmdir($newdir);
+ }
+}
+
+function teardown_relative_path() {
+
+ global $reldirs;
+ // remove the directory structure
+ foreach($reldirs as $newdir) {
+ rmdir($newdir);
+ }
+}
+?> \ No newline at end of file
diff --git a/ext/standard/tests/file/fopen_variation10-win32.phpt b/ext/standard/tests/file/fopen_variation10-win32.phpt
new file mode 100644
index 000000000..cae634cb2
--- /dev/null
+++ b/ext/standard/tests/file/fopen_variation10-win32.phpt
@@ -0,0 +1,143 @@
+--TEST--
+Test fopen() function : variation: interesting paths, no use include path
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Run only on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : resource fopen(string filename, string mode [, bool use_include_path [, resource context]])
+ * Description: Open a file or a URL and return a file pointer
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing fopen() : variation ***\n";
+
+// fopen with interesting windows paths.
+$testdir = dirname(__FILE__).'/fopen10.tmpDir';
+$rootdir = 'fopen10.tmpdirTwo';
+mkdir($testdir);
+mkdir('c:\\'.$rootdir);
+
+$unixifiedDir = '/'.substr(str_replace('\\','/',$testdir),3);
+
+$paths = array('c:\\',
+ 'c:',
+ 'c',
+ '\\',
+ '/',
+ 'c:'.$rootdir,
+ 'c:adir',
+ 'c:\\/',
+ 'c:\\'.$rootdir.'\\/',
+ 'c:\\'.$rootdir.'\\',
+ 'c:\\'.$rootdir.'/',
+ $unixifiedDir,
+ '/sortout');
+
+$file = "fopen_variation10.tmp";
+$firstfile = 'c:\\'.$rootdir.'\\'.$file;
+$secondfile = $testdir.'\\'.$file;
+$thirdfile = 'c:\\'.$file;
+
+$h = fopen($firstfile, 'w');
+fwrite($h, "file in $rootdir");
+fclose($h);
+
+$h = fopen($secondfile, 'w');
+fwrite($h, "file in fopen10.tmpDir");
+fclose($h);
+
+$h = fopen($thirdfile, 'w');
+fwrite($h, "file in root");
+fclose($h);
+
+foreach($paths as $path) {
+ echo "\n--$path--\n";
+ $toFind = $path.'\\'.$file;
+ $h = fopen($toFind, 'r');
+ if ($h === false) {
+ echo "file not opened for read\n";
+ }
+ else {
+ fpassthru($h);
+ echo "\n";
+ }
+ fclose($h);
+};
+
+unlink($firstfile);
+unlink($secondfile);
+unlink($thirdfile);
+rmdir($testdir);
+rmdir('c:\\'.$rootdir);
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing fopen() : variation ***
+
+--c:\--
+file in root
+
+--c:--
+file in root
+
+--c--
+
+Warning: fopen(c\fopen_variation10.tmp): failed to open stream: No such file or directory in %s on line %d
+file not opened for read
+
+Warning: fclose(): supplied argument is not a valid stream resource in %s on line %d
+
+--\--
+
+Warning: fopen(\\fopen_variation10.tmp): failed to open stream: Invalid argument in %s on line %d
+file not opened for read
+
+Warning: fclose(): supplied argument is not a valid stream resource in %s on line %d
+
+--/--
+
+Warning: fopen(/\fopen_variation10.tmp): failed to open stream: Invalid argument in %s on line %d
+file not opened for read
+
+Warning: fclose(): supplied argument is not a valid stream resource in %s on line %d
+
+--c:fopen10.tmpdirTwo--
+file in fopen10.tmpdirTwo
+
+--c:adir--
+
+Warning: fopen(c:adir\fopen_variation10.tmp): failed to open stream: No such file or directory in %s on line %d
+file not opened for read
+
+Warning: fclose(): supplied argument is not a valid stream resource in %s on line %d
+
+--c:\/--
+file in root
+
+--c:\fopen10.tmpdirTwo\/--
+file in fopen10.tmpdirTwo
+
+--c:\fopen10.tmpdirTwo\--
+file in fopen10.tmpdirTwo
+
+--c:\fopen10.tmpdirTwo/--
+file in fopen10.tmpdirTwo
+
+--/%s/fopen10.tmpDir--
+file in fopen10.tmpDir
+
+--/sortout--
+
+Warning: fopen(/sortout\fopen_variation10.tmp): failed to open stream: No such file or directory in %s on line %d
+file not opened for read
+
+Warning: fclose(): supplied argument is not a valid stream resource in %s on line %d
+===DONE===
diff --git a/ext/standard/tests/file/fopen_variation11-win32.phpt b/ext/standard/tests/file/fopen_variation11-win32.phpt
new file mode 100644
index 000000000..aca4e8f9a
--- /dev/null
+++ b/ext/standard/tests/file/fopen_variation11-win32.phpt
@@ -0,0 +1,142 @@
+--TEST--
+Test fopen() function : variation: interesting paths, use include path = true
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Run only on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : resource fopen(string filename, string mode [, bool use_include_path [, resource context]])
+ * Description: Open a file or a URL and return a file pointer
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing fopen() : variation ***\n";
+
+// fopen with interesting windows paths.
+$testdir = dirname(__FILE__).'/fopen11.tmpDir';
+$rootdir = 'fopen11.tmpdirTwo';
+mkdir($testdir);
+mkdir('c:\\'.$rootdir);
+
+$unixifiedDir = '/'.substr(str_replace('\\','/',$testdir),3);
+
+$paths = array('c:\\',
+ 'c:',
+ 'c',
+ '\\',
+ '/',
+ 'c:'.$rootdir,
+ 'c:adir',
+ 'c:\\/',
+ 'c:\\'.$rootdir.'\\/',
+ 'c:\\'.$rootdir.'\\',
+ 'c:\\'.$rootdir.'/',
+ $unixifiedDir,
+ '/sortout');
+
+$file = "fopen_variation11.tmp";
+$firstfile = 'c:\\'.$rootdir.'\\'.$file;
+$secondfile = $testdir.'\\'.$file;
+$thirdfile = 'c:\\'.$file;
+
+$h = fopen($firstfile, 'w');
+fwrite($h, "file in $rootdir");
+fclose($h);
+
+$h = fopen($secondfile, 'w');
+fwrite($h, "file in fopen11.tmpDir");
+fclose($h);
+
+$h = fopen($thirdfile, 'w');
+fwrite($h, "file in root");
+fclose($h);
+
+foreach($paths as $path) {
+ echo "\n--$path--\n";
+ $toFind = $path.'\\'.$file;
+ $h = fopen($toFind, 'r', true);
+ if ($h === false) {
+ echo "file not opened for read\n";
+ }
+ else {
+ fpassthru($h);
+ echo "\n";
+ }
+ fclose($h);
+};
+
+unlink($firstfile);
+unlink($secondfile);
+unlink($thirdfile);
+rmdir($testdir);
+rmdir('c:\\'.$rootdir);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing fopen() : variation ***
+
+--c:\--
+file in root
+
+--c:--
+file in root
+
+--c--
+
+Warning: fopen(c\fopen_variation11.tmp): failed to open stream: No such file or directory in %s on line %d
+file not opened for read
+
+Warning: fclose(): supplied argument is not a valid stream resource in %s on line %d
+
+--\--
+
+Warning: fopen(\\fopen_variation11.tmp): failed to open stream: Invalid argument in %s on line %d
+file not opened for read
+
+Warning: fclose(): supplied argument is not a valid stream resource in %s on line %d
+
+--/--
+
+Warning: fopen(/\fopen_variation11.tmp): failed to open stream: Invalid argument in %s on line %d
+file not opened for read
+
+Warning: fclose(): supplied argument is not a valid stream resource in %s on line %d
+
+--c:fopen11.tmpdirTwo--
+file in fopen11.tmpdirTwo
+
+--c:adir--
+
+Warning: fopen(c:adir\fopen_variation11.tmp): failed to open stream: No such file or directory in %s on line %d
+file not opened for read
+
+Warning: fclose(): supplied argument is not a valid stream resource in %s on line %d
+
+--c:\/--
+file in root
+
+--c:\fopen11.tmpdirTwo\/--
+file in fopen11.tmpdirTwo
+
+--c:\fopen11.tmpdirTwo\--
+file in fopen11.tmpdirTwo
+
+--c:\fopen11.tmpdirTwo/--
+file in fopen11.tmpdirTwo
+
+--/%s/fopen11.tmpDir--
+file in fopen11.tmpDir
+
+--/sortout--
+
+Warning: fopen(/sortout\fopen_variation11.tmp): failed to open stream: No such file or directory in %s on line %d
+file not opened for read
+
+Warning: fclose(): supplied argument is not a valid stream resource in %s on line %d
+===DONE===
diff --git a/ext/standard/tests/file/fopen_variation12.phpt b/ext/standard/tests/file/fopen_variation12.phpt
new file mode 100644
index 000000000..bfda7f2a3
--- /dev/null
+++ b/ext/standard/tests/file/fopen_variation12.phpt
@@ -0,0 +1,53 @@
+--TEST--
+Test fopen() function : variation: use include path (path is bad) create a file (relative)
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : resource fopen(string filename, string mode [, bool use_include_path [, resource context]])
+ * Description: Open a file or a URL and return a file pointer
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing fopen() : variation ***\n";
+set_include_path("rubbish");
+testme();
+restore_include_path();
+
+
+function testme() {
+ $tmpfile = 'fopen_variation12.tmp';
+ $h = fopen($tmpfile, "w", true);
+ fwrite($h, "This is the test file");
+ fclose($h);
+
+
+ $h = @fopen($tmpfile, "r");
+ if ($h === false) {
+ echo "Not created in working dir\n";
+ }
+ else {
+ echo "created in working dir\n";
+ fclose($h);
+ unlink($tmpfile);
+ }
+
+ $scriptDirFile = dirname(__FILE__).'/'.$tmpfile;
+ $h = fopen($scriptDirFile, "r");
+ if ($h === false) {
+ echo "Not created in script dir\n";
+ }
+ else {
+ echo "created in script dir\n";
+ fclose($h);
+ unlink($scriptDirFile);
+ }
+}
+?>
+===DONE===
+--EXPECT--
+*** Testing fopen() : variation ***
+Not created in working dir
+created in script dir
+===DONE===
diff --git a/ext/standard/tests/file/fopen_variation13.phpt b/ext/standard/tests/file/fopen_variation13.phpt
new file mode 100644
index 000000000..d540d7000
--- /dev/null
+++ b/ext/standard/tests/file/fopen_variation13.phpt
@@ -0,0 +1,56 @@
+--TEST--
+Test fopen() function : variation: use include path create a file (absolute)
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : resource fopen(string filename, string mode [, bool use_include_path [, resource context]])
+ * Description: Open a file or a URL and return a file pointer
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+require_once('fopen_include_path.inc');
+
+echo "*** Testing fopen() : variation ***\n";
+$newpath = create_include_path();
+set_include_path($newpath);
+runtest();
+$newpath = generate_next_path();
+set_include_path($newpath);
+runtest();
+
+teardown_include_path();
+restore_include_path();
+
+
+function runtest() {
+ $tempDir = 'fopen_variation13.dir.tmp';
+ $tmpfile = 'fopen_variation13.tmp';
+ $absFile = getcwd().'/'.$tempDir.'/'.$tmpfile;
+
+ mkdir($tempDir);
+ $h = fopen($absFile, "w", true);
+ fwrite($h, "This is the test file");
+ fclose($h);
+
+
+ $h = fopen($absFile, "r");
+ if ($h === false) {
+ echo "Not created absolute location\n";
+ }
+ else {
+ echo "Created in correct location\n";
+ fclose($h);
+ }
+ unlink($absFile);
+ rmdir($tempDir);
+
+}
+?>
+===DONE===
+--EXPECT--
+*** Testing fopen() : variation ***
+Created in correct location
+Created in correct location
+===DONE===
diff --git a/ext/standard/tests/file/fopen_variation14-win32.phpt b/ext/standard/tests/file/fopen_variation14-win32.phpt
new file mode 100644
index 000000000..554d8c6de
--- /dev/null
+++ b/ext/standard/tests/file/fopen_variation14-win32.phpt
@@ -0,0 +1,189 @@
+--TEST--
+Test fopen() function : variation: file uri, no use include path
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Run only on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : resource fopen(string filename, string mode [, bool use_include_path [, resource context]])
+ * Description: Open a file or a URL and return a file pointer
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing fopen() : variation ***\n";
+
+// fopen with interesting windows paths.
+$testDir = 'fopen14.tmpDir';
+$absTestDir = getcwd().'/'.$testDir;
+$file = "fopen_variation14.tmp";
+$unixifiedDir = '/'.substr(str_replace('\\','/',$absTestDir),3);
+$absFile = $absTestDir.'/'.$file;
+
+mkdir($testDir);
+
+$files = array("file://$testDir\\$file",
+ "file://$testDir/$file",
+ "file://./$testDir/$file",
+ "file://.\\$testDir\\$file",
+ "file://$absTestDir/$file",
+ "file://$absTestDir\\$file",
+ "file://$unixifiedDir/$file"
+);
+
+runtest($files);
+
+chdir($testDir);
+$files = array("file://../$testDir/$file",
+ "file://..\\$testDir\\$file",
+ "file://$absTestDir/$file",
+ "file://$absTestDir\\$file",
+ "file://$unixifiedDir/$file"
+);
+runtest($files);
+chdir("..");
+rmdir($testDir);
+
+function runtest($fileURIs) {
+ global $absFile;
+ $iteration = 0;
+ foreach($fileURIs as $fileURI) {
+ echo "--- READ: $fileURI ---\n";
+
+ $readData = "read:$iteration";
+ $writeData = "write:$iteration";
+
+ // create the file and test read
+ $h = fopen($absFile, 'w');
+ fwrite($h, $readData);
+ fclose($h);
+
+ $h = fopen($fileURI, 'r');
+ if ($h !== false) {
+ if (fread($h, 4096) != $readData) {
+ echo "contents not correct\n";
+ }
+ else {
+ echo "test passed\n";
+ }
+ fclose($h);
+ }
+ unlink($absFile);
+
+ echo "--- WRITE: $fileURI ---\n";
+ // create the file to test write
+ $h = fopen($fileURI, 'w');
+ if ($h !== false) {
+ fwrite($h, $writeData);
+ fclose($h);
+
+ $h = fopen($absFile, 'r');
+ if ($h !== false) {
+ if (fread($h, 4096) != $writeData) {
+ echo "contents not correct\n";
+ }
+ else {
+ echo "test passed\n";
+ }
+ fclose($h);
+ }
+ unlink($absFile);
+ }
+ }
+}
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing fopen() : variation ***
+--- READ: file://fopen14.tmpDir\fopen_variation14.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://fopen14.tmpDir\fopen_variation14.tmp in %s on line %d
+
+Warning: fopen(file://fopen14.tmpDir\fopen_variation14.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- WRITE: file://fopen14.tmpDir\fopen_variation14.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://fopen14.tmpDir\fopen_variation14.tmp in %s on line %d
+
+Warning: fopen(file://fopen14.tmpDir\fopen_variation14.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- READ: file://fopen14.tmpDir/fopen_variation14.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://fopen14.tmpDir/fopen_variation14.tmp in %s on line %d
+
+Warning: fopen(file://fopen14.tmpDir/fopen_variation14.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- WRITE: file://fopen14.tmpDir/fopen_variation14.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://fopen14.tmpDir/fopen_variation14.tmp in %s on line %d
+
+Warning: fopen(file://fopen14.tmpDir/fopen_variation14.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- READ: file://./fopen14.tmpDir/fopen_variation14.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://./fopen14.tmpDir/fopen_variation14.tmp in %s on line %d
+
+Warning: fopen(file://./fopen14.tmpDir/fopen_variation14.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- WRITE: file://./fopen14.tmpDir/fopen_variation14.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://./fopen14.tmpDir/fopen_variation14.tmp in %s on line %d
+
+Warning: fopen(file://./fopen14.tmpDir/fopen_variation14.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- READ: file://.\fopen14.tmpDir\fopen_variation14.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://.\fopen14.tmpDir\fopen_variation14.tmp in %s on line %d
+
+Warning: fopen(file://.\fopen14.tmpDir\fopen_variation14.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- WRITE: file://.\fopen14.tmpDir\fopen_variation14.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://.\fopen14.tmpDir\fopen_variation14.tmp in %s on line %d
+
+Warning: fopen(file://.\fopen14.tmpDir\fopen_variation14.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- READ: file://%s/fopen14.tmpDir/fopen_variation14.tmp ---
+test passed
+--- WRITE: file://%s/fopen14.tmpDir/fopen_variation14.tmp ---
+test passed
+--- READ: file://%s/fopen14.tmpDir\fopen_variation14.tmp ---
+test passed
+--- WRITE: file://%s/fopen14.tmpDir\fopen_variation14.tmp ---
+test passed
+--- READ: file:///%s/fopen14.tmpDir/fopen_variation14.tmp ---
+test passed
+--- WRITE: file:///%s/fopen14.tmpDir/fopen_variation14.tmp ---
+test passed
+--- READ: file://../fopen14.tmpDir/fopen_variation14.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://../fopen14.tmpDir/fopen_variation14.tmp in %s on line %d
+
+Warning: fopen(file://../fopen14.tmpDir/fopen_variation14.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- WRITE: file://../fopen14.tmpDir/fopen_variation14.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://../fopen14.tmpDir/fopen_variation14.tmp in %s on line %d
+
+Warning: fopen(file://../fopen14.tmpDir/fopen_variation14.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- READ: file://..\fopen14.tmpDir\fopen_variation14.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://..\fopen14.tmpDir\fopen_variation14.tmp in %s on line %d
+
+Warning: fopen(file://..\fopen14.tmpDir\fopen_variation14.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- WRITE: file://..\fopen14.tmpDir\fopen_variation14.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://..\fopen14.tmpDir\fopen_variation14.tmp in %s on line %d
+
+Warning: fopen(file://..\fopen14.tmpDir\fopen_variation14.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- READ: file://%s/fopen14.tmpDir/fopen_variation14.tmp ---
+test passed
+--- WRITE: file://%s/fopen14.tmpDir/fopen_variation14.tmp ---
+test passed
+--- READ: file://%s/fopen14.tmpDir\fopen_variation14.tmp ---
+test passed
+--- WRITE: file://%s/fopen14.tmpDir\fopen_variation14.tmp ---
+test passed
+--- READ: file:///%s/fopen14.tmpDir/fopen_variation14.tmp ---
+test passed
+--- WRITE: file:///%s/fopen14.tmpDir/fopen_variation14.tmp ---
+test passed
+===DONE===
+
diff --git a/ext/standard/tests/file/fopen_variation14.phpt b/ext/standard/tests/file/fopen_variation14.phpt
new file mode 100644
index 000000000..aa4e05b89
--- /dev/null
+++ b/ext/standard/tests/file/fopen_variation14.phpt
@@ -0,0 +1,134 @@
+--TEST--
+Test fopen() function : variation: file uri, no use include path
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip not for Windows");
+?>
+--FILE--
+<?php
+/* Prototype : resource fopen(string filename, string mode [, bool use_include_path [, resource context]])
+ * Description: Open a file or a URL and return a file pointer
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing fopen() : variation ***\n";
+
+// fopen with interesting windows paths.
+$testDir = 'fopen14.tmpDir';
+$absTestDir = getcwd().'/'.$testDir;
+$file = "fopen_variation14.tmp";
+$absFile = $absTestDir.'/'.$file;
+
+mkdir($testDir);
+
+$files = array("file://$testDir/$file",
+ "file://./$testDir/$file",
+ "file://$absTestDir/$file"
+);
+
+runtest($files);
+
+chdir($testDir);
+$files = array("file://../$testDir/$file",
+ "file://$absTestDir/$file",
+);
+runtest($files);
+chdir("..");
+rmdir($testDir);
+
+function runtest($fileURIs) {
+ global $absFile;
+ $iteration = 0;
+ foreach($fileURIs as $fileURI) {
+ echo "--- READ: $fileURI ---\n";
+
+ $readData = "read:$iteration";
+ $writeData = "write:$iteration";
+
+ // create the file and test read
+ $h = fopen($absFile, 'w');
+ fwrite($h, $readData);
+ fclose($h);
+
+ $h = fopen($fileURI, 'r');
+ if ($h !== false) {
+ if (fread($h, 4096) != $readData) {
+ echo "contents not correct\n";
+ }
+ else {
+ echo "test passed\n";
+ }
+ fclose($h);
+ }
+ unlink($absFile);
+
+ echo "--- WRITE: $fileURI ---\n";
+ // create the file to test write
+ $h = fopen($fileURI, 'w');
+ if ($h !== false) {
+ fwrite($h, $writeData);
+ fclose($h);
+
+ $h = fopen($absFile, 'r');
+ if ($h !== false) {
+ if (fread($h, 4096) != $writeData) {
+ echo "contents not correct\n";
+ }
+ else {
+ echo "test passed\n";
+ }
+ fclose($h);
+ }
+ unlink($absFile);
+ }
+ }
+}
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing fopen() : variation ***
+--- READ: file://fopen14.tmpDir/fopen_variation14.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://fopen14.tmpDir/fopen_variation14.tmp in %s on line %d
+
+Warning: fopen(file://fopen14.tmpDir/fopen_variation14.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- WRITE: file://fopen14.tmpDir/fopen_variation14.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://fopen14.tmpDir/fopen_variation14.tmp in %s on line %d
+
+Warning: fopen(file://fopen14.tmpDir/fopen_variation14.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- READ: file://./fopen14.tmpDir/fopen_variation14.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://./fopen14.tmpDir/fopen_variation14.tmp in %s on line %d
+
+Warning: fopen(file://./fopen14.tmpDir/fopen_variation14.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- WRITE: file://./fopen14.tmpDir/fopen_variation14.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://./fopen14.tmpDir/fopen_variation14.tmp in %s on line %d
+
+Warning: fopen(file://./fopen14.tmpDir/fopen_variation14.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- READ: file:///%s/fopen14.tmpDir/fopen_variation14.tmp ---
+test passed
+--- WRITE: file:///%s/fopen14.tmpDir/fopen_variation14.tmp ---
+test passed
+--- READ: file://../fopen14.tmpDir/fopen_variation14.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://../fopen14.tmpDir/fopen_variation14.tmp in %s on line %d
+
+Warning: fopen(file://../fopen14.tmpDir/fopen_variation14.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- WRITE: file://../fopen14.tmpDir/fopen_variation14.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://../fopen14.tmpDir/fopen_variation14.tmp in %s on line %d
+
+Warning: fopen(file://../fopen14.tmpDir/fopen_variation14.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- READ: file:///%s/fopen14.tmpDir/fopen_variation14.tmp ---
+test passed
+--- WRITE: file:///%s/fopen14.tmpDir/fopen_variation14.tmp ---
+test passed
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/fopen_variation15-win32.phpt b/ext/standard/tests/file/fopen_variation15-win32.phpt
new file mode 100644
index 000000000..8599306ed
--- /dev/null
+++ b/ext/standard/tests/file/fopen_variation15-win32.phpt
@@ -0,0 +1,193 @@
+--TEST--
+Test fopen() function : variation: file uri, use include path = true
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Run only on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : resource fopen(string filename, string mode [, bool use_include_path [, resource context]])
+ * Description: Open a file or a URL and return a file pointer
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing fopen() : variation ***\n";
+
+// fopen with interesting windows paths.
+$includePathDir = getcwd().'/fopen15.includeDir';
+$testDir = 'fopen15.tmpDir';
+$absTestDir = getcwd().'/'.$testDir;
+$file = "fopen_variation15.tmp";
+$unixifiedDir = '/'.substr(str_replace('\\','/',$absTestDir),3);
+$absFile = $absTestDir.'/'.$file;
+
+mkdir($testDir);
+mkdir($includePathDir);
+set_include_path($includePathDir);
+
+$files = array("file://$testDir\\$file",
+ "file://$testDir/$file",
+ "file://./$testDir/$file",
+ "file://.\\$testDir\\$file",
+ "file://$absTestDir/$file",
+ "file://$absTestDir\\$file",
+ "file://$unixifiedDir/$file"
+);
+
+runtest($files);
+
+chdir($testDir);
+$files = array("file://../$testDir/$file",
+ "file://..\\$testDir\\$file",
+ "file://$absTestDir/$file",
+ "file://$absTestDir\\$file",
+ "file://$unixifiedDir/$file"
+);
+runtest($files);
+chdir("..");
+rmdir($testDir);
+rmdir($includePathDir);
+
+function runtest($fileURIs) {
+ global $absFile;
+ $iteration = 0;
+ foreach($fileURIs as $fileURI) {
+ echo "--- READ: $fileURI ---\n";
+
+ $readData = "read:$iteration";
+ $writeData = "write:$iteration";
+
+ // create the file and test read
+ $h = fopen($absFile, 'w');
+ fwrite($h, $readData);
+ fclose($h);
+
+ $h = fopen($fileURI, 'r', true);
+ if ($h !== false) {
+ if (fread($h, 4096) != $readData) {
+ echo "contents not correct\n";
+ }
+ else {
+ echo "test passed\n";
+ }
+ fclose($h);
+ }
+ unlink($absFile);
+
+ echo "--- WRITE: $fileURI ---\n";
+ // create the file to test write
+ $h = fopen($fileURI, 'w', true);
+ if ($h !== false) {
+ fwrite($h, $writeData);
+ fclose($h);
+
+ $h = fopen($absFile, 'r');
+ if ($h !== false) {
+ if (fread($h, 4096) != $writeData) {
+ echo "contents not correct\n";
+ }
+ else {
+ echo "test passed\n";
+ }
+ fclose($h);
+ }
+ unlink($absFile);
+ }
+ }
+}
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing fopen() : variation ***
+--- READ: file://fopen15.tmpDir\fopen_variation15.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://fopen15.tmpDir\fopen_variation15.tmp in %s on line %d
+
+Warning: fopen(file://fopen15.tmpDir\fopen_variation15.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- WRITE: file://fopen15.tmpDir\fopen_variation15.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://fopen15.tmpDir\fopen_variation15.tmp in %s on line %d
+
+Warning: fopen(file://fopen15.tmpDir\fopen_variation15.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- READ: file://fopen15.tmpDir/fopen_variation15.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://fopen15.tmpDir/fopen_variation15.tmp in %s on line %d
+
+Warning: fopen(file://fopen15.tmpDir/fopen_variation15.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- WRITE: file://fopen15.tmpDir/fopen_variation15.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://fopen15.tmpDir/fopen_variation15.tmp in %s on line %d
+
+Warning: fopen(file://fopen15.tmpDir/fopen_variation15.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- READ: file://./fopen15.tmpDir/fopen_variation15.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://./fopen15.tmpDir/fopen_variation15.tmp in %s on line %d
+
+Warning: fopen(file://./fopen15.tmpDir/fopen_variation15.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- WRITE: file://./fopen15.tmpDir/fopen_variation15.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://./fopen15.tmpDir/fopen_variation15.tmp in %s on line %d
+
+Warning: fopen(file://./fopen15.tmpDir/fopen_variation15.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- READ: file://.\fopen15.tmpDir\fopen_variation15.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://.\fopen15.tmpDir\fopen_variation15.tmp in %s on line %d
+
+Warning: fopen(file://.\fopen15.tmpDir\fopen_variation15.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- WRITE: file://.\fopen15.tmpDir\fopen_variation15.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://.\fopen15.tmpDir\fopen_variation15.tmp in %s on line %d
+
+Warning: fopen(file://.\fopen15.tmpDir\fopen_variation15.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- READ: file://%s/fopen15.tmpDir/fopen_variation15.tmp ---
+test passed
+--- WRITE: file://%s/fopen15.tmpDir/fopen_variation15.tmp ---
+test passed
+--- READ: file://%s/fopen15.tmpDir\fopen_variation15.tmp ---
+test passed
+--- WRITE: file://%s/fopen15.tmpDir\fopen_variation15.tmp ---
+test passed
+--- READ: file:///%s/fopen15.tmpDir/fopen_variation15.tmp ---
+test passed
+--- WRITE: file:///%s/fopen15.tmpDir/fopen_variation15.tmp ---
+test passed
+--- READ: file://../fopen15.tmpDir/fopen_variation15.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://../fopen15.tmpDir/fopen_variation15.tmp in %s on line %d
+
+Warning: fopen(file://../fopen15.tmpDir/fopen_variation15.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- WRITE: file://../fopen15.tmpDir/fopen_variation15.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://../fopen15.tmpDir/fopen_variation15.tmp in %s on line %d
+
+Warning: fopen(file://../fopen15.tmpDir/fopen_variation15.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- READ: file://..\fopen15.tmpDir\fopen_variation15.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://..\fopen15.tmpDir\fopen_variation15.tmp in %s on line %d
+
+Warning: fopen(file://..\fopen15.tmpDir\fopen_variation15.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- WRITE: file://..\fopen15.tmpDir\fopen_variation15.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://..\fopen15.tmpDir\fopen_variation15.tmp in %s on line %d
+
+Warning: fopen(file://..\fopen15.tmpDir\fopen_variation15.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- READ: file://%s/fopen15.tmpDir/fopen_variation15.tmp ---
+test passed
+--- WRITE: file://%s/fopen15.tmpDir/fopen_variation15.tmp ---
+test passed
+--- READ: file://%s/fopen15.tmpDir\fopen_variation15.tmp ---
+test passed
+--- WRITE: file://%s/fopen15.tmpDir\fopen_variation15.tmp ---
+test passed
+--- READ: file:///%s/fopen15.tmpDir/fopen_variation15.tmp ---
+test passed
+--- WRITE: file:///%s/fopen15.tmpDir/fopen_variation15.tmp ---
+test passed
+===DONE===
+
diff --git a/ext/standard/tests/file/fopen_variation15.phpt b/ext/standard/tests/file/fopen_variation15.phpt
new file mode 100644
index 000000000..24b01fbe8
--- /dev/null
+++ b/ext/standard/tests/file/fopen_variation15.phpt
@@ -0,0 +1,138 @@
+--TEST--
+Test fopen() function : variation: file uri, use include path = true
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip Not for Windows");
+?>
+--FILE--
+<?php
+/* Prototype : resource fopen(string filename, string mode [, bool use_include_path [, resource context]])
+ * Description: Open a file or a URL and return a file pointer
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing fopen() : variation ***\n";
+
+// fopen with interesting windows paths.
+$includePathDir = getcwd().'/fopen15.includeDir';
+$testDir = 'fopen15.tmpDir';
+$absTestDir = getcwd().'/'.$testDir;
+$file = "fopen_variation15.tmp";
+$absFile = $absTestDir.'/'.$file;
+
+mkdir($testDir);
+mkdir($includePathDir);
+set_include_path($includePathDir);
+
+$files = array("file://$testDir/$file",
+ "file://./$testDir/$file",
+ "file://$absTestDir/$file"
+);
+
+runtest($files);
+
+chdir($testDir);
+$files = array("file://../$testDir/$file",
+ "file://$absTestDir/$file"
+);
+runtest($files);
+chdir("..");
+rmdir($testDir);
+rmdir($includePathDir);
+
+function runtest($fileURIs) {
+ global $absFile;
+ $iteration = 0;
+ foreach($fileURIs as $fileURI) {
+ echo "--- READ: $fileURI ---\n";
+
+ $readData = "read:$iteration";
+ $writeData = "write:$iteration";
+
+ // create the file and test read
+ $h = fopen($absFile, 'w');
+ fwrite($h, $readData);
+ fclose($h);
+
+ $h = fopen($fileURI, 'r', true);
+ if ($h !== false) {
+ if (fread($h, 4096) != $readData) {
+ echo "contents not correct\n";
+ }
+ else {
+ echo "test passed\n";
+ }
+ fclose($h);
+ }
+ unlink($absFile);
+
+ echo "--- WRITE: $fileURI ---\n";
+ // create the file to test write
+ $h = fopen($fileURI, 'w', true);
+ if ($h !== false) {
+ fwrite($h, $writeData);
+ fclose($h);
+
+ $h = fopen($absFile, 'r');
+ if ($h !== false) {
+ if (fread($h, 4096) != $writeData) {
+ echo "contents not correct\n";
+ }
+ else {
+ echo "test passed\n";
+ }
+ fclose($h);
+ }
+ unlink($absFile);
+ }
+ }
+}
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing fopen() : variation ***
+--- READ: file://fopen15.tmpDir/fopen_variation15.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://fopen15.tmpDir/fopen_variation15.tmp in %s on line %d
+
+Warning: fopen(file://fopen15.tmpDir/fopen_variation15.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- WRITE: file://fopen15.tmpDir/fopen_variation15.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://fopen15.tmpDir/fopen_variation15.tmp in %s on line %d
+
+Warning: fopen(file://fopen15.tmpDir/fopen_variation15.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- READ: file://./fopen15.tmpDir/fopen_variation15.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://./fopen15.tmpDir/fopen_variation15.tmp in %s on line %d
+
+Warning: fopen(file://./fopen15.tmpDir/fopen_variation15.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- WRITE: file://./fopen15.tmpDir/fopen_variation15.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://./fopen15.tmpDir/fopen_variation15.tmp in %s on line %d
+
+Warning: fopen(file://./fopen15.tmpDir/fopen_variation15.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- READ: file:///%s/fopen15.tmpDir/fopen_variation15.tmp ---
+test passed
+--- WRITE: file:///%s/fopen15.tmpDir/fopen_variation15.tmp ---
+test passed
+--- READ: file://../fopen15.tmpDir/fopen_variation15.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://../fopen15.tmpDir/fopen_variation15.tmp in %s on line %d
+
+Warning: fopen(file://../fopen15.tmpDir/fopen_variation15.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- WRITE: file://../fopen15.tmpDir/fopen_variation15.tmp ---
+
+Warning: fopen(): remote host file access not supported, file://../fopen15.tmpDir/fopen_variation15.tmp in %s on line %d
+
+Warning: fopen(file://../fopen15.tmpDir/fopen_variation15.tmp): failed to open stream: no suitable wrapper could be found in %s on line %d
+--- READ: file:///%s/fopen15.tmpDir/fopen_variation15.tmp ---
+test passed
+--- WRITE: file:///%s/fopen15.tmpDir/fopen_variation15.tmp ---
+test passed
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/fopen_variation16.phpt b/ext/standard/tests/file/fopen_variation16.phpt
new file mode 100644
index 000000000..df6b98a4f
--- /dev/null
+++ b/ext/standard/tests/file/fopen_variation16.phpt
@@ -0,0 +1,73 @@
+--TEST--
+Test fopen() function : variation: use include path create and read a file (relative)
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : resource fopen(string filename, string mode [, bool use_include_path [, resource context]])
+ * Description: Open a file or a URL and return a file pointer
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+require_once('fopen_include_path.inc');
+
+echo "*** Testing fopen() : variation ***\n";
+$thisTestDir = "fopenVariation16.dir";
+mkdir($thisTestDir);
+chdir($thisTestDir);
+
+$newpath = create_include_path();
+set_include_path($newpath);
+runtest();
+$newpath = generate_next_path();
+set_include_path($newpath);
+runtest();
+
+teardown_include_path();
+restore_include_path();
+chdir("..");
+rmdir($thisTestDir);
+
+function runtest() {
+ global $dir1;
+
+ $extraDir = "extraDir";
+
+ mkdir($dir1.'/'.$extraDir);
+
+ $tmpfile = $extraDir.'/fopen_variation16.tmp';
+ $h = fopen($tmpfile, "w+", true);
+ fwrite($h, "This is the test file");
+ fclose($h);
+
+ $h = fopen($dir1.'/'.$tmpfile, "r");
+ if ($h === false) {
+ echo "Not created in dir1\n";
+ }
+ else {
+ echo "created in dir1\n";
+ fclose($h);
+ }
+
+ $h = fopen($tmpfile, "r", true);
+ if ($h === false) {
+ echo "could not find file for reading\n";
+ }
+ else {
+ echo "found file again in dir1\n";
+ fclose($h);
+ }
+
+ unlink($dir1.'/'.$tmpfile);
+ rmdir($dir1.'/'.$extraDir);
+}
+?>
+===DONE===
+--EXPECT--
+*** Testing fopen() : variation ***
+created in dir1
+found file again in dir1
+created in dir1
+found file again in dir1
+===DONE===
diff --git a/ext/standard/tests/file/fopen_variation17.phpt b/ext/standard/tests/file/fopen_variation17.phpt
new file mode 100644
index 000000000..0d3b625cc
--- /dev/null
+++ b/ext/standard/tests/file/fopen_variation17.phpt
@@ -0,0 +1,73 @@
+--TEST--
+Test fopen() function : variation: use include path create and read a file (relative)
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : resource fopen(string filename, string mode [, bool use_include_path [, resource context]])
+ * Description: Open a file or a URL and return a file pointer
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+require_once('fopen_include_path.inc');
+
+echo "*** Testing fopen() : variation ***\n";
+$thisTestDir = "fopenVariation17.dir";
+mkdir($thisTestDir);
+chdir($thisTestDir);
+
+$newpath = create_include_path();
+set_include_path($newpath);
+runtest();
+$newpath = generate_next_path();
+set_include_path($newpath);
+runtest();
+
+teardown_include_path();
+restore_include_path();
+chdir("..");
+rmdir($thisTestDir);
+
+function runtest() {
+ global $dir1;
+
+ $extraDir = "extraDir";
+
+ mkdir($dir1.'/'.$extraDir);
+
+ $tmpfile = $extraDir.'/fopen_variation17.tmp';
+ $h = fopen($tmpfile, "w+", true);
+ fwrite($h, "This is the test file");
+ fclose($h);
+
+ $h = fopen($dir1.'/'.$tmpfile, "r");
+ if ($h === false) {
+ echo "Not created in dir1\n";
+ }
+ else {
+ echo "created in dir1\n";
+ fclose($h);
+ }
+
+ $h = fopen($tmpfile, "r", true);
+ if ($h === false) {
+ echo "could not find file for reading\n";
+ }
+ else {
+ echo "found file again in dir1\n";
+ fclose($h);
+ }
+
+ unlink($dir1.'/'.$tmpfile);
+ rmdir($dir1.'/'.$extraDir);
+}
+?>
+===DONE===
+--EXPECT--
+*** Testing fopen() : variation ***
+created in dir1
+found file again in dir1
+created in dir1
+found file again in dir1
+===DONE===
diff --git a/ext/standard/tests/file/fopen_variation19.phpt b/ext/standard/tests/file/fopen_variation19.phpt
new file mode 100644
index 000000000..031ba4573
--- /dev/null
+++ b/ext/standard/tests/file/fopen_variation19.phpt
@@ -0,0 +1,110 @@
+--TEST--
+Test fopen() function : variation: test opening linked files
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip Not for Windows");
+?>
+--FILE--
+<?php
+/* Prototype : resource fopen(string filename, string mode [, bool use_include_path [, resource context]])
+ * Description: Open a file or a URL and return a file pointer
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+$tmpDir = 'fopenVar19.Dir';
+$realFilename = __FILE__.'.real';
+$sortFilename = __FILE__.'.soft';
+$hardFilename = __FILE__.'.hard';
+$linkOfLink = __FILE__.'.soft2';
+
+echo "*** Testing fopen() : variation ***\n";
+// start the test
+mkdir($tmpDir);
+chdir($tmpDir);
+
+$h = fopen($realFilename, "w");
+fwrite($h, "Hello World");
+fclose($h);
+
+symlink($realFilename, $sortFilename);
+symlink($sortFilename, $linkOfLink);
+link($realFilename, $hardFilename);
+
+
+
+echo "*** testing reading of links ***\n";
+echo "soft link:";
+readFile2($sortFilename);
+echo "hard link:";
+readFile2($hardFilename);
+echo "link of link:";
+readFile2($linkOfLink);
+
+echo "*** test appending to links ***\n";
+echo "soft link:";
+appendFile($sortFilename);
+echo "hard link:";
+appendFile($hardFilename);
+echo "link of link:";
+appendFile($linkOfLink);
+
+echo "*** test overwriting links ***\n";
+echo "soft link:";
+writeFile($sortFilename);
+echo "hard link:";
+writeFile($hardFilename);
+echo "link of link:";
+writeFile($linkOfLink);
+
+unlink($linkOfLink);
+unlink($sortFilename);
+unlink($hardFilename);
+unlink($realFilename);
+chdir("..");
+rmdir($tmpDir);
+
+function readFile2($file) {
+ $h = fopen($file, 'r');
+ fpassthru($h);
+ fclose($h);
+ echo "\n";
+}
+
+function appendFile($file) {
+ $h = fopen($file, 'a+');
+ fwrite($h, ' again!');
+ fseek($h, 0);
+ fpassthru($h);
+ fclose($h);
+ echo "\n";
+}
+
+function writeFile($file) {
+ $h = fopen($file, 'w');
+ fwrite($h, 'Goodbye World');
+ fclose($h);
+ readFile2($file);
+}
+
+
+?>
+===DONE===
+--EXPECT--
+*** Testing fopen() : variation ***
+*** testing reading of links ***
+soft link:Hello World
+hard link:Hello World
+link of link:Hello World
+*** test appending to links ***
+soft link:Hello World again!
+hard link:Hello World again! again!
+link of link:Hello World again! again! again!
+*** test overwriting links ***
+soft link:Goodbye World
+hard link:Goodbye World
+link of link:Goodbye World
+===DONE===
diff --git a/ext/standard/tests/file/fopen_variation3.phpt b/ext/standard/tests/file/fopen_variation3.phpt
new file mode 100644
index 000000000..3467a3a60
--- /dev/null
+++ b/ext/standard/tests/file/fopen_variation3.phpt
@@ -0,0 +1,218 @@
+--TEST--
+Test fopen() function : usage variation different datatypes for use_include_path
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : resource fopen(string filename, string mode [, bool use_include_path [, resource context]])
+ * Description: Open a file or a URL and return a file pointer
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing fopen() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$filename = __FILE__;
+$mode = 'r';
+
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for use_include_path
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ $h = fopen($filename, $mode, $value);
+ if ($h !== false) {
+ echo "ok\n";
+ fclose($h);
+ }
+ else {
+ var_dump($h);
+ }
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing fopen() : usage variation ***
+
+--int 0--
+ok
+
+--int 1--
+ok
+
+--int 12345--
+ok
+
+--int -12345--
+ok
+
+--float 10.5--
+ok
+
+--float -10.5--
+ok
+
+--float 12.3456789000e10--
+ok
+
+--float -12.3456789000e10--
+ok
+
+--float .5--
+ok
+
+--empty array--
+Error: 2 - fopen() expects parameter 3 to be boolean, array given, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - fopen() expects parameter 3 to be boolean, array given, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - fopen() expects parameter 3 to be boolean, array given, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - fopen() expects parameter 3 to be boolean, array given, %s(%d)
+bool(false)
+
+--uppercase NULL--
+ok
+
+--lowercase null--
+ok
+
+--lowercase true--
+ok
+
+--lowercase false--
+ok
+
+--uppercase TRUE--
+ok
+
+--uppercase FALSE--
+ok
+
+--empty string DQ--
+ok
+
+--empty string SQ--
+ok
+
+--string DQ--
+ok
+
+--string SQ--
+ok
+
+--mixed case string--
+ok
+
+--heredoc--
+ok
+
+--instance of classWithToString--
+Error: 2 - fopen() expects parameter 3 to be boolean, object given, %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - fopen() expects parameter 3 to be boolean, object given, %s(%d)
+bool(false)
+
+--undefined var--
+ok
+
+--unset var--
+ok
+===DONE===
diff --git a/ext/standard/tests/file/fopen_variation4.phpt b/ext/standard/tests/file/fopen_variation4.phpt
new file mode 100644
index 000000000..61d850c50
--- /dev/null
+++ b/ext/standard/tests/file/fopen_variation4.phpt
@@ -0,0 +1,251 @@
+--TEST--
+Test fopen() function : usage variation different datatypes for stream context
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : resource fopen(string filename, string mode [, bool use_include_path [, resource context]])
+ * Description: Open a file or a URL and return a file pointer
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing fopen() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$filename = __FILE__;
+$mode = 'r';
+$use_include_path = false;
+$fileresource = fopen($filename, $mode);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ //file resource
+ 'file resource' => $fileresource
+);
+
+// loop through each element of the array for context
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ $h = fopen($filename, $mode, false, $value);
+ if ($h !== false) {
+ echo "ok\n";
+ fclose($h);
+ }
+ else {
+ var_dump($h);
+ }
+};
+
+fclose($fileresource);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing fopen() : usage variation ***
+
+--int 0--
+Error: 2 - fopen() expects parameter 4 to be resource, integer given, %s(%d)
+bool(false)
+
+--int 1--
+Error: 2 - fopen() expects parameter 4 to be resource, integer given, %s(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - fopen() expects parameter 4 to be resource, integer given, %s(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - fopen() expects parameter 4 to be resource, integer given, %s(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - fopen() expects parameter 4 to be resource, double given, %s(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - fopen() expects parameter 4 to be resource, double given, %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - fopen() expects parameter 4 to be resource, double given, %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - fopen() expects parameter 4 to be resource, double given, %s(%d)
+bool(false)
+
+--float .5--
+Error: 2 - fopen() expects parameter 4 to be resource, double given, %s(%d)
+bool(false)
+
+--empty array--
+Error: 2 - fopen() expects parameter 4 to be resource, array given, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - fopen() expects parameter 4 to be resource, array given, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - fopen() expects parameter 4 to be resource, array given, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - fopen() expects parameter 4 to be resource, array given, %s(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - fopen() expects parameter 4 to be resource, null given, %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - fopen() expects parameter 4 to be resource, null given, %s(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - fopen() expects parameter 4 to be resource, boolean given, %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - fopen() expects parameter 4 to be resource, boolean given, %s(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - fopen() expects parameter 4 to be resource, boolean given, %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - fopen() expects parameter 4 to be resource, boolean given, %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - fopen() expects parameter 4 to be resource, string given, %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - fopen() expects parameter 4 to be resource, string given, %s(%d)
+bool(false)
+
+--string DQ--
+Error: 2 - fopen() expects parameter 4 to be resource, string given, %s(%d)
+bool(false)
+
+--string SQ--
+Error: 2 - fopen() expects parameter 4 to be resource, string given, %s(%d)
+bool(false)
+
+--mixed case string--
+Error: 2 - fopen() expects parameter 4 to be resource, string given, %s(%d)
+bool(false)
+
+--heredoc--
+Error: 2 - fopen() expects parameter 4 to be resource, string given, %s(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - fopen() expects parameter 4 to be resource, object given, %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - fopen() expects parameter 4 to be resource, object given, %s(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - fopen() expects parameter 4 to be resource, null given, %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - fopen() expects parameter 4 to be resource, null given, %s(%d)
+bool(false)
+
+--file resource--
+Error: 2 - fopen(): supplied resource is not a valid Stream-Context resource, %s(%d)
+ok
+===DONE===
diff --git a/ext/standard/tests/file/fopen_variation5.phpt b/ext/standard/tests/file/fopen_variation5.phpt
new file mode 100644
index 000000000..070ef712d
--- /dev/null
+++ b/ext/standard/tests/file/fopen_variation5.phpt
@@ -0,0 +1,171 @@
+--TEST--
+Test fopen() function : variation: use include path and stream context (absolute directories in path)
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : resource fopen(string filename, string mode [, bool use_include_path [, resource context]])
+ * Description: Open a file or a URL and return a file pointer
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+
+
+echo "*** Testing fopen() : variation ***\n";
+//create the include directory structure
+$thisTestDir = "fopenVariation5.dir";
+mkdir($thisTestDir);
+chdir($thisTestDir);
+
+$workingDir = "workdir";
+$filename = "afile.txt";
+$scriptDir = dirname(__FILE__);
+$baseDir = getcwd();
+$secondFile = $baseDir."/dir2/".$filename;
+$firstFile = "../dir1/".$filename;
+$scriptFile = $scriptDir.'/'.$filename;
+
+$newdirs = array("dir1", "dir2", "dir3");
+$pathSep = ":";
+$newIncludePath = "";
+if(substr(PHP_OS, 0, 3) == 'WIN' ) {
+ $pathSep = ";";
+}
+foreach($newdirs as $newdir) {
+ mkdir($newdir);
+ $newIncludePath .= $baseDir.'/'.$newdir.$pathSep;
+}
+mkdir($workingDir);
+chdir($workingDir);
+
+//define the files to go into these directories, create one in dir2
+echo "\n--- testing include path ---\n";
+set_include_path($newIncludePath);
+$modes = array("r", "r+", "rt");
+foreach($modes as $mode) {
+ test_fopen($mode);
+}
+restore_include_path();
+
+// remove the directory structure
+chdir($baseDir);
+rmdir($workingDir);
+foreach($newdirs as $newdir) {
+ rmdir($newdir);
+}
+
+chdir("..");
+rmdir($thisTestDir);
+
+
+function test_fopen($mode) {
+ global $scriptFile, $secondFile, $firstFile, $filename;
+
+ // create a file in the middle directory
+ $h = fopen($secondFile, "w");
+ fwrite($h, "in dir2");
+ fclose($h);
+
+ echo "\n** testing with mode=$mode **\n";
+ // should read dir2 file
+ $h = fopen($filename, $mode, true);
+ fpassthru($h);
+ fclose($h);
+ echo "\n";
+
+ //create a file in dir1
+ $h = fopen($firstFile, "w");
+ fwrite($h, "in dir1");
+ fclose($h);
+
+ //should now read dir1 file
+ $h = fopen($filename, $mode, true);
+ fpassthru($h);
+ fclose($h);
+ echo "\n";
+
+ // create a file in working directory
+ $h = fopen($filename, "w");
+ fwrite($h, "in working dir");
+ fclose($h);
+
+ //should still read dir1 file
+ $h = fopen($filename, $mode, true);
+ fpassthru($h);
+ fclose($h);
+ echo "\n";
+
+ unlink($firstFile);
+ unlink($secondFile);
+
+ //should fail to read the file
+ $h = fopen($filename, $mode, true);
+ fpassthru($h);
+ fclose($h);
+ echo "\n";
+
+ // create a file in the script directory
+ $h = fopen($scriptFile, "w");
+ fwrite($h, "in script dir");
+ fclose($h);
+
+ //should read the file in script dir
+ $h = fopen($filename, $mode, true);
+ fpassthru($h);
+ fclose($h);
+ echo "\n";
+
+ //cleanup
+ unlink($filename);
+ unlink($scriptFile);
+
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing fopen() : variation ***
+
+--- testing include path ---
+
+** testing with mode=r **
+in dir2
+in dir1
+in dir1
+
+Warning: fopen(afile.txt): failed to open stream: No such file or directory in %s on line %d
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+
+Warning: fclose(): supplied argument is not a valid stream resource in %s on line %d
+
+in script dir
+
+** testing with mode=r+ **
+in dir2
+in dir1
+in dir1
+
+Warning: fopen(afile.txt): failed to open stream: No such file or directory in %s on line %d
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+
+Warning: fclose(): supplied argument is not a valid stream resource in %s on line %d
+
+in script dir
+
+** testing with mode=rt **
+in dir2
+in dir1
+in dir1
+
+Warning: fopen(afile.txt): failed to open stream: No such file or directory in %s on line %d
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+
+Warning: fclose(): supplied argument is not a valid stream resource in %s on line %d
+
+in script dir
+===DONE===
+
diff --git a/ext/standard/tests/file/fopen_variation6.phpt b/ext/standard/tests/file/fopen_variation6.phpt
new file mode 100644
index 000000000..3a99212af
--- /dev/null
+++ b/ext/standard/tests/file/fopen_variation6.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test fopen() function : variation: use include path and stream context relative/absolute file
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : resource fopen(string filename, string mode [, bool use_include_path [, resource context]])
+ * Description: Open a file or a URL and return a file pointer
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing fopen() : variation ***\n";
+$absfile = __FILE__.'.tmp';
+$relfile = "fopen_variation6.tmp";
+
+$h = fopen($absfile, "w");
+fwrite($h, "This is an absolute file");
+fclose($h);
+
+$h = fopen($relfile, "w");
+fwrite($h, "This is a relative file");
+fclose($h);
+
+$ctx = stream_context_create();
+$h = fopen($absfile, "r", true, $ctx);
+fpassthru($h);
+fclose($h);
+echo "\n";
+
+$h = fopen($relfile, "r", true, $ctx);
+fpassthru($h);
+fclose($h);
+echo "\n";
+
+unlink($absfile);
+unlink($relfile);
+?>
+===DONE===
+--EXPECTF--
+*** Testing fopen() : variation ***
+This is an absolute file
+This is a relative file
+===DONE===
diff --git a/ext/standard/tests/file/fopen_variation7.phpt b/ext/standard/tests/file/fopen_variation7.phpt
new file mode 100644
index 000000000..54d567f0d
--- /dev/null
+++ b/ext/standard/tests/file/fopen_variation7.phpt
@@ -0,0 +1,68 @@
+--TEST--
+Test fopen() function : variation: use include path create a file (relative)
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : resource fopen(string filename, string mode [, bool use_include_path [, resource context]])
+ * Description: Open a file or a URL and return a file pointer
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+require_once('fopen_include_path.inc');
+
+echo "*** Testing fopen() : variation ***\n";
+$thisTestDir = "fopenVariation7.dir";
+mkdir($thisTestDir);
+chdir($thisTestDir);
+
+$newpath = create_include_path();
+set_include_path($newpath);
+runtest();
+$newpath = generate_next_path();
+set_include_path($newpath);
+runtest();
+
+teardown_include_path();
+restore_include_path();
+chdir("..");
+rmdir($thisTestDir);
+
+function runtest() {
+ global $dir1;
+ $tmpfile = 'fopen_variation7.tmp';
+ $h = fopen($tmpfile, "w", true);
+ fwrite($h, "This is the test file");
+ fclose($h);
+
+
+ $h = @fopen($tmpfile, "r");
+ if ($h === false) {
+ echo "Not created in working dir\n";
+ }
+ else {
+ echo "created in working dir\n";
+ fclose($h);
+ unlink($tmpfile);
+ }
+
+ $h = fopen($dir1.'/'.$tmpfile, "r");
+ if ($h === false) {
+ echo "Not created in dir1\n";
+ }
+ else {
+ echo "created in dir1\n";
+ fclose($h);
+ unlink($dir1.'/'.$tmpfile);
+ }
+}
+?>
+===DONE===
+--EXPECT--
+*** Testing fopen() : variation ***
+Not created in working dir
+created in dir1
+Not created in working dir
+created in dir1
+===DONE===
diff --git a/ext/standard/tests/file/fopen_variation8.phpt b/ext/standard/tests/file/fopen_variation8.phpt
new file mode 100644
index 000000000..60e65df5a
--- /dev/null
+++ b/ext/standard/tests/file/fopen_variation8.phpt
@@ -0,0 +1,170 @@
+--TEST--
+Test fopen() function : variation: use include path and stream context (relative directories in path)
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : resource fopen(string filename, string mode [, bool use_include_path [, resource context]])
+ * Description: Open a file or a URL and return a file pointer
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+
+
+echo "*** Testing fopen() : variation ***\n";
+$thisTestDir = "fopenVariation8.dir";
+mkdir($thisTestDir);
+chdir($thisTestDir);
+
+//create the include directory structure
+$workingDir = "workdir";
+$filename = "afile.txt";
+$scriptDir = dirname(__FILE__);
+$baseDir = getcwd();
+$secondFile = $baseDir."/dir2/".$filename;
+$firstFile = "../dir1/".$filename;
+$scriptFile = $scriptDir.'/'.$filename;
+
+$newdirs = array("dir1", "dir2", "dir3");
+$pathSep = ":";
+$newIncludePath = "";
+if(substr(PHP_OS, 0, 3) == 'WIN' ) {
+ $pathSep = ";";
+}
+foreach($newdirs as $newdir) {
+ mkdir($newdir);
+ $newIncludePath .= '../'.$newdir.$pathSep;
+}
+mkdir($workingDir);
+chdir($workingDir);
+
+//define the files to go into these directories, create one in dir2
+echo "\n--- testing include path ---\n";
+set_include_path($newIncludePath);
+$modes = array("r", "r+", "rt");
+foreach($modes as $mode) {
+ test_fopen($mode);
+}
+restore_include_path();
+
+// remove the directory structure
+chdir($baseDir);
+rmdir($workingDir);
+foreach($newdirs as $newdir) {
+ rmdir($newdir);
+}
+
+chdir("..");
+rmdir($thisTestDir);
+
+function test_fopen($mode) {
+ global $scriptFile, $secondFile, $firstFile, $filename;
+
+ // create a file in the middle directory
+ $h = fopen($secondFile, "w");
+ fwrite($h, "in dir2");
+ fclose($h);
+
+ echo "\n** testing with mode=$mode **\n";
+ // should read dir2 file
+ $h = fopen($filename, $mode, true);
+ fpassthru($h);
+ fclose($h);
+ echo "\n";
+
+ //create a file in dir1
+ $h = fopen($firstFile, "w");
+ fwrite($h, "in dir1");
+ fclose($h);
+
+ //should now read dir1 file
+ $h = fopen($filename, $mode, true);
+ fpassthru($h);
+ fclose($h);
+ echo "\n";
+
+ // create a file in working directory
+ $h = fopen($filename, "w");
+ fwrite($h, "in working dir");
+ fclose($h);
+
+ //should still read dir1 file
+ $h = fopen($filename, $mode, true);
+ fpassthru($h);
+ fclose($h);
+ echo "\n";
+
+ unlink($firstFile);
+ unlink($secondFile);
+
+ //should fail to read the file
+ $h = fopen($filename, $mode, true);
+ fpassthru($h);
+ fclose($h);
+ echo "\n";
+
+ // create a file in the script directory
+ $h = fopen($scriptFile, "w");
+ fwrite($h, "in script dir");
+ fclose($h);
+
+ //should read the file in script dir
+ $h = fopen($filename, $mode, true);
+ fpassthru($h);
+ fclose($h);
+ echo "\n";
+
+ //cleanup
+ unlink($filename);
+ unlink($scriptFile);
+
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing fopen() : variation ***
+
+--- testing include path ---
+
+** testing with mode=r **
+in dir2
+in dir1
+in dir1
+
+Warning: fopen(afile.txt): failed to open stream: No such file or directory in %s on line %d
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+
+Warning: fclose(): supplied argument is not a valid stream resource in %s on line %d
+
+in script dir
+
+** testing with mode=r+ **
+in dir2
+in dir1
+in dir1
+
+Warning: fopen(afile.txt): failed to open stream: No such file or directory in %s on line %d
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+
+Warning: fclose(): supplied argument is not a valid stream resource in %s on line %d
+
+in script dir
+
+** testing with mode=rt **
+in dir2
+in dir1
+in dir1
+
+Warning: fopen(afile.txt): failed to open stream: No such file or directory in %s on line %d
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+
+Warning: fclose(): supplied argument is not a valid stream resource in %s on line %d
+
+in script dir
+===DONE===
+
diff --git a/ext/standard/tests/file/fopen_variation9.phpt b/ext/standard/tests/file/fopen_variation9.phpt
new file mode 100644
index 000000000..283424b93
--- /dev/null
+++ b/ext/standard/tests/file/fopen_variation9.phpt
@@ -0,0 +1,67 @@
+--TEST--
+Test fopen() function : variation: use include path and stream context create a file, relative path
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : resource fopen(string filename, string mode [, bool use_include_path [, resource context]])
+ * Description: Open a file or a URL and return a file pointer
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+require_once('fopen_include_path.inc');
+
+echo "*** Testing fopen() : variation ***\n";
+$thisTestDir = "fopenVariation9.dir";
+mkdir($thisTestDir);
+chdir($thisTestDir);
+
+$newpath = relative_include_path();
+set_include_path($newpath);
+runtest();
+$newpath = generate_next_rel_path();
+set_include_path($newpath);
+runtest();
+
+teardown_relative_path();
+restore_include_path();
+chdir("..");
+rmdir($thisTestDir);
+
+function runtest() {
+ $tmpfile = 'fopen_variation7.tmp';
+ $h = fopen($tmpfile, "w", true);
+ fwrite($h, "This is the test file");
+ fclose($h);
+
+
+ $h = @fopen($tmpfile, "r");
+ if ($h === false) {
+ echo "Not created in working dir\n";
+ }
+ else {
+ echo "created in working dir\n";
+ fclose($h);
+ unlink($tmpfile);
+ }
+
+ $h = fopen('dir1/'.$tmpfile, "r");
+ if ($h === false) {
+ echo "Not created in dir1\n";
+ }
+ else {
+ echo "created in dir1\n";
+ fclose($h);
+ unlink('dir1/'.$tmpfile);
+ }
+}
+?>
+===DONE===
+--EXPECT--
+*** Testing fopen() : variation ***
+Not created in working dir
+created in dir1
+Not created in working dir
+created in dir1
+===DONE===
diff --git a/ext/standard/tests/file/fpassthru_error.phpt b/ext/standard/tests/file/fpassthru_error.phpt
index 68e2e46cd..c8cdccbf8 100644
--- a/ext/standard/tests/file/fpassthru_error.phpt
+++ b/ext/standard/tests/file/fpassthru_error.phpt
@@ -20,6 +20,11 @@ var_dump( fpassthru() );
/* No.of args greaer than expected */
var_dump( fpassthru("", "") );
+/* fpassthru on a closed file */
+$h = fopen(__FILE__,'r');
+fclose($h);
+fpassthru($h);
+
echo "\n*** Done ***\n";
?>
@@ -37,4 +42,6 @@ NULL
Warning: Wrong parameter count for fpassthru() in %s on line %d
NULL
+Warning: fpassthru(): %d is not a valid stream resource in %s on line %d
+
*** Done ***
diff --git a/ext/standard/tests/file/fpassthru_variation1.phpt b/ext/standard/tests/file/fpassthru_variation1.phpt
new file mode 100644
index 000000000..29c0355b9
--- /dev/null
+++ b/ext/standard/tests/file/fpassthru_variation1.phpt
@@ -0,0 +1,223 @@
+--TEST--
+Test fpassthru() function : usage variations - different parameter types
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : proto int fpassthru(resource fp)
+ * Description: Output all remaining data from a file pointer
+ * Source code: ext/standard/file.c
+ * Alias to functions: gzpassthru
+ */
+
+echo "*** Testing fpassthru() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+class testClass {
+ public function __toString() {
+ return "testClass";
+ }
+}
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new testClass(),
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for fp
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( fpassthru($value) );
+};
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing fpassthru() : usage variations ***
+
+Arg value 0
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value 12345
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value testClass
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: fpassthru(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+Done
diff --git a/ext/standard/tests/file/fputcsv_002.phpt b/ext/standard/tests/file/fputcsv_002.phpt
new file mode 100644
index 000000000..544ad306f
--- /dev/null
+++ b/ext/standard/tests/file/fputcsv_002.phpt
@@ -0,0 +1,43 @@
+--TEST--
+fputcsv(): Checking data after calling the function
+--FILE--
+<?php
+
+$file = dirname(__FILE__) .'/fgetcsv-test.csv';
+
+$data = array(1, 2, 'foo', 'haha', array(4, 5, 6), 1.3, null);
+
+$fp = fopen($file, 'w');
+
+fputcsv($fp, $data);
+
+var_dump($data);
+
+@unlink($file);
+
+?>
+--EXPECTF--
+Notice: Array to string conversion in %s on line %d
+array(7) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ string(3) "foo"
+ [3]=>
+ string(4) "haha"
+ [4]=>
+ array(3) {
+ [0]=>
+ int(4)
+ [1]=>
+ int(5)
+ [2]=>
+ int(6)
+ }
+ [5]=>
+ float(1.3)
+ [6]=>
+ NULL
+}
diff --git a/ext/standard/tests/file/fread_error.phpt b/ext/standard/tests/file/fread_error.phpt
index 785a6f64e..9f9f8eeb8 100644
--- a/ext/standard/tests/file/fread_error.phpt
+++ b/ext/standard/tests/file/fread_error.phpt
@@ -103,7 +103,7 @@ bool(false)
Notice: Undefined variable: file_content_type in %s on line %d
-Warning: fread(): 5 is not a valid stream resource in %s on line %d
+Warning: fread(): %d is not a valid stream resource in %s on line %d
bool(false)
Warning: fread(): supplied argument is not a valid stream resource in %s on line %d
diff --git a/ext/standard/tests/file/fread_fwrite_basic.phpt b/ext/standard/tests/file/fread_fwrite_basic.phpt
new file mode 100644
index 000000000..0f5c4ed76
--- /dev/null
+++ b/ext/standard/tests/file/fread_fwrite_basic.phpt
@@ -0,0 +1,72 @@
+--TEST--
+fread & fwrite - Test reading and writing using a single resource
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+
+/*
+ * proto int fwrite(resource fp, string str [, int length])
+ * Function is implemented in ext/standard/file.c
+ */
+
+ /*
+ Prototype: string fread ( resource $handle [, int $length] );
+ Description: reads up to length bytes from the file pointer referenced by handle.
+ Reading stops when up to length bytes have been read, EOF (end of file) is
+ reached, (for network streams) when a packet becomes available, or (after
+ opening userspace stream) when 8192 bytes have been read whichever comes first.
+*/
+
+
+$outputfile = __FILE__.".tmp";
+
+echo "--- testing rw moving about the file ---\n";
+$h = fopen($outputfile, 'wb+');
+$out1 = "The 1st prrt";
+$out2 = " part of the ttxt";
+$out3 = "text";
+fwrite($h, $out1);
+fseek($h, 0, SEEK_SET);
+echo "start:".fread($h, strlen($out1) - 5). "\n";
+fwrite($h, $out2);
+echo "at end:".fread($h,100)."\n";
+var_dump(feof($h));
+fseek($h, -4, SEEK_CUR);
+fwrite($h, $out3);
+fseek($h, 0, SEEK_SET);
+echo "final:".fread($h, 100)."\n";
+fclose($h);
+
+echo "--- testing eof ---\n";
+$h = fopen($outputfile, 'ab+');
+fread($h,1024);
+var_dump(feof($h));
+fread($h,1);
+var_dump(feof($h));
+$out = "extra";
+fwrite($h, $out);
+var_dump(feof($h));
+fread($h,1);
+var_dump(feof($h));
+fseek($h, -strlen($out) + 1, SEEK_CUR);
+echo "last bytes: ".fread($h, strlen($out))."\n";
+fclose($h);
+
+unlink($outputfile);
+
+echo "Done";
+?>
+--EXPECT--
+--- testing rw moving about the file ---
+start:The 1st
+at end:
+bool(true)
+final:The 1st part of the text
+--- testing eof ---
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+last bytes: xtra
+Done \ No newline at end of file
diff --git a/ext/standard/tests/file/fscanf_variation10.phpt b/ext/standard/tests/file/fscanf_variation10.phpt
index 0222becac..a9109e67f 100644
--- a/ext/standard/tests/file/fscanf_variation10.phpt
+++ b/ext/standard/tests/file/fscanf_variation10.phpt
@@ -68,7 +68,7 @@ foreach($float_formats as $float_format) {
// closing the resources
fclose($fp);
-fclose($dfp);
+closedir($dfp);
echo "\n*** Done ***";
?>
diff --git a/ext/standard/tests/file/fscanf_variation16.phpt b/ext/standard/tests/file/fscanf_variation16.phpt
index 1312c18de..94009248c 100644
--- a/ext/standard/tests/file/fscanf_variation16.phpt
+++ b/ext/standard/tests/file/fscanf_variation16.phpt
@@ -67,7 +67,7 @@ foreach($string_formats as $string_format) {
// closing the resources
fclose($fp);
-fclose($dfp);
+closedir($dfp);
echo "\n*** Done ***";
?>
diff --git a/ext/standard/tests/file/fscanf_variation22.phpt b/ext/standard/tests/file/fscanf_variation22.phpt
index d43226a4f..8fa62deb4 100644
--- a/ext/standard/tests/file/fscanf_variation22.phpt
+++ b/ext/standard/tests/file/fscanf_variation22.phpt
@@ -67,7 +67,7 @@ foreach($char_formats as $char_format) {
// closing the resources
fclose($fp);
-fclose($dfp);
+closedir($dfp);
echo "\n*** Done ***";
?>
diff --git a/ext/standard/tests/file/fscanf_variation29.phpt b/ext/standard/tests/file/fscanf_variation29.phpt
index 89f82e97d..b6752765f 100644
--- a/ext/standard/tests/file/fscanf_variation29.phpt
+++ b/ext/standard/tests/file/fscanf_variation29.phpt
@@ -68,7 +68,7 @@ foreach($octal_formats as $octal_format) {
// closing the resources
fclose($fp);
-fclose($dfp);
+closedir($dfp);
echo "\n*** Done ***";
?>
diff --git a/ext/standard/tests/file/fscanf_variation35.phpt b/ext/standard/tests/file/fscanf_variation35.phpt
index d259f12d4..af0266d1a 100644
--- a/ext/standard/tests/file/fscanf_variation35.phpt
+++ b/ext/standard/tests/file/fscanf_variation35.phpt
@@ -63,7 +63,7 @@ foreach($hexa_formats as $hexa_format) {
// closing the resources
fclose($fp);
-fclose($dfp);
+closedir($dfp);
echo "\n*** Done ***";
?>
diff --git a/ext/standard/tests/file/fscanf_variation4.phpt b/ext/standard/tests/file/fscanf_variation4.phpt
index 591836dff..a7e83a96e 100644
--- a/ext/standard/tests/file/fscanf_variation4.phpt
+++ b/ext/standard/tests/file/fscanf_variation4.phpt
@@ -64,7 +64,7 @@ foreach($int_formats as $int_format) {
// closing the resources
fclose($fp);
-fclose($dfp);
+closedir($dfp);
echo "\n*** Done ***";
?>
diff --git a/ext/standard/tests/file/fscanf_variation41.phpt b/ext/standard/tests/file/fscanf_variation41.phpt
index 76faf0b09..a1d11c133 100644
--- a/ext/standard/tests/file/fscanf_variation41.phpt
+++ b/ext/standard/tests/file/fscanf_variation41.phpt
@@ -63,7 +63,7 @@ foreach($unsigned_formats as $unsigned_format) {
// closing the resources
fclose($fp);
-fclose($dfp);
+closedir($dfp);
echo "\n*** Done ***";
?>
diff --git a/ext/standard/tests/file/fscanf_variation47.phpt b/ext/standard/tests/file/fscanf_variation47.phpt
index 011169a5c..183ee7a82 100644
--- a/ext/standard/tests/file/fscanf_variation47.phpt
+++ b/ext/standard/tests/file/fscanf_variation47.phpt
@@ -63,7 +63,7 @@ foreach($scientific_formats as $scientific_format) {
// closing the resources
fclose($fp);
-fclose($dfp);
+closedir($dfp);
echo "\n*** Done ***";
?>
diff --git a/ext/standard/tests/file/fseek_dir_basic.phpt b/ext/standard/tests/file/fseek_dir_basic.phpt
index c6d0816e9..cde0bf257 100644
--- a/ext/standard/tests/file/fseek_dir_basic.phpt
+++ b/ext/standard/tests/file/fseek_dir_basic.phpt
@@ -42,7 +42,7 @@ var_dump(rmdir($path));
?>
--EXPECTF--
call readdir():
-resource(12) of type (stream)
+resource(%d) of type (stream)
array(6) {
[0]=>
bool(false)
diff --git a/ext/standard/tests/file/fseek_ftell_rewind_error1.phpt b/ext/standard/tests/file/fseek_ftell_rewind_error1.phpt
index 2b0a1b2f8..3accd149b 100644
--- a/ext/standard/tests/file/fseek_ftell_rewind_error1.phpt
+++ b/ext/standard/tests/file/fseek_ftell_rewind_error1.phpt
@@ -91,7 +91,7 @@ bool(false)
Warning: fseek(): supplied argument is not a valid stream resource in %s on line %d
bool(false)
-- Testing fseek() with closed/unset file handle --
-Warning: fseek(): 5 is not a valid stream resource in %s on line %d
+Warning: fseek(): %d is not a valid stream resource in %s on line %d
bool(false)
Warning: fseek(): supplied argument is not a valid stream resource in %s on line %d
diff --git a/ext/standard/tests/file/fseek_ftell_rewind_error2.phpt b/ext/standard/tests/file/fseek_ftell_rewind_error2.phpt
index d5bad92a6..7b3eb9cd4 100644
--- a/ext/standard/tests/file/fseek_ftell_rewind_error2.phpt
+++ b/ext/standard/tests/file/fseek_ftell_rewind_error2.phpt
@@ -87,7 +87,7 @@ bool(false)
Warning: ftell(): supplied argument is not a valid stream resource in %s on line %d
bool(false)
-- Testing ftell with closed/unset file handle --
-Warning: ftell(): 5 is not a valid stream resource in %s on line %d
+Warning: ftell(): %d is not a valid stream resource in %s on line %d
bool(false)
Warning: ftell(): supplied argument is not a valid stream resource in %s on line %d
diff --git a/ext/standard/tests/file/fseek_ftell_rewind_error3.phpt b/ext/standard/tests/file/fseek_ftell_rewind_error3.phpt
index 8f0ae38d4..2fbd0c805 100644
--- a/ext/standard/tests/file/fseek_ftell_rewind_error3.phpt
+++ b/ext/standard/tests/file/fseek_ftell_rewind_error3.phpt
@@ -87,7 +87,7 @@ bool(false)
Warning: rewind(): supplied argument is not a valid stream resource in %s on line %d
bool(false)
-- Testing rewind() with closed/unset file handle --
-Warning: rewind(): 5 is not a valid stream resource in %s on line %d
+Warning: rewind(): %d is not a valid stream resource in %s on line %d
bool(false)
Warning: rewind(): supplied argument is not a valid stream resource in %s on line %d
diff --git a/ext/standard/tests/file/fseek_variation1.phpt b/ext/standard/tests/file/fseek_variation1.phpt
new file mode 100644
index 000000000..0e648ffb8
--- /dev/null
+++ b/ext/standard/tests/file/fseek_variation1.phpt
@@ -0,0 +1,177 @@
+--TEST--
+Test fseek() function : usage variations - different types for offset
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : proto int fseek(resource fp, int offset [, int whence])
+ * Description: Seek on a file pointer
+ * Source code: ext/standard/file.c
+ * Alias to functions: gzseek
+ */
+
+echo "*** Testing fseek() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+// Initialise function arguments not being substituted (if any)
+
+$fp = fopen(__FILE__, 'r');
+$whence = SEEK_SET;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+class testClass {
+ public function __toString() {
+ return "testClass";
+ }
+}
+
+
+//array of values to iterate over
+$values = array(
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new testClass(),
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for offset
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( fseek($fp, $value, $whence) );
+ var_dump( ftell($fp));
+};
+fclose($fp);
+
+echo "Done";
+?>
+--EXPECT--
+*** Testing fseek() : usage variations ***
+
+Arg value 10.5
+int(0)
+int(10)
+
+Arg value -10.5
+int(-1)
+int(10)
+
+Arg value 1.07654321E-9
+int(0)
+int(0)
+
+Arg value 0.5
+int(0)
+int(0)
+
+Arg value Array
+int(0)
+int(0)
+
+Arg value Array
+int(0)
+int(1)
+
+Arg value Array
+int(0)
+int(1)
+
+Arg value Array
+int(0)
+int(1)
+
+Arg value Array
+int(0)
+int(1)
+
+Arg value
+int(0)
+int(0)
+
+Arg value
+int(0)
+int(0)
+
+Arg value 1
+int(0)
+int(1)
+
+Arg value
+int(0)
+int(0)
+
+Arg value 1
+int(0)
+int(1)
+
+Arg value
+int(0)
+int(0)
+
+Arg value
+int(0)
+int(0)
+
+Arg value
+int(0)
+int(0)
+
+Arg value string
+int(0)
+int(0)
+
+Arg value string
+int(0)
+int(0)
+
+Arg value testClass
+int(0)
+int(1)
+
+Arg value
+int(0)
+int(0)
+
+Arg value
+int(0)
+int(0)
+Done
diff --git a/ext/standard/tests/file/fseek_variation2.phpt b/ext/standard/tests/file/fseek_variation2.phpt
new file mode 100644
index 000000000..5195b241f
--- /dev/null
+++ b/ext/standard/tests/file/fseek_variation2.phpt
@@ -0,0 +1,150 @@
+--TEST--
+Test fseek() function : usage variations - different types for whence
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : proto int fseek(resource fp, int offset [, int whence])
+ * Description: Seek on a file pointer
+ * Source code: ext/standard/file.c
+ * Alias to functions: gzseek
+ */
+
+echo "*** Testing fseek() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+$fp = fopen(__FILE__, 'r');
+$offset = 3;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//array of values to iterate over
+$values = array(
+
+ // outside of whence range
+ -100,
+ 100,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for whence
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( fseek($fp, $offset, $value) );
+ var_dump( ftell($fp));
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECT--
+*** Testing fseek() : usage variations ***
+
+Arg value -100
+int(-1)
+int(0)
+
+Arg value 100
+int(-1)
+int(0)
+
+Arg value 10.5
+int(-1)
+int(0)
+
+Arg value -10.5
+int(-1)
+int(0)
+
+Arg value 101234567000
+int(-1)
+int(0)
+
+Arg value 1.07654321E-9
+int(0)
+int(3)
+
+Arg value 0.5
+int(0)
+int(3)
+
+Arg value
+int(0)
+int(3)
+
+Arg value
+int(0)
+int(3)
+
+Arg value 1
+int(0)
+int(6)
+
+Arg value
+int(0)
+int(3)
+
+Arg value 1
+int(0)
+int(6)
+
+Arg value
+int(0)
+int(3)
+
+Arg value
+int(0)
+int(3)
+
+Arg value
+int(0)
+int(3)
+
+Arg value string
+int(0)
+int(3)
+
+Arg value string
+int(0)
+int(3)
+
+Arg value
+int(0)
+int(3)
+
+Arg value
+int(0)
+int(3)
+Done
diff --git a/ext/standard/tests/file/fseek_variation3.phpt b/ext/standard/tests/file/fseek_variation3.phpt
new file mode 100644
index 000000000..c29ed3175
--- /dev/null
+++ b/ext/standard/tests/file/fseek_variation3.phpt
@@ -0,0 +1,54 @@
+--TEST--
+Test fseek() function : variation functionality beyond file boundaries
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : proto int fseek(resource fp, int offset [, int whence])
+ * Description: Seek on a file pointer
+ * Source code: ext/standard/file.c
+ * Alias to functions: gzseek
+ */
+
+echo "*** Testing fseek() : variation - beyond file boundaries ***\n";
+
+$outputfile = __FILE__.".tmp";
+
+$h = fopen($outputfile, "wb+");
+for ($i = 1; $i < 10; $i++) {
+ fwrite($h, chr(0x30 + $i));
+}
+
+echo "--- fseek beyond start of file ---\n";
+var_dump(fseek($h, -4, SEEK_SET));
+echo "after -4 seek: ".bin2hex(fread($h,1))."\n";
+var_dump(fseek($h, -1, SEEK_CUR));
+echo "after seek back 1: ".bin2hex(fread($h,1))."\n";
+var_dump(fseek($h, -20, SEEK_CUR));
+echo "after seek back 20: ".bin2hex(fread($h,1))."\n";
+
+echo "--- fseek beyond end of file ---\n";
+var_dump(fseek($h, 16, SEEK_SET));
+fwrite($h, b"end");
+fseek($h ,0, SEEK_SET);
+$data = fread($h, 4096);
+echo bin2hex($data)."\n";
+
+fclose($h);
+unlink($outputfile);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing fseek() : variation - beyond file boundaries ***
+--- fseek beyond start of file ---
+int(-1)
+after -4 seek:
+int(0)
+after seek back 1: 39
+int(-1)
+after seek back 20:
+--- fseek beyond end of file ---
+int(0)
+31323334353637383900000000000000656e64
+Done
diff --git a/ext/standard/tests/file/fstat_basic.phpt b/ext/standard/tests/file/fstat_basic.phpt
new file mode 100644
index 000000000..a404929a2
--- /dev/null
+++ b/ext/standard/tests/file/fstat_basic.phpt
@@ -0,0 +1,65 @@
+--TEST--
+Test function fstat() by calling it with its expected arguments
+--FILE--
+<?php
+$fp = fopen (__FILE__, 'r');
+var_dump(fstat( $fp ) );
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+array(26) {
+ [0]=>
+ int(%i)
+ [1]=>
+ int(%i)
+ [2]=>
+ int(%i)
+ [3]=>
+ int(%i)
+ [4]=>
+ int(%i)
+ [5]=>
+ int(%i)
+ [6]=>
+ int(%i)
+ [7]=>
+ int(%i)
+ [8]=>
+ int(%i)
+ [9]=>
+ int(%i)
+ [10]=>
+ int(%i)
+ [11]=>
+ int(%i)
+ [12]=>
+ int(%i)
+ ["dev"]=>
+ int(%i)
+ ["ino"]=>
+ int(%i)
+ ["mode"]=>
+ int(%i)
+ ["nlink"]=>
+ int(%i)
+ ["uid"]=>
+ int(%i)
+ ["gid"]=>
+ int(%i)
+ ["rdev"]=>
+ int(%i)
+ ["size"]=>
+ int(%i)
+ ["atime"]=>
+ int(%i)
+ ["mtime"]=>
+ int(%i)
+ ["ctime"]=>
+ int(%i)
+ ["blksize"]=>
+ int(%i)
+ ["blocks"]=>
+ int(%i)
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/fstat_error.phpt b/ext/standard/tests/file/fstat_error.phpt
new file mode 100644
index 000000000..69a7f0bec
--- /dev/null
+++ b/ext/standard/tests/file/fstat_error.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Test function fstat() by calling it more than or less than its expected arguments
+--FILE--
+<?php
+$fp = fopen (__FILE__, 'r');
+$extra_arg = 'nothing';
+
+var_dump(fstat( $fp, $extra_arg ) );
+var_dump(fstat());
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+
+Warning: Wrong parameter count for fstat() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for fstat() in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/fstat_variation1.phpt b/ext/standard/tests/file/fstat_variation1.phpt
new file mode 100644
index 000000000..460732388
--- /dev/null
+++ b/ext/standard/tests/file/fstat_variation1.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test function fstat() by substituting agument 1 with array values.
+--FILE--
+<?php
+$index_array = array(1, 2, 3);
+$assoc_array = array(1 => 'one', 2 => 'two');
+
+$variation_array = array(
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+ );
+
+
+foreach ( $variation_array as $var ) {
+ var_dump(fstat( $var ) );
+}
+?>
+===DONE===
+--EXPECTF--
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/fstat_variation2.phpt b/ext/standard/tests/file/fstat_variation2.phpt
new file mode 100644
index 000000000..6f59efcfe
--- /dev/null
+++ b/ext/standard/tests/file/fstat_variation2.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Test function fstat() by substituting agument 1 with boolean values.
+--FILE--
+<?php
+$variation_array = array(
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+ );
+
+
+foreach ( $variation_array as $var ) {
+ var_dump(fstat( $var ) );
+}
+?>
+===DONE===
+--EXPECTF--
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/fstat_variation3.phpt b/ext/standard/tests/file/fstat_variation3.phpt
new file mode 100644
index 000000000..32dadd8b5
--- /dev/null
+++ b/ext/standard/tests/file/fstat_variation3.phpt
@@ -0,0 +1,42 @@
+--TEST--
+Test function fstat() by substituting agument 1 with emptyUnsetUndefNull values.
+--FILE--
+<?php
+$unset_var = 10;
+unset($unset_var);
+
+$variation_array = array(
+ 'unset var' => @$unset_var,
+ 'undefined var' => @$undefined_var,
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+ );
+
+
+foreach ( $variation_array as $var ) {
+ var_dump(fstat( $var ) );
+}
+?>
+===DONE===
+--EXPECTF--
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/fstat_variation4.phpt b/ext/standard/tests/file/fstat_variation4.phpt
new file mode 100644
index 000000000..cabd83dba
--- /dev/null
+++ b/ext/standard/tests/file/fstat_variation4.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test function fstat() by substituting agument 1 with float values.
+--FILE--
+<?php
+$variation_array = array(
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+ );
+
+
+foreach ( $variation_array as $var ) {
+ var_dump(fstat( $var ) );
+}
+?>
+===DONE===
+--EXPECTF--
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/fstat_variation5.phpt b/ext/standard/tests/file/fstat_variation5.phpt
new file mode 100644
index 000000000..59fbb37d1
--- /dev/null
+++ b/ext/standard/tests/file/fstat_variation5.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Test function fstat() by substituting agument 1 with int values.
+--FILE--
+<?php
+$variation_array = array (
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+ );
+
+
+foreach ( $variation_array as $var ) {
+ var_dump(fstat( $var ) );
+}
+?>
+===DONE===
+--EXPECTF--
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/fstat_variation6.phpt b/ext/standard/tests/file/fstat_variation6.phpt
new file mode 100644
index 000000000..122162781
--- /dev/null
+++ b/ext/standard/tests/file/fstat_variation6.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test function fstat() by substituting agument 1 with object values.
+--FILE--
+<?php
+
+
+
+
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+
+
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+$variation_array = array(
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+ );
+
+
+foreach ( $variation_array as $var ) {
+ var_dump(fstat( $var ) );
+}
+?>
+===DONE===
+--EXPECTF--
+Error: 2 - fstat(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+Error: 2 - fstat(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/fstat_variation7.phpt b/ext/standard/tests/file/fstat_variation7.phpt
new file mode 100644
index 000000000..a00d2485a
--- /dev/null
+++ b/ext/standard/tests/file/fstat_variation7.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test function fstat() by substituting agument 1 with string values.
+--FILE--
+<?php
+$heredoc = <<<EOT
+hello world
+EOT;
+
+$variation_array = array(
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+ );
+
+
+foreach ( $variation_array as $var ) {
+ var_dump(fstat( $var ) );
+}
+?>
+===DONE===
+--EXPECTF--
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Warning: fstat(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/fstat_variation8.phpt b/ext/standard/tests/file/fstat_variation8.phpt
new file mode 100644
index 000000000..b493d4ec9
--- /dev/null
+++ b/ext/standard/tests/file/fstat_variation8.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test function fstat() by calling it with its expected arguments
+--FILE--
+<?php
+$stat_result = stat(__FILE__);
+clearstatcache();
+$fp = fopen (__FILE__, 'r');
+$fstat_result = fstat($fp);
+fclose($fp);
+
+$isWin = (substr(PHP_OS, 0, 3) == 'WIN');
+$failed = false;
+foreach($stat_result as $key =>$value) {
+ if ($isWin && ($key === 0 || $key === 6 || $key === 'dev' || $key === 'rdev')) {
+ // windows, dev and rdev will not match this is expected
+ }
+ else {
+ if ($fstat_result[$key] != $value) {
+ echo "FAIL: stat differs at '$key'. $fstat_result[$key] -- $value\n";
+ $failed = true;
+ }
+ }
+}
+if ($failed !== true) {
+ echo "PASSED: all elements are the same\n";
+}
+
+
+?>
+===DONE===
+--EXPECT--
+PASSED: all elements are the same
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/ftruncate_error.phpt b/ext/standard/tests/file/ftruncate_error.phpt
index 182ade5ff..4dca9b746 100644
--- a/ext/standard/tests/file/ftruncate_error.phpt
+++ b/ext/standard/tests/file/ftruncate_error.phpt
@@ -114,7 +114,7 @@ Warning: ftruncate(): supplied argument is not a valid stream resource in %s on
bool(false)
-- Testing ftruncate() with closed/unset file handle --
-Warning: ftruncate(): 5 is not a valid stream resource in %s on line %d
+Warning: ftruncate(): %d is not a valid stream resource in %s on line %d
bool(false)
int(36)
diff --git a/ext/standard/tests/file/fwrite_error.phpt b/ext/standard/tests/file/fwrite_error.phpt
index c6f529f40..fb562171d 100644
--- a/ext/standard/tests/file/fwrite_error.phpt
+++ b/ext/standard/tests/file/fwrite_error.phpt
@@ -112,7 +112,7 @@ Warning: fwrite(): supplied argument is not a valid stream resource in %s on lin
bool(false)
-- Testing fwrite() with closed/unset file handle --
-Warning: fwrite(): 6 is not a valid stream resource in %s on line %d
+Warning: fwrite(): %d is not a valid stream resource in %s on line %d
bool(false)
Warning: fwrite(): supplied argument is not a valid stream resource in %s on line %d
diff --git a/ext/standard/tests/file/fwrite_variation5.phpt b/ext/standard/tests/file/fwrite_variation5.phpt
new file mode 100644
index 000000000..efe4967e1
--- /dev/null
+++ b/ext/standard/tests/file/fwrite_variation5.phpt
@@ -0,0 +1,173 @@
+--TEST--
+Test fwrite() function : usage variation
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : int fwrite(resource fp, string str [, int length])
+ * Description: Binary-safe file write
+ * Source code: ext/standard/file.c
+ * Alias to functions: bzwrite fputs gzwrite
+ */
+
+echo "*** Testing fwrite() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+
+$filename = 'fwriteVar5.tmp';
+
+
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for str
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ $fp = fopen($filename,'w');
+ fwrite($fp, $value);
+ fclose($fp);
+ readfile($filename);
+};
+unlink($filename);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing fwrite() : usage variation ***
+
+--int 0--
+0
+--int 1--
+1
+--int 12345--
+12345
+--int -12345--
+-2345
+--float 10.5--
+10.5
+--float -10.5--
+-10.5
+--float 12.3456789000e10--
+123456789000
+--float -12.3456789000e10--
+-123456789000
+--float .5--
+0.5
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+Array
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+Array
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+Array
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+Array
+--uppercase NULL--
+
+--lowercase null--
+
+--lowercase true--
+1
+--lowercase false--
+
+--uppercase TRUE--
+1
+--uppercase FALSE--
+
+--empty string DQ--
+
+--empty string SQ--
+
+--instance of classWithToString--
+Class A object
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+Object
+--undefined var--
+
+--unset var--
+===DONE===
diff --git a/ext/standard/tests/file/glob_basic.phpt b/ext/standard/tests/file/glob_basic.phpt
index 68e1bc74b..fc269c442 100755
--- a/ext/standard/tests/file/glob_basic.phpt
+++ b/ext/standard/tests/file/glob_basic.phpt
@@ -25,14 +25,19 @@ $fp = fopen("$dirname/file.text", "w");
fclose($fp);
// glob() with default arguments
-var_dump( glob($dirname."/*") );
-var_dump( glob($dirname."/*.txt") );
-var_dump( glob($dirname."/*.t?t") );
-var_dump( glob($dirname."/*.t*t") );
-var_dump( glob($dirname."/*.?") );
-var_dump( glob($dirname."/*.*") );
+sort_var_dump( glob($dirname."/*") );
+sort_var_dump( glob($dirname."/*.txt") );
+sort_var_dump( glob($dirname."/*.t?t") );
+sort_var_dump( glob($dirname."/*.t*t") );
+sort_var_dump( glob($dirname."/*.?") );
+sort_var_dump( glob($dirname."/*.*") );
echo "Done\n";
+
+function sort_var_dump($results) {
+ sort($results);
+ var_dump($results);
+}
?>
--CLEAN--
<?php
diff --git a/ext/standard/tests/file/glob_error_002-win32.phpt b/ext/standard/tests/file/glob_error_002-win32.phpt
new file mode 100644
index 000000000..a61efd108
--- /dev/null
+++ b/ext/standard/tests/file/glob_error_002-win32.phpt
@@ -0,0 +1,27 @@
+--TEST--
+Test glob() function: error condition - pattern too long.
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Only valid for Windows");
+?>
+--FILE--
+<?php
+/* Prototype: array glob ( string $pattern [, int $flags] );
+ Description: Find pathnames matching a pattern
+*/
+
+echo "*** Testing glob() : error condition - pattern too long. ***\n";
+
+var_dump(glob(str_repeat('x', 3000)));
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing glob() : error condition - pattern too long. ***
+
+Warning: glob(): Pattern exceeds the maximum allowed length of %d characters in %s on line %d
+bool(false)
+Done
diff --git a/ext/standard/tests/file/is_dir_variation3.phpt b/ext/standard/tests/file/is_dir_variation3.phpt
index c9b20420c..a79d686d4 100644
--- a/ext/standard/tests/file/is_dir_variation3.phpt
+++ b/ext/standard/tests/file/is_dir_variation3.phpt
@@ -18,6 +18,7 @@ $dirnames = array(
TRUE,
FALSE,
NULL,
+ " ",
$dir_handle,
/* scalars */
@@ -42,5 +43,6 @@ bool(false)
bool(false)
bool(false)
bool(false)
+bool(false)
*** Done ***
diff --git a/ext/standard/tests/file/is_executable_variation3.phpt b/ext/standard/tests/file/is_executable_variation3.phpt
index 777599cbf..c87c12db3 100644
--- a/ext/standard/tests/file/is_executable_variation3.phpt
+++ b/ext/standard/tests/file/is_executable_variation3.phpt
@@ -37,6 +37,7 @@ $invalid_files = array(
TRUE,
FALSE,
NULL,
+ " ",
@array(),
@$file_handle
);
@@ -59,6 +60,7 @@ bool(false)
bool(false)
bool(false)
bool(false)
+bool(false)
Notice: Array to string conversion in %s on line %d
bool(false)
diff --git a/ext/standard/tests/file/is_file_variation3.phpt b/ext/standard/tests/file/is_file_variation3.phpt
index af7501315..e6f2a3ef9 100644
--- a/ext/standard/tests/file/is_file_variation3.phpt
+++ b/ext/standard/tests/file/is_file_variation3.phpt
@@ -16,6 +16,7 @@ echo "*** Testing Invalid file types ***\n";
$filenames = array(
/* Invalid filenames */
-2.34555,
+ " ",
"",
TRUE,
FALSE,
@@ -51,5 +52,6 @@ bool(false)
bool(false)
bool(false)
bool(false)
+bool(false)
*** Done ***
diff --git a/ext/standard/tests/file/is_file_variation4.phpt b/ext/standard/tests/file/is_file_variation4.phpt
index fc0cab85c..55aeedfaa 100644
--- a/ext/standard/tests/file/is_file_variation4.phpt
+++ b/ext/standard/tests/file/is_file_variation4.phpt
@@ -1,5 +1,5 @@
--TEST--
-Test is_file() function: usage variations - diff. path notations (Bug #42027, #42638)
+Test is_file() function: usage variations - diff. path notations (Bug #42027)
--FILE--
<?php
/* Prototype: bool is_file ( string $filename );
diff --git a/ext/standard/tests/file/is_readable_variation1.phpt b/ext/standard/tests/file/is_readable_variation1.phpt
index 2ab1e3d67..a1310327b 100644
--- a/ext/standard/tests/file/is_readable_variation1.phpt
+++ b/ext/standard/tests/file/is_readable_variation1.phpt
@@ -2,19 +2,17 @@
Test is_readable() function: usage variations - diff. file notations
--SKIPIF--
<?php
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip not for windows');
-}
-// Skip if being run by root (files are always readable, writeable and executable)
-$filename = dirname(__FILE__)."/is_readable_root_check.tmp";
-$fp = fopen($filename, 'w');
-fclose($fp);
-if(fileowner($filename) == 0) {
+if (substr(PHP_OS, 0, 3) != 'WIN') {
+ // Skip if being run by root (files are always readable, writeable and executable)
+ $filename = dirname(__FILE__)."/is_readable_root_check.tmp";
+ $fp = fopen($filename, 'w');
+ fclose($fp);
+ if(fileowner($filename) == 0) {
unlink ($filename);
die('skip cannot be run as root');
+ }
+ unlink($filename);
}
-
-unlink($filename);
?>
--FILE--
<?php
diff --git a/ext/standard/tests/file/is_readable_variation3.phpt b/ext/standard/tests/file/is_readable_variation3.phpt
index e42839ed9..f9af6cdfe 100644
--- a/ext/standard/tests/file/is_readable_variation3.phpt
+++ b/ext/standard/tests/file/is_readable_variation3.phpt
@@ -2,19 +2,18 @@
Test is_readable() function: usage variations - invalid file names
--SKIPIF--
<?php
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip not for windows');
-}
-// Skip if being run by root (files are always readable, writeable and executable)
-$filename = dirname(__FILE__)."/is_readable_root_check.tmp";
-$fp = fopen($filename, 'w');
-fclose($fp);
-if(fileowner($filename) == 0) {
+if (substr(PHP_OS, 0, 3) != 'WIN') {
+
+ // Skip if being run by root (files are always readable, writeable and executable)
+ $filename = dirname(__FILE__)."/is_readable_root_check.tmp";
+ $fp = fopen($filename, 'w');
+ fclose($fp);
+ if(fileowner($filename) == 0) {
unlink ($filename);
die('skip cannot be run as root');
+ }
+ unlink($filename);
}
-
-unlink($filename);
?>
--FILE--
<?php
@@ -37,6 +36,7 @@ $misc_files = array(
TRUE,
FALSE,
NULL,
+ " ",
@array(),
@$file_handle
);
@@ -59,6 +59,7 @@ bool(false)
bool(false)
bool(false)
bool(false)
+bool(false)
Notice: Array to string conversion in %s on line %d
bool(false)
diff --git a/ext/standard/tests/file/is_uploaded_file_basic.phpt b/ext/standard/tests/file/is_uploaded_file_basic.phpt
new file mode 100644
index 000000000..dca90b698
--- /dev/null
+++ b/ext/standard/tests/file/is_uploaded_file_basic.phpt
@@ -0,0 +1,50 @@
+--TEST--
+is_uploaded_file() function
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php if (php_sapi_name()=='cli') die('skip'); ?>
+--POST_RAW--
+Content-type: multipart/form-data, boundary=AaB03x
+
+--AaB03x
+content-disposition: form-data; name="field1"
+
+Joe Blow
+--AaB03x
+content-disposition: form-data; name="pics"; filename="file1.txt"
+Content-Type: text/plain
+
+abcdef123456789
+--AaB03x--
+--FILE--
+<?php
+// uploaded file
+var_dump(is_uploaded_file($_FILES['pics']['tmp_name']));
+
+// not an uploaded file
+var_dump(is_uploaded_file($_FILES['pics']['name']));
+
+// not an uploaded file
+var_dump(is_uploaded_file('random_filename.txt'));
+
+// not an uploaded file
+var_dump(is_uploaded_file('__FILE__'));
+
+// Error cases
+var_dump(is_uploaded_file());
+var_dump(is_uploaded_file('a', 'b'));
+
+?>
+--EXPECTF--
+bool(true)
+bool(false)
+bool(false)
+bool(false)
+
+Warning: Wrong parameter count for is_uploaded_file() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for is_uploaded_file() in %s on line %d
+NULL
+
diff --git a/ext/standard/tests/file/is_writable_variation1.phpt b/ext/standard/tests/file/is_writable_variation1.phpt
index 2d0da9b18..bf3e7e117 100644
--- a/ext/standard/tests/file/is_writable_variation1.phpt
+++ b/ext/standard/tests/file/is_writable_variation1.phpt
@@ -2,19 +2,19 @@
Test is_writable() and its alias is_writeable() function: usage variations - diff. path notations
--SKIPIF--
<?php
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip.. only on LINUX');
-}
-// Skip if being run by root (files are always readable, writeable and executable)
-$filename = dirname(__FILE__)."/is_writable_root_check.tmp";
-$fp = fopen($filename, 'w');
-fclose($fp);
-if(fileowner($filename) == 0) {
+if (substr(PHP_OS, 0, 3) != 'WIN') {
+
+ // Skip if being run by root (files are always readable, writeable and executable)
+ $filename = dirname(__FILE__)."/is_writable_root_check.tmp";
+ $fp = fopen($filename, 'w');
+ fclose($fp);
+ if(fileowner($filename) == 0) {
unlink ($filename);
die('skip cannot be run as root');
-}
+ }
-unlink($filename);
+ unlink($filename);
+}
?>
--FILE--
<?php
diff --git a/ext/standard/tests/file/is_writable_variation3.phpt b/ext/standard/tests/file/is_writable_variation3.phpt
index 69de6046d..1753f7611 100644
--- a/ext/standard/tests/file/is_writable_variation3.phpt
+++ b/ext/standard/tests/file/is_writable_variation3.phpt
@@ -2,19 +2,17 @@
Test is_writable() and its alias is_writeable() function: usage variations - invalid file names
--SKIPIF--
<?php
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip.. only on LINUX');
-}
-// Skip if being run by root (files are always readable, writeable and executable)
-$filename = dirname(__FILE__)."/is_writable_root_check.tmp";
-$fp = fopen($filename, 'w');
-fclose($fp);
-if(fileowner($filename) == 0) {
+if (substr(PHP_OS, 0, 3) != 'WIN') {
+ // Skip if being run by root (files are always readable, writeable and executable)
+ $filename = dirname(__FILE__)."/is_writable_root_check.tmp";
+ $fp = fopen($filename, 'w');
+ fclose($fp);
+ if(fileowner($filename) == 0) {
unlink ($filename);
die('skip cannot be run as root');
+ }
+ unlink($filename);
}
-
-unlink($filename);
?>
--FILE--
<?php
@@ -36,6 +34,7 @@ $misc_files = array(
TRUE,
FALSE,
NULL,
+ " ",
@array(),
@$file_handle
);
@@ -65,6 +64,8 @@ bool(false)
bool(false)
bool(false)
bool(false)
+bool(false)
+bool(false)
Notice: Array to string conversion in %s on line %d
bool(false)
diff --git a/ext/standard/tests/file/lstat_stat_variation2.phpt b/ext/standard/tests/file/lstat_stat_variation2.phpt
index bc1304f34..e7d704a20 100755
--- a/ext/standard/tests/file/lstat_stat_variation2.phpt
+++ b/ext/standard/tests/file/lstat_stat_variation2.phpt
@@ -36,8 +36,11 @@ $new_stat = stat($new_dirname);
var_dump( compare_self_stat($old_stat) );
var_dump( compare_self_stat($new_stat) );
-// compare the two stats
-var_dump( compare_stats($old_stat, $new_stat, $all_stat_keys) );
+// compare the two stats - all except ctime
+$keys_to_compare = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12,
+ "dev", "ino", "mode", "nlink", "uid", "gid",
+ "rdev", "size", "atime", "mtime", "blksize", "blocks");
+var_dump( compare_stats($old_stat, $new_stat, $keys_to_compare) );
// clear the cache
clearstatcache();
diff --git a/ext/standard/tests/file/lstat_stat_variation22.phpt b/ext/standard/tests/file/lstat_stat_variation22.phpt
new file mode 100644
index 000000000..c9072ce01
--- /dev/null
+++ b/ext/standard/tests/file/lstat_stat_variation22.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Test lstat() and stat() functions: usage variations - invalid filenames
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype: array lstat ( string $filename );
+ Description: Gives information about a file or symbolic link
+
+ Prototype: array stat ( string $filename );
+ Description: Gives information about a file
+*/
+echo "*** testing stat ***\n";
+var_dump(stat(NULL));
+var_dump(stat(false));
+var_dump(stat(''));
+var_dump(stat(' '));
+var_dump(stat('|'));
+
+echo "*** testing lstat ***\n";
+var_dump(lstat(NULL));
+var_dump(lstat(false));
+var_dump(lstat(''));
+var_dump(lstat(' '));
+var_dump(lstat('|'));
+echo "Done";
+?>
+--EXPECTF--
+*** testing stat ***
+bool(false)
+bool(false)
+bool(false)
+
+Warning: stat(): stat failed for in %s on line %d
+bool(false)
+
+Warning: stat(): stat failed for | in %s on line %d
+bool(false)
+*** testing lstat ***
+bool(false)
+bool(false)
+bool(false)
+
+Warning: lstat(): Lstat failed for in %s on line %d
+bool(false)
+
+Warning: lstat(): Lstat failed for | in %s on line %d
+bool(false)
+Done \ No newline at end of file
diff --git a/ext/standard/tests/file/lstat_stat_variation3.phpt b/ext/standard/tests/file/lstat_stat_variation3.phpt
index da7a6dacb..2a9a96efa 100755
--- a/ext/standard/tests/file/lstat_stat_variation3.phpt
+++ b/ext/standard/tests/file/lstat_stat_variation3.phpt
@@ -40,23 +40,24 @@ $new_stat = lstat($new_linkname);
var_dump( compare_self_stat($old_stat) );
var_dump( compare_self_stat($new_stat) );
-// compare the two stats
-var_dump( compare_stats($old_stat, $new_stat, $all_stat_keys) );
+// compare the two stats - all except ctime
+$keys_to_compare = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12,
+ "dev", "ino", "mode", "nlink", "uid", "gid",
+ "rdev", "size", "atime", "mtime", "blksize", "blocks");
+var_dump( compare_stats($old_stat, $new_stat, $keys_to_compare) );
-echo "\n--- Done ---";
?>
-
+===Done===
--CLEAN--
<?php
$file_path = dirname(__FILE__);
unlink("$file_path/lstat_stat_variation3.tmp");
unlink("$file_path/lstat_stat_variation_link3a.tmp");
?>
---EXPECTF--
+--EXPECT--
*** Testing lstat() for link after being renamed ***
bool(true)
bool(true)
bool(true)
bool(true)
-
---- Done ---
+===Done===
diff --git a/ext/standard/tests/file/mkdir_variation1-win32.phpt b/ext/standard/tests/file/mkdir_variation1-win32.phpt
new file mode 100644
index 000000000..7fb51bce0
--- /dev/null
+++ b/ext/standard/tests/file/mkdir_variation1-win32.phpt
@@ -0,0 +1,123 @@
+--TEST--
+Test mkdir() function : usage variation: try invalid pathname
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Only valid for Windows");
+?>
+--FILE--
+<?php
+/* Prototype : bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])
+ * Description: Create a directory
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mkdir() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase false' =>false,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ // php and p8 output No Such File or Dir. Windows outputs Invalid Argument
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // other
+ // php.net bug outputs message File Exists
+ 'single space' => ' ',
+);
+
+// loop through each element of the array for pathname
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ $res = mkdir($value);
+ if ($res == true) {
+ echo "directory created\n";
+ rmdir($value);
+ }
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mkdir() : usage variation ***
+
+--uppercase NULL--
+Error: 2 - mkdir(): No such file or directory, %s(%d)
+
+--lowercase null--
+Error: 2 - mkdir(): No such file or directory, %s(%d)
+
+--lowercase false--
+Error: 2 - mkdir(): No such file or directory, %s(%d)
+
+--uppercase FALSE--
+Error: 2 - mkdir(): No such file or directory, %s(%d)
+
+--empty string DQ--
+Error: 2 - mkdir(): No such file or directory, %s(%d)
+
+--empty string SQ--
+Error: 2 - mkdir(): No such file or directory, %s(%d)
+
+--undefined var--
+Error: 2 - mkdir(): No such file or directory, %s(%d)
+
+--unset var--
+Error: 2 - mkdir(): No such file or directory, %s(%d)
+
+--single space--
+Error: 2 - mkdir(): %s, %s(%d)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/mkdir_variation1.phpt b/ext/standard/tests/file/mkdir_variation1.phpt
new file mode 100644
index 000000000..b5254034b
--- /dev/null
+++ b/ext/standard/tests/file/mkdir_variation1.phpt
@@ -0,0 +1,121 @@
+--TEST--
+Test mkdir() function : usage variation: try invalid pathname
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip Not valid for Windows");
+?>
+--FILE--
+<?php
+/* Prototype : bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])
+ * Description: Create a directory
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mkdir() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase false' =>false,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // other
+ 'single space' => ' ',
+);
+
+// loop through each element of the array for pathname
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ $res = mkdir($value);
+ if ($res == true) {
+ echo "directory created\n";
+ rmdir($value);
+ }
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mkdir() : usage variation ***
+
+--uppercase NULL--
+Error: 2 - mkdir(): %s, %s(%d)
+
+--lowercase null--
+Error: 2 - mkdir(): %s, %s(%d)
+
+--lowercase false--
+Error: 2 - mkdir(): %s, %s(%d)
+
+--uppercase FALSE--
+Error: 2 - mkdir(): %s, %s(%d)
+
+--empty string DQ--
+Error: 2 - mkdir(): %s, %s(%d)
+
+--empty string SQ--
+Error: 2 - mkdir(): %s, %s(%d)
+
+--undefined var--
+Error: 2 - mkdir(): %s, %s(%d)
+
+--unset var--
+Error: 2 - mkdir(): %s, %s(%d)
+
+--single space--
+directory created
+===DONE===
diff --git a/ext/standard/tests/file/mkdir_variation2.phpt b/ext/standard/tests/file/mkdir_variation2.phpt
new file mode 100644
index 000000000..ab9a676ac
--- /dev/null
+++ b/ext/standard/tests/file/mkdir_variation2.phpt
@@ -0,0 +1,189 @@
+--TEST--
+Test mkdir() function : usage variation: different types for mode
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])
+ * Description: Create a directory
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mkdir() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$pathname = 'mkdirVar2.tmp';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for mode
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ $h = mkdir($pathname, $value);
+ if ($h === true) {
+ echo "Directory created\n";
+ rmdir($pathname);
+ }
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mkdir() : usage variation ***
+
+--float 10.5--
+Directory created
+
+--float -10.5--
+Directory created
+
+--float 12.3456789000e10--
+Directory created
+
+--float -12.3456789000e10--
+Directory created
+
+--float .5--
+Directory created
+
+--empty array--
+Error: 2 - mkdir() expects parameter 2 to be long, array given, %s(%d)
+
+--int indexed array--
+Error: 2 - mkdir() expects parameter 2 to be long, array given, %s(%d)
+
+--associative array--
+Error: 2 - mkdir() expects parameter 2 to be long, array given, %s(%d)
+
+--nested arrays--
+Error: 2 - mkdir() expects parameter 2 to be long, array given, %s(%d)
+
+--uppercase NULL--
+Directory created
+
+--lowercase null--
+Directory created
+
+--lowercase true--
+Directory created
+
+--lowercase false--
+Directory created
+
+--uppercase TRUE--
+Directory created
+
+--uppercase FALSE--
+Directory created
+
+--empty string DQ--
+Error: 2 - mkdir() expects parameter 2 to be long, string given, %s(%d)
+
+--empty string SQ--
+Error: 2 - mkdir() expects parameter 2 to be long, string given, %s(%d)
+
+--string DQ--
+Error: 2 - mkdir() expects parameter 2 to be long, string given, %s(%d)
+
+--string SQ--
+Error: 2 - mkdir() expects parameter 2 to be long, string given, %s(%d)
+
+--mixed case string--
+Error: 2 - mkdir() expects parameter 2 to be long, string given, %s(%d)
+
+--heredoc--
+Error: 2 - mkdir() expects parameter 2 to be long, string given, %s(%d)
+
+--instance of classWithToString--
+Error: 2 - mkdir() expects parameter 2 to be long, object given, %s(%d)
+
+--instance of classWithoutToString--
+Error: 2 - mkdir() expects parameter 2 to be long, object given, %s(%d)
+
+--undefined var--
+Directory created
+
+--unset var--
+Directory created
+===DONE===
diff --git a/ext/standard/tests/file/mkdir_variation3.phpt b/ext/standard/tests/file/mkdir_variation3.phpt
new file mode 100644
index 000000000..7622e5f61
--- /dev/null
+++ b/ext/standard/tests/file/mkdir_variation3.phpt
@@ -0,0 +1,208 @@
+--TEST--
+Test mkdir() function : usage variation: different types for recursive
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])
+ * Description: Create a directory
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mkdir() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$pathname = 'mkdirVar3.tmp';
+$mode = 0777;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for recursive
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ $h = mkdir($pathname, $mode, $value);
+ if ($h === true) {
+ echo "Directory created\n";
+ rmdir($pathname);
+ }
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mkdir() : usage variation ***
+
+--int 0--
+Directory created
+
+--int 1--
+Directory created
+
+--int 12345--
+Directory created
+
+--int -12345--
+Directory created
+
+--float 10.5--
+Directory created
+
+--float -10.5--
+Directory created
+
+--float 12.3456789000e10--
+Directory created
+
+--float -12.3456789000e10--
+Directory created
+
+--float .5--
+Directory created
+
+--empty array--
+Error: 2 - mkdir() expects parameter 3 to be boolean, array given, %s(%d)
+
+--int indexed array--
+Error: 2 - mkdir() expects parameter 3 to be boolean, array given, %s(%d)
+
+--associative array--
+Error: 2 - mkdir() expects parameter 3 to be boolean, array given, %s(%d)
+
+--nested arrays--
+Error: 2 - mkdir() expects parameter 3 to be boolean, array given, %s(%d)
+
+--uppercase NULL--
+Directory created
+
+--lowercase null--
+Directory created
+
+--lowercase true--
+Directory created
+
+--lowercase false--
+Directory created
+
+--uppercase TRUE--
+Directory created
+
+--uppercase FALSE--
+Directory created
+
+--empty string DQ--
+Directory created
+
+--empty string SQ--
+Directory created
+
+--string DQ--
+Directory created
+
+--string SQ--
+Directory created
+
+--mixed case string--
+Directory created
+
+--heredoc--
+Directory created
+
+--instance of classWithToString--
+Error: 2 - mkdir() expects parameter 3 to be boolean, object given, %s(%d)
+
+--instance of classWithoutToString--
+Error: 2 - mkdir() expects parameter 3 to be boolean, object given, %s(%d)
+
+--undefined var--
+Directory created
+
+--unset var--
+Directory created
+===DONE===
diff --git a/ext/standard/tests/file/mkdir_variation4.phpt b/ext/standard/tests/file/mkdir_variation4.phpt
new file mode 100644
index 000000000..b97d4ebc7
--- /dev/null
+++ b/ext/standard/tests/file/mkdir_variation4.phpt
@@ -0,0 +1,220 @@
+--TEST--
+Test mkdir() function : usage variation: different types for context
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])
+ * Description: Create a directory
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mkdir() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$pathname = 'mkdirVar4.tmp';
+$mode = 0777;
+$recursive = false;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+$fileRes = fopen(__FILE__,'r');
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // non stream context resource
+ 'file resource' => $fileRes,
+);
+
+// loop through each element of the array for context
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ $h = mkdir($pathname, $mode, $recursive, $value);
+ if ($h === true) {
+ echo "Directory created\n";
+ rmdir($pathname);
+ }
+};
+
+fclose($fileRes);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mkdir() : usage variation ***
+
+--int 0--
+Error: 2 - mkdir() expects parameter 4 to be resource, integer given, %s(%d)
+
+--int 1--
+Error: 2 - mkdir() expects parameter 4 to be resource, integer given, %s(%d)
+
+--int 12345--
+Error: 2 - mkdir() expects parameter 4 to be resource, integer given, %s(%d)
+
+--int -12345--
+Error: 2 - mkdir() expects parameter 4 to be resource, integer given, %s(%d)
+
+--float 10.5--
+Error: 2 - mkdir() expects parameter 4 to be resource, double given, %s(%d)
+
+--float -10.5--
+Error: 2 - mkdir() expects parameter 4 to be resource, double given, %s(%d)
+
+--float 12.3456789000e10--
+Error: 2 - mkdir() expects parameter 4 to be resource, double given, %s(%d)
+
+--float -12.3456789000e10--
+Error: 2 - mkdir() expects parameter 4 to be resource, double given, %s(%d)
+
+--float .5--
+Error: 2 - mkdir() expects parameter 4 to be resource, double given, %s(%d)
+
+--empty array--
+Error: 2 - mkdir() expects parameter 4 to be resource, array given, %s(%d)
+
+--int indexed array--
+Error: 2 - mkdir() expects parameter 4 to be resource, array given, %s(%d)
+
+--associative array--
+Error: 2 - mkdir() expects parameter 4 to be resource, array given, %s(%d)
+
+--nested arrays--
+Error: 2 - mkdir() expects parameter 4 to be resource, array given, %s(%d)
+
+--uppercase NULL--
+Error: 2 - mkdir() expects parameter 4 to be resource, null given, %s(%d)
+
+--lowercase null--
+Error: 2 - mkdir() expects parameter 4 to be resource, null given, %s(%d)
+
+--lowercase true--
+Error: 2 - mkdir() expects parameter 4 to be resource, boolean given, %s(%d)
+
+--lowercase false--
+Error: 2 - mkdir() expects parameter 4 to be resource, boolean given, %s(%d)
+
+--uppercase TRUE--
+Error: 2 - mkdir() expects parameter 4 to be resource, boolean given, %s(%d)
+
+--uppercase FALSE--
+Error: 2 - mkdir() expects parameter 4 to be resource, boolean given, %s(%d)
+
+--empty string DQ--
+Error: 2 - mkdir() expects parameter 4 to be resource, string given, %s(%d)
+
+--empty string SQ--
+Error: 2 - mkdir() expects parameter 4 to be resource, string given, %s(%d)
+
+--string DQ--
+Error: 2 - mkdir() expects parameter 4 to be resource, string given, %s(%d)
+
+--string SQ--
+Error: 2 - mkdir() expects parameter 4 to be resource, string given, %s(%d)
+
+--mixed case string--
+Error: 2 - mkdir() expects parameter 4 to be resource, string given, %s(%d)
+
+--heredoc--
+Error: 2 - mkdir() expects parameter 4 to be resource, string given, %s(%d)
+
+--instance of classWithToString--
+Error: 2 - mkdir() expects parameter 4 to be resource, object given, %s(%d)
+
+--instance of classWithoutToString--
+Error: 2 - mkdir() expects parameter 4 to be resource, object given, %s(%d)
+
+--undefined var--
+Error: 2 - mkdir() expects parameter 4 to be resource, null given, %s(%d)
+
+--unset var--
+Error: 2 - mkdir() expects parameter 4 to be resource, null given, %s(%d)
+
+--file resource--
+Error: 2 - mkdir(): supplied resource is not a valid Stream-Context resource, %s(%d)
+Directory created
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/mkdir_variation5-win32.phpt b/ext/standard/tests/file/mkdir_variation5-win32.phpt
new file mode 100644
index 000000000..c7ebd518d
--- /dev/null
+++ b/ext/standard/tests/file/mkdir_variation5-win32.phpt
@@ -0,0 +1,105 @@
+--TEST--
+Test mkdir() function : variation: various valid and invalid paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Only valid for Windows");
+?>
+--FILE--
+<?php
+/* Prototype : bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])
+ * Description: Create a directory
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mkdir() : variation ***\n";
+
+$workDir = "mkdirVar5.tmp";
+$subDir = "aSubDir";
+mkdir($workDir);
+$cwd = getcwd();
+
+$unixifiedDir = '/'.substr(str_replace('\\','/',$cwd).'/'.$workDir.'/'.$subDir, 3);
+
+$dirs = array(
+ // relative
+ $workDir.'\\'.$subDir,
+ '.\\'.$workDir.'\\'.$subDir,
+ $workDir.'\\..\\'.$workDir.'\\'.$subDir,
+
+ // relative bad path
+ $workDir.'\\..\\BADDIR\\'.$subDir,
+ 'BADDIR\\'.$subDir,
+
+ //absolute
+ $cwd.'\\'.$workDir.'\\'.$subDir,
+ $cwd.'\\.\\'.$workDir.'\\'.$subDir,
+ $cwd.'\\'.$workDir.'\\..\\'.$workDir.'\\'.$subDir,
+
+ //absolute bad path
+ $cwd.'\\BADDIR\\'.$subDir,
+
+ //trailing separators
+ $workDir.'\\'.$subDir.'\\',
+ $cwd.'\\'.$workDir.'\\'.$subDir.'\\',
+
+ // multiple separators
+ $workDir.'\\\\'.$subDir,
+ $cwd.'\\\\'.$workDir.'\\\\'.$subDir,
+
+ // Unixified Dir
+ $unixifiedDir,
+
+ );
+
+
+foreach($dirs as $dir) {
+ echo "-- creating $dir --\n";
+ $res = mkdir($dir);
+ if ($res === true) {
+ echo "Directory created\n";
+ rmdir($workDir.'\\'.$subDir);
+ }
+}
+
+rmdir($workDir);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mkdir() : variation ***
+-- creating mkdirVar5.tmp\aSubDir --
+Directory created
+-- creating .\mkdirVar5.tmp\aSubDir --
+Directory created
+-- creating mkdirVar5.tmp\..\mkdirVar5.tmp\aSubDir --
+Directory created
+-- creating mkdirVar5.tmp\..\BADDIR\aSubDir --
+
+Warning: mkdir(): No such file or directory in %s on line %d
+-- creating BADDIR\aSubDir --
+
+Warning: mkdir(): No such file or directory in %s on line %d
+-- creating %s\mkdirVar5.tmp\aSubDir --
+Directory created
+-- creating %s\.\mkdirVar5.tmp\aSubDir --
+Directory created
+-- creating %s\mkdirVar5.tmp\..\mkdirVar5.tmp\aSubDir --
+Directory created
+-- creating %s\BADDIR\aSubDir --
+
+Warning: mkdir(): No such file or directory in %s on line %d
+-- creating mkdirVar5.tmp\aSubDir\ --
+Directory created
+-- creating %s\mkdirVar5.tmp\aSubDir\ --
+Directory created
+-- creating mkdirVar5.tmp\\aSubDir --
+Directory created
+-- creating %s\\mkdirVar5.tmp\\aSubDir --
+Directory created
+-- creating /%s/mkdirVar5.tmp/aSubDir --
+Directory created
+===DONE===
diff --git a/ext/standard/tests/file/mkdir_variation5.phpt b/ext/standard/tests/file/mkdir_variation5.phpt
new file mode 100644
index 000000000..364e5e74b
--- /dev/null
+++ b/ext/standard/tests/file/mkdir_variation5.phpt
@@ -0,0 +1,93 @@
+--TEST--
+Test mkdir() function : variation: various valid and invalid paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])
+ * Description: Create a directory
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mkdir() : variation ***\n";
+
+$workDir = "mkdirVar5.tmp";
+$subDir = "aSubDir";
+mkdir($workDir);
+$cwd = getcwd();
+
+$dirs = array(
+ // relative
+ $workDir.'/'.$subDir,
+ './'.$workDir.'/'.$subDir,
+ $workDir.'/../'.$workDir.'/'.$subDir,
+
+ // relative bad path
+ $workDir.'/../BADDIR/'.$subDir,
+ 'BADDIR/'.$subDir,
+
+ //absolute
+ $cwd.'/'.$workDir.'/'.$subDir,
+ $cwd.'/./'.$workDir.'/'.$subDir,
+ $cwd.'/'.$workDir.'/../'.$workDir.'/'.$subDir,
+
+ //absolute bad path
+ $cwd.'/BADDIR/'.$subDir,
+
+ //trailing separators
+ $workDir.'/'.$subDir.'/',
+ $cwd.'/'.$workDir.'/'.$subDir.'/',
+
+ // multiple separators
+ $workDir.'//'.$subDir,
+ $cwd.'//'.$workDir.'//'.$subDir,
+
+ );
+
+
+foreach($dirs as $dir) {
+ echo "-- creating $dir --\n";
+ $res = mkdir($dir);
+ if ($res === true) {
+ echo "Directory created\n";
+ rmdir($dir);
+ }
+}
+
+rmdir($workDir);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mkdir() : variation ***
+-- creating mkdirVar5.tmp/aSubDir --
+Directory created
+-- creating ./mkdirVar5.tmp/aSubDir --
+Directory created
+-- creating mkdirVar5.tmp/../mkdirVar5.tmp/aSubDir --
+Directory created
+-- creating mkdirVar5.tmp/../BADDIR/aSubDir --
+
+Warning: mkdir(): No such file or directory in %s on line %d
+-- creating BADDIR/aSubDir --
+
+Warning: mkdir(): No such file or directory in %s on line %d
+-- creating %s/mkdirVar5.tmp/aSubDir --
+Directory created
+-- creating %s/./mkdirVar5.tmp/aSubDir --
+Directory created
+-- creating %s/mkdirVar5.tmp/../mkdirVar5.tmp/aSubDir --
+Directory created
+-- creating %s/BADDIR/aSubDir --
+
+Warning: mkdir(): No such file or directory in %s on line %d
+-- creating mkdirVar5.tmp/aSubDir/ --
+Directory created
+-- creating %s/mkdirVar5.tmp/aSubDir/ --
+Directory created
+-- creating mkdirVar5.tmp//aSubDir --
+Directory created
+-- creating %s//mkdirVar5.tmp//aSubDir --
+Directory created
+===DONE===
diff --git a/ext/standard/tests/file/move_uploaded_file_basic.phpt b/ext/standard/tests/file/move_uploaded_file_basic.phpt
new file mode 100644
index 000000000..591eec820
--- /dev/null
+++ b/ext/standard/tests/file/move_uploaded_file_basic.phpt
@@ -0,0 +1,79 @@
+--TEST--
+move_uploaded_file() function
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php if (php_sapi_name()=='cli') die('skip'); ?>
+--POST_RAW--
+Content-type: multipart/form-data, boundary=AaB03x
+
+--AaB03x
+content-disposition: form-data; name="field1"
+
+Joe Blow
+--AaB03x
+content-disposition: form-data; name="file1"; filename="file1.txt"
+Content-Type: text/plain
+
+abcdef123456789xxxDDDxxxDDDxxxDDD
+--AaB03x
+content-disposition: form-data; name="file2"; filename="file2.txt"
+Content-Type: text/plain
+
+abcdef123456789
+--AaB03x--
+--FILE--
+<?php
+
+echo "Valid move\n";
+$destination1 = __FILE__ . ".tmp";
+
+var_dump(move_uploaded_file($_FILES['file1']['tmp_name'], $destination1));
+$file_contents = file_get_contents($destination1);
+$contents_matches = ($file_contents == b"abcdef123456789xxxDDDxxxDDDxxxDDD");
+var_dump($contents_matches);
+unlink($destination1);
+echo "\n";
+
+echo "Original name of uploaded file\n";
+$destination2 = __FILE__ . ".tmp2";
+var_dump(move_uploaded_file($_FILES['file1']['name'], $destination2));
+
+echo "Non-uploaded source file\n";
+$source = __FILE__;
+$destination3 = __FILE__ . ".tmp3";
+var_dump(move_uploaded_file($source, $destination3));
+
+echo "Valid move to existing file\n";
+$destination4 = __FILE__ . ".tmp4";
+$fd = fopen($destination4, "w");
+fclose($fd);
+var_dump(move_uploaded_file($_FILES['file2']['tmp_name'], $destination4));
+unlink($destination4);
+
+echo "Wrong parameters\n";
+var_dump(move_uploaded_file());
+var_dump(move_uploaded_file(1, 2, 3));
+
+
+?>
+--EXPECTF--
+Valid move
+bool(true)
+bool(true)
+
+Original name of uploaded file
+bool(false)
+Non-uploaded source file
+bool(false)
+Valid move to existing file
+bool(true)
+Wrong parameters
+
+Warning: Wrong parameter count for move_uploaded_file() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for move_uploaded_file() in %s on line %d
+NULL
+
+
diff --git a/ext/standard/tests/file/open_basedir.inc b/ext/standard/tests/file/open_basedir.inc
deleted file mode 100644
index 7fd0afc8b..000000000
--- a/ext/standard/tests/file/open_basedir.inc
+++ /dev/null
@@ -1,133 +0,0 @@
-<?php
-
-// This file contains helper functions for testing open_basedir configuration
-// Care must be taken with where the directories are created because different
-// SAPIs set the working directory differently. So simply creating a directory
-// relative to the current working directory like this: mkdir("blah") might
-// actually create it in several different places depending on the SAPI..!
-//
-// Note also depending on the version of php being tested, so the open_basedir
-// configuration may or may not be changeable from a script (PHP_INI_SYSTEM).
-//
-// For this reason we set the open_basedir to . (current directory) and then
-// move around to various directories for testing using chdir(). This is NOT
-// recommended for production use as . bypasses all semblence of security..!
-//
-// Although safe mode has been removed in php 6.0, open_basedir is still valid.
-// See http://www.php.net/features.safe-mode for more information
-
-function recursive_delete_directory($directory) {
-
- // Remove any trailing slash first
- if (substr($directory, -1) == '/') {
- $directory = substr($directory, 0, -1);
- }
-
- // Make sure the directory is valid
- if (is_dir($directory) == FALSE) {
- return FALSE;
- }
-
- // Check we can access the directory
- if (is_readable($directory) == FALSE) {
- return FALSE;
- }
-
- $handle = opendir($directory);
-
- // Scan through the directory contents
- while (FALSE !== ($item = readdir($handle))) {
- if ($item != '.') {
- if ($item != '..') {
- $path = ($directory.'/'.$item);
- if (is_dir($path) == TRUE) {
- recursive_delete_directory($path);
- } else {
- @chmod($path, 0777);
- unlink($path);
- }
- }
- }
- }
-
- closedir($handle);
- @chmod($directory, 0777);
- rmdir($directory);
-
- return TRUE;
-}
-
-function create_directories() {
- delete_directories();
- $directory = dirname(__FILE__);
-
- var_dump(mkdir($directory."/test"));
- var_dump(mkdir($directory."/test/ok"));
- var_dump(mkdir($directory."/test/bad"));
- file_put_contents($directory."/test/ok/ok.txt", "Hello World!");
- file_put_contents($directory."/test/bad/bad.txt", "Hello World!");
-}
-
-function delete_directories() {
- $directory = (dirname(__FILE__)."/test");
- recursive_delete_directory($directory);
-}
-
-function test_open_basedir_error($function) {
- var_dump($function("../bad"));
- var_dump($function("../bad/bad.txt"));
- var_dump($function(".."));
- var_dump($function("../"));
- var_dump($function("/"));
- var_dump($function("../bad/."));
- $directory = dirname(__FILE__);
- var_dump($function($directory."/test/bad/bad.txt"));
- var_dump($function($directory."/test/bad/../bad/bad.txt"));
-}
-
-function test_open_basedir_before($function, $change = TRUE) {
- echo "*** Testing open_basedir configuration [$function] ***\n";
- $directory = dirname(__FILE__);
- var_dump(chdir($directory));
- create_directories();
-
- // Optionally change directory
- if ($change == TRUE) {
- var_dump(chdir($directory."/test/ok"));
- }
-}
-
-// Delete directories using a --CLEAN-- section!
-function test_open_basedir_after($function) {
- echo "*** Finished testing open_basedir configuration [$function] ***\n";
-}
-
-// This is used by functions that return an array on success
-function test_open_basedir_array($function) {
- test_open_basedir_before($function);
- test_open_basedir_error($function);
- var_dump(is_array($function("./../.")));
- var_dump(is_array($function("../ok")));
- var_dump(is_array($function("ok.txt")));
- var_dump(is_array($function("../ok/ok.txt")));
- $directory = dirname(__FILE__);
- var_dump(is_array($function($directory."/test/ok/ok.txt")));
- var_dump(is_array($function($directory."/test/ok/../ok/ok.txt")));
- test_open_basedir_after($function);
-}
-
-function test_open_basedir($function) {
- test_open_basedir_before($function);
- test_open_basedir_error($function);
- var_dump($function("./../."));
- var_dump($function("../ok"));
- var_dump($function("ok.txt"));
- var_dump($function("../ok/ok.txt"));
- $directory = dirname(__FILE__);
- var_dump($function($directory."/test/ok/ok.txt"));
- var_dump($function($directory."/test/ok/../ok/ok.txt"));
- test_open_basedir_after($function);
-}
-
-?>
-
diff --git a/ext/standard/tests/file/open_basedir_chdir.phpt b/ext/standard/tests/file/open_basedir_chdir.phpt
deleted file mode 100644
index 32ed4eb1e..000000000
--- a/ext/standard/tests/file/open_basedir_chdir.phpt
+++ /dev/null
@@ -1,51 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir_before("chdir");
-$directory = dirname(__FILE__);
-
-var_dump(chdir("../bad"));
-var_dump(chdir(".."));
-var_dump(chdir("../"));
-var_dump(chdir("/"));
-var_dump(chdir("../bad/."));
-var_dump(chdir("./../."));
-
-test_open_basedir_after("chdir");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [chdir] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: chdir(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: chdir(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: chdir(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: chdir(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: chdir(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: chdir(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-*** Finished testing open_basedir configuration [chdir] ***
-
diff --git a/ext/standard/tests/file/open_basedir_chmod.phpt b/ext/standard/tests/file/open_basedir_chmod.phpt
deleted file mode 100644
index 02fdce5a1..000000000
--- a/ext/standard/tests/file/open_basedir_chmod.phpt
+++ /dev/null
@@ -1,71 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir_before("chmod");
-$directory = dirname(__FILE__);
-
-var_dump(chmod("../bad", 0600));
-var_dump(chmod("../bad/bad.txt", 0600));
-var_dump(chmod("..", 0600));
-var_dump(chmod("../", 0600));
-var_dump(chmod("/", 0600));
-var_dump(chmod("../bad/.", 0600));
-var_dump(chmod("../bad/./bad.txt", 0600));
-var_dump(chmod("./../.", 0600));
-
-var_dump(chmod($directory."/test/ok/ok.txt", 0600));
-var_dump(chmod("./ok.txt", 0600));
-var_dump(chmod("ok.txt", 0600));
-var_dump(chmod("../ok/ok.txt", 0600));
-var_dump(chmod("../ok/./ok.txt", 0600));
-chmod($directory."/test/ok/ok.txt", 0777);
-
-test_open_basedir_after("chmod");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [chmod] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: chmod(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: chmod(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: chmod(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: chmod(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: chmod(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: chmod(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: chmod(): open_basedir restriction in effect. File(../bad/./bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: chmod(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-*** Finished testing open_basedir configuration [chmod] ***
-
diff --git a/ext/standard/tests/file/open_basedir_copy.phpt b/ext/standard/tests/file/open_basedir_copy.phpt
deleted file mode 100644
index 8f0f7a91f..000000000
--- a/ext/standard/tests/file/open_basedir_copy.phpt
+++ /dev/null
@@ -1,79 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir_before("copy");
-$directory = dirname(__FILE__);
-
-var_dump(copy("ok.txt", "../bad"));
-var_dump(copy("ok.txt", "../bad/bad.txt"));
-var_dump(copy("ok.txt", ".."));
-var_dump(copy("ok.txt", "../"));
-var_dump(copy("ok.txt", "/"));
-var_dump(copy("ok.txt", "../bad/."));
-var_dump(copy("ok.txt", "../bad/./bad.txt"));
-var_dump(copy("ok.txt", "./../."));
-
-var_dump(copy("ok.txt", "copy.txt"));
-var_dump(unlink("copy.txt"));
-test_open_basedir_after("copy");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [copy] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: copy(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: copy(../bad): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: copy(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: copy(../bad/bad.txt): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: copy(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: copy(..): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: copy(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: copy(../): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: copy(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: copy(/): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: copy(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: copy(../bad/.): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: copy(): open_basedir restriction in effect. File(../bad/./bad.txt) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: copy(../bad/./bad.txt): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: copy(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: copy(./../.): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-bool(true)
-bool(true)
-*** Finished testing open_basedir configuration [copy] ***
-
diff --git a/ext/standard/tests/file/open_basedir_copy_variation1.phpt b/ext/standard/tests/file/open_basedir_copy_variation1.phpt
deleted file mode 100644
index de532e12c..000000000
--- a/ext/standard/tests/file/open_basedir_copy_variation1.phpt
+++ /dev/null
@@ -1,35 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir_before("copy");
-$directory = dirname(__FILE__);
-
-var_dump(copy("../bad/bad.txt", "copy.txt"));
-var_dump(unlink("copy.txt"));
-
-test_open_basedir_after("copy");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [copy] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: copy(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: unlink(copy.txt): No such file or directory in %s on line %d
-bool(false)
-*** Finished testing open_basedir configuration [copy] ***
-
diff --git a/ext/standard/tests/file/open_basedir_disk_free_space.phpt b/ext/standard/tests/file/open_basedir_disk_free_space.phpt
deleted file mode 100644
index e3e36e670..000000000
--- a/ext/standard/tests/file/open_basedir_disk_free_space.phpt
+++ /dev/null
@@ -1,52 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-
-test_open_basedir_before("disk_free_space");
-test_open_basedir_error("disk_free_space");
-$directory = dirname(__FILE__);
-var_dump(disk_free_space($directory."/test/ok"));
-test_open_basedir_after("disk_free_space");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [disk_free_space] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: disk_free_space(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: disk_free_space(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: disk_free_space(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: disk_free_space(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: disk_free_space(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: disk_free_space(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: disk_free_space(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: disk_free_space(): open_basedir restriction in effect. File(%s/test/bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-float(%s)
-*** Finished testing open_basedir configuration [disk_free_space] ***
diff --git a/ext/standard/tests/file/open_basedir_file.phpt b/ext/standard/tests/file/open_basedir_file.phpt
deleted file mode 100644
index fbc841e3f..000000000
--- a/ext/standard/tests/file/open_basedir_file.phpt
+++ /dev/null
@@ -1,88 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-$directory = dirname(__FILE__);
-test_open_basedir_before("file");
-test_open_basedir_error("file");
-
-var_dump(file("ok.txt"));
-var_dump(file("../ok/ok.txt"));
-var_dump(file($directory."/test/ok/ok.txt"));
-var_dump(file($directory."/test/ok/../ok/ok.txt"));
-
-test_open_basedir_after("file");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [file] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: file(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: file(../bad): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: file(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: file(../bad/bad.txt): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: file(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: file(..): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: file(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: file(../): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: file(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: file(/): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: file(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: file(../bad/.): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: file(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: file(%s/test/bad/bad.txt): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: file(): open_basedir restriction in effect. File(%s/test/bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: file(%s/test/bad/../bad/bad.txt): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-array(1) {
- [0]=>
- string(12) "Hello World!"
-}
-array(1) {
- [0]=>
- string(12) "Hello World!"
-}
-array(1) {
- [0]=>
- string(12) "Hello World!"
-}
-array(1) {
- [0]=>
- string(12) "Hello World!"
-}
-*** Finished testing open_basedir configuration [file] ***
-
diff --git a/ext/standard/tests/file/open_basedir_file_exists.phpt b/ext/standard/tests/file/open_basedir_file_exists.phpt
deleted file mode 100644
index c249fc116..000000000
--- a/ext/standard/tests/file/open_basedir_file_exists.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir("file_exists");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [file_exists] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: file_exists(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: file_exists(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: file_exists(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: file_exists(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: file_exists(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: file_exists(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: file_exists(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: file_exists(): open_basedir restriction in effect. File(%s/test/bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: file_exists(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-*** Finished testing open_basedir configuration [file_exists] ***
-
diff --git a/ext/standard/tests/file/open_basedir_file_get_contents.phpt b/ext/standard/tests/file/open_basedir_file_get_contents.phpt
deleted file mode 100644
index 637c499ea..000000000
--- a/ext/standard/tests/file/open_basedir_file_get_contents.phpt
+++ /dev/null
@@ -1,75 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-$directory = dirname(__FILE__);
-test_open_basedir_before("file_get_contents");
-test_open_basedir_error("file_get_contents");
-
-var_dump(file_get_contents("ok.txt"));
-var_dump(file_get_contents("../ok/ok.txt"));
-var_dump(file_get_contents($directory."/test/ok/ok.txt"));
-var_dump(file_get_contents($directory."/test/ok/../ok/ok.txt"));
-
-test_open_basedir_after("file_get_contents");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [file_get_contents] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: file_get_contents(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: file_get_contents(../bad): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: file_get_contents(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: file_get_contents(../bad/bad.txt): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: file_get_contents(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: file_get_contents(..): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: file_get_contents(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: file_get_contents(../): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: file_get_contents(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: file_get_contents(/): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: file_get_contents(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: file_get_contents(../bad/.): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: file_get_contents(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: file_get_contents(%s/test/bad/bad.txt): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: file_get_contents(): open_basedir restriction in effect. File(%s/test/bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: file_get_contents(%s/test/bad/../bad/bad.txt): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-string(12) "Hello World!"
-string(12) "Hello World!"
-string(12) "Hello World!"
-string(12) "Hello World!"
-*** Finished testing open_basedir configuration [file_get_contents] ***
diff --git a/ext/standard/tests/file/open_basedir_file_put_contents.phpt b/ext/standard/tests/file/open_basedir_file_put_contents.phpt
deleted file mode 100644
index d4bd417b5..000000000
--- a/ext/standard/tests/file/open_basedir_file_put_contents.phpt
+++ /dev/null
@@ -1,57 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir_before("file_put_contents");
-$directory = dirname(__FILE__);
-
-var_dump(file_put_contents("../bad/bad.txt", "Hello World!"));
-var_dump(file_put_contents(".././bad/bad.txt", "Hello World!"));
-var_dump(file_put_contents("../bad/../bad/bad.txt", "Hello World!"));
-var_dump(file_put_contents("./.././bad/bad.txt", "Hello World!"));
-var_dump(file_put_contents($directory."/test/bad/bad.txt", "Hello World!"));
-
-test_open_basedir_after("file_put_contents");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [file_put_contents] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: file_put_contents(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: file_put_contents(../bad/bad.txt): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: file_put_contents(): open_basedir restriction in effect. File(.././bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: file_put_contents(.././bad/bad.txt): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: file_put_contents(): open_basedir restriction in effect. File(../bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: file_put_contents(../bad/../bad/bad.txt): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: file_put_contents(): open_basedir restriction in effect. File(./.././bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: file_put_contents(./.././bad/bad.txt): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: file_put_contents(): open_basedir restriction in effect. File%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: file_put_contents%s/test/bad/bad.txt): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-*** Finished testing open_basedir configuration [file_put_contents] ***
-
diff --git a/ext/standard/tests/file/open_basedir_fileatime.phpt b/ext/standard/tests/file/open_basedir_fileatime.phpt
deleted file mode 100644
index 02cc94f83..000000000
--- a/ext/standard/tests/file/open_basedir_fileatime.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir("fileatime");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [fileatime] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: fileatime(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileatime(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileatime(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileatime(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileatime(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileatime(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileatime(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileatime(): open_basedir restriction in effect. File(%s/test/bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileatime(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-int(%d)
-int(%d)
-int(%d)
-int(%d)
-int(%d)
-*** Finished testing open_basedir configuration [fileatime] ***
-
diff --git a/ext/standard/tests/file/open_basedir_filectime.phpt b/ext/standard/tests/file/open_basedir_filectime.phpt
deleted file mode 100644
index 542c8423e..000000000
--- a/ext/standard/tests/file/open_basedir_filectime.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir("filectime");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [filectime] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: filectime(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filectime(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filectime(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filectime(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filectime(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filectime(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filectime(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filectime(): open_basedir restriction in effect. File(%s/test/bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filectime(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-int(%d)
-int(%d)
-int(%d)
-int(%d)
-int(%d)
-*** Finished testing open_basedir configuration [filectime] ***
-
diff --git a/ext/standard/tests/file/open_basedir_filegroup.phpt b/ext/standard/tests/file/open_basedir_filegroup.phpt
deleted file mode 100644
index 5f6279aa8..000000000
--- a/ext/standard/tests/file/open_basedir_filegroup.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir("filegroup");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [filegroup] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: filegroup(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filegroup(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filegroup(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filegroup(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filegroup(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filegroup(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filegroup(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filegroup(): open_basedir restriction in effect. File(%s/test/bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filegroup(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-int(%d)
-int(%d)
-int(%d)
-int(%d)
-int(%d)
-*** Finished testing open_basedir configuration [filegroup] ***
-
diff --git a/ext/standard/tests/file/open_basedir_fileinode.phpt b/ext/standard/tests/file/open_basedir_fileinode.phpt
deleted file mode 100644
index 070c2c806..000000000
--- a/ext/standard/tests/file/open_basedir_fileinode.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir("fileinode");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [fileinode] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: fileinode(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileinode(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileinode(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileinode(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileinode(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileinode(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileinode(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileinode(): open_basedir restriction in effect. File(%s/test/bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileinode(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-int(%d)
-int(%d)
-int(%d)
-int(%d)
-int(%d)
-*** Finished testing open_basedir configuration [fileinode] ***
-
diff --git a/ext/standard/tests/file/open_basedir_filemtime.phpt b/ext/standard/tests/file/open_basedir_filemtime.phpt
deleted file mode 100644
index 7213ddb5b..000000000
--- a/ext/standard/tests/file/open_basedir_filemtime.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir("filemtime");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [filemtime] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: filemtime(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filemtime(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filemtime(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filemtime(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filemtime(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filemtime(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filemtime(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filemtime(): open_basedir restriction in effect. File(%s/test/bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filemtime(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-int(%d)
-int(%d)
-int(%d)
-int(%d)
-int(%d)
-*** Finished testing open_basedir configuration [filemtime] ***
-
diff --git a/ext/standard/tests/file/open_basedir_fileowner.phpt b/ext/standard/tests/file/open_basedir_fileowner.phpt
deleted file mode 100644
index b363b7e0e..000000000
--- a/ext/standard/tests/file/open_basedir_fileowner.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir("fileowner");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [fileowner] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: fileowner(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileowner(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileowner(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileowner(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileowner(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileowner(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileowner(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileowner(): open_basedir restriction in effect. File(%s/test/bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileowner(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-int(%d)
-int(%d)
-int(%d)
-int(%d)
-int(%d)
-*** Finished testing open_basedir configuration [fileowner] ***
-
diff --git a/ext/standard/tests/file/open_basedir_fileperms.phpt b/ext/standard/tests/file/open_basedir_fileperms.phpt
deleted file mode 100644
index a1e6511b0..000000000
--- a/ext/standard/tests/file/open_basedir_fileperms.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir("fileperms");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [fileperms] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: fileperms(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileperms(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileperms(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileperms(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileperms(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileperms(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileperms(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileperms(): open_basedir restriction in effect. File(%s/test/bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: fileperms(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-int(%d)
-int(%d)
-int(%d)
-int(%d)
-int(%d)
-*** Finished testing open_basedir configuration [fileperms] ***
-
diff --git a/ext/standard/tests/file/open_basedir_filesize.phpt b/ext/standard/tests/file/open_basedir_filesize.phpt
deleted file mode 100644
index a335dfd17..000000000
--- a/ext/standard/tests/file/open_basedir_filesize.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir("filesize");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [filesize] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: filesize(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filesize(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filesize(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filesize(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filesize(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filesize(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filesize(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filesize(): open_basedir restriction in effect. File(%s/test/bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filesize(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-int(%d)
-int(%d)
-int(%d)
-int(%d)
-int(%d)
-*** Finished testing open_basedir configuration [filesize] ***
-
diff --git a/ext/standard/tests/file/open_basedir_filetype.phpt b/ext/standard/tests/file/open_basedir_filetype.phpt
deleted file mode 100644
index 5091db56f..000000000
--- a/ext/standard/tests/file/open_basedir_filetype.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir("filetype");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [filetype] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: filetype(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filetype(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filetype(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filetype(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filetype(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filetype(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filetype(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filetype(): open_basedir restriction in effect. File(%s/test/bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: filetype(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-string(3) "dir"
-string(4) "file"
-string(4) "file"
-string(4) "file"
-string(4) "file"
-*** Finished testing open_basedir configuration [filetype] ***
-
diff --git a/ext/standard/tests/file/open_basedir_fopen.phpt b/ext/standard/tests/file/open_basedir_fopen.phpt
deleted file mode 100644
index c6c9a253f..000000000
--- a/ext/standard/tests/file/open_basedir_fopen.phpt
+++ /dev/null
@@ -1,86 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir_before("fopen");
-$directory = dirname(__FILE__);
-
-var_dump(fopen("../bad", "r"));
-var_dump(fopen("../bad/bad.txt", "r"));
-var_dump(fopen("..", "r"));
-var_dump(fopen("../", "r"));
-var_dump(fopen("/", "r"));
-var_dump(fopen("../bad/.", "r"));
-var_dump(fopen("../bad/./bad.txt", "r"));
-var_dump(fopen("./../.", "r"));
-
-var_dump(fopen($directory."/test/ok/ok.txt", "r"));
-var_dump(fopen("./ok.txt", "r"));
-var_dump(fopen("ok.txt", "r"));
-var_dump(fopen("../ok/ok.txt", "r"));
-var_dump(fopen("../ok/./ok.txt", "r"));
-
-test_open_basedir_after("fopen");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [fopen] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: fopen(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: fopen(../bad): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: fopen(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: fopen(../bad/bad.txt): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: fopen(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: fopen(..): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: fopen(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: fopen(../): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: fopen(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: fopen(/): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: fopen(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: fopen(../bad/.): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-
-Warning: fopen(): open_basedir restriction in effect. File(../bad/./bad.txt) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: fopen(../bad/./bad.txt): failed to open stream: Operation not permitted in %s on line 12
-bool(false)
-
-Warning: fopen(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: fopen(./../.): failed to open stream: Operation not permitted in %s on line %d
-bool(false)
-resource(%d) of type (stream)
-resource(%d) of type (stream)
-resource(%d) of type (stream)
-resource(%d) of type (stream)
-resource(%d) of type (stream)
-*** Finished testing open_basedir configuration [fopen] ***
-
diff --git a/ext/standard/tests/file/open_basedir_glob-win32.phpt b/ext/standard/tests/file/open_basedir_glob-win32.phpt
deleted file mode 100644
index 3fa19afa3..000000000
--- a/ext/standard/tests/file/open_basedir_glob-win32.phpt
+++ /dev/null
@@ -1,59 +0,0 @@
---TEST--
-Test open_basedir configuration
---SKIPIF--
-<?php
-if (substr(PHP_OS, 0, 3) != 'WIN') {
- die('skip Windows only variation');
-}
-?>
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir("glob");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [glob] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-bool(false)
-array(0) {
-}
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-array(1) {
- [0]=>
- string(5) "../ok"
-}
-array(1) {
- [0]=>
- string(6) "ok.txt"
-}
-array(1) {
- [0]=>
- string(12) "../ok/ok.txt"
-}
-array(1) {
- [0]=>
- string(%d) "%s/test/ok/ok.txt"
-}
-array(1) {
- [0]=>
- string(%d) "%s/test/ok/../ok/ok.txt"
-}
-*** Finished testing open_basedir configuration [glob] ***
-
diff --git a/ext/standard/tests/file/open_basedir_glob.phpt b/ext/standard/tests/file/open_basedir_glob.phpt
deleted file mode 100644
index 591cd8f4f..000000000
--- a/ext/standard/tests/file/open_basedir_glob.phpt
+++ /dev/null
@@ -1,58 +0,0 @@
---TEST--
-Test open_basedir configuration
---SKIPIF--
-<?php
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip Not for Windows variation');
-}
-?>
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir("glob");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [glob] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-array(1) {
- [0]=>
- string(5) "../ok"
-}
-array(1) {
- [0]=>
- string(6) "ok.txt"
-}
-array(1) {
- [0]=>
- string(12) "../ok/ok.txt"
-}
-array(1) {
- [0]=>
- string(%d) "%s/test/ok/ok.txt"
-}
-array(1) {
- [0]=>
- string(%d) "%s/test/ok/../ok/ok.txt"
-}
-*** Finished testing open_basedir configuration [glob] ***
-
diff --git a/ext/standard/tests/file/open_basedir_is_dir.phpt b/ext/standard/tests/file/open_basedir_is_dir.phpt
deleted file mode 100644
index e4ad620d7..000000000
--- a/ext/standard/tests/file/open_basedir_is_dir.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir("is_dir");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [is_dir] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: is_dir(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_dir(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_dir(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_dir(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_dir(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_dir(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_dir(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_dir(): open_basedir restriction in effect. File(%s/test/bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_dir(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-bool(true)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-*** Finished testing open_basedir configuration [is_dir] ***
-
diff --git a/ext/standard/tests/file/open_basedir_is_executable.phpt b/ext/standard/tests/file/open_basedir_is_executable.phpt
deleted file mode 100644
index 1bab86055..000000000
--- a/ext/standard/tests/file/open_basedir_is_executable.phpt
+++ /dev/null
@@ -1,59 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir_before("is_executable");
-test_open_basedir_error("is_executable");
-
-var_dump(is_executable("ok.txt"));
-var_dump(is_executable("../ok/ok.txt"));
-$directory = dirname(__FILE__);
-var_dump(is_executable($directory."/test/ok/ok.txt"));
-var_dump(is_executable($directory."/test/ok/../ok/ok.txt"));
-
-test_open_basedir_after("is_executable");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [is_executable] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: is_executable(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_executable(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_executable(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_executable(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_executable(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_executable(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_executable(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_executable(): open_basedir restriction in effect. File(%s/test/bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-*** Finished testing open_basedir configuration [is_executable] ***
diff --git a/ext/standard/tests/file/open_basedir_is_file.phpt b/ext/standard/tests/file/open_basedir_is_file.phpt
deleted file mode 100644
index 51ef0a2d1..000000000
--- a/ext/standard/tests/file/open_basedir_is_file.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir("is_file");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [is_file] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: is_file(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_file(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_file(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_file(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_file(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_file(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_file(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_file(): open_basedir restriction in effect. File(%s/test/bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_file(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-bool(false)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-*** Finished testing open_basedir configuration [is_file] ***
-
diff --git a/ext/standard/tests/file/open_basedir_is_link.phpt b/ext/standard/tests/file/open_basedir_is_link.phpt
deleted file mode 100644
index 5d12148d8..000000000
--- a/ext/standard/tests/file/open_basedir_is_link.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir("is_link");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [is_link] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: is_link(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_link(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_link(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_link(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_link(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_link(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_link(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_link(): open_basedir restriction in effect. File(%s/test/bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_link(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-*** Finished testing open_basedir configuration [is_link] ***
-
diff --git a/ext/standard/tests/file/open_basedir_is_readable.phpt b/ext/standard/tests/file/open_basedir_is_readable.phpt
deleted file mode 100644
index 951a19ac7..000000000
--- a/ext/standard/tests/file/open_basedir_is_readable.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir("is_readable");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [is_readable] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: is_readable(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_readable(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_readable(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_readable(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_readable(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_readable(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_readable(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_readable(): open_basedir restriction in effect. File(%s/test/bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_readable(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-*** Finished testing open_basedir configuration [is_readable] ***
-
diff --git a/ext/standard/tests/file/open_basedir_is_writable.phpt b/ext/standard/tests/file/open_basedir_is_writable.phpt
deleted file mode 100644
index 25ce1c63a..000000000
--- a/ext/standard/tests/file/open_basedir_is_writable.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir("is_writable");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [is_writable] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: is_writable(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_writable(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_writable(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_writable(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_writable(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_writable(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_writable(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_writable(): open_basedir restriction in effect. File(%s/test/bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: is_writable(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-*** Finished testing open_basedir configuration [is_writable] ***
-
diff --git a/ext/standard/tests/file/open_basedir_link.phpt b/ext/standard/tests/file/open_basedir_link.phpt
deleted file mode 100644
index a54c22f4b..000000000
--- a/ext/standard/tests/file/open_basedir_link.phpt
+++ /dev/null
@@ -1,78 +0,0 @@
---TEST--
-Test open_basedir configuration
---SKIPIF--
-<?php
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip no links on Windows');
-}
-?>
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir_before("link");
-$directory = dirname(__FILE__);
-
-$target = ($directory."/test/ok/ok.txt");
-var_dump(link($target, "../bad/link.txt"));
-var_dump(link($target, "../link.txt"));
-var_dump(link($target, "../bad/./link.txt"));
-var_dump(link($target, "./.././link.txt"));
-
-$link = ($directory."/test/ok/link.txt");
-var_dump(link("../bad/bad.txt", $link));
-var_dump(link("../bad", $link));
-var_dump(link("../bad/./bad.txt", $link));
-var_dump(link("../bad/bad.txt", $link));
-var_dump(link("./.././bad", $link));
-
-$target = ($directory."/test/ok/ok.txt");
-
-var_dump(link($target, $link));
-var_dump(unlink($link));
-test_open_basedir_after("link");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [link] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: link(): open_basedir restriction in effect. File(%s/test/bad/link.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: link(): open_basedir restriction in effect. File(%s/test/link.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: link(): open_basedir restriction in effect. File(%s/test/bad/link.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: link(): open_basedir restriction in effect. File(%s/test/link.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: link(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: link(): open_basedir restriction in effect. File(%s/test/bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: link(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: link(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: link(): open_basedir restriction in effect. File(%s/test/bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-bool(true)
-bool(true)
-*** Finished testing open_basedir configuration [link] ***
-
diff --git a/ext/standard/tests/file/open_basedir_linkinfo.phpt b/ext/standard/tests/file/open_basedir_linkinfo.phpt
deleted file mode 100644
index ab12a5149..000000000
--- a/ext/standard/tests/file/open_basedir_linkinfo.phpt
+++ /dev/null
@@ -1,64 +0,0 @@
---TEST--
-Test open_basedir configuration
---SKIPIF--
-<?php
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip no symlinks on Windows');
-}
-?>
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir_before("linkinfo", FALSE);
-$directory = dirname(__FILE__);
-
-chdir($directory);
-
-$target = ($directory."/test/bad/bad.txt");
-$symlink = ($directory."/test/ok/symlink.txt");
-var_dump(symlink($target, $symlink));
-
-chdir($directory."/test/ok");
-
-var_dump(linkinfo("symlink.txt"));
-var_dump(linkinfo("../ok/symlink.txt"));
-var_dump(linkinfo("../ok/./symlink.txt"));
-var_dump(linkinfo("./symlink.txt"));
-var_dump(linkinfo($directory."/test/ok/symlink.txt"));
-
-$target = ($directory."/test/ok/ok.txt");
-$symlink = ($directory."/test/ok/symlink.txt");
-var_dump(symlink($target, $symlink));
-var_dump(linkinfo($symlink));
-var_dump(unlink($symlink));
-
-test_open_basedir_after("linkinfo");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [linkinfo] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-int(%d)
-int(%d)
-int(%d)
-int(%d)
-int(%d)
-
-Warning: symlink(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-int(%d)
-
-Warning: unlink(): open_basedir restriction in effect. File(%s/test/ok/symlink.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-*** Finished testing open_basedir configuration [linkinfo] ***
-
diff --git a/ext/standard/tests/file/open_basedir_lstat.phpt b/ext/standard/tests/file/open_basedir_lstat.phpt
deleted file mode 100644
index 35e5a2201..000000000
--- a/ext/standard/tests/file/open_basedir_lstat.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir_array("lstat");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [lstat] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: lstat(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: lstat(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: lstat(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: lstat(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: lstat(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: lstat(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: lstat(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: lstat(): open_basedir restriction in effect. File(%s/test/bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: lstat(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-*** Finished testing open_basedir configuration [lstat] ***
-
diff --git a/ext/standard/tests/file/open_basedir_mkdir.phpt b/ext/standard/tests/file/open_basedir_mkdir.phpt
deleted file mode 100644
index 253818ccf..000000000
--- a/ext/standard/tests/file/open_basedir_mkdir.phpt
+++ /dev/null
@@ -1,52 +0,0 @@
---TEST--
-Test open_basedir configuration
---SKIPIF--
-<?php
-if (substr(PHP_OS, 0, 3) != 'WIN') {
- die('skip Windows only variation');
-}
-?>
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir_before("mkdir");
-$directory = dirname(__FILE__);
-
-var_dump(mkdir("../bad/blah"));
-var_dump(mkdir("../blah"));
-var_dump(mkdir("../bad/./blah"));
-var_dump(mkdir("./.././blah"));
-
-var_dump(mkdir($directory."/test/ok/blah"));
-var_dump(rmdir($directory."/test/ok/blah"));
-test_open_basedir_after("mkdir");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [mkdir] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: mkdir(): open_basedir restriction in effect. File(../bad/blah) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: mkdir(): open_basedir restriction in effect. File(../blah) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: mkdir(): open_basedir restriction in effect. File(../bad/./blah) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: mkdir(): open_basedir restriction in effect. File(./.././blah) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-bool(true)
-bool(true)
-*** Finished testing open_basedir configuration [mkdir] ***
diff --git a/ext/standard/tests/file/open_basedir_parse_ini_file.phpt b/ext/standard/tests/file/open_basedir_parse_ini_file.phpt
deleted file mode 100644
index dadddac98..000000000
--- a/ext/standard/tests/file/open_basedir_parse_ini_file.phpt
+++ /dev/null
@@ -1,74 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir_before("parse_ini_file");
-$directory = dirname(__FILE__);
-
-var_dump(parse_ini_file("../bad"));
-var_dump(parse_ini_file("../bad/bad.txt"));
-var_dump(parse_ini_file(".."));
-var_dump(parse_ini_file("../"));
-var_dump(parse_ini_file("../bad/."));
-var_dump(parse_ini_file("../bad/./bad.txt"));
-var_dump(parse_ini_file("./../."));
-
-test_open_basedir_after("parse_ini_file");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [parse_ini_file] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: parse_ini_file(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: parse_ini_file(../bad): failed to open stream: Operation not permitted in %s on line %d
-array(0) {
-}
-
-Warning: parse_ini_file(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: parse_ini_file(../bad/bad.txt): failed to open stream: Operation not permitted in %s on line %d
-array(0) {
-}
-
-Warning: parse_ini_file(..): failed to open stream: Operation not permitted in %s on line %d
-array(0) {
-}
-
-Warning: parse_ini_file(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: parse_ini_file(../): failed to open stream: Operation not permitted in %s on line %d
-array(0) {
-}
-
-Warning: parse_ini_file(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: parse_ini_file(../bad/.): failed to open stream: Operation not permitted in %s on line %d
-array(0) {
-}
-
-Warning: parse_ini_file(): open_basedir restriction in effect. File(../bad/./bad.txt) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: parse_ini_file(../bad/./bad.txt): failed to open stream: Operation not permitted in %s on line %d
-array(0) {
-}
-
-Warning: parse_ini_file(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-
-Warning: parse_ini_file(./../.): failed to open stream: Operation not permitted in %s on line %d
-array(0) {
-}
-*** Finished testing open_basedir configuration [parse_ini_file] ***
-
diff --git a/ext/standard/tests/file/open_basedir_readlink.phpt b/ext/standard/tests/file/open_basedir_readlink.phpt
deleted file mode 100644
index cbba4307e..000000000
--- a/ext/standard/tests/file/open_basedir_readlink.phpt
+++ /dev/null
@@ -1,76 +0,0 @@
---TEST--
-Test open_basedir configuration
---SKIPIF--
-<?php
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip no symlinks on Windows');
-}
-?>
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir_before("readlink", FALSE);
-$directory = dirname(__FILE__);
-
-chdir($directory);
-
-$target = ($directory."/test/bad/bad.txt");
-$symlink = ($directory."/test/ok/symlink.txt");
-var_dump(symlink($target, $symlink));
-
-chdir($directory."/test/ok");
-
-var_dump(readlink("symlink.txt"));
-var_dump(readlink("../ok/symlink.txt"));
-var_dump(readlink("../ok/./symlink.txt"));
-var_dump(readlink("./symlink.txt"));
-var_dump(readlink($directory."/test/ok/symlink.txt"));
-
-$target = ($directory."/test/ok/ok.txt");
-$symlink = ($directory."/test/ok/symlink.txt");
-var_dump(symlink($target, $symlink));
-var_dump(readlink($symlink));
-var_dump(unlink($symlink));
-
-test_open_basedir_after("readlink");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [readlink] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: readlink(): open_basedir restriction in effect. File(symlink.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: readlink(): open_basedir restriction in effect. File(../ok/symlink.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: readlink(): open_basedir restriction in effect. File(../ok/./symlink.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: readlink(): open_basedir restriction in effect. File(./symlink.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: readlink(): open_basedir restriction in effect. File(%s/test/ok/symlink.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: symlink(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: readlink(): open_basedir restriction in effect. File(%s/test/ok/symlink.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: unlink(): open_basedir restriction in effect. File(%s/test/ok/symlink.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-*** Finished testing open_basedir configuration [readlink] ***
-
diff --git a/ext/standard/tests/file/open_basedir_realpath.phpt b/ext/standard/tests/file/open_basedir_realpath.phpt
deleted file mode 100644
index 8cae890e9..000000000
--- a/ext/standard/tests/file/open_basedir_realpath.phpt
+++ /dev/null
@@ -1,61 +0,0 @@
---TEST--
-Test open_basedir configuration
---SKIPIF--
-<?php
-if (substr(PHP_OS, 0, 3) != 'WIN') {
- die('skip only run on Windows');
-}
-?>
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir("realpath");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [realpath] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: realpath(): open_basedir restriction in effect. File(%s\test\bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: realpath(): open_basedir restriction in effect. File(%s\test\bad\bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: realpath(): open_basedir restriction in effect. File(%s\test) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: realpath(): open_basedir restriction in effect. File(%s\test) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: realpath(): open_basedir restriction in effect. File(%s\) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: realpath(): open_basedir restriction in effect. File(%s\test\bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: realpath(): open_basedir restriction in effect. File(%s\test\bad\bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: realpath(): open_basedir restriction in effect. File(%s\test\bad\bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: realpath(): open_basedir restriction in effect. File(%s\test) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-string(%d) "%s\test\ok"
-string(%d) "%s\test\ok\ok.txt"
-string(%d) "%s\test\ok\ok.txt"
-string(%d) "%s\test\ok\ok.txt"
-string(%d) "%s\test\ok\ok.txt"
-*** Finished testing open_basedir configuration [realpath] ***
-
diff --git a/ext/standard/tests/file/open_basedir_rename.phpt b/ext/standard/tests/file/open_basedir_rename.phpt
deleted file mode 100644
index 428e7a070..000000000
--- a/ext/standard/tests/file/open_basedir_rename.phpt
+++ /dev/null
@@ -1,47 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir_before("rename");
-$directory = dirname(__FILE__);
-
-var_dump(rename("../bad/bad.txt", "rename.txt"));
-var_dump(rename(".././bad/bad.txt", "rename.txt"));
-var_dump(rename("../bad/../bad/bad.txt", "rename.txt"));
-var_dump(rename("./.././bad/bad.txt", "rename.txt"));
-var_dump(rename($directory."/test/bad/bad.txt", "rename.txt"));
-
-test_open_basedir_after("rename");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [rename] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: rename(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: rename(): open_basedir restriction in effect. File(.././bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: rename(): open_basedir restriction in effect. File(../bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: rename(): open_basedir restriction in effect. File(./.././bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: rename(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-*** Finished testing open_basedir configuration [rename] ***
-
diff --git a/ext/standard/tests/file/open_basedir_rmdir.phpt b/ext/standard/tests/file/open_basedir_rmdir.phpt
deleted file mode 100644
index b4d61f8b7..000000000
--- a/ext/standard/tests/file/open_basedir_rmdir.phpt
+++ /dev/null
@@ -1,47 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir_before("rmdir");
-$directory = dirname(__FILE__);
-
-var_dump(rmdir("../bad"));
-var_dump(rmdir(".././bad"));
-var_dump(rmdir("../bad/../bad"));
-var_dump(rmdir("./.././bad"));
-var_dump(rmdir($directory."/test/bad"));
-
-test_open_basedir_after("rmdir");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [rmdir] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: rmdir(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: rmdir(): open_basedir restriction in effect. File(.././bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: rmdir(): open_basedir restriction in effect. File(../bad/../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: rmdir(): open_basedir restriction in effect. File(./.././bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: rmdir(): open_basedir restriction in effect. File(%s/test/bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-*** Finished testing open_basedir configuration [rmdir] ***
-
diff --git a/ext/standard/tests/file/open_basedir_stat.phpt b/ext/standard/tests/file/open_basedir_stat.phpt
deleted file mode 100644
index b80b854d6..000000000
--- a/ext/standard/tests/file/open_basedir_stat.phpt
+++ /dev/null
@@ -1,55 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir_array("stat");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [stat] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: stat(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: stat(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: stat(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: stat(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: stat(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: stat(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: stat(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: stat(): open_basedir restriction in effect. File(%s/test/bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: stat(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-*** Finished testing open_basedir configuration [stat] ***
-
diff --git a/ext/standard/tests/file/open_basedir_symlink.phpt b/ext/standard/tests/file/open_basedir_symlink.phpt
deleted file mode 100644
index 3b3f1d571..000000000
--- a/ext/standard/tests/file/open_basedir_symlink.phpt
+++ /dev/null
@@ -1,78 +0,0 @@
---TEST--
-Test open_basedir configuration
---SKIPIF--
-<?php
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip no symlinks on Windows');
-}
-?>
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir_before("symlink");
-$directory = dirname(__FILE__);
-
-$target = ($directory."/test/ok/ok.txt");
-var_dump(symlink($target, "../bad/symlink.txt"));
-var_dump(symlink($target, "../symlink.txt"));
-var_dump(symlink($target, "../bad/./symlink.txt"));
-var_dump(symlink($target, "./.././symlink.txt"));
-
-$symlink = ($directory."/test/ok/symlink.txt");
-var_dump(symlink("../bad/bad.txt", $symlink));
-var_dump(symlink("../bad", $symlink));
-var_dump(symlink("../bad/./bad.txt", $symlink));
-var_dump(symlink("../bad/bad.txt", $symlink));
-var_dump(symlink("./.././bad", $symlink));
-
-$target = ($directory."/test/ok/ok.txt");
-
-var_dump(symlink($target, $symlink));
-var_dump(unlink($symlink));
-test_open_basedir_after("symlink");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [symlink] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: symlink(): open_basedir restriction in effect. File(%s/test/bad/symlink.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: symlink(): open_basedir restriction in effect. File(%s/test/symlink.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: symlink(): open_basedir restriction in effect. File(%s/test/bad/symlink.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: symlink(): open_basedir restriction in effect. File(%s/test/symlink.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: symlink(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: symlink(): open_basedir restriction in effect. File(%s/test/bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: symlink(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: symlink(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: symlink(): open_basedir restriction in effect. File(%s/test/bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-bool(true)
-bool(true)
-*** Finished testing open_basedir configuration [symlink] ***
-
diff --git a/ext/standard/tests/file/open_basedir_tempnam.phpt b/ext/standard/tests/file/open_basedir_tempnam.phpt
deleted file mode 100644
index 247ac88d5..000000000
--- a/ext/standard/tests/file/open_basedir_tempnam.phpt
+++ /dev/null
@@ -1,57 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir_before("tempnam");
-$directory = dirname(__FILE__);
-
-var_dump(tempnam("../bad", "test"));
-var_dump(tempnam("..", "test"));
-var_dump(tempnam("../", "test"));
-var_dump(tempnam("/", "test"));
-var_dump(tempnam("../bad/.", "test"));
-var_dump(tempnam("./../.", "test"));
-
-$file = tempnam($directory."/test/ok", "test");
-var_dump($file);
-var_dump(unlink($file));
-
-test_open_basedir_after("tempnam");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [tempnam] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: tempnam(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: tempnam(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: tempnam(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: tempnam(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: tempnam(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: tempnam(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-string(%d) "%s"
-bool(true)
-*** Finished testing open_basedir configuration [tempnam] ***
-
diff --git a/ext/standard/tests/file/open_basedir_touch.phpt b/ext/standard/tests/file/open_basedir_touch.phpt
deleted file mode 100644
index b0a5aee61..000000000
--- a/ext/standard/tests/file/open_basedir_touch.phpt
+++ /dev/null
@@ -1,70 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir_before("touch");
-$directory = dirname(__FILE__);
-
-var_dump(touch("../bad"));
-var_dump(touch("../bad/bad.txt"));
-var_dump(touch(".."));
-var_dump(touch("../"));
-var_dump(touch("/"));
-var_dump(touch("../bad/."));
-var_dump(touch("../bad/./bad.txt"));
-var_dump(touch("./../."));
-
-var_dump(touch($directory."/test/ok/ok.txt"));
-var_dump(touch("./ok.txt"));
-var_dump(touch("ok.txt"));
-var_dump(touch("../ok/ok.txt"));
-var_dump(touch("../ok/./ok.txt"));
-
-test_open_basedir_after("touch");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [touch] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: touch(): open_basedir restriction in effect. File(../bad) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: touch(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: touch(): open_basedir restriction in effect. File(..) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: touch(): open_basedir restriction in effect. File(../) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: touch(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: touch(): open_basedir restriction in effect. File(../bad/.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: touch(): open_basedir restriction in effect. File(../bad/./bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: touch(): open_basedir restriction in effect. File(./../.) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-*** Finished testing open_basedir configuration [touch] ***
-
diff --git a/ext/standard/tests/file/open_basedir_unlink.phpt b/ext/standard/tests/file/open_basedir_unlink.phpt
deleted file mode 100644
index 75b0f3f4a..000000000
--- a/ext/standard/tests/file/open_basedir_unlink.phpt
+++ /dev/null
@@ -1,47 +0,0 @@
---TEST--
-Test open_basedir configuration
---INI--
-open_basedir=.
---FILE--
-<?php
-require_once "open_basedir.inc";
-test_open_basedir_before("unlink");
-$directory = dirname(__FILE__);
-
-var_dump(unlink("../bad/bad.txt"));
-var_dump(unlink(".././bad/bad.txt"));
-var_dump(unlink("../bad/../bad/bad.txt"));
-var_dump(unlink("./.././bad/bad.txt"));
-var_dump(unlink($directory."/test/bad/bad.txt"));
-
-test_open_basedir_after("unlink");
-?>
---CLEAN--
-<?php
-require_once "open_basedir.inc";
-delete_directories();
-?>
---EXPECTF--
-*** Testing open_basedir configuration [unlink] ***
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-
-Warning: unlink(): open_basedir restriction in effect. File(../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: unlink(): open_basedir restriction in effect. File(.././bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: unlink(): open_basedir restriction in effect. File(../bad/../bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: unlink(): open_basedir restriction in effect. File(./.././bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-
-Warning: unlink(): open_basedir restriction in effect. File(%s/test/bad/bad.txt) is not within the allowed path(s): (.) in %s on line %d
-bool(false)
-*** Finished testing open_basedir configuration [unlink] ***
-
diff --git a/ext/standard/tests/file/parse_ini_file_error.phpt b/ext/standard/tests/file/parse_ini_file_error.phpt
index 65a6ac1d8..309a00f44 100644
--- a/ext/standard/tests/file/parse_ini_file_error.phpt
+++ b/ext/standard/tests/file/parse_ini_file_error.phpt
@@ -8,10 +8,6 @@ Test parse_ini_file() function : error conditions
* Alias to functions:
*/
-/*
- * add a comment here to say what the test is supposed to do
- */
-
echo "*** Testing parse_ini_file() : error conditions ***\n";
// Zero arguments
@@ -47,6 +43,5 @@ NULL
-- Testing parse_ini_file() function with a non-existent file --
Warning: parse_ini_file(%s): failed to open stream: No such file or directory in %s on line %d
-array(0) {
-}
+bool(false)
Done
diff --git a/ext/standard/tests/file/parse_ini_file_variation1.phpt b/ext/standard/tests/file/parse_ini_file_variation1.phpt
new file mode 100644
index 000000000..a24bc1c05
--- /dev/null
+++ b/ext/standard/tests/file/parse_ini_file_variation1.phpt
@@ -0,0 +1,68 @@
+--TEST--
+Test parse_ini_file() function : variation: identical properties and values are not referenced.
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : array parse_ini_file(string filename [, bool process_sections])
+ * Description: Parse configuration file
+ * Source code: ext/standard/basic_functions.c
+ * Alias to functions:
+ */
+
+echo "*** Testing parse_ini_file() : variation ***\n";
+$output_file = __FILE__.".ini";
+$iniFile = <<<FILE
+[section1]
+value1=original
+value2=original
+[section2]
+value1=original
+value2=different
+FILE;
+
+file_put_contents($output_file, $iniFile);
+
+$a = parse_ini_file($output_file, true);
+var_dump($a);
+$a['section1']['value1'] = 'changed';
+var_dump($a);
+
+unlink($output_file);
+?>
+===DONE===
+--EXPECT--
+*** Testing parse_ini_file() : variation ***
+array(2) {
+ ["section1"]=>
+ array(2) {
+ ["value1"]=>
+ string(8) "original"
+ ["value2"]=>
+ string(8) "original"
+ }
+ ["section2"]=>
+ array(2) {
+ ["value1"]=>
+ string(8) "original"
+ ["value2"]=>
+ string(9) "different"
+ }
+}
+array(2) {
+ ["section1"]=>
+ array(2) {
+ ["value1"]=>
+ string(7) "changed"
+ ["value2"]=>
+ string(8) "original"
+ }
+ ["section2"]=>
+ array(2) {
+ ["value1"]=>
+ string(8) "original"
+ ["value2"]=>
+ string(9) "different"
+ }
+}
+===DONE===
diff --git a/ext/standard/tests/file/parse_ini_file_variation2.phpt b/ext/standard/tests/file/parse_ini_file_variation2.phpt
new file mode 100644
index 000000000..20ad6bb06
--- /dev/null
+++ b/ext/standard/tests/file/parse_ini_file_variation2.phpt
@@ -0,0 +1,111 @@
+--TEST--
+Test parse_ini_file() function : variation: handling different boolean values
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : array parse_ini_file(string filename [, bool process_sections])
+ * Description: Parse configuration file
+ * Source code: ext/standard/basic_functions.c
+ * Alias to functions:
+ */
+
+echo "*** Testing parse_ini_file() : variation ***\n";
+$output_file = __FILE__.".ini";
+$iniFile = <<<FILE
+[section1]
+value1=on
+value2=off
+[section2]
+value1=true
+value2=false
+[section3]
+value1=yes
+value2=no
+[section4]
+value1=null
+value2=
+
+[section5]
+value1="on"
+value2="off"
+[section6]
+value1="true"
+value2="false"
+[section7]
+value1="yes"
+value2="no"
+[section8]
+value1="null"
+value2=""
+
+FILE;
+
+file_put_contents($output_file, $iniFile);
+
+$a = parse_ini_file($output_file, true);
+var_dump($a);
+unlink($output_file);
+?>
+===DONE===
+--EXPECT--
+*** Testing parse_ini_file() : variation ***
+array(8) {
+ ["section1"]=>
+ array(2) {
+ ["value1"]=>
+ string(1) "1"
+ ["value2"]=>
+ string(0) ""
+ }
+ ["section2"]=>
+ array(2) {
+ ["value1"]=>
+ string(1) "1"
+ ["value2"]=>
+ string(0) ""
+ }
+ ["section3"]=>
+ array(2) {
+ ["value1"]=>
+ string(1) "1"
+ ["value2"]=>
+ string(0) ""
+ }
+ ["section4"]=>
+ array(2) {
+ ["value1"]=>
+ string(0) ""
+ ["value2"]=>
+ string(0) ""
+ }
+ ["section5"]=>
+ array(2) {
+ ["value1"]=>
+ string(2) "on"
+ ["value2"]=>
+ string(3) "off"
+ }
+ ["section6"]=>
+ array(2) {
+ ["value1"]=>
+ string(4) "true"
+ ["value2"]=>
+ string(5) "false"
+ }
+ ["section7"]=>
+ array(2) {
+ ["value1"]=>
+ string(3) "yes"
+ ["value2"]=>
+ string(2) "no"
+ }
+ ["section8"]=>
+ array(2) {
+ ["value1"]=>
+ string(4) "null"
+ ["value2"]=>
+ string(0) ""
+ }
+}
+===DONE===
diff --git a/ext/standard/tests/file/parse_ini_file_variation3.phpt b/ext/standard/tests/file/parse_ini_file_variation3.phpt
new file mode 100644
index 000000000..c1245a91c
--- /dev/null
+++ b/ext/standard/tests/file/parse_ini_file_variation3.phpt
@@ -0,0 +1,104 @@
+--TEST--
+Test parse_ini_file() function : variation: include path searching
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : array parse_ini_file(string filename [, bool process_sections])
+ * Description: Parse configuration file
+ * Source code: ext/standard/basic_functions.c
+ * Alias to functions:
+ */
+
+echo "*** Testing parse_ini_file() : variation ***\n";
+$pwd = getcwd();
+$f = "parse_ini_file_variation3";
+$dir1 = $pwd."/".$f.".dir1";
+$dir2 = $pwd."/".$f.".dir2";
+$dir3 = $pwd."/".$f.".dir3";
+$iniFile = "php.ini";
+
+$newdirs = array($dir1, $dir2, $dir3);
+$pathSep = ":";
+$newIncludePath = "";
+if(substr(PHP_OS, 0, 3) == 'WIN' ) {
+ $pathSep = ";";
+}
+foreach($newdirs as $newdir) {
+ mkdir($newdir);
+ $newIncludePath .= $newdir.$pathSep;
+}
+
+set_include_path($newIncludePath);
+$path = get_include_path();
+echo "New include path is : " . $path . "\n";
+
+$output_file = $dir2."/".$iniFile;
+$iniContent = <<<FILE
+error_reporting = E_ALL
+display_errors = On
+display_startup_errors = Off
+log_errors = Off
+log_errors_max_len = 1024
+ignore_repeated_errors = Off
+ignore_repeated_source = Off
+report_memleaks = On
+track_errors = Off
+docref_root = "/phpmanual/"
+docref_ext = .html
+
+FILE;
+
+file_put_contents($output_file, $iniContent);
+var_dump(parse_ini_file($iniFile));
+
+?>
+===Done===
+--CLEAN--
+<?php
+
+$pwd = getcwd();
+$f = "parse_ini_file_variation3";
+$iniFile = "php.ini";
+
+$dir1 = $pwd."/".$f.".dir1";
+$dir2 = $pwd."/".$f.".dir2";
+$dir3 = $pwd."/".$f.".dir3";
+$newdirs = array($dir1, $dir2, $dir3);
+$output_file = $dir2."/".$iniFile;
+
+// Tidy up after test
+unlink($output_file);
+foreach($newdirs as $newdir) {
+ rmdir($newdir);
+}
+
+?>
+--EXPECTF--
+*** Testing parse_ini_file() : variation ***
+New include path is : %sparse_ini_file_variation3.dir1%sparse_ini_file_variation3.dir2%sparse_ini_file_variation3.dir3%S
+array(11) {
+ ["error_reporting"]=>
+ string(4) "6143"
+ ["display_errors"]=>
+ string(1) "1"
+ ["display_startup_errors"]=>
+ string(0) ""
+ ["log_errors"]=>
+ string(0) ""
+ ["log_errors_max_len"]=>
+ string(4) "1024"
+ ["ignore_repeated_errors"]=>
+ string(0) ""
+ ["ignore_repeated_source"]=>
+ string(0) ""
+ ["report_memleaks"]=>
+ string(1) "1"
+ ["track_errors"]=>
+ string(0) ""
+ ["docref_root"]=>
+ string(11) "/phpmanual/"
+ ["docref_ext"]=>
+ string(5) ".html"
+}
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/file/parse_ini_file_variation4.phpt b/ext/standard/tests/file/parse_ini_file_variation4.phpt
new file mode 100644
index 000000000..ec443e95b
--- /dev/null
+++ b/ext/standard/tests/file/parse_ini_file_variation4.phpt
@@ -0,0 +1,216 @@
+--TEST--
+Test parse_ini_file() function : usage variation
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : array parse_ini_file(string filename [, bool process_sections])
+ * Description: Parse configuration file
+ * Source code: ext/standard/basic_functions.c
+ * Alias to functions:
+ */
+
+echo "*** Testing parse_ini_file() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$process_sections = false;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for filename
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( parse_ini_file($value, $process_sections) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing parse_ini_file() : usage variation ***
+
+--int 0--
+Error: 2 - parse_ini_file(0): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--int 1--
+Error: 2 - parse_ini_file(1): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - parse_ini_file(12345): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - parse_ini_file(-2345): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - parse_ini_file(10.5): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - parse_ini_file(-10.5): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - parse_ini_file(123456789000): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - parse_ini_file(-123456789000): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--float .5--
+Error: 2 - parse_ini_file(0.5): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - parse_ini_file(Array): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - parse_ini_file(Array): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - parse_ini_file(Array): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - parse_ini_file(Array): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - parse_ini_file(): Filename cannot be empty, %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - parse_ini_file(): Filename cannot be empty, %s(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - parse_ini_file(1): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - parse_ini_file(): Filename cannot be empty, %s(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - parse_ini_file(1): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - parse_ini_file(): Filename cannot be empty, %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - parse_ini_file(): Filename cannot be empty, %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - parse_ini_file(): Filename cannot be empty, %s(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - parse_ini_file(Class A object): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+Error: 2 - parse_ini_file(Object): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - parse_ini_file(): Filename cannot be empty, %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - parse_ini_file(): Filename cannot be empty, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/file/parse_ini_file_variation5.phpt b/ext/standard/tests/file/parse_ini_file_variation5.phpt
new file mode 100644
index 000000000..206969bda
--- /dev/null
+++ b/ext/standard/tests/file/parse_ini_file_variation5.phpt
@@ -0,0 +1,265 @@
+--TEST--
+Test parse_ini_file() function : usage variation
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : array parse_ini_file(string filename [, bool process_sections])
+ * Description: Parse configuration file
+ * Source code: ext/standard/basic_functions.c
+ * Alias to functions:
+ */
+
+echo "*** Testing parse_ini_file() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$filename = __FILE__."ParseIniFileVar5.ini";
+$contents = "a=test";
+@unlink($filename);
+file_put_contents($filename, $contents);
+
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for process_sections
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( parse_ini_file($filename, $value) );
+};
+
+unlink($filename);
+?>
+===DONE===
+--EXPECTF--
+*** Testing parse_ini_file() : usage variation ***
+
+--int 0--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--int 1--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--int 12345--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--int -12345--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--float 10.5--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--float -10.5--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--float 12.3456789000e10--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--float -12.3456789000e10--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--float .5--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--empty array--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--int indexed array--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--associative array--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--nested arrays--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--uppercase NULL--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--lowercase null--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--empty string DQ--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--empty string SQ--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--string DQ--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--string SQ--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--mixed case string--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--heredoc--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--instance of classWithToString--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--instance of classWithoutToString--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--undefined var--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+--unset var--
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+===DONE===
diff --git a/ext/standard/tests/file/parse_ini_file_variation6-win32.phpt b/ext/standard/tests/file/parse_ini_file_variation6-win32.phpt
new file mode 100644
index 000000000..6dfbee990
--- /dev/null
+++ b/ext/standard/tests/file/parse_ini_file_variation6-win32.phpt
@@ -0,0 +1,143 @@
+--TEST--
+Test parse_ini_file() function : variation - various absolute and relative paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Only run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : array parse_ini_file(string filename [, bool process_sections])
+ * Description: Parse configuration file
+ * Source code: ext/standard/basic_functions.c
+ * Alias to functions:
+ */
+
+echo "*** Testing parse_ini_file() : variation ***\n";
+$mainDir = "parseIniFileVar6.dir";
+$subDir = "parseIniFileVar6Sub";
+$absMainDir = dirname(__FILE__)."\\".$mainDir;
+mkdir($absMainDir);
+$absSubDir = $absMainDir."\\".$subDir;
+mkdir($absSubDir);
+
+$old_dir_path = getcwd();
+chdir(dirname(__FILE__));
+$unixifiedDir = '/'.substr(str_replace('\\','/',$absSubDir),3);
+
+$allDirs = array(
+ // absolute paths
+ "$absSubDir\\",
+ "$absSubDir\\..\\".$subDir,
+ "$absSubDir\\\\..\\.\\".$subDir,
+ "$absSubDir\\..\\..\\".$mainDir."\\.\\".$subDir,
+ "$absSubDir\\..\\\\\\".$subDir."\\\\..\\\\..\\".$subDir,
+ "$absSubDir\\BADDIR",
+
+ // relative paths
+ $mainDir."\\".$subDir,
+ $mainDir."\\\\".$subDir,
+ $mainDir."\\\\\\".$subDir,
+ ".\\".$mainDir."\\..\\".$mainDir."\\".$subDir,
+ "BADDIR",
+
+ // unixifed path
+ $unixifiedDir,
+);
+
+$filename = 'ParseIniFileVar6.ini';
+$content="a=test";
+$absFile = $absSubDir.'/'.$filename;
+$h = fopen($absFile,"w");
+fwrite($h, $content);
+fclose($h);
+
+for($i = 0; $i<count($allDirs); $i++) {
+ $j = $i+1;
+ $dir = $allDirs[$i];
+ echo "\n-- Iteration $j --\n";
+ var_dump(parse_ini_file($dir."\\".$filename));
+}
+
+unlink($absFile);
+chdir($old_dir_path);
+rmdir($absSubDir);
+rmdir($absMainDir);
+
+echo "\n*** Done ***\n";
+?>
+--EXPECTF--
+*** Testing parse_ini_file() : variation ***
+
+-- Iteration 1 --
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+-- Iteration 2 --
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+-- Iteration 3 --
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+-- Iteration 4 --
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+-- Iteration 5 --
+
+Warning: parse_ini_file(%sparseIniFileVar6.dir\parseIniFileVar6Sub\..\\\parseIniFileVar6Sub\\..\\..\parseIniFileVar6Sub\ParseIniFileVar6.ini): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Warning: parse_ini_file(%sparseIniFileVar6.dir\parseIniFileVar6Sub\BADDIR\ParseIniFileVar6.ini): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+-- Iteration 8 --
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+-- Iteration 9 --
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+-- Iteration 10 --
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+-- Iteration 11 --
+
+Warning: parse_ini_file(BADDIR\ParseIniFileVar6.ini): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+-- Iteration 12 --
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+*** Done *** \ No newline at end of file
diff --git a/ext/standard/tests/file/parse_ini_file_variation6.phpt b/ext/standard/tests/file/parse_ini_file_variation6.phpt
new file mode 100644
index 000000000..e9844e905
--- /dev/null
+++ b/ext/standard/tests/file/parse_ini_file_variation6.phpt
@@ -0,0 +1,129 @@
+--TEST--
+Test parse_ini_file() function : variation - various absolute and relative paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : array parse_ini_file(string filename [, bool process_sections])
+ * Description: Parse configuration file
+ * Source code: ext/standard/basic_functions.c
+ * Alias to functions:
+ */
+
+echo "*** Testing parse_ini_file() : variation ***\n";
+$mainDir = "parseIniFileVar6.dir";
+$subDir = "parseIniFileVar6Sub";
+$absMainDir = dirname(__FILE__)."/".$mainDir;
+mkdir($absMainDir);
+$absSubDir = $absMainDir."/".$subDir;
+mkdir($absSubDir);
+
+$old_dir_path = getcwd();
+chdir(dirname(__FILE__));
+
+$allDirs = array(
+ // absolute paths
+ "$absSubDir/",
+ "$absSubDir/../".$subDir,
+ "$absSubDir//.././".$subDir,
+ "$absSubDir/../../".$mainDir."/./".$subDir,
+ "$absSubDir/..///".$subDir."//..//../".$subDir,
+ "$absSubDir/BADDIR",
+
+ // relative paths
+ $mainDir."/".$subDir,
+ $mainDir."//".$subDir,
+ $mainDir."///".$subDir,
+ "./".$mainDir."/../".$mainDir."/".$subDir,
+ "BADDIR",
+
+);
+
+$filename = 'ParseIniFileVar6.ini';
+$content="a=test";
+$absFile = $absSubDir.'/'.$filename;
+$h = fopen($absFile,"w");
+fwrite($h, $content);
+fclose($h);
+
+for($i = 0; $i<count($allDirs); $i++) {
+ $j = $i+1;
+ $dir = $allDirs[$i];
+ echo "\n-- Iteration $j --\n";
+ var_dump(parse_ini_file($dir."/".$filename));
+}
+
+unlink($absFile);
+chdir($old_dir_path);
+rmdir($absSubDir);
+rmdir($absMainDir);
+
+echo "\n*** Done ***\n";
+?>
+--EXPECTF--
+*** Testing parse_ini_file() : variation ***
+
+-- Iteration 1 --
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+-- Iteration 2 --
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+-- Iteration 3 --
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+-- Iteration 4 --
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+-- Iteration 5 --
+
+Warning: parse_ini_file(%sparseIniFileVar6.dir/parseIniFileVar6Sub/..///parseIniFileVar6Sub//..//../parseIniFileVar6Sub/ParseIniFileVar6.ini): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Warning: parse_ini_file(%sparseIniFileVar6.dir/parseIniFileVar6Sub/BADDIR/ParseIniFileVar6.ini): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+-- Iteration 8 --
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+-- Iteration 9 --
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+-- Iteration 10 --
+array(1) {
+ ["a"]=>
+ string(4) "test"
+}
+
+-- Iteration 11 --
+
+Warning: parse_ini_file(BADDIR/ParseIniFileVar6.ini): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+*** Done *** \ No newline at end of file
diff --git a/ext/standard/tests/file/pathinfo_basic1-win32.phpt b/ext/standard/tests/file/pathinfo_basic1-win32.phpt
new file mode 100644
index 000000000..9e84b9979
--- /dev/null
+++ b/ext/standard/tests/file/pathinfo_basic1-win32.phpt
@@ -0,0 +1,609 @@
+--TEST--
+Test pathinfo() function: basic functionality
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Only valid for Windows");
+?>
+--FILE--
+<?php
+/* Prototype: mixed pathinfo ( string $path [, int $options] );
+ Description: Returns information about a file path
+*/
+
+echo "*** Testing basic functions of pathinfo() ***\n";
+
+$paths = array (
+ '',
+ ' ',
+ 'c:',
+ 'c:\\',
+ 'c:/',
+ 'afile',
+ 'c:\test\adir',
+ 'c:\test\adir\\',
+ '/usr/include/arpa',
+ '/usr/include/arpa/',
+ 'usr/include/arpa',
+ 'usr/include/arpa/',
+ 'c:\test\afile',
+ 'c:\\test\\afile',
+ 'c://test//afile',
+ 'c:\test\afile\\',
+ 'c:\test\prog.exe',
+ 'c:\\test\\prog.exe',
+ 'c:/test/prog.exe',
+ '/usr/include/arpa/inet.h',
+ '//usr/include//arpa/inet.h',
+ '\\',
+ '\\\\',
+ '/',
+ '//',
+ '///',
+ '/usr/include/arpa/inet.h',
+ 'c:\windows/system32\drivers/etc\hosts',
+ '/usr\include/arpa\inet.h',
+ ' c:\test\adir\afile.txt',
+ 'c:\test\adir\afile.txt ',
+ ' c:\test\adir\afile.txt ',
+ ' /usr/include/arpa/inet.h',
+ '/usr/include/arpa/inet.h ',
+ ' /usr/include/arpa/inet.h ',
+ ' c:',
+ ' c:\test\adir\afile.txt',
+ '/usr',
+ '/usr/'
+);
+
+$counter = 1;
+/* loop through $paths to test each $path in the above array */
+foreach($paths as $path) {
+ echo "-- Iteration $counter --\n";
+ var_dump( pathinfo($path, PATHINFO_DIRNAME) );
+ var_dump( pathinfo($path, PATHINFO_BASENAME) );
+ var_dump( pathinfo($path, PATHINFO_EXTENSION) );
+ var_dump( pathinfo($path, PATHINFO_FILENAME) );
+ var_dump( pathinfo($path) );
+ $counter++;
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+*** Testing basic functions of pathinfo() ***
+-- Iteration 1 --
+string(0) ""
+string(0) ""
+string(0) ""
+string(0) ""
+array(2) {
+ ["basename"]=>
+ string(0) ""
+ ["filename"]=>
+ string(0) ""
+}
+-- Iteration 2 --
+string(1) "."
+string(1) " "
+string(0) ""
+string(1) " "
+array(3) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(1) " "
+ ["filename"]=>
+ string(1) " "
+}
+-- Iteration 3 --
+string(2) "c:"
+string(2) "c:"
+string(0) ""
+string(2) "c:"
+array(3) {
+ ["dirname"]=>
+ string(2) "c:"
+ ["basename"]=>
+ string(2) "c:"
+ ["filename"]=>
+ string(2) "c:"
+}
+-- Iteration 4 --
+string(3) "c:\"
+string(2) "c:"
+string(0) ""
+string(2) "c:"
+array(3) {
+ ["dirname"]=>
+ string(3) "c:\"
+ ["basename"]=>
+ string(2) "c:"
+ ["filename"]=>
+ string(2) "c:"
+}
+-- Iteration 5 --
+string(3) "c:\"
+string(2) "c:"
+string(0) ""
+string(2) "c:"
+array(3) {
+ ["dirname"]=>
+ string(3) "c:\"
+ ["basename"]=>
+ string(2) "c:"
+ ["filename"]=>
+ string(2) "c:"
+}
+-- Iteration 6 --
+string(1) "."
+string(5) "afile"
+string(0) ""
+string(5) "afile"
+array(3) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(5) "afile"
+ ["filename"]=>
+ string(5) "afile"
+}
+-- Iteration 7 --
+string(7) "c:\test"
+string(4) "adir"
+string(0) ""
+string(4) "adir"
+array(3) {
+ ["dirname"]=>
+ string(7) "c:\test"
+ ["basename"]=>
+ string(4) "adir"
+ ["filename"]=>
+ string(4) "adir"
+}
+-- Iteration 8 --
+string(7) "c:\test"
+string(4) "adir"
+string(0) ""
+string(4) "adir"
+array(3) {
+ ["dirname"]=>
+ string(7) "c:\test"
+ ["basename"]=>
+ string(4) "adir"
+ ["filename"]=>
+ string(4) "adir"
+}
+-- Iteration 9 --
+string(12) "/usr/include"
+string(4) "arpa"
+string(0) ""
+string(4) "arpa"
+array(3) {
+ ["dirname"]=>
+ string(12) "/usr/include"
+ ["basename"]=>
+ string(4) "arpa"
+ ["filename"]=>
+ string(4) "arpa"
+}
+-- Iteration 10 --
+string(12) "/usr/include"
+string(4) "arpa"
+string(0) ""
+string(4) "arpa"
+array(3) {
+ ["dirname"]=>
+ string(12) "/usr/include"
+ ["basename"]=>
+ string(4) "arpa"
+ ["filename"]=>
+ string(4) "arpa"
+}
+-- Iteration 11 --
+string(11) "usr/include"
+string(4) "arpa"
+string(0) ""
+string(4) "arpa"
+array(3) {
+ ["dirname"]=>
+ string(11) "usr/include"
+ ["basename"]=>
+ string(4) "arpa"
+ ["filename"]=>
+ string(4) "arpa"
+}
+-- Iteration 12 --
+string(11) "usr/include"
+string(4) "arpa"
+string(0) ""
+string(4) "arpa"
+array(3) {
+ ["dirname"]=>
+ string(11) "usr/include"
+ ["basename"]=>
+ string(4) "arpa"
+ ["filename"]=>
+ string(4) "arpa"
+}
+-- Iteration 13 --
+string(7) "c:\test"
+string(5) "afile"
+string(0) ""
+string(5) "afile"
+array(3) {
+ ["dirname"]=>
+ string(7) "c:\test"
+ ["basename"]=>
+ string(5) "afile"
+ ["filename"]=>
+ string(5) "afile"
+}
+-- Iteration 14 --
+string(7) "c:\test"
+string(5) "afile"
+string(0) ""
+string(5) "afile"
+array(3) {
+ ["dirname"]=>
+ string(7) "c:\test"
+ ["basename"]=>
+ string(5) "afile"
+ ["filename"]=>
+ string(5) "afile"
+}
+-- Iteration 15 --
+string(8) "c://test"
+string(5) "afile"
+string(0) ""
+string(5) "afile"
+array(3) {
+ ["dirname"]=>
+ string(8) "c://test"
+ ["basename"]=>
+ string(5) "afile"
+ ["filename"]=>
+ string(5) "afile"
+}
+-- Iteration 16 --
+string(7) "c:\test"
+string(5) "afile"
+string(0) ""
+string(5) "afile"
+array(3) {
+ ["dirname"]=>
+ string(7) "c:\test"
+ ["basename"]=>
+ string(5) "afile"
+ ["filename"]=>
+ string(5) "afile"
+}
+-- Iteration 17 --
+string(7) "c:\test"
+string(8) "prog.exe"
+string(3) "exe"
+string(4) "prog"
+array(4) {
+ ["dirname"]=>
+ string(7) "c:\test"
+ ["basename"]=>
+ string(8) "prog.exe"
+ ["extension"]=>
+ string(3) "exe"
+ ["filename"]=>
+ string(4) "prog"
+}
+-- Iteration 18 --
+string(7) "c:\test"
+string(8) "prog.exe"
+string(3) "exe"
+string(4) "prog"
+array(4) {
+ ["dirname"]=>
+ string(7) "c:\test"
+ ["basename"]=>
+ string(8) "prog.exe"
+ ["extension"]=>
+ string(3) "exe"
+ ["filename"]=>
+ string(4) "prog"
+}
+-- Iteration 19 --
+string(7) "c:/test"
+string(8) "prog.exe"
+string(3) "exe"
+string(4) "prog"
+array(4) {
+ ["dirname"]=>
+ string(7) "c:/test"
+ ["basename"]=>
+ string(8) "prog.exe"
+ ["extension"]=>
+ string(3) "exe"
+ ["filename"]=>
+ string(4) "prog"
+}
+-- Iteration 20 --
+string(17) "/usr/include/arpa"
+string(6) "inet.h"
+string(1) "h"
+string(4) "inet"
+array(4) {
+ ["dirname"]=>
+ string(17) "/usr/include/arpa"
+ ["basename"]=>
+ string(6) "inet.h"
+ ["extension"]=>
+ string(1) "h"
+ ["filename"]=>
+ string(4) "inet"
+}
+-- Iteration 21 --
+string(19) "//usr/include//arpa"
+string(6) "inet.h"
+string(1) "h"
+string(4) "inet"
+array(4) {
+ ["dirname"]=>
+ string(19) "//usr/include//arpa"
+ ["basename"]=>
+ string(6) "inet.h"
+ ["extension"]=>
+ string(1) "h"
+ ["filename"]=>
+ string(4) "inet"
+}
+-- Iteration 22 --
+string(1) "\"
+string(0) ""
+string(0) ""
+string(0) ""
+array(3) {
+ ["dirname"]=>
+ string(1) "\"
+ ["basename"]=>
+ string(0) ""
+ ["filename"]=>
+ string(0) ""
+}
+-- Iteration 23 --
+string(1) "\"
+string(0) ""
+string(0) ""
+string(0) ""
+array(3) {
+ ["dirname"]=>
+ string(1) "\"
+ ["basename"]=>
+ string(0) ""
+ ["filename"]=>
+ string(0) ""
+}
+-- Iteration 24 --
+string(1) "\"
+string(0) ""
+string(0) ""
+string(0) ""
+array(3) {
+ ["dirname"]=>
+ string(1) "\"
+ ["basename"]=>
+ string(0) ""
+ ["filename"]=>
+ string(0) ""
+}
+-- Iteration 25 --
+string(1) "\"
+string(0) ""
+string(0) ""
+string(0) ""
+array(3) {
+ ["dirname"]=>
+ string(1) "\"
+ ["basename"]=>
+ string(0) ""
+ ["filename"]=>
+ string(0) ""
+}
+-- Iteration 26 --
+string(1) "\"
+string(0) ""
+string(0) ""
+string(0) ""
+array(3) {
+ ["dirname"]=>
+ string(1) "\"
+ ["basename"]=>
+ string(0) ""
+ ["filename"]=>
+ string(0) ""
+}
+-- Iteration 27 --
+string(17) "/usr/include/arpa"
+string(6) "inet.h"
+string(1) "h"
+string(4) "inet"
+array(4) {
+ ["dirname"]=>
+ string(17) "/usr/include/arpa"
+ ["basename"]=>
+ string(6) "inet.h"
+ ["extension"]=>
+ string(1) "h"
+ ["filename"]=>
+ string(4) "inet"
+}
+-- Iteration 28 --
+string(31) "c:\windows/system32\drivers/etc"
+string(5) "hosts"
+string(0) ""
+string(5) "hosts"
+array(3) {
+ ["dirname"]=>
+ string(31) "c:\windows/system32\drivers/etc"
+ ["basename"]=>
+ string(5) "hosts"
+ ["filename"]=>
+ string(5) "hosts"
+}
+-- Iteration 29 --
+string(17) "/usr\include/arpa"
+string(6) "inet.h"
+string(1) "h"
+string(4) "inet"
+array(4) {
+ ["dirname"]=>
+ string(17) "/usr\include/arpa"
+ ["basename"]=>
+ string(6) "inet.h"
+ ["extension"]=>
+ string(1) "h"
+ ["filename"]=>
+ string(4) "inet"
+}
+-- Iteration 30 --
+string(15) " c:\test\adir"
+string(9) "afile.txt"
+string(3) "txt"
+string(5) "afile"
+array(4) {
+ ["dirname"]=>
+ string(15) " c:\test\adir"
+ ["basename"]=>
+ string(9) "afile.txt"
+ ["extension"]=>
+ string(3) "txt"
+ ["filename"]=>
+ string(5) "afile"
+}
+-- Iteration 31 --
+string(12) "c:\test\adir"
+string(12) "afile.txt "
+string(6) "txt "
+string(5) "afile"
+array(4) {
+ ["dirname"]=>
+ string(12) "c:\test\adir"
+ ["basename"]=>
+ string(12) "afile.txt "
+ ["extension"]=>
+ string(6) "txt "
+ ["filename"]=>
+ string(5) "afile"
+}
+-- Iteration 32 --
+string(15) " c:\test\adir"
+string(12) "afile.txt "
+string(6) "txt "
+string(5) "afile"
+array(4) {
+ ["dirname"]=>
+ string(15) " c:\test\adir"
+ ["basename"]=>
+ string(12) "afile.txt "
+ ["extension"]=>
+ string(6) "txt "
+ ["filename"]=>
+ string(5) "afile"
+}
+-- Iteration 33 --
+string(20) " /usr/include/arpa"
+string(6) "inet.h"
+string(1) "h"
+string(4) "inet"
+array(4) {
+ ["dirname"]=>
+ string(20) " /usr/include/arpa"
+ ["basename"]=>
+ string(6) "inet.h"
+ ["extension"]=>
+ string(1) "h"
+ ["filename"]=>
+ string(4) "inet"
+}
+-- Iteration 34 --
+string(17) "/usr/include/arpa"
+string(9) "inet.h "
+string(4) "h "
+string(4) "inet"
+array(4) {
+ ["dirname"]=>
+ string(17) "/usr/include/arpa"
+ ["basename"]=>
+ string(9) "inet.h "
+ ["extension"]=>
+ string(4) "h "
+ ["filename"]=>
+ string(4) "inet"
+}
+-- Iteration 35 --
+string(20) " /usr/include/arpa"
+string(9) "inet.h "
+string(4) "h "
+string(4) "inet"
+array(4) {
+ ["dirname"]=>
+ string(20) " /usr/include/arpa"
+ ["basename"]=>
+ string(9) "inet.h "
+ ["extension"]=>
+ string(4) "h "
+ ["filename"]=>
+ string(4) "inet"
+}
+-- Iteration 36 --
+string(1) "."
+string(3) " c:"
+string(0) ""
+string(3) " c:"
+array(3) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(3) " c:"
+ ["filename"]=>
+ string(3) " c:"
+}
+-- Iteration 37 --
+string(14) " c:\test\adir"
+string(9) "afile.txt"
+string(3) "txt"
+string(5) "afile"
+array(4) {
+ ["dirname"]=>
+ string(14) " c:\test\adir"
+ ["basename"]=>
+ string(9) "afile.txt"
+ ["extension"]=>
+ string(3) "txt"
+ ["filename"]=>
+ string(5) "afile"
+}
+-- Iteration 38 --
+string(1) "\"
+string(3) "usr"
+string(0) ""
+string(3) "usr"
+array(3) {
+ ["dirname"]=>
+ string(1) "\"
+ ["basename"]=>
+ string(3) "usr"
+ ["filename"]=>
+ string(3) "usr"
+}
+-- Iteration 39 --
+string(1) "\"
+string(3) "usr"
+string(0) ""
+string(3) "usr"
+array(3) {
+ ["dirname"]=>
+ string(1) "\"
+ ["basename"]=>
+ string(3) "usr"
+ ["filename"]=>
+ string(3) "usr"
+}
+Done
diff --git a/ext/standard/tests/file/pathinfo_basic1.phpt b/ext/standard/tests/file/pathinfo_basic1.phpt
new file mode 100644
index 000000000..61b183f87
--- /dev/null
+++ b/ext/standard/tests/file/pathinfo_basic1.phpt
@@ -0,0 +1,609 @@
+--TEST--
+Test pathinfo() function: basic functionality
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip Not valid for Windows");
+?>
+--FILE--
+<?php
+/* Prototype: mixed pathinfo ( string $path [, int $options] );
+ Description: Returns information about a file path
+*/
+
+echo "*** Testing basic functions of pathinfo() ***\n";
+
+$paths = array (
+ '',
+ ' ',
+ 'c:',
+ 'c:\\',
+ 'c:/',
+ 'afile',
+ 'c:\test\adir',
+ 'c:\test\adir\\',
+ '/usr/include/arpa',
+ '/usr/include/arpa/',
+ 'usr/include/arpa',
+ 'usr/include/arpa/',
+ 'c:\test\afile',
+ 'c:\\test\\afile',
+ 'c://test//afile',
+ 'c:\test\afile\\',
+ 'c:\test\prog.exe',
+ 'c:\\test\\prog.exe',
+ 'c:/test/prog.exe',
+ '/usr/include/arpa/inet.h',
+ '//usr/include//arpa/inet.h',
+ '\\',
+ '\\\\',
+ '/',
+ '//',
+ '///',
+ '/usr/include/arpa/inet.h',
+ 'c:\windows/system32\drivers/etc\hosts',
+ '/usr\include/arpa\inet.h',
+ ' c:\test\adir\afile.txt',
+ 'c:\test\adir\afile.txt ',
+ ' c:\test\adir\afile.txt ',
+ ' /usr/include/arpa/inet.h',
+ '/usr/include/arpa/inet.h ',
+ ' /usr/include/arpa/inet.h ',
+ ' c:',
+ ' c:\test\adir\afile.txt',
+ '/usr',
+ '/usr/'
+);
+
+$counter = 1;
+/* loop through $paths to test each $path in the above array */
+foreach($paths as $path) {
+ echo "-- Iteration $counter --\n";
+ var_dump( pathinfo($path, PATHINFO_DIRNAME) );
+ var_dump( pathinfo($path, PATHINFO_BASENAME) );
+ var_dump( pathinfo($path, PATHINFO_EXTENSION) );
+ var_dump( pathinfo($path, PATHINFO_FILENAME) );
+ var_dump( pathinfo($path) );
+ $counter++;
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+*** Testing basic functions of pathinfo() ***
+-- Iteration 1 --
+string(0) ""
+string(0) ""
+string(0) ""
+string(0) ""
+array(2) {
+ ["basename"]=>
+ string(0) ""
+ ["filename"]=>
+ string(0) ""
+}
+-- Iteration 2 --
+string(1) "."
+string(1) " "
+string(0) ""
+string(1) " "
+array(3) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(1) " "
+ ["filename"]=>
+ string(1) " "
+}
+-- Iteration 3 --
+string(1) "."
+string(2) "c:"
+string(0) ""
+string(2) "c:"
+array(3) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(2) "c:"
+ ["filename"]=>
+ string(2) "c:"
+}
+-- Iteration 4 --
+string(1) "."
+string(3) "c:\"
+string(0) ""
+string(3) "c:\"
+array(3) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(3) "c:\"
+ ["filename"]=>
+ string(3) "c:\"
+}
+-- Iteration 5 --
+string(1) "."
+string(2) "c:"
+string(0) ""
+string(2) "c:"
+array(3) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(2) "c:"
+ ["filename"]=>
+ string(2) "c:"
+}
+-- Iteration 6 --
+string(1) "."
+string(5) "afile"
+string(0) ""
+string(5) "afile"
+array(3) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(5) "afile"
+ ["filename"]=>
+ string(5) "afile"
+}
+-- Iteration 7 --
+string(1) "."
+string(12) "c:\test\adir"
+string(0) ""
+string(12) "c:\test\adir"
+array(3) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(12) "c:\test\adir"
+ ["filename"]=>
+ string(12) "c:\test\adir"
+}
+-- Iteration 8 --
+string(1) "."
+string(13) "c:\test\adir\"
+string(0) ""
+string(13) "c:\test\adir\"
+array(3) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(13) "c:\test\adir\"
+ ["filename"]=>
+ string(13) "c:\test\adir\"
+}
+-- Iteration 9 --
+string(12) "/usr/include"
+string(4) "arpa"
+string(0) ""
+string(4) "arpa"
+array(3) {
+ ["dirname"]=>
+ string(12) "/usr/include"
+ ["basename"]=>
+ string(4) "arpa"
+ ["filename"]=>
+ string(4) "arpa"
+}
+-- Iteration 10 --
+string(12) "/usr/include"
+string(4) "arpa"
+string(0) ""
+string(4) "arpa"
+array(3) {
+ ["dirname"]=>
+ string(12) "/usr/include"
+ ["basename"]=>
+ string(4) "arpa"
+ ["filename"]=>
+ string(4) "arpa"
+}
+-- Iteration 11 --
+string(11) "usr/include"
+string(4) "arpa"
+string(0) ""
+string(4) "arpa"
+array(3) {
+ ["dirname"]=>
+ string(11) "usr/include"
+ ["basename"]=>
+ string(4) "arpa"
+ ["filename"]=>
+ string(4) "arpa"
+}
+-- Iteration 12 --
+string(11) "usr/include"
+string(4) "arpa"
+string(0) ""
+string(4) "arpa"
+array(3) {
+ ["dirname"]=>
+ string(11) "usr/include"
+ ["basename"]=>
+ string(4) "arpa"
+ ["filename"]=>
+ string(4) "arpa"
+}
+-- Iteration 13 --
+string(1) "."
+string(13) "c:\test\afile"
+string(0) ""
+string(13) "c:\test\afile"
+array(3) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(13) "c:\test\afile"
+ ["filename"]=>
+ string(13) "c:\test\afile"
+}
+-- Iteration 14 --
+string(1) "."
+string(13) "c:\test\afile"
+string(0) ""
+string(13) "c:\test\afile"
+array(3) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(13) "c:\test\afile"
+ ["filename"]=>
+ string(13) "c:\test\afile"
+}
+-- Iteration 15 --
+string(8) "c://test"
+string(5) "afile"
+string(0) ""
+string(5) "afile"
+array(3) {
+ ["dirname"]=>
+ string(8) "c://test"
+ ["basename"]=>
+ string(5) "afile"
+ ["filename"]=>
+ string(5) "afile"
+}
+-- Iteration 16 --
+string(1) "."
+string(14) "c:\test\afile\"
+string(0) ""
+string(14) "c:\test\afile\"
+array(3) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(14) "c:\test\afile\"
+ ["filename"]=>
+ string(14) "c:\test\afile\"
+}
+-- Iteration 17 --
+string(1) "."
+string(16) "c:\test\prog.exe"
+string(3) "exe"
+string(12) "c:\test\prog"
+array(4) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(16) "c:\test\prog.exe"
+ ["extension"]=>
+ string(3) "exe"
+ ["filename"]=>
+ string(12) "c:\test\prog"
+}
+-- Iteration 18 --
+string(1) "."
+string(16) "c:\test\prog.exe"
+string(3) "exe"
+string(12) "c:\test\prog"
+array(4) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(16) "c:\test\prog.exe"
+ ["extension"]=>
+ string(3) "exe"
+ ["filename"]=>
+ string(12) "c:\test\prog"
+}
+-- Iteration 19 --
+string(7) "c:/test"
+string(8) "prog.exe"
+string(3) "exe"
+string(4) "prog"
+array(4) {
+ ["dirname"]=>
+ string(7) "c:/test"
+ ["basename"]=>
+ string(8) "prog.exe"
+ ["extension"]=>
+ string(3) "exe"
+ ["filename"]=>
+ string(4) "prog"
+}
+-- Iteration 20 --
+string(17) "/usr/include/arpa"
+string(6) "inet.h"
+string(1) "h"
+string(4) "inet"
+array(4) {
+ ["dirname"]=>
+ string(17) "/usr/include/arpa"
+ ["basename"]=>
+ string(6) "inet.h"
+ ["extension"]=>
+ string(1) "h"
+ ["filename"]=>
+ string(4) "inet"
+}
+-- Iteration 21 --
+string(19) "//usr/include//arpa"
+string(6) "inet.h"
+string(1) "h"
+string(4) "inet"
+array(4) {
+ ["dirname"]=>
+ string(19) "//usr/include//arpa"
+ ["basename"]=>
+ string(6) "inet.h"
+ ["extension"]=>
+ string(1) "h"
+ ["filename"]=>
+ string(4) "inet"
+}
+-- Iteration 22 --
+string(1) "."
+string(1) "\"
+string(0) ""
+string(1) "\"
+array(3) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(1) "\"
+ ["filename"]=>
+ string(1) "\"
+}
+-- Iteration 23 --
+string(1) "."
+string(2) "\\"
+string(0) ""
+string(2) "\\"
+array(3) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(2) "\\"
+ ["filename"]=>
+ string(2) "\\"
+}
+-- Iteration 24 --
+string(1) "/"
+string(0) ""
+string(0) ""
+string(0) ""
+array(3) {
+ ["dirname"]=>
+ string(1) "/"
+ ["basename"]=>
+ string(0) ""
+ ["filename"]=>
+ string(0) ""
+}
+-- Iteration 25 --
+string(1) "/"
+string(0) ""
+string(0) ""
+string(0) ""
+array(3) {
+ ["dirname"]=>
+ string(1) "/"
+ ["basename"]=>
+ string(0) ""
+ ["filename"]=>
+ string(0) ""
+}
+-- Iteration 26 --
+string(1) "/"
+string(0) ""
+string(0) ""
+string(0) ""
+array(3) {
+ ["dirname"]=>
+ string(1) "/"
+ ["basename"]=>
+ string(0) ""
+ ["filename"]=>
+ string(0) ""
+}
+-- Iteration 27 --
+string(17) "/usr/include/arpa"
+string(6) "inet.h"
+string(1) "h"
+string(4) "inet"
+array(4) {
+ ["dirname"]=>
+ string(17) "/usr/include/arpa"
+ ["basename"]=>
+ string(6) "inet.h"
+ ["extension"]=>
+ string(1) "h"
+ ["filename"]=>
+ string(4) "inet"
+}
+-- Iteration 28 --
+string(27) "c:\windows/system32\drivers"
+string(9) "etc\hosts"
+string(0) ""
+string(9) "etc\hosts"
+array(3) {
+ ["dirname"]=>
+ string(27) "c:\windows/system32\drivers"
+ ["basename"]=>
+ string(9) "etc\hosts"
+ ["filename"]=>
+ string(9) "etc\hosts"
+}
+-- Iteration 29 --
+string(12) "/usr\include"
+string(11) "arpa\inet.h"
+string(1) "h"
+string(9) "arpa\inet"
+array(4) {
+ ["dirname"]=>
+ string(12) "/usr\include"
+ ["basename"]=>
+ string(11) "arpa\inet.h"
+ ["extension"]=>
+ string(1) "h"
+ ["filename"]=>
+ string(9) "arpa\inet"
+}
+-- Iteration 30 --
+string(1) "."
+string(25) " c:\test\adir\afile.txt"
+string(3) "txt"
+string(21) " c:\test\adir\afile"
+array(4) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(25) " c:\test\adir\afile.txt"
+ ["extension"]=>
+ string(3) "txt"
+ ["filename"]=>
+ string(21) " c:\test\adir\afile"
+}
+-- Iteration 31 --
+string(1) "."
+string(25) "c:\test\adir\afile.txt "
+string(6) "txt "
+string(18) "c:\test\adir\afile"
+array(4) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(25) "c:\test\adir\afile.txt "
+ ["extension"]=>
+ string(6) "txt "
+ ["filename"]=>
+ string(18) "c:\test\adir\afile"
+}
+-- Iteration 32 --
+string(1) "."
+string(28) " c:\test\adir\afile.txt "
+string(6) "txt "
+string(21) " c:\test\adir\afile"
+array(4) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(28) " c:\test\adir\afile.txt "
+ ["extension"]=>
+ string(6) "txt "
+ ["filename"]=>
+ string(21) " c:\test\adir\afile"
+}
+-- Iteration 33 --
+string(20) " /usr/include/arpa"
+string(6) "inet.h"
+string(1) "h"
+string(4) "inet"
+array(4) {
+ ["dirname"]=>
+ string(20) " /usr/include/arpa"
+ ["basename"]=>
+ string(6) "inet.h"
+ ["extension"]=>
+ string(1) "h"
+ ["filename"]=>
+ string(4) "inet"
+}
+-- Iteration 34 --
+string(17) "/usr/include/arpa"
+string(9) "inet.h "
+string(4) "h "
+string(4) "inet"
+array(4) {
+ ["dirname"]=>
+ string(17) "/usr/include/arpa"
+ ["basename"]=>
+ string(9) "inet.h "
+ ["extension"]=>
+ string(4) "h "
+ ["filename"]=>
+ string(4) "inet"
+}
+-- Iteration 35 --
+string(20) " /usr/include/arpa"
+string(9) "inet.h "
+string(4) "h "
+string(4) "inet"
+array(4) {
+ ["dirname"]=>
+ string(20) " /usr/include/arpa"
+ ["basename"]=>
+ string(9) "inet.h "
+ ["extension"]=>
+ string(4) "h "
+ ["filename"]=>
+ string(4) "inet"
+}
+-- Iteration 36 --
+string(1) "."
+string(3) " c:"
+string(0) ""
+string(3) " c:"
+array(3) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(3) " c:"
+ ["filename"]=>
+ string(3) " c:"
+}
+-- Iteration 37 --
+string(1) "."
+string(24) " c:\test\adir\afile.txt"
+string(3) "txt"
+string(20) " c:\test\adir\afile"
+array(4) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(24) " c:\test\adir\afile.txt"
+ ["extension"]=>
+ string(3) "txt"
+ ["filename"]=>
+ string(20) " c:\test\adir\afile"
+}
+-- Iteration 38 --
+string(1) "/"
+string(3) "usr"
+string(0) ""
+string(3) "usr"
+array(3) {
+ ["dirname"]=>
+ string(1) "/"
+ ["basename"]=>
+ string(3) "usr"
+ ["filename"]=>
+ string(3) "usr"
+}
+-- Iteration 39 --
+string(1) "/"
+string(3) "usr"
+string(0) ""
+string(3) "usr"
+array(3) {
+ ["dirname"]=>
+ string(1) "/"
+ ["basename"]=>
+ string(3) "usr"
+ ["filename"]=>
+ string(3) "usr"
+}
+Done \ No newline at end of file
diff --git a/ext/standard/tests/file/pathinfo_basic2-win32.phpt b/ext/standard/tests/file/pathinfo_basic2-win32.phpt
new file mode 100644
index 000000000..c88bc25ff
--- /dev/null
+++ b/ext/standard/tests/file/pathinfo_basic2-win32.phpt
@@ -0,0 +1,270 @@
+--TEST--
+Test pathinfo() function: basic functionality
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Only valid for Windows");
+?>
+--FILE--
+<?php
+/* Prototype: mixed pathinfo ( string $path [, int $options] );
+ Description: Returns information about a file path
+*/
+
+echo "*** Testing basic functions of pathinfo() ***\n";
+
+$paths = array (
+ 'c:\..\dir1',
+ 'c:\test\..\test2\.\adir\afile.txt',
+ '/usr/include/../arpa/./inet.h',
+ 'c:\test\adir\afile..txt',
+ '/usr/include/arpa/inet..h',
+ 'c:\test\adir\afile.',
+ '/usr/include/arpa/inet.',
+ '/usr/include/arpa/inet,h',
+ 'c:afile.txt',
+ '..\.\..\test\afile.txt',
+ '.././../test/afile',
+ '.',
+ '..',
+ '...',
+ '/usr/lib/.../afile'
+
+);
+
+$counter = 1;
+/* loop through $paths to test each $path in the above array */
+foreach($paths as $path) {
+ echo "-- Iteration $counter --\n";
+ var_dump( pathinfo($path, PATHINFO_DIRNAME) );
+ var_dump( pathinfo($path, PATHINFO_BASENAME) );
+ var_dump( pathinfo($path, PATHINFO_EXTENSION) );
+ var_dump( pathinfo($path, PATHINFO_FILENAME) );
+ var_dump( pathinfo($path) );
+ $counter++;
+}
+
+echo "Done\n";
+?>
+--EXPECT--
+*** Testing basic functions of pathinfo() ***
+-- Iteration 1 --
+string(5) "c:\.."
+string(4) "dir1"
+string(0) ""
+string(4) "dir1"
+array(3) {
+ ["dirname"]=>
+ string(5) "c:\.."
+ ["basename"]=>
+ string(4) "dir1"
+ ["filename"]=>
+ string(4) "dir1"
+}
+-- Iteration 2 --
+string(23) "c:\test\..\test2\.\adir"
+string(9) "afile.txt"
+string(3) "txt"
+string(5) "afile"
+array(4) {
+ ["dirname"]=>
+ string(23) "c:\test\..\test2\.\adir"
+ ["basename"]=>
+ string(9) "afile.txt"
+ ["extension"]=>
+ string(3) "txt"
+ ["filename"]=>
+ string(5) "afile"
+}
+-- Iteration 3 --
+string(22) "/usr/include/../arpa/."
+string(6) "inet.h"
+string(1) "h"
+string(4) "inet"
+array(4) {
+ ["dirname"]=>
+ string(22) "/usr/include/../arpa/."
+ ["basename"]=>
+ string(6) "inet.h"
+ ["extension"]=>
+ string(1) "h"
+ ["filename"]=>
+ string(4) "inet"
+}
+-- Iteration 4 --
+string(12) "c:\test\adir"
+string(10) "afile..txt"
+string(3) "txt"
+string(6) "afile."
+array(4) {
+ ["dirname"]=>
+ string(12) "c:\test\adir"
+ ["basename"]=>
+ string(10) "afile..txt"
+ ["extension"]=>
+ string(3) "txt"
+ ["filename"]=>
+ string(6) "afile."
+}
+-- Iteration 5 --
+string(17) "/usr/include/arpa"
+string(7) "inet..h"
+string(1) "h"
+string(5) "inet."
+array(4) {
+ ["dirname"]=>
+ string(17) "/usr/include/arpa"
+ ["basename"]=>
+ string(7) "inet..h"
+ ["extension"]=>
+ string(1) "h"
+ ["filename"]=>
+ string(5) "inet."
+}
+-- Iteration 6 --
+string(12) "c:\test\adir"
+string(6) "afile."
+string(0) ""
+string(5) "afile"
+array(4) {
+ ["dirname"]=>
+ string(12) "c:\test\adir"
+ ["basename"]=>
+ string(6) "afile."
+ ["extension"]=>
+ string(0) ""
+ ["filename"]=>
+ string(5) "afile"
+}
+-- Iteration 7 --
+string(17) "/usr/include/arpa"
+string(5) "inet."
+string(0) ""
+string(4) "inet"
+array(4) {
+ ["dirname"]=>
+ string(17) "/usr/include/arpa"
+ ["basename"]=>
+ string(5) "inet."
+ ["extension"]=>
+ string(0) ""
+ ["filename"]=>
+ string(4) "inet"
+}
+-- Iteration 8 --
+string(17) "/usr/include/arpa"
+string(6) "inet,h"
+string(0) ""
+string(6) "inet,h"
+array(3) {
+ ["dirname"]=>
+ string(17) "/usr/include/arpa"
+ ["basename"]=>
+ string(6) "inet,h"
+ ["filename"]=>
+ string(6) "inet,h"
+}
+-- Iteration 9 --
+string(3) "c:."
+string(11) "c:afile.txt"
+string(3) "txt"
+string(7) "c:afile"
+array(4) {
+ ["dirname"]=>
+ string(3) "c:."
+ ["basename"]=>
+ string(11) "c:afile.txt"
+ ["extension"]=>
+ string(3) "txt"
+ ["filename"]=>
+ string(7) "c:afile"
+}
+-- Iteration 10 --
+string(12) "..\.\..\test"
+string(9) "afile.txt"
+string(3) "txt"
+string(5) "afile"
+array(4) {
+ ["dirname"]=>
+ string(12) "..\.\..\test"
+ ["basename"]=>
+ string(9) "afile.txt"
+ ["extension"]=>
+ string(3) "txt"
+ ["filename"]=>
+ string(5) "afile"
+}
+-- Iteration 11 --
+string(12) ".././../test"
+string(5) "afile"
+string(0) ""
+string(5) "afile"
+array(3) {
+ ["dirname"]=>
+ string(12) ".././../test"
+ ["basename"]=>
+ string(5) "afile"
+ ["filename"]=>
+ string(5) "afile"
+}
+-- Iteration 12 --
+string(1) "."
+string(1) "."
+string(0) ""
+string(0) ""
+array(4) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(1) "."
+ ["extension"]=>
+ string(0) ""
+ ["filename"]=>
+ string(0) ""
+}
+-- Iteration 13 --
+string(1) "."
+string(2) ".."
+string(0) ""
+string(1) "."
+array(4) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(2) ".."
+ ["extension"]=>
+ string(0) ""
+ ["filename"]=>
+ string(1) "."
+}
+-- Iteration 14 --
+string(1) "."
+string(3) "..."
+string(0) ""
+string(2) ".."
+array(4) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(3) "..."
+ ["extension"]=>
+ string(0) ""
+ ["filename"]=>
+ string(2) ".."
+}
+-- Iteration 15 --
+string(12) "/usr/lib/..."
+string(5) "afile"
+string(0) ""
+string(5) "afile"
+array(3) {
+ ["dirname"]=>
+ string(12) "/usr/lib/..."
+ ["basename"]=>
+ string(5) "afile"
+ ["filename"]=>
+ string(5) "afile"
+}
+Done \ No newline at end of file
diff --git a/ext/standard/tests/file/pathinfo_basic2.phpt b/ext/standard/tests/file/pathinfo_basic2.phpt
new file mode 100644
index 000000000..7bddda039
--- /dev/null
+++ b/ext/standard/tests/file/pathinfo_basic2.phpt
@@ -0,0 +1,272 @@
+--TEST--
+Test pathinfo() function: basic functionality
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip Not valid for Windows");
+?>
+--FILE--
+<?php
+/* Prototype: mixed pathinfo ( string $path [, int $options] );
+ Description: Returns information about a file path
+*/
+
+echo "*** Testing basic functions of pathinfo() ***\n";
+
+$paths = array (
+ 'c:\..\dir1',
+ 'c:\test\..\test2\.\adir\afile.txt',
+ '/usr/include/../arpa/./inet.h',
+ 'c:\test\adir\afile..txt',
+ '/usr/include/arpa/inet..h',
+ 'c:\test\adir\afile.',
+ '/usr/include/arpa/inet.',
+ '/usr/include/arpa/inet,h',
+ 'c:afile.txt',
+ '..\.\..\test\afile.txt',
+ '.././../test/afile',
+ '.',
+ '..',
+ '...',
+ '/usr/lib/.../afile'
+
+);
+
+$counter = 1;
+/* loop through $paths to test each $path in the above array */
+foreach($paths as $path) {
+ echo "-- Iteration $counter --\n";
+ var_dump( pathinfo($path, PATHINFO_DIRNAME) );
+ var_dump( pathinfo($path, PATHINFO_BASENAME) );
+ var_dump( pathinfo($path, PATHINFO_EXTENSION) );
+ var_dump( pathinfo($path, PATHINFO_FILENAME) );
+ var_dump( pathinfo($path) );
+ $counter++;
+}
+
+echo "Done\n";
+?>
+--EXPECT--
+*** Testing basic functions of pathinfo() ***
+-- Iteration 1 --
+string(1) "."
+string(10) "c:\..\dir1"
+string(5) "\dir1"
+string(4) "c:\."
+array(4) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(10) "c:\..\dir1"
+ ["extension"]=>
+ string(5) "\dir1"
+ ["filename"]=>
+ string(4) "c:\."
+}
+-- Iteration 2 --
+string(1) "."
+string(33) "c:\test\..\test2\.\adir\afile.txt"
+string(3) "txt"
+string(29) "c:\test\..\test2\.\adir\afile"
+array(4) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(33) "c:\test\..\test2\.\adir\afile.txt"
+ ["extension"]=>
+ string(3) "txt"
+ ["filename"]=>
+ string(29) "c:\test\..\test2\.\adir\afile"
+}
+-- Iteration 3 --
+string(22) "/usr/include/../arpa/."
+string(6) "inet.h"
+string(1) "h"
+string(4) "inet"
+array(4) {
+ ["dirname"]=>
+ string(22) "/usr/include/../arpa/."
+ ["basename"]=>
+ string(6) "inet.h"
+ ["extension"]=>
+ string(1) "h"
+ ["filename"]=>
+ string(4) "inet"
+}
+-- Iteration 4 --
+string(1) "."
+string(23) "c:\test\adir\afile..txt"
+string(3) "txt"
+string(19) "c:\test\adir\afile."
+array(4) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(23) "c:\test\adir\afile..txt"
+ ["extension"]=>
+ string(3) "txt"
+ ["filename"]=>
+ string(19) "c:\test\adir\afile."
+}
+-- Iteration 5 --
+string(17) "/usr/include/arpa"
+string(7) "inet..h"
+string(1) "h"
+string(5) "inet."
+array(4) {
+ ["dirname"]=>
+ string(17) "/usr/include/arpa"
+ ["basename"]=>
+ string(7) "inet..h"
+ ["extension"]=>
+ string(1) "h"
+ ["filename"]=>
+ string(5) "inet."
+}
+-- Iteration 6 --
+string(1) "."
+string(19) "c:\test\adir\afile."
+string(0) ""
+string(18) "c:\test\adir\afile"
+array(4) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(19) "c:\test\adir\afile."
+ ["extension"]=>
+ string(0) ""
+ ["filename"]=>
+ string(18) "c:\test\adir\afile"
+}
+-- Iteration 7 --
+string(17) "/usr/include/arpa"
+string(5) "inet."
+string(0) ""
+string(4) "inet"
+array(4) {
+ ["dirname"]=>
+ string(17) "/usr/include/arpa"
+ ["basename"]=>
+ string(5) "inet."
+ ["extension"]=>
+ string(0) ""
+ ["filename"]=>
+ string(4) "inet"
+}
+-- Iteration 8 --
+string(17) "/usr/include/arpa"
+string(6) "inet,h"
+string(0) ""
+string(6) "inet,h"
+array(3) {
+ ["dirname"]=>
+ string(17) "/usr/include/arpa"
+ ["basename"]=>
+ string(6) "inet,h"
+ ["filename"]=>
+ string(6) "inet,h"
+}
+-- Iteration 9 --
+string(1) "."
+string(11) "c:afile.txt"
+string(3) "txt"
+string(7) "c:afile"
+array(4) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(11) "c:afile.txt"
+ ["extension"]=>
+ string(3) "txt"
+ ["filename"]=>
+ string(7) "c:afile"
+}
+-- Iteration 10 --
+string(1) "."
+string(22) "..\.\..\test\afile.txt"
+string(3) "txt"
+string(18) "..\.\..\test\afile"
+array(4) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(22) "..\.\..\test\afile.txt"
+ ["extension"]=>
+ string(3) "txt"
+ ["filename"]=>
+ string(18) "..\.\..\test\afile"
+}
+-- Iteration 11 --
+string(12) ".././../test"
+string(5) "afile"
+string(0) ""
+string(5) "afile"
+array(3) {
+ ["dirname"]=>
+ string(12) ".././../test"
+ ["basename"]=>
+ string(5) "afile"
+ ["filename"]=>
+ string(5) "afile"
+}
+-- Iteration 12 --
+string(1) "."
+string(1) "."
+string(0) ""
+string(0) ""
+array(4) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(1) "."
+ ["extension"]=>
+ string(0) ""
+ ["filename"]=>
+ string(0) ""
+}
+-- Iteration 13 --
+string(1) "."
+string(2) ".."
+string(0) ""
+string(1) "."
+array(4) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(2) ".."
+ ["extension"]=>
+ string(0) ""
+ ["filename"]=>
+ string(1) "."
+}
+-- Iteration 14 --
+string(1) "."
+string(3) "..."
+string(0) ""
+string(2) ".."
+array(4) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(3) "..."
+ ["extension"]=>
+ string(0) ""
+ ["filename"]=>
+ string(2) ".."
+}
+-- Iteration 15 --
+string(12) "/usr/lib/..."
+string(5) "afile"
+string(0) ""
+string(5) "afile"
+array(3) {
+ ["dirname"]=>
+ string(12) "/usr/lib/..."
+ ["basename"]=>
+ string(5) "afile"
+ ["filename"]=>
+ string(5) "afile"
+}
+Done \ No newline at end of file
diff --git a/ext/standard/tests/file/pathinfo_variation1.phpt b/ext/standard/tests/file/pathinfo_variation1.phpt
new file mode 100644
index 000000000..ff4c1eb81
--- /dev/null
+++ b/ext/standard/tests/file/pathinfo_variation1.phpt
@@ -0,0 +1,190 @@
+--TEST--
+Test pathinfo() function : usage variation
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : array pathinfo(string path[, int options])
+ * Description: Returns information about a certain string
+ * Source code: ext/standard/string.c
+ * Alias to functions:
+ */
+
+echo "*** Testing pathinfo() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$options = PATHINFO_DIRNAME;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for path
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( pathinfo($value, $options) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing pathinfo() : usage variation ***
+
+--int 0--
+string(1) "."
+
+--int 1--
+string(1) "."
+
+--int 12345--
+string(1) "."
+
+--int -12345--
+string(1) "."
+
+--float 10.5--
+string(1) "."
+
+--float -10.5--
+string(1) "."
+
+--float 12.3456789000e10--
+string(1) "."
+
+--float -12.3456789000e10--
+string(1) "."
+
+--float .5--
+string(1) "."
+
+--empty array--
+Error: 2 - pathinfo() expects parameter 1 to be string, array given, %s(%d)
+NULL
+
+--int indexed array--
+Error: 2 - pathinfo() expects parameter 1 to be string, array given, %s(%d)
+NULL
+
+--associative array--
+Error: 2 - pathinfo() expects parameter 1 to be string, array given, %s(%d)
+NULL
+
+--nested arrays--
+Error: 2 - pathinfo() expects parameter 1 to be string, array given, %s(%d)
+NULL
+
+--uppercase NULL--
+string(0) ""
+
+--lowercase null--
+string(0) ""
+
+--lowercase true--
+string(1) "."
+
+--lowercase false--
+string(0) ""
+
+--uppercase TRUE--
+string(1) "."
+
+--uppercase FALSE--
+string(0) ""
+
+--empty string DQ--
+string(0) ""
+
+--empty string SQ--
+string(0) ""
+
+--instance of classWithToString--
+string(1) "."
+
+--instance of classWithoutToString--
+Error: 2 - pathinfo() expects parameter 1 to be string, object given, %s(%d)
+NULL
+
+--undefined var--
+string(0) ""
+
+--unset var--
+string(0) ""
+===DONE===
diff --git a/ext/standard/tests/file/pathinfo_variation2.phpt b/ext/standard/tests/file/pathinfo_variation2.phpt
new file mode 100644
index 000000000..9d18a4b79
--- /dev/null
+++ b/ext/standard/tests/file/pathinfo_variation2.phpt
@@ -0,0 +1,197 @@
+--TEST--
+Test pathinfo() function : usage variation
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : array pathinfo(string path[, int options])
+ * Description: Returns information about a certain string
+ * Source code: ext/standard/string.c
+ * Alias to functions:
+ */
+
+echo "*** Testing pathinfo() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$path = '/usr/include/arpa/inet.h';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for options
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( pathinfo($path, $value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing pathinfo() : usage variation ***
+
+--float 10.5--
+string(6) "inet.h"
+
+--float -10.5--
+string(6) "inet.h"
+
+--float 12.3456789000e10--
+string(%d) %s
+
+--float -12.3456789000e10--
+string(%d) %s
+
+--float .5--
+string(%d) %s
+
+--empty array--
+Error: 2 - pathinfo() expects parameter 2 to be long, array given, %s(%d)
+NULL
+
+--int indexed array--
+Error: 2 - pathinfo() expects parameter 2 to be long, array given, %s(%d)
+NULL
+
+--associative array--
+Error: 2 - pathinfo() expects parameter 2 to be long, array given, %s(%d)
+NULL
+
+--nested arrays--
+Error: 2 - pathinfo() expects parameter 2 to be long, array given, %s(%d)
+NULL
+
+--uppercase NULL--
+string(0) ""
+
+--lowercase null--
+string(0) ""
+
+--lowercase true--
+string(17) "/usr/include/arpa"
+
+--lowercase false--
+string(0) ""
+
+--uppercase TRUE--
+string(17) "/usr/include/arpa"
+
+--uppercase FALSE--
+string(0) ""
+
+--empty string DQ--
+Error: 2 - pathinfo() expects parameter 2 to be long, string given, %s(%d)
+NULL
+
+--empty string SQ--
+Error: 2 - pathinfo() expects parameter 2 to be long, string given, %s(%d)
+NULL
+
+--string DQ--
+Error: 2 - pathinfo() expects parameter 2 to be long, string given, %s(%d)
+NULL
+
+--string SQ--
+Error: 2 - pathinfo() expects parameter 2 to be long, string given, %s(%d)
+NULL
+
+--mixed case string--
+Error: 2 - pathinfo() expects parameter 2 to be long, string given, %s(%d)
+NULL
+
+--heredoc--
+Error: 2 - pathinfo() expects parameter 2 to be long, string given, %s(%d)
+NULL
+
+--instance of classWithToString--
+Error: 2 - pathinfo() expects parameter 2 to be long, object given, %s(%d)
+NULL
+
+--instance of classWithoutToString--
+Error: 2 - pathinfo() expects parameter 2 to be long, object given, %s(%d)
+NULL
+
+--undefined var--
+string(0) ""
+
+--unset var--
+string(0) ""
+===DONE===
diff --git a/ext/standard/tests/file/pathinfo_variation3.phpt b/ext/standard/tests/file/pathinfo_variation3.phpt
new file mode 100644
index 000000000..333aa5683
--- /dev/null
+++ b/ext/standard/tests/file/pathinfo_variation3.phpt
@@ -0,0 +1,80 @@
+--TEST--
+Test pathinfo() function : usage variation
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : array pathinfo(string path[, int options])
+ * Description: Returns information about a certain string
+ * Source code: ext/standard/string.c
+ * Alias to functions:
+ */
+
+echo "*** Testing pathinfo() : usage variation ***\n";
+
+$testfile = "/usr/include/arpa/inet.h";
+
+var_dump(pathinfo("./"));
+var_dump(pathinfo("/."));
+var_dump(pathinfo(".cvsignore"));
+var_dump(pathinfo($testfile, PATHINFO_BASENAME));
+var_dump(pathinfo($testfile, PATHINFO_FILENAME));
+var_dump(pathinfo($testfile, PATHINFO_EXTENSION));
+var_dump(pathinfo($testfile, PATHINFO_DIRNAME));
+var_dump(pathinfo($testfile, PATHINFO_EXTENSION|PATHINFO_FILENAME|PATHINFO_DIRNAME));
+var_dump(pathinfo($testfile, PATHINFO_EXTENSION|PATHINFO_FILENAME|PATHINFO_BASENAME));
+var_dump(pathinfo($testfile, PATHINFO_EXTENSION|PATHINFO_FILENAME));
+var_dump(pathinfo($testfile, PATHINFO_EXTENSION|PATHINFO_BASENAME));
+var_dump(pathinfo($testfile, PATHINFO_FILENAME|PATHINFO_DIRNAME));
+var_dump(pathinfo($testfile, PATHINFO_FILENAME|PATHINFO_BASENAME));
+var_dump(pathinfo($testfile, PATHINFO_DIRNAME|PATHINFO_EXTENSION));
+var_dump(pathinfo($testfile, PATHINFO_DIRNAME|PATHINFO_BASENAME));
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing pathinfo() : usage variation ***
+array(4) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(1) "."
+ ["extension"]=>
+ string(0) ""
+ ["filename"]=>
+ string(0) ""
+}
+array(4) {
+ ["dirname"]=>
+ string(1) "%s"
+ ["basename"]=>
+ string(1) "."
+ ["extension"]=>
+ string(0) ""
+ ["filename"]=>
+ string(0) ""
+}
+array(4) {
+ ["dirname"]=>
+ string(1) "."
+ ["basename"]=>
+ string(10) ".cvsignore"
+ ["extension"]=>
+ string(9) "cvsignore"
+ ["filename"]=>
+ string(0) ""
+}
+string(6) "inet.h"
+string(4) "inet"
+string(1) "h"
+string(17) "/usr/include/arpa"
+string(17) "/usr/include/arpa"
+string(6) "inet.h"
+string(1) "h"
+string(6) "inet.h"
+string(17) "/usr/include/arpa"
+string(6) "inet.h"
+string(17) "/usr/include/arpa"
+string(17) "/usr/include/arpa"
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/pclose_variation1.phpt b/ext/standard/tests/file/pclose_variation1.phpt
new file mode 100644
index 000000000..38c7f09a1
--- /dev/null
+++ b/ext/standard/tests/file/pclose_variation1.phpt
@@ -0,0 +1,231 @@
+--TEST--
+Test pclose() function : usage variation
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : int pclose(resource fp)
+ * Description: Close a file pointer opened by popen()
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing pclose() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for fp
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( pclose($value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing pclose() : usage variation ***
+
+--int 0--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--int 1--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--float .5--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--empty array--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--string DQ--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--string SQ--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--mixed case string--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--heredoc--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - pclose(): supplied argument is not a valid stream resource, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/file/popen_pclose_error-sunos.phpt b/ext/standard/tests/file/popen_pclose_error-sunos.phpt
index d2de737cf..b63dbeb7e 100644
--- a/ext/standard/tests/file/popen_pclose_error-sunos.phpt
+++ b/ext/standard/tests/file/popen_pclose_error-sunos.phpt
@@ -40,8 +40,8 @@ NULL
Warning: Wrong parameter count for popen() in %s on line %d
NULL
-resource(%d) of type (stream)
sh: abc.txt: not found
+resource(%d) of type (stream)
Warning: Wrong parameter count for pclose() in %s on line %d
NULL
diff --git a/ext/standard/tests/file/proc_open01.phpt b/ext/standard/tests/file/proc_open01.phpt
index 2c211f616..3c64908eb 100644
--- a/ext/standard/tests/file/proc_open01.phpt
+++ b/ext/standard/tests/file/proc_open01.phpt
@@ -9,7 +9,7 @@ if ($php === false) {
die("no php executable defined");
}
$proc = proc_open(
- $php,
+ "$php -n",
array(0 => array('pipe', 'r'), 1 => array('pipe', 'w')),
$pipes
);
diff --git a/ext/standard/tests/file/readfile_error.phpt b/ext/standard/tests/file/readfile_error.phpt
index d92f9bb03..bb6ee8c98 100644
--- a/ext/standard/tests/file/readfile_error.phpt
+++ b/ext/standard/tests/file/readfile_error.phpt
@@ -38,8 +38,14 @@ Warning: readfile() expects at most 3 parameters, 4 given in %s on line %d
bool(false)
-- Testing readfile() with invalid arguments --
+
+Warning: readfile(): Filename cannot be empty in %s on line %d
bool(false)
+
+Warning: readfile(): Filename cannot be empty in %s on line %d
bool(false)
+
+Warning: readfile(): Filename cannot be empty in %s on line %d
bool(false)
Warning: readfile() expects parameter 3 to be resource, string given in %s on line %d
@@ -50,6 +56,6 @@ bool(false)
-- Testing readfile() with non-existent file --
-Warning: readfile(%s/non_existent_file.tmp): failed to open stream: %s in %s on line %d
+Warning: readfile(%s/non_existent_file.tmp): failed to open stream: No such file or directory in %s on line %d
bool(false)
Done
diff --git a/ext/standard/tests/file/readfile_variation10-win32.phpt b/ext/standard/tests/file/readfile_variation10-win32.phpt
new file mode 100644
index 000000000..d4cad6c1e
--- /dev/null
+++ b/ext/standard/tests/file/readfile_variation10-win32.phpt
@@ -0,0 +1,87 @@
+--TEST--
+Test readfile() function : variation - various invalid paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip run only on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : int readfile(string filename [, bool use_include_path[, resource context]])
+ * Description: Output a file or a URL
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing readfile() : variation ***\n";
+
+/* An array of files */
+$names_arr = array(
+ /* Invalid args */
+ "-1" => -1,
+ "TRUE" => TRUE,
+ "FALSE" => FALSE,
+ "NULL" => NULL,
+ "\"\"" => "",
+ "\" \"" => " ",
+ "\\0" => "\0",
+ "array()" => array(),
+
+ /* prefix with path separator of a non existing directory*/
+ "/no/such/file/dir" => "/no/such/file/dir",
+ "php/php"=> "php/php"
+
+);
+
+foreach($names_arr as $key => $value) {
+ echo "\n-- Filename: $key --\n";
+ readfile($value);
+};
+
+?>
+===Done===
+--EXPECTF--
+*** Testing readfile() : variation ***
+
+-- Filename: -1 --
+
+Warning: readfile(-1): failed to open stream: No such file or directory in %s on line %d
+
+-- Filename: TRUE --
+
+Warning: readfile(1): failed to open stream: No such file or directory in %s on line %d
+
+-- Filename: FALSE --
+
+Warning: readfile(): Filename cannot be empty in %s on line %d
+
+-- Filename: NULL --
+
+Warning: readfile(): Filename cannot be empty in %s on line %d
+
+-- Filename: "" --
+
+Warning: readfile(): Filename cannot be empty in %s on line %d
+
+-- Filename: " " --
+
+Warning: readfile( ): failed to open stream: Permission denied in %s on line %d
+
+-- Filename: \0 --
+
+Warning: readfile(): Filename cannot be empty in %s on line %d
+
+-- Filename: array() --
+
+Warning: readfile() expects parameter 1 to be string, array given in %s on line %d
+
+-- Filename: /no/such/file/dir --
+
+Warning: readfile(/no/such/file/dir): failed to open stream: No such file or directory in %s on line %d
+
+-- Filename: php/php --
+
+Warning: readfile(php/php): failed to open stream: No such file or directory in %s on line %d
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/file/readfile_variation10.phpt b/ext/standard/tests/file/readfile_variation10.phpt
new file mode 100644
index 000000000..7072830da
--- /dev/null
+++ b/ext/standard/tests/file/readfile_variation10.phpt
Binary files differ
diff --git a/ext/standard/tests/file/readfile_variation4.phpt b/ext/standard/tests/file/readfile_variation4.phpt
new file mode 100644
index 000000000..94b3326b5
--- /dev/null
+++ b/ext/standard/tests/file/readfile_variation4.phpt
@@ -0,0 +1,251 @@
+--TEST--
+Test readfile() function : usage variation
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : int readfile(string filename [, bool use_include_path[, resource context]])
+ * Description: Output a file or a URL
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing readfile() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$filename = 'readFileVar4.tmp';
+$use_include_path = false;
+$h = fopen($filename,'wb');
+fwrite($h, "testing readfile");
+fclose($h);
+
+
+$fileRes = fopen(__FILE__, 'r');
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // file resource
+ 'file resource' => $fileRes,
+);
+
+// loop through each element of the array for context
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ $h = readfile($filename, $use_include_path, $value);
+ if ($h == false) {
+ echo "file not read\n";
+ }
+ else {
+ echo "\n";
+ }
+};
+
+unlink($filename);
+fclose($fileRes);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing readfile() : usage variation ***
+
+--int 0--
+Error: 2 - readfile() expects parameter 3 to be resource, integer given, %s(%d)
+file not read
+
+--int 1--
+Error: 2 - readfile() expects parameter 3 to be resource, integer given, %s(%d)
+file not read
+
+--int 12345--
+Error: 2 - readfile() expects parameter 3 to be resource, integer given, %s(%d)
+file not read
+
+--int -12345--
+Error: 2 - readfile() expects parameter 3 to be resource, integer given, %s(%d)
+file not read
+
+--float 10.5--
+Error: 2 - readfile() expects parameter 3 to be resource, double given, %s(%d)
+file not read
+
+--float -10.5--
+Error: 2 - readfile() expects parameter 3 to be resource, double given, %s(%d)
+file not read
+
+--float 12.3456789000e10--
+Error: 2 - readfile() expects parameter 3 to be resource, double given, %s(%d)
+file not read
+
+--float -12.3456789000e10--
+Error: 2 - readfile() expects parameter 3 to be resource, double given, %s(%d)
+file not read
+
+--float .5--
+Error: 2 - readfile() expects parameter 3 to be resource, double given, %s(%d)
+file not read
+
+--empty array--
+Error: 2 - readfile() expects parameter 3 to be resource, array given, %s(%d)
+file not read
+
+--int indexed array--
+Error: 2 - readfile() expects parameter 3 to be resource, array given, %s(%d)
+file not read
+
+--associative array--
+Error: 2 - readfile() expects parameter 3 to be resource, array given, %s(%d)
+file not read
+
+--nested arrays--
+Error: 2 - readfile() expects parameter 3 to be resource, array given, %s(%d)
+file not read
+
+--uppercase NULL--
+testing readfile
+
+--lowercase null--
+testing readfile
+
+--lowercase true--
+Error: 2 - readfile() expects parameter 3 to be resource, boolean given, %s(%d)
+file not read
+
+--lowercase false--
+Error: 2 - readfile() expects parameter 3 to be resource, boolean given, %s(%d)
+file not read
+
+--uppercase TRUE--
+Error: 2 - readfile() expects parameter 3 to be resource, boolean given, %s(%d)
+file not read
+
+--uppercase FALSE--
+Error: 2 - readfile() expects parameter 3 to be resource, boolean given, %s(%d)
+file not read
+
+--empty string DQ--
+Error: 2 - readfile() expects parameter 3 to be resource, string given, %s(%d)
+file not read
+
+--empty string SQ--
+Error: 2 - readfile() expects parameter 3 to be resource, string given, %s(%d)
+file not read
+
+--string DQ--
+Error: 2 - readfile() expects parameter 3 to be resource, string given, %s(%d)
+file not read
+
+--string SQ--
+Error: 2 - readfile() expects parameter 3 to be resource, string given, %s(%d)
+file not read
+
+--mixed case string--
+Error: 2 - readfile() expects parameter 3 to be resource, string given, %s(%d)
+file not read
+
+--heredoc--
+Error: 2 - readfile() expects parameter 3 to be resource, string given, %s(%d)
+file not read
+
+--instance of classWithToString--
+Error: 2 - readfile() expects parameter 3 to be resource, object given, %s(%d)
+file not read
+
+--instance of classWithoutToString--
+Error: 2 - readfile() expects parameter 3 to be resource, object given, %s(%d)
+file not read
+
+--undefined var--
+testing readfile
+
+--unset var--
+testing readfile
+
+--file resource--
+Error: 2 - readfile(): supplied resource is not a valid Stream-Context resource, %s(%d)
+testing readfile
+===DONE===
diff --git a/ext/standard/tests/file/readfile_variation5.phpt b/ext/standard/tests/file/readfile_variation5.phpt
new file mode 100644
index 000000000..21856f813
--- /dev/null
+++ b/ext/standard/tests/file/readfile_variation5.phpt
@@ -0,0 +1,221 @@
+--TEST--
+Test readfile() function : usage variation
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : int readfile(string filename [, bool use_include_path[, resource context]])
+ * Description: Output a file or a URL
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing readfile() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$filename = 'readFileVar5.tmp';
+$use_include_path = false;
+$h = fopen($filename,'wb');
+fwrite($h, "testing readfile");
+fclose($h);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for use_include_path
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ $res = readfile($filename, $value);
+ if ($res == false) {
+ echo "File not read\n";
+ }
+ else {
+ echo "\n";
+ }
+};
+
+unlink($filename);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing readfile() : usage variation ***
+
+--int 0--
+testing readfile
+
+--int 1--
+testing readfile
+
+--int 12345--
+testing readfile
+
+--int -12345--
+testing readfile
+
+--float 10.5--
+testing readfile
+
+--float -10.5--
+testing readfile
+
+--float 12.3456789000e10--
+testing readfile
+
+--float -12.3456789000e10--
+testing readfile
+
+--float .5--
+testing readfile
+
+--empty array--
+Error: 2 - readfile() expects parameter 2 to be boolean, array given, %s(%d)
+File not read
+
+--int indexed array--
+Error: 2 - readfile() expects parameter 2 to be boolean, array given, %s(%d)
+File not read
+
+--associative array--
+Error: 2 - readfile() expects parameter 2 to be boolean, array given, %s(%d)
+File not read
+
+--nested arrays--
+Error: 2 - readfile() expects parameter 2 to be boolean, array given, %s(%d)
+File not read
+
+--uppercase NULL--
+testing readfile
+
+--lowercase null--
+testing readfile
+
+--lowercase true--
+testing readfile
+
+--lowercase false--
+testing readfile
+
+--uppercase TRUE--
+testing readfile
+
+--uppercase FALSE--
+testing readfile
+
+--empty string DQ--
+testing readfile
+
+--empty string SQ--
+testing readfile
+
+--string DQ--
+testing readfile
+
+--string SQ--
+testing readfile
+
+--mixed case string--
+testing readfile
+
+--heredoc--
+testing readfile
+
+--instance of classWithToString--
+Error: 2 - readfile() expects parameter 2 to be boolean, object given, %s(%d)
+File not read
+
+--instance of classWithoutToString--
+Error: 2 - readfile() expects parameter 2 to be boolean, object given, %s(%d)
+File not read
+
+--undefined var--
+testing readfile
+
+--unset var--
+testing readfile
+===DONE===
diff --git a/ext/standard/tests/file/readfile_variation6.phpt b/ext/standard/tests/file/readfile_variation6.phpt
new file mode 100644
index 000000000..02e708220
--- /dev/null
+++ b/ext/standard/tests/file/readfile_variation6.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test readfile() function : variation - test include path
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : int readfile(string filename [, bool use_include_path[, resource context]])
+ * Description: Output a file or a URL
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+require_once('fopen_include_path.inc');
+
+echo "*** Testing readfile() : variation ***\n";
+// this doesn't create the include dirs in this directory
+// we change to this to ensure we are not part of the
+// include paths.
+$thisTestDir = "readfileVar6.dir";
+mkdir($thisTestDir);
+chdir($thisTestDir);
+
+$filename = "afile.txt";
+$secondFile = $dir2."/".$filename;
+
+$newpath = create_include_path();
+set_include_path($newpath);
+runtest();
+teardown_include_path();
+restore_include_path();
+chdir("..");
+rmdir($thisTestDir);
+
+
+function runtest() {
+ global $secondFile, $filename;
+ $h = fopen($secondFile, "w");
+ fwrite($h, "File in include path");
+ fclose($h);
+ readfile($filename, true);
+ echo "\n";
+ unlink($secondFile);
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing readfile() : variation ***
+File in include path
+===DONE===
diff --git a/ext/standard/tests/file/readfile_variation7.phpt b/ext/standard/tests/file/readfile_variation7.phpt
new file mode 100644
index 000000000..d26f52f49
--- /dev/null
+++ b/ext/standard/tests/file/readfile_variation7.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test readfile() function : variation
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : int readfile(string filename [, bool use_include_path[, resource context]])
+ * Description: Output a file or a URL
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+require_once('fopen_include_path.inc');
+
+echo "*** Testing readfile() : variation ***\n";
+// this doesn't create the include dirs in this directory
+// we change to this to ensure we are not part of the
+// include paths.
+$thisTestDir = "readfileVar7.dir";
+mkdir($thisTestDir);
+chdir($thisTestDir);
+
+$filename = "readFileVar7.tmp";
+$scriptLocFile = dirname(__FILE__)."/".$filename;
+
+$newpath = create_include_path();
+set_include_path($newpath);
+runtest();
+teardown_include_path();
+restore_include_path();
+chdir("..");
+rmdir($thisTestDir);
+
+
+function runtest() {
+ global $scriptLocFile, $filename;
+ $h = fopen($scriptLocFile, "w");
+ fwrite($h, "File in script location");
+ fclose($h);
+ readfile($filename, true);
+ echo "\n";
+ unlink($scriptLocFile);
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing readfile() : variation ***
+File in script location
+===DONE===
diff --git a/ext/standard/tests/file/readfile_variation8-win32.phpt b/ext/standard/tests/file/readfile_variation8-win32.phpt
new file mode 100644
index 000000000..a66af5d25
--- /dev/null
+++ b/ext/standard/tests/file/readfile_variation8-win32.phpt
@@ -0,0 +1,109 @@
+--TEST--
+Test readfile() function : variation
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Only valid for Windows");
+?>
+--FILE--
+<?php
+/* Prototype : int readfile(string filename [, bool use_include_path[, resource context]])
+ * Description: Output a file or a URL
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing readfile() : variation ***\n";
+$mainDir = "readfileVar8";
+$subDir = "readfileVar8Sub";
+$absMainDir = dirname(__FILE__)."\\".$mainDir;
+mkdir($absMainDir);
+$absSubDir = $absMainDir."\\".$subDir;
+mkdir($absSubDir);
+
+$theFile = "fileToRead.tmp";
+$absFile = $absSubDir.'/'.$theFile;
+
+// create the file
+$h = fopen($absFile,"w");
+fwrite($h, "The File Contents");
+fclose($h);
+
+
+$old_dir_path = getcwd();
+chdir(dirname(__FILE__));
+$unixifiedDir = '/'.substr(str_replace('\\','/',$absSubDir),3);
+
+$allDirs = array(
+ // absolute paths
+ "$absSubDir\\",
+ "$absSubDir\\..\\".$subDir,
+ "$absSubDir\\\\..\\.\\".$subDir,
+ "$absSubDir\\..\\..\\".$mainDir."\\.\\".$subDir,
+ "$absSubDir\\..\\\\\\".$subDir."\\\\..\\\\..\\".$subDir,
+ "$absSubDir\\BADDIR",
+
+ // relative paths
+ $mainDir."\\".$subDir,
+ $mainDir."\\\\".$subDir,
+ $mainDir."\\\\\\".$subDir,
+ ".\\".$mainDir."\\..\\".$mainDir."\\".$subDir,
+ "BADDIR",
+
+ // unixifed path
+ $unixifiedDir,
+);
+
+for($i = 0; $i<count($allDirs); $i++) {
+ $j = $i+1;
+ $dir = $allDirs[$i];
+ echo "\n-- $dir --\n";
+ $ok = readfile($dir.'\\'.$theFile);
+ if ($ok === 1) {
+ echo "\n";
+ }
+}
+
+unlink($absFile);
+chdir($old_dir_path);
+rmdir($absSubDir);
+rmdir($absMainDir);
+
+echo "\n*** Done ***\n";
+?>
+--EXPECTF--
+*** Testing readfile() : variation ***
+
+-- %s\readfileVar8\readfileVar8Sub\ --
+The File Contents
+-- %s\readfileVar8\readfileVar8Sub\..\readfileVar8Sub --
+The File Contents
+-- %s\readfileVar8\readfileVar8Sub\\..\.\readfileVar8Sub --
+The File Contents
+-- %s\readfileVar8\readfileVar8Sub\..\..\readfileVar8\.\readfileVar8Sub --
+The File Contents
+-- %s\readfileVar8\readfileVar8Sub\..\\\readfileVar8Sub\\..\\..\readfileVar8Sub --
+
+Warning: readfile(%s\readfileVar8\readfileVar8Sub\..\\\readfileVar8Sub\\..\\..\readfileVar8Sub\fileToRead.tmp): failed to open stream: No such file or directory in %s on line %d
+
+-- %s\readfileVar8\readfileVar8Sub\BADDIR --
+
+Warning: readfile(%s\readfileVar8\readfileVar8Sub\BADDIR\fileToRead.tmp): failed to open stream: No such file or directory in %s on line %d
+
+-- readfileVar8\readfileVar8Sub --
+The File Contents
+-- readfileVar8\\readfileVar8Sub --
+The File Contents
+-- readfileVar8\\\readfileVar8Sub --
+The File Contents
+-- .\readfileVar8\..\readfileVar8\readfileVar8Sub --
+The File Contents
+-- BADDIR --
+
+Warning: readfile(BADDIR\fileToRead.tmp): failed to open stream: No such file or directory in %s on line %d
+
+-- /%s/readfileVar8/readfileVar8Sub --
+The File Contents
+*** Done *** \ No newline at end of file
diff --git a/ext/standard/tests/file/readfile_variation9.phpt b/ext/standard/tests/file/readfile_variation9.phpt
new file mode 100644
index 000000000..c802f4018
--- /dev/null
+++ b/ext/standard/tests/file/readfile_variation9.phpt
@@ -0,0 +1,99 @@
+--TEST--
+Test readfile() function : variation - variable types of path
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : int readfile(string filename [, bool use_include_path[, resource context]])
+ * Description: Output a file or a URL
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing readfile() : variation ***\n";
+$mainDir = "readfileVar8";
+$subDir = "readfileVar8Sub";
+$absMainDir = dirname(__FILE__)."/".$mainDir;
+mkdir($absMainDir);
+$absSubDir = $absMainDir."/".$subDir;
+mkdir($absSubDir);
+
+$theFile = "fileToRead.tmp";
+$absFile = $absSubDir.'/'.$theFile;
+
+// create the file
+$h = fopen($absFile,"w");
+fwrite($h, "The File Contents");
+fclose($h);
+
+
+$old_dir_path = getcwd();
+chdir(dirname(__FILE__));
+
+$allDirs = array(
+ // absolute paths
+ "$absSubDir/",
+ "$absSubDir/../".$subDir,
+ "$absSubDir//.././".$subDir,
+ "$absSubDir/../../".$mainDir."/./".$subDir,
+ "$absSubDir/..///".$subDir."//..//../".$subDir,
+ "$absSubDir/BADDIR",
+
+
+ // relative paths
+ $mainDir."/".$subDir,
+ $mainDir."//".$subDir,
+ $mainDir."///".$subDir,
+ "./".$mainDir."/../".$mainDir."/".$subDir,
+ "BADDIR",
+);
+
+for($i = 0; $i<count($allDirs); $i++) {
+ $j = $i+1;
+ $dir = $allDirs[$i];
+ echo "\n-- Iteration $j --\n";
+ $ok = readfile($dir.'/'.$theFile);
+ if ($ok === 1) {
+ echo "\n";
+ }
+}
+
+unlink($absFile);
+chdir($old_dir_path);
+rmdir($absSubDir);
+rmdir($absMainDir);
+
+echo "\n*** Done ***\n";
+?>
+--EXPECTF--
+*** Testing readfile() : variation ***
+
+-- Iteration 1 --
+The File Contents
+-- Iteration 2 --
+The File Contents
+-- Iteration 3 --
+The File Contents
+-- Iteration 4 --
+The File Contents
+-- Iteration 5 --
+
+Warning: readfile(%sreadfileVar8Sub/..///readfileVar8Sub//..//../readfileVar8Sub/fileToRead.tmp): failed to open stream: No such file or directory in %s on line %d
+
+-- Iteration 6 --
+
+Warning: readfile(%sreadfileVar8Sub/BADDIR/fileToRead.tmp): failed to open stream: No such file or directory in %s on line %d
+
+-- Iteration 7 --
+The File Contents
+-- Iteration 8 --
+The File Contents
+-- Iteration 9 --
+The File Contents
+-- Iteration 10 --
+The File Contents
+-- Iteration 11 --
+
+Warning: readfile(BADDIR/fileToRead.tmp): failed to open stream: No such file or directory in %s on line %d
+
+*** Done *** \ No newline at end of file
diff --git a/ext/standard/tests/file/readlink_realpath_basic1.phpt b/ext/standard/tests/file/readlink_realpath_basic1.phpt
index e2a076c94..99195e2b2 100644
--- a/ext/standard/tests/file/readlink_realpath_basic1.phpt
+++ b/ext/standard/tests/file/readlink_realpath_basic1.phpt
@@ -39,9 +39,6 @@ $linknames = array (
"$file_path/readlink_realpath_basic1/home/test/readlink_realpath_basic1_link.tmp",
"$file_path/readlink_realpath_basic1//home/test//../test/./readlink_realpath_basic1_link.tmp",
- // checking for binary safe
- b"$file_path/readlink_realpath_basic1/home/readlink_realpath_basic1_link.tmp",
-
/* linknames with invalid linkpath */
"$file_path///readlink_realpath_basic1/home//..//././test//readlink_realpath_basic1_link.tmp",
"$file_path/readlink_realpath_basic1/home/../home/../test/../readlink_realpath_basic1_link.tmp",
@@ -89,28 +86,24 @@ string(%d) "%s/readlink_realpath_basic1/home/test/readlink_realpath_basic1.tmp"
string(%d) "%s/readlink_realpath_basic1/home/test/readlink_realpath_basic1.tmp"
-- Iteration 4 --
-string(%d) "%s/readlink_realpath_basic1/home/readlink_realpath_basic1.tmp"
-string(%d) "%s/readlink_realpath_basic1/home/readlink_realpath_basic1.tmp"
-
--- Iteration 5 --
Warning: readlink(): No such file or directory in %s on line %d
bool(false)
bool(false)
--- Iteration 6 --
+-- Iteration 5 --
Warning: readlink(): No such file or directory in %s on line %d
bool(false)
bool(false)
--- Iteration 7 --
+-- Iteration 6 --
Warning: readlink(): No such file or directory in %s on line %d
bool(false)
%s
--- Iteration 8 --
+-- Iteration 7 --
Warning: readlink(): %s in %s on line %d
bool(false)
diff --git a/ext/standard/tests/file/readlink_realpath_basic2.phpt b/ext/standard/tests/file/readlink_realpath_basic2.phpt
index 7a9e741ef..91955cd4f 100644
--- a/ext/standard/tests/file/readlink_realpath_basic2.phpt
+++ b/ext/standard/tests/file/readlink_realpath_basic2.phpt
@@ -34,9 +34,6 @@ $filenames = array (
"$file_path/readlink_realpath_basic2//home/test//../test/./readlink_realpath_basic2.tmp",
"$file_path/readlink_realpath_basic2/home//../././readlink_realpath_basic2.tmp",
- // checking for binary safe
- b"$file_path/readlink_realpath_basic2/home/readlink_realpath_basic2.tmp",
-
/* filenames with invalid path */
"$file_path///readlink_realpath_basic2/home//..//././test//readlink_realpath_basic2.tmp",
"$file_path/readlink_realpath_basic2/home/../home/../test/../readlink_realpath_basic2.tmp",
@@ -79,14 +76,11 @@ string(%d) "%s/readlink_realpath_basic2/home/test/readlink_realpath_basic2.tmp"
string(%d) "%s/readlink_realpath_basic2/readlink_realpath_basic2.tmp"
-- Iteration 5 --
-string(%d) "%s/readlink_realpath_basic2/home/readlink_realpath_basic2.tmp"
+bool(false)
-- Iteration 6 --
bool(false)
-- Iteration 7 --
-bool(false)
-
--- Iteration 8 --
%s
Done
diff --git a/ext/standard/tests/file/readlink_variation1.phpt b/ext/standard/tests/file/readlink_variation1.phpt
new file mode 100644
index 000000000..86bca81fa
--- /dev/null
+++ b/ext/standard/tests/file/readlink_variation1.phpt
@@ -0,0 +1,77 @@
+--TEST--
+Test readlink() function: usage variations - invalid filenames
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip no links on Windows');
+}
+?>
+--FILE--
+<?php
+/* Prototype: string readlink ( string $path );
+ Description: Returns the target of a symbolic link */
+
+/* Testing readlink() with invalid arguments -int, float, bool, NULL, resource */
+
+$file_path = dirname(__FILE__);
+$file_handle = fopen($file_path."/readlink_variation2.tmp", "w");
+
+echo "*** Testing Invalid file types ***\n";
+$filenames = array(
+ /* Invalid filenames */
+ -2.34555,
+ "",
+ TRUE,
+ FALSE,
+ NULL,
+ $file_handle,
+
+ /* scalars */
+ 1234,
+ 0
+);
+
+/* loop through to test each element the above array */
+foreach( $filenames as $filename ) {
+ var_dump( readlink($filename) );
+ clearstatcache();
+}
+fclose($file_handle);
+
+echo "\n*** Done ***";
+?>
+--CLEAN--
+<?php
+$file_path = dirname(__FILE__);
+unlink($file_path."/readlink_variation2.tmp");
+?>
+--EXPECTF--
+*** Testing Invalid file types ***
+
+Warning: readlink(): No such file or directory in %s on line %d
+bool(false)
+
+Warning: readlink(): No such file or directory in %s on line %d
+bool(false)
+
+Warning: readlink(): No such file or directory in %s on line %d
+bool(false)
+
+Warning: readlink(): No such file or directory in %s on line %d
+bool(false)
+
+Warning: readlink(): No such file or directory in %s on line %d
+bool(false)
+
+Warning: readlink(): No such file or directory in %s on line %d
+bool(false)
+
+Warning: readlink(): No such file or directory in %s on line %d
+bool(false)
+
+Warning: readlink(): No such file or directory in %s on line %d
+bool(false)
+
+*** Done *** \ No newline at end of file
diff --git a/ext/standard/tests/file/realpath_variation2.phpt b/ext/standard/tests/file/realpath_variation2.phpt
new file mode 100644
index 000000000..a5031aa7b
--- /dev/null
+++ b/ext/standard/tests/file/realpath_variation2.phpt
@@ -0,0 +1,74 @@
+--TEST--
+Test realpath() function : variation
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == 'WIN' )
+ die("skip Not Valid for Windows");
+?>
+--FILE--
+<?php
+/* Prototype : string realpath(string path)
+ * Description: Return the resolved path
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing realpath() : variation ***\n";
+
+$paths = array('c:\\',
+ 'c:',
+ 'c' ,
+ '\\' ,
+ '/',
+ 'c:temp',
+ 'c:\\/',
+ '/tmp/',
+ '/tmp/\\',
+ '\\tmp',
+ '\\tmp\\');
+
+foreach($paths as $path) {
+ echo "\n--$path--\n";
+ var_dump( realpath($path) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing realpath() : variation ***
+
+--c:\--
+bool(false)
+
+--c:--
+bool(false)
+
+--c--
+bool(false)
+
+--\--
+bool(false)
+
+--/--
+string(1) "/"
+
+--c:temp--
+bool(false)
+
+--c:\/--
+bool(false)
+
+--/tmp/--
+string(%d) %s/tmp"
+
+--/tmp/\--
+bool(false)
+
+--\tmp--
+bool(false)
+
+--\tmp\--
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/rename_basic.phpt b/ext/standard/tests/file/rename_basic.phpt
index 28d3b1988..019d9e454 100755
--- a/ext/standard/tests/file/rename_basic.phpt
+++ b/ext/standard/tests/file/rename_basic.phpt
@@ -8,38 +8,40 @@ Test rename() function: basic functionality
echo "*** Testing rename() on non-existing file ***\n";
$file_path = dirname(__FILE__);
+require "$file_path/file.inc";
+
$src_name = "$file_path/rename_basic.tmp";
$dest_name = "$file_path/rename_basic_new.tmp";
// create the file
$fp = fopen($src_name, "w");
-$s1 = stat($src_name);
+$old_stat = stat($src_name);
fclose($fp);
var_dump( rename($src_name, $dest_name) ); // expecting true
var_dump( file_exists($src_name) ); // expecting false
var_dump( file_exists($dest_name) ); // expecting true
-$s2 = stat("$file_path/rename_basic_new.tmp");
+$new_stat = stat("$file_path/rename_basic_new.tmp");
-// checking statistics of old and renamed file - both should be same
-for ($i = 0; $i <= 12; $i++) {
- if ($s1[$i] != $s2[$i]) {
- echo "rename_basic.tmp and rename_basic_new.tmp stat differ at element $i\n";
- }
-}
+// checking statistics of old and renamed file - both should be same except ctime
+$keys_to_compare = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12,
+ "dev", "ino", "mode", "nlink", "uid", "gid",
+ "rdev", "size", "atime", "mtime", "blksize", "blocks");
+var_dump( compare_stats($old_stat, $new_stat, $keys_to_compare) );
-echo "Done\n";
?>
+===Done===
--CLEAN--
<?php
unlink(dirname(__FILE__)."/rename_basic.tmp");
unlink(dirname(__FILE__)."/rename_basic_new.tmp");
?>
---EXPECTF--
+--EXPECT--
*** Testing rename() on non-existing file ***
bool(true)
bool(false)
bool(true)
-Done
+bool(true)
+===Done===
diff --git a/ext/standard/tests/file/rename_variation-win32.phpt b/ext/standard/tests/file/rename_variation-win32.phpt
index ae9555760..7d3b1956a 100644
--- a/ext/standard/tests/file/rename_variation-win32.phpt
+++ b/ext/standard/tests/file/rename_variation-win32.phpt
@@ -71,7 +71,7 @@ bool(true)
Warning: rename(%s/rename_variation/rename_variation.tmp/,%s/rename_variation2.tmp): Invalid argument in %s on line %d
bool(false)
-bool(true)
+bool(false)
bool(false)
Warning: unlink(%s/rename_variation2.tmp): No such file or directory in %s on line %d
diff --git a/ext/standard/tests/file/rename_variation10.phpt b/ext/standard/tests/file/rename_variation10.phpt
new file mode 100644
index 000000000..fbb109cd2
--- /dev/null
+++ b/ext/standard/tests/file/rename_variation10.phpt
@@ -0,0 +1,253 @@
+--TEST--
+Test rename() function : usage variation - different types for context
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : bool rename(string old_name, string new_name[, resource context])
+ * Description: Rename a file
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing rename() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$old_name = __FILE__.'.tmp';
+$new_name = __FILE__.'.renamed';
+
+//file resource
+$fileRes = fopen(__FILE__, 'r');
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // file resource
+ 'file resource' => $fileRes,
+);
+
+// loop through each element of the array for context
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ touch($old_name);
+ $res = rename($old_name, $new_name, $value);
+ var_dump($res);
+ if ($res == true) {
+ unlink($new_name);
+ }
+ else {
+ unlink($old_name);
+ }
+};
+
+fclose($fileRes);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing rename() : usage variation ***
+
+--int 0--
+Error: 2 - rename() expects parameter 3 to be resource, integer given, %s(%d)
+bool(false)
+
+--int 1--
+Error: 2 - rename() expects parameter 3 to be resource, integer given, %s(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - rename() expects parameter 3 to be resource, integer given, %s(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - rename() expects parameter 3 to be resource, integer given, %s(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - rename() expects parameter 3 to be resource, double given, %s(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - rename() expects parameter 3 to be resource, double given, %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - rename() expects parameter 3 to be resource, double given, %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - rename() expects parameter 3 to be resource, double given, %s(%d)
+bool(false)
+
+--float .5--
+Error: 2 - rename() expects parameter 3 to be resource, double given, %s(%d)
+bool(false)
+
+--empty array--
+Error: 2 - rename() expects parameter 3 to be resource, array given, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - rename() expects parameter 3 to be resource, array given, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - rename() expects parameter 3 to be resource, array given, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - rename() expects parameter 3 to be resource, array given, %s(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - rename() expects parameter 3 to be resource, null given, %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - rename() expects parameter 3 to be resource, null given, %s(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - rename() expects parameter 3 to be resource, boolean given, %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - rename() expects parameter 3 to be resource, boolean given, %s(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - rename() expects parameter 3 to be resource, boolean given, %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - rename() expects parameter 3 to be resource, boolean given, %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - rename() expects parameter 3 to be resource, string given, %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - rename() expects parameter 3 to be resource, string given, %s(%d)
+bool(false)
+
+--string DQ--
+Error: 2 - rename() expects parameter 3 to be resource, string given, %s(%d)
+bool(false)
+
+--string SQ--
+Error: 2 - rename() expects parameter 3 to be resource, string given, %s(%d)
+bool(false)
+
+--mixed case string--
+Error: 2 - rename() expects parameter 3 to be resource, string given, %s(%d)
+bool(false)
+
+--heredoc--
+Error: 2 - rename() expects parameter 3 to be resource, string given, %s(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - rename() expects parameter 3 to be resource, object given, %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - rename() expects parameter 3 to be resource, object given, %s(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - rename() expects parameter 3 to be resource, null given, %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - rename() expects parameter 3 to be resource, null given, %s(%d)
+bool(false)
+
+--file resource--
+Error: 2 - rename(): supplied resource is not a valid Stream-Context resource, %s(%d)
+bool(true)
+===DONE===
diff --git a/ext/standard/tests/file/rename_variation11-win32.phpt b/ext/standard/tests/file/rename_variation11-win32.phpt
new file mode 100644
index 000000000..d17b0d283
--- /dev/null
+++ b/ext/standard/tests/file/rename_variation11-win32.phpt
@@ -0,0 +1,128 @@
+--TEST--
+Test rename() function : variation - various relative, absolute paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Only valid for Windows");
+?>
+--FILE--
+<?php
+/* Prototype : bool rename(string old_name, string new_name[, resource context])
+ * Description: Rename a file
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing rename() with absolute and relative paths ***\n";
+$mainDir = "renameVar11";
+$subDir = "renameVar11Sub";
+$absMainDir = dirname(__FILE__)."\\".$mainDir;
+mkdir($absMainDir);
+$absSubDir = $absMainDir."\\".$subDir;
+mkdir($absSubDir);
+
+$fromFile = "renameMe.tmp";
+$toFile = "IwasRenamed.tmp";
+
+$old_dir_path = getcwd();
+chdir(dirname(__FILE__));
+$unixifiedDir = '/'.substr(str_replace('\\','/',$absSubDir),3);
+
+
+$allDirs = array(
+ // absolute paths
+ "$absSubDir\\",
+ "$absSubDir\\..\\".$subDir,
+ "$absSubDir\\\\..\\.\\".$subDir,
+ "$absSubDir\\..\\..\\".$mainDir."\\.\\".$subDir,
+ "$absSubDir\\..\\\\\\".$subDir."\\\\..\\\\..\\".$subDir,
+ "$absSubDir\\BADDIR",
+
+ // relative paths
+ $mainDir."\\".$subDir,
+ $mainDir."\\\\".$subDir,
+ $mainDir."\\\\\\".$subDir,
+ ".\\".$mainDir."\\..\\".$mainDir."\\".$subDir,
+ "BADDIR",
+
+ // unixifed path
+ $unixifiedDir,
+);
+
+for($i = 0; $i<count($allDirs); $i++) {
+ $j = $i+1;
+ $dir = $allDirs[$i];
+ echo "\n-- Iteration $j --\n";
+ touch($absSubDir."\\".$fromFile);
+ $res = rename($dir."\\".$fromFile, $dir."\\".$toFile);
+ var_dump($res);
+ if ($res == true) {
+ $res = rename($dir."\\".$toFile, $dir."\\".$fromFile);
+ var_dump($res);
+ }
+ unlink($absSubDir."\\".$fromFile);
+}
+
+chdir($old_dir_path);
+rmdir($absSubDir);
+rmdir($absMainDir);
+
+echo "\n*** Done ***\n";
+?>
+--EXPECTF--
+*** Testing rename() with absolute and relative paths ***
+
+-- Iteration 1 --
+bool(true)
+bool(true)
+
+-- Iteration 2 --
+bool(true)
+bool(true)
+
+-- Iteration 3 --
+bool(true)
+bool(true)
+
+-- Iteration 4 --
+bool(true)
+bool(true)
+
+-- Iteration 5 --
+
+Warning: rename(%s\renameVar11\renameVar11Sub\..\\\renameVar11Sub\\..\\..\renameVar11Sub\renameMe.tmp,%s\renameVar11\renameVar11Sub\..\\\renameVar11Sub\\..\\..\renameVar11Sub\IwasRenamed.tmp): No such file or directory in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Warning: rename(%s\renameVar11\renameVar11Sub\BADDIR\renameMe.tmp,%s\renameVar11\renameVar11Sub\BADDIR\IwasRenamed.tmp): No such file or directory in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+bool(true)
+bool(true)
+
+-- Iteration 8 --
+bool(true)
+bool(true)
+
+-- Iteration 9 --
+bool(true)
+bool(true)
+
+-- Iteration 10 --
+bool(true)
+bool(true)
+
+-- Iteration 11 --
+
+Warning: rename(BADDIR\renameMe.tmp,BADDIR\IwasRenamed.tmp): No such file or directory in %s on line %d
+bool(false)
+
+-- Iteration 12 --
+bool(true)
+bool(true)
+
+*** Done *** \ No newline at end of file
diff --git a/ext/standard/tests/file/rename_variation12.phpt b/ext/standard/tests/file/rename_variation12.phpt
new file mode 100644
index 000000000..11274f03d
--- /dev/null
+++ b/ext/standard/tests/file/rename_variation12.phpt
@@ -0,0 +1,117 @@
+--TEST--
+Test rename() function : variation - various relative, absolute paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : bool rename(string old_name, string new_name[, resource context])
+ * Description: Rename a file
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+/* Creating unique files in various dirs by passing relative paths to $dir arg */
+
+echo "*** Testing rename() with absolute and relative paths ***\n";
+$mainDir = "renameVar11";
+$subDir = "renameVar11Sub";
+$absMainDir = dirname(__FILE__)."/".$mainDir;
+mkdir($absMainDir);
+$absSubDir = $absMainDir."/".$subDir;
+mkdir($absSubDir);
+
+$fromFile = "renameMe.tmp";
+$toFile = "IwasRenamed.tmp";
+
+$old_dir_path = getcwd();
+chdir(dirname(__FILE__));
+
+$allDirs = array(
+ // absolute paths
+ "$absSubDir/",
+ "$absSubDir/../".$subDir,
+ "$absSubDir//.././".$subDir,
+ "$absSubDir/../../".$mainDir."/./".$subDir,
+ "$absSubDir/..///".$subDir."//..//../".$subDir,
+ "$absSubDir/BADDIR",
+
+
+ // relative paths
+ $mainDir."/".$subDir,
+ $mainDir."//".$subDir,
+ $mainDir."///".$subDir,
+ "./".$mainDir."/../".$mainDir."/".$subDir,
+ "BADDIR",
+);
+
+for($i = 0; $i<count($allDirs); $i++) {
+ $j = $i+1;
+ $dir = $allDirs[$i];
+ echo "\n-- Iteration $j --\n";
+ touch($absSubDir."/".$fromFile);
+ $res = rename($dir."/".$fromFile, $dir."/".$toFile);
+ var_dump($res);
+ if ($res == true) {
+ $res = rename($dir."/".$toFile, $dir."/".$fromFile);
+ var_dump($res);
+ }
+ unlink($absSubDir."/".$fromFile);
+}
+
+chdir($old_dir_path);
+rmdir($absSubDir);
+rmdir($absMainDir);
+
+echo "\n*** Done ***\n";
+?>
+--EXPECTF--
+*** Testing rename() with absolute and relative paths ***
+
+-- Iteration 1 --
+bool(true)
+bool(true)
+
+-- Iteration 2 --
+bool(true)
+bool(true)
+
+-- Iteration 3 --
+bool(true)
+bool(true)
+
+-- Iteration 4 --
+bool(true)
+bool(true)
+
+-- Iteration 5 --
+
+Warning: rename(%s/renameVar11/renameVar11Sub/..///renameVar11Sub//..//../renameVar11Sub/renameMe.tmp,%s/renameVar11/renameVar11Sub/..///renameVar11Sub//..//../renameVar11Sub/IwasRenamed.tmp): No such file or directory in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+
+Warning: rename(%s/renameVar11/renameVar11Sub/BADDIR/renameMe.tmp,%s/renameVar11/renameVar11Sub/BADDIR/IwasRenamed.tmp): No such file or directory in %s on line %d
+bool(false)
+
+-- Iteration 7 --
+bool(true)
+bool(true)
+
+-- Iteration 8 --
+bool(true)
+bool(true)
+
+-- Iteration 9 --
+bool(true)
+bool(true)
+
+-- Iteration 10 --
+bool(true)
+bool(true)
+
+-- Iteration 11 --
+
+Warning: rename(BADDIR/renameMe.tmp,BADDIR/IwasRenamed.tmp): No such file or directory in %s on line %d
+bool(false)
+
+*** Done *** \ No newline at end of file
diff --git a/ext/standard/tests/file/rename_variation13-win32.phpt b/ext/standard/tests/file/rename_variation13-win32.phpt
new file mode 100644
index 000000000..1407c01c2
--- /dev/null
+++ b/ext/standard/tests/file/rename_variation13-win32.phpt
@@ -0,0 +1,139 @@
+--TEST--
+Test rename() function : variation - various invalid paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip run only on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : bool rename(string old_name, string new_name[, resource context])
+ * Description: Rename a file
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+
+echo "*** Testing rename() with obscure files ***\n";
+$file_path = dirname(__FILE__)."/renameVar13";
+$aFile = $file_path.'/afile.tmp';
+
+mkdir($file_path);
+
+/* An array of files */
+$names_arr = array(
+ /* Invalid args */
+ -1,
+ TRUE,
+ FALSE,
+ NULL,
+ // I think both p8 and php are wrong on the messages here
+ "",
+ //p8 generates different messages to php, php is probably wrong
+ //php has either "File Exists" or "Permission Denied".
+ " ",
+ "\0",
+
+ // as before
+ array(),
+
+ /* prefix with path separator of a non existing directory*/
+ "/no/such/file/dir",
+ "php/php"
+
+);
+
+for( $i=0; $i<count($names_arr); $i++ ) {
+ $name = $names_arr[$i];
+ echo "-- testing '$name' --\n";
+ touch($aFile);
+ var_dump(rename($aFile, $name));
+ if (file_exists($name)) {
+ unlink($name);
+ }
+ if (file_exists($aFile)) {
+ unlink($aFile);
+ }
+ var_dump(rename($name, $aFile));
+ if (file_exists($aFile)) {
+ unlink($aFile);
+ }
+}
+
+rmdir($file_path);
+echo "\n*** Done ***\n";
+?>
+--EXPECTF--
+*** Testing rename() with obscure files ***
+-- testing '-1' --
+bool(true)
+
+Warning: rename(-1,%s/renameVar13/afile.tmp): No such file or directory in %s on line %d
+bool(false)
+-- testing '1' --
+bool(true)
+
+Warning: rename(1,%s/renameVar13/afile.tmp): No such file or directory in %s on line %d
+bool(false)
+-- testing '' --
+
+Warning: rename(%s/renameVar13/afile.tmp,): No such file or directory in %s on line %d
+bool(false)
+
+Warning: rename(,%s/renameVar13/afile.tmp): No such file or directory in %s on line %d
+bool(false)
+-- testing '' --
+
+Warning: rename(%s/renameVar13/afile.tmp,): No such file or directory in %s on line %d
+bool(false)
+
+Warning: rename(,%s/renameVar13/afile.tmp): No such file or directory in %s on line %d
+bool(false)
+-- testing '' --
+
+Warning: rename(%s/renameVar13/afile.tmp,): No such file or directory in %s on line %d
+bool(false)
+
+Warning: rename(,%s/renameVar13/afile.tmp): No such file or directory in %s on line %d
+bool(false)
+-- testing ' ' --
+
+Warning: rename(%s/renameVar13/afile.tmp, ): %s in %s on line %d
+bool(false)
+
+Warning: rename( ,%s/renameVar13/afile.tmp): %s in %s on line %d
+bool(false)
+-- testing '%s' --
+
+Warning: rename(%s/renameVar13/afile.tmp,): %s in %s on line %d
+bool(false)
+
+Warning: rename(,%s/renameVar13/afile.tmp): %s in %s on line %d
+bool(false)
+-- testing 'Array' --
+
+Warning: rename() expects parameter 2 to be string, array given in %s on line %d
+bool(false)
+
+Notice: Array to string conversion in %s on line %d
+
+Warning: rename() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+-- testing '/no/such/file/dir' --
+
+Warning: rename(%s/renameVar13/afile.tmp,/no/such/file/dir): No such file or directory in %s on line %d
+bool(false)
+
+Warning: rename(/no/such/file/dir,%s/renameVar13/afile.tmp): No such file or directory in %s on line %d
+bool(false)
+-- testing 'php/php' --
+
+Warning: rename(%s/renameVar13/afile.tmp,php/php): No such file or directory in %s on line %d
+bool(false)
+
+Warning: rename(php/php,%s/renameVar13/afile.tmp): No such file or directory in %s on line %d
+bool(false)
+
+*** Done *** \ No newline at end of file
diff --git a/ext/standard/tests/file/rename_variation13.phpt b/ext/standard/tests/file/rename_variation13.phpt
new file mode 100644
index 000000000..d3082ab38
--- /dev/null
+++ b/ext/standard/tests/file/rename_variation13.phpt
@@ -0,0 +1,132 @@
+--TEST--
+Test rename() function : variation - various invalid paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip Not for Windows");
+?>
+--FILE--
+<?php
+/* Prototype : bool rename(string old_name, string new_name[, resource context])
+ * Description: Rename a file
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+
+echo "*** Testing rename() with obscure files ***\n";
+$file_path = dirname(__FILE__)."/renameVar13";
+$aFile = $file_path.'/afile.tmp';
+
+mkdir($file_path);
+
+/* An array of files */
+$names_arr = array(
+ /* Invalid args */
+ -1,
+ TRUE,
+ FALSE,
+ NULL,
+ "",
+ " ",
+ "\0",
+ array(),
+
+ /* prefix with path separator of a non existing directory*/
+ "/no/such/file/dir",
+ "php/php"
+
+);
+
+for( $i=0; $i<count($names_arr); $i++ ) {
+ $name = $names_arr[$i];
+ echo "-- testing '$name' --\n";
+ touch($aFile);
+ var_dump(rename($aFile, $name));
+ if (file_exists($name)) {
+ unlink($name);
+ }
+ if (file_exists($aFile)) {
+ unlink($aFile);
+ }
+ var_dump(rename($name, $aFile));
+ if (file_exists($aFile)) {
+ unlink($aFile);
+ }
+}
+
+rmdir($file_path);
+echo "\n*** Done ***\n";
+?>
+--EXPECTF--
+*** Testing rename() with obscure files ***
+-- testing '-1' --
+bool(true)
+
+Warning: rename(-1,%s/renameVar13/afile.tmp): No such file or directory in %s on line %d
+bool(false)
+-- testing '1' --
+bool(true)
+
+Warning: rename(1,%s/renameVar13/afile.tmp): No such file or directory in %s on line %d
+bool(false)
+-- testing '' --
+
+Warning: rename(%s/renameVar13/afile.tmp,): No such file or directory in %s on line %d
+bool(false)
+
+Warning: rename(,%s/renameVar13/afile.tmp): No such file or directory in %s on line %d
+bool(false)
+-- testing '' --
+
+Warning: rename(%s/renameVar13/afile.tmp,): No such file or directory in %s on line %d
+bool(false)
+
+Warning: rename(,%s/renameVar13/afile.tmp): No such file or directory in %s on line %d
+bool(false)
+-- testing '' --
+
+Warning: rename(%s/renameVar13/afile.tmp,): No such file or directory in %s on line %d
+bool(false)
+
+Warning: rename(,%s/renameVar13/afile.tmp): No such file or directory in %s on line %d
+bool(false)
+-- testing ' ' --
+bool(true)
+
+Warning: rename( ,%s/renameVar13/afile.tmp): No such file or directory in %s on line %d
+bool(false)
+-- testing '%s' --
+
+Warning: rename(%s/renameVar13/afile.tmp,): %s in %s on line %d
+bool(false)
+
+Warning: rename(,%s/renameVar13/afile.tmp): No such file or directory in %s on line %d
+bool(false)
+-- testing 'Array' --
+
+Warning: rename() expects parameter 2 to be string, array given in %s on line %d
+bool(false)
+
+Notice: Array to string conversion in %s on line %d
+
+Warning: rename() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+-- testing '/no/such/file/dir' --
+
+Warning: rename(%s/renameVar13/afile.tmp,/no/such/file/dir): No such file or directory in %s on line %d
+bool(false)
+
+Warning: rename(/no/such/file/dir,%s/renameVar13/afile.tmp): No such file or directory in %s on line %d
+bool(false)
+-- testing 'php/php' --
+
+Warning: rename(%s/renameVar13/afile.tmp,php/php): %s directory in %s on line %d
+bool(false)
+
+Warning: rename(php/php,%s/renameVar13/afile.tmp): %s directory in %s on line %d
+bool(false)
+
+*** Done *** \ No newline at end of file
diff --git a/ext/standard/tests/file/rmdir_variation1-win32.phpt b/ext/standard/tests/file/rmdir_variation1-win32.phpt
new file mode 100644
index 000000000..0732821c5
--- /dev/null
+++ b/ext/standard/tests/file/rmdir_variation1-win32.phpt
@@ -0,0 +1,127 @@
+--TEST--
+Test rmdir() function : usage variation - invalid filenames
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Only valid for Windows");
+?>
+--FILE--
+<?php
+/* Prototype : bool rmdir(string dirname[, resource context])
+ * Description: Remove a directory
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing rmdir() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase false' =>false,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // other
+ // php outputs Permission Denied, p8 outputs no suck file or dir
+ 'single space' => ' ',
+);
+
+// loop through each element of the array for dirname
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( rmdir($value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing rmdir() : usage variation ***
+
+--uppercase NULL--
+Error: 2 - rmdir(): No such file or directory, %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - rmdir(): No such file or directory, %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - rmdir(): No such file or directory, %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - rmdir(): No such file or directory, %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - rmdir(): No such file or directory, %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - rmdir(): No such file or directory, %s(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - rmdir(): No such file or directory, %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - rmdir(): No such file or directory, %s(%d)
+bool(false)
+
+--single space--
+Error: 2 - rmdir( ): %s, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/file/rmdir_variation1.phpt b/ext/standard/tests/file/rmdir_variation1.phpt
new file mode 100644
index 000000000..a7a499007
--- /dev/null
+++ b/ext/standard/tests/file/rmdir_variation1.phpt
@@ -0,0 +1,127 @@
+--TEST--
+Test rmdir() function : usage variation - invalid file names
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip Not valid for Windows");
+?>
+--FILE--
+<?php
+/* Prototype : bool rmdir(string dirname[, resource context])
+ * Description: Remove a directory
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing rmdir() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase false' =>false,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // other
+ 'single space' => ' ',
+);
+
+// loop through each element of the array for dirname
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( rmdir($value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing rmdir() : usage variation ***
+
+--uppercase NULL--
+Error: 2 - rmdir(): %s, %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - rmdir(): %s, %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - rmdir(): %s, %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - rmdir(): %s, %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - rmdir(): %s, %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - rmdir(): %s, %s(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - rmdir(): %s, %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - rmdir(): %s, %s(%d)
+bool(false)
+
+--single space--
+Error: 2 - rmdir( ): %s, %s(%d)
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/file/rmdir_variation2.phpt b/ext/standard/tests/file/rmdir_variation2.phpt
new file mode 100644
index 000000000..2cee44083
--- /dev/null
+++ b/ext/standard/tests/file/rmdir_variation2.phpt
@@ -0,0 +1,244 @@
+--TEST--
+Test rmdir() function : usage variation - different types for context
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : bool rmdir(string dirname[, resource context])
+ * Description: Remove a directory
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing rmdir() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$dirname = 'rmdirVar2.tmp';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+$fileres = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // non stream context resource
+ $fileres,
+);
+
+// loop through each element of the array for context
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ @mkdir($dirname);
+ var_dump( rmdir($dirname, $value) );
+};
+
+@rmdir($dirname);
+fclose($fileres);
+?>
+===DONE===
+--EXPECTF--
+*** Testing rmdir() : usage variation ***
+
+--int 0--
+Error: 2 - rmdir() expects parameter 2 to be resource, integer given, %s(%d)
+bool(false)
+
+--int 1--
+Error: 2 - rmdir() expects parameter 2 to be resource, integer given, %s(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - rmdir() expects parameter 2 to be resource, integer given, %s(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - rmdir() expects parameter 2 to be resource, integer given, %s(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - rmdir() expects parameter 2 to be resource, double given, %s(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - rmdir() expects parameter 2 to be resource, double given, %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - rmdir() expects parameter 2 to be resource, double given, %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - rmdir() expects parameter 2 to be resource, double given, %s(%d)
+bool(false)
+
+--float .5--
+Error: 2 - rmdir() expects parameter 2 to be resource, double given, %s(%d)
+bool(false)
+
+--empty array--
+Error: 2 - rmdir() expects parameter 2 to be resource, array given, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - rmdir() expects parameter 2 to be resource, array given, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - rmdir() expects parameter 2 to be resource, array given, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - rmdir() expects parameter 2 to be resource, array given, %s(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - rmdir() expects parameter 2 to be resource, null given, %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - rmdir() expects parameter 2 to be resource, null given, %s(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - rmdir() expects parameter 2 to be resource, boolean given, %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - rmdir() expects parameter 2 to be resource, boolean given, %s(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - rmdir() expects parameter 2 to be resource, boolean given, %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - rmdir() expects parameter 2 to be resource, boolean given, %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - rmdir() expects parameter 2 to be resource, string given, %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - rmdir() expects parameter 2 to be resource, string given, %s(%d)
+bool(false)
+
+--string DQ--
+Error: 2 - rmdir() expects parameter 2 to be resource, string given, %s(%d)
+bool(false)
+
+--string SQ--
+Error: 2 - rmdir() expects parameter 2 to be resource, string given, %s(%d)
+bool(false)
+
+--mixed case string--
+Error: 2 - rmdir() expects parameter 2 to be resource, string given, %s(%d)
+bool(false)
+
+--heredoc--
+Error: 2 - rmdir() expects parameter 2 to be resource, string given, %s(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - rmdir() expects parameter 2 to be resource, object given, %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - rmdir() expects parameter 2 to be resource, object given, %s(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - rmdir() expects parameter 2 to be resource, null given, %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - rmdir() expects parameter 2 to be resource, null given, %s(%d)
+bool(false)
+
+--0--
+Error: 2 - rmdir(): supplied resource is not a valid Stream-Context resource, %s(%d)
+bool(true)
+===DONE===
diff --git a/ext/standard/tests/file/rmdir_variation3-win32.phpt b/ext/standard/tests/file/rmdir_variation3-win32.phpt
new file mode 100644
index 000000000..e6b3eaabb
--- /dev/null
+++ b/ext/standard/tests/file/rmdir_variation3-win32.phpt
@@ -0,0 +1,108 @@
+--TEST--
+Test rmdir() function : variation: various valid and invalid paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Only valid for Windows");
+?>
+--FILE--
+<?php
+/* Prototype : bool rmdir(string dirname[, resource context])
+ * Description: Remove a directory
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing rmdir() : variation ***\n";
+
+$workDir = "rmdirVar3.tmp";
+$subDir = "aSubDir";
+mkdir($workDir);
+$cwd = getcwd();
+
+$unixifiedDir = '/'.substr(str_replace('\\','/',$cwd).'/'.$workDir.'/'.$subDir, 3);
+
+$dirs = array(
+ // relative
+ $workDir.'\\'.$subDir,
+ '.\\'.$workDir.'\\'.$subDir,
+ $workDir.'\\..\\'.$workDir.'\\'.$subDir,
+
+ // relative bad path
+ $workDir.'\\..\\BADDIR\\'.$subDir,
+ 'BADDIR\\'.$subDir,
+
+ //absolute
+ $cwd.'\\'.$workDir.'\\'.$subDir,
+ $cwd.'\\.\\'.$workDir.'\\'.$subDir,
+ $cwd.'\\'.$workDir.'\\..\\'.$workDir.'\\'.$subDir,
+
+ //absolute bad path
+ $cwd.'\\BADDIR\\'.$subDir,
+
+ //trailing separators
+ $workDir.'\\'.$subDir.'\\',
+ $cwd.'\\'.$workDir.'\\'.$subDir.'\\',
+
+ // multiple separators
+ $workDir.'\\\\'.$subDir,
+ $cwd.'\\\\'.$workDir.'\\\\'.$subDir,
+
+ // Unixified Dir
+ $unixifiedDir,
+
+ );
+
+
+foreach($dirs as $dir) {
+ mkdir($workDir.'/'.$subDir);
+ echo "-- removing $dir --\n";
+ $res = rmdir($dir);
+ if ($res === true) {
+ echo "Directory removed\n";
+ }
+ else {
+ rmdir($workDir.'/'.$subDir);
+ }
+}
+
+rmdir($workDir);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing rmdir() : variation ***
+-- removing rmdirVar3.tmp\aSubDir --
+Directory removed
+-- removing .\rmdirVar3.tmp\aSubDir --
+Directory removed
+-- removing rmdirVar3.tmp\..\rmdirVar3.tmp\aSubDir --
+Directory removed
+-- removing rmdirVar3.tmp\..\BADDIR\aSubDir --
+
+Warning: rmdir(rmdirVar3.tmp\..\BADDIR\aSubDir): No such file or directory in %s on line %d
+-- removing BADDIR\aSubDir --
+
+Warning: rmdir(BADDIR\aSubDir): No such file or directory in %s on line %d
+-- removing %s\rmdirVar3.tmp\aSubDir --
+Directory removed
+-- removing %s\.\rmdirVar3.tmp\aSubDir --
+Directory removed
+-- removing %s\rmdirVar3.tmp\..\rmdirVar3.tmp\aSubDir --
+Directory removed
+-- removing %s\BADDIR\aSubDir --
+
+Warning: rmdir(%s\BADDIR\aSubDir): No such file or directory in %s on line %d
+-- removing rmdirVar3.tmp\aSubDir\ --
+Directory removed
+-- removing %s\rmdirVar3.tmp\aSubDir\ --
+Directory removed
+-- removing rmdirVar3.tmp\\aSubDir --
+Directory removed
+-- removing %s\\rmdirVar3.tmp\\aSubDir --
+Directory removed
+-- removing /%s/rmdirVar3.tmp/aSubDir --
+Directory removed
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/rmdir_variation3.phpt b/ext/standard/tests/file/rmdir_variation3.phpt
new file mode 100644
index 000000000..584800739
--- /dev/null
+++ b/ext/standard/tests/file/rmdir_variation3.phpt
@@ -0,0 +1,96 @@
+--TEST--
+Test rmdir() function : variation: various valid and invalid paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : bool rmdir(string dirname[, resource context])
+ * Description: Remove a directory
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing rmdir() : variation ***\n";
+
+$workDir = "rmdirVar3.tmp";
+$subDir = "aSubDir";
+mkdir($workDir);
+$cwd = getcwd();
+
+$dirs = array(
+ // relative
+ $workDir.'/'.$subDir,
+ './'.$workDir.'/'.$subDir,
+ $workDir.'/../'.$workDir.'/'.$subDir,
+
+ // relative bad path
+ $workDir.'/../BADDIR/'.$subDir,
+ 'BADDIR/'.$subDir,
+
+ //absolute
+ $cwd.'/'.$workDir.'/'.$subDir,
+ $cwd.'/./'.$workDir.'/'.$subDir,
+ $cwd.'/'.$workDir.'/../'.$workDir.'/'.$subDir,
+
+ //absolute bad path
+ $cwd.'/BADDIR/'.$subDir,
+
+ //trailing separators
+ $workDir.'/'.$subDir.'/',
+ $cwd.'/'.$workDir.'/'.$subDir.'/',
+
+ // multiple separators
+ $workDir.'//'.$subDir,
+ $cwd.'//'.$workDir.'//'.$subDir,
+
+ );
+
+
+foreach($dirs as $dir) {
+ mkdir($workDir.'/'.$subDir);
+ echo "-- removing $dir --\n";
+ $res = rmdir($dir);
+ if ($res === true) {
+ echo "Directory removed\n";
+ }
+ else {
+ rmdir($workDir.'/'.$subDir);
+ }
+}
+
+rmdir($workDir);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing rmdir() : variation ***
+-- removing rmdirVar3.tmp/aSubDir --
+Directory removed
+-- removing ./rmdirVar3.tmp/aSubDir --
+Directory removed
+-- removing rmdirVar3.tmp/../rmdirVar3.tmp/aSubDir --
+Directory removed
+-- removing rmdirVar3.tmp/../BADDIR/aSubDir --
+
+Warning: rmdir(rmdirVar3.tmp/../BADDIR/aSubDir): No such file or directory in %s on line %d
+-- removing BADDIR/aSubDir --
+
+Warning: rmdir(BADDIR/aSubDir): No such file or directory in %s on line %d
+-- removing %s/rmdirVar3.tmp/aSubDir --
+Directory removed
+-- removing %s/./rmdirVar3.tmp/aSubDir --
+Directory removed
+-- removing %s/rmdirVar3.tmp/../rmdirVar3.tmp/aSubDir --
+Directory removed
+-- removing %s/BADDIR/aSubDir --
+
+Warning: rmdir(%s/BADDIR/aSubDir): No such file or directory in %s on line %d
+-- removing rmdirVar3.tmp/aSubDir/ --
+Directory removed
+-- removing %s/rmdirVar3.tmp/aSubDir/ --
+Directory removed
+-- removing rmdirVar3.tmp//aSubDir --
+Directory removed
+-- removing %s//rmdirVar3.tmp//aSubDir --
+Directory removed
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/symlink_link_linkinfo_is_link_error2.phpt b/ext/standard/tests/file/symlink_link_linkinfo_is_link_error2.phpt
index b2ba0c889..52dd4b534 100644
--- a/ext/standard/tests/file/symlink_link_linkinfo_is_link_error2.phpt
+++ b/ext/standard/tests/file/symlink_link_linkinfo_is_link_error2.phpt
@@ -42,6 +42,7 @@ var_dump( link($filename, $linkname, false) );
//invalid arguments
var_dump( link(NULL, $linkname) ); // NULL as filename
var_dump( link('', $linkname) ); // empty string as filename
+var_dump( link(' ', $linkname) ); // space as filename
var_dump( link(false, $linkname) ); // boolean false as filename
var_dump( link($filename, NULL) ); // NULL as linkname
var_dump( link($filename, '') ); // '' as linkname
@@ -57,6 +58,7 @@ var_dump( is_link($linkname, "/") );
//invalid arguments
var_dump( is_link(NULL) ); // NULL as linkname
var_dump( is_link('') ); // empty string as linkname
+var_dump( is_link(' ') ); // space as linkname
var_dump( is_link(false) ); // boolean false as linkname
var_dump( is_link($filename) ); // file given to is_link
@@ -93,6 +95,9 @@ bool(false)
Warning: link(): %s in %s on line %d
bool(false)
+Warning: link(): %s in %s on line %d
+bool(false)
+
*** Testing is_link() for error conditions ***
Warning: Wrong parameter count for is_link() in %s on line %d
@@ -104,4 +109,5 @@ bool(false)
bool(false)
bool(false)
bool(false)
+bool(false)
Done
diff --git a/ext/standard/tests/file/symlink_to_symlink.phpt b/ext/standard/tests/file/symlink_to_symlink.phpt
new file mode 100644
index 000000000..c672a5ab3
--- /dev/null
+++ b/ext/standard/tests/file/symlink_to_symlink.phpt
@@ -0,0 +1,50 @@
+--TEST--
+symlink() using a relative path, and symlink() to a symlink
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip no symlinks on Windows');
+}
+?>
+--FILE--
+<?php
+$prefix = __FILE__;
+
+touch($prefix . "_file");
+
+// symlink to a regular file using a relative dest
+symlink(basename($prefix . "_file"), $prefix . "_link1");
+
+// symlink to a symlink using a relative path
+symlink(basename($prefix . "_link1"), $prefix . "_link2");
+
+// symlink to a non-existent path
+@unlink($prefix . "_nonexistant");
+symlink(basename($prefix . "_nonexistant"), $prefix . "_link3");
+
+// symlink to a regular file using an absolute path
+symlink($prefix . "_file", $prefix . "_link4");
+
+// symlink to a symlink using an absolute path
+symlink($prefix . "_link4", $prefix . "_link5");
+
+var_dump(readlink($prefix . "_link1"));
+var_dump(readlink($prefix . "_link2"));
+var_dump(readlink($prefix . "_link3"));
+var_dump(readlink($prefix . "_link4"));
+var_dump(readlink($prefix . "_link5"));
+
+unlink($prefix . "_link5");
+unlink($prefix . "_link4");
+unlink($prefix . "_link3");
+unlink($prefix . "_link2");
+unlink($prefix . "_link1");
+unlink($prefix . "_file");
+
+?>
+--EXPECTF--
+string(%d) "symlink_to_symlink.php_file"
+string(%d) "symlink_to_symlink.php_link1"
+string(%d) "symlink_to_symlink.php_nonexistant"
+string(%d) "%s/symlink_to_symlink.php_file"
+string(%d) "%s/symlink_to_symlink.php_link4"
diff --git a/ext/standard/tests/file/tempnam_variation1-win32.phpt b/ext/standard/tests/file/tempnam_variation1-win32.phpt
index 907595033..a3dd7e9d6 100644
--- a/ext/standard/tests/file/tempnam_variation1-win32.phpt
+++ b/ext/standard/tests/file/tempnam_variation1-win32.phpt
@@ -3,7 +3,7 @@ Test tempnam() function: usage variations - creating files
--SKIPIF--
<?php
if(substr(PHP_OS, 0, 3) != "WIN")
- die("skip Run only on Windows");
+ die("skip Only valid for Windows");
?>
--FILE--
<?php
@@ -13,7 +13,8 @@ if(substr(PHP_OS, 0, 3) != "WIN")
/* Creating number of unique files by passing a file name as prefix */
-$file_path = dirname(__FILE__);
+$file_path = dirname(__FILE__)."/tempnamVar1";
+mkdir($file_path);
echo "*** Testing tempnam() in creation of unique files ***\n";
for($i=1; $i<=10; $i++) {
@@ -31,6 +32,19 @@ for($i=1; $i<=10; $i++) {
echo "\n";
clearstatcache();
+ echo "File created in => ";
+ $file_dir = dirname($files[$i]);
+
+ if (realpath($file_dir) == realpath(sys_get_temp_dir()) || realpath($file_dir."\\") == realpath(sys_get_temp_dir())) {
+ echo "temp dir\n";
+ }
+ else if (realpath($file_dir) == realpath($file_path) || realpath($file_dir."\\") == realpath($file_path)) {
+ echo "directory specified\n";
+ }
+ else {
+ echo "unknown location\n";
+ }
+ clearstatcache();
}
else {
print("- File is not created -");
@@ -39,39 +53,51 @@ for($i=1; $i<=10; $i++) {
for($i=1; $i<=10; $i++) {
unlink($files[$i]);
}
+rmdir($file_path);
+
echo "*** Done ***\n";
?>
--EXPECTF--
*** Testing tempnam() in creation of unique files ***
-- Iteration 1 --
-File name is => %s
+File name is => %s%et%s
File permissions are => 100666
+File created in => directory specified
-- Iteration 2 --
-File name is => %s
+File name is => %s%et%s
File permissions are => 100666
+File created in => directory specified
-- Iteration 3 --
-File name is => %s
+File name is => %s%et%s
File permissions are => 100666
+File created in => directory specified
-- Iteration 4 --
-File name is => %s
+File name is => %s%et%s
File permissions are => 100666
+File created in => directory specified
-- Iteration 5 --
-File name is => %s
+File name is => %s%et%s
File permissions are => 100666
+File created in => directory specified
-- Iteration 6 --
-File name is => %s
+File name is => %s%et%s
File permissions are => 100666
+File created in => directory specified
-- Iteration 7 --
-File name is => %s
+File name is => %s%et%s
File permissions are => 100666
+File created in => directory specified
-- Iteration 8 --
-File name is => %s
+File name is => %s%et%s
File permissions are => 100666
+File created in => directory specified
-- Iteration 9 --
-File name is => %s
+File name is => %s%et%s
File permissions are => 100666
+File created in => directory specified
-- Iteration 10 --
-File name is => %s
+File name is => %s%et%s
File permissions are => 100666
+File created in => directory specified
*** Done ***
diff --git a/ext/standard/tests/file/tempnam_variation1.phpt b/ext/standard/tests/file/tempnam_variation1.phpt
index c94a65ba2..0745f5397 100644
--- a/ext/standard/tests/file/tempnam_variation1.phpt
+++ b/ext/standard/tests/file/tempnam_variation1.phpt
@@ -13,7 +13,8 @@ if(substr(PHP_OS, 0, 3) == "WIN")
/* Creating number of unique files by passing a file name as prefix */
-$file_path = dirname(__FILE__);
+$file_path = dirname(__FILE__)."/tempnamVar1";
+mkdir($file_path);
echo "*** Testing tempnam() in creation of unique files ***\n";
for($i=1; $i<=10; $i++) {
@@ -34,6 +35,19 @@ for($i=1; $i<=10; $i++) {
echo "File inode is => ";
print_r( fileinode($files[$i]) ); //checking inodes
echo "\n";
+
+ echo "File created in => ";
+ $file_dir = dirname($files[$i]);
+
+ if ($file_dir == sys_get_temp_dir()) {
+ echo "temp dir\n";
+ }
+ else if ($file_dir == $file_path) {
+ echo "directory specified\n";
+ }
+ else {
+ echo "unknown location\n";
+ }
clearstatcache();
}
else {
@@ -44,48 +58,59 @@ for($i=1; $i<=10; $i++) {
unlink($files[$i]);
}
+rmdir($file_path);
echo "*** Done ***\n";
?>
--EXPECTF--
*** Testing tempnam() in creation of unique files ***
-- Iteration 1 --
-File name is => %s
+File name is => %s%etempnam_variation1.tmp%s
File permissions are => 100600
File inode is => %d
+File created in => directory specified
-- Iteration 2 --
-File name is => %s
+File name is => %s%etempnam_variation1.tmp%s
File permissions are => 100600
File inode is => %d
+File created in => directory specified
-- Iteration 3 --
-File name is => %s
+File name is => %s%etempnam_variation1.tmp%s
File permissions are => 100600
File inode is => %d
+File created in => directory specified
-- Iteration 4 --
-File name is => %s
+File name is => %s%etempnam_variation1.tmp%s
File permissions are => 100600
File inode is => %d
+File created in => directory specified
-- Iteration 5 --
-File name is => %s
+File name is => %s%etempnam_variation1.tmp%s
File permissions are => 100600
File inode is => %d
+File created in => directory specified
-- Iteration 6 --
-File name is => %s
+File name is => %s%etempnam_variation1.tmp%s
File permissions are => 100600
File inode is => %d
+File created in => directory specified
-- Iteration 7 --
-File name is => %s
+File name is => %s%etempnam_variation1.tmp%s
File permissions are => 100600
File inode is => %d
+File created in => directory specified
-- Iteration 8 --
-File name is => %s
+File name is => %s%etempnam_variation1.tmp%s
File permissions are => 100600
File inode is => %d
+File created in => directory specified
-- Iteration 9 --
-File name is => %s
+File name is => %s%etempnam_variation1.tmp%s
File permissions are => 100600
File inode is => %d
+File created in => directory specified
-- Iteration 10 --
-File name is => %s
+File name is => %s%etempnam_variation1.tmp%s
File permissions are => 100600
File inode is => %d
+File created in => directory specified
*** Done ***
diff --git a/ext/standard/tests/file/tempnam_variation2-win32.phpt b/ext/standard/tests/file/tempnam_variation2-win32.phpt
index a9fe4fd2d..4224966da 100644
--- a/ext/standard/tests/file/tempnam_variation2-win32.phpt
+++ b/ext/standard/tests/file/tempnam_variation2-win32.phpt
@@ -1,9 +1,9 @@
--TEST--
-Test tempnam() function: usage variations - relative paths
+Test tempnam() function: usage variations - various absolute and relative paths
--SKIPIF--
<?php
if(substr(PHP_OS, 0, 3) != "WIN")
- die("skip Run only on Windows");
+ die("skip Only valid for Windows");
?>
--FILE--
<?php
@@ -13,7 +13,7 @@ if(substr(PHP_OS, 0, 3) != "WIN")
/* Creating unique files in various dirs by passing relative paths to $dir arg */
-echo "*** Testing tempnam() with relative paths ***\n";
+echo "*** Testing tempnam() with absolute and relative paths ***\n";
$dir_name = dirname(__FILE__)."/tempnam_variation2";
mkdir($dir_name);
$dir_path = $dir_name."/tempnam_variation2_sub";
@@ -23,14 +23,24 @@ $old_dir_path = getcwd();
chdir(dirname(__FILE__));
$dir_paths = array(
+ // absolute paths
"$dir_path",
"$dir_path/",
"$dir_path/..",
"$dir_path//../",
"$dir_path/../.././tempnam_variation2",
"$dir_path/..///tempnam_variation2_sub//..//../tempnam_variation2",
+ "$dir_path/BADDIR",
+
+
+ // relative paths
".",
- "./tempnam_variation2/../tempnam_variation2/tempnam_variation2_sub"
+ "tempname_variation2",
+ "tempname_variation2/",
+ "tempnam_variation2/tempnam_variation2_sub",
+ "tempnam_variation2//tempnam_variation2_sub",
+ "./tempnam_variation2/../tempnam_variation2/tempnam_variation2_sub",
+ "BADDIR",
);
for($i = 0; $i<count($dir_paths); $i++) {
@@ -47,10 +57,28 @@ for($i = 0; $i<count($dir_paths); $i++) {
echo "File permissions are => ";
printf("%o", fileperms($file_name) );
echo "\n";
+
+ echo "File created in => ";
+ $file_dir = dirname($file_name);
+ $dir_req = $dir_paths[$i];
+
+ if (realpath($file_dir) == realpath(sys_get_temp_dir()) || realpath($file_dir."\\") == realpath(sys_get_temp_dir())) {
+ echo "temp dir\n";
+ }
+ else if (realpath($file_dir) == realpath($dir_req) || realpath($file_dir."\\") == realpath($dir_req)) {
+ echo "directory specified\n";
+ }
+ else {
+ echo "unknown location\n";
+ }
+
+
}
- else
+ else {
echo "-- File is not created --";
- unlink($file_name);
+ }
+
+ unlink($file_name);
}
chdir($old_dir_path);
@@ -60,38 +88,76 @@ rmdir($dir_name);
echo "\n*** Done ***\n";
?>
--EXPECTF--
-*** Testing tempnam() with relative paths ***
+*** Testing tempnam() with absolute and relative paths ***
-- Iteration 1 --
-File name is => %s
+File name is => %s\tempnam_variation2\tempnam_variation2_sub\t%s
File permissions are => 100666
+File created in => directory specified
-- Iteration 2 --
-File name is => %s
+File name is => %s\tempnam_variation2\tempnam_variation2_sub\t%s
File permissions are => 100666
+File created in => directory specified
-- Iteration 3 --
-File name is => %s
+File name is => %s\tempnam_variation2\t%s
File permissions are => 100666
+File created in => directory specified
-- Iteration 4 --
-File name is => %s
+File name is => %s\tempnam_variation2\t%s
File permissions are => 100666
+File created in => directory specified
-- Iteration 5 --
-File name is => %s
+File name is => %s\tempnam_variation2\t%s
File permissions are => 100666
+File created in => directory specified
-- Iteration 6 --
-File name is => %s
+File name is => %s\tempnam_variation2\t%s
File permissions are => 100666
+File created in => directory specified
-- Iteration 7 --
-File name is => %s
+File name is => %s\t%s
File permissions are => 100666
+File created in => temp dir
-- Iteration 8 --
-File name is => %s
+File name is => %s\t%s
+File permissions are => 100666
+File created in => directory specified
+
+-- Iteration 9 --
+File name is => %s\t%s
+File permissions are => 100666
+File created in => temp dir
+
+-- Iteration 10 --
+File name is => %s\t%s
+File permissions are => 100666
+File created in => temp dir
+
+-- Iteration 11 --
+File name is => %s\tempnam_variation2\tempnam_variation2_sub\t%s
+File permissions are => 100666
+File created in => directory specified
+
+-- Iteration 12 --
+File name is => %s\tempnam_variation2\tempnam_variation2_sub\t%s
+File permissions are => 100666
+File created in => directory specified
+
+-- Iteration 13 --
+File name is => %s\tempnam_variation2\tempnam_variation2_sub\t%s
+File permissions are => 100666
+File created in => directory specified
+
+-- Iteration 14 --
+File name is => %s\t%s
File permissions are => 100666
+File created in => temp dir
-*** Done ***
+*** Done *** \ No newline at end of file
diff --git a/ext/standard/tests/file/tempnam_variation2.phpt b/ext/standard/tests/file/tempnam_variation2.phpt
index 6d85e2562..b7e5cdc05 100644
--- a/ext/standard/tests/file/tempnam_variation2.phpt
+++ b/ext/standard/tests/file/tempnam_variation2.phpt
@@ -1,5 +1,5 @@
--TEST--
-Test tempnam() function: usage variations - relative paths
+Test tempnam() function: usage variations - various absolute and relative paths
--SKIPIF--
<?php
if(substr(PHP_OS, 0, 3) == "WIN")
@@ -13,7 +13,7 @@ if(substr(PHP_OS, 0, 3) == "WIN")
/* Creating unique files in various dirs by passing relative paths to $dir arg */
-echo "*** Testing tempnam() with relative paths ***\n";
+echo "*** Testing tempnam() with absolute and relative paths ***\n";
$dir_name = dirname(__FILE__)."/tempnam_variation2";
mkdir($dir_name);
$dir_path = $dir_name."/tempnam_variation2_sub";
@@ -23,14 +23,24 @@ $old_dir_path = getcwd();
chdir(dirname(__FILE__));
$dir_paths = array(
+ // absolute paths
"$dir_path",
"$dir_path/",
"$dir_path/..",
"$dir_path//../",
"$dir_path/../.././tempnam_variation2",
"$dir_path/..///tempnam_variation2_sub//..//../tempnam_variation2",
+ "$dir_path/BADDIR",
+
+
+ // relative paths
".",
- "./tempnam_variation2/../tempnam_variation2/tempnam_variation2_sub"
+ "tempname_variation2",
+ "tempname_variation2/",
+ "tempnam_variation2/tempnam_variation2_sub",
+ "tempnam_variation2//tempnam_variation2_sub",
+ "./tempnam_variation2/../tempnam_variation2/tempnam_variation2_sub",
+ "BADDIR",
);
for($i = 0; $i<count($dir_paths); $i++) {
@@ -47,10 +57,28 @@ for($i = 0; $i<count($dir_paths); $i++) {
echo "File permissions are => ";
printf("%o", fileperms($file_name) );
echo "\n";
+
+ echo "File created in => ";
+ $file_dir = dirname($file_name);
+ $dir_req = $dir_paths[$i];
+
+ if (realpath($file_dir) == realpath(sys_get_temp_dir())) {
+ echo "temp dir\n";
+ }
+ else if ($file_dir == realpath($dir_req)) {
+ echo "directory specified\n";
+ }
+ else {
+ echo "unknown location\n";
+ }
+
+
}
- else
+ else {
echo "-- File is not created --";
- unlink($file_name);
+ }
+
+ unlink($file_name);
}
chdir($old_dir_path);
@@ -60,38 +88,76 @@ rmdir($dir_name);
echo "\n*** Done ***\n";
?>
--EXPECTF--
-*** Testing tempnam() with relative paths ***
+*** Testing tempnam() with absolute and relative paths ***
-- Iteration 1 --
-File name is => %s
+File name is => %s/tempnam_variation2/tempnam_variation2_sub/tempnam_variation2.tmp%s
File permissions are => 100600
+File created in => directory specified
-- Iteration 2 --
-File name is => %s
+File name is => %s/tempnam_variation2/tempnam_variation2_sub/tempnam_variation2.tmp%s
File permissions are => 100600
+File created in => directory specified
-- Iteration 3 --
-File name is => %s
+File name is => %s/tempnam_variation2/tempnam_variation2.tmp%s
File permissions are => 100600
+File created in => directory specified
-- Iteration 4 --
-File name is => %s
+File name is => %s/tempnam_variation2/tempnam_variation2.tmp%s
File permissions are => 100600
+File created in => directory specified
-- Iteration 5 --
-File name is => %s
+File name is => %s/tempnam_variation2/tempnam_variation2.tmp%s
File permissions are => 100600
+File created in => directory specified
-- Iteration 6 --
-File name is => %s
+File name is => %s/tempnam_variation2/tempnam_variation2.tmp%s
File permissions are => 100600
+File created in => directory specified
-- Iteration 7 --
-File name is => %s
+File name is => %s/tempnam_variation2.tmp%s
File permissions are => 100600
+File created in => temp dir
-- Iteration 8 --
-File name is => %s
+File name is => %s/tempnam_variation2.tmp%s
+File permissions are => 100600
+File created in => directory specified
+
+-- Iteration 9 --
+File name is => %s/tempnam_variation2.tmp%s
+File permissions are => 100600
+File created in => temp dir
+
+-- Iteration 10 --
+File name is => %s/tempnam_variation2.tmp%s
+File permissions are => 100600
+File created in => temp dir
+
+-- Iteration 11 --
+File name is => %s/tempnam_variation2/tempnam_variation2_sub/tempnam_variation2.tmp%s
+File permissions are => 100600
+File created in => directory specified
+
+-- Iteration 12 --
+File name is => %s/tempnam_variation2/tempnam_variation2_sub/tempnam_variation2.tmp%s
+File permissions are => 100600
+File created in => directory specified
+
+-- Iteration 13 --
+File name is => %s/tempnam_variation2/tempnam_variation2_sub/tempnam_variation2.tmp%s
+File permissions are => 100600
+File created in => directory specified
+
+-- Iteration 14 --
+File name is => %s/tempnam_variation2.tmp%s
File permissions are => 100600
+File created in => temp dir
-*** Done ***
+*** Done *** \ No newline at end of file
diff --git a/ext/standard/tests/file/tempnam_variation3-win32.phpt b/ext/standard/tests/file/tempnam_variation3-win32.phpt
index 9dab92271..da0133af9 100644
--- a/ext/standard/tests/file/tempnam_variation3-win32.phpt
+++ b/ext/standard/tests/file/tempnam_variation3-win32.phpt
@@ -1,9 +1,9 @@
--TEST--
-Test tempnam() function: usage variations - invalid/non-existing file
+Test tempnam() function: usage variations - obscure prefixes
--SKIPIF--
<?php
if(substr(PHP_OS, 0, 3) != "WIN")
- die("skip Run only on Windows");
+ die("skip run only on Windows");
?>
--FILE--
<?php
@@ -13,10 +13,11 @@ if(substr(PHP_OS, 0, 3) != "WIN")
/* Passing invalid/non-existing args for $prefix */
-echo "*** Testing tempnam() with invalid/non-existing file names ***\n";
-$file_path = dirname(__FILE__);
+echo "*** Testing tempnam() with obscure prefixes ***\n";
+$file_path = dirname(__FILE__)."/tempnamVar3";
+mkdir($file_path);
-/* An array of names, which will be passed as a file name */
+/* An array of prefixes */
$names_arr = array(
/* Invalid args */
-1,
@@ -25,16 +26,16 @@ $names_arr = array(
NULL,
"",
" ",
- "/0",
+ "\0",
array(),
- /* Non-existing dirs */
+ /* prefix with path separator of a non existing directory*/
"/no/such/file/dir",
- "php"
+ "php/php"
);
-for( $i=1; $i<count($names_arr); $i++ ) {
+for( $i=0; $i<count($names_arr); $i++ ) {
echo "-- Iteration $i --\n";
$file_name = tempnam("$file_path", $names_arr[$i]);
@@ -47,45 +48,72 @@ for( $i=1; $i<count($names_arr); $i++ ) {
echo "File permissions are => ";
printf("%o", fileperms($file_name) );
echo "\n";
+
+ echo "File created in => ";
+ $file_dir = dirname($file_name);
+ if (realpath($file_dir) == realpath(sys_get_temp_dir()) || realpath($file_dir."\\") == realpath(sys_get_temp_dir())) {
+ echo "temp dir\n";
+ }
+ else if (realpath($file_dir) == realpath($file_path) || realpath($file_dir."\\") == realpath($file_path)) {
+ echo "directory specified\n";
+ }
+ else {
+ echo "unknown location\n";
+ }
}
- else
+ else {
echo "-- File is not created --\n";
+ }
unlink($file_name);
}
+rmdir($file_path);
echo "\n*** Done ***\n";
?>
--EXPECTF--
-*** Testing tempnam() with invalid/non-existing file names ***
+*** Testing tempnam() with obscure prefixes ***
+-- Iteration 0 --
+File name is => %s\%s
+File permissions are => 100666
+File created in => directory specified
-- Iteration 1 --
-File name is => %s
+File name is => %s\%s
File permissions are => 100666
+File created in => directory specified
-- Iteration 2 --
-File name is => %s
+File name is => %s\%s
File permissions are => 100666
+File created in => directory specified
-- Iteration 3 --
-File name is => %s
+File name is => %s\%s
File permissions are => 100666
+File created in => directory specified
-- Iteration 4 --
-File name is => %s
+File name is => %s\%s
File permissions are => 100666
+File created in => directory specified
-- Iteration 5 --
-File name is => %s
+File name is => %s\%s
File permissions are => 100666
+File created in => directory specified
-- Iteration 6 --
-File name is => %s
+File name is => %s\%s
File permissions are => 100666
+File created in => directory specified
-- Iteration 7 --
Notice: Array to string conversion in %s on line %d
-File name is => %s
+File name is => %s\Ar%s
File permissions are => 100666
+File created in => directory specified
-- Iteration 8 --
-File name is => %s
+File name is => %s\di%s
File permissions are => 100666
+File created in => directory specified
-- Iteration 9 --
-File name is => %s
+File name is => %s\ph%s
File permissions are => 100666
+File created in => directory specified
*** Done ***
diff --git a/ext/standard/tests/file/tempnam_variation3.phpt b/ext/standard/tests/file/tempnam_variation3.phpt
index 08748bdc5..e350849fd 100644
--- a/ext/standard/tests/file/tempnam_variation3.phpt
+++ b/ext/standard/tests/file/tempnam_variation3.phpt
@@ -1,5 +1,5 @@
--TEST--
-Test tempnam() function: usage variations - invalid/non-existing file
+Test tempnam() function: usage variations - obscure prefixes
--SKIPIF--
<?php
if(substr(PHP_OS, 0, 3) == "WIN")
@@ -13,10 +13,11 @@ if(substr(PHP_OS, 0, 3) == "WIN")
/* Passing invalid/non-existing args for $prefix */
-echo "*** Testing tempnam() with invalid/non-existing file names ***\n";
-$file_path = dirname(__FILE__);
+echo "*** Testing tempnam() with obscure prefixes ***\n";
+$file_path = dirname(__FILE__)."/tempnamVar3";
+mkdir($file_path);
-/* An array of names, which will be passed as a file name */
+/* An array of prefixes */
$names_arr = array(
/* Invalid args */
-1,
@@ -25,16 +26,16 @@ $names_arr = array(
NULL,
"",
" ",
- "/0",
+ "\0",
array(),
- /* Non-existing dirs */
+ /* prefix with path separator of a non existing directory*/
"/no/such/file/dir",
- "php"
+ "php/php"
);
-for( $i=1; $i<count($names_arr); $i++ ) {
+for( $i=0; $i<count($names_arr); $i++ ) {
echo "-- Iteration $i --\n";
$file_name = tempnam("$file_path", $names_arr[$i]);
@@ -47,45 +48,74 @@ for( $i=1; $i<count($names_arr); $i++ ) {
echo "File permissions are => ";
printf("%o", fileperms($file_name) );
echo "\n";
+
+ echo "File created in => ";
+ $file_dir = dirname($file_name);
+
+ if ($file_dir == sys_get_temp_dir()) {
+ echo "temp dir\n";
+ }
+ else if ($file_dir == $file_path) {
+ echo "directory specified\n";
+ }
+ else {
+ echo "unknown location\n";
+ }
+
}
- else
+ else {
echo "-- File is not created --\n";
+ }
unlink($file_name);
}
+rmdir($file_path);
echo "\n*** Done ***\n";
?>
--EXPECTF--
-*** Testing tempnam() with invalid/non-existing file names ***
+*** Testing tempnam() with obscure prefixes ***
+-- Iteration 0 --
+File name is => %s/%s
+File permissions are => 100600
+File created in => directory specified
-- Iteration 1 --
-File name is => %s
+File name is => %s/%s
File permissions are => 100600
+File created in => directory specified
-- Iteration 2 --
-File name is => %s
+File name is => %s/%s
File permissions are => 100600
+File created in => directory specified
-- Iteration 3 --
-File name is => %s
+File name is => %s/%s
File permissions are => 100600
+File created in => directory specified
-- Iteration 4 --
-File name is => %s
+File name is => %s/%s
File permissions are => 100600
+File created in => directory specified
-- Iteration 5 --
-File name is => %s
+File name is => %s/%s
File permissions are => 100600
+File created in => directory specified
-- Iteration 6 --
-File name is => %s
+File name is => %s/%s
File permissions are => 100600
+File created in => directory specified
-- Iteration 7 --
Notice: Array to string conversion in %s on line %d
-File name is => %s
+File name is => %s/Array%s
File permissions are => 100600
+File created in => directory specified
-- Iteration 8 --
-File name is => %s
+File name is => %s/dir%s
File permissions are => 100600
+File created in => directory specified
-- Iteration 9 --
-File name is => %s
+File name is => %s/php%s
File permissions are => 100600
+File created in => directory specified
*** Done ***
diff --git a/ext/standard/tests/file/tempnam_variation4.phpt b/ext/standard/tests/file/tempnam_variation4.phpt
index 491eae734..5525b584a 100644
--- a/ext/standard/tests/file/tempnam_variation4.phpt
+++ b/ext/standard/tests/file/tempnam_variation4.phpt
@@ -20,22 +20,34 @@ if (substr(PHP_OS, 0, 3) == 'WIN') {
echo "*** Testing tempnam() with dir of permissions from 0000 to 0777 ***\n";
$file_path = dirname(__FILE__);
$dir_name = $file_path."/tempnam_variation4";
+$prefix = "tempnamVar4.";
+
mkdir($dir_name);
-for($mode = 0000; $mode<=0777; $mode++) {
+for($mode = 0000; $mode <= 0777; $mode++) {
echo "-- dir perms ";
printf("%o", $mode);
echo " --\n";
chmod($dir_name, $mode);
- $file_name = tempnam($dir_name, "tempnam_variation4.tmp");
+ $file_name = tempnam($dir_name, $prefix);
if(file_exists($file_name) ) {
- print($file_name);
- echo "\n";
+ if (realpath(dirname($file_name)) == realpath(sys_get_temp_dir())) {
+ $msg = " created in temp dir ";
+ }
+ else if (dirname($file_name) == $dir_name) {
+ $msg = " created in requested dir";
+ }
+ else {
+ $msg = " created in unexpected dir";
+ }
+
+ echo $msg."\n";
+ unlink($file_name);
+ }
+ else {
+ print("FAILED: File is not created\n");
}
- else
- print("-- File is not created --");
- unlink($file_name);
}
rmdir($dir_name);
@@ -45,1027 +57,1027 @@ echo "*** Done ***\n";
--EXPECTF--
*** Testing tempnam() with dir of permissions from 0000 to 0777 ***
-- dir perms 0 --
-%s
+ created in temp dir
-- dir perms 1 --
-%s
+ created in temp dir
-- dir perms 2 --
-%s
+ created in temp dir
-- dir perms 3 --
-%s
+ created in temp dir
-- dir perms 4 --
-%s
+ created in temp dir
-- dir perms 5 --
-%s
+ created in temp dir
-- dir perms 6 --
-%s
+ created in temp dir
-- dir perms 7 --
-%s
+ created in temp dir
-- dir perms 10 --
-%s
+ created in temp dir
-- dir perms 11 --
-%s
+ created in temp dir
-- dir perms 12 --
-%s
+ created in temp dir
-- dir perms 13 --
-%s
+ created in temp dir
-- dir perms 14 --
-%s
+ created in temp dir
-- dir perms 15 --
-%s
+ created in temp dir
-- dir perms 16 --
-%s
+ created in temp dir
-- dir perms 17 --
-%s
+ created in temp dir
-- dir perms 20 --
-%s
+ created in temp dir
-- dir perms 21 --
-%s
+ created in temp dir
-- dir perms 22 --
-%s
+ created in temp dir
-- dir perms 23 --
-%s
+ created in temp dir
-- dir perms 24 --
-%s
+ created in temp dir
-- dir perms 25 --
-%s
+ created in temp dir
-- dir perms 26 --
-%s
+ created in temp dir
-- dir perms 27 --
-%s
+ created in temp dir
-- dir perms 30 --
-%s
+ created in temp dir
-- dir perms 31 --
-%s
+ created in temp dir
-- dir perms 32 --
-%s
+ created in temp dir
-- dir perms 33 --
-%s
+ created in temp dir
-- dir perms 34 --
-%s
+ created in temp dir
-- dir perms 35 --
-%s
+ created in temp dir
-- dir perms 36 --
-%s
+ created in temp dir
-- dir perms 37 --
-%s
+ created in temp dir
-- dir perms 40 --
-%s
+ created in temp dir
-- dir perms 41 --
-%s
+ created in temp dir
-- dir perms 42 --
-%s
+ created in temp dir
-- dir perms 43 --
-%s
+ created in temp dir
-- dir perms 44 --
-%s
+ created in temp dir
-- dir perms 45 --
-%s
+ created in temp dir
-- dir perms 46 --
-%s
+ created in temp dir
-- dir perms 47 --
-%s
+ created in temp dir
-- dir perms 50 --
-%s
+ created in temp dir
-- dir perms 51 --
-%s
+ created in temp dir
-- dir perms 52 --
-%s
+ created in temp dir
-- dir perms 53 --
-%s
+ created in temp dir
-- dir perms 54 --
-%s
+ created in temp dir
-- dir perms 55 --
-%s
+ created in temp dir
-- dir perms 56 --
-%s
+ created in temp dir
-- dir perms 57 --
-%s
+ created in temp dir
-- dir perms 60 --
-%s
+ created in temp dir
-- dir perms 61 --
-%s
+ created in temp dir
-- dir perms 62 --
-%s
+ created in temp dir
-- dir perms 63 --
-%s
+ created in temp dir
-- dir perms 64 --
-%s
+ created in temp dir
-- dir perms 65 --
-%s
+ created in temp dir
-- dir perms 66 --
-%s
+ created in temp dir
-- dir perms 67 --
-%s
+ created in temp dir
-- dir perms 70 --
-%s
+ created in temp dir
-- dir perms 71 --
-%s
+ created in temp dir
-- dir perms 72 --
-%s
+ created in temp dir
-- dir perms 73 --
-%s
+ created in temp dir
-- dir perms 74 --
-%s
+ created in temp dir
-- dir perms 75 --
-%s
+ created in temp dir
-- dir perms 76 --
-%s
+ created in temp dir
-- dir perms 77 --
-%s
+ created in temp dir
-- dir perms 100 --
-%s
+ created in temp dir
-- dir perms 101 --
-%s
+ created in temp dir
-- dir perms 102 --
-%s
+ created in temp dir
-- dir perms 103 --
-%s
+ created in temp dir
-- dir perms 104 --
-%s
+ created in temp dir
-- dir perms 105 --
-%s
+ created in temp dir
-- dir perms 106 --
-%s
+ created in temp dir
-- dir perms 107 --
-%s
+ created in temp dir
-- dir perms 110 --
-%s
+ created in temp dir
-- dir perms 111 --
-%s
+ created in temp dir
-- dir perms 112 --
-%s
+ created in temp dir
-- dir perms 113 --
-%s
+ created in temp dir
-- dir perms 114 --
-%s
+ created in temp dir
-- dir perms 115 --
-%s
+ created in temp dir
-- dir perms 116 --
-%s
+ created in temp dir
-- dir perms 117 --
-%s
+ created in temp dir
-- dir perms 120 --
-%s
+ created in temp dir
-- dir perms 121 --
-%s
+ created in temp dir
-- dir perms 122 --
-%s
+ created in temp dir
-- dir perms 123 --
-%s
+ created in temp dir
-- dir perms 124 --
-%s
+ created in temp dir
-- dir perms 125 --
-%s
+ created in temp dir
-- dir perms 126 --
-%s
+ created in temp dir
-- dir perms 127 --
-%s
+ created in temp dir
-- dir perms 130 --
-%s
+ created in temp dir
-- dir perms 131 --
-%s
+ created in temp dir
-- dir perms 132 --
-%s
+ created in temp dir
-- dir perms 133 --
-%s
+ created in temp dir
-- dir perms 134 --
-%s
+ created in temp dir
-- dir perms 135 --
-%s
+ created in temp dir
-- dir perms 136 --
-%s
+ created in temp dir
-- dir perms 137 --
-%s
+ created in temp dir
-- dir perms 140 --
-%s
+ created in temp dir
-- dir perms 141 --
-%s
+ created in temp dir
-- dir perms 142 --
-%s
+ created in temp dir
-- dir perms 143 --
-%s
+ created in temp dir
-- dir perms 144 --
-%s
+ created in temp dir
-- dir perms 145 --
-%s
+ created in temp dir
-- dir perms 146 --
-%s
+ created in temp dir
-- dir perms 147 --
-%s
+ created in temp dir
-- dir perms 150 --
-%s
+ created in temp dir
-- dir perms 151 --
-%s
+ created in temp dir
-- dir perms 152 --
-%s
+ created in temp dir
-- dir perms 153 --
-%s
+ created in temp dir
-- dir perms 154 --
-%s
+ created in temp dir
-- dir perms 155 --
-%s
+ created in temp dir
-- dir perms 156 --
-%s
+ created in temp dir
-- dir perms 157 --
-%s
+ created in temp dir
-- dir perms 160 --
-%s
+ created in temp dir
-- dir perms 161 --
-%s
+ created in temp dir
-- dir perms 162 --
-%s
+ created in temp dir
-- dir perms 163 --
-%s
+ created in temp dir
-- dir perms 164 --
-%s
+ created in temp dir
-- dir perms 165 --
-%s
+ created in temp dir
-- dir perms 166 --
-%s
+ created in temp dir
-- dir perms 167 --
-%s
+ created in temp dir
-- dir perms 170 --
-%s
+ created in temp dir
-- dir perms 171 --
-%s
+ created in temp dir
-- dir perms 172 --
-%s
+ created in temp dir
-- dir perms 173 --
-%s
+ created in temp dir
-- dir perms 174 --
-%s
+ created in temp dir
-- dir perms 175 --
-%s
+ created in temp dir
-- dir perms 176 --
-%s
+ created in temp dir
-- dir perms 177 --
-%s
+ created in temp dir
-- dir perms 200 --
-%s
+ created in temp dir
-- dir perms 201 --
-%s
+ created in temp dir
-- dir perms 202 --
-%s
+ created in temp dir
-- dir perms 203 --
-%s
+ created in temp dir
-- dir perms 204 --
-%s
+ created in temp dir
-- dir perms 205 --
-%s
+ created in temp dir
-- dir perms 206 --
-%s
+ created in temp dir
-- dir perms 207 --
-%s
+ created in temp dir
-- dir perms 210 --
-%s
+ created in temp dir
-- dir perms 211 --
-%s
+ created in temp dir
-- dir perms 212 --
-%s
+ created in temp dir
-- dir perms 213 --
-%s
+ created in temp dir
-- dir perms 214 --
-%s
+ created in temp dir
-- dir perms 215 --
-%s
+ created in temp dir
-- dir perms 216 --
-%s
+ created in temp dir
-- dir perms 217 --
-%s
+ created in temp dir
-- dir perms 220 --
-%s
+ created in temp dir
-- dir perms 221 --
-%s
+ created in temp dir
-- dir perms 222 --
-%s
+ created in temp dir
-- dir perms 223 --
-%s
+ created in temp dir
-- dir perms 224 --
-%s
+ created in temp dir
-- dir perms 225 --
-%s
+ created in temp dir
-- dir perms 226 --
-%s
+ created in temp dir
-- dir perms 227 --
-%s
+ created in temp dir
-- dir perms 230 --
-%s
+ created in temp dir
-- dir perms 231 --
-%s
+ created in temp dir
-- dir perms 232 --
-%s
+ created in temp dir
-- dir perms 233 --
-%s
+ created in temp dir
-- dir perms 234 --
-%s
+ created in temp dir
-- dir perms 235 --
-%s
+ created in temp dir
-- dir perms 236 --
-%s
+ created in temp dir
-- dir perms 237 --
-%s
+ created in temp dir
-- dir perms 240 --
-%s
+ created in temp dir
-- dir perms 241 --
-%s
+ created in temp dir
-- dir perms 242 --
-%s
+ created in temp dir
-- dir perms 243 --
-%s
+ created in temp dir
-- dir perms 244 --
-%s
+ created in temp dir
-- dir perms 245 --
-%s
+ created in temp dir
-- dir perms 246 --
-%s
+ created in temp dir
-- dir perms 247 --
-%s
+ created in temp dir
-- dir perms 250 --
-%s
+ created in temp dir
-- dir perms 251 --
-%s
+ created in temp dir
-- dir perms 252 --
-%s
+ created in temp dir
-- dir perms 253 --
-%s
+ created in temp dir
-- dir perms 254 --
-%s
+ created in temp dir
-- dir perms 255 --
-%s
+ created in temp dir
-- dir perms 256 --
-%s
+ created in temp dir
-- dir perms 257 --
-%s
+ created in temp dir
-- dir perms 260 --
-%s
+ created in temp dir
-- dir perms 261 --
-%s
+ created in temp dir
-- dir perms 262 --
-%s
+ created in temp dir
-- dir perms 263 --
-%s
+ created in temp dir
-- dir perms 264 --
-%s
+ created in temp dir
-- dir perms 265 --
-%s
+ created in temp dir
-- dir perms 266 --
-%s
+ created in temp dir
-- dir perms 267 --
-%s
+ created in temp dir
-- dir perms 270 --
-%s
+ created in temp dir
-- dir perms 271 --
-%s
+ created in temp dir
-- dir perms 272 --
-%s
+ created in temp dir
-- dir perms 273 --
-%s
+ created in temp dir
-- dir perms 274 --
-%s
+ created in temp dir
-- dir perms 275 --
-%s
+ created in temp dir
-- dir perms 276 --
-%s
+ created in temp dir
-- dir perms 277 --
-%s
+ created in temp dir
-- dir perms 300 --
-%s
+ created in requested dir
-- dir perms 301 --
-%s
+ created in requested dir
-- dir perms 302 --
-%s
+ created in requested dir
-- dir perms 303 --
-%s
+ created in requested dir
-- dir perms 304 --
-%s
+ created in requested dir
-- dir perms 305 --
-%s
+ created in requested dir
-- dir perms 306 --
-%s
+ created in requested dir
-- dir perms 307 --
-%s
+ created in requested dir
-- dir perms 310 --
-%s
+ created in requested dir
-- dir perms 311 --
-%s
+ created in requested dir
-- dir perms 312 --
-%s
+ created in requested dir
-- dir perms 313 --
-%s
+ created in requested dir
-- dir perms 314 --
-%s
+ created in requested dir
-- dir perms 315 --
-%s
+ created in requested dir
-- dir perms 316 --
-%s
+ created in requested dir
-- dir perms 317 --
-%s
+ created in requested dir
-- dir perms 320 --
-%s
+ created in requested dir
-- dir perms 321 --
-%s
+ created in requested dir
-- dir perms 322 --
-%s
+ created in requested dir
-- dir perms 323 --
-%s
+ created in requested dir
-- dir perms 324 --
-%s
+ created in requested dir
-- dir perms 325 --
-%s
+ created in requested dir
-- dir perms 326 --
-%s
+ created in requested dir
-- dir perms 327 --
-%s
+ created in requested dir
-- dir perms 330 --
-%s
+ created in requested dir
-- dir perms 331 --
-%s
+ created in requested dir
-- dir perms 332 --
-%s
+ created in requested dir
-- dir perms 333 --
-%s
+ created in requested dir
-- dir perms 334 --
-%s
+ created in requested dir
-- dir perms 335 --
-%s
+ created in requested dir
-- dir perms 336 --
-%s
+ created in requested dir
-- dir perms 337 --
-%s
+ created in requested dir
-- dir perms 340 --
-%s
+ created in requested dir
-- dir perms 341 --
-%s
+ created in requested dir
-- dir perms 342 --
-%s
+ created in requested dir
-- dir perms 343 --
-%s
+ created in requested dir
-- dir perms 344 --
-%s
+ created in requested dir
-- dir perms 345 --
-%s
+ created in requested dir
-- dir perms 346 --
-%s
+ created in requested dir
-- dir perms 347 --
-%s
+ created in requested dir
-- dir perms 350 --
-%s
+ created in requested dir
-- dir perms 351 --
-%s
+ created in requested dir
-- dir perms 352 --
-%s
+ created in requested dir
-- dir perms 353 --
-%s
+ created in requested dir
-- dir perms 354 --
-%s
+ created in requested dir
-- dir perms 355 --
-%s
+ created in requested dir
-- dir perms 356 --
-%s
+ created in requested dir
-- dir perms 357 --
-%s
+ created in requested dir
-- dir perms 360 --
-%s
+ created in requested dir
-- dir perms 361 --
-%s
+ created in requested dir
-- dir perms 362 --
-%s
+ created in requested dir
-- dir perms 363 --
-%s
+ created in requested dir
-- dir perms 364 --
-%s
+ created in requested dir
-- dir perms 365 --
-%s
+ created in requested dir
-- dir perms 366 --
-%s
+ created in requested dir
-- dir perms 367 --
-%s
+ created in requested dir
-- dir perms 370 --
-%s
+ created in requested dir
-- dir perms 371 --
-%s
+ created in requested dir
-- dir perms 372 --
-%s
+ created in requested dir
-- dir perms 373 --
-%s
+ created in requested dir
-- dir perms 374 --
-%s
+ created in requested dir
-- dir perms 375 --
-%s
+ created in requested dir
-- dir perms 376 --
-%s
+ created in requested dir
-- dir perms 377 --
-%s
+ created in requested dir
-- dir perms 400 --
-%s
+ created in temp dir
-- dir perms 401 --
-%s
+ created in temp dir
-- dir perms 402 --
-%s
+ created in temp dir
-- dir perms 403 --
-%s
+ created in temp dir
-- dir perms 404 --
-%s
+ created in temp dir
-- dir perms 405 --
-%s
+ created in temp dir
-- dir perms 406 --
-%s
+ created in temp dir
-- dir perms 407 --
-%s
+ created in temp dir
-- dir perms 410 --
-%s
+ created in temp dir
-- dir perms 411 --
-%s
+ created in temp dir
-- dir perms 412 --
-%s
+ created in temp dir
-- dir perms 413 --
-%s
+ created in temp dir
-- dir perms 414 --
-%s
+ created in temp dir
-- dir perms 415 --
-%s
+ created in temp dir
-- dir perms 416 --
-%s
+ created in temp dir
-- dir perms 417 --
-%s
+ created in temp dir
-- dir perms 420 --
-%s
+ created in temp dir
-- dir perms 421 --
-%s
+ created in temp dir
-- dir perms 422 --
-%s
+ created in temp dir
-- dir perms 423 --
-%s
+ created in temp dir
-- dir perms 424 --
-%s
+ created in temp dir
-- dir perms 425 --
-%s
+ created in temp dir
-- dir perms 426 --
-%s
+ created in temp dir
-- dir perms 427 --
-%s
+ created in temp dir
-- dir perms 430 --
-%s
+ created in temp dir
-- dir perms 431 --
-%s
+ created in temp dir
-- dir perms 432 --
-%s
+ created in temp dir
-- dir perms 433 --
-%s
+ created in temp dir
-- dir perms 434 --
-%s
+ created in temp dir
-- dir perms 435 --
-%s
+ created in temp dir
-- dir perms 436 --
-%s
+ created in temp dir
-- dir perms 437 --
-%s
+ created in temp dir
-- dir perms 440 --
-%s
+ created in temp dir
-- dir perms 441 --
-%s
+ created in temp dir
-- dir perms 442 --
-%s
+ created in temp dir
-- dir perms 443 --
-%s
+ created in temp dir
-- dir perms 444 --
-%s
+ created in temp dir
-- dir perms 445 --
-%s
+ created in temp dir
-- dir perms 446 --
-%s
+ created in temp dir
-- dir perms 447 --
-%s
+ created in temp dir
-- dir perms 450 --
-%s
+ created in temp dir
-- dir perms 451 --
-%s
+ created in temp dir
-- dir perms 452 --
-%s
+ created in temp dir
-- dir perms 453 --
-%s
+ created in temp dir
-- dir perms 454 --
-%s
+ created in temp dir
-- dir perms 455 --
-%s
+ created in temp dir
-- dir perms 456 --
-%s
+ created in temp dir
-- dir perms 457 --
-%s
+ created in temp dir
-- dir perms 460 --
-%s
+ created in temp dir
-- dir perms 461 --
-%s
+ created in temp dir
-- dir perms 462 --
-%s
+ created in temp dir
-- dir perms 463 --
-%s
+ created in temp dir
-- dir perms 464 --
-%s
+ created in temp dir
-- dir perms 465 --
-%s
+ created in temp dir
-- dir perms 466 --
-%s
+ created in temp dir
-- dir perms 467 --
-%s
+ created in temp dir
-- dir perms 470 --
-%s
+ created in temp dir
-- dir perms 471 --
-%s
+ created in temp dir
-- dir perms 472 --
-%s
+ created in temp dir
-- dir perms 473 --
-%s
+ created in temp dir
-- dir perms 474 --
-%s
+ created in temp dir
-- dir perms 475 --
-%s
+ created in temp dir
-- dir perms 476 --
-%s
+ created in temp dir
-- dir perms 477 --
-%s
+ created in temp dir
-- dir perms 500 --
-%s
+ created in temp dir
-- dir perms 501 --
-%s
+ created in temp dir
-- dir perms 502 --
-%s
+ created in temp dir
-- dir perms 503 --
-%s
+ created in temp dir
-- dir perms 504 --
-%s
+ created in temp dir
-- dir perms 505 --
-%s
+ created in temp dir
-- dir perms 506 --
-%s
+ created in temp dir
-- dir perms 507 --
-%s
+ created in temp dir
-- dir perms 510 --
-%s
+ created in temp dir
-- dir perms 511 --
-%s
+ created in temp dir
-- dir perms 512 --
-%s
+ created in temp dir
-- dir perms 513 --
-%s
+ created in temp dir
-- dir perms 514 --
-%s
+ created in temp dir
-- dir perms 515 --
-%s
+ created in temp dir
-- dir perms 516 --
-%s
+ created in temp dir
-- dir perms 517 --
-%s
+ created in temp dir
-- dir perms 520 --
-%s
+ created in temp dir
-- dir perms 521 --
-%s
+ created in temp dir
-- dir perms 522 --
-%s
+ created in temp dir
-- dir perms 523 --
-%s
+ created in temp dir
-- dir perms 524 --
-%s
+ created in temp dir
-- dir perms 525 --
-%s
+ created in temp dir
-- dir perms 526 --
-%s
+ created in temp dir
-- dir perms 527 --
-%s
+ created in temp dir
-- dir perms 530 --
-%s
+ created in temp dir
-- dir perms 531 --
-%s
+ created in temp dir
-- dir perms 532 --
-%s
+ created in temp dir
-- dir perms 533 --
-%s
+ created in temp dir
-- dir perms 534 --
-%s
+ created in temp dir
-- dir perms 535 --
-%s
+ created in temp dir
-- dir perms 536 --
-%s
+ created in temp dir
-- dir perms 537 --
-%s
+ created in temp dir
-- dir perms 540 --
-%s
+ created in temp dir
-- dir perms 541 --
-%s
+ created in temp dir
-- dir perms 542 --
-%s
+ created in temp dir
-- dir perms 543 --
-%s
+ created in temp dir
-- dir perms 544 --
-%s
+ created in temp dir
-- dir perms 545 --
-%s
+ created in temp dir
-- dir perms 546 --
-%s
+ created in temp dir
-- dir perms 547 --
-%s
+ created in temp dir
-- dir perms 550 --
-%s
+ created in temp dir
-- dir perms 551 --
-%s
+ created in temp dir
-- dir perms 552 --
-%s
+ created in temp dir
-- dir perms 553 --
-%s
+ created in temp dir
-- dir perms 554 --
-%s
+ created in temp dir
-- dir perms 555 --
-%s
+ created in temp dir
-- dir perms 556 --
-%s
+ created in temp dir
-- dir perms 557 --
-%s
+ created in temp dir
-- dir perms 560 --
-%s
+ created in temp dir
-- dir perms 561 --
-%s
+ created in temp dir
-- dir perms 562 --
-%s
+ created in temp dir
-- dir perms 563 --
-%s
+ created in temp dir
-- dir perms 564 --
-%s
+ created in temp dir
-- dir perms 565 --
-%s
+ created in temp dir
-- dir perms 566 --
-%s
+ created in temp dir
-- dir perms 567 --
-%s
+ created in temp dir
-- dir perms 570 --
-%s
+ created in temp dir
-- dir perms 571 --
-%s
+ created in temp dir
-- dir perms 572 --
-%s
+ created in temp dir
-- dir perms 573 --
-%s
+ created in temp dir
-- dir perms 574 --
-%s
+ created in temp dir
-- dir perms 575 --
-%s
+ created in temp dir
-- dir perms 576 --
-%s
+ created in temp dir
-- dir perms 577 --
-%s
+ created in temp dir
-- dir perms 600 --
-%s
+ created in temp dir
-- dir perms 601 --
-%s
+ created in temp dir
-- dir perms 602 --
-%s
+ created in temp dir
-- dir perms 603 --
-%s
+ created in temp dir
-- dir perms 604 --
-%s
+ created in temp dir
-- dir perms 605 --
-%s
+ created in temp dir
-- dir perms 606 --
-%s
+ created in temp dir
-- dir perms 607 --
-%s
+ created in temp dir
-- dir perms 610 --
-%s
+ created in temp dir
-- dir perms 611 --
-%s
+ created in temp dir
-- dir perms 612 --
-%s
+ created in temp dir
-- dir perms 613 --
-%s
+ created in temp dir
-- dir perms 614 --
-%s
+ created in temp dir
-- dir perms 615 --
-%s
+ created in temp dir
-- dir perms 616 --
-%s
+ created in temp dir
-- dir perms 617 --
-%s
+ created in temp dir
-- dir perms 620 --
-%s
+ created in temp dir
-- dir perms 621 --
-%s
+ created in temp dir
-- dir perms 622 --
-%s
+ created in temp dir
-- dir perms 623 --
-%s
+ created in temp dir
-- dir perms 624 --
-%s
+ created in temp dir
-- dir perms 625 --
-%s
+ created in temp dir
-- dir perms 626 --
-%s
+ created in temp dir
-- dir perms 627 --
-%s
+ created in temp dir
-- dir perms 630 --
-%s
+ created in temp dir
-- dir perms 631 --
-%s
+ created in temp dir
-- dir perms 632 --
-%s
+ created in temp dir
-- dir perms 633 --
-%s
+ created in temp dir
-- dir perms 634 --
-%s
+ created in temp dir
-- dir perms 635 --
-%s
+ created in temp dir
-- dir perms 636 --
-%s
+ created in temp dir
-- dir perms 637 --
-%s
+ created in temp dir
-- dir perms 640 --
-%s
+ created in temp dir
-- dir perms 641 --
-%s
+ created in temp dir
-- dir perms 642 --
-%s
+ created in temp dir
-- dir perms 643 --
-%s
+ created in temp dir
-- dir perms 644 --
-%s
+ created in temp dir
-- dir perms 645 --
-%s
+ created in temp dir
-- dir perms 646 --
-%s
+ created in temp dir
-- dir perms 647 --
-%s
+ created in temp dir
-- dir perms 650 --
-%s
+ created in temp dir
-- dir perms 651 --
-%s
+ created in temp dir
-- dir perms 652 --
-%s
+ created in temp dir
-- dir perms 653 --
-%s
+ created in temp dir
-- dir perms 654 --
-%s
+ created in temp dir
-- dir perms 655 --
-%s
+ created in temp dir
-- dir perms 656 --
-%s
+ created in temp dir
-- dir perms 657 --
-%s
+ created in temp dir
-- dir perms 660 --
-%s
+ created in temp dir
-- dir perms 661 --
-%s
+ created in temp dir
-- dir perms 662 --
-%s
+ created in temp dir
-- dir perms 663 --
-%s
+ created in temp dir
-- dir perms 664 --
-%s
+ created in temp dir
-- dir perms 665 --
-%s
+ created in temp dir
-- dir perms 666 --
-%s
+ created in temp dir
-- dir perms 667 --
-%s
+ created in temp dir
-- dir perms 670 --
-%s
+ created in temp dir
-- dir perms 671 --
-%s
+ created in temp dir
-- dir perms 672 --
-%s
+ created in temp dir
-- dir perms 673 --
-%s
+ created in temp dir
-- dir perms 674 --
-%s
+ created in temp dir
-- dir perms 675 --
-%s
+ created in temp dir
-- dir perms 676 --
-%s
+ created in temp dir
-- dir perms 677 --
-%s
+ created in temp dir
-- dir perms 700 --
-%s
+ created in requested dir
-- dir perms 701 --
-%s
+ created in requested dir
-- dir perms 702 --
-%s
+ created in requested dir
-- dir perms 703 --
-%s
+ created in requested dir
-- dir perms 704 --
-%s
+ created in requested dir
-- dir perms 705 --
-%s
+ created in requested dir
-- dir perms 706 --
-%s
+ created in requested dir
-- dir perms 707 --
-%s
+ created in requested dir
-- dir perms 710 --
-%s
+ created in requested dir
-- dir perms 711 --
-%s
+ created in requested dir
-- dir perms 712 --
-%s
+ created in requested dir
-- dir perms 713 --
-%s
+ created in requested dir
-- dir perms 714 --
-%s
+ created in requested dir
-- dir perms 715 --
-%s
+ created in requested dir
-- dir perms 716 --
-%s
+ created in requested dir
-- dir perms 717 --
-%s
+ created in requested dir
-- dir perms 720 --
-%s
+ created in requested dir
-- dir perms 721 --
-%s
+ created in requested dir
-- dir perms 722 --
-%s
+ created in requested dir
-- dir perms 723 --
-%s
+ created in requested dir
-- dir perms 724 --
-%s
+ created in requested dir
-- dir perms 725 --
-%s
+ created in requested dir
-- dir perms 726 --
-%s
+ created in requested dir
-- dir perms 727 --
-%s
+ created in requested dir
-- dir perms 730 --
-%s
+ created in requested dir
-- dir perms 731 --
-%s
+ created in requested dir
-- dir perms 732 --
-%s
+ created in requested dir
-- dir perms 733 --
-%s
+ created in requested dir
-- dir perms 734 --
-%s
+ created in requested dir
-- dir perms 735 --
-%s
+ created in requested dir
-- dir perms 736 --
-%s
+ created in requested dir
-- dir perms 737 --
-%s
+ created in requested dir
-- dir perms 740 --
-%s
+ created in requested dir
-- dir perms 741 --
-%s
+ created in requested dir
-- dir perms 742 --
-%s
+ created in requested dir
-- dir perms 743 --
-%s
+ created in requested dir
-- dir perms 744 --
-%s
+ created in requested dir
-- dir perms 745 --
-%s
+ created in requested dir
-- dir perms 746 --
-%s
+ created in requested dir
-- dir perms 747 --
-%s
+ created in requested dir
-- dir perms 750 --
-%s
+ created in requested dir
-- dir perms 751 --
-%s
+ created in requested dir
-- dir perms 752 --
-%s
+ created in requested dir
-- dir perms 753 --
-%s
+ created in requested dir
-- dir perms 754 --
-%s
+ created in requested dir
-- dir perms 755 --
-%s
+ created in requested dir
-- dir perms 756 --
-%s
+ created in requested dir
-- dir perms 757 --
-%s
+ created in requested dir
-- dir perms 760 --
-%s
+ created in requested dir
-- dir perms 761 --
-%s
+ created in requested dir
-- dir perms 762 --
-%s
+ created in requested dir
-- dir perms 763 --
-%s
+ created in requested dir
-- dir perms 764 --
-%s
+ created in requested dir
-- dir perms 765 --
-%s
+ created in requested dir
-- dir perms 766 --
-%s
+ created in requested dir
-- dir perms 767 --
-%s
+ created in requested dir
-- dir perms 770 --
-%s
+ created in requested dir
-- dir perms 771 --
-%s
+ created in requested dir
-- dir perms 772 --
-%s
+ created in requested dir
-- dir perms 773 --
-%s
+ created in requested dir
-- dir perms 774 --
-%s
+ created in requested dir
-- dir perms 775 --
-%s
+ created in requested dir
-- dir perms 776 --
-%s
+ created in requested dir
-- dir perms 777 --
-%s
+ created in requested dir
*** Done ***
diff --git a/ext/standard/tests/file/tempnam_variation5-win32.phpt b/ext/standard/tests/file/tempnam_variation5-win32.phpt
new file mode 100644
index 000000000..3e39352fe
--- /dev/null
+++ b/ext/standard/tests/file/tempnam_variation5-win32.phpt
@@ -0,0 +1,54 @@
+--TEST--
+Test tempnam() function: usage variations - existing file
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Windows only");
+?>
+--FILE--
+<?php
+/* Prototype: string tempnam ( string $dir, string $prefix );
+ Description: Create file with unique file name.
+*/
+
+/* Passing an existing file as $prefix for tempnam() fn */
+
+$file_path = dirname(__FILE__);
+
+echo "*** Test tempnam() function: by passing an existing filename as prefix ***\n";
+$dir_name = $file_path."/tempnam_variation6";
+mkdir($dir_name);
+$h = fopen($dir_name."/tempnam_variation6.tmp", "w");
+
+for($i=1; $i<=3; $i++) {
+ echo "-- Iteration $i --\n";
+ $created_file = tempnam("$dir_name", "tempnam_variation6.tmp");
+
+ if( file_exists($created_file) ) {
+ echo "File name is => ";
+ print($created_file);
+ echo "\n";
+ }
+ else
+ print("File is not created");
+
+ unlink($created_file);
+}
+fclose($h);
+unlink($dir_name."/tempnam_variation6.tmp");
+rmdir($dir_name);
+
+echo "\n*** Done ***\n";
+?>
+--EXPECTF--
+*** Test tempnam() function: by passing an existing filename as prefix ***
+-- Iteration 1 --
+File name is => %stempnam_variation6%et%s
+-- Iteration 2 --
+File name is => %stempnam_variation6%et%s
+-- Iteration 3 --
+File name is => %stempnam_variation6%et%s
+
+*** Done ***
diff --git a/ext/standard/tests/file/tempnam_variation5.phpt b/ext/standard/tests/file/tempnam_variation5.phpt
index 2d5f53dcd..26c3f91f1 100644
--- a/ext/standard/tests/file/tempnam_variation5.phpt
+++ b/ext/standard/tests/file/tempnam_variation5.phpt
@@ -1,5 +1,10 @@
--TEST--
Test tempnam() function: usage variations - existing file
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip Do not run on Windows");
+?>
--FILE--
<?php
/* Prototype: string tempnam ( string $dir, string $prefix );
@@ -13,7 +18,7 @@ $file_path = dirname(__FILE__);
echo "*** Test tempnam() function: by passing an existing filename as prefix ***\n";
$dir_name = $file_path."/tempnam_variation6";
mkdir($dir_name);
-fopen($dir_name."/tempnam_variation6.tmp", "w");
+$h = fopen($dir_name."/tempnam_variation6.tmp", "w");
for($i=1; $i<=3; $i++) {
echo "-- Iteration $i --\n";
@@ -29,6 +34,7 @@ for($i=1; $i<=3; $i++) {
unlink($created_file);
}
+fclose($h);
unlink($dir_name."/tempnam_variation6.tmp");
rmdir($dir_name);
@@ -37,10 +43,10 @@ echo "\n*** Done ***\n";
--EXPECTF--
*** Test tempnam() function: by passing an existing filename as prefix ***
-- Iteration 1 --
-File name is => %s
+File name is => %stempnam_variation6%etempnam_variation6.tmp%s
-- Iteration 2 --
-File name is => %s
+File name is => %stempnam_variation6%etempnam_variation6.tmp%s
-- Iteration 3 --
-File name is => %s
+File name is => %stempnam_variation6%etempnam_variation6.tmp%s
*** Done ***
diff --git a/ext/standard/tests/file/tempnam_variation6-win32.phpt b/ext/standard/tests/file/tempnam_variation6-win32.phpt
new file mode 100644
index 000000000..efe7e86e8
--- /dev/null
+++ b/ext/standard/tests/file/tempnam_variation6-win32.phpt
@@ -0,0 +1,62 @@
+--TEST--
+Test tempnam() function: usage variations - Using previous unique filename
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Windows Only");
+?>
+--FILE--
+<?php
+/* Prototype: string tempnam ( string $dir, string $prefix );
+ Description: Create file with unique file name.
+*/
+
+/* Trying to create unique files by passing previously created unique file name as prefix */
+
+$file_path = dirname(__FILE__);
+
+echo "\n*** Test tempnam(): by passing previously created filenames ***\n";
+$file_name = "tempnam_variation6.tmp";
+for($i=1; $i<=3; $i++) {
+ echo "-- Iteration $i --\n";
+ $file_name = tempnam("$file_path", $file_name);
+
+ if( file_exists($file_name) ) {
+ echo "File name is => ";
+ print($file_name);
+ echo "\n";
+
+ echo "File created in => ";
+ $file_dir = dirname($file_name);
+
+ if ($file_dir == sys_get_temp_dir()) {
+ echo "temp dir\n";
+ }
+ else if ($file_dir == $file_path) {
+ echo "directory specified\n";
+ }
+ else {
+ echo "unknown location\n";
+ }
+ }
+
+ unlink($file_name);
+}
+
+echo "\n*** Done ***\n";
+?>
+--EXPECTF--
+*** Test tempnam(): by passing previously created filenames ***
+-- Iteration 1 --
+File name is => %s%et%s
+File created in => directory specified
+-- Iteration 2 --
+File name is => %s%et%s
+File created in => directory specified
+-- Iteration 3 --
+File name is => %s%et%s
+File created in => directory specified
+
+*** Done ***
diff --git a/ext/standard/tests/file/tempnam_variation6.phpt b/ext/standard/tests/file/tempnam_variation6.phpt
index 51ecde9a7..5eb6e6fc8 100644
--- a/ext/standard/tests/file/tempnam_variation6.phpt
+++ b/ext/standard/tests/file/tempnam_variation6.phpt
@@ -1,5 +1,10 @@
--TEST--
-Test tempnam() function: usage variations - Using previous unique filename
+Test tempnam() function: usage variations - Using previous unique filename
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip Do not run on Windows");
+?>
--FILE--
<?php
/* Prototype: string tempnam ( string $dir, string $prefix );
@@ -20,7 +25,20 @@ for($i=1; $i<=3; $i++) {
echo "File name is => ";
print($file_name);
echo "\n";
- }
+
+ echo "File created in => ";
+ $file_dir = dirname($file_name);
+
+ if ($file_dir == sys_get_temp_dir()) {
+ echo "temp dir\n";
+ }
+ else if ($file_dir == $file_path) {
+ echo "directory specified\n";
+ }
+ else {
+ echo "unknown location\n";
+ }
+ }
unlink($file_name);
}
@@ -30,10 +48,13 @@ echo "\n*** Done ***\n";
--EXPECTF--
*** Test tempnam(): by passing previously created filenames ***
-- Iteration 1 --
-File name is => %s
+File name is => %s%etempnam_variation6.tmp%s
+File created in => directory specified
-- Iteration 2 --
-File name is => %s
+File name is => %s%etempnam_variation6.tmp%s
+File created in => directory specified
-- Iteration 3 --
-File name is => %s
+File name is => %s%etempnam_variation6.tmp%s
+File created in => directory specified
*** Done ***
diff --git a/ext/standard/tests/file/tempnam_variation7-win32.phpt b/ext/standard/tests/file/tempnam_variation7-win32.phpt
index a88866b9b..98fd2ba37 100644
--- a/ext/standard/tests/file/tempnam_variation7-win32.phpt
+++ b/ext/standard/tests/file/tempnam_variation7-win32.phpt
@@ -3,7 +3,7 @@ Test tempnam() function: usage variations - invalid/non-existing dir
--SKIPIF--
<?php
if(substr(PHP_OS, 0, 3) != "WIN")
- die("skip Run only on Windows");
+ die("skip Only run on Windows");
?>
--FILE--
<?php
@@ -15,8 +15,6 @@ if(substr(PHP_OS, 0, 3) != "WIN")
hence the unique files will be created in temporary dir */
echo "*** Testing tempnam() with invalid/non-existing directory names ***\n";
-$file_path = dirname(__FILE__);
-
/* An array of names, which will be passed as a dir name */
$names_arr = array(
/* Invalid args */
@@ -26,7 +24,7 @@ $names_arr = array(
NULL,
"",
" ",
- "/0",
+ "\0",
array(),
/* Non-existing dirs */
@@ -35,7 +33,7 @@ $names_arr = array(
);
-for( $i=1; $i<count($names_arr); $i++ ) {
+for( $i=0; $i<count($names_arr); $i++ ) {
echo "-- Iteration $i --\n";
$file_name = tempnam($names_arr[$i], "tempnam_variation3.tmp");
@@ -48,9 +46,19 @@ for( $i=1; $i<count($names_arr); $i++ ) {
echo "File permissions are => ";
printf("%o", fileperms($file_name) );
echo "\n";
+
+ echo "File created in => ";
+ $file_dir = dirname($file_name);
+ if (realpath($file_dir) == realpath(sys_get_temp_dir()) || realpath($file_dir."\\") == realpath(sys_get_temp_dir())) {
+ echo "temp dir\n";
+ }
+ else {
+ echo "unknown location\n";
+ }
}
- else
+ else {
echo "-- File is not created --\n";
+ }
unlink($file_name);
}
@@ -59,34 +67,47 @@ echo "\n*** Done ***\n";
?>
--EXPECTF--
*** Testing tempnam() with invalid/non-existing directory names ***
+-- Iteration 0 --
+File name is => %s%et%s
+File permissions are => 100666
+File created in => temp dir
-- Iteration 1 --
-File name is => %s
+File name is => %s%et%s
File permissions are => 100666
+File created in => temp dir
-- Iteration 2 --
-File name is => %s
+File name is => %s%et%s
File permissions are => 100666
+File created in => temp dir
-- Iteration 3 --
-File name is => %s
+File name is => %s%et%s
File permissions are => 100666
+File created in => temp dir
-- Iteration 4 --
-File name is => %s
+File name is => %s%et%s
File permissions are => 100666
+File created in => temp dir
-- Iteration 5 --
-File name is => %s
+File name is => %s%et%s
File permissions are => 100666
+File created in => temp dir
-- Iteration 6 --
-File name is => %s
+File name is => %s%et%s
File permissions are => 100666
+File created in => temp dir
-- Iteration 7 --
Notice: Array to string conversion in %s on line %d
-File name is => %s
+File name is => %s%et%s
File permissions are => 100666
+File created in => temp dir
-- Iteration 8 --
-File name is => %s
+File name is => %s%et%s
File permissions are => 100666
+File created in => temp dir
-- Iteration 9 --
-File name is => %s
+File name is => %s%et%s
File permissions are => 100666
+File created in => temp dir
*** Done ***
diff --git a/ext/standard/tests/file/tempnam_variation7.phpt b/ext/standard/tests/file/tempnam_variation7.phpt
index b4b0035c9..65001207e 100644
--- a/ext/standard/tests/file/tempnam_variation7.phpt
+++ b/ext/standard/tests/file/tempnam_variation7.phpt
@@ -15,8 +15,6 @@ if(substr(PHP_OS, 0, 3) == "WIN")
hence the unique files will be created in temporary dir */
echo "*** Testing tempnam() with invalid/non-existing directory names ***\n";
-$file_path = dirname(__FILE__);
-
/* An array of names, which will be passed as a dir name */
$names_arr = array(
/* Invalid args */
@@ -26,7 +24,7 @@ $names_arr = array(
NULL,
"",
" ",
- "/0",
+ "\0",
array(),
/* Non-existing dirs */
@@ -35,7 +33,7 @@ $names_arr = array(
);
-for( $i=1; $i<count($names_arr); $i++ ) {
+for( $i=0; $i<count($names_arr); $i++ ) {
echo "-- Iteration $i --\n";
$file_name = tempnam($names_arr[$i], "tempnam_variation3.tmp");
@@ -48,9 +46,21 @@ for( $i=1; $i<count($names_arr); $i++ ) {
echo "File permissions are => ";
printf("%o", fileperms($file_name) );
echo "\n";
+
+ echo "File created in => ";
+ $file_dir = dirname($file_name);
+
+ if (realpath($file_dir) == realpath(sys_get_temp_dir())) {
+ echo "temp dir\n";
+ }
+ else {
+ echo "unknown location\n";
+ }
+
}
- else
+ else {
echo "-- File is not created --\n";
+ }
unlink($file_name);
}
@@ -59,34 +69,47 @@ echo "\n*** Done ***\n";
?>
--EXPECTF--
*** Testing tempnam() with invalid/non-existing directory names ***
+-- Iteration 0 --
+File name is => %s%etempnam_variation3.tmp%s
+File permissions are => 100600
+File created in => temp dir
-- Iteration 1 --
-File name is => %s
+File name is => %s%etempnam_variation3.tmp%s
File permissions are => 100600
+File created in => temp dir
-- Iteration 2 --
-File name is => %s
+File name is => %s%etempnam_variation3.tmp%s
File permissions are => 100600
+File created in => temp dir
-- Iteration 3 --
-File name is => %s
+File name is => %s%etempnam_variation3.tmp%s
File permissions are => 100600
+File created in => temp dir
-- Iteration 4 --
-File name is => %s
+File name is => %s%etempnam_variation3.tmp%s
File permissions are => 100600
+File created in => temp dir
-- Iteration 5 --
-File name is => %s
+File name is => %s%etempnam_variation3.tmp%s
File permissions are => 100600
+File created in => temp dir
-- Iteration 6 --
-File name is => %s
+File name is => %s%etempnam_variation3.tmp%s
File permissions are => 100600
+File created in => temp dir
-- Iteration 7 --
Notice: Array to string conversion in %s on line %d
-File name is => %s
+File name is => %s%etempnam_variation3.tmp%s
File permissions are => 100600
+File created in => temp dir
-- Iteration 8 --
-File name is => %s
+File name is => %s%etempnam_variation3.tmp%s
File permissions are => 100600
+File created in => temp dir
-- Iteration 9 --
-File name is => %s
+File name is => %s%etempnam_variation3.tmp%s
File permissions are => 100600
+File created in => temp dir
*** Done ***
diff --git a/ext/standard/tests/file/tempnam_variation8-win32.phpt b/ext/standard/tests/file/tempnam_variation8-win32.phpt
new file mode 100644
index 000000000..8df67b609
--- /dev/null
+++ b/ext/standard/tests/file/tempnam_variation8-win32.phpt
@@ -0,0 +1,147 @@
+--TEST--
+Test tempnam() function: usage variations - various absolute and relative paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Only valid for Windows");
+?>
+--FILE--
+<?php
+/* Prototype: string tempnam ( string $dir, string $prefix );
+ Description: Create file with unique file name.
+*/
+
+/* Creating unique files in various dirs by passing relative paths to $dir arg */
+
+echo "*** Testing tempnam() with absolute and relative paths ***\n";
+$dir_name = dirname(__FILE__)."\\tempnam_variation2";
+mkdir($dir_name);
+$dir_path = $dir_name."/tempnam_variation2_sub";
+mkdir($dir_path);
+
+$old_dir_path = getcwd();
+chdir(dirname(__FILE__));
+
+$dir_paths = array(
+ // absolute paths
+ "$dir_path\\",
+ "$dir_path\\..",
+ "$dir_path\\\\..\\",
+ "$dir_path\\..\\..\\.\\tempnam_variation2",
+ "$dir_path\\..\\\\\\tempnam_variation2_sub\\\\..\\\\..\\tempnam_variation2",
+ "$dir_path\\BADDIR",
+
+
+ // relative paths
+ "tempname_variation2\\",
+ "tempnam_variation2\\tempnam_variation2_sub",
+ "tempnam_variation2\\\\tempnam_variation2_sub",
+ ".\\tempnam_variation2\\..\\tempnam_variation2\\tempnam_variation2_sub",
+ "BADDIR",
+);
+
+for($i = 0; $i<count($dir_paths); $i++) {
+ $j = $i+1;
+ echo "\n-- Iteration $j --\n";
+ $file_name = tempnam($dir_paths[$i], "tempnam_variation2.tmp");
+
+ if( file_exists($file_name) ){
+
+ echo "File name is => ";
+ print(realpath($file_name));
+ echo "\n";
+
+ echo "File permissions are => ";
+ printf("%o", fileperms($file_name) );
+ echo "\n";
+
+ echo "File created in => ";
+ $file_dir = dirname($file_name);
+ $dir_req = $dir_paths[$i];
+
+ if (realpath($file_dir) == realpath(sys_get_temp_dir()) || realpath($file_dir."\\") == realpath(sys_get_temp_dir())) {
+ echo "temp dir\n";
+ }
+ else if (realpath($file_dir) == realpath($dir_req) || realpath($file_dir."\\") == realpath($dir_req)) {
+ echo "directory specified\n";
+ }
+ else {
+ echo "unknown location\n";
+ }
+
+
+ }
+ else {
+ echo "-- File is not created --";
+ }
+
+ unlink($file_name);
+}
+
+chdir($old_dir_path);
+rmdir($dir_path);
+rmdir($dir_name);
+
+echo "\n*** Done ***\n";
+?>
+--EXPECTF--
+*** Testing tempnam() with absolute and relative paths ***
+
+-- Iteration 1 --
+File name is => %s\tempnam_variation2\tempnam_variation2_sub\t%s
+File permissions are => 100666
+File created in => directory specified
+
+-- Iteration 2 --
+File name is => %s\tempnam_variation2\t%s
+File permissions are => 100666
+File created in => directory specified
+
+-- Iteration 3 --
+File name is => %s\tempnam_variation2\t%s
+File permissions are => 100666
+File created in => directory specified
+
+-- Iteration 4 --
+File name is => %s\tempnam_variation2\t%s
+File permissions are => 100666
+File created in => directory specified
+
+-- Iteration 5 --
+File name is => %s\tempnam_variation2\t%s
+File permissions are => 100666
+File created in => directory specified
+
+-- Iteration 6 --
+File name is => %s\t%s
+File permissions are => 100666
+File created in => temp dir
+
+-- Iteration 7 --
+File name is => %s\t%s
+File permissions are => 100666
+File created in => temp dir
+
+-- Iteration 8 --
+File name is => %s\tempnam_variation2\tempnam_variation2_sub\t%s
+File permissions are => 100666
+File created in => directory specified
+
+-- Iteration 9 --
+File name is => %s\tempnam_variation2\tempnam_variation2_sub\t%s
+File permissions are => 100666
+File created in => directory specified
+
+-- Iteration 10 --
+File name is => %s\tempnam_variation2\tempnam_variation2_sub\t%s
+File permissions are => 100666
+File created in => directory specified
+
+-- Iteration 11 --
+File name is => %s\t%s
+File permissions are => 100666
+File created in => temp dir
+
+*** Done ***
diff --git a/ext/standard/tests/file/touch.phpt b/ext/standard/tests/file/touch.phpt
index 504674f17..4ea1ffd40 100644
--- a/ext/standard/tests/file/touch.phpt
+++ b/ext/standard/tests/file/touch.phpt
@@ -1,8 +1,16 @@
--TEST--
touch() tests
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip.. only for Non Windows.');
+}
+?>
--FILE--
<?php
+// This doesn't work for windows, time, atime usage results in very different
+// output to linux. This could be a php.net bug on windows or a windows querk.
$filename = dirname(__FILE__)."/touch.dat";
var_dump(touch());
@@ -44,6 +52,6 @@ int(100)
bool(true)
int(100)
-Warning: touch(): Unable to create file /no/such/file/or/directory because No such file or directory in %s on line %d
+Warning: touch(): Unable to create file /no/such/file/or/directory because %s in %s on line %d
bool(false)
Done
diff --git a/ext/standard/tests/file/touch_basic-win32.phpt b/ext/standard/tests/file/touch_basic-win32.phpt
new file mode 100644
index 000000000..3bd22aeea
--- /dev/null
+++ b/ext/standard/tests/file/touch_basic-win32.phpt
@@ -0,0 +1,95 @@
+--TEST--
+Test touch() function : basic functionality
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) != 'WIN') {
+ die('skip.. only for Windows');
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto bool touch(string filename [, int time [, int atime]])
+ * Description: Set modification time of file
+ * Source code: ext/standard/filestat.c
+ * Alias to functions:
+ */
+
+echo "*** Testing touch() : basic functionality ***\n";
+
+$filename = dirname(__FILE__)."/touch.dat";
+
+echo "\n--- testing touch creates a file ---\n";
+@unlink($filename);
+if (file_exists($filename)) {
+ die("touch_basic failed");
+}
+var_dump( touch($filename) );
+if (file_exists($filename) == false) {
+ die("touch_basic failed");
+}
+
+echo "\n --- testing touch doesn't alter file contents ---\n";
+$testln = "Here is a test line";
+$h = fopen($filename, "wb");
+fwrite($h, $testln);
+fclose($h);
+touch($filename);
+$h = fopen($filename, "rb");
+echo fgets($h);
+fclose($h);
+
+echo "\n\n --- testing touch alters the correct file metadata ---\n";
+$init_meta = stat($filename);
+clearstatcache();
+sleep(1);
+touch($filename);
+$next_meta = stat($filename);
+$type = array("dev", "ino", "mode", "nlink", "uid", "gid",
+ "rdev", "size", "atime", "mtime", "ctime",
+ "blksize", "blocks");
+
+for ($i = 0; $i < count($type); $i++) {
+ if ($init_meta[$i] != $next_meta[$i]) {
+ echo "stat data differs at $type[$i]\n";
+ }
+}
+
+
+// Initialise all required variables
+$time = 10000;
+$atime = 20470;
+
+// Calling touch() with all possible arguments
+echo "\n --- testing touch using all parameters ---\n";
+var_dump( touch($filename, $time, $atime) );
+clearstatcache();
+$init_meta = stat($filename);
+echo "ctime=".$init_meta['ctime']."\n";
+echo "mtime=".$init_meta['mtime']."\n";
+echo "atime=".$init_meta['atime']."\n";
+
+unlink($filename);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing touch() : basic functionality ***
+
+--- testing touch creates a file ---
+bool(true)
+
+ --- testing touch doesn't alter file contents ---
+Here is a test line
+
+ --- testing touch alters the correct file metadata ---
+stat data differs at atime
+stat data differs at mtime
+
+ --- testing touch using all parameters ---
+bool(true)
+ctime=%d
+mtime=10000
+atime=20470
+Done
diff --git a/ext/standard/tests/file/touch_basic.phpt b/ext/standard/tests/file/touch_basic.phpt
new file mode 100644
index 000000000..fb042df67
--- /dev/null
+++ b/ext/standard/tests/file/touch_basic.phpt
@@ -0,0 +1,96 @@
+--TEST--
+Test touch() function : basic functionality
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip.. only for Non Windows');
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto bool touch(string filename [, int time [, int atime]])
+ * Description: Set modification time of file
+ * Source code: ext/standard/filestat.c
+ * Alias to functions:
+ */
+
+echo "*** Testing touch() : basic functionality ***\n";
+
+$filename = dirname(__FILE__)."/touch.dat";
+
+echo "\n--- testing touch creates a file ---\n";
+@unlink($filename);
+if (file_exists($filename)) {
+ die("touch_basic failed");
+}
+var_dump( touch($filename) );
+if (file_exists($filename) == false) {
+ die("touch_basic failed");
+}
+
+echo "\n --- testing touch doesn't alter file contents ---\n";
+$testln = "Here is a test line";
+$h = fopen($filename, "wb");
+fwrite($h, $testln);
+fclose($h);
+touch($filename);
+$h = fopen($filename, "rb");
+echo fgets($h);
+fclose($h);
+
+echo "\n\n --- testing touch alters the correct file metadata ---\n";
+$init_meta = stat($filename);
+clearstatcache();
+sleep(1);
+touch($filename);
+$next_meta = stat($filename);
+$type = array("dev", "ino", "mode", "nlink", "uid", "gid",
+ "rdev", "size", "atime", "mtime", "ctime",
+ "blksize", "blocks");
+
+for ($i = 0; $i < count($type); $i++) {
+ if ($init_meta[$i] != $next_meta[$i]) {
+ echo "stat data differs at $type[$i]\n";
+ }
+}
+
+
+// Initialise all required variables
+$time = 10000;
+$atime = 20470;
+
+// Calling touch() with all possible arguments
+echo "\n --- testing touch using all parameters ---\n";
+var_dump( touch($filename, $time, $atime) );
+clearstatcache();
+$init_meta = stat($filename);
+echo "ctime=".$init_meta['ctime']."\n";
+echo "mtime=".$init_meta['mtime']."\n";
+echo "atime=".$init_meta['atime']."\n";
+
+unlink($filename);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing touch() : basic functionality ***
+
+--- testing touch creates a file ---
+bool(true)
+
+ --- testing touch doesn't alter file contents ---
+Here is a test line
+
+ --- testing touch alters the correct file metadata ---
+stat data differs at atime
+stat data differs at mtime
+stat data differs at ctime
+
+ --- testing touch using all parameters ---
+bool(true)
+ctime=%d
+mtime=10000
+atime=20470
+Done
diff --git a/ext/standard/tests/file/touch_error.phpt b/ext/standard/tests/file/touch_error.phpt
new file mode 100644
index 000000000..778969928
--- /dev/null
+++ b/ext/standard/tests/file/touch_error.phpt
@@ -0,0 +1,21 @@
+--TEST--
+touch() error tests
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+
+var_dump(touch());
+var_dump(touch(1, 2, 3, 4));
+var_dump(touch("/no/such/file/or/directory"));
+
+?>
+--EXPECTF--
+Warning: Wrong parameter count for touch() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for touch() in %s on line %d
+NULL
+
+Warning: touch(): Unable to create file /no/such/file/or/directory because %s in %s on line %d
+bool(false) \ No newline at end of file
diff --git a/ext/standard/tests/file/touch_variation1.phpt b/ext/standard/tests/file/touch_variation1.phpt
new file mode 100644
index 000000000..dba41a607
--- /dev/null
+++ b/ext/standard/tests/file/touch_variation1.phpt
@@ -0,0 +1,39 @@
+--TEST--
+touch() with times
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip.. Not valid for Windows');
+}
+?>
+--FILE--
+<?php
+
+$filename = dirname(__FILE__)."/touch.dat";
+
+
+var_dump(touch($filename, 101));
+var_dump(filemtime($filename));
+var_dump(fileatime($filename));
+
+@unlink($filename);
+
+@unlink($filename);
+var_dump(touch($filename, 100, 102));
+var_dump(filemtime($filename));
+var_dump(fileatime($filename));
+
+@unlink($filename);
+echo "Done\n";
+
+?>
+--EXPECTF--
+bool(true)
+int(101)
+int(101)
+bool(true)
+int(100)
+int(102)
+Done \ No newline at end of file
diff --git a/ext/standard/tests/file/touch_variation2.phpt b/ext/standard/tests/file/touch_variation2.phpt
new file mode 100644
index 000000000..9ccb90c75
--- /dev/null
+++ b/ext/standard/tests/file/touch_variation2.phpt
@@ -0,0 +1,24 @@
+--TEST--
+touch() - ensure touch does not delete existing file.
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+
+
+$filename = dirname(__FILE__)."/touch.dat";
+$fp=fopen($filename,"w");
+fwrite ($fp,"mydata");
+fclose($fp);
+
+var_dump(touch($filename, 101));
+var_dump(file_get_contents($filename));
+
+@unlink($filename);
+echo "Done\n";
+
+?>
+--EXPECT--
+bool(true)
+string(6) "mydata"
+Done
diff --git a/ext/standard/tests/file/touch_variation3-win32.phpt b/ext/standard/tests/file/touch_variation3-win32.phpt
new file mode 100644
index 000000000..c994199c7
--- /dev/null
+++ b/ext/standard/tests/file/touch_variation3-win32.phpt
@@ -0,0 +1,198 @@
+--TEST--
+Test touch() function : usage variation - different types for time
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) != 'WIN') {
+ die('skip.. only for Windows');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool touch(string filename [, int time [, int atime]])
+ * Description: Set modification time of file
+ * Source code: ext/standard/filestat.c
+ * Alias to functions:
+ */
+
+echo "*** Testing touch() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$filename = 'touchVar2.tmp';
+$atime = 10;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for time
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( touch($filename, $value, $atime) );
+};
+
+unlink($filename);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing touch() : usage variation ***
+
+--float 10.5--
+bool(true)
+
+--float -10.5--
+Error: 2 - touch(): Utime failed: Invalid argument, %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - touch(): Utime failed: Invalid argument, %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+bool(true)
+
+--float .5--
+bool(true)
+
+--empty array--
+bool(true)
+
+--int indexed array--
+bool(true)
+
+--associative array--
+bool(true)
+
+--nested arrays--
+bool(true)
+
+--uppercase NULL--
+bool(true)
+
+--lowercase null--
+bool(true)
+
+--lowercase true--
+bool(true)
+
+--lowercase false--
+bool(true)
+
+--uppercase TRUE--
+bool(true)
+
+--uppercase FALSE--
+bool(true)
+
+--empty string DQ--
+bool(true)
+
+--empty string SQ--
+bool(true)
+
+--string DQ--
+bool(true)
+
+--string SQ--
+bool(true)
+
+--mixed case string--
+bool(true)
+
+--heredoc--
+bool(true)
+
+--instance of classWithToString--
+Error: 8 - Object of class classWithToString could not be converted to int, %s(%d)
+bool(true)
+
+--instance of classWithoutToString--
+Error: 8 - Object of class classWithoutToString could not be converted to int, %s(%d)
+bool(true)
+
+--undefined var--
+bool(true)
+
+--unset var--
+bool(true)
+===DONE===
diff --git a/ext/standard/tests/file/touch_variation3.phpt b/ext/standard/tests/file/touch_variation3.phpt
new file mode 100644
index 000000000..3e4f7763c
--- /dev/null
+++ b/ext/standard/tests/file/touch_variation3.phpt
@@ -0,0 +1,196 @@
+--TEST--
+Test touch() function : usage variation - different types for time
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip.. Not for Windows');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool touch(string filename [, int time [, int atime]])
+ * Description: Set modification time of file
+ * Source code: ext/standard/filestat.c
+ * Alias to functions:
+ */
+
+echo "*** Testing touch() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$filename = 'touchVar2.tmp';
+$atime = 10;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for time
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( touch($filename, $value, $atime) );
+};
+
+unlink($filename);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing touch() : usage variation ***
+
+--float 10.5--
+bool(true)
+
+--float -10.5--
+bool(true)
+
+--float 12.3456789000e10--
+bool(true)
+
+--float -12.3456789000e10--
+bool(true)
+
+--float .5--
+bool(true)
+
+--empty array--
+bool(true)
+
+--int indexed array--
+bool(true)
+
+--associative array--
+bool(true)
+
+--nested arrays--
+bool(true)
+
+--uppercase NULL--
+bool(true)
+
+--lowercase null--
+bool(true)
+
+--lowercase true--
+bool(true)
+
+--lowercase false--
+bool(true)
+
+--uppercase TRUE--
+bool(true)
+
+--uppercase FALSE--
+bool(true)
+
+--empty string DQ--
+bool(true)
+
+--empty string SQ--
+bool(true)
+
+--string DQ--
+bool(true)
+
+--string SQ--
+bool(true)
+
+--mixed case string--
+bool(true)
+
+--heredoc--
+bool(true)
+
+--instance of classWithToString--
+Error: 8 - Object of class classWithToString could not be converted to int, %s(%d)
+bool(true)
+
+--instance of classWithoutToString--
+Error: 8 - Object of class classWithoutToString could not be converted to int, %s(%d)
+bool(true)
+
+--undefined var--
+bool(true)
+
+--unset var--
+bool(true)
+===DONE===
diff --git a/ext/standard/tests/file/touch_variation4-win32.phpt b/ext/standard/tests/file/touch_variation4-win32.phpt
new file mode 100644
index 000000000..49cf8d576
--- /dev/null
+++ b/ext/standard/tests/file/touch_variation4-win32.phpt
@@ -0,0 +1,198 @@
+--TEST--
+Test touch() function : usage variation - different types for atime
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) != 'WIN') {
+ die('skip.. only for Windows');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool touch(string filename [, int time [, int atime]])
+ * Description: Set modification time of file
+ * Source code: ext/standard/filestat.c
+ * Alias to functions:
+ */
+
+echo "*** Testing touch() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$filename = 'touchVar3.tmp';
+$time = 10;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for atime
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( touch($filename, $time, $value) );
+};
+
+unlink($filename);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing touch() : usage variation ***
+
+--float 10.5--
+bool(true)
+
+--float -10.5--
+Error: 2 - touch(): Utime failed: Invalid argument, %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - touch(): Utime failed: Invalid argument, %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+bool(true)
+
+--float .5--
+bool(true)
+
+--empty array--
+bool(true)
+
+--int indexed array--
+bool(true)
+
+--associative array--
+bool(true)
+
+--nested arrays--
+bool(true)
+
+--uppercase NULL--
+bool(true)
+
+--lowercase null--
+bool(true)
+
+--lowercase true--
+bool(true)
+
+--lowercase false--
+bool(true)
+
+--uppercase TRUE--
+bool(true)
+
+--uppercase FALSE--
+bool(true)
+
+--empty string DQ--
+bool(true)
+
+--empty string SQ--
+bool(true)
+
+--string DQ--
+bool(true)
+
+--string SQ--
+bool(true)
+
+--mixed case string--
+bool(true)
+
+--heredoc--
+bool(true)
+
+--instance of classWithToString--
+Error: 8 - Object of class classWithToString could not be converted to int, %s(%d)
+bool(true)
+
+--instance of classWithoutToString--
+Error: 8 - Object of class classWithoutToString could not be converted to int, %s(%d)
+bool(true)
+
+--undefined var--
+bool(true)
+
+--unset var--
+bool(true)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/touch_variation4.phpt b/ext/standard/tests/file/touch_variation4.phpt
new file mode 100644
index 000000000..c71298a6e
--- /dev/null
+++ b/ext/standard/tests/file/touch_variation4.phpt
@@ -0,0 +1,196 @@
+--TEST--
+Test touch() function : usage variation - different types for atime
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip.. Not for Windows');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool touch(string filename [, int time [, int atime]])
+ * Description: Set modification time of file
+ * Source code: ext/standard/filestat.c
+ * Alias to functions:
+ */
+
+echo "*** Testing touch() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$filename = 'touchVar3.tmp';
+$time = 10;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for atime
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( touch($filename, $time, $value) );
+};
+
+unlink($filename);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing touch() : usage variation ***
+
+--float 10.5--
+bool(true)
+
+--float -10.5--
+bool(true)
+
+--float 12.3456789000e10--
+bool(true)
+
+--float -12.3456789000e10--
+bool(true)
+
+--float .5--
+bool(true)
+
+--empty array--
+bool(true)
+
+--int indexed array--
+bool(true)
+
+--associative array--
+bool(true)
+
+--nested arrays--
+bool(true)
+
+--uppercase NULL--
+bool(true)
+
+--lowercase null--
+bool(true)
+
+--lowercase true--
+bool(true)
+
+--lowercase false--
+bool(true)
+
+--uppercase TRUE--
+bool(true)
+
+--uppercase FALSE--
+bool(true)
+
+--empty string DQ--
+bool(true)
+
+--empty string SQ--
+bool(true)
+
+--string DQ--
+bool(true)
+
+--string SQ--
+bool(true)
+
+--mixed case string--
+bool(true)
+
+--heredoc--
+bool(true)
+
+--instance of classWithToString--
+Error: 8 - Object of class classWithToString could not be converted to int, %s(%d)
+bool(true)
+
+--instance of classWithoutToString--
+Error: 8 - Object of class classWithoutToString could not be converted to int, %s(%d)
+bool(true)
+
+--undefined var--
+bool(true)
+
+--unset var--
+bool(true)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/touch_variation5-win32.phpt b/ext/standard/tests/file/touch_variation5-win32.phpt
new file mode 100644
index 000000000..6b7bde4c4
--- /dev/null
+++ b/ext/standard/tests/file/touch_variation5-win32.phpt
@@ -0,0 +1,249 @@
+--TEST--
+Test touch() function : variation: various valid and invalid paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) != 'WIN') {
+ die('skip.. only for Windows');
+}
+--FILE--
+<?php
+/* Prototype : bool touch(string filename [, int time [, int atime]])
+ * Description: Set modification time of file
+ * Source code: ext/standard/filestat.c
+ * Alias to functions:
+ */
+
+$workDir = "touchVar5.tmp";
+$subDirOrFile = "aSubDirOrFile";
+mkdir($workDir);
+$cwd = getcwd();
+
+$paths = array(
+ // relative
+ $workDir.'/'.$subDirOrFile,
+ './'.$workDir.'/'.$subDirOrFile,
+ $workDir.'/../'.$workDir.'/'.$subDirOrFile,
+
+ // relative bad path (note p8 msgs differ)
+ $workDir.'/../BADDIR/'.$subDirOrFile,
+ 'BADDIR/'.$subDirOrFile,
+
+ //absolute
+ $cwd.'/'.$workDir.'/'.$subDirOrFile,
+ $cwd.'/./'.$workDir.'/'.$subDirOrFile,
+ $cwd.'/'.$workDir.'/../'.$workDir.'/'.$subDirOrFile,
+
+ //absolute bad path (note p8 msgs differ)
+ $cwd.'/BADDIR/'.$subDirOrFile,
+
+ //trailing separators
+ $workDir.'/'.$subDirOrFile.'/',
+ $cwd.'/'.$workDir.'/'.$subDirOrFile.'/',
+
+ // multiple separators
+ $workDir.'//'.$subDirOrFile,
+ $cwd.'//'.$workDir.'//'.$subDirOrFile,
+
+ );
+
+echo "*** Testing touch() : variation ***\n";
+
+echo "\n*** testing nonexisting paths ***\n";
+test_nonexisting($paths);
+
+echo "\n*** testing existing files ***\n";
+test_existing($paths, false);
+
+echo "\n*** testing existing directories ***\n";
+test_existing($paths, true);
+
+
+rmdir($workDir);
+
+
+
+function test_nonexisting($paths) {
+ foreach($paths as $path) {
+ echo "--- testing $path ---\n";
+
+ if (is_dir($path) || is_file($path)) {
+ echo "FAILED: $path - exists\n";
+ }
+ else {
+ $res = touch($path);
+ if ($res === true) {
+ // something was created
+ if (file_exists($path)) {
+ // something found
+ if (is_dir($path)) {
+ echo "FAILED: $path - unexpected directory\n";
+ }
+ else {
+ echo "PASSED: $path - created\n";
+ unlink($path);
+ }
+ }
+ else {
+ // nothing found
+ echo "FAILED: $path - touch returned true, nothing there\n";
+ }
+ }
+ else {
+ // nothing created
+ if (file_exists($path)) {
+ //something found
+ echo "FAILED: $path - touch returned false, something there\n";
+ if (is_dir($path)) {
+ rmdir($path);
+ }
+ else {
+ unlink($path);
+ }
+ }
+ }
+ }
+ }
+}
+
+function test_existing($paths, $are_dirs) {
+ foreach($paths as $path) {
+ if ($are_dirs) {
+ $res = @mkdir($path);
+ if ($res == true) {
+ test_path($path);
+ rmdir($path);
+ }
+ }
+ else {
+ $h = @fopen($path,"w");
+ if ($h !== false) {
+ fclose($h);
+ test_path($path);
+ unlink($path);
+ }
+ }
+ }
+}
+
+
+function test_path($path) {
+ echo "--- testing $path ---\n";
+ $org_atime = get_atime($path);
+ clearstatcache();
+ $res = touch($path,0,0);
+ $next_atime = get_atime($path);
+ if ($next_atime == $org_atime) {
+ echo "FAILED: $path - access time not changed\n";
+ }
+ else {
+ echo "PASSED: $path - touched\n";
+ }
+}
+
+function get_atime($path) {
+ $temp = stat($path);
+ return $temp['atime'];
+}
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing touch() : variation ***
+
+*** testing nonexisting paths ***
+--- testing touchVar5.tmp/aSubDirOrFile ---
+PASSED: touchVar5.tmp/aSubDirOrFile - created
+--- testing ./touchVar5.tmp/aSubDirOrFile ---
+PASSED: ./touchVar5.tmp/aSubDirOrFile - created
+--- testing touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile ---
+PASSED: touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile - created
+--- testing touchVar5.tmp/../BADDIR/aSubDirOrFile ---
+
+Warning: touch(): Unable to create file touchVar5.tmp/../BADDIR/aSubDirOrFile because %s in %s on line %d
+--- testing BADDIR/aSubDirOrFile ---
+
+Warning: touch(): Unable to create file BADDIR/aSubDirOrFile because %s in %s on line %d
+--- testing %s/touchVar5.tmp/aSubDirOrFile ---
+PASSED: %s/touchVar5.tmp/aSubDirOrFile - created
+--- testing %s/./touchVar5.tmp/aSubDirOrFile ---
+PASSED: %s/./touchVar5.tmp/aSubDirOrFile - created
+--- testing %s/touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile ---
+PASSED: %s/touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile - created
+--- testing %s/BADDIR/aSubDirOrFile ---
+
+Warning: touch(): Unable to create file %s/BADDIR/aSubDirOrFile because %s in %s on line %d
+--- testing touchVar5.tmp/aSubDirOrFile/ ---
+
+Warning: touch(): Unable to create file touchVar5.tmp/aSubDirOrFile/ because Invalid argument in %s on line %d
+--- testing %s/touchVar5.tmp/aSubDirOrFile/ ---
+
+Warning: touch(): Unable to create file %s/touchVar5.tmp/aSubDirOrFile/ because Invalid argument in %s on line %d
+--- testing touchVar5.tmp//aSubDirOrFile ---
+PASSED: touchVar5.tmp//aSubDirOrFile - created
+--- testing %s//touchVar5.tmp//aSubDirOrFile ---
+PASSED: %s//touchVar5.tmp//aSubDirOrFile - created
+
+*** testing existing files ***
+--- testing touchVar5.tmp/aSubDirOrFile ---
+PASSED: touchVar5.tmp/aSubDirOrFile - touched
+--- testing ./touchVar5.tmp/aSubDirOrFile ---
+PASSED: ./touchVar5.tmp/aSubDirOrFile - touched
+--- testing touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile ---
+PASSED: touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile - touched
+--- testing %s/touchVar5.tmp/aSubDirOrFile ---
+PASSED: %s/touchVar5.tmp/aSubDirOrFile - touched
+--- testing %s/./touchVar5.tmp/aSubDirOrFile ---
+PASSED: %s/./touchVar5.tmp/aSubDirOrFile - touched
+--- testing %s/touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile ---
+PASSED: %s/touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile - touched
+--- testing touchVar5.tmp//aSubDirOrFile ---
+PASSED: touchVar5.tmp//aSubDirOrFile - touched
+--- testing %s//touchVar5.tmp//aSubDirOrFile ---
+PASSED: %s//touchVar5.tmp//aSubDirOrFile - touched
+
+*** testing existing directories ***
+--- testing touchVar5.tmp/aSubDirOrFile ---
+
+Warning: touch(): Utime failed: Permission denied in %s on line %d
+FAILED: touchVar5.tmp/aSubDirOrFile - access time not changed
+--- testing ./touchVar5.tmp/aSubDirOrFile ---
+
+Warning: touch(): Utime failed: Permission denied in %s on line %d
+FAILED: ./touchVar5.tmp/aSubDirOrFile - access time not changed
+--- testing touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile ---
+
+Warning: touch(): Utime failed: Permission denied in %s on line %d
+FAILED: touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile - access time not changed
+--- testing %s/touchVar5.tmp/aSubDirOrFile ---
+
+Warning: touch(): Utime failed: Permission denied in %s on line %d
+FAILED: %s/touchVar5.tmp/aSubDirOrFile - access time not changed
+--- testing %s/./touchVar5.tmp/aSubDirOrFile ---
+
+Warning: touch(): Utime failed: Permission denied in %s on line %d
+FAILED: %s/./touchVar5.tmp/aSubDirOrFile - access time not changed
+--- testing %s/touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile ---
+
+Warning: touch(): Utime failed: Permission denied in %s on line %d
+FAILED: %s/touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile - access time not changed
+--- testing touchVar5.tmp/aSubDirOrFile/ ---
+
+Warning: touch(): Utime failed: Permission denied in %s on line %d
+FAILED: touchVar5.tmp/aSubDirOrFile/ - access time not changed
+--- testing %s/touchVar5.tmp/aSubDirOrFile/ ---
+
+Warning: touch(): Utime failed: Permission denied in %s on line %d
+FAILED: %s/touchVar5.tmp/aSubDirOrFile/ - access time not changed
+--- testing touchVar5.tmp//aSubDirOrFile ---
+
+Warning: touch(): Utime failed: Permission denied in %s on line %d
+FAILED: touchVar5.tmp//aSubDirOrFile - access time not changed
+--- testing %s//touchVar5.tmp//aSubDirOrFile ---
+
+Warning: touch(): Utime failed: Permission denied in %s on line %d
+FAILED: %s//touchVar5.tmp//aSubDirOrFile - access time not changed
+===DONE===
+
diff --git a/ext/standard/tests/file/touch_variation5.phpt b/ext/standard/tests/file/touch_variation5.phpt
new file mode 100644
index 000000000..f0e1f7869
--- /dev/null
+++ b/ext/standard/tests/file/touch_variation5.phpt
@@ -0,0 +1,230 @@
+--TEST--
+Test touch() function : variation: various valid and invalid paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip.. Not for Windows');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool touch(string filename [, int time [, int atime]])
+ * Description: Set modification time of file
+ * Source code: ext/standard/filestat.c
+ * Alias to functions:
+ */
+
+$workDir = "touchVar5.tmp";
+$subDirOrFile = "aSubDirOrFile";
+mkdir($workDir);
+$cwd = getcwd();
+
+$paths = array(
+ // relative
+ $workDir.'/'.$subDirOrFile,
+ './'.$workDir.'/'.$subDirOrFile,
+ $workDir.'/../'.$workDir.'/'.$subDirOrFile,
+
+ // relative bad path
+ $workDir.'/../BADDIR/'.$subDirOrFile,
+ 'BADDIR/'.$subDirOrFile,
+
+ //absolute
+ $cwd.'/'.$workDir.'/'.$subDirOrFile,
+ $cwd.'/./'.$workDir.'/'.$subDirOrFile,
+ $cwd.'/'.$workDir.'/../'.$workDir.'/'.$subDirOrFile,
+
+ //absolute bad path
+ $cwd.'/BADDIR/'.$subDirOrFile,
+
+ //trailing separators
+ $workDir.'/'.$subDirOrFile.'/',
+ $cwd.'/'.$workDir.'/'.$subDirOrFile.'/',
+
+ // multiple separators
+ $workDir.'//'.$subDirOrFile,
+ $cwd.'//'.$workDir.'//'.$subDirOrFile,
+
+ );
+
+echo "*** Testing touch() : variation ***\n";
+
+echo "\n*** testing nonexisting paths ***\n";
+test_nonexisting($paths);
+
+echo "\n*** testing existing files ***\n";
+test_existing($paths, false);
+
+echo "\n*** testing existing directories ***\n";
+test_existing($paths, true);
+
+
+rmdir($workDir);
+
+
+
+function test_nonexisting($paths) {
+ foreach($paths as $path) {
+ echo "--- testing $path ---\n";
+
+ if (is_dir($path) || is_file($path)) {
+ echo "FAILED: $path - exists\n";
+ }
+ else {
+ $res = touch($path);
+ if ($res === true) {
+ // something was created
+ if (file_exists($path)) {
+ // something found
+ if (is_dir($path)) {
+ echo "FAILED: $path - unexpected directory\n";
+ }
+ else {
+ echo "PASSED: $path - created\n";
+ unlink($path);
+ }
+ }
+ else {
+ // nothing found
+ echo "FAILED: $path - touch returned true, nothing there\n";
+ }
+ }
+ else {
+ // nothing created
+ if (file_exists($path)) {
+ //something found
+ echo "FAILED: $path - touch returned false, something there\n";
+ if (is_dir($path)) {
+ rmdir($path);
+ }
+ else {
+ unlink($path);
+ }
+ }
+ }
+ }
+ }
+}
+
+function test_existing($paths, $are_dirs) {
+ foreach($paths as $path) {
+ if ($are_dirs) {
+ $res = @mkdir($path);
+ if ($res == true) {
+ test_path($path);
+ rmdir($path);
+ }
+ }
+ else {
+ $h = @fopen($path,"w");
+ if ($h !== false) {
+ fclose($h);
+ test_path($path);
+ unlink($path);
+ }
+ }
+ }
+}
+
+
+function test_path($path) {
+ echo "--- testing $path ---\n";
+ $org_atime = get_atime($path);
+ clearstatcache();
+ $res = touch($path,0,0);
+ $next_atime = get_atime($path);
+ if ($next_atime == $org_atime) {
+ echo "FAILED: $path - access time not changed\n";
+ }
+ else {
+ echo "PASSED: $path - touched\n";
+ }
+}
+
+function get_atime($path) {
+ $temp = stat($path);
+ return $temp['atime'];
+}
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing touch() : variation ***
+
+*** testing nonexisting paths ***
+--- testing touchVar5.tmp/aSubDirOrFile ---
+PASSED: touchVar5.tmp/aSubDirOrFile - created
+--- testing ./touchVar5.tmp/aSubDirOrFile ---
+PASSED: ./touchVar5.tmp/aSubDirOrFile - created
+--- testing touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile ---
+PASSED: touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile - created
+--- testing touchVar5.tmp/../BADDIR/aSubDirOrFile ---
+
+Warning: touch(): Unable to create file touchVar5.tmp/../BADDIR/aSubDirOrFile because %s in %s on line %d
+--- testing BADDIR/aSubDirOrFile ---
+
+Warning: touch(): Unable to create file BADDIR/aSubDirOrFile because %s in %s on line %d
+--- testing /%s/touchVar5.tmp/aSubDirOrFile ---
+PASSED: /%s/touchVar5.tmp/aSubDirOrFile - created
+--- testing /%s/./touchVar5.tmp/aSubDirOrFile ---
+PASSED: /%s/./touchVar5.tmp/aSubDirOrFile - created
+--- testing /%s/touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile ---
+PASSED: /%s/touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile - created
+--- testing /%s/BADDIR/aSubDirOrFile ---
+
+Warning: touch(): Unable to create file /%s/BADDIR/aSubDirOrFile because %s in %s on line %d
+--- testing touchVar5.tmp/aSubDirOrFile/ ---
+
+Warning: touch(): Unable to create file touchVar5.tmp/aSubDirOrFile/ because Is a directory in %s on line %d
+--- testing /%s/touchVar5.tmp/aSubDirOrFile/ ---
+
+Warning: touch(): Unable to create file /%s/touchVar5.tmp/aSubDirOrFile/ because Is a directory in %s on line %d
+--- testing touchVar5.tmp//aSubDirOrFile ---
+PASSED: touchVar5.tmp//aSubDirOrFile - created
+--- testing /%s//touchVar5.tmp//aSubDirOrFile ---
+PASSED: /%s//touchVar5.tmp//aSubDirOrFile - created
+
+*** testing existing files ***
+--- testing touchVar5.tmp/aSubDirOrFile ---
+PASSED: touchVar5.tmp/aSubDirOrFile - touched
+--- testing ./touchVar5.tmp/aSubDirOrFile ---
+PASSED: ./touchVar5.tmp/aSubDirOrFile - touched
+--- testing touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile ---
+PASSED: touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile - touched
+--- testing /%s/touchVar5.tmp/aSubDirOrFile ---
+PASSED: /%s/touchVar5.tmp/aSubDirOrFile - touched
+--- testing /%s/./touchVar5.tmp/aSubDirOrFile ---
+PASSED: /%s/./touchVar5.tmp/aSubDirOrFile - touched
+--- testing /%s/touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile ---
+PASSED: /%s/touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile - touched
+--- testing touchVar5.tmp//aSubDirOrFile ---
+PASSED: touchVar5.tmp//aSubDirOrFile - touched
+--- testing /%s//touchVar5.tmp//aSubDirOrFile ---
+PASSED: /%s//touchVar5.tmp//aSubDirOrFile - touched
+
+*** testing existing directories ***
+--- testing touchVar5.tmp/aSubDirOrFile ---
+PASSED: touchVar5.tmp/aSubDirOrFile - touched
+--- testing ./touchVar5.tmp/aSubDirOrFile ---
+PASSED: ./touchVar5.tmp/aSubDirOrFile - touched
+--- testing touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile ---
+PASSED: touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile - touched
+--- testing /%s/touchVar5.tmp/aSubDirOrFile ---
+PASSED: /%s/touchVar5.tmp/aSubDirOrFile - touched
+--- testing /%s/./touchVar5.tmp/aSubDirOrFile ---
+PASSED: /%s/./touchVar5.tmp/aSubDirOrFile - touched
+--- testing /%s/touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile ---
+PASSED: /%s/touchVar5.tmp/../touchVar5.tmp/aSubDirOrFile - touched
+--- testing touchVar5.tmp/aSubDirOrFile/ ---
+PASSED: touchVar5.tmp/aSubDirOrFile/ - touched
+--- testing /%s/touchVar5.tmp/aSubDirOrFile/ ---
+PASSED: /%s/touchVar5.tmp/aSubDirOrFile/ - touched
+--- testing touchVar5.tmp//aSubDirOrFile ---
+PASSED: touchVar5.tmp//aSubDirOrFile - touched
+--- testing /%s//touchVar5.tmp//aSubDirOrFile ---
+PASSED: /%s//touchVar5.tmp//aSubDirOrFile - touched
+===DONE===
+
diff --git a/ext/standard/tests/file/touch_variation6-win32.phpt b/ext/standard/tests/file/touch_variation6-win32.phpt
new file mode 100644
index 000000000..8c87d4904
--- /dev/null
+++ b/ext/standard/tests/file/touch_variation6-win32.phpt
@@ -0,0 +1,263 @@
+--TEST--
+Test touch() function : variation: various valid and invalid paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) != 'WIN') {
+ die('skip.. only for Windows');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool touch(string filename [, int time [, int atime]])
+ * Description: Set modification time of file
+ * Source code: ext/standard/filestat.c
+ * Alias to functions:
+ */
+
+$workDir = "touchVar5.tmp";
+$subDirOrFile = "aSubDirOrFile";
+mkdir($workDir);
+$cwd = getcwd();
+
+$unixifiedDirOrFile = '/'.substr(str_replace('\\','/',$cwd).'/'.$workDir.'/'.$subDirOrFile, 3);
+
+$paths = array(
+ // relative
+ $workDir.'\\'.$subDirOrFile,
+ '.\\'.$workDir.'\\'.$subDirOrFile,
+ $workDir.'\\..\\'.$workDir.'\\'.$subDirOrFile,
+
+ // relative bad path (note p8 msgs differ)
+ $workDir.'\\..\\BADDIR\\'.$subDirOrFile,
+ 'BADDIR\\'.$subDirOrFile,
+
+ //absolute
+ $cwd.'\\'.$workDir.'\\'.$subDirOrFile,
+ $cwd.'\\.\\'.$workDir.'\\'.$subDirOrFile,
+ $cwd.'\\'.$workDir.'\\..\\'.$workDir.'\\'.$subDirOrFile,
+
+ //absolute bad path (note p8 msgs differ)
+ $cwd.'\\BADDIR\\'.$subDirOrFile,
+
+ //trailing separators
+ $workDir.'\\'.$subDirOrFile.'\\',
+ $cwd.'\\'.$workDir.'\\'.$subDirOrFile.'\\',
+
+ // multiple separators
+ $workDir.'\\\\'.$subDirOrFile,
+ $cwd.'\\\\'.$workDir.'\\\\'.$subDirOrFile,
+
+ // Unixified Dir Or File
+ $unixifiedDirOrFile,
+
+ );
+
+echo "*** Testing touch() : variation ***\n";
+
+echo "\n*** testing nonexisting paths ***\n";
+test_nonexisting($paths);
+
+echo "\n*** testing existing files ***\n";
+test_existing($paths, false);
+
+echo "\n*** testing existing directories ***\n";
+test_existing($paths, true);
+
+
+rmdir($workDir);
+
+
+
+function test_nonexisting($paths) {
+ foreach($paths as $path) {
+ echo "--- testing $path ---\n";
+
+ if (is_dir($path) || is_file($path)) {
+ echo "FAILED: $path - exists\n";
+ }
+ else {
+ $res = touch($path);
+ if ($res === true) {
+ // something was created
+ if (file_exists($path)) {
+ // something found
+ if (is_dir($path)) {
+ echo "FAILED: $path - unexpected directory\n";
+ }
+ else {
+ echo "PASSED: $path - created\n";
+ unlink($path);
+ }
+ }
+ else {
+ // nothing found
+ echo "FAILED: $path - touch returned true, nothing there\n";
+ }
+ }
+ else {
+ // nothing created
+ if (file_exists($path)) {
+ //something found
+ echo "FAILED: $path - touch returned false, something there\n";
+ if (is_dir($path)) {
+ rmdir($path);
+ }
+ else {
+ unlink($path);
+ }
+ }
+ }
+ }
+ }
+}
+
+function test_existing($paths, $are_dirs) {
+ foreach($paths as $path) {
+ if ($are_dirs) {
+ $res = @mkdir($path);
+ if ($res == true) {
+ test_path($path);
+ rmdir($path);
+ }
+ }
+ else {
+ $h = @fopen($path,"w");
+ if ($h !== false) {
+ fclose($h);
+ test_path($path);
+ unlink($path);
+ }
+ }
+ }
+}
+
+
+function test_path($path) {
+ echo "--- testing $path ---\n";
+ $org_atime = get_atime($path);
+ clearstatcache();
+ $res = touch($path,0,0);
+ $next_atime = get_atime($path);
+ if ($next_atime == $org_atime) {
+ echo "FAILED: $path - access time not changed\n";
+ }
+ else {
+ echo "PASSED: $path - touched\n";
+ }
+}
+
+function get_atime($path) {
+ $temp = stat($path);
+ return $temp['atime'];
+}
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing touch() : variation ***
+
+*** testing nonexisting paths ***
+--- testing touchVar5.tmp\aSubDirOrFile ---
+PASSED: touchVar5.tmp\aSubDirOrFile - created
+--- testing .\touchVar5.tmp\aSubDirOrFile ---
+PASSED: .\touchVar5.tmp\aSubDirOrFile - created
+--- testing touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile ---
+PASSED: touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile - created
+--- testing touchVar5.tmp\..\BADDIR\aSubDirOrFile ---
+
+Warning: touch(): Unable to create file touchVar5.tmp\..\BADDIR\aSubDirOrFile because %s in %s on line %d
+--- testing BADDIR\aSubDirOrFile ---
+
+Warning: touch(): Unable to create file BADDIR\aSubDirOrFile because %s in %s on line %d
+--- testing %s\touchVar5.tmp\aSubDirOrFile ---
+PASSED: %s\touchVar5.tmp\aSubDirOrFile - created
+--- testing %s\.\touchVar5.tmp\aSubDirOrFile ---
+PASSED: %s\.\touchVar5.tmp\aSubDirOrFile - created
+--- testing %s\touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile ---
+PASSED: %s\touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile - created
+--- testing %s\BADDIR\aSubDirOrFile ---
+
+Warning: touch(): Unable to create file %s\BADDIR\aSubDirOrFile because %s in %s on line %d
+--- testing touchVar5.tmp\aSubDirOrFile\ ---
+
+Warning: touch(): Unable to create file touchVar5.tmp\aSubDirOrFile\ because Invalid argument in %s on line %d
+--- testing %s\touchVar5.tmp\aSubDirOrFile\ ---
+
+Warning: touch(): Unable to create file %s\touchVar5.tmp\aSubDirOrFile\ because Invalid argument in %s on line %d
+--- testing touchVar5.tmp\\aSubDirOrFile ---
+PASSED: touchVar5.tmp\\aSubDirOrFile - created
+--- testing %s\\touchVar5.tmp\\aSubDirOrFile ---
+PASSED: %s\\touchVar5.tmp\\aSubDirOrFile - created
+--- testing /%s/touchVar5.tmp/aSubDirOrFile ---
+PASSED: /%s/touchVar5.tmp/aSubDirOrFile - created
+
+*** testing existing files ***
+--- testing touchVar5.tmp\aSubDirOrFile ---
+PASSED: touchVar5.tmp\aSubDirOrFile - touched
+--- testing .\touchVar5.tmp\aSubDirOrFile ---
+PASSED: .\touchVar5.tmp\aSubDirOrFile - touched
+--- testing touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile ---
+PASSED: touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile - touched
+--- testing %s\touchVar5.tmp\aSubDirOrFile ---
+PASSED: %s\touchVar5.tmp\aSubDirOrFile - touched
+--- testing %s\.\touchVar5.tmp\aSubDirOrFile ---
+PASSED: %s\.\touchVar5.tmp\aSubDirOrFile - touched
+--- testing %s\touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile ---
+PASSED: %s\touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile - touched
+--- testing touchVar5.tmp\\aSubDirOrFile ---
+PASSED: touchVar5.tmp\\aSubDirOrFile - touched
+--- testing %s\\touchVar5.tmp\\aSubDirOrFile ---
+PASSED: %s\\touchVar5.tmp\\aSubDirOrFile - touched
+--- testing /%s/touchVar5.tmp/aSubDirOrFile ---
+PASSED: /%s/touchVar5.tmp/aSubDirOrFile - touched
+
+*** testing existing directories ***
+--- testing touchVar5.tmp\aSubDirOrFile ---
+
+Warning: touch(): Utime failed: Permission denied in %s on line %d
+FAILED: touchVar5.tmp\aSubDirOrFile - access time not changed
+--- testing .\touchVar5.tmp\aSubDirOrFile ---
+
+Warning: touch(): Utime failed: Permission denied in %s on line %d
+FAILED: .\touchVar5.tmp\aSubDirOrFile - access time not changed
+--- testing touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile ---
+
+Warning: touch(): Utime failed: Permission denied in %s on line %d
+FAILED: touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile - access time not changed
+--- testing %s\touchVar5.tmp\aSubDirOrFile ---
+
+Warning: touch(): Utime failed: Permission denied in %s on line %d
+FAILED: %s\touchVar5.tmp\aSubDirOrFile - access time not changed
+--- testing %s\.\touchVar5.tmp\aSubDirOrFile ---
+
+Warning: touch(): Utime failed: Permission denied in %s on line %d
+FAILED: %s\.\touchVar5.tmp\aSubDirOrFile - access time not changed
+--- testing %s\touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile ---
+
+Warning: touch(): Utime failed: Permission denied in %s on line %d
+FAILED: %s\touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile - access time not changed
+--- testing touchVar5.tmp\aSubDirOrFile\ ---
+
+Warning: touch(): Utime failed: No such file or directory in %s on line %d
+FAILED: touchVar5.tmp\aSubDirOrFile\ - access time not changed
+--- testing %s\touchVar5.tmp\aSubDirOrFile\ ---
+
+Warning: touch(): Utime failed: No such file or directory in %s on line %d
+FAILED: %s\touchVar5.tmp\aSubDirOrFile\ - access time not changed
+--- testing touchVar5.tmp\\aSubDirOrFile ---
+
+Warning: touch(): Utime failed: Permission denied in %s on line %d
+FAILED: touchVar5.tmp\\aSubDirOrFile - access time not changed
+--- testing %s\\touchVar5.tmp\\aSubDirOrFile ---
+
+Warning: touch(): Utime failed: Permission denied in %s on line %d
+FAILED: %s\\touchVar5.tmp\\aSubDirOrFile - access time not changed
+--- testing /%s/touchVar5.tmp/aSubDirOrFile ---
+
+Warning: touch(): Utime failed: Permission denied in %s on line %d
+FAILED: /%s/touchVar5.tmp/aSubDirOrFile - access time not changed
+===DONE===
+
diff --git a/ext/standard/tests/file/umask_variation3.phpt b/ext/standard/tests/file/umask_variation3.phpt
new file mode 100644
index 000000000..b5b1c2e0f
--- /dev/null
+++ b/ext/standard/tests/file/umask_variation3.phpt
@@ -0,0 +1,226 @@
+--TEST--
+Test umask() function : usage variation
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip.. only for Non Windows');
+}
+?>
+--FILE--
+<?php
+/* Prototype : int umask([int mask])
+ * Description: Return or change the umask
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing umask() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+ //out of boundary integers
+ 'int -100' => -100,
+ 'int 99999' => 99999,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ //'float -12.3456789000e10' => -12.3456789000e10, different in p8
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for mask
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ umask(0);
+ var_dump(umask($value));
+ var_dump( umask());
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing umask() : usage variation ***
+
+--int -100--
+int(0)
+int(412)
+
+--int 99999--
+int(0)
+int(159)
+
+--float 10.5--
+int(0)
+int(10)
+
+--float -10.5--
+int(0)
+int(502)
+
+--float 12.3456789000e10--
+int(0)
+int(8)
+
+--float .5--
+int(0)
+int(0)
+
+--empty array--
+int(0)
+int(0)
+
+--int indexed array--
+int(0)
+int(1)
+
+--associative array--
+int(0)
+int(1)
+
+--nested arrays--
+int(0)
+int(1)
+
+--uppercase NULL--
+int(0)
+int(0)
+
+--lowercase null--
+int(0)
+int(0)
+
+--lowercase true--
+int(0)
+int(1)
+
+--lowercase false--
+int(0)
+int(0)
+
+--uppercase TRUE--
+int(0)
+int(1)
+
+--uppercase FALSE--
+int(0)
+int(0)
+
+--empty string DQ--
+int(0)
+int(0)
+
+--empty string SQ--
+int(0)
+int(0)
+
+--string DQ--
+int(0)
+int(0)
+
+--string SQ--
+int(0)
+int(0)
+
+--mixed case string--
+int(0)
+int(0)
+
+--heredoc--
+int(0)
+int(0)
+
+--instance of classWithToString--
+Error: 8 - Object of class classWithToString could not be converted to int, %s(%d)
+int(0)
+int(1)
+
+--instance of classWithoutToString--
+Error: 8 - Object of class classWithoutToString could not be converted to int, %s(%d)
+int(0)
+int(1)
+
+--undefined var--
+int(0)
+int(0)
+
+--unset var--
+int(0)
+int(0)
+===DONE===
diff --git a/ext/standard/tests/file/unlink_variation10.phpt b/ext/standard/tests/file/unlink_variation10.phpt
new file mode 100644
index 000000000..e0c92caeb
--- /dev/null
+++ b/ext/standard/tests/file/unlink_variation10.phpt
@@ -0,0 +1,106 @@
+--TEST--
+Test unlink() function : variation: unlinking directories
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip.. Not for Windows');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool unlink(string filename[, context context])
+ * Description: Delete a file
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing unlink() : variation ***\n";
+
+$workDir = "unlinkVar8.tmp";
+$tmpDir = "subDir.tmp";
+$dirToLinkTo = $workDir.'/'."linkme.tmp";
+
+mkdir($workDir);
+$cwd = getcwd();
+mkdir($dirToLinkTo);
+
+$dirs = array(
+ // relative
+ $workDir.'/'.$tmpDir,
+ './'.$workDir.'/'.$tmpDir,
+ $workDir.'/../'.$workDir.'/'.$tmpDir,
+
+ //absolute
+ $cwd.'/'.$workDir.'/'.$tmpDir,
+ $cwd.'/./'.$workDir.'/'.$tmpDir,
+ $cwd.'/'.$workDir.'/../'.$workDir.'/'.$tmpDir,
+
+ // multiple separators
+ $workDir.'//'.$tmpDir,
+ $cwd.'//'.$workDir.'//'.$tmpDir,
+
+ );
+
+
+foreach($dirs as $dirToUnlink) {
+ test_link($workDir.'/'.$tmpDir, $dirToLinkTo, $dirToUnlink, true); //soft link
+ //cannot test hard links unless you are root.
+}
+
+echo "\n--- try to unlink a directory ---\n";
+unlink($dirToLinkTo);
+rmdir($dirToLinkTo);
+rmdir($workDir);
+
+function test_link($linkedDir, $toLinkTo, $tounlink, $softlink) {
+ if ($softlink == true) {
+ symlink($toLinkTo, $linkedDir);
+ $msg = "soft link";
+ }
+ else {
+ link($toLinkTo, $linkedDir);
+ $msg = "hard link";
+ }
+ echo "-- unlinking $msg $tounlink --\n";
+ $res = unlink($tounlink);
+ if ($res === true) {
+ if (is_link($tounlink) === false) {
+ echo "directory unlinked\n";
+ }
+ else {
+ echo "FAILED: directory not unlinked\n";
+ }
+ }
+ else {
+ unlink($linkedDir);
+ }
+}
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing unlink() : variation ***
+-- unlinking soft link unlinkVar8.tmp/subDir.tmp --
+directory unlinked
+-- unlinking soft link ./unlinkVar8.tmp/subDir.tmp --
+directory unlinked
+-- unlinking soft link unlinkVar8.tmp/../unlinkVar8.tmp/subDir.tmp --
+directory unlinked
+-- unlinking soft link /%s/unlinkVar8.tmp/subDir.tmp --
+directory unlinked
+-- unlinking soft link /%s/./unlinkVar8.tmp/subDir.tmp --
+directory unlinked
+-- unlinking soft link /%s/unlinkVar8.tmp/../unlinkVar8.tmp/subDir.tmp --
+directory unlinked
+-- unlinking soft link unlinkVar8.tmp//subDir.tmp --
+directory unlinked
+-- unlinking soft link /%s//unlinkVar8.tmp//subDir.tmp --
+directory unlinked
+
+--- try to unlink a directory ---
+
+Warning: unlink(unlinkVar8.tmp/linkme.tmp): %s in %s on line %d
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/unlink_variation6.phpt b/ext/standard/tests/file/unlink_variation6.phpt
new file mode 100644
index 000000000..ede9ada09
--- /dev/null
+++ b/ext/standard/tests/file/unlink_variation6.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Test unlink() function : variation
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : bool unlink(string filename[, context context])
+ * Description: Delete a file
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing unlink() : variation: contexts and relative files ***\n";
+
+// test relative directories and stream contexts.
+$subdir = 'subdir';
+$testfile = $subdir.'/testfile.txt';
+mkdir($subdir);
+touch($testfile);
+f_exists($testfile);
+$context = stream_context_create();
+var_dump(unlink($testfile, $context));
+f_exists($testfile);
+rmdir($subdir);
+
+function f_exists($file) {
+ if (file_exists($file) == true) {
+ echo "$file exists\n";
+ }
+ else {
+ echo "$file doesn't exist\n";
+ }
+}
+?>
+===DONE===
+--EXPECTF--
+*** Testing unlink() : variation: contexts and relative files ***
+subdir/testfile.txt exists
+bool(true)
+subdir/testfile.txt doesn't exist
+===DONE===
diff --git a/ext/standard/tests/file/unlink_variation7.phpt b/ext/standard/tests/file/unlink_variation7.phpt
new file mode 100644
index 000000000..4c63e11c8
--- /dev/null
+++ b/ext/standard/tests/file/unlink_variation7.phpt
@@ -0,0 +1,246 @@
+--TEST--
+Test unlink() function : usage variation different types for context
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--FILE--
+<?php
+/* Prototype : bool unlink(string filename[, context context])
+ * Description: Delete a file
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing unlink() : usage variation different types for context ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$filename = __FILE__.'tmp';
+$fileRes = fopen(__FILE__, 'r');
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // file resource
+ 'file resource' => $fileRes
+);
+
+// loop through each element of the array for context
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ touch($filename); // create if it doesn't exist
+ var_dump( unlink($filename, $value) );
+};
+
+if (file_exists($filename)) {
+ unlink($filename);
+}
+fclose($fileRes);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing unlink() : usage variation different types for context ***
+
+--int 0--
+Error: 2 - unlink() expects parameter 2 to be resource, integer given, %s(%d)
+bool(false)
+
+--int 1--
+Error: 2 - unlink() expects parameter 2 to be resource, integer given, %s(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - unlink() expects parameter 2 to be resource, integer given, %s(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - unlink() expects parameter 2 to be resource, integer given, %s(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - unlink() expects parameter 2 to be resource, double given, %s(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - unlink() expects parameter 2 to be resource, double given, %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - unlink() expects parameter 2 to be resource, double given, %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - unlink() expects parameter 2 to be resource, double given, %s(%d)
+bool(false)
+
+--float .5--
+Error: 2 - unlink() expects parameter 2 to be resource, double given, %s(%d)
+bool(false)
+
+--empty array--
+Error: 2 - unlink() expects parameter 2 to be resource, array given, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 2 - unlink() expects parameter 2 to be resource, array given, %s(%d)
+bool(false)
+
+--associative array--
+Error: 2 - unlink() expects parameter 2 to be resource, array given, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 2 - unlink() expects parameter 2 to be resource, array given, %s(%d)
+bool(false)
+
+--uppercase NULL--
+Error: 2 - unlink() expects parameter 2 to be resource, null given, %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - unlink() expects parameter 2 to be resource, null given, %s(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - unlink() expects parameter 2 to be resource, boolean given, %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - unlink() expects parameter 2 to be resource, boolean given, %s(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - unlink() expects parameter 2 to be resource, boolean given, %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - unlink() expects parameter 2 to be resource, boolean given, %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - unlink() expects parameter 2 to be resource, string given, %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - unlink() expects parameter 2 to be resource, string given, %s(%d)
+bool(false)
+
+--string DQ--
+Error: 2 - unlink() expects parameter 2 to be resource, string given, %s(%d)
+bool(false)
+
+--string SQ--
+Error: 2 - unlink() expects parameter 2 to be resource, string given, %s(%d)
+bool(false)
+
+--mixed case string--
+Error: 2 - unlink() expects parameter 2 to be resource, string given, %s(%d)
+bool(false)
+
+--heredoc--
+Error: 2 - unlink() expects parameter 2 to be resource, string given, %s(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - unlink() expects parameter 2 to be resource, object given, %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - unlink() expects parameter 2 to be resource, object given, %s(%d)
+bool(false)
+
+--undefined var--
+Error: 2 - unlink() expects parameter 2 to be resource, null given, %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - unlink() expects parameter 2 to be resource, null given, %s(%d)
+bool(false)
+
+--file resource--
+Error: 2 - unlink(): supplied resource is not a valid Stream-Context resource, %s(%d)
+bool(true)
+===DONE===
diff --git a/ext/standard/tests/file/unlink_variation8-win32.phpt b/ext/standard/tests/file/unlink_variation8-win32.phpt
new file mode 100644
index 000000000..5348676e4
--- /dev/null
+++ b/ext/standard/tests/file/unlink_variation8-win32.phpt
@@ -0,0 +1,112 @@
+--TEST--
+Test unlink() function : variation: various valid and invalid paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) != 'WIN') {
+ die('skip.. only for Windows');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool unlink(string filename[, context context])
+ * Description: Delete a file
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing unlink() : variation ***\n";
+
+$workDir = "unlinkVar8.tmp";
+$tmpFile = "file.tmp";
+mkdir($workDir);
+$cwd = getcwd();
+
+$files = array(
+ // relative
+ $workDir.'/'.$tmpFile,
+ './'.$workDir.'/'.$tmpFile,
+ $workDir.'/../'.$workDir.'/'.$tmpFile,
+
+ // relative bad path
+ $workDir.'/../BADDIR/'.$tmpFile,
+ 'BADDIR/'.$tmpFile,
+
+ //absolute
+ $cwd.'/'.$workDir.'/'.$tmpFile,
+ $cwd.'/./'.$workDir.'/'.$tmpFile,
+ $cwd.'/'.$workDir.'/../'.$workDir.'/'.$tmpFile,
+
+ //absolute bad path
+ $cwd.'/BADDIR/'.$tmpFile,
+
+ //trailing separators
+ $workDir.'/'.$tmpFile.'/',
+ $cwd.'/'.$workDir.'/'.$tmpFile.'/',
+
+ // multiple separators
+ $workDir.'//'.$tmpFile,
+ $cwd.'//'.$workDir.'//'.$tmpFile,
+
+ );
+
+
+foreach($files as $fileToUnlink) {
+ test_realfile($workDir.'/'.$tmpFile, $fileToUnlink);
+}
+
+rmdir($workDir);
+
+function test_realfile($file, $tounlink) {
+ touch($file);
+ echo "-- removing $tounlink --\n";
+ $res = unlink($tounlink);
+ if ($res === true) {
+ if (file_exists($tounlink) === false) {
+ echo "file removed\n";
+ }
+ else {
+ echo "FAILED: file not removed\n";
+ }
+ }
+ else {
+ unlink($file);
+ }
+}
+?>
+===DONE===
+--EXPECTF--
+*** Testing unlink() : variation ***
+-- removing unlinkVar8.tmp/file.tmp --
+file removed
+-- removing ./unlinkVar8.tmp/file.tmp --
+file removed
+-- removing unlinkVar8.tmp/../unlinkVar8.tmp/file.tmp --
+file removed
+-- removing unlinkVar8.tmp/../BADDIR/file.tmp --
+
+Warning: unlink(unlinkVar8.tmp/../BADDIR/file.tmp): No such file or directory in %s on line %d
+-- removing BADDIR/file.tmp --
+
+Warning: unlink(BADDIR/file.tmp): No such file or directory in %s on line %d
+-- removing %s/unlinkVar8.tmp/file.tmp --
+file removed
+-- removing %s/./unlinkVar8.tmp/file.tmp --
+file removed
+-- removing %s/unlinkVar8.tmp/../unlinkVar8.tmp/file.tmp --
+file removed
+-- removing %s/BADDIR/file.tmp --
+
+Warning: unlink(%s/BADDIR/file.tmp): No such file or directory in %s on line %d
+-- removing unlinkVar8.tmp/file.tmp/ --
+
+Warning: unlink(unlinkVar8.tmp/file.tmp/): Invalid argument in %s on line %d
+-- removing %s/unlinkVar8.tmp/file.tmp/ --
+
+Warning: unlink(%s/unlinkVar8.tmp/file.tmp/): Invalid argument in %s on line %d
+-- removing unlinkVar8.tmp//file.tmp --
+file removed
+-- removing %s//unlinkVar8.tmp//file.tmp --
+file removed
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/unlink_variation8.phpt b/ext/standard/tests/file/unlink_variation8.phpt
new file mode 100644
index 000000000..e87a584f5
--- /dev/null
+++ b/ext/standard/tests/file/unlink_variation8.phpt
@@ -0,0 +1,206 @@
+--TEST--
+Test unlink() function : variation: various valid and invalid paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ die('skip.. Not for Windows');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool unlink(string filename[, context context])
+ * Description: Delete a file
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing unlink() : variation ***\n";
+
+$workDir = "unlinkVar8.tmp";
+$tmpFile = "file.tmp";
+$fileToLinkTo = $workDir.'/'."linkme.tmp";
+
+mkdir($workDir);
+$cwd = getcwd();
+touch($fileToLinkTo);
+
+$files = array(
+ // relative
+ $workDir.'/'.$tmpFile,
+ './'.$workDir.'/'.$tmpFile,
+ $workDir.'/../'.$workDir.'/'.$tmpFile,
+
+ // relative bad path
+ $workDir.'/../BADDIR/'.$tmpFile,
+ 'BADDIR/'.$tmpFile,
+
+ //absolute
+ $cwd.'/'.$workDir.'/'.$tmpFile,
+ $cwd.'/./'.$workDir.'/'.$tmpFile,
+ $cwd.'/'.$workDir.'/../'.$workDir.'/'.$tmpFile,
+
+ //absolute bad path
+ $cwd.'/BADDIR/'.$tmpFile,
+
+ //trailing separators
+ $workDir.'/'.$tmpFile.'/',
+ $cwd.'/'.$workDir.'/'.$tmpFile.'/',
+
+ // multiple separators
+ $workDir.'//'.$tmpFile,
+ $cwd.'//'.$workDir.'//'.$tmpFile,
+
+ );
+
+
+foreach($files as $fileToUnlink) {
+ test_realfile($workDir.'/'.$tmpFile, $fileToUnlink);
+ test_link($workDir.'/'.$tmpFile, $fileToLinkTo, $fileToUnlink, true); //soft link
+ test_link($workDir.'/'.$tmpFile, $fileToLinkTo, $fileToUnlink, false); //hard link
+}
+
+unlink($fileToLinkTo);
+rmdir($workDir);
+
+function test_realfile($file, $tounlink) {
+ touch($file);
+ echo "-- removing $tounlink --\n";
+ $res = unlink($tounlink);
+ if ($res === true) {
+ if (file_exists($tounlink) === false) {
+ echo "file removed\n";
+ }
+ else {
+ echo "FAILED: file not removed\n";
+ }
+ }
+ else {
+ unlink($file);
+ }
+}
+
+function test_link($linkedfile, $toLinkTo, $tounlink, $softlink) {
+ if ($softlink == true) {
+ symlink($toLinkTo, $linkedfile);
+ $msg = "soft link";
+ }
+ else {
+ link($toLinkTo, $linkedfile);
+ $msg = "hard link";
+ }
+ echo "-- unlinking $msg $tounlink --\n";
+ $res = unlink($tounlink);
+ if ($res === true) {
+ if (file_exists($tounlink) === false) {
+ echo "file unlinked\n";
+ }
+ else {
+ echo "FAILED: file not unlinked\n";
+ }
+ }
+ else {
+ unlink($linkedfile);
+ }
+}
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing unlink() : variation ***
+-- removing unlinkVar8.tmp/file.tmp --
+file removed
+-- unlinking soft link unlinkVar8.tmp/file.tmp --
+file unlinked
+-- unlinking hard link unlinkVar8.tmp/file.tmp --
+file unlinked
+-- removing ./unlinkVar8.tmp/file.tmp --
+file removed
+-- unlinking soft link ./unlinkVar8.tmp/file.tmp --
+file unlinked
+-- unlinking hard link ./unlinkVar8.tmp/file.tmp --
+file unlinked
+-- removing unlinkVar8.tmp/../unlinkVar8.tmp/file.tmp --
+file removed
+-- unlinking soft link unlinkVar8.tmp/../unlinkVar8.tmp/file.tmp --
+file unlinked
+-- unlinking hard link unlinkVar8.tmp/../unlinkVar8.tmp/file.tmp --
+file unlinked
+-- removing unlinkVar8.tmp/../BADDIR/file.tmp --
+
+Warning: unlink(unlinkVar8.tmp/../BADDIR/file.tmp): No such file or directory in %s on line %d
+-- unlinking soft link unlinkVar8.tmp/../BADDIR/file.tmp --
+
+Warning: unlink(unlinkVar8.tmp/../BADDIR/file.tmp): No such file or directory in %s on line %d
+-- unlinking hard link unlinkVar8.tmp/../BADDIR/file.tmp --
+
+Warning: unlink(unlinkVar8.tmp/../BADDIR/file.tmp): No such file or directory in %s on line %d
+-- removing BADDIR/file.tmp --
+
+Warning: unlink(BADDIR/file.tmp): No such file or directory in %s on line %d
+-- unlinking soft link BADDIR/file.tmp --
+
+Warning: unlink(BADDIR/file.tmp): No such file or directory in %s on line %d
+-- unlinking hard link BADDIR/file.tmp --
+
+Warning: unlink(BADDIR/file.tmp): No such file or directory in %s on line %d
+-- removing /%s/unlinkVar8.tmp/file.tmp --
+file removed
+-- unlinking soft link /%s/unlinkVar8.tmp/file.tmp --
+file unlinked
+-- unlinking hard link /%s/unlinkVar8.tmp/file.tmp --
+file unlinked
+-- removing /%s/./unlinkVar8.tmp/file.tmp --
+file removed
+-- unlinking soft link /%s/./unlinkVar8.tmp/file.tmp --
+file unlinked
+-- unlinking hard link /%s/./unlinkVar8.tmp/file.tmp --
+file unlinked
+-- removing /%s/unlinkVar8.tmp/../unlinkVar8.tmp/file.tmp --
+file removed
+-- unlinking soft link /%s/unlinkVar8.tmp/../unlinkVar8.tmp/file.tmp --
+file unlinked
+-- unlinking hard link /%s/unlinkVar8.tmp/../unlinkVar8.tmp/file.tmp --
+file unlinked
+-- removing /%s/BADDIR/file.tmp --
+
+Warning: unlink(/%s/BADDIR/file.tmp): No such file or directory in %s on line %d
+-- unlinking soft link /%s/BADDIR/file.tmp --
+
+Warning: unlink(/%s/BADDIR/file.tmp): No such file or directory in %s on line %d
+-- unlinking hard link /%s/BADDIR/file.tmp --
+
+Warning: unlink(/%s/BADDIR/file.tmp): No such file or directory in %s on line %d
+-- removing unlinkVar8.tmp/file.tmp/ --
+
+Warning: unlink(unlinkVar8.tmp/file.tmp/): Not a directory in %s on line %d
+-- unlinking soft link unlinkVar8.tmp/file.tmp/ --
+
+Warning: unlink(unlinkVar8.tmp/file.tmp/): Not a directory in %s on line %d
+-- unlinking hard link unlinkVar8.tmp/file.tmp/ --
+
+Warning: unlink(unlinkVar8.tmp/file.tmp/): Not a directory in %s on line %d
+-- removing /%s/unlinkVar8.tmp/file.tmp/ --
+
+Warning: unlink(/%s/unlinkVar8.tmp/file.tmp/): Not a directory in %s on line %d
+-- unlinking soft link /%s/unlinkVar8.tmp/file.tmp/ --
+
+Warning: unlink(/%s/unlinkVar8.tmp/file.tmp/): Not a directory in %s on line %d
+-- unlinking hard link /%s/unlinkVar8.tmp/file.tmp/ --
+
+Warning: unlink(/%s/unlinkVar8.tmp/file.tmp/): Not a directory in %s on line %d
+-- removing unlinkVar8.tmp//file.tmp --
+file removed
+-- unlinking soft link unlinkVar8.tmp//file.tmp --
+file unlinked
+-- unlinking hard link unlinkVar8.tmp//file.tmp --
+file unlinked
+-- removing /%s//unlinkVar8.tmp//file.tmp --
+file removed
+-- unlinking soft link /%s//unlinkVar8.tmp//file.tmp --
+file unlinked
+-- unlinking hard link /%s//unlinkVar8.tmp//file.tmp --
+file unlinked
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/unlink_variation9-win32.phpt b/ext/standard/tests/file/unlink_variation9-win32.phpt
new file mode 100644
index 000000000..4f1a8bb8d
--- /dev/null
+++ b/ext/standard/tests/file/unlink_variation9-win32.phpt
@@ -0,0 +1,120 @@
+--TEST--
+Test unlink() function : variation: various valid and invalid paths
+--CREDITS--
+Dave Kelsey <d_kelsey@uk.ibm.com>
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) != 'WIN') {
+ die('skip.. only for Windows');
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool unlink(string filename[, context context])
+ * Description: Delete a file
+ * Source code: ext/standard/file.c
+ * Alias to functions:
+ */
+
+echo "*** Testing unlink() : variation ***\n";
+
+$workDir = "unlinkVar9.tmp";
+$tmpFile = "file.tmp";
+mkdir($workDir);
+$cwd = getcwd();
+$unixifiedFile = '/'.substr(str_replace('\\','/',$cwd).'/'.$workDir.'/'.$tmpFile, 3);
+
+$files = array(
+ // relative
+ $workDir.'\\'.$tmpFile,
+ '.\\'.$workDir.'\\'.$tmpFile,
+ $workDir.'\\..\\'.$workDir.'\\'.$tmpFile,
+
+ // relative bad path
+ $workDir.'\\..\\BADDIR\\'.$tmpFile,
+ 'BADDIR\\'.$tmpFile,
+
+ //absolute
+ $cwd.'\\'.$workDir.'\\'.$tmpFile,
+ $cwd.'\\.\\'.$workDir.'\\'.$tmpFile,
+ $cwd.'\\'.$workDir.'\\..\\'.$workDir.'\\'.$tmpFile,
+
+ //absolute bad path
+ $cwd.'\\BADDIR\\'.$tmpFile,
+
+ //trailing separators
+ $workDir.'\\'.$tmpFile.'\\',
+ $cwd.'\\'.$workDir.'\\'.$tmpFile.'\\',
+
+ // multiple separators
+ $workDir.'\\\\'.$tmpFile,
+ $cwd.'\\\\'.$workDir.'\\\\'.$tmpFile,
+
+ // Unixified File
+ $unixifiedFile,
+
+ );
+
+
+foreach($files as $fileToUnlink) {
+ test_realfile($workDir.'/'.$tmpFile, $fileToUnlink);
+}
+
+rmdir($workDir);
+
+function test_realfile($file, $tounlink) {
+ touch($file);
+ echo "-- removing $tounlink --\n";
+ $res = unlink($tounlink);
+ if ($res === true) {
+ if (file_exists($tounlink) === false) {
+ echo "file removed\n";
+ }
+ else {
+ echo "FAILED: file not removed\n";
+ }
+ }
+ else {
+ unlink($file);
+ }
+}
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing unlink() : variation ***
+-- removing unlinkVar9.tmp\file.tmp --
+file removed
+-- removing .\unlinkVar9.tmp\file.tmp --
+file removed
+-- removing unlinkVar9.tmp\..\unlinkVar9.tmp\file.tmp --
+file removed
+-- removing unlinkVar9.tmp\..\BADDIR\file.tmp --
+
+Warning: unlink(unlinkVar9.tmp\..\BADDIR\file.tmp): No such file or directory in %s on line %d
+-- removing BADDIR\file.tmp --
+
+Warning: unlink(BADDIR\file.tmp): No such file or directory in %s on line %d
+-- removing %s\unlinkVar9.tmp\file.tmp --
+file removed
+-- removing %s\.\unlinkVar9.tmp\file.tmp --
+file removed
+-- removing %s\unlinkVar9.tmp\..\unlinkVar9.tmp\file.tmp --
+file removed
+-- removing %s\BADDIR\file.tmp --
+
+Warning: unlink(%s\BADDIR\file.tmp): No such file or directory in %s on line %d
+-- removing unlinkVar9.tmp\file.tmp\ --
+
+Warning: unlink(unlinkVar9.tmp\file.tmp\): Invalid argument in %s on line %d
+-- removing %s\unlinkVar9.tmp\file.tmp\ --
+
+Warning: unlink(%s\unlinkVar9.tmp\file.tmp\): Invalid argument in %s on line %d
+-- removing unlinkVar9.tmp\\file.tmp --
+file removed
+-- removing %s\\unlinkVar9.tmp\\file.tmp --
+file removed
+-- removing /%s/unlinkVar9.tmp/file.tmp --
+file removed
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/file/userstreams_004.phpt b/ext/standard/tests/file/userstreams_004.phpt
new file mode 100644
index 000000000..da9f148b5
--- /dev/null
+++ b/ext/standard/tests/file/userstreams_004.phpt
@@ -0,0 +1,58 @@
+--TEST--
+User-space streams: stream_lock()
+--FILE--
+<?php
+class test_wrapper_base {
+ public $mode;
+ function stream_open($path, $mode, $openedpath) {
+ return true;
+ }
+ function stream_eof() {
+ return false;
+ }
+}
+class test_wrapper extends test_wrapper_base {
+ function stream_lock($mode) {
+ $this->mode = $mode;
+ }
+}
+function test($name, $fd, $mode) {
+ echo "------ $name: -------\n";
+ flock($fd, $mode);
+ $data = stream_get_meta_data($fd);
+ var_dump($data['wrapper_data']->mode === $mode);
+}
+
+var_dump(stream_wrapper_register('test', 'test_wrapper'));
+var_dump(stream_wrapper_register('test2', 'test_wrapper_base'));
+
+$fd = fopen("test://foo","r");
+$fd2 = fopen("test2://foo","r");
+
+test("stream_lock not implemented", $fd2, LOCK_EX);
+
+foreach(array("LOCK_SH","LOCK_EX","LOCK_UN") as $mode) {
+ test("fclock($mode)", $fd, constant($mode));
+ test("fclock($mode|LOCK_NB)", $fd, constant($mode)|LOCK_NB);
+}
+
+?>
+--EXPECTF--
+bool(true)
+bool(true)
+------ stream_lock not implemented: -------
+
+Warning: flock(): test_wrapper_base::stream_lock is not implemented! in %s
+bool(false)
+------ fclock(LOCK_SH): -------
+bool(true)
+------ fclock(LOCK_SH|LOCK_NB): -------
+bool(true)
+------ fclock(LOCK_EX): -------
+bool(true)
+------ fclock(LOCK_EX|LOCK_NB): -------
+bool(true)
+------ fclock(LOCK_UN): -------
+bool(true)
+------ fclock(LOCK_UN|LOCK_NB): -------
+bool(true)
diff --git a/ext/standard/tests/filters/bug46164-1.phpt b/ext/standard/tests/filters/bug46164-1.phpt
new file mode 100644
index 000000000..b2d2d4e85
--- /dev/null
+++ b/ext/standard/tests/filters/bug46164-1.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Bug #46164 - 1 (stream_filter_remove() closes the stream)
+--FILE--
+<?php
+class user_filter extends php_user_filter {
+ function filter($in, $out, &$consumed, $closing) {
+ while($bucket = stream_bucket_make_writeable($in)) {
+ $consumed += $bucket->datalen;
+ stream_bucket_append($out, $bucket);
+ }
+ return PSFS_PASS_ON;
+ }
+}
+stream_filter_register('user_filter','user_filter');
+
+$fd = fopen('php://memory','w');
+$filter = stream_filter_append($fd, 'user_filter');
+stream_filter_remove($filter);
+var_dump(fclose($fd));
+?>
+--EXPECT--
+bool(true)
diff --git a/ext/standard/tests/filters/bug46164-2.phpt b/ext/standard/tests/filters/bug46164-2.phpt
new file mode 100644
index 000000000..6a1bde596
--- /dev/null
+++ b/ext/standard/tests/filters/bug46164-2.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Bug #46164 - 2 (stream_filter_remove() closes the stream)
+--FILE--
+<?php
+class user_filter extends php_user_filter {
+ function filter($in, $out, &$consumed, $closing) {
+ while($bucket = stream_bucket_make_writeable($in)) {
+ $consumed += $bucket->datalen;
+ stream_bucket_append($out, $bucket);
+ }
+ unset($this->stream);
+ return PSFS_PASS_ON;
+ }
+}
+stream_filter_register('user_filter','user_filter');
+
+$fd = fopen('php://memory','w');
+$filter = stream_filter_append($fd, 'user_filter');
+fwrite($fd, "foo");
+fflush($fd);
+var_dump(fclose($fd));
+?>
+--EXPECT--
+bool(true)
diff --git a/ext/standard/tests/filters/filter_errors.inc b/ext/standard/tests/filters/filter_errors.inc
new file mode 100644
index 000000000..a03e272b4
--- /dev/null
+++ b/ext/standard/tests/filters/filter_errors.inc
@@ -0,0 +1,34 @@
+<?php
+
+function filter_errors_skipif($needle) {
+ $filters = stream_get_filters();
+ foreach($filters as $filter) {
+ if (fnmatch($filter, $needle)) return;
+ }
+ die("skip $needle not available");
+}
+
+function filter_errors_test($filter, $data) {
+
+ echo "test filtering of buffered data\n";
+
+ $stream = fopen('php://memory', 'wb+');
+
+ fwrite($stream, b".\r\n$data");
+ fseek($stream, 0, SEEK_SET);
+ stream_get_line($stream, 8192, "\r\n");
+
+ $f = stream_filter_append($stream, $filter);
+
+ echo "test filtering of non buffered data\n";
+
+ $stream = fopen('php://memory', 'wb+');
+
+ fwrite($stream, b"$data");
+ fseek($stream, 0, SEEK_SET);
+
+ stream_filter_append($stream, $filter);
+ stream_get_contents($stream);
+
+}
+
diff --git a/ext/standard/tests/filters/filter_errors_convert_base64_decode.phpt b/ext/standard/tests/filters/filter_errors_convert_base64_decode.phpt
new file mode 100644
index 000000000..4c043be3b
--- /dev/null
+++ b/ext/standard/tests/filters/filter_errors_convert_base64_decode.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Filter errors: convert.base64-decode
+--SKIPIF--
+<?php require 'filter_errors.inc'; filter_errors_skipif('convert.base64-decode'); ?>
+--FILE--
+<?php
+require 'filter_errors.inc';
+filter_errors_test('convert.base64-decode', '===');
+?>
+--EXPECTF--
+test filtering of buffered data
+
+Warning: stream_filter_append(): stream filter (convert.base64-decode): invalid byte sequence in %s
+
+Warning: stream_filter_append(): Filter failed to process pre-buffered data in %s
+test filtering of non buffered data
+
+Warning: stream_get_contents(): stream filter (convert.base64-decode): invalid byte sequence in %s
diff --git a/ext/standard/tests/filters/filter_errors_user.phpt b/ext/standard/tests/filters/filter_errors_user.phpt
new file mode 100644
index 000000000..7bdf8de08
--- /dev/null
+++ b/ext/standard/tests/filters/filter_errors_user.phpt
@@ -0,0 +1,179 @@
+--TEST--
+Filter errors: user filter
+--FILE--
+<?php
+require 'filter_errors.inc';
+
+class test_filter0 extends php_user_filter {
+ function filter($in, $out, &$consumed, $closing) {
+ return PSFS_ERR_FATAL;
+ }
+}
+class test_filter1 extends php_user_filter {
+ function filter($in, $out, &$consumed, $closing) {
+ $bucket = stream_bucket_make_writeable($in);
+ return PSFS_ERR_FATAL;
+ }
+}
+class test_filter2 extends php_user_filter {
+ function filter($in, $out, &$consumed, $closing) {
+ while ($bucket = stream_bucket_make_writeable($in)) {
+ $consumed += $bucket->datalen;
+ stream_bucket_append($out, $bucket);
+ }
+ return PSFS_ERR_FATAL;
+ }
+}
+class test_filter3 extends php_user_filter {
+ function filter($in, $out, &$consumed, $closing) {
+ if (!$closing) {
+ $bucket = stream_bucket_new($this->stream, "42");
+ stream_bucket_append($out, $bucket);
+ }
+ return PSFS_ERR_FATAL;
+ }
+}
+class test_filter4 extends php_user_filter {
+ function filter($in, $out, &$consumed, $closing) {
+ if (!$closing) {
+ $bucket = stream_bucket_new($this->stream, "42");
+ }
+ return PSFS_ERR_FATAL;
+ }
+}
+
+for($i = 0; $i < 5; ++$i) {
+ echo "test_filter$i\n";
+ var_dump(stream_filter_register("test_filter$i", "test_filter$i"));
+ filter_errors_test("test_filter$i", "42");
+}
+
+echo "test append / read / remove\n";
+for($i = 0; $i < 5; ++$i) {
+ echo "test_filter$i\n";
+ $stream = fopen('php://memory', 'wb+');
+ fwrite($stream, b"42");
+ fseek($stream, 0, SEEK_SET);
+ $f = stream_filter_append($stream, "test_filter$i");
+ stream_get_contents($stream);
+ stream_filter_remove($f);
+}
+
+echo "test append all / read / remove all\n";
+$stream = fopen('php://memory', 'wb+');
+fwrite($stream, b"42");
+fseek($stream, 0, SEEK_SET);
+$filters = array();
+for($i = 0; $i < 5; ++$i) {
+ echo "test_filter$i\n";
+ $filters[] = stream_filter_append($stream, "test_filter$i");
+}
+stream_get_contents($stream);
+foreach($filters as $filter) {
+ stream_filter_remove($filter);
+}
+
+echo "test append all / read / close\n";
+$stream = fopen('php://memory', 'wb+');
+fwrite($stream, b"42");
+fseek($stream, 0, SEEK_SET);
+$filters = array();
+for($i = 0; $i < 5; ++$i) {
+ echo "test_filter$i\n";
+ $filters[] = stream_filter_append($stream, "test_filter$i");
+}
+stream_get_contents($stream);
+fclose($stream);
+
+?>
+--EXPECTF--
+test_filter0
+bool(true)
+test filtering of buffered data
+
+Warning: stream_filter_append(): Unprocessed filter buckets remaining on input brigade in %s
+
+Warning: stream_filter_append(): Filter failed to process pre-buffered data in %s
+test filtering of non buffered data
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
+test_filter1
+bool(true)
+test filtering of buffered data
+
+Warning: stream_filter_append(): Filter failed to process pre-buffered data in %s
+test filtering of non buffered data
+test_filter2
+bool(true)
+test filtering of buffered data
+
+Warning: stream_filter_append(): Filter failed to process pre-buffered data in %s
+test filtering of non buffered data
+test_filter3
+bool(true)
+test filtering of buffered data
+
+Warning: stream_filter_append(): Unprocessed filter buckets remaining on input brigade in %s
+
+Warning: stream_filter_append(): Filter failed to process pre-buffered data in %s
+test filtering of non buffered data
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
+test_filter4
+bool(true)
+test filtering of buffered data
+
+Warning: stream_filter_append(): Unprocessed filter buckets remaining on input brigade in %s
+
+Warning: stream_filter_append(): Filter failed to process pre-buffered data in %s
+test filtering of non buffered data
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
+test append / read / remove
+test_filter0
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+test_filter1
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+test_filter2
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+test_filter3
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+test_filter4
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+test append all / read / remove all
+test_filter0
+test_filter1
+test_filter2
+test_filter3
+test_filter4
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+test append all / read / close
+test_filter0
+test_filter1
+test_filter2
+test_filter3
+test_filter4
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
diff --git a/ext/standard/tests/filters/filter_errors_zlib_inflate.phpt b/ext/standard/tests/filters/filter_errors_zlib_inflate.phpt
new file mode 100644
index 000000000..ebb3b21df
--- /dev/null
+++ b/ext/standard/tests/filters/filter_errors_zlib_inflate.phpt
@@ -0,0 +1,14 @@
+--TEST--
+Filter errors: zlib.inflate
+--SKIPIF--
+<?php require 'filter_errors.inc'; filter_errors_skipif('zlib.inflate'); ?>
+--FILE--
+<?php
+require 'filter_errors.inc';
+filter_errors_test('zlib.inflate', gzencode(b'42'));
+?>
+--EXPECTF--
+test filtering of buffered data
+
+Warning: stream_filter_append(): Filter failed to process pre-buffered data in %s
+test filtering of non buffered data
diff --git a/ext/standard/tests/general_functions/008.phpt b/ext/standard/tests/general_functions/008.phpt
index bb633c334..f76c73572 100644
--- a/ext/standard/tests/general_functions/008.phpt
+++ b/ext/standard/tests/general_functions/008.phpt
@@ -34,7 +34,7 @@ array(14) {
[11]=>
float(123456789012)
[12]=>
- float(1234567890120)
+ float(1.23456789012E+12)
[13]=>
float(1.23456789012E+19)
} \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/bug42272.phpt b/ext/standard/tests/general_functions/bug42272.phpt
index 5a455d725..8b8c248bc 100644
--- a/ext/standard/tests/general_functions/bug42272.phpt
+++ b/ext/standard/tests/general_functions/bug42272.phpt
@@ -1,5 +1,5 @@
--TEST--
-Bug #42272: var_export() incorrectly escapes char(0).
+Bug #42272 (var_export() incorrectly escapes char(0))
--FILE--
<?php
$foo = var_export("\0", true );
diff --git a/ext/standard/tests/general_functions/bug44394.phpt b/ext/standard/tests/general_functions/bug44394.phpt
index 3a619283c..26351a28a 100644
--- a/ext/standard/tests/general_functions/bug44394.phpt
+++ b/ext/standard/tests/general_functions/bug44394.phpt
@@ -1,5 +1,5 @@
--TEST--
-Bug #44394 Last two bytes missing from output
+Bug #44394 (Last two bytes missing from output)
--FILE--
<?php
diff --git a/ext/standard/tests/general_functions/bug44394_2.phpt b/ext/standard/tests/general_functions/bug44394_2.phpt
index 68fae55d6..3bd3f0e93 100644
--- a/ext/standard/tests/general_functions/bug44394_2.phpt
+++ b/ext/standard/tests/general_functions/bug44394_2.phpt
@@ -2,11 +2,13 @@
Bug #44394 (Last two bytes missing from output) with session.use_trans_id
--SKIPIF--
<?php if (!extension_loaded("session")) print "skip"; ?>
+--INI--
+session.name=PHPSESSID
--FILE--
<?php
ini_set('session.use_trans_sid', 1);
-
+session_save_path(dirname(__FILE__));
session_start();
ob_start();
@@ -21,6 +23,8 @@ ob_flush();
ob_end_clean();
+unlink(dirname(__FILE__).'/sess_'.session_id());
+
?>
--EXPECTF--
<a href='a?q=1&PHPSESSID=%s&a=b'>asd</a>
diff --git a/ext/standard/tests/general_functions/bug47027.phpt b/ext/standard/tests/general_functions/bug47027.phpt
new file mode 100644
index 000000000..e4f5aae9d
--- /dev/null
+++ b/ext/standard/tests/general_functions/bug47027.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Bug #47027 (var_export doesn't show numeric indices on ArrayObject)
+--FILE--
+<?php
+$ao = new ArrayObject(array (2 => "foo", "bar" => "baz"));
+var_export ($ao);
+?>
+--EXPECT--
+ArrayObject::__set_state(array(
+ 2 => 'foo',
+ 'bar' => 'baz',
+))
diff --git a/ext/standard/tests/general_functions/call_user_func_array_variation_001.phpt b/ext/standard/tests/general_functions/call_user_func_array_variation_001.phpt
new file mode 100644
index 000000000..37716cd5d
--- /dev/null
+++ b/ext/standard/tests/general_functions/call_user_func_array_variation_001.phpt
@@ -0,0 +1,57 @@
+--TEST--
+call_user_func_array() passes by reference if the array element is referenced, regardless of function signature.
+--FILE--
+<?php
+
+function by_val($arg) {
+ $arg = 'changed';
+}
+
+function by_ref(&$arg) {
+ $arg = 'changed';
+}
+
+echo "------ Calling by_val() with unreferenced argument ------\n";
+$arg = array('original');
+call_user_func_array('by_val', $arg);
+var_dump($arg);
+
+echo "------ Calling by_ref() with unreferenced argument ------\n";
+$arg = array('original');
+call_user_func_array('by_ref', $arg);
+var_dump($arg);
+
+echo "------ Calling by_val() with referenced argument ------\n";
+$arg = array('original');
+$ref = &$arg[0];
+call_user_func_array('by_val', $arg);
+var_dump($arg);
+
+echo "------ Calling by_ref() with referenced argument ------\n";
+$arg = array('original');
+$ref = &$arg[0];
+call_user_func_array('by_ref', $arg);
+var_dump($arg);
+
+?>
+--EXPECTF--
+------ Calling by_val() with unreferenced argument ------
+array(1) {
+ [0]=>
+ string(8) "original"
+}
+------ Calling by_ref() with unreferenced argument ------
+array(1) {
+ [0]=>
+ string(8) "original"
+}
+------ Calling by_val() with referenced argument ------
+array(1) {
+ [0]=>
+ &string(7) "changed"
+}
+------ Calling by_ref() with referenced argument ------
+array(1) {
+ [0]=>
+ &string(7) "changed"
+}
diff --git a/ext/standard/tests/general_functions/call_user_func_array_variation_002.phpt b/ext/standard/tests/general_functions/call_user_func_array_variation_002.phpt
new file mode 100644
index 000000000..73f193753
--- /dev/null
+++ b/ext/standard/tests/general_functions/call_user_func_array_variation_002.phpt
@@ -0,0 +1,210 @@
+--TEST--
+Test call_user_func_array() function : first parameter variation
+--FILE--
+<?php
+/* Prototype : mixed call_user_func_array(string function_name, array parameters)
+ * Description: Call a user function which is the first parameter with the arguments contained in array
+ * Source code: ext/standard/basic_functions.c
+ * Alias to functions:
+ */
+
+echo "*** Testing call_user_func_array() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$parameters = array(1, 2);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for function_name
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( call_user_func_array($value, $parameters) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing call_user_func_array() : usage variation ***
+
+--int 0--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, '0' was given, %s(%d)
+NULL
+
+--int 1--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, '1' was given, %s(%d)
+NULL
+
+--int 12345--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, '12345' was given, %s(%d)
+NULL
+
+--int -12345--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, '-2345' was given, %s(%d)
+NULL
+
+--float 10.5--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, '10.5' was given, %s(%d)
+NULL
+
+--float -10.5--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, '-10.5' was given, %s(%d)
+NULL
+
+--float 12.3456789000e10--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, '123456789000' was given, %s(%d)
+NULL
+
+--float -12.3456789000e10--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, '-123456789000' was given, %s(%d)
+NULL
+
+--float .5--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, '0.5' was given, %s(%d)
+NULL
+
+--empty array--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, 'Array' was given, %s(%d)
+NULL
+
+--int indexed array--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, 'Array' was given, %s(%d)
+NULL
+
+--associative array--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, 'Array' was given, %s(%d)
+NULL
+
+--nested arrays--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, 'Array' was given, %s(%d)
+NULL
+
+--uppercase NULL--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, '' was given, %s(%d)
+NULL
+
+--lowercase null--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, '' was given, %s(%d)
+NULL
+
+--lowercase true--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, '1' was given, %s(%d)
+NULL
+
+--lowercase false--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, '' was given, %s(%d)
+NULL
+
+--uppercase TRUE--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, '1' was given, %s(%d)
+NULL
+
+--uppercase FALSE--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, '' was given, %s(%d)
+NULL
+
+--empty string DQ--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, '' was given, %s(%d)
+NULL
+
+--empty string SQ--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, '' was given, %s(%d)
+NULL
+
+--instance of classWithToString--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, 'Class A object' was given, %s(%d)
+NULL
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, 'Object' was given, %s(%d)
+NULL
+
+--undefined var--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, '' was given, %s(%d)
+NULL
+
+--unset var--
+Error: 2 - call_user_func_array(): First argument is expected to be a valid callback, '' was given, %s(%d)
+NULL
+===DONE===
diff --git a/ext/standard/tests/general_functions/call_user_func_array_variation_003.phpt b/ext/standard/tests/general_functions/call_user_func_array_variation_003.phpt
new file mode 100644
index 000000000..9cf6e4e9f
--- /dev/null
+++ b/ext/standard/tests/general_functions/call_user_func_array_variation_003.phpt
@@ -0,0 +1,185 @@
+--TEST--
+Test call_user_func_array() function : second parameter variation
+--FILE--
+<?php
+/* Prototype : mixed call_user_func_array(string function_name, array parameters)
+ * Description: Call a user function which is the first parameter with the arguments contained in array
+ * Source code: ext/standard/basic_functions.c
+ * Alias to functions:
+ */
+
+echo "*** Testing call_user_func_array() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+function test_func() {
+}
+$function_name = 'test_func';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+);
+
+// loop through each element of the array for parameters
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( call_user_func_array($function_name, $value) );
+};
+
+?>
+===DONE===
+--EXPECT--
+*** Testing call_user_func_array() : usage variation ***
+
+--int 0--
+NULL
+
+--int 1--
+NULL
+
+--int 12345--
+NULL
+
+--int -12345--
+NULL
+
+--float 10.5--
+NULL
+
+--float -10.5--
+NULL
+
+--float 12.3456789000e10--
+NULL
+
+--float -12.3456789000e10--
+NULL
+
+--float .5--
+NULL
+
+--uppercase NULL--
+NULL
+
+--lowercase null--
+NULL
+
+--lowercase true--
+NULL
+
+--lowercase false--
+NULL
+
+--uppercase TRUE--
+NULL
+
+--uppercase FALSE--
+NULL
+
+--empty string DQ--
+NULL
+
+--empty string SQ--
+NULL
+
+--string DQ--
+NULL
+
+--string SQ--
+NULL
+
+--mixed case string--
+NULL
+
+--heredoc--
+NULL
+
+--instance of classWithToString--
+NULL
+
+--instance of classWithoutToString--
+NULL
+
+--undefined var--
+NULL
+
+--unset var--
+NULL
+===DONE===
diff --git a/ext/standard/tests/general_functions/escapeshellarg_basic-win32.phpt b/ext/standard/tests/general_functions/escapeshellarg_basic-win32.phpt
new file mode 100644
index 000000000..888005633
--- /dev/null
+++ b/ext/standard/tests/general_functions/escapeshellarg_basic-win32.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Test escapeshellarg() function: basic test
+--SKIPIF--
+<?php
+if( substr(PHP_OS, 0, 3) != "WIN" )
+ die("skip.. only for Windows");
+?>
+--FILE--
+<?php
+/* Prototype : string escapeshellarg ( string $arg )
+ * Description: Escape a string to be used as a shell argument.
+ * Source code: ext/standard/exec.c
+ * Alias to functions:
+ */
+
+echo "Simple testcase for escapeshellarg() function\n";
+
+var_dump(escapeshellarg("Mr O'Neil"));
+var_dump(escapeshellarg("Mr O\'Neil"));
+var_dump(escapeshellarg("%FILENAME"));
+var_dump(escapeshellarg(""));
+
+echo "Done\n";
+?>
+--EXPECT--
+Simple testcase for escapeshellarg() function
+string(11) ""Mr O'Neil""
+string(12) ""Mr O\'Neil""
+string(11) "" FILENAME""
+string(2) """"
+Done \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/escapeshellarg_basic.phpt b/ext/standard/tests/general_functions/escapeshellarg_basic.phpt
new file mode 100644
index 000000000..c26915c92
--- /dev/null
+++ b/ext/standard/tests/general_functions/escapeshellarg_basic.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Test escapeshellarg() function: basic test
+--SKIPIF--
+<?php
+if( substr(PHP_OS, 0, 3) == "WIN" )
+ die("skip.. Do not run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : string escapeshellarg ( string $arg )
+ * Description: Escape a string to be used as a shell argument.
+ * Source code: ext/standard/exec.c
+ * Alias to functions:
+ */
+
+echo "Simple testcase for escapeshellarg() function\n";
+
+var_dump(escapeshellarg("Mr O'Neil"));
+var_dump(escapeshellarg("Mr O\'Neil"));
+var_dump(escapeshellarg("%FILENAME"));
+var_dump(escapeshellarg(""));
+
+echo "Done\n";
+?>
+--EXPECT--
+Simple testcase for escapeshellarg() function
+string(14) "'Mr O'\''Neil'"
+string(15) "'Mr O\'\''Neil'"
+string(11) "'%FILENAME'"
+string(2) "''"
+Done \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/escapeshellarg_error.phpt b/ext/standard/tests/general_functions/escapeshellarg_error.phpt
new file mode 100644
index 000000000..139a44520
--- /dev/null
+++ b/ext/standard/tests/general_functions/escapeshellarg_error.phpt
@@ -0,0 +1,73 @@
+--TEST--
+Test escapeshellarg() function : error conditions - wrong numbers of parameters
+--FILE--
+<?php
+
+/* Prototype : string escapeshellarg ( string $arg )
+ * Description: Escape a string to be used as a shell argument.
+ * Source code: ext/standard/exec.c
+ */
+
+/*
+ * Pass an incorrect number of arguments to escapeshellarg() to test behaviour
+ */
+
+echo "*** Testing escapeshellarg() : error conditions ***\n";
+
+
+echo "\n-- Testing escapeshellarg() function with no arguments --\n";
+var_dump( escapeshellarg() );
+
+echo "\n-- Testing escapeshellarg() function with more than expected no. of arguments --\n";
+$arg = "Mr O'Neil";
+$extra_arg = 10;
+var_dump( escapeshellarg($arg, $extra_arg) );
+
+echo "\n-- Testing escapeshellarg() function with a object supplied for argument --\n";
+
+class classA
+{
+}
+
+$arg = new classA();
+var_dump( escapeshellarg($arg));
+
+echo "\n-- Testing escapeshellarg() function with a resource supplied for argument --\n";
+$fp = fopen(__FILE__, "r");
+var_dump( escapeshellarg($fp));
+fclose($fp);
+
+echo "\n-- Testing escapeshellarg() function with a array supplied for argument --\n";
+$arg = array(1,2,3);
+var_dump( escapeshellarg($arg));
+
+?>
+===Done===
+--EXPECTF--
+*** Testing escapeshellarg() : error conditions ***
+
+-- Testing escapeshellarg() function with no arguments --
+
+Warning: escapeshellarg() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing escapeshellarg() function with more than expected no. of arguments --
+
+Warning: escapeshellarg() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+
+-- Testing escapeshellarg() function with a object supplied for argument --
+
+Warning: escapeshellarg() expects parameter 1 to be string, object given in %s on line %d
+NULL
+
+-- Testing escapeshellarg() function with a resource supplied for argument --
+
+Warning: escapeshellarg() expects parameter 1 to be string, resource given in %s on line %d
+NULL
+
+-- Testing escapeshellarg() function with a array supplied for argument --
+
+Warning: escapeshellarg() expects parameter 1 to be string, array given in %s on line %d
+NULL
+===Done===
diff --git a/ext/standard/tests/general_functions/escapeshellarg_variation1-win32.phpt b/ext/standard/tests/general_functions/escapeshellarg_variation1-win32.phpt
new file mode 100644
index 000000000..8f8bc19d8
--- /dev/null
+++ b/ext/standard/tests/general_functions/escapeshellarg_variation1-win32.phpt
@@ -0,0 +1,140 @@
+--TEST--
+Test escapeshellarg() function : usage variations - different data types as $arg arg
+--SKIPIF--
+<?php
+if( substr(PHP_OS, 0, 3) != "WIN" )
+ die("skip.. only for Windows");
+?>
+--FILE--
+<?php
+
+/* Prototype : string escapeshellarg ( string $arg )
+ * Description: Escape a string to be used as a shell argument.
+ * Source code: ext/standard/exec.c
+ */
+
+echo "*** Testing escapeshellarg() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12,
+ -12,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 1.234567e2,
+ 1.234567E-2,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+
+ // undefined data
+/*19*/ @$undefined_var,
+
+ // unset data
+/*20*/ @$unset_var,
+
+);
+
+// loop through each element of $inputs to check the behaviour of escapeshellarg()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(escapeshellarg($input));
+ $iterator++;
+};
+?>
+===Done===
+--EXPECT--
+*** Testing escapeshellarg() : usage variations ***
+
+-- Iteration 1 --
+string(3) ""0""
+
+-- Iteration 2 --
+string(3) ""1""
+
+-- Iteration 3 --
+string(4) ""12""
+
+-- Iteration 4 --
+string(5) ""-12""
+
+-- Iteration 5 --
+string(12) ""2147483647""
+
+-- Iteration 6 --
+string(6) ""10.5""
+
+-- Iteration 7 --
+string(7) ""-10.5""
+
+-- Iteration 8 --
+string(10) ""123.4567""
+
+-- Iteration 9 --
+string(12) ""0.01234567""
+
+-- Iteration 10 --
+string(5) ""0.5""
+
+-- Iteration 11 --
+string(2) """"
+
+-- Iteration 12 --
+string(2) """"
+
+-- Iteration 13 --
+string(3) ""1""
+
+-- Iteration 14 --
+string(2) """"
+
+-- Iteration 15 --
+string(3) ""1""
+
+-- Iteration 16 --
+string(2) """"
+
+-- Iteration 17 --
+string(2) """"
+
+-- Iteration 18 --
+string(2) """"
+
+-- Iteration 19 --
+string(2) """"
+
+-- Iteration 20 --
+string(2) """"
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/escapeshellarg_variation1.phpt b/ext/standard/tests/general_functions/escapeshellarg_variation1.phpt
new file mode 100644
index 000000000..32431a581
--- /dev/null
+++ b/ext/standard/tests/general_functions/escapeshellarg_variation1.phpt
@@ -0,0 +1,140 @@
+--TEST--
+Test escapeshellarg() function : usage variations - different data types as $y arg
+--SKIPIF--
+<?php
+if( substr(PHP_OS, 0, 3) == "WIN" )
+ die("skip.. Do not run on Windows");
+?>
+--FILE--
+<?php
+
+/* Prototype : string escapeshellarg ( string $arg )
+ * Description: Escape a string to be used as a shell argument.
+ * Source code: ext/standard/exec.c
+ */
+
+echo "*** Testing escapeshellarg() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12,
+ -12,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 1.234567e2,
+ 1.234567E-2,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+
+ // undefined data
+/*19*/ @$undefined_var,
+
+ // unset data
+/*20*/ @$unset_var,
+
+);
+
+// loop through each element of $inputs to check the behaviour of escapeshellarg()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(escapeshellarg($input));
+ $iterator++;
+};
+?>
+===Done===
+--EXPECT--
+*** Testing escapeshellarg() : usage variations ***
+
+-- Iteration 1 --
+string(3) "'0'"
+
+-- Iteration 2 --
+string(3) "'1'"
+
+-- Iteration 3 --
+string(4) "'12'"
+
+-- Iteration 4 --
+string(5) "'-12'"
+
+-- Iteration 5 --
+string(12) "'2147483647'"
+
+-- Iteration 6 --
+string(6) "'10.5'"
+
+-- Iteration 7 --
+string(7) "'-10.5'"
+
+-- Iteration 8 --
+string(10) "'123.4567'"
+
+-- Iteration 9 --
+string(12) "'0.01234567'"
+
+-- Iteration 10 --
+string(5) "'0.5'"
+
+-- Iteration 11 --
+string(2) "''"
+
+-- Iteration 12 --
+string(2) "''"
+
+-- Iteration 13 --
+string(3) "'1'"
+
+-- Iteration 14 --
+string(2) "''"
+
+-- Iteration 15 --
+string(3) "'1'"
+
+-- Iteration 16 --
+string(2) "''"
+
+-- Iteration 17 --
+string(2) "''"
+
+-- Iteration 18 --
+string(2) "''"
+
+-- Iteration 19 --
+string(2) "''"
+
+-- Iteration 20 --
+string(2) "''"
+===Done===
diff --git a/ext/standard/tests/general_functions/floatval_basic.phpt b/ext/standard/tests/general_functions/floatval_basic.phpt
new file mode 100644
index 000000000..129aa87b3
--- /dev/null
+++ b/ext/standard/tests/general_functions/floatval_basic.phpt
@@ -0,0 +1,172 @@
+--TEST--
+Testing floatval() and its alias doubleval() Functions
+--INI--
+precision = 14
+--FILE--
+<?php
+/* Prototype: float floatval( mixed $var );
+ * Description: Returns the float value of var.
+ */
+
+// different valid float values
+$valid_floats = array(
+ "0.0" => 0.0,
+ "1.0" => 1.0,
+ "-1.0" => -1.0,
+ "1.234" => 1.234,
+ "-1.234" => -1.234,
+ "1.2e3" => 1.2e3,
+ "-1.2e3" => -1.2e3,
+ "10.0000000000000000005" => 10.0000000000000000005,
+ "10.5e+5" => 10.5e+5,
+ "1e5" => 1e5,
+ "-1e5" => -1e5,
+ "1e5" => 1e-5,
+ "-1e-1" => -1e-1,
+ "1e+5" => 1e+5,
+ "-1e+5" =>-1e+5,
+ "1E5" => 1E5,
+ "-1E5" => -1E5,
+ "1E+5" => 1E+5,
+ "-1E5" => -1E+5,
+ ".5e+7" => .5e+7,
+ "-.5e+7" =>-.5e+7
+);
+
+/* loop to check that floatval() recognizes different
+ float values, expected output:float value for valid floating point number */
+echo "*** Testing floatval() with valid float values ***\n";
+foreach ($valid_floats as $key => $value ) {
+ echo "\n-- Iteration : $key -- \n";
+ var_dump( floatval($value) );
+}
+
+/* loop to check that doubleval() also recognizes different
+ float values, expected output:float value for valid floating point number */
+echo "\n*** Testing doubleval() with valid float values ***\n";
+foreach ($valid_floats as $key => $value ) {
+ echo "\n-- Iteration : $key -- \n";
+ var_dump( doubleval($value) );
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing floatval() with valid float values ***
+
+-- Iteration : 0.0 --
+float(0)
+
+-- Iteration : 1.0 --
+float(1)
+
+-- Iteration : -1.0 --
+float(-1)
+
+-- Iteration : 1.234 --
+float(1.234)
+
+-- Iteration : -1.234 --
+float(-1.234)
+
+-- Iteration : 1.2e3 --
+float(1200)
+
+-- Iteration : -1.2e3 --
+float(-1200)
+
+-- Iteration : 10.0000000000000000005 --
+float(10)
+
+-- Iteration : 10.5e+5 --
+float(1050000)
+
+-- Iteration : 1e5 --
+float(1.0E-5)
+
+-- Iteration : -1e5 --
+float(-100000)
+
+-- Iteration : -1e-1 --
+float(-0.1)
+
+-- Iteration : 1e+5 --
+float(100000)
+
+-- Iteration : -1e+5 --
+float(-100000)
+
+-- Iteration : 1E5 --
+float(100000)
+
+-- Iteration : -1E5 --
+float(-100000)
+
+-- Iteration : 1E+5 --
+float(100000)
+
+-- Iteration : .5e+7 --
+float(5000000)
+
+-- Iteration : -.5e+7 --
+float(-5000000)
+
+*** Testing doubleval() with valid float values ***
+
+-- Iteration : 0.0 --
+float(0)
+
+-- Iteration : 1.0 --
+float(1)
+
+-- Iteration : -1.0 --
+float(-1)
+
+-- Iteration : 1.234 --
+float(1.234)
+
+-- Iteration : -1.234 --
+float(-1.234)
+
+-- Iteration : 1.2e3 --
+float(1200)
+
+-- Iteration : -1.2e3 --
+float(-1200)
+
+-- Iteration : 10.0000000000000000005 --
+float(10)
+
+-- Iteration : 10.5e+5 --
+float(1050000)
+
+-- Iteration : 1e5 --
+float(1.0E-5)
+
+-- Iteration : -1e5 --
+float(-100000)
+
+-- Iteration : -1e-1 --
+float(-0.1)
+
+-- Iteration : 1e+5 --
+float(100000)
+
+-- Iteration : -1e+5 --
+float(-100000)
+
+-- Iteration : 1E5 --
+float(100000)
+
+-- Iteration : -1E5 --
+float(-100000)
+
+-- Iteration : 1E+5 --
+float(100000)
+
+-- Iteration : .5e+7 --
+float(5000000)
+
+-- Iteration : -.5e+7 --
+float(-5000000)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/floatval_error.phpt b/ext/standard/tests/general_functions/floatval_error.phpt
new file mode 100644
index 000000000..38868a64f
--- /dev/null
+++ b/ext/standard/tests/general_functions/floatval_error.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Testing floatval() and its alias doubleval() : error conditions - wrong numbers of parametersns
+--FILE--
+<?php
+/* Prototype: float floatval( mixed $var );
+ * Description: Returns the float value of var.
+ */
+
+echo "*** Testing floatval() and doubleval() : error conditions ***\n";
+
+
+echo "\n-- Testing floatval() and doubleval() function with no arguments --\n";
+var_dump( floatval() );
+var_dump( doubleval() );
+
+echo "\n-- Testing floatval() and doubleval() function with more than expected no. of arguments --\n";
+var_dump( floatval(10.5, FALSE) );
+var_dump( doubleval(10.5, FALSE) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing floatval() and doubleval() : error conditions ***
+
+-- Testing floatval() and doubleval() function with no arguments --
+
+Warning: Wrong parameter count for floatval() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for doubleval() in %s on line %d
+NULL
+
+-- Testing floatval() and doubleval() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for floatval() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for doubleval() in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/floatval_variation1.phpt b/ext/standard/tests/general_functions/floatval_variation1.phpt
new file mode 100644
index 000000000..83925b89b
--- /dev/null
+++ b/ext/standard/tests/general_functions/floatval_variation1.phpt
@@ -0,0 +1,154 @@
+--TEST--
+Testing floatval() and its alias doubleval() functions : usage variations - different data types as $y arg
+--FILE--
+<?php
+/* Prototype: float floatval( mixed $var );
+ * Description: Returns the float value of var.
+ */
+
+
+
+// get a resource type variable
+$fp = fopen (__FILE__, "r");
+fclose($fp);
+$dfp = opendir ( dirname(__FILE__) );
+closedir($dfp);
+
+// other types in an array
+$not_float_types = array (
+ "-2147483648" => -2147483648, // max negative integer value
+ "2147483647" => 2147483648, // max positive integer value
+ "file resoruce" => $fp,
+ "directory resource" => $dfp,
+ "\"0.0\"" => "0.0", // string
+ "\"1.0\"" => "1.0",
+ "\"-1.3e3\"" => "-1.3e3",
+ "\"bob-1.3e3\"" => "bob-1.3e3",
+ "\"10 Some dollars\"" => "10 Some dollars",
+ "\"10.2 Some Dollars\"" => "10.2 Some Dollars",
+ "\"10.0 dollar\" + 1" => "10.0 dollar" + 1,
+ "\"10.0 dollar\" + 1.0" => "10.0 dollar" + 1.0,
+ "\"\"" => "",
+ "true" => true,
+ "NULL" => NULL,
+ "null" => null,
+ );
+/* loop through the $not_float_types to see working of
+ floatval() on non float types, expected output: float value valid floating point numbers */
+echo "\n*** Testing floatval() on non floating types ***\n";
+foreach ($not_float_types as $key => $type ) {
+ echo "\n-- Iteration : $key --\n";
+ var_dump( floatval($type) );
+}
+
+echo "\n*** Testing doubleval() on non floating types ***\n";
+
+/* loop through the $not_float_types to see working of
+ doubleval() on non float types, expected output: float value valid floating point numbers */
+foreach ($not_float_types as $key => $type ) {
+ echo "\n-- Iteration : $key --\n";
+ var_dump( doubleval($type) );
+}
+?>
+===DONE===
+--EXPECTF--
+*** Testing floatval() on non floating types ***
+
+-- Iteration : -2147483648 --
+float(-2147483648)
+
+-- Iteration : 2147483647 --
+float(2147483648)
+
+-- Iteration : file resoruce --
+float(%d)
+
+-- Iteration : directory resource --
+float(%d)
+
+-- Iteration : "0.0" --
+float(0)
+
+-- Iteration : "1.0" --
+float(1)
+
+-- Iteration : "-1.3e3" --
+float(-1300)
+
+-- Iteration : "bob-1.3e3" --
+float(0)
+
+-- Iteration : "10 Some dollars" --
+float(10)
+
+-- Iteration : "10.2 Some Dollars" --
+float(10.2)
+
+-- Iteration : "10.0 dollar" + 1 --
+float(11)
+
+-- Iteration : "10.0 dollar" + 1.0 --
+float(11)
+
+-- Iteration : "" --
+float(0)
+
+-- Iteration : true --
+float(1)
+
+-- Iteration : NULL --
+float(0)
+
+-- Iteration : null --
+float(0)
+
+*** Testing doubleval() on non floating types ***
+
+-- Iteration : -2147483648 --
+float(-2147483648)
+
+-- Iteration : 2147483647 --
+float(2147483648)
+
+-- Iteration : file resoruce --
+float(%d)
+
+-- Iteration : directory resource --
+float(%d)
+
+-- Iteration : "0.0" --
+float(0)
+
+-- Iteration : "1.0" --
+float(1)
+
+-- Iteration : "-1.3e3" --
+float(-1300)
+
+-- Iteration : "bob-1.3e3" --
+float(0)
+
+-- Iteration : "10 Some dollars" --
+float(10)
+
+-- Iteration : "10.2 Some Dollars" --
+float(10.2)
+
+-- Iteration : "10.0 dollar" + 1 --
+float(11)
+
+-- Iteration : "10.0 dollar" + 1.0 --
+float(11)
+
+-- Iteration : "" --
+float(0)
+
+-- Iteration : true --
+float(1)
+
+-- Iteration : NULL --
+float(0)
+
+-- Iteration : null --
+float(0)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/get_defined_vars_basic.phpt b/ext/standard/tests/general_functions/get_defined_vars_basic.phpt
new file mode 100644
index 000000000..3aa6e72a9
--- /dev/null
+++ b/ext/standard/tests/general_functions/get_defined_vars_basic.phpt
@@ -0,0 +1,152 @@
+--TEST--
+Test get_defined_vars() function
+--FILE--
+<?php
+/* Prototype: array get_defined_vars ( void )
+ Description: This function returns a multidimensional array containing a list of all defined
+ variables, be them environment, server or user-defined variables, within the scope that
+ get_defined_vars() is called.
+*/
+
+echo "Simple testcase for get_defined_vars() function\n\n";
+
+function f1() {
+ echo "\n-- Function f1() called --\n";
+ $vars = get_defined_vars();
+
+ if (count($vars) != 0) {
+ echo "TEST FAILED\n";
+ }
+
+ echo "\n-- ..define some local variables --\n";
+ $i = 123;
+ $f = 123.456;
+ $b = false;
+ $s = "Hello World";
+ $arr = array(1,2,3,4);
+ var_dump( get_defined_vars() );
+ f2();
+}
+
+function f2() {
+ echo "\n -- Function f2() called --\n";
+ $vars= get_defined_vars();
+
+ if (count($vars) != 0) {
+ echo "TEST FAILED\n";
+ }
+
+ echo "\n-- ...define some variables --\n";
+ $i = 456;
+ $f = 456.678;
+ $b = true;
+ $s = "Goodnight";
+ $arr = array("foo", "bar");
+ var_dump( get_defined_vars() );
+
+ echo "\n-- ...define some more variables --\n";
+ $i1 = 456;
+ $f1 = 456.678;
+ $b1 = true;
+ var_dump( get_defined_vars() );
+
+}
+
+echo "\n-- Get variables at global scope --\n";
+$vars = get_defined_vars();
+
+if (count($vars) == 0) {
+ echo "TEST FAILED - Global variables missing at global scope\n";
+}
+
+// call a function
+f1();
+
+?>
+===DONE===
+--EXPECT--
+Simple testcase for get_defined_vars() function
+
+
+-- Get variables at global scope --
+
+-- Function f1() called --
+
+-- ..define some local variables --
+array(6) {
+ ["vars"]=>
+ array(0) {
+ }
+ ["i"]=>
+ int(123)
+ ["f"]=>
+ float(123.456)
+ ["b"]=>
+ bool(false)
+ ["s"]=>
+ string(11) "Hello World"
+ ["arr"]=>
+ array(4) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ }
+}
+
+ -- Function f2() called --
+
+-- ...define some variables --
+array(6) {
+ ["vars"]=>
+ array(0) {
+ }
+ ["i"]=>
+ int(456)
+ ["f"]=>
+ float(456.678)
+ ["b"]=>
+ bool(true)
+ ["s"]=>
+ string(9) "Goodnight"
+ ["arr"]=>
+ array(2) {
+ [0]=>
+ string(3) "foo"
+ [1]=>
+ string(3) "bar"
+ }
+}
+
+-- ...define some more variables --
+array(9) {
+ ["vars"]=>
+ array(0) {
+ }
+ ["i"]=>
+ int(456)
+ ["f"]=>
+ float(456.678)
+ ["b"]=>
+ bool(true)
+ ["s"]=>
+ string(9) "Goodnight"
+ ["arr"]=>
+ array(2) {
+ [0]=>
+ string(3) "foo"
+ [1]=>
+ string(3) "bar"
+ }
+ ["i1"]=>
+ int(456)
+ ["f1"]=>
+ float(456.678)
+ ["b1"]=>
+ bool(true)
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/get_extension_funcs_basic.phpt b/ext/standard/tests/general_functions/get_extension_funcs_basic.phpt
new file mode 100644
index 000000000..d87eb4c0c
--- /dev/null
+++ b/ext/standard/tests/general_functions/get_extension_funcs_basic.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Test get_extension_funcs() function: basic test
+--FILE--
+<?php
+/* Prototype : array get_extension_funcs ( string $module_name )
+ * Description: Returns an array with the names of the functions of a module.
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions:
+ */
+
+echo "Simple testcase for get_extension_funcs() function\n";
+
+$result = get_extension_funcs("standard");
+var_dump(gettype($result));
+var_dump(in_array("cos", $result));
+
+?>
+===DONE===
+--EXPECTF--
+Simple testcase for get_extension_funcs() function
+string(5) "array"
+bool(true)
+===DONE===
diff --git a/ext/standard/tests/general_functions/get_extension_funcs_error.phpt b/ext/standard/tests/general_functions/get_extension_funcs_error.phpt
new file mode 100644
index 000000000..e1d51d43a
--- /dev/null
+++ b/ext/standard/tests/general_functions/get_extension_funcs_error.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Test get_extension_funcs() function : error conditions
+--FILE--
+<?php
+/* Prototype : array get_extension_funcs ( string $module_name )
+ * Description: Returns an array with the names of the functions of a module.
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions:
+ */
+
+echo "*** Testing get_extension_funcs() : error conditions ***\n";
+
+echo "\n-- Too few arguments --\n";
+var_dump(get_extension_funcs());
+
+$extra_arg = 1;
+echo "\n-- Too many arguments --\n";
+var_dump(get_extension_funcs("standard", $extra_arg));
+
+echo "\n-- Invalid extension name --\n";
+var_dump(get_extension_funcs("foo"));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing get_extension_funcs() : error conditions ***
+
+-- Too few arguments --
+
+Warning: Wrong parameter count for get_extension_funcs() in %s on line %d
+NULL
+
+-- Too many arguments --
+
+Warning: Wrong parameter count for get_extension_funcs() in %s on line %d
+NULL
+
+-- Invalid extension name --
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/general_functions/get_extension_funcs_variation.phpt b/ext/standard/tests/general_functions/get_extension_funcs_variation.phpt
new file mode 100644
index 000000000..7204eaa6e
--- /dev/null
+++ b/ext/standard/tests/general_functions/get_extension_funcs_variation.phpt
@@ -0,0 +1,135 @@
+--TEST--
+Test get_extension_funcs() function : error conditions
+--FILE--
+<?php
+/* Prototype : array get_extension_funcs ( string $module_name )
+ * Description: Returns an array with the names of the functions of a module.
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions:
+ */
+
+echo "*** Testing get_extension_funcs() function: with unexpected inputs for 'module_name' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $str
+$inputs = array (
+
+ // integer values
+ 0,
+ 1,
+ 255,
+ 256,
+ PHP_INT_MAX,
+ -PHP_INT_MAX,
+
+ // float values
+ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+ NULL,
+ null,
+
+ // objects
+ new sample(),
+
+ // resource
+ $file_handle,
+
+ // undefined variable
+ @$undefined_var,
+
+ // unset variable
+ @$unset_var
+);
+
+// loop through with each element of the $inputs array to test get_extension_funcs() function
+$count = 1;
+foreach($inputs as $input) {
+ echo "-- Iteration $count --\n";
+ var_dump( get_extension_funcs($input) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing get_extension_funcs() function: with unexpected inputs for 'module_name' argument ***
+-- Iteration 1 --
+bool(false)
+-- Iteration 2 --
+bool(false)
+-- Iteration 3 --
+bool(false)
+-- Iteration 4 --
+bool(false)
+-- Iteration 5 --
+bool(false)
+-- Iteration 6 --
+bool(false)
+-- Iteration 7 --
+bool(false)
+-- Iteration 8 --
+bool(false)
+-- Iteration 9 --
+bool(false)
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+bool(false)
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+bool(false)
+-- Iteration 12 --
+
+Notice: Array to string conversion in %s on line %d
+bool(false)
+-- Iteration 13 --
+bool(false)
+-- Iteration 14 --
+bool(false)
+-- Iteration 15 --
+bool(false)
+-- Iteration 16 --
+bool(false)
+-- Iteration 17 --
+bool(false)
+-- Iteration 18 --
+bool(false)
+-- Iteration 19 --
+bool(false)
+-- Iteration 20 --
+bool(false)
+-- Iteration 21 --
+bool(false)
+-- Iteration 22 --
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/general_functions/get_include_path_basic.phpt b/ext/standard/tests/general_functions/get_include_path_basic.phpt
new file mode 100644
index 000000000..7bb64c10e
--- /dev/null
+++ b/ext/standard/tests/general_functions/get_include_path_basic.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test get_include_path() function
+--INI--
+include_path=.
+--FILE--
+<?php
+/* Prototype: string get_include_path ( void )
+ * Description: Gets the current include_path configuration option
+
+*/
+
+echo "*** Testing get_include_path()\n";
+
+var_dump(get_include_path());
+
+if (ini_get("include_path") == get_include_path()) {
+ echo "PASSED\n";
+} else {
+ echo "FAILED\n";
+}
+
+echo "\nError cases:\n";
+var_dump(get_include_path(TRUE));
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing get_include_path()
+string(1) "."
+PASSED
+
+Error cases:
+
+Warning: Wrong parameter count for get_include_path() in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/get_included_files.phpt b/ext/standard/tests/general_functions/get_included_files.phpt
new file mode 100644
index 000000000..f17eba5d6
--- /dev/null
+++ b/ext/standard/tests/general_functions/get_included_files.phpt
@@ -0,0 +1,63 @@
+--TEST--
+Test get_include_files() function
+--INI--
+include_path=.
+--FILE--
+<?php
+/* Prototype: array get_included_files ( void )
+ * Description: Returns an array with the names of included or required files
+
+*/
+
+echo "*** Testing get_included_files()\n";
+
+echo "\n-- List included files at start --\n";
+var_dump(get_included_files());
+
+include(dirname(__FILE__)."/get_included_files_inc1.inc");
+echo "\n-- List included files atfter including inc1 -\n";
+var_dump(get_included_files());
+
+include(dirname(__FILE__)."/get_included_files_inc2.inc");
+echo "\n-- List included files atfter including inc2 which will include inc3 which includes inc1 --\n";
+var_dump(get_included_files());
+
+echo "\n-- Error cases --\n";
+var_dump(get_included_files(true));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing get_included_files()
+
+-- List included files at start --
+array(1) {
+ [0]=>
+ string(%d) "%sget_included_files.php"
+}
+
+-- List included files atfter including inc1 -
+array(2) {
+ [0]=>
+ string(%d) "%sget_included_files.php"
+ [1]=>
+ string(%d) "%sget_included_files_inc1.inc"
+}
+
+-- List included files atfter including inc2 which will include inc3 which includes inc1 --
+array(4) {
+ [0]=>
+ string(%d) "%sget_included_files.php"
+ [1]=>
+ string(%d) "%sget_included_files_inc1.inc"
+ [2]=>
+ string(%d) "%sget_included_files_inc2.inc"
+ [3]=>
+ string(%d) "%sget_included_files_inc3.inc"
+}
+
+-- Error cases --
+
+Warning: Wrong parameter count for get_included_files() in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/get_included_files_inc1.inc b/ext/standard/tests/general_functions/get_included_files_inc1.inc
new file mode 100644
index 000000000..344e300e0
--- /dev/null
+++ b/ext/standard/tests/general_functions/get_included_files_inc1.inc
@@ -0,0 +1,3 @@
+<?php
+/* dummy include*/
+?>
diff --git a/ext/standard/tests/general_functions/get_included_files_inc2.inc b/ext/standard/tests/general_functions/get_included_files_inc2.inc
new file mode 100644
index 000000000..318eba00c
--- /dev/null
+++ b/ext/standard/tests/general_functions/get_included_files_inc2.inc
@@ -0,0 +1,4 @@
+<?php
+/* dummy include*/
+include(dirname(__FILE__)."/get_included_files_inc3.inc");
+?>
diff --git a/ext/standard/tests/general_functions/get_included_files_inc3.inc b/ext/standard/tests/general_functions/get_included_files_inc3.inc
new file mode 100644
index 000000000..f666edf2b
--- /dev/null
+++ b/ext/standard/tests/general_functions/get_included_files_inc3.inc
@@ -0,0 +1,4 @@
+<?php
+/* dummy include*/
+include(dirname(__FILE__)."/get_included_files_inc1.inc");
+?>
diff --git a/ext/standard/tests/general_functions/get_magic_quotes_gpc.phpt b/ext/standard/tests/general_functions/get_magic_quotes_gpc.phpt
new file mode 100644
index 000000000..cfa4dcc68
--- /dev/null
+++ b/ext/standard/tests/general_functions/get_magic_quotes_gpc.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Test get_magic_quotes_gpc() function
+--INI--
+magic_quotes_gpc = 0
+--FILE--
+<?php
+/* Prototype: int get_magic_quotes_gpc ( void )
+ * Description: Gets the current configuration setting of magic quotes gpc
+*/
+
+echo "Simple testcase for get_magic_quotes_gpc() function\n";
+
+$g = get_magic_quotes_gpc();
+echo "\n-- magic quotes gpc set in INI file: " . $g . " --\n";
+
+echo "\n-- Set magic quotes gpc to 1 - not allowed so should fail! --\n";
+var_dump(ini_set("magic_quotes_gpc", 1));
+$g = get_magic_quotes_gpc();
+echo "\n-- magic quotes gpc after set: " . $g . " --\n";
+
+echo "\n-- Set magic quotes gpc to 0: --\n";
+var_dump(ini_set("magic_quotes_gpc", 0));
+$g = get_magic_quotes_gpc();
+echo "\n-- magic quotes gpc after set: " . $g . " --\n";
+
+echo "\n-- Error cases --\n";
+// no checks on number of args
+var_dump(get_magic_quotes_gpc(true));
+
+?>
+===DONE===
+--EXPECT--
+Simple testcase for get_magic_quotes_gpc() function
+
+-- magic quotes gpc set in INI file: 0 --
+
+-- Set magic quotes gpc to 1 - not allowed so should fail! --
+bool(false)
+
+-- magic quotes gpc after set: 0 --
+
+-- Set magic quotes gpc to 0: --
+bool(false)
+
+-- magic quotes gpc after set: 0 --
+
+-- Error cases --
+int(0)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/get_magic_quotes_runtime.phpt b/ext/standard/tests/general_functions/get_magic_quotes_runtime.phpt
new file mode 100644
index 000000000..94aa3a73e
--- /dev/null
+++ b/ext/standard/tests/general_functions/get_magic_quotes_runtime.phpt
@@ -0,0 +1,59 @@
+--TEST--
+Test get_magic_quotes_runtime() function
+--INI-
+magic_quotes_runtime = 0
+--FILE--
+<?php
+/* Prototype: int get_magic_quotes_runtime ( void )
+ * Description: Gets the current active configuration setting of magic_quotes_runtime
+*/
+
+echo "Simple testcase for get_magic_quotes_runtime() function\n";
+
+$g = get_magic_quotes_runtime();
+echo "\n-- magic quotes runtime set in INI file: " . $g . " --\n";
+
+echo "\n-- Set magic quotes runtime to 1: --\n";
+var_dump(set_magic_quotes_runtime(1));
+$g = get_magic_quotes_runtime();
+echo "\n-- magic quotes runtime after set: " . $g . " --\n";
+
+echo "\n-- Set magic quotes runtime to 0: --\n";
+var_dump(set_magic_quotes_runtime(0));
+$g = get_magic_quotes_runtime();
+echo "\n-- magic quotes runtime after set: " . $g . " --\n";
+
+echo "\n-- Set magic quotes runtime to 1: --\n";
+var_dump(set_magic_quotes_runtime(1));
+$g = get_magic_quotes_runtime();
+echo "\n-- magic quotes runtime after set: " . $g . " --\n";
+
+echo "\n-- Error cases --\n";
+// no checks on number of args
+var_dump(get_magic_quotes_runtime(true));
+
+?>
+===DONE===
+--EXPECT--
+Simple testcase for get_magic_quotes_runtime() function
+
+-- magic quotes runtime set in INI file: 0 --
+
+-- Set magic quotes runtime to 1: --
+bool(true)
+
+-- magic quotes runtime after set: 1 --
+
+-- Set magic quotes runtime to 0: --
+bool(true)
+
+-- magic quotes runtime after set: 0 --
+
+-- Set magic quotes runtime to 1: --
+bool(true)
+
+-- magic quotes runtime after set: 1 --
+
+-- Error cases --
+int(1)
+===DONE===
diff --git a/ext/standard/tests/general_functions/getmypid_basic.phpt b/ext/standard/tests/general_functions/getmypid_basic.phpt
new file mode 100644
index 000000000..732ae4eb7
--- /dev/null
+++ b/ext/standard/tests/general_functions/getmypid_basic.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Test getmypid() function: basic test
+--FILE--
+<?php
+/* Prototype : int getmypid ( void )
+ * Description: Gets the current PHP process ID.
+ * Source code: ext/standard/pageinfo.c
+ * Alias to functions:
+ */
+
+echo "Simple testcase for getmypid() function\n";
+
+var_dump(getmypid());
+
+// getmypid has not checks for spurious args
+var_dump(getmypid("foo"));
+
+echo "Done\n";
+?>
+--EXPECTF--
+Simple testcase for getmypid() function
+int(%d)
+int(%d)
+Done \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/getrusage_basic.phpt b/ext/standard/tests/general_functions/getrusage_basic.phpt
new file mode 100644
index 000000000..c9b34597c
--- /dev/null
+++ b/ext/standard/tests/general_functions/getrusage_basic.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test getrusage() function: basic test
+--SKIPIF--
+<?php
+if( substr(PHP_OS, 0, 3) == "WIN" )
+ die("skip.. Do not run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : array getrusage ([ int $who ] )
+ * Description: Gets the current resource usages
+ * Source code: ext/standard/microtime.c
+ * Alias to functions:
+ */
+
+echo "Simple testcase for getrusage() function\n";
+
+$dat = getrusage();
+
+if (!is_array($dat)) {
+ echo "TEST FAILED : getrusage shoudl return an array\n";
+}
+
+// echo the fields which are common to all platforms
+echo "User time used (seconds) " . $dat["ru_utime.tv_sec"] . "\n";
+echo "User time used (microseconds) " . $dat["ru_utime.tv_usec"] . "\n";
+?>
+===DONE===
+--EXPECTF--
+Simple testcase for getrusage() function
+User time used (seconds) %d
+User time used (microseconds) %d
+===DONE===
diff --git a/ext/standard/tests/general_functions/getrusage_error.phpt b/ext/standard/tests/general_functions/getrusage_error.phpt
new file mode 100644
index 000000000..b13d4f0cd
--- /dev/null
+++ b/ext/standard/tests/general_functions/getrusage_error.phpt
@@ -0,0 +1,73 @@
+--TEST--
+Test getrusage() function : error conditions - incorrect number of args
+--SKIPIF--
+<?php
+if( substr(PHP_OS, 0, 3) == "WIN" )
+ die("skip.. Do not run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : array getrusage ([ int $who ] )
+ * Description: Gets the current resource usages
+ * Source code: ext/standard/microtime.c
+ * Alias to functions:
+ */
+
+/*
+ * Pass an incorrect number of arguments to getrusage() to test behaviour
+ */
+
+echo "*** Testing getrusage() : error conditions ***\n";
+
+echo "\n-- Testing getrusage() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+$dat = getrusage(1, $extra_arg);
+
+echo "\n-- Testing getrusage() function with invalid argument - non-numeric STRING--\n";
+$string_arg = "foo";
+$dat = getrusage($string_arg);
+
+echo "\n-- Testing getrusage() function with invalid argument - ARRAY--\n";
+$array_arg = array(1,2,3);
+$dat = getrusage($array_arg);
+
+echo "\n-- Testing getrusage() function with invalid argument - OBJECT --\n";
+class classA
+{
+ function __toString() {
+ return "ClassAObject";
+ }
+}
+$obj_arg = new classA();
+$dat = getrusage($obj_arg);
+
+echo "\n-- Testing getrusage() function with invalid argument - RESOURCE --\n";
+$file_handle=fopen(__FILE__, "r");
+$dat = getrusage($file_handle);
+fclose($file_handle);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing getrusage() : error conditions ***
+
+-- Testing getrusage() function with more than expected no. of arguments --
+
+Warning: getrusage() expects at most 1 parameter, 2 given in %s on line %d
+
+-- Testing getrusage() function with invalid argument - non-numeric STRING--
+
+Warning: getrusage() expects parameter 1 to be long, string given in %s on line %d
+
+-- Testing getrusage() function with invalid argument - ARRAY--
+
+Warning: getrusage() expects parameter 1 to be long, array given in %s on line %d
+
+-- Testing getrusage() function with invalid argument - OBJECT --
+
+Warning: getrusage() expects parameter 1 to be long, object given in %s on line %d
+
+-- Testing getrusage() function with invalid argument - RESOURCE --
+
+Warning: getrusage() expects parameter 1 to be long, resource given in %s on line %d
+===DONE===
diff --git a/ext/standard/tests/general_functions/getrusage_variation1.phpt b/ext/standard/tests/general_functions/getrusage_variation1.phpt
new file mode 100644
index 000000000..3daf9e5e6
--- /dev/null
+++ b/ext/standard/tests/general_functions/getrusage_variation1.phpt
@@ -0,0 +1,142 @@
+--TEST--
+Test getrusage() function : usage variation - diff data types as $who arg
+--SKIPIF--
+<?php
+if( substr(PHP_OS, 0, 3) == "WIN" )
+ die("skip.. Do not run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : array getrusage ([ int $who ] )
+ * Description: Gets the current resource usages
+ * Source code: ext/standard/microtime.c
+ * Alias to functions:
+ */
+
+
+/*
+ * Pass different data types as $who argument to test behaviour of getrusage()
+ */
+
+echo "*** Testing getrusage() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+
+// unexpected values to be passed to $stream_id argument
+$inputs = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // string data
+/*16*/ "0",
+ '1',
+ "1232456",
+ "1.23E4",
+
+ // undefined data
+/*20*/ @$undefined_var,
+
+ // unset data
+/*21*/ @$unset_var,
+);
+
+// loop through each element of $inputs to check the behavior of getrusage()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ $res = getrusage($input);
+ echo "User time used (microseconds) " . $res["ru_utime.tv_usec"] . "\n";
+ $iterator++;
+}
+?>
+===DONE===
+--EXPECTF--
+*** Testing getrusage() : usage variations ***
+
+-- Iteration 1 --
+User time used (microseconds) %d
+
+-- Iteration 2 --
+User time used (microseconds) %d
+
+-- Iteration 3 --
+User time used (microseconds) %d
+
+-- Iteration 4 --
+User time used (microseconds) %d
+
+-- Iteration 5 --
+User time used (microseconds) %d
+
+-- Iteration 6 --
+User time used (microseconds) %d
+
+-- Iteration 7 --
+User time used (microseconds) %d
+
+-- Iteration 8 --
+User time used (microseconds) %d
+
+-- Iteration 9 --
+User time used (microseconds) %d
+
+-- Iteration 10 --
+User time used (microseconds) %d
+
+-- Iteration 11 --
+User time used (microseconds) %d
+
+-- Iteration 12 --
+User time used (microseconds) %d
+
+-- Iteration 13 --
+User time used (microseconds) %d
+
+-- Iteration 14 --
+User time used (microseconds) %d
+
+-- Iteration 15 --
+User time used (microseconds) %d
+
+-- Iteration 16 --
+User time used (microseconds) %d
+
+-- Iteration 17 --
+User time used (microseconds) %d
+
+-- Iteration 18 --
+User time used (microseconds) %d
+
+-- Iteration 19 --
+User time used (microseconds) %d
+
+-- Iteration 20 --
+User time used (microseconds) %d
+
+-- Iteration 21 --
+User time used (microseconds) %d
+===DONE===
diff --git a/ext/standard/tests/general_functions/is_callable_basic1.phpt b/ext/standard/tests/general_functions/is_callable_basic1.phpt
new file mode 100644
index 000000000..e836d734f
--- /dev/null
+++ b/ext/standard/tests/general_functions/is_callable_basic1.phpt
@@ -0,0 +1,109 @@
+--TEST--
+Test is_callable() function : usage variations - defined functions
+--INI--
+precision=14
+error_reporting = E_ALL & ~E_NOTICE | E_STRICT
+--FILE--
+<?php
+/* Prototype: bool is_callable ( mixed $var [, bool $syntax_only [, string &$callable_name]] );
+ * Description: Verify that the contents of a variable can be called as a function
+ * Source code: ext/imap/php_imap.c
+ */
+
+/* Prototype: void check_iscallable( $functions );
+ Description: use iscallable() on given string to check for valid function name
+ returns true if valid function name, false otherwise
+*/
+function check_iscallable( $functions ) {
+ $counter = 1;
+ foreach($functions as $func) {
+ echo "-- Iteration $counter --\n";
+ var_dump( is_callable($func) ); //given only $var argument
+ var_dump( is_callable($func, TRUE) ); //given $var and $syntax argument
+ var_dump( is_callable($func, TRUE, $callable_name) );
+ echo $callable_name, "\n";
+ var_dump( is_callable($func, FALSE) ); //given $var and $syntax argument
+ var_dump( is_callable($func, FALSE, $callable_name) );
+ echo $callable_name, "\n";
+ $counter++;
+ }
+}
+
+echo "\n*** Testing is_callable() on defined functions ***\n";
+/* function name with simple string */
+function someFunction() {
+}
+
+/* function name with mixed string and integer */
+function x123() {
+}
+
+/* function name as NULL */
+function NULL() {
+}
+
+/* function name with boolean name */
+function false() {
+}
+
+/* function name with string and special character */
+function Hello_World() {
+}
+
+$defined_functions = array (
+ $functionVar1 = 'someFunction',
+ $functionVar2 = 'x123',
+ $functionVar3 = 'NULL',
+ $functionVar4 = 'false',
+ $functionVar5 = "Hello_World"
+);
+/* use check_iscallable() to check whether given string is valid function name
+ * expected: true as it is valid callback
+ */
+check_iscallable($defined_functions);
+
+?>
+===DONE===
+--EXPECT---
+*** Testing is_callable() on defined functions ***
+-- Iteration 1 --
+bool(true)
+bool(true)
+bool(true)
+someFunction
+bool(true)
+bool(true)
+someFunction
+-- Iteration 2 --
+bool(true)
+bool(true)
+bool(true)
+x123
+bool(true)
+bool(true)
+x123
+-- Iteration 3 --
+bool(true)
+bool(true)
+bool(true)
+NULL
+bool(true)
+bool(true)
+NULL
+-- Iteration 4 --
+bool(true)
+bool(true)
+bool(true)
+false
+bool(true)
+bool(true)
+false
+-- Iteration 5 --
+bool(true)
+bool(true)
+bool(true)
+Hello_World
+bool(true)
+bool(true)
+Hello_World
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/is_callable.phpt b/ext/standard/tests/general_functions/is_callable_basic2.phpt
index b15703fed..b438ef78c 100644
--- a/ext/standard/tests/general_functions/is_callable.phpt
+++ b/ext/standard/tests/general_functions/is_callable_basic2.phpt
@@ -1,5 +1,5 @@
--TEST--
-Test is_callable() function
+Test is_callable() function : usage variations - on objects
--INI--
precision=14
error_reporting = E_ALL & ~E_NOTICE | E_STRICT
@@ -10,24 +10,6 @@ error_reporting = E_ALL & ~E_NOTICE | E_STRICT
In case of objects, $var = array($SomeObject, 'MethodName')
*/
-/* Prototype: void check_iscallable( $functions );
- Description: use iscallable() on given string to check for valid function name
- returns true if valid function name, false otherwise
-*/
-function check_iscallable( $functions ) {
- $counter = 1;
- foreach($functions as $func) {
- echo "-- Iteration $counter --\n";
- var_dump( is_callable($func) ); //given only $var argument
- var_dump( is_callable($func, TRUE) ); //given $var and $syntax argument
- var_dump( is_callable($func, TRUE, $callable_name) );
- var_dump( is_callable($func, FALSE) ); //given $var and $syntax argument
- var_dump( is_callable($func, FALSE, $callable_name) );
- echo $callable_name, "\n";
- $counter++;
- }
-}
-
/* Prototype: void check_iscallable_objects( $methods );
Description: use is_callable() on given $method to check if the array
contains a valid method name;
@@ -42,72 +24,13 @@ function check_iscallable_objects( $methods ) {
var_dump( is_callable($method, true) );
var_dump( is_callable($method, false) );
var_dump( is_callable($method, true, $callable_name) );
+ echo $callable_name, "\n";
var_dump( is_callable($method, false, $callable_name) );
echo $callable_name, "\n";
$counter++;
}
}
-echo "\n*** Testing is_callable() on defined functions ***\n";
-/* function name with simple string */
-function someFunction() {
-}
-
-/* function name with mixed string and integer */
-function x123() {
-}
-
-/* function name as NULL */
-function NULL() {
-}
-
-/* function name with boolean name */
-function false() {
-}
-
-/* function name with string and special character */
-function Hello_World() {
-}
-
-$defined_functions = array (
- $functionVar1 = 'someFunction',
- $functionVar2 = 'x123',
- $functionVar3 = 'NULL',
- $functionVar4 = 'false',
- $functionVar5 = "Hello_World"
-);
-/* use check_iscallable() to check whether given string is valid function name
- * expected: true as it is valid callback
- */
-check_iscallable($defined_functions);
-
-echo "\n*** Testing is_callable() on undefined functions ***\n";
-$undef_functions = array (
- "", //empty string
- '',
- " ", //string with a space
- ' ',
- "12356",
- "\0",
- '\0',
- "hello world",
- 'hello world',
- "welcome\0",
- 'welcome\0',
- "==%%%***$$$@@@!!",
- "false",
- "\070",
- '\t', //escape character
- '\007',
- '123',
- 'echo()'
-);
-/* use check_iscallable() to check whether given string is valid function name
- * expected: true with $syntax = TRUE
- * false with $syntax = FALSE
- */
-check_iscallable($undef_functions);
-
echo "\n*** Testing is_callable() on objects ***\n";
class object_class
{
@@ -203,209 +126,9 @@ foreach($objects as $object) {
$loop_counter++;
}
-echo "\n*** Testing is_callable() on invalid function names ***\n";
-/* check on unset variables */
-$unset_var = 10;
-unset ($unset_var);
-
-/* opening file resource type */
-$file_handle = fopen (__FILE__, "r");
-
-$variants = array (
- NULL, // NULL as argument
- 0, // zero as argument
- 1234567890, // positive value
- -100123456782, // negative value
- -2.000000, // negative float value
- .567, // positive float value
- FALSE, // boolean value
- array(1, 2, 3), // array
- @$unset_var,
- @$undef_var, //undefined variable
- $file_handle
-);
-/* use check_iscallable() to check whether given variable is valid function name
- * expected: false
- */
-check_iscallable($variants);
-
-echo "\n*** Testing error conditions ***\n";
-/* passing zero argument */
-var_dump( is_callable() );
-/* passing more than required arguments */
-var_dump( is_callable("string", TRUE, $callable_name, "EXTRA") );
-
-/* closing resources used */
-fclose($file_handle);
-
-echo "Done\n";
?>
+===DONE===
--EXPECTF--
-*** Testing is_callable() on defined functions ***
--- Iteration 1 --
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-someFunction
--- Iteration 2 --
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-x123
--- Iteration 3 --
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-NULL
--- Iteration 4 --
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-false
--- Iteration 5 --
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-Hello_World
-
-*** Testing is_callable() on undefined functions ***
--- Iteration 1 --
-bool(false)
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-
--- Iteration 2 --
-bool(false)
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-
--- Iteration 3 --
-bool(false)
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-
--- Iteration 4 --
-bool(false)
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-
--- Iteration 5 --
-bool(false)
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-12356
--- Iteration 6 --
-bool(false)
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-
--- Iteration 7 --
-bool(false)
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-\0
--- Iteration 8 --
-bool(false)
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-hello world
--- Iteration 9 --
-bool(false)
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-hello world
--- Iteration 10 --
-bool(false)
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-welcome
--- Iteration 11 --
-bool(false)
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-welcome\0
--- Iteration 12 --
-bool(false)
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-==%%%***$$$@@@!!
--- Iteration 13 --
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-bool(true)
-false
--- Iteration 14 --
-bool(false)
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-8
--- Iteration 15 --
-bool(false)
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-\t
--- Iteration 16 --
-bool(false)
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-\007
--- Iteration 17 --
-bool(false)
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-123
--- Iteration 18 --
-bool(false)
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-echo()
-
*** Testing is_callable() on objects ***
** Testing behavior of is_callable() on static methods **
@@ -419,6 +142,7 @@ bool(true)
bool(true)
bool(true)
bool(true)
+object_class::foo1
bool(true)
object_class::foo1
-- Innerloop iteration 2 of Outerloop iteration 1 --
@@ -426,6 +150,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+object_class::foo2
bool(false)
object_class::foo2
-- Innerloop iteration 3 of Outerloop iteration 1 --
@@ -433,6 +158,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+object_class::foo3
bool(false)
object_class::foo3
-- Innerloop iteration 4 of Outerloop iteration 1 --
@@ -440,6 +166,7 @@ bool(true)
bool(true)
bool(true)
bool(true)
+object_class::x123
bool(true)
object_class::x123
-- Innerloop iteration 5 of Outerloop iteration 1 --
@@ -447,6 +174,7 @@ bool(true)
bool(true)
bool(true)
bool(true)
+object_class::null
bool(true)
object_class::null
-- Innerloop iteration 6 of Outerloop iteration 1 --
@@ -454,6 +182,7 @@ bool(true)
bool(true)
bool(true)
bool(true)
+object_class::TRUE
bool(true)
object_class::TRUE
-- Innerloop iteration 7 of Outerloop iteration 1 --
@@ -461,6 +190,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+object_class::123
bool(false)
object_class::123
-- Innerloop iteration 8 of Outerloop iteration 1 --
@@ -468,6 +198,7 @@ bool(false)
bool(false)
bool(false)
bool(false)
+Array
bool(false)
Array
-- Innerloop iteration 9 of Outerloop iteration 1 --
@@ -475,6 +206,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+object_class::func
bool(false)
object_class::func
-- Innerloop iteration 10 of Outerloop iteration 1 --
@@ -486,6 +218,7 @@ bool(true)
Strict Standards: Non-static method object_class::foo1() cannot be called statically in %s on line %d
bool(true)
bool(true)
+object_class::foo1
Strict Standards: Non-static method object_class::foo1() cannot be called statically in %s on line %d
bool(true)
@@ -496,6 +229,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+no_member_class::foo1
bool(false)
no_member_class::foo1
-- Innerloop iteration 2 of Outerloop iteration 2 --
@@ -503,6 +237,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+no_member_class::foo2
bool(false)
no_member_class::foo2
-- Innerloop iteration 3 of Outerloop iteration 2 --
@@ -510,6 +245,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+no_member_class::foo3
bool(false)
no_member_class::foo3
-- Innerloop iteration 4 of Outerloop iteration 2 --
@@ -517,6 +253,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+no_member_class::x123
bool(false)
no_member_class::x123
-- Innerloop iteration 5 of Outerloop iteration 2 --
@@ -524,6 +261,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+no_member_class::null
bool(false)
no_member_class::null
-- Innerloop iteration 6 of Outerloop iteration 2 --
@@ -531,6 +269,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+no_member_class::TRUE
bool(false)
no_member_class::TRUE
-- Innerloop iteration 7 of Outerloop iteration 2 --
@@ -538,6 +277,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+no_member_class::123
bool(false)
no_member_class::123
-- Innerloop iteration 8 of Outerloop iteration 2 --
@@ -545,6 +285,7 @@ bool(false)
bool(false)
bool(false)
bool(false)
+Array
bool(false)
Array
-- Innerloop iteration 9 of Outerloop iteration 2 --
@@ -552,6 +293,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+no_member_class::func
bool(false)
no_member_class::func
-- Innerloop iteration 10 of Outerloop iteration 2 --
@@ -563,6 +305,7 @@ bool(true)
Strict Standards: Non-static method object_class::foo1() cannot be called statically in %s on line %d
bool(true)
bool(true)
+object_class::foo1
Strict Standards: Non-static method object_class::foo1() cannot be called statically in %s on line %d
bool(true)
@@ -573,6 +316,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+contains_object_class::foo1
bool(false)
contains_object_class::foo1
-- Innerloop iteration 2 of Outerloop iteration 3 --
@@ -580,6 +324,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+contains_object_class::foo2
bool(false)
contains_object_class::foo2
-- Innerloop iteration 3 of Outerloop iteration 3 --
@@ -587,6 +332,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+contains_object_class::foo3
bool(false)
contains_object_class::foo3
-- Innerloop iteration 4 of Outerloop iteration 3 --
@@ -594,6 +340,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+contains_object_class::x123
bool(false)
contains_object_class::x123
-- Innerloop iteration 5 of Outerloop iteration 3 --
@@ -601,6 +348,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+contains_object_class::null
bool(false)
contains_object_class::null
-- Innerloop iteration 6 of Outerloop iteration 3 --
@@ -608,6 +356,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+contains_object_class::TRUE
bool(false)
contains_object_class::TRUE
-- Innerloop iteration 7 of Outerloop iteration 3 --
@@ -615,6 +364,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+contains_object_class::123
bool(false)
contains_object_class::123
-- Innerloop iteration 8 of Outerloop iteration 3 --
@@ -622,6 +372,7 @@ bool(false)
bool(false)
bool(false)
bool(false)
+Array
bool(false)
Array
-- Innerloop iteration 9 of Outerloop iteration 3 --
@@ -629,6 +380,7 @@ bool(true)
bool(true)
bool(true)
bool(true)
+contains_object_class::func
bool(true)
contains_object_class::func
-- Innerloop iteration 10 of Outerloop iteration 3 --
@@ -640,6 +392,7 @@ bool(true)
Strict Standards: Non-static method object_class::foo1() cannot be called statically in %s on line %d
bool(true)
bool(true)
+object_class::foo1
Strict Standards: Non-static method object_class::foo1() cannot be called statically in %s on line %d
bool(true)
@@ -650,6 +403,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+contains_object_class::foo1
bool(false)
contains_object_class::foo1
-- Innerloop iteration 2 of Outerloop iteration 4 --
@@ -657,6 +411,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+contains_object_class::foo2
bool(false)
contains_object_class::foo2
-- Innerloop iteration 3 of Outerloop iteration 4 --
@@ -664,6 +419,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+contains_object_class::foo3
bool(false)
contains_object_class::foo3
-- Innerloop iteration 4 of Outerloop iteration 4 --
@@ -671,6 +427,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+contains_object_class::x123
bool(false)
contains_object_class::x123
-- Innerloop iteration 5 of Outerloop iteration 4 --
@@ -678,6 +435,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+contains_object_class::null
bool(false)
contains_object_class::null
-- Innerloop iteration 6 of Outerloop iteration 4 --
@@ -685,6 +443,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+contains_object_class::TRUE
bool(false)
contains_object_class::TRUE
-- Innerloop iteration 7 of Outerloop iteration 4 --
@@ -692,6 +451,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+contains_object_class::123
bool(false)
contains_object_class::123
-- Innerloop iteration 8 of Outerloop iteration 4 --
@@ -699,6 +459,7 @@ bool(false)
bool(false)
bool(false)
bool(false)
+Array
bool(false)
Array
-- Innerloop iteration 9 of Outerloop iteration 4 --
@@ -706,6 +467,7 @@ bool(true)
bool(true)
bool(true)
bool(true)
+contains_object_class::func
bool(true)
contains_object_class::func
-- Innerloop iteration 10 of Outerloop iteration 4 --
@@ -717,6 +479,7 @@ bool(true)
Strict Standards: Non-static method object_class::foo1() cannot be called statically in %s on line %d
bool(true)
bool(true)
+object_class::foo1
Strict Standards: Non-static method object_class::foo1() cannot be called statically in %s on line %d
bool(true)
@@ -727,6 +490,7 @@ bool(true)
bool(true)
bool(true)
bool(true)
+object_class::foo1
bool(true)
object_class::foo1
-- Innerloop iteration 2 of Outerloop iteration 5 --
@@ -734,6 +498,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+object_class::foo2
bool(false)
object_class::foo2
-- Innerloop iteration 3 of Outerloop iteration 5 --
@@ -741,6 +506,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+object_class::foo3
bool(false)
object_class::foo3
-- Innerloop iteration 4 of Outerloop iteration 5 --
@@ -748,6 +514,7 @@ bool(true)
bool(true)
bool(true)
bool(true)
+object_class::x123
bool(true)
object_class::x123
-- Innerloop iteration 5 of Outerloop iteration 5 --
@@ -755,6 +522,7 @@ bool(true)
bool(true)
bool(true)
bool(true)
+object_class::null
bool(true)
object_class::null
-- Innerloop iteration 6 of Outerloop iteration 5 --
@@ -762,6 +530,7 @@ bool(true)
bool(true)
bool(true)
bool(true)
+object_class::TRUE
bool(true)
object_class::TRUE
-- Innerloop iteration 7 of Outerloop iteration 5 --
@@ -769,6 +538,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+object_class::123
bool(false)
object_class::123
-- Innerloop iteration 8 of Outerloop iteration 5 --
@@ -776,6 +546,7 @@ bool(false)
bool(false)
bool(false)
bool(false)
+Array
bool(false)
Array
-- Innerloop iteration 9 of Outerloop iteration 5 --
@@ -783,6 +554,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+object_class::func
bool(false)
object_class::func
-- Innerloop iteration 10 of Outerloop iteration 5 --
@@ -794,6 +566,7 @@ bool(true)
Strict Standards: Non-static method object_class::foo1() cannot be called statically in %s on line %d
bool(true)
bool(true)
+object_class::foo1
Strict Standards: Non-static method object_class::foo1() cannot be called statically in %s on line %d
bool(true)
@@ -804,6 +577,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+no_member_class::foo1
bool(false)
no_member_class::foo1
-- Innerloop iteration 2 of Outerloop iteration 6 --
@@ -811,6 +585,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+no_member_class::foo2
bool(false)
no_member_class::foo2
-- Innerloop iteration 3 of Outerloop iteration 6 --
@@ -818,6 +593,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+no_member_class::foo3
bool(false)
no_member_class::foo3
-- Innerloop iteration 4 of Outerloop iteration 6 --
@@ -825,6 +601,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+no_member_class::x123
bool(false)
no_member_class::x123
-- Innerloop iteration 5 of Outerloop iteration 6 --
@@ -832,6 +609,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+no_member_class::null
bool(false)
no_member_class::null
-- Innerloop iteration 6 of Outerloop iteration 6 --
@@ -839,6 +617,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+no_member_class::TRUE
bool(false)
no_member_class::TRUE
-- Innerloop iteration 7 of Outerloop iteration 6 --
@@ -846,6 +625,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+no_member_class::123
bool(false)
no_member_class::123
-- Innerloop iteration 8 of Outerloop iteration 6 --
@@ -853,6 +633,7 @@ bool(false)
bool(false)
bool(false)
bool(false)
+Array
bool(false)
Array
-- Innerloop iteration 9 of Outerloop iteration 6 --
@@ -860,6 +641,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+no_member_class::func
bool(false)
no_member_class::func
-- Innerloop iteration 10 of Outerloop iteration 6 --
@@ -871,6 +653,7 @@ bool(true)
Strict Standards: Non-static method object_class::foo1() cannot be called statically in %s on line %d
bool(true)
bool(true)
+object_class::foo1
Strict Standards: Non-static method object_class::foo1() cannot be called statically in %s on line %d
bool(true)
@@ -881,6 +664,7 @@ bool(true)
bool(true)
bool(true)
bool(true)
+object_class::foo1
bool(true)
object_class::foo1
-- Innerloop iteration 2 of Outerloop iteration 7 --
@@ -888,6 +672,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+object_class::foo2
bool(false)
object_class::foo2
-- Innerloop iteration 3 of Outerloop iteration 7 --
@@ -895,6 +680,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+object_class::foo3
bool(false)
object_class::foo3
-- Innerloop iteration 4 of Outerloop iteration 7 --
@@ -902,6 +688,7 @@ bool(true)
bool(true)
bool(true)
bool(true)
+object_class::x123
bool(true)
object_class::x123
-- Innerloop iteration 5 of Outerloop iteration 7 --
@@ -909,6 +696,7 @@ bool(true)
bool(true)
bool(true)
bool(true)
+object_class::null
bool(true)
object_class::null
-- Innerloop iteration 6 of Outerloop iteration 7 --
@@ -916,6 +704,7 @@ bool(true)
bool(true)
bool(true)
bool(true)
+object_class::TRUE
bool(true)
object_class::TRUE
-- Innerloop iteration 7 of Outerloop iteration 7 --
@@ -923,6 +712,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+object_class::123
bool(false)
object_class::123
-- Innerloop iteration 8 of Outerloop iteration 7 --
@@ -930,6 +720,7 @@ bool(false)
bool(false)
bool(false)
bool(false)
+Array
bool(false)
Array
-- Innerloop iteration 9 of Outerloop iteration 7 --
@@ -937,6 +728,7 @@ bool(false)
bool(true)
bool(false)
bool(true)
+object_class::func
bool(false)
object_class::func
-- Innerloop iteration 10 of Outerloop iteration 7 --
@@ -948,6 +740,7 @@ bool(true)
Strict Standards: Non-static method object_class::foo1() cannot be called statically in %s on line %d
bool(true)
bool(true)
+object_class::foo1
Strict Standards: Non-static method object_class::foo1() cannot be called statically in %s on line %d
bool(true)
@@ -958,6 +751,7 @@ bool(false)
bool(false)
bool(false)
bool(false)
+Array
bool(false)
Array
-- Innerloop iteration 2 of Outerloop iteration 8 --
@@ -965,6 +759,7 @@ bool(false)
bool(false)
bool(false)
bool(false)
+Array
bool(false)
Array
-- Innerloop iteration 3 of Outerloop iteration 8 --
@@ -972,6 +767,7 @@ bool(false)
bool(false)
bool(false)
bool(false)
+Array
bool(false)
Array
-- Innerloop iteration 4 of Outerloop iteration 8 --
@@ -979,6 +775,7 @@ bool(false)
bool(false)
bool(false)
bool(false)
+Array
bool(false)
Array
-- Innerloop iteration 5 of Outerloop iteration 8 --
@@ -986,6 +783,7 @@ bool(false)
bool(false)
bool(false)
bool(false)
+Array
bool(false)
Array
-- Innerloop iteration 6 of Outerloop iteration 8 --
@@ -993,6 +791,7 @@ bool(false)
bool(false)
bool(false)
bool(false)
+Array
bool(false)
Array
-- Innerloop iteration 7 of Outerloop iteration 8 --
@@ -1000,6 +799,7 @@ bool(false)
bool(false)
bool(false)
bool(false)
+Array
bool(false)
Array
-- Innerloop iteration 8 of Outerloop iteration 8 --
@@ -1007,6 +807,7 @@ bool(false)
bool(false)
bool(false)
bool(false)
+Array
bool(false)
Array
-- Innerloop iteration 9 of Outerloop iteration 8 --
@@ -1014,6 +815,7 @@ bool(false)
bool(false)
bool(false)
bool(false)
+Array
bool(false)
Array
-- Innerloop iteration 10 of Outerloop iteration 8 --
@@ -1025,95 +827,9 @@ bool(true)
Strict Standards: Non-static method object_class::foo1() cannot be called statically in %s on line %d
bool(true)
bool(true)
+object_class::foo1
Strict Standards: Non-static method object_class::foo1() cannot be called statically in %s on line %d
bool(true)
object_class::foo1
-
-*** Testing is_callable() on invalid function names ***
--- Iteration 1 --
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-
--- Iteration 2 --
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-0
--- Iteration 3 --
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-1234567890
--- Iteration 4 --
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
--100123456782
--- Iteration 5 --
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
--2
--- Iteration 6 --
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-0.567
--- Iteration 7 --
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-
--- Iteration 8 --
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-Array
--- Iteration 9 --
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-
--- Iteration 10 --
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-
--- Iteration 11 --
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-bool(false)
-Resource id #5
-
-*** Testing error conditions ***
-
-Warning: Wrong parameter count for is_callable() in %s on line %d
-NULL
-
-Warning: Wrong parameter count for is_callable() in %s on line %d
-NULL
-Done
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/is_callable_error.phpt b/ext/standard/tests/general_functions/is_callable_error.phpt
new file mode 100644
index 000000000..b4acc0460
--- /dev/null
+++ b/ext/standard/tests/general_functions/is_callable_error.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test is_callable() function
+--INI--
+precision=14
+error_reporting = E_ALL & ~E_NOTICE | E_STRICT
+--FILE--
+<?php
+/* Prototype: bool is_callable ( mixed $var [, bool $syntax_only [, string &$callable_name]] );
+ Description: Verify that the contents of a variable can be called as a function
+ In case of objects, $var = array($SomeObject, 'MethodName')
+*/
+
+echo "\n*** Testing error conditions ***\n";
+
+echo "\n-- Testing is_callable() function with less than expected no. of arguments --\n";
+var_dump( is_callable() );
+
+echo "\n-- Testing is_callable() function with more than expected no. of arguments --\n";
+var_dump( is_callable("string", TRUE, $callable_name, "EXTRA") );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing error conditions ***
+
+-- Testing is_callable() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for is_callable() in %s on line %d
+NULL
+
+-- Testing is_callable() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for is_callable() in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/is_callable_variation1.phpt b/ext/standard/tests/general_functions/is_callable_variation1.phpt
new file mode 100644
index 000000000..cfc14bbd9
--- /dev/null
+++ b/ext/standard/tests/general_functions/is_callable_variation1.phpt
@@ -0,0 +1,208 @@
+--TEST--
+Test is_callable() function : usage variations - undefined functions
+--INI--
+precision=14
+error_reporting = E_ALL & ~E_NOTICE | E_STRICT
+--FILE--
+<?php
+/* Prototype: bool is_callable ( mixed $var [, bool $syntax_only [, string &$callable_name]] );
+ Description: Verify that the contents of a variable can be called as a function
+ In case of objects, $var = array($SomeObject, 'MethodName')
+*/
+
+/* Prototype: void check_iscallable( $functions );
+ Description: use iscallable() on given string to check for valid function name
+ returns true if valid function name, false otherwise
+*/
+function check_iscallable( $functions ) {
+ $counter = 1;
+ foreach($functions as $func) {
+ echo "-- Iteration $counter --\n";
+ var_dump( is_callable($func) ); //given only $var argument
+ var_dump( is_callable($func, TRUE) ); //given $var and $syntax argument
+ var_dump( is_callable($func, TRUE, $callable_name) );
+ echo $callable_name, "\n";
+ var_dump( is_callable($func, FALSE) ); //given $var and $syntax argument
+ var_dump( is_callable($func, FALSE, $callable_name) );
+ echo $callable_name, "\n";
+ $counter++;
+ }
+}
+
+echo "\n*** Testing is_callable() on undefined functions ***\n";
+$undef_functions = array (
+ "", //empty string
+ '',
+ " ", //string with a space
+ ' ',
+ "12356",
+ "\0",
+ '\0',
+ "hello world",
+ 'hello world',
+ "welcome\0",
+ 'welcome\0',
+ "==%%%***$$$@@@!!",
+ "false",
+ "\070",
+ '\t', //escape character
+ '\007',
+ '123',
+ 'echo()'
+);
+
+/* use check_iscallable() to check whether given string is valid function name
+ * expected: true with $syntax = TRUE
+ * false with $syntax = FALSE
+ */
+check_iscallable($undef_functions);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing is_callable() on undefined functions ***
+-- Iteration 1 --
+bool(false)
+bool(true)
+bool(true)
+
+bool(false)
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+bool(true)
+bool(true)
+
+bool(false)
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+bool(true)
+bool(true)
+
+bool(false)
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+bool(true)
+bool(true)
+
+bool(false)
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+bool(true)
+bool(true)
+12356
+bool(false)
+bool(false)
+12356
+-- Iteration 6 --
+bool(false)
+bool(true)
+bool(true)
+
+bool(false)
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+bool(true)
+bool(true)
+\0
+bool(false)
+bool(false)
+\0
+-- Iteration 8 --
+bool(false)
+bool(true)
+bool(true)
+hello world
+bool(false)
+bool(false)
+hello world
+-- Iteration 9 --
+bool(false)
+bool(true)
+bool(true)
+hello world
+bool(false)
+bool(false)
+hello world
+-- Iteration 10 --
+bool(false)
+bool(true)
+bool(true)
+welcome
+bool(false)
+bool(false)
+welcome
+-- Iteration 11 --
+bool(false)
+bool(true)
+bool(true)
+welcome\0
+bool(false)
+bool(false)
+welcome\0
+-- Iteration 12 --
+bool(false)
+bool(true)
+bool(true)
+==%%%***$$$@@@!!
+bool(false)
+bool(false)
+==%%%***$$$@@@!!
+-- Iteration 13 --
+bool(false)
+bool(true)
+bool(true)
+false
+bool(false)
+bool(false)
+false
+-- Iteration 14 --
+bool(false)
+bool(true)
+bool(true)
+8
+bool(false)
+bool(false)
+8
+-- Iteration 15 --
+bool(false)
+bool(true)
+bool(true)
+\t
+bool(false)
+bool(false)
+\t
+-- Iteration 16 --
+bool(false)
+bool(true)
+bool(true)
+\007
+bool(false)
+bool(false)
+\007
+-- Iteration 17 --
+bool(false)
+bool(true)
+bool(true)
+123
+bool(false)
+bool(false)
+123
+-- Iteration 18 --
+bool(false)
+bool(true)
+bool(true)
+echo()
+bool(false)
+bool(false)
+echo()
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/is_callable_variation2.phpt b/ext/standard/tests/general_functions/is_callable_variation2.phpt
new file mode 100644
index 000000000..b94a446dc
--- /dev/null
+++ b/ext/standard/tests/general_functions/is_callable_variation2.phpt
@@ -0,0 +1,154 @@
+--TEST--
+Test is_callable() function : usage variations - on invalid function names
+--INI--
+precision=14
+error_reporting = E_ALL & ~E_NOTICE | E_STRICT
+--FILE--
+<?php
+/* Prototype: bool is_callable ( mixed $var [, bool $syntax_only [, string &$callable_name]] );
+ Description: Verify that the contents of a variable can be called as a function
+ In case of objects, $var = array($SomeObject, 'MethodName')
+*/
+
+/* Prototype: void check_iscallable( $functions );
+ Description: use iscallable() on given string to check for valid function name
+ returns true if valid function name, false otherwise
+*/
+function check_iscallable( $functions ) {
+ $counter = 1;
+ foreach($functions as $func) {
+ echo "-- Iteration $counter --\n";
+ var_dump( is_callable($func) ); //given only $var argument
+ var_dump( is_callable($func, TRUE) ); //given $var and $syntax argument
+ var_dump( is_callable($func, TRUE, $callable_name) );
+ echo $callable_name, "\n";
+ var_dump( is_callable($func, FALSE) ); //given $var and $syntax argument
+ var_dump( is_callable($func, FALSE, $callable_name) );
+ echo $callable_name, "\n";
+ $counter++;
+ }
+}
+
+echo "\n*** Testing is_callable() on invalid function names ***\n";
+/* check on unset variables */
+$unset_var = 10;
+unset ($unset_var);
+
+/* opening file resource type */
+$file_handle = fopen (__FILE__, "r");
+
+$variants = array (
+ NULL, // NULL as argument
+ 0, // zero as argument
+ 1234567890, // positive value
+ -100123456782, // negative value
+ -2.000000, // negative float value
+ .567, // positive float value
+ FALSE, // boolean value
+ array(1, 2, 3), // array
+ @$unset_var,
+ @$undef_var, //undefined variable
+ $file_handle
+);
+
+/* use check_iscallable() to check whether given variable is valid function name
+ * expected: false
+ */
+check_iscallable($variants);
+
+/* closing resources used */
+fclose($file_handle);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing is_callable() on invalid function names ***
+-- Iteration 1 --
+bool(false)
+bool(false)
+bool(false)
+
+bool(false)
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+bool(false)
+bool(false)
+0
+bool(false)
+bool(false)
+0
+-- Iteration 3 --
+bool(false)
+bool(false)
+bool(false)
+1234567890
+bool(false)
+bool(false)
+1234567890
+-- Iteration 4 --
+bool(false)
+bool(false)
+bool(false)
+-100123456782
+bool(false)
+bool(false)
+-100123456782
+-- Iteration 5 --
+bool(false)
+bool(false)
+bool(false)
+-2
+bool(false)
+bool(false)
+-2
+-- Iteration 6 --
+bool(false)
+bool(false)
+bool(false)
+0.567
+bool(false)
+bool(false)
+0.567
+-- Iteration 7 --
+bool(false)
+bool(false)
+bool(false)
+
+bool(false)
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+bool(false)
+bool(false)
+Array
+bool(false)
+bool(false)
+Array
+-- Iteration 9 --
+bool(false)
+bool(false)
+bool(false)
+
+bool(false)
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+bool(false)
+bool(false)
+
+bool(false)
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+bool(false)
+bool(false)
+Resource id #%d
+bool(false)
+bool(false)
+Resource id #%d
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/parse_ini_file.phpt b/ext/standard/tests/general_functions/parse_ini_file.phpt
index 399a224db..156ccb0a9 100644
--- a/ext/standard/tests/general_functions/parse_ini_file.phpt
+++ b/ext/standard/tests/general_functions/parse_ini_file.phpt
@@ -102,12 +102,10 @@ Warning: Wrong parameter count for parse_ini_file() in %s on line %d
NULL
Warning: parse_ini_file(%sparse_ini_file.dat): failed to open stream: No such file or directory in %s on line %d
-array(0) {
-}
+bool(false)
Warning: parse_ini_file(%sparse_ini_file.dat): failed to open stream: No such file or directory in %s on line %d
-array(0) {
-}
+bool(false)
array(1) {
["test"]=>
string(0) ""
@@ -115,17 +113,11 @@ array(1) {
Warning: Error parsing %sparse_ini_file.dat on line 2
in %s on line %d
-array(1) {
- ["test"]=>
- string(0) ""
-}
+bool(false)
Warning: Error parsing %sparse_ini_file.dat on line 2
in %s on line %d
-array(1) {
- ["test"]=>
- string(4) "test"
-}
+bool(false)
array(1) {
["test"]=>
string(8) "new
diff --git a/ext/standard/tests/general_functions/php_uname_basic.phpt b/ext/standard/tests/general_functions/php_uname_basic.phpt
new file mode 100644
index 000000000..629318d72
--- /dev/null
+++ b/ext/standard/tests/general_functions/php_uname_basic.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test php_uname() function - basic test
+--FILE--
+<?php
+/* Prototype: string php_uname ([ string $mode ] )
+ * Description: Returns information about the operating system PHP is running on
+*/
+
+echo "*** Testing php_uname() - basic test\n";
+
+var_dump(php_uname());
+
+echo "\n-- Try all the defined mode's --\n";
+
+var_dump(php_uname('a'));
+var_dump(php_uname('s'));
+var_dump(php_uname('n'));
+var_dump(php_uname('r'));
+var_dump(php_uname('v'));
+var_dump(php_uname('m'));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing php_uname() - basic test
+string(%d) "%s"
+
+-- Try all the defined mode's --
+string(%d) "%s"
+string(%d) "%s"
+string(%d) "%s"
+string(%d) "%s"
+string(%d) "%s"
+string(%d) "%s"
+===DONE===
diff --git a/ext/standard/tests/general_functions/php_uname_error.phpt b/ext/standard/tests/general_functions/php_uname_error.phpt
new file mode 100644
index 000000000..5e221b75c
--- /dev/null
+++ b/ext/standard/tests/general_functions/php_uname_error.phpt
@@ -0,0 +1,56 @@
+--TEST--
+Test php_uname() function - error conditions - pass function incorrect arguments
+--FILE--
+<?php
+/* Prototype: string php_uname ([ string $mode ] )
+ * Description: Returns information about the operating system PHP is running on
+*/
+
+echo "*** Testing php_uname() - error test\n";
+
+echo "\n-- Testing php_uname() function with more than expected no. of arguments --\n";
+var_dump( php_uname('a', true) );
+
+echo "\n-- Testing php_uname() function with invalid mode --\n";
+// am invalid mode shoudl result in same o/p as mode 'a'
+var_dump( php_uname('z') == php_uname('z') );
+
+class barClass {
+}
+
+$fp = fopen(__FILE__, "r");
+
+echo "\n-- Testing php_uname() function with invalid argument types --\n";
+var_dump(php_uname(array()));
+var_dump(php_uname(array('color' => 'red', 'item' => 'pen')));
+var_dump(php_uname(new barClass()));
+var_dump(php_uname($fp));
+
+fclose($fp);
+?>
+===DONE===
+--EXPECTF--
+*** Testing php_uname() - error test
+
+-- Testing php_uname() function with more than expected no. of arguments --
+
+Warning: php_uname() expects at most 1 parameter, 2 given in %s on line %d
+NULL
+
+-- Testing php_uname() function with invalid mode --
+bool(true)
+
+-- Testing php_uname() function with invalid argument types --
+
+Warning: php_uname() expects parameter 1 to be string, array given in %s on line %d
+NULL
+
+Warning: php_uname() expects parameter 1 to be string, array given in %s on line %d
+NULL
+
+Warning: php_uname() expects parameter 1 to be string, object given in %s on line %d
+NULL
+
+Warning: php_uname() expects parameter 1 to be string, resource given in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/php_uname_variation1.phpt b/ext/standard/tests/general_functions/php_uname_variation1.phpt
new file mode 100644
index 000000000..d94fd8004
--- /dev/null
+++ b/ext/standard/tests/general_functions/php_uname_variation1.phpt
@@ -0,0 +1,112 @@
+--TEST--
+Test php_uname() function - usage variations
+--FILE--
+<?php
+/* Prototype: string php_uname ([ string $mode ] )
+ * Description: Returns information about the operating system PHP is running on
+*/
+
+echo "*** Testing php_uname() - usage variations\n";
+// Prevent notices about undefines variables
+error_reporting(E_ALL & ~E_NOTICE);
+
+$unset_var = 10;
+unset ($unset_var);
+
+class fooClass {
+ function __toString() {
+ return "m";
+ }
+}
+
+$values = array(
+
+ // int data
+ "0" => 0,
+ "1" => 1,
+ "12345" => 12345,
+ "-2345" => -2345,
+
+ // float data
+ "10.5" => 10.5,
+ "-10.5" => -10.5,
+ "10.1234567e10" => 10.1234567e10,
+ "10.7654321E-10" => 10.7654321E-10,
+ ".5" => .5,
+
+ // null data
+ "NULL" => NULL,
+ "null" => null,
+
+ // boolean data
+ "true" => true,
+ "false" => false,
+ "TRUE" => TRUE,
+ "FALSE" => FALSE,
+
+ // empty data
+ "\"\"" => "",
+ "''" => '',
+
+ // object data
+ "new fooClass()" => new fooClass(),
+
+ // undefined data
+ "undefined var" => $undefined_var,
+
+ // unset data
+ "unset var" => $unset_var,
+);
+
+// loop through each element of the array for data
+
+foreach($values as $key => $value) {
+ echo "-- Iterator $key --\n";
+ var_dump( php_uname($value) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing php_uname() - usage variations
+-- Iterator 0 --
+string(%d) "%s"
+-- Iterator 1 --
+string(%d) "%s"
+-- Iterator 12345 --
+string(%d) "%s"
+-- Iterator -2345 --
+string(%d) "%s"
+-- Iterator 10.5 --
+string(%d) "%s"
+-- Iterator -10.5 --
+string(%d) "%s"
+-- Iterator 10.1234567e10 --
+string(%d) "%s"
+-- Iterator 10.7654321E-10 --
+string(%d) "%s"
+-- Iterator .5 --
+string(%d) "%s"
+-- Iterator NULL --
+string(%d) "%s"
+-- Iterator null --
+string(%d) "%s"
+-- Iterator true --
+string(%d) "%s"
+-- Iterator false --
+string(%d) "%s"
+-- Iterator TRUE --
+string(%d) "%s"
+-- Iterator FALSE --
+string(%d) "%s"
+-- Iterator "" --
+string(%d) "%s"
+-- Iterator '' --
+string(%d) "%s"
+-- Iterator new fooClass() --
+string(%d) "%s"
+-- Iterator undefined var --
+string(%d) "%s"
+-- Iterator unset var --
+string(%d) "%s"
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/set_magic_quotes_runtime_basic.phpt b/ext/standard/tests/general_functions/set_magic_quotes_runtime_basic.phpt
new file mode 100644
index 000000000..7101f428c
--- /dev/null
+++ b/ext/standard/tests/general_functions/set_magic_quotes_runtime_basic.phpt
@@ -0,0 +1,52 @@
+--TEST--
+Test set_magic_quotes_runtime() function - basic test
+--INI-
+magic_quotes_runtime = 0
+--FILE--
+<?php
+/* Prototype: bool set_magic_quotes_runtime ( int $new_setting )
+ * Description: Sets the current active configuration setting of magic_quotes_runtime
+*/
+
+echo "Simple testcase for set_magic_quotes_runtime() function - basic test\n";
+
+$g = get_magic_quotes_runtime();
+echo "\n-- magic quotes runtime set in INI file: " . $g . "--\n";
+
+echo "\n-- Set magic quotes runtime to 1: --\n";
+var_dump(set_magic_quotes_runtime(1));
+$g = get_magic_quotes_runtime();
+echo "\n-- magic quotes runtime after set: " . $g . " --\n";
+
+echo "\n-- Set magic quotes runtime to 0: --\n";
+var_dump(set_magic_quotes_runtime(0));
+$g = get_magic_quotes_runtime();
+echo "\n-- magic quotes runtime after set: " . $g . " --\n";
+
+echo "\n-- Set magic quotes runtime to 1: --\n";
+var_dump(set_magic_quotes_runtime(1));
+$g = get_magic_quotes_runtime();
+echo "\n-- magic quotes runtime after set: " . $g . " --\n";
+
+?>
+===DONE===
+--EXPECT--
+Simple testcase for set_magic_quotes_runtime() function - basic test
+
+-- magic quotes runtime set in INI file: 0--
+
+-- Set magic quotes runtime to 1: --
+bool(true)
+
+-- magic quotes runtime after set: 1 --
+
+-- Set magic quotes runtime to 0: --
+bool(true)
+
+-- magic quotes runtime after set: 0 --
+
+-- Set magic quotes runtime to 1: --
+bool(true)
+
+-- magic quotes runtime after set: 1 --
+===DONE===
diff --git a/ext/standard/tests/general_functions/set_magic_quotes_runtime_error.phpt b/ext/standard/tests/general_functions/set_magic_quotes_runtime_error.phpt
new file mode 100644
index 000000000..a2d71fa7d
--- /dev/null
+++ b/ext/standard/tests/general_functions/set_magic_quotes_runtime_error.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Test set_magic_quotes_runtime() function - error conditions - pass function incorrect arguments
+--FILE--
+<?php
+/* Prototype: bool set_magic_quotes_runtime ( int $new_setting )
+ * Description: Sets the current active configuration setting of magic_quotes_runtime
+*/
+
+echo "Simple testcase for set_magic_quotes_runtime() - error test\n";
+
+//Note: No error msgs on invalid input; just a return value of FALSE
+
+echo "\n-- Testing is_callable() function with less than expected no. of arguments --\n";
+var_dump(set_magic_quotes_runtime());
+
+echo "\n-- Testing is_callable() function with more than expected no. of arguments --\n";
+var_dump(set_magic_quotes_runtime(1, true));
+
+?>
+===DONE===
+--EXPECT--
+Simple testcase for set_magic_quotes_runtime() - error test
+
+-- Testing is_callable() function with less than expected no. of arguments --
+bool(false)
+
+-- Testing is_callable() function with more than expected no. of arguments --
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/set_magic_quotes_runtime_variation1.phpt b/ext/standard/tests/general_functions/set_magic_quotes_runtime_variation1.phpt
new file mode 100644
index 000000000..425a8dd56
--- /dev/null
+++ b/ext/standard/tests/general_functions/set_magic_quotes_runtime_variation1.phpt
@@ -0,0 +1,156 @@
+--TEST--
+Test set_magic_quotes_runtime() function - usage variation
+--INI-
+magic_quotes_runtime = 0
+--FILE--
+<?php
+/* Prototype: bool set_magic_quotes_runtime ( int $new_setting )
+ * Description: Sets the current active configuration setting of magic_quotes_runtime
+*/
+
+echo "Simple testcase for set_magic_quotes_runtime() function\n";
+
+$g = get_magic_quotes_runtime();
+echo "magic quotes runtime set in INI file: ".$g."\n";
+
+// Prevent notices about undefines variables
+error_reporting(E_ALL & ~E_NOTICE);
+
+$unset_var = 10;
+unset ($unset_var);
+
+class fooClass {
+ function __toString() {
+ return "true";
+ }
+}
+
+$fp = fopen(__FILE__, "r");
+
+$values = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 0.0,
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+
+ // object data
+/*19*/ new fooClass(),
+
+ // resource
+/*20*/ $fp,
+
+ // undefined data
+/*21*/ $undefined_var,
+
+ // unset data
+/*22*/ $unset_var
+);
+
+// loop through each element of the array for data
+
+$iterator = 1;
+foreach($values as $value) {
+ echo "-- Iterator $iterator --\n";
+ var_dump( set_magic_quotes_runtime($value) );
+ echo "New value of magic_quotes_runtime after last set is " . get_magic_quotes_runtime(). "\n";
+ $iterator++;
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECT--
+Simple testcase for set_magic_quotes_runtime() function
+magic quotes runtime set in INI file: 0
+-- Iterator 1 --
+bool(true)
+New value of magic_quotes_runtime after last set is 0
+-- Iterator 2 --
+bool(true)
+New value of magic_quotes_runtime after last set is 1
+-- Iterator 3 --
+bool(true)
+New value of magic_quotes_runtime after last set is 1
+-- Iterator 4 --
+bool(true)
+New value of magic_quotes_runtime after last set is 1
+-- Iterator 5 --
+bool(true)
+New value of magic_quotes_runtime after last set is 0
+-- Iterator 6 --
+bool(true)
+New value of magic_quotes_runtime after last set is 1
+-- Iterator 7 --
+bool(true)
+New value of magic_quotes_runtime after last set is 1
+-- Iterator 8 --
+bool(true)
+New value of magic_quotes_runtime after last set is 1
+-- Iterator 9 --
+bool(true)
+New value of magic_quotes_runtime after last set is 1
+-- Iterator 10 --
+bool(true)
+New value of magic_quotes_runtime after last set is 1
+-- Iterator 11 --
+bool(true)
+New value of magic_quotes_runtime after last set is 0
+-- Iterator 12 --
+bool(true)
+New value of magic_quotes_runtime after last set is 0
+-- Iterator 13 --
+bool(true)
+New value of magic_quotes_runtime after last set is 1
+-- Iterator 14 --
+bool(true)
+New value of magic_quotes_runtime after last set is 0
+-- Iterator 15 --
+bool(true)
+New value of magic_quotes_runtime after last set is 1
+-- Iterator 16 --
+bool(true)
+New value of magic_quotes_runtime after last set is 0
+-- Iterator 17 --
+bool(true)
+New value of magic_quotes_runtime after last set is 0
+-- Iterator 18 --
+bool(true)
+New value of magic_quotes_runtime after last set is 0
+-- Iterator 19 --
+bool(true)
+New value of magic_quotes_runtime after last set is 1
+-- Iterator 20 --
+bool(true)
+New value of magic_quotes_runtime after last set is 1
+-- Iterator 21 --
+bool(true)
+New value of magic_quotes_runtime after last set is 0
+-- Iterator 22 --
+bool(true)
+New value of magic_quotes_runtime after last set is 0
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/var_export.phpt b/ext/standard/tests/general_functions/var_export.phpt
deleted file mode 100644
index b5cc886e4..000000000
--- a/ext/standard/tests/general_functions/var_export.phpt
+++ /dev/null
@@ -1,1054 +0,0 @@
---TEST--
-Test var_export() function
---INI--
-precision=14
---FILE--
-<?php
-/* Prototype: mixed var_export( mixed expression [, bool return]);
- * Description: Returns the variable representation when the return parameter is used and evaluates to TRUE. Otherwise, this function will return NULL.
-
-*/
-
-echo "*** Testing var_export() with integer values ***\n";
-// different integer vlaues
-$valid_ints = array(
- '0',
- '1',
- '-1',
- '-2147483648', // max negative integer value
- '-2147483647',
- 2147483647, // max positive integer value
- 2147483640,
- 0x123B, // integer as hexadecimal
- '0x12ab',
- '0Xfff',
- '0XFA',
- -0x80000000, // max negative integer as hexadecimal
- '0x7fffffff', // max postive integer as hexadecimal
- 0x7FFFFFFF, // max postive integer as hexadecimal
- '0123', // integer as octal
- 01912, // should be quivalent to octal 1
- -020000000000, // max negative integer as octal
- 017777777777, // max positive integer as octal
- );
-$counter = 1;
-/* Loop to check for above integer values with var_export() */
-echo "\n*** Output for integer values ***\n";
-foreach($valid_ints as $int_value) {
-echo "\nIteration ".$counter."\n";
-var_export( $int_value );
-echo "\n";
-var_export( $int_value, FALSE);
-echo "\n";
-var_dump( var_export( $int_value, TRUE) );
-echo "\n";
-$counter++;
-}
-
-echo "*** Testing var_export() with valid boolean values ***\n";
-// different valid boolean vlaues
-$valid_bool = array(
- 1,
- TRUE,
- true,
- 0,
- FALSE,
- false
- );
-$counter = 1;
-/* Loop to check for above boolean values with var_export() */
-echo "\n*** Output for boolean values ***\n";
-foreach($valid_bool as $bool_value) {
-echo "\nIteration ".$counter."\n";
-var_export( $bool_value );
-echo "\n";
-var_export( $bool_value, FALSE);
-echo "\n";
-var_dump( var_export( $bool_value, TRUE) );
-echo "\n";
-$counter++;
-}
-
-echo "*** Testing var_export() with valid float values ***\n";
-// different valid float vlaues
-$valid_floats = array(
- -2147483649, // float value
- 2147483648, // float value
- -0x80000001, // float value, beyond max negative int
- 0x800000001, // float value, beyond max positive int
- 020000000001, // float value, beyond max positive int
- -020000000001, // float value, beyond max negative int
- 0.0,
- -0.1,
- 10.0000000000000000005,
- 10.5e+5,
- 1e5,
- 1e-5,
- 1e+5,
- 1E5,
- 1E+5,
- 1E-5,
- .5e+7,
- .6e-19,
- .05E+44,
- .0034E-30
-);
-$counter = 1;
-/* Loop to check for above float values with var_export() */
-echo "\n*** Output for float values ***\n";
-foreach($valid_bool as $float_value) {
-echo "\nIteration ".$counter."\n";
-var_export( $float_value );
-echo "\n";
-var_export( $float_value, FALSE);
-echo "\n";
-var_dump( var_export( $float_value, TRUE) );
-echo "\n";
-$counter++;
-}
-
-echo "*** Testing var_export() with valid strings ***\n";
-// different valid string
-$valid_strings = array(
- "",
- " ",
- '',
- ' ',
- "string",
- 'string',
- "NULL",
- 'null',
- "FALSE",
- 'false',
- "\x0b",
- "\0",
- '\0',
- '\060',
- "\070"
- );
-$counter = 1;
-/* Loop to check for above strings with var_export() */
-echo "\n*** Output for strings ***\n";
-foreach($valid_strings as $str) {
-echo "\nIteration ".$counter."\n";
-var_export( $str );
-echo "\n";
-var_export( $str, FALSE);
-echo "\n";
-var_dump( var_export( $str, TRUE) );
-echo "\n";
-$counter++;
-}
-
-echo "*** Testing var_export() with valid arrays ***\n";
-// different valid arrays
-$valid_arrays = array(
- array(),
- array(NULL),
- array(null),
- array(true),
- array(""),
- array(''),
- array(array(), array()),
- array(array(1, 2), array('a', 'b')),
- array(1 => 'One'),
- array("test" => "is_array"),
- array(0),
- array(-1),
- array(10.5, 5.6),
- array("string", "test"),
- array('string', 'test')
- );
-$counter = 1;
-/* Loop to check for above arrays with var_export() */
-echo "\n*** Output for arrays ***\n";
-foreach($valid_arrays as $arr) {
-echo "\nIteration ".$counter."\n";
-var_export( $arr );
-echo "\n";
-var_export( $arr, FALSE);
-echo "\n";
-var_dump( var_export( $arr, TRUE) );
-echo "\n";
-$counter++;
-}
-
-echo "*** Testing var_export() with valid objects ***\n";
-
-// class with no members
-class foo
-{
-// no members
-}
-
-// abstract class
-abstract class abstractClass
-{
- abstract protected function getClassName();
- public function printClassName () {
- echo $this->getClassName() . "\n";
- }
-}
-// implement abstract class
-class concreteClass extends abstractClass
-{
- protected function getClassName() {
- return "concreteClass";
- }
-}
-
-// interface class
-interface iValue
-{
- public function setVal ($name, $val);
- public function dumpVal ();
-}
-// implement the interface
-class Value implements iValue
-{
- private $vars = array ();
-
- public function setVal ( $name, $val ) {
- $this->vars[$name] = $val;
- }
-
- public function dumpVal () {
- var_export ( $vars );
- }
-}
-
-// a gereral class
-class myClass
-{
- var $foo_object;
- public $public_var;
- public $public_var1;
- private $private_var;
- protected $protected_var;
-
- function myClass ( ) {
- $this->foo_object = new foo();
- $this->public_var = 10;
- $this->public_var1 = new foo();
- $this->private_var = new foo();
- $this->proected_var = new foo();
- }
-}
-
-// create a object of each class defined above
-$myClass_object = new myClass();
-$foo_object = new foo();
-$Value_object = new Value();
-$concreteClass_object = new concreteClass();
-
-$valid_objects = array(
- new stdclass,
- new foo,
- new concreteClass,
- new Value,
- new myClass,
- $myClass_object,
- $myClass_object->foo_object,
- $myClass_object->public_var1,
- $foo_object,
- $Value_object,
- $concreteClass_object
- );
- $counter = 1;
-/* Loop to check for above objects with var_export() */
-echo "\n*** Output for objects ***\n";
-foreach($valid_objects as $obj) {
-echo "\nIteration ".$counter."\n";
-var_export( $obj );
-echo "\n";
-var_export( $obj, FALSE);
-echo "\n";
-var_dump( var_export( $obj, TRUE) );
-echo "\n";
-$counter++;
-}
-
-echo "*** Testing var_export() with valid null values ***\n";
-// different valid null vlaues
-$unset_var = array();
-unset ($unset_var); // now a null
-$null_var = NULL;
-
-$valid_nulls = array(
- NULL,
- null,
- $null_var,
- );
- $counter = 1;
-/* Loop to check for above null values with var_export() */
-echo "\n*** Output for null values ***\n";
-foreach($valid_nulls as $null_value) {
-echo "\nIteration ".$counter."\n";
-var_export( $null_value );
-echo "\n";
-var_export( $null_value, FALSE);
-echo "\n";
-var_dump( var_export( $null_value, true) );
-echo "\n";
-$counter++;
-}
-
-echo "\n*** Testing error conditions ***\n";
-//Zero argument
-var_export( var_export() );
-
-//arguments more than expected
-var_export( var_export(TRUE, FALSE, TRUE) );
-
-echo "\n\nDone";
-
-
-?>
---EXPECTF--
-*** Testing var_export() with integer values ***
-
-*** Output for integer values ***
-
-Iteration 1
-'0'
-'0'
-string(3) "'0'"
-
-
-Iteration 2
-'1'
-'1'
-string(3) "'1'"
-
-
-Iteration 3
-'-1'
-'-1'
-string(4) "'-1'"
-
-
-Iteration 4
-'-2147483648'
-'-2147483648'
-string(13) "'-2147483648'"
-
-
-Iteration 5
-'-2147483647'
-'-2147483647'
-string(13) "'-2147483647'"
-
-
-Iteration 6
-2147483647
-2147483647
-string(10) "2147483647"
-
-
-Iteration 7
-2147483640
-2147483640
-string(10) "2147483640"
-
-
-Iteration 8
-4667
-4667
-string(4) "4667"
-
-
-Iteration 9
-'0x12ab'
-'0x12ab'
-string(8) "'0x12ab'"
-
-
-Iteration 10
-'0Xfff'
-'0Xfff'
-string(7) "'0Xfff'"
-
-
-Iteration 11
-'0XFA'
-'0XFA'
-string(6) "'0XFA'"
-
-
-Iteration 12
--2147483648
--2147483648
-string(11) "-2147483648"
-
-
-Iteration 13
-'0x7fffffff'
-'0x7fffffff'
-string(12) "'0x7fffffff'"
-
-
-Iteration 14
-2147483647
-2147483647
-string(10) "2147483647"
-
-
-Iteration 15
-'0123'
-'0123'
-string(6) "'0123'"
-
-
-Iteration 16
-1
-1
-string(1) "1"
-
-
-Iteration 17
--2147483648
--2147483648
-string(11) "-2147483648"
-
-
-Iteration 18
-2147483647
-2147483647
-string(10) "2147483647"
-
-*** Testing var_export() with valid boolean values ***
-
-*** Output for boolean values ***
-
-Iteration 1
-1
-1
-string(1) "1"
-
-
-Iteration 2
-true
-true
-string(4) "true"
-
-
-Iteration 3
-true
-true
-string(4) "true"
-
-
-Iteration 4
-0
-0
-string(1) "0"
-
-
-Iteration 5
-false
-false
-string(5) "false"
-
-
-Iteration 6
-false
-false
-string(5) "false"
-
-*** Testing var_export() with valid float values ***
-
-*** Output for float values ***
-
-Iteration 1
-1
-1
-string(1) "1"
-
-
-Iteration 2
-true
-true
-string(4) "true"
-
-
-Iteration 3
-true
-true
-string(4) "true"
-
-
-Iteration 4
-0
-0
-string(1) "0"
-
-
-Iteration 5
-false
-false
-string(5) "false"
-
-
-Iteration 6
-false
-false
-string(5) "false"
-
-*** Testing var_export() with valid strings ***
-
-*** Output for strings ***
-
-Iteration 1
-''
-''
-string(2) "''"
-
-
-Iteration 2
-' '
-' '
-string(3) "' '"
-
-
-Iteration 3
-''
-''
-string(2) "''"
-
-
-Iteration 4
-' '
-' '
-string(3) "' '"
-
-
-Iteration 5
-'string'
-'string'
-string(8) "'string'"
-
-
-Iteration 6
-'string'
-'string'
-string(8) "'string'"
-
-
-Iteration 7
-'NULL'
-'NULL'
-string(6) "'NULL'"
-
-
-Iteration 8
-'null'
-'null'
-string(6) "'null'"
-
-
-Iteration 9
-'FALSE'
-'FALSE'
-string(7) "'FALSE'"
-
-
-Iteration 10
-'false'
-'false'
-string(7) "'false'"
-
-
-Iteration 11
-' '
-' '
-string(3) "' '"
-
-
-Iteration 12
-'' . "\0" . ''
-'' . "\0" . ''
-string(14) "'' . "\0" . ''"
-
-
-Iteration 13
-'\\0'
-'\\0'
-string(5) "'\\0'"
-
-
-Iteration 14
-'\\060'
-'\\060'
-string(7) "'\\060'"
-
-
-Iteration 15
-'8'
-'8'
-string(3) "'8'"
-
-*** Testing var_export() with valid arrays ***
-
-*** Output for arrays ***
-
-Iteration 1
-array (
-)
-array (
-)
-string(9) "array (
-)"
-
-
-Iteration 2
-array (
- 0 => NULL,
-)
-array (
- 0 => NULL,
-)
-string(22) "array (
- 0 => NULL,
-)"
-
-
-Iteration 3
-array (
- 0 => NULL,
-)
-array (
- 0 => NULL,
-)
-string(22) "array (
- 0 => NULL,
-)"
-
-
-Iteration 4
-array (
- 0 => true,
-)
-array (
- 0 => true,
-)
-string(22) "array (
- 0 => true,
-)"
-
-
-Iteration 5
-array (
- 0 => '',
-)
-array (
- 0 => '',
-)
-string(20) "array (
- 0 => '',
-)"
-
-
-Iteration 6
-array (
- 0 => '',
-)
-array (
- 0 => '',
-)
-string(20) "array (
- 0 => '',
-)"
-
-
-Iteration 7
-array (
- 0 =>
- array (
- ),
- 1 =>
- array (
- ),
-)
-array (
- 0 =>
- array (
- ),
- 1 =>
- array (
- ),
-)
-string(55) "array (
- 0 =>
- array (
- ),
- 1 =>
- array (
- ),
-)"
-
-
-Iteration 8
-array (
- 0 =>
- array (
- 0 => 1,
- 1 => 2,
- ),
- 1 =>
- array (
- 0 => 'a',
- 1 => 'b',
- ),
-)
-array (
- 0 =>
- array (
- 0 => 1,
- 1 => 2,
- ),
- 1 =>
- array (
- 0 => 'a',
- 1 => 'b',
- ),
-)
-string(107) "array (
- 0 =>
- array (
- 0 => 1,
- 1 => 2,
- ),
- 1 =>
- array (
- 0 => 'a',
- 1 => 'b',
- ),
-)"
-
-
-Iteration 9
-array (
- 1 => 'One',
-)
-array (
- 1 => 'One',
-)
-string(23) "array (
- 1 => 'One',
-)"
-
-
-Iteration 10
-array (
- 'test' => 'is_array',
-)
-array (
- 'test' => 'is_array',
-)
-string(33) "array (
- 'test' => 'is_array',
-)"
-
-
-Iteration 11
-array (
- 0 => 0,
-)
-array (
- 0 => 0,
-)
-string(19) "array (
- 0 => 0,
-)"
-
-
-Iteration 12
-array (
- 0 => -1,
-)
-array (
- 0 => -1,
-)
-string(20) "array (
- 0 => -1,
-)"
-
-
-Iteration 13
-array (
- 0 => 10.5,
- 1 => 5.6,
-)
-array (
- 0 => 10.5,
- 1 => 5.6,
-)
-string(34) "array (
- 0 => 10.5,
- 1 => 5.6,
-)"
-
-
-Iteration 14
-array (
- 0 => 'string',
- 1 => 'test',
-)
-array (
- 0 => 'string',
- 1 => 'test',
-)
-string(41) "array (
- 0 => 'string',
- 1 => 'test',
-)"
-
-
-Iteration 15
-array (
- 0 => 'string',
- 1 => 'test',
-)
-array (
- 0 => 'string',
- 1 => 'test',
-)
-string(41) "array (
- 0 => 'string',
- 1 => 'test',
-)"
-
-*** Testing var_export() with valid objects ***
-
-*** Output for objects ***
-
-Iteration 1
-stdClass::__set_state(array(
-))
-stdClass::__set_state(array(
-))
-string(31) "stdClass::__set_state(array(
-))"
-
-
-Iteration 2
-foo::__set_state(array(
-))
-foo::__set_state(array(
-))
-string(26) "foo::__set_state(array(
-))"
-
-
-Iteration 3
-concreteClass::__set_state(array(
-))
-concreteClass::__set_state(array(
-))
-string(36) "concreteClass::__set_state(array(
-))"
-
-
-Iteration 4
-Value::__set_state(array(
- 'vars' =>
- array (
- ),
-))
-Value::__set_state(array(
- 'vars' =>
- array (
- ),
-))
-string(57) "Value::__set_state(array(
- 'vars' =>
- array (
- ),
-))"
-
-
-Iteration 5
-myClass::__set_state(array(
- 'foo_object' =>
- foo::__set_state(array(
- )),
- 'public_var' => 10,
- 'public_var1' =>
- foo::__set_state(array(
- )),
- 'private_var' =>
- foo::__set_state(array(
- )),
- 'protected_var' => NULL,
- 'proected_var' =>
- foo::__set_state(array(
- )),
-))
-myClass::__set_state(array(
- 'foo_object' =>
- foo::__set_state(array(
- )),
- 'public_var' => 10,
- 'public_var1' =>
- foo::__set_state(array(
- )),
- 'private_var' =>
- foo::__set_state(array(
- )),
- 'protected_var' => NULL,
- 'proected_var' =>
- foo::__set_state(array(
- )),
-))
-string(293) "myClass::__set_state(array(
- 'foo_object' =>
- foo::__set_state(array(
- )),
- 'public_var' => 10,
- 'public_var1' =>
- foo::__set_state(array(
- )),
- 'private_var' =>
- foo::__set_state(array(
- )),
- 'protected_var' => NULL,
- 'proected_var' =>
- foo::__set_state(array(
- )),
-))"
-
-
-Iteration 6
-myClass::__set_state(array(
- 'foo_object' =>
- foo::__set_state(array(
- )),
- 'public_var' => 10,
- 'public_var1' =>
- foo::__set_state(array(
- )),
- 'private_var' =>
- foo::__set_state(array(
- )),
- 'protected_var' => NULL,
- 'proected_var' =>
- foo::__set_state(array(
- )),
-))
-myClass::__set_state(array(
- 'foo_object' =>
- foo::__set_state(array(
- )),
- 'public_var' => 10,
- 'public_var1' =>
- foo::__set_state(array(
- )),
- 'private_var' =>
- foo::__set_state(array(
- )),
- 'protected_var' => NULL,
- 'proected_var' =>
- foo::__set_state(array(
- )),
-))
-string(293) "myClass::__set_state(array(
- 'foo_object' =>
- foo::__set_state(array(
- )),
- 'public_var' => 10,
- 'public_var1' =>
- foo::__set_state(array(
- )),
- 'private_var' =>
- foo::__set_state(array(
- )),
- 'protected_var' => NULL,
- 'proected_var' =>
- foo::__set_state(array(
- )),
-))"
-
-
-Iteration 7
-foo::__set_state(array(
-))
-foo::__set_state(array(
-))
-string(26) "foo::__set_state(array(
-))"
-
-
-Iteration 8
-foo::__set_state(array(
-))
-foo::__set_state(array(
-))
-string(26) "foo::__set_state(array(
-))"
-
-
-Iteration 9
-foo::__set_state(array(
-))
-foo::__set_state(array(
-))
-string(26) "foo::__set_state(array(
-))"
-
-
-Iteration 10
-Value::__set_state(array(
- 'vars' =>
- array (
- ),
-))
-Value::__set_state(array(
- 'vars' =>
- array (
- ),
-))
-string(57) "Value::__set_state(array(
- 'vars' =>
- array (
- ),
-))"
-
-
-Iteration 11
-concreteClass::__set_state(array(
-))
-concreteClass::__set_state(array(
-))
-string(36) "concreteClass::__set_state(array(
-))"
-
-*** Testing var_export() with valid null values ***
-
-*** Output for null values ***
-
-Iteration 1
-NULL
-NULL
-string(4) "NULL"
-
-
-Iteration 2
-NULL
-NULL
-string(4) "NULL"
-
-
-Iteration 3
-NULL
-NULL
-string(4) "NULL"
-
-
-*** Testing error conditions ***
-
-Warning: var_export() expects at least 1 parameter, 0 given in %s on line %d
-NULL
-Warning: var_export() expects at most 2 parameters, 3 given in %s on line %d
-NULL
-
-Done
diff --git a/ext/standard/tests/general_functions/var_export_basic1.phpt b/ext/standard/tests/general_functions/var_export_basic1.phpt
new file mode 100644
index 000000000..3a734c7fe
--- /dev/null
+++ b/ext/standard/tests/general_functions/var_export_basic1.phpt
@@ -0,0 +1,141 @@
+--TEST--
+Test var_export() function with integer values
+--FILE--
+<?php
+/* Prototype : mixed var_export(mixed var [, bool return])
+ * Description: Outputs or returns a string representation of a variable
+ * Source code: ext/standard/var.c
+ * Alias to functions:
+ */
+
+echo "*** Testing var_export() with integer values ***\n";
+// different integer vlaues
+$valid_ints = array(
+ '0' => '0',
+ '1' => '1',
+ '-1' => '-1',
+ '-2147483648' => '-2147483648', // max negative integer value
+ '-2147483647' => '-2147483647',
+ '2147483647' => 2147483647, // max positive integer value
+ '2147483640' => 2147483640,
+ '0x123B' => 0x123B, // integer as hexadecimal
+ "'0x12ab'" => '0x12ab',
+ "'0Xfff'" => '0Xfff',
+ "'0XFA'" => '0XFA',
+ "-0x80000000" => -0x80000000, // max negative integer as hexadecimal
+ "'0x7fffffff'" => '0x7fffffff', // max postive integer as hexadecimal
+ "0x7FFFFFFF" => 0x7FFFFFFF, // max postive integer as hexadecimal
+ "'0123'" => '0123', // integer as octal
+ "01912" => 01912, // should be quivalent to octal 1
+ "-020000000000" => -020000000000, // max negative integer as octal
+ "017777777777" => 017777777777, // max positive integer as octal
+);
+
+/* Loop to check for above integer values with var_export() */
+echo "\n*** Output for integer values ***\n";
+foreach($valid_ints as $key => $int_value) {
+ echo "\n-- Iteration: $key --\n";
+ var_export( $int_value );
+ echo "\n";
+ var_export( $int_value, FALSE);
+ echo "\n";
+ var_dump( var_export( $int_value, TRUE) );
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing var_export() with integer values ***
+
+*** Output for integer values ***
+
+-- Iteration: 0 --
+'0'
+'0'
+string(3) "'0'"
+
+-- Iteration: 1 --
+'1'
+'1'
+string(3) "'1'"
+
+-- Iteration: -1 --
+'-1'
+'-1'
+string(4) "'-1'"
+
+-- Iteration: -2147483648 --
+'-2147483648'
+'-2147483648'
+string(13) "'-2147483648'"
+
+-- Iteration: -2147483647 --
+'-2147483647'
+'-2147483647'
+string(13) "'-2147483647'"
+
+-- Iteration: 2147483647 --
+2147483647
+2147483647
+string(10) "2147483647"
+
+-- Iteration: 2147483640 --
+2147483640
+2147483640
+string(10) "2147483640"
+
+-- Iteration: 0x123B --
+4667
+4667
+string(4) "4667"
+
+-- Iteration: '0x12ab' --
+'0x12ab'
+'0x12ab'
+string(8) "'0x12ab'"
+
+-- Iteration: '0Xfff' --
+'0Xfff'
+'0Xfff'
+string(7) "'0Xfff'"
+
+-- Iteration: '0XFA' --
+'0XFA'
+'0XFA'
+string(6) "'0XFA'"
+
+-- Iteration: -0x80000000 --
+-2147483648
+-2147483648
+string(11) "-2147483648"
+
+-- Iteration: '0x7fffffff' --
+'0x7fffffff'
+'0x7fffffff'
+string(12) "'0x7fffffff'"
+
+-- Iteration: 0x7FFFFFFF --
+2147483647
+2147483647
+string(10) "2147483647"
+
+-- Iteration: '0123' --
+'0123'
+'0123'
+string(6) "'0123'"
+
+-- Iteration: 01912 --
+1
+1
+string(1) "1"
+
+-- Iteration: -020000000000 --
+-2147483648
+-2147483648
+string(11) "-2147483648"
+
+-- Iteration: 017777777777 --
+2147483647
+2147483647
+string(10) "2147483647"
+===DONE===
diff --git a/ext/standard/tests/general_functions/var_export_basic2.phpt b/ext/standard/tests/general_functions/var_export_basic2.phpt
new file mode 100644
index 000000000..33ca400cc
--- /dev/null
+++ b/ext/standard/tests/general_functions/var_export_basic2.phpt
@@ -0,0 +1,76 @@
+--TEST--
+Test var_export() function with valid boolean values
+--FILE--
+<?php
+
+/* Prototype : mixed var_export(mixed var [, bool return])
+ * Description: Outputs or returns a string representation of a variable
+ * Source code: ext/standard/var.c
+ * Alias to functions:
+ */
+
+echo "*** Testing var_export() with valid boolean values ***\n";
+// different valid boolean vlaues
+$valid_bool = array(
+ "1" => 1,
+ "TRUE" => TRUE,
+ "true" => true,
+ "0" => 0,
+ "FALSE" => FALSE,
+ "false" => false
+);
+
+/* Loop to check for above boolean values with var_export() */
+echo "\n*** Output for boolean values ***\n";
+foreach($valid_bool as $key => $bool_value) {
+ echo "\n-- Iteration: $key --\n";
+ var_export( $bool_value );
+ echo "\n";
+ var_export( $bool_value, FALSE);
+ echo "\n";
+ var_dump( var_export( $bool_value, TRUE) );
+ echo "\n";
+}
+?>
+===DONE===
+--EXPECT--
+*** Testing var_export() with valid boolean values ***
+
+*** Output for boolean values ***
+
+-- Iteration: 1 --
+1
+1
+string(1) "1"
+
+
+-- Iteration: TRUE --
+true
+true
+string(4) "true"
+
+
+-- Iteration: true --
+true
+true
+string(4) "true"
+
+
+-- Iteration: 0 --
+0
+0
+string(1) "0"
+
+
+-- Iteration: FALSE --
+false
+false
+string(5) "false"
+
+
+-- Iteration: false --
+false
+false
+string(5) "false"
+
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/var_export_basic3.phpt b/ext/standard/tests/general_functions/var_export_basic3.phpt
new file mode 100644
index 000000000..299721591
--- /dev/null
+++ b/ext/standard/tests/general_functions/var_export_basic3.phpt
@@ -0,0 +1,175 @@
+--TEST--
+Test var_export() function with valid float values
+--INI--
+precision=14
+--FILE--
+<?php
+/* Prototype : mixed var_export(mixed var [, bool return])
+ * Description: Outputs or returns a string representation of a variable
+ * Source code: ext/standard/var.c
+ * Alias to functions:
+ */
+
+echo "*** Testing var_export() with valid float values ***\n";
+// different valid float vlaues
+$valid_floats = array(
+ "-2147483649" => -2147483649, // float value
+ "2147483648" => 2147483648, // float value
+ "-0x80000001" => -0x80000001, // float value, beyond max negative int
+ "0x800000001" => 0x800000001, // float value, beyond max positive int
+ "020000000001" => 020000000001, // float value, beyond max positive int
+ "-020000000001" => -020000000001, // float value, beyond max negative int
+ "0.0" => 0.0,
+ "-0.1" => -0.1,
+ "10.0000000000000000005" => 10.0000000000000000005,
+ "10.5e+5" => 10.5e+5,
+ "1e5" => 1e5,
+ "1e-5" => 1e-5,
+ "1e+5" => 1e+5,
+ "1E5" => 1E5,
+ "1E+5" => 1E+5,
+ "1E-5" => 1E-5,
+ ".5e+7" => .5e+7,
+ ".6e-19" => .6e-19,
+ ".05E+44" => .05E+44,
+ ".0034E-30" => .0034E-30
+);
+/* Loop to check for above float values with var_export() */
+echo "\n*** Output for float values ***\n";
+foreach($valid_floats as $key => $float_value) {
+ echo "\n-- Iteration: $key --\n";
+ var_export( $float_value );
+ echo "\n";
+ var_export( $float_value, FALSE);
+ echo "\n";
+ var_dump( var_export( $float_value, TRUE) );
+ echo "\n";
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing var_export() with valid float values ***
+
+*** Output for float values ***
+
+-- Iteration: -2147483649 --
+-2147483649
+-2147483649
+string(11) "-2147483649"
+
+
+-- Iteration: 2147483648 --
+2147483648
+2147483648
+string(10) "2147483648"
+
+
+-- Iteration: -0x80000001 --
+-2147483649
+-2147483649
+string(11) "-2147483649"
+
+
+-- Iteration: 0x800000001 --
+34359738369
+34359738369
+string(11) "34359738369"
+
+
+-- Iteration: 020000000001 --
+2147483649
+2147483649
+string(10) "2147483649"
+
+
+-- Iteration: -020000000001 --
+-2147483649
+-2147483649
+string(11) "-2147483649"
+
+
+-- Iteration: 0.0 --
+0
+0
+string(1) "0"
+
+
+-- Iteration: -0.1 --
+-0.1
+-0.1
+string(4) "-0.1"
+
+
+-- Iteration: 10.0000000000000000005 --
+10
+10
+string(2) "10"
+
+
+-- Iteration: 10.5e+5 --
+1050000
+1050000
+string(7) "1050000"
+
+
+-- Iteration: 1e5 --
+100000
+100000
+string(6) "100000"
+
+
+-- Iteration: 1e-5 --
+1.0E-5
+1.0E-5
+string(6) "1.0E-5"
+
+
+-- Iteration: 1e+5 --
+100000
+100000
+string(6) "100000"
+
+
+-- Iteration: 1E5 --
+100000
+100000
+string(6) "100000"
+
+
+-- Iteration: 1E+5 --
+100000
+100000
+string(6) "100000"
+
+
+-- Iteration: 1E-5 --
+1.0E-5
+1.0E-5
+string(6) "1.0E-5"
+
+
+-- Iteration: .5e+7 --
+5000000
+5000000
+string(7) "5000000"
+
+
+-- Iteration: .6e-19 --
+6.0E-20
+6.0E-20
+string(7) "6.0E-20"
+
+
+-- Iteration: .05E+44 --
+5.0E+42
+5.0E+42
+string(7) "5.0E+42"
+
+
+-- Iteration: .0034E-30 --
+3.4E-33
+3.4E-33
+string(7) "3.4E-33"
+
+===DONE===
diff --git a/ext/standard/tests/general_functions/var_export_basic4.phpt b/ext/standard/tests/general_functions/var_export_basic4.phpt
new file mode 100644
index 000000000..4668ace1c
--- /dev/null
+++ b/ext/standard/tests/general_functions/var_export_basic4.phpt
@@ -0,0 +1,147 @@
+--TEST--
+Test var_export() function with valid strings
+--FILE--
+<?php
+/* Prototype : mixed var_export(mixed var [, bool return])
+ * Description: Outputs or returns a string representation of a variable
+ * Source code: ext/standard/var.c
+ * Alias to functions:
+ */
+
+
+echo "*** Testing var_export() with valid strings ***\n";
+// different valid string
+$valid_strings = array(
+ "\"\"" => "",
+ "\" \"" => " ",
+ "''" => '',
+ "' '" => ' ',
+ "\"string\"" => "string",
+ "'string'" => 'string',
+ "\"\\0Hello\\0 World\\0\"" => "\0Hello\0 World\0",
+ "\"NULL\"" => "NULL",
+ "'null'" => 'null',
+ "\"FALSE\"" => "FALSE",
+ "'false'" => 'false',
+ "\"\\x0b\"" => "\x0b",
+ "\"\\0\"" => "\0",
+ "'\\0'" => '\0',
+ "'\\060'" => '\060',
+ "\"\\070\"" => "\070"
+);
+
+/* Loop to check for above strings with var_export() */
+echo "\n*** Output for strings ***\n";
+foreach($valid_strings as $key => $str) {
+ echo "\n-- Iteration: $key --\n";
+ var_export( $str );
+ echo "\n";
+ var_export( $str, FALSE);
+ echo "\n";
+ var_dump( var_export( $str, TRUE) );
+ echo "\n";
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing var_export() with valid strings ***
+
+*** Output for strings ***
+
+-- Iteration: "" --
+''
+''
+string(2) "''"
+
+
+-- Iteration: " " --
+' '
+' '
+string(3) "' '"
+
+
+-- Iteration: '' --
+''
+''
+string(2) "''"
+
+
+-- Iteration: ' ' --
+' '
+' '
+string(3) "' '"
+
+
+-- Iteration: "string" --
+'string'
+'string'
+string(8) "'string'"
+
+
+-- Iteration: 'string' --
+'string'
+'string'
+string(8) "'string'"
+
+
+-- Iteration: "\0Hello\0 World\0" --
+'' . "\0" . 'Hello' . "\0" . ' World' . "\0" . ''
+'' . "\0" . 'Hello' . "\0" . ' World' . "\0" . ''
+string(49) "'' . "\0" . 'Hello' . "\0" . ' World' . "\0" . ''"
+
+
+-- Iteration: "NULL" --
+'NULL'
+'NULL'
+string(6) "'NULL'"
+
+
+-- Iteration: 'null' --
+'null'
+'null'
+string(6) "'null'"
+
+
+-- Iteration: "FALSE" --
+'FALSE'
+'FALSE'
+string(7) "'FALSE'"
+
+
+-- Iteration: 'false' --
+'false'
+'false'
+string(7) "'false'"
+
+
+-- Iteration: "\x0b" --
+' '
+' '
+string(3) "' '"
+
+
+-- Iteration: "\0" --
+'' . "\0" . ''
+'' . "\0" . ''
+string(14) "'' . "\0" . ''"
+
+
+-- Iteration: '\0' --
+'\\0'
+'\\0'
+string(5) "'\\0'"
+
+
+-- Iteration: '\060' --
+'\\060'
+'\\060'
+string(7) "'\\060'"
+
+
+-- Iteration: "\070" --
+'8'
+'8'
+string(3) "'8'"
+
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/var_export_basic5.phpt b/ext/standard/tests/general_functions/var_export_basic5.phpt
new file mode 100644
index 000000000..96b3f54cc
--- /dev/null
+++ b/ext/standard/tests/general_functions/var_export_basic5.phpt
@@ -0,0 +1,277 @@
+--TEST--
+Test var_export() function with valid arrays
+--FILE--
+<?php
+/* Prototype : mixed var_export(mixed var [, bool return])
+ * Description: Outputs or returns a string representation of a variable
+ * Source code: ext/standard/var.c
+ * Alias to functions:
+ */
+
+
+echo "*** Testing var_export() with valid arrays ***\n";
+// different valid arrays
+$valid_arrays = array(
+ "array()" => array(),
+ "array(NULL)" => array(NULL),
+ "array(null)" => array(null),
+ "array(true)" => array(true),
+ "array(\"\")" => array(""),
+ "array('')" => array(''),
+ "array(array(), array())" => array(array(), array()),
+ "array(array(1, 2), array('a', 'b'))" => array(array(1, 2), array('a', 'b')),
+ "array(1 => 'One')" => array(1 => 'One'),
+ "array(\"test\" => \"is_array\")" => array("test" => "is_array"),
+ "array(0)" => array(0),
+ "array(-1)" => array(-1),
+ "array(10.5, 5.6)" => array(10.5, 5.6),
+ "array(\"string\", \"test\")" => array("string", "test"),
+ "array('string', 'test')" => array('string', 'test')
+);
+
+/* Loop to check for above arrays with var_export() */
+echo "\n*** Output for arrays ***\n";
+foreach($valid_arrays as $key => $arr) {
+ echo "\n--Iteration: $key --\n";
+ var_export( $arr );
+ echo "\n";
+ var_export( $arr, FALSE);
+ echo "\n";
+ var_dump( var_export( $arr, TRUE) );
+ echo "\n";
+}
+?>
+===DONE===
+--EXPECT--
+*** Testing var_export() with valid arrays ***
+
+*** Output for arrays ***
+
+--Iteration: array() --
+array (
+)
+array (
+)
+string(9) "array (
+)"
+
+
+--Iteration: array(NULL) --
+array (
+ 0 => NULL,
+)
+array (
+ 0 => NULL,
+)
+string(22) "array (
+ 0 => NULL,
+)"
+
+
+--Iteration: array(null) --
+array (
+ 0 => NULL,
+)
+array (
+ 0 => NULL,
+)
+string(22) "array (
+ 0 => NULL,
+)"
+
+
+--Iteration: array(true) --
+array (
+ 0 => true,
+)
+array (
+ 0 => true,
+)
+string(22) "array (
+ 0 => true,
+)"
+
+
+--Iteration: array("") --
+array (
+ 0 => '',
+)
+array (
+ 0 => '',
+)
+string(20) "array (
+ 0 => '',
+)"
+
+
+--Iteration: array('') --
+array (
+ 0 => '',
+)
+array (
+ 0 => '',
+)
+string(20) "array (
+ 0 => '',
+)"
+
+
+--Iteration: array(array(), array()) --
+array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+)
+array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+)
+string(55) "array (
+ 0 =>
+ array (
+ ),
+ 1 =>
+ array (
+ ),
+)"
+
+
+--Iteration: array(array(1, 2), array('a', 'b')) --
+array (
+ 0 =>
+ array (
+ 0 => 1,
+ 1 => 2,
+ ),
+ 1 =>
+ array (
+ 0 => 'a',
+ 1 => 'b',
+ ),
+)
+array (
+ 0 =>
+ array (
+ 0 => 1,
+ 1 => 2,
+ ),
+ 1 =>
+ array (
+ 0 => 'a',
+ 1 => 'b',
+ ),
+)
+string(107) "array (
+ 0 =>
+ array (
+ 0 => 1,
+ 1 => 2,
+ ),
+ 1 =>
+ array (
+ 0 => 'a',
+ 1 => 'b',
+ ),
+)"
+
+
+--Iteration: array(1 => 'One') --
+array (
+ 1 => 'One',
+)
+array (
+ 1 => 'One',
+)
+string(23) "array (
+ 1 => 'One',
+)"
+
+
+--Iteration: array("test" => "is_array") --
+array (
+ 'test' => 'is_array',
+)
+array (
+ 'test' => 'is_array',
+)
+string(33) "array (
+ 'test' => 'is_array',
+)"
+
+
+--Iteration: array(0) --
+array (
+ 0 => 0,
+)
+array (
+ 0 => 0,
+)
+string(19) "array (
+ 0 => 0,
+)"
+
+
+--Iteration: array(-1) --
+array (
+ 0 => -1,
+)
+array (
+ 0 => -1,
+)
+string(20) "array (
+ 0 => -1,
+)"
+
+
+--Iteration: array(10.5, 5.6) --
+array (
+ 0 => 10.5,
+ 1 => 5.6,
+)
+array (
+ 0 => 10.5,
+ 1 => 5.6,
+)
+string(34) "array (
+ 0 => 10.5,
+ 1 => 5.6,
+)"
+
+
+--Iteration: array("string", "test") --
+array (
+ 0 => 'string',
+ 1 => 'test',
+)
+array (
+ 0 => 'string',
+ 1 => 'test',
+)
+string(41) "array (
+ 0 => 'string',
+ 1 => 'test',
+)"
+
+
+--Iteration: array('string', 'test') --
+array (
+ 0 => 'string',
+ 1 => 'test',
+)
+array (
+ 0 => 'string',
+ 1 => 'test',
+)
+string(41) "array (
+ 0 => 'string',
+ 1 => 'test',
+)"
+
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/var_export_basic6.phpt b/ext/standard/tests/general_functions/var_export_basic6.phpt
new file mode 100644
index 000000000..8935d0e79
--- /dev/null
+++ b/ext/standard/tests/general_functions/var_export_basic6.phpt
@@ -0,0 +1,310 @@
+--TEST--
+Test var_export() function with valid objects
+--FILE--
+<?php
+/* Prototype : mixed var_export(mixed var [, bool return])
+ * Description: Outputs or returns a string representation of a variable
+ * Source code: ext/standard/var.c
+ * Alias to functions:
+ */
+
+echo "*** Testing var_export() with valid objects ***\n";
+
+// class with no members
+class foo
+{
+// no members
+}
+
+// abstract class
+abstract class abstractClass
+{
+ abstract protected function getClassName();
+ public function printClassName () {
+ echo $this->getClassName() . "\n";
+ }
+}
+// implement abstract class
+class concreteClass extends abstractClass
+{
+ protected function getClassName() {
+ return "concreteClass";
+ }
+}
+
+// interface class
+interface iValue
+{
+ public function setVal ($name, $val);
+ public function dumpVal ();
+}
+// implement the interface
+class Value implements iValue
+{
+ private $vars = array ();
+
+ public function setVal ( $name, $val ) {
+ $this->vars[$name] = $val;
+ }
+
+ public function dumpVal () {
+ var_export ( $vars );
+ }
+}
+
+// a gereral class
+class myClass
+{
+ var $foo_object;
+ public $public_var;
+ public $public_var1;
+ private $private_var;
+ protected $protected_var;
+
+ function myClass ( ) {
+ $this->foo_object = new foo();
+ $this->public_var = 10;
+ $this->public_var1 = new foo();
+ $this->private_var = new foo();
+ $this->proected_var = new foo();
+ }
+}
+
+// create a object of each class defined above
+$myClass_object = new myClass();
+$foo_object = new foo();
+$Value_object = new Value();
+$concreteClass_object = new concreteClass();
+
+$valid_objects = array(
+ "new stdclass" => new stdclass,
+ "new foo" => new foo,
+ "new concreteClass" => new concreteClass,
+ "new Value" => new Value,
+ "new myClass" => new myClass,
+ "myClass_object" => $myClass_object,
+ "myClass_object->foo_object" => $myClass_object->foo_object,
+ "myClass_object->public_var1" => $myClass_object->public_var1,
+ "foo_object" => $foo_object,
+ "Value_object" => $Value_object,
+ "concreteClass_object" => $concreteClass_object
+ );
+/* Loop to check for above objects with var_export() */
+echo "\n*** Output for objects ***\n";
+foreach($valid_objects as $key => $obj) {
+ echo "\n-- Iteration: $key --\n";
+ var_export( $obj );
+ echo "\n";
+ var_export( $obj, FALSE);
+ echo "\n";
+ var_dump( var_export( $obj, TRUE) );
+ echo "\n";
+}
+?>
+===DONE===
+--EXPECT--
+*** Testing var_export() with valid objects ***
+
+*** Output for objects ***
+
+-- Iteration: new stdclass --
+stdClass::__set_state(array(
+))
+stdClass::__set_state(array(
+))
+string(31) "stdClass::__set_state(array(
+))"
+
+
+-- Iteration: new foo --
+foo::__set_state(array(
+))
+foo::__set_state(array(
+))
+string(26) "foo::__set_state(array(
+))"
+
+
+-- Iteration: new concreteClass --
+concreteClass::__set_state(array(
+))
+concreteClass::__set_state(array(
+))
+string(36) "concreteClass::__set_state(array(
+))"
+
+
+-- Iteration: new Value --
+Value::__set_state(array(
+ 'vars' =>
+ array (
+ ),
+))
+Value::__set_state(array(
+ 'vars' =>
+ array (
+ ),
+))
+string(57) "Value::__set_state(array(
+ 'vars' =>
+ array (
+ ),
+))"
+
+
+-- Iteration: new myClass --
+myClass::__set_state(array(
+ 'foo_object' =>
+ foo::__set_state(array(
+ )),
+ 'public_var' => 10,
+ 'public_var1' =>
+ foo::__set_state(array(
+ )),
+ 'private_var' =>
+ foo::__set_state(array(
+ )),
+ 'protected_var' => NULL,
+ 'proected_var' =>
+ foo::__set_state(array(
+ )),
+))
+myClass::__set_state(array(
+ 'foo_object' =>
+ foo::__set_state(array(
+ )),
+ 'public_var' => 10,
+ 'public_var1' =>
+ foo::__set_state(array(
+ )),
+ 'private_var' =>
+ foo::__set_state(array(
+ )),
+ 'protected_var' => NULL,
+ 'proected_var' =>
+ foo::__set_state(array(
+ )),
+))
+string(293) "myClass::__set_state(array(
+ 'foo_object' =>
+ foo::__set_state(array(
+ )),
+ 'public_var' => 10,
+ 'public_var1' =>
+ foo::__set_state(array(
+ )),
+ 'private_var' =>
+ foo::__set_state(array(
+ )),
+ 'protected_var' => NULL,
+ 'proected_var' =>
+ foo::__set_state(array(
+ )),
+))"
+
+
+-- Iteration: myClass_object --
+myClass::__set_state(array(
+ 'foo_object' =>
+ foo::__set_state(array(
+ )),
+ 'public_var' => 10,
+ 'public_var1' =>
+ foo::__set_state(array(
+ )),
+ 'private_var' =>
+ foo::__set_state(array(
+ )),
+ 'protected_var' => NULL,
+ 'proected_var' =>
+ foo::__set_state(array(
+ )),
+))
+myClass::__set_state(array(
+ 'foo_object' =>
+ foo::__set_state(array(
+ )),
+ 'public_var' => 10,
+ 'public_var1' =>
+ foo::__set_state(array(
+ )),
+ 'private_var' =>
+ foo::__set_state(array(
+ )),
+ 'protected_var' => NULL,
+ 'proected_var' =>
+ foo::__set_state(array(
+ )),
+))
+string(293) "myClass::__set_state(array(
+ 'foo_object' =>
+ foo::__set_state(array(
+ )),
+ 'public_var' => 10,
+ 'public_var1' =>
+ foo::__set_state(array(
+ )),
+ 'private_var' =>
+ foo::__set_state(array(
+ )),
+ 'protected_var' => NULL,
+ 'proected_var' =>
+ foo::__set_state(array(
+ )),
+))"
+
+
+-- Iteration: myClass_object->foo_object --
+foo::__set_state(array(
+))
+foo::__set_state(array(
+))
+string(26) "foo::__set_state(array(
+))"
+
+
+-- Iteration: myClass_object->public_var1 --
+foo::__set_state(array(
+))
+foo::__set_state(array(
+))
+string(26) "foo::__set_state(array(
+))"
+
+
+-- Iteration: foo_object --
+foo::__set_state(array(
+))
+foo::__set_state(array(
+))
+string(26) "foo::__set_state(array(
+))"
+
+
+-- Iteration: Value_object --
+Value::__set_state(array(
+ 'vars' =>
+ array (
+ ),
+))
+Value::__set_state(array(
+ 'vars' =>
+ array (
+ ),
+))
+string(57) "Value::__set_state(array(
+ 'vars' =>
+ array (
+ ),
+))"
+
+
+-- Iteration: concreteClass_object --
+concreteClass::__set_state(array(
+))
+concreteClass::__set_state(array(
+))
+string(36) "concreteClass::__set_state(array(
+))"
+
+===DONE===
diff --git a/ext/standard/tests/general_functions/var_export_basic7.phpt b/ext/standard/tests/general_functions/var_export_basic7.phpt
new file mode 100644
index 000000000..10dc03290
--- /dev/null
+++ b/ext/standard/tests/general_functions/var_export_basic7.phpt
@@ -0,0 +1,59 @@
+--TEST--
+Test var_export() function with valid null values
+--FILE--
+<?php
+/* Prototype : mixed var_export(mixed var [, bool return])
+ * Description: Outputs or returns a string representation of a variable
+ * Source code: ext/standard/var.c
+ * Alias to functions:
+ */
+
+echo "*** Testing var_export() with valid null values ***\n";
+
+// different valid null vlaues
+$unset_var = array();
+unset ($unset_var); // now a null
+$null_var = NULL;
+
+$valid_nulls = array(
+ "NULL" => NULL,
+ "null" => null,
+ "null_var" => $null_var,
+);
+
+/* Loop to check for above null values with var_export() */
+echo "\n*** Output for null values ***\n";
+foreach($valid_nulls as $key => $null_value) {
+ echo "\n-- Iteration: $key --\n";
+ var_export( $null_value );
+ echo "\n";
+ var_export( $null_value, FALSE);
+ echo "\n";
+ var_dump( var_export( $null_value, true) );
+ echo "\n";
+}
+?>
+===DONE===
+--EXPECT--
+*** Testing var_export() with valid null values ***
+
+*** Output for null values ***
+
+-- Iteration: NULL --
+NULL
+NULL
+string(4) "NULL"
+
+
+-- Iteration: null --
+NULL
+NULL
+string(4) "NULL"
+
+
+-- Iteration: null_var --
+NULL
+NULL
+string(4) "NULL"
+
+===DONE===
diff --git a/ext/standard/tests/general_functions/var_export_basic8.phpt b/ext/standard/tests/general_functions/var_export_basic8.phpt
new file mode 100644
index 000000000..6e6263d2a
--- /dev/null
+++ b/ext/standard/tests/general_functions/var_export_basic8.phpt
@@ -0,0 +1,71 @@
+--TEST--
+var_export(): simple test with arrays and objects
+--FILE--
+<?php
+/* Prototype : mixed var_export(mixed var [, bool return])
+ * Description: Outputs or returns a string representation of a variable
+ * Source code: ext/standard/var.c
+ * Alias to functions:
+ */
+
+echo "\n\n-- Var export on a simple object --\n";
+$o1 = new stdclass;
+$o1->p = '22';
+$o2 = new stdclass;
+$o2->a = 1;
+$o2->b = array('k'=>2);
+$o2->x = $o1;
+var_export($o2);
+
+echo "\n\n-- Var export on an simple array --\n";
+$a = array(1,2,3,4);
+var_export($a);
+
+echo "\n\n-- Var export on an nested array --\n";
+$a = array('one' => 'first');
+$b = array('foo' => $a, 'bar' => $o2);
+var_export($b);
+
+?>
+===DONE===
+--EXPECTF--
+-- Var export on a simple object --
+stdClass::__set_state(array(
+ 'a' => 1,
+ 'b' =>
+ array (
+ 'k' => 2,
+ ),
+ 'x' =>
+ stdClass::__set_state(array(
+ 'p' => '22',
+ )),
+))
+
+-- Var export on an simple array --
+array (
+ 0 => 1,
+ 1 => 2,
+ 2 => 3,
+ 3 => 4,
+)
+
+-- Var export on an nested array --
+array (
+ 'foo' =>
+ array (
+ 'one' => 'first',
+ ),
+ 'bar' =>
+ stdClass::__set_state(array(
+ 'a' => 1,
+ 'b' =>
+ array (
+ 'k' => 2,
+ ),
+ 'x' =>
+ stdClass::__set_state(array(
+ 'p' => '22',
+ )),
+ )),
+)===DONE===
diff --git a/ext/standard/tests/general_functions/var_export_error1.phpt b/ext/standard/tests/general_functions/var_export_error1.phpt
new file mode 100644
index 000000000..d9c5eee9d
--- /dev/null
+++ b/ext/standard/tests/general_functions/var_export_error1.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Test var_export() function : error conditions
+--FILE--
+<?php
+/* Prototype : mixed var_export(mixed var [, bool return])
+ * Description: Outputs or returns a string representation of a variable
+ * Source code: ext/standard/var.c
+ * Alias to functions:
+ */
+
+echo "*** Testing var_export() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing var_export() function with Zero arguments --\n";
+var_dump( var_export() );
+
+//Test var_export with one more than the expected number of arguments
+echo "\n-- Testing var_export() function with more than expected no. of arguments --\n";
+$var = 1;
+$return = true;
+$extra_arg = 10;
+var_dump( var_export($var, $return, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing var_export() : error conditions ***
+
+-- Testing var_export() function with Zero arguments --
+
+Warning: var_export() expects at least 1 parameter, 0 given in %s on line 12
+NULL
+
+-- Testing var_export() function with more than expected no. of arguments --
+
+Warning: var_export() expects at most 2 parameters, 3 given in %s on line 19
+NULL
+===DONE===
diff --git a/ext/standard/tests/general_functions/var_export_error2.phpt b/ext/standard/tests/general_functions/var_export_error2.phpt
new file mode 100644
index 000000000..93d0dc164
--- /dev/null
+++ b/ext/standard/tests/general_functions/var_export_error2.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Test var_export() function : error conditions - recursive object
+--FILE--
+<?php
+/* Prototype : mixed var_export(mixed var [, bool return])
+ * Description: Outputs or returns a string representation of a variable
+ * Source code: ext/standard/var.c
+ * Alias to functions:
+ */
+
+@$obj->p =& $obj;
+var_export($obj, true);
+
+?>
+===DONE===
+--EXPECTF--
+stdClass::__set_state(array(
+ 'p' =>
+ stdClass::__set_state(array(
+ 'p' =>
+ stdClass::__set_state(array(
+ 'p' =>
+ stdClass::__set_state(array(
+
+Fatal error: Nesting level too deep - recursive dependency? in %s on line 9 \ No newline at end of file
diff --git a/ext/standard/tests/general_functions/var_export_error3.phpt b/ext/standard/tests/general_functions/var_export_error3.phpt
new file mode 100644
index 000000000..4ad512168
--- /dev/null
+++ b/ext/standard/tests/general_functions/var_export_error3.phpt
@@ -0,0 +1,27 @@
+--TEST--
+Test var_export() function : error conditions - recursive array
+--FILE--
+<?php
+/* Prototype : mixed var_export(mixed var [, bool return])
+ * Description: Outputs or returns a string representation of a variable
+ * Source code: ext/standard/var.c
+ * Alias to functions:
+ */
+
+$a[] =& $a;
+var_export($a, true);
+
+?>
+===DONE===
+--EXPECTF--
+array (
+ 0 =>
+ array (
+ 0 =>
+ array (
+ 0 =>
+ array (
+ 0 =>
+ array (
+
+Fatal error: Nesting level too deep - recursive dependency? in %s on line 9 \ No newline at end of file
diff --git a/ext/standard/tests/image/200x100.bmp b/ext/standard/tests/image/200x100.bmp
new file mode 100644
index 000000000..ac71f4f1c
--- /dev/null
+++ b/ext/standard/tests/image/200x100.bmp
Binary files differ
diff --git a/ext/standard/tests/image/200x100.gif b/ext/standard/tests/image/200x100.gif
new file mode 100644
index 000000000..1fc8f9b25
--- /dev/null
+++ b/ext/standard/tests/image/200x100.gif
Binary files differ
diff --git a/ext/standard/tests/image/200x100.jpg b/ext/standard/tests/image/200x100.jpg
new file mode 100644
index 000000000..8e7c88d6a
--- /dev/null
+++ b/ext/standard/tests/image/200x100.jpg
Binary files differ
diff --git a/ext/standard/tests/image/200x100.png b/ext/standard/tests/image/200x100.png
new file mode 100644
index 000000000..e4fc89109
--- /dev/null
+++ b/ext/standard/tests/image/200x100.png
Binary files differ
diff --git a/ext/standard/tests/image/200x100.swf b/ext/standard/tests/image/200x100.swf
new file mode 100644
index 000000000..c6ca3224d
--- /dev/null
+++ b/ext/standard/tests/image/200x100.swf
Binary files differ
diff --git a/ext/standard/tests/image/200x100.tif b/ext/standard/tests/image/200x100.tif
new file mode 100644
index 000000000..31d9b3387
--- /dev/null
+++ b/ext/standard/tests/image/200x100.tif
Binary files differ
diff --git a/ext/standard/tests/image/200x100_unknown.unknown b/ext/standard/tests/image/200x100_unknown.unknown
new file mode 100644
index 000000000..0ebce729f
--- /dev/null
+++ b/ext/standard/tests/image/200x100_unknown.unknown
@@ -0,0 +1 @@
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file
diff --git a/ext/standard/tests/image/2x2mm.tif b/ext/standard/tests/image/2x2mm.tif
new file mode 100644
index 000000000..8b95242d1
--- /dev/null
+++ b/ext/standard/tests/image/2x2mm.tif
Binary files differ
diff --git a/ext/standard/tests/image/75x50.wbmp b/ext/standard/tests/image/75x50.wbmp
new file mode 100644
index 000000000..844243256
--- /dev/null
+++ b/ext/standard/tests/image/75x50.wbmp
Binary files differ
diff --git a/ext/standard/tests/image/75x50.xbm b/ext/standard/tests/image/75x50.xbm
new file mode 100644
index 000000000..fea44265c
--- /dev/null
+++ b/ext/standard/tests/image/75x50.xbm
@@ -0,0 +1,59 @@
+#define Xbitmap_width 75
+#define Xbitmap_height 50
+static unsigned char Xbitmap_bits[] = {
+ 0xfd, 0xdb, 0xf5, 0xbf, 0xef, 0x7b, 0xbb, 0xae, 0xaa,
+ 0x07, 0xff, 0x77, 0xbf, 0xea, 0xba, 0xee, 0xef, 0xfb,
+ 0xff, 0x06, 0xff, 0xdf, 0xed, 0xbf, 0xdf, 0xbb, 0xba,
+ 0x5e, 0x55, 0x05, 0xff, 0x77, 0xbf, 0xf5, 0xe2, 0xee,
+ 0xef, 0xeb, 0x55, 0x03, 0xff, 0xdf, 0x75, 0x1f, 0xc0,
+ 0x7b, 0xfb, 0xfe, 0xaa, 0x06, 0xff, 0x77, 0xdf, 0x07,
+ 0xe8, 0xdf, 0xae, 0xaf, 0xa5, 0x06, 0x5f, 0xdf, 0xeb,
+ 0x81, 0xe2, 0xff, 0xf7, 0xfa, 0x92, 0x06, 0xff, 0xf7,
+ 0x7e, 0x20, 0xf5, 0xff, 0xbe, 0x6f, 0xab, 0x06, 0xff,
+ 0x7f, 0x5b, 0x90, 0xe0, 0xff, 0xdb, 0xf6, 0x55, 0x05,
+ 0xff, 0xc7, 0x3f, 0x54, 0xf4, 0xff, 0xff, 0x1f, 0x29,
+ 0x07, 0xdf, 0x3d, 0x09, 0x02, 0xea, 0xff, 0x57, 0xf2,
+ 0xd6, 0x05, 0x7d, 0xff, 0x84, 0xea, 0xff, 0xff, 0x0f,
+ 0xf9, 0x7d, 0x07, 0xd7, 0x8d, 0x47, 0xf5, 0xc3, 0xfe,
+ 0xff, 0xdf, 0xdd, 0x05, 0x7b, 0xcd, 0xc7, 0xfa, 0xe8,
+ 0xfe, 0x7f, 0x9f, 0x75, 0x07, 0xdd, 0xab, 0xa0, 0x1a,
+ 0x00, 0xe1, 0x3b, 0xf0, 0xdf, 0x06, 0x6f, 0x3d, 0x11,
+ 0x0c, 0xab, 0xf6, 0xff, 0xf7, 0xf4, 0x03, 0xfd, 0xb3,
+ 0xa1, 0x86, 0x4b, 0xfe, 0xff, 0x6d, 0xbf, 0x06, 0xb7,
+ 0xba, 0x10, 0xc3, 0x22, 0x6d, 0xff, 0xe7, 0xea, 0x07,
+ 0xed, 0xbb, 0x88, 0xf2, 0x57, 0xf7, 0xff, 0x6b, 0xbe,
+ 0x02, 0x7f, 0xb3, 0xa4, 0x81, 0x00, 0xfc, 0xff, 0x6f,
+ 0xef, 0x07, 0xd5, 0xbb, 0x90, 0x08, 0x72, 0xff, 0xff,
+ 0x6b, 0xfa, 0x06, 0x7f, 0x33, 0x48, 0x09, 0xa8, 0xf7,
+ 0xff, 0x6f, 0xaf, 0x03, 0x2d, 0xb5, 0xa4, 0x08, 0x00,
+ 0xfc, 0xff, 0xef, 0xe6, 0x06, 0x97, 0x3a, 0xc8, 0xac,
+ 0xad, 0x76, 0xff, 0x67, 0x90, 0x07, 0x4d, 0x34, 0xa4,
+ 0x58, 0x77, 0xa9, 0xff, 0xef, 0xaa, 0x06, 0x97, 0xb2,
+ 0xff, 0x5f, 0xdb, 0xd2, 0x59, 0x71, 0x84, 0x03, 0xad,
+ 0xb4, 0xfe, 0x57, 0xa5, 0xec, 0x28, 0x61, 0x55, 0x07,
+ 0x17, 0xba, 0xff, 0xff, 0xff, 0xb6, 0x94, 0x70, 0xa2,
+ 0x05, 0xdd, 0xb3, 0xfd, 0x07, 0x52, 0xff, 0x28, 0x61,
+ 0xab, 0x07, 0xb7, 0xba, 0xff, 0xbf, 0x88, 0xea, 0x94,
+ 0xe8, 0xfe, 0x02, 0xfd, 0x3b, 0xff, 0xff, 0x57, 0x00,
+ 0x9a, 0x70, 0xba, 0x07, 0xb7, 0xb3, 0xff, 0xdf, 0x26,
+ 0x6f, 0x44, 0x6c, 0xef, 0x06, 0xed, 0xba, 0xfe, 0xbf,
+ 0x93, 0x1a, 0x2b, 0x68, 0xb5, 0x03, 0xdf, 0xb5, 0xfb,
+ 0xff, 0x49, 0x1f, 0x45, 0xe4, 0xfe, 0x06, 0xb5, 0x97,
+ 0xff, 0xff, 0x97, 0x86, 0x22, 0x0e, 0xaf, 0x07, 0x7f,
+ 0x23, 0x60, 0x1f, 0x20, 0xc0, 0x12, 0xa8, 0xf6, 0x05,
+ 0xd5, 0x85, 0xf7, 0xff, 0x5b, 0xf0, 0x2a, 0x0b, 0x5d,
+ 0x07, 0x7f, 0x81, 0xff, 0xff, 0x3b, 0x7e, 0x1d, 0x8f,
+ 0xfc, 0x05, 0xd5, 0xa3, 0xd6, 0xff, 0xff, 0xbf, 0x8a,
+ 0x4e, 0x55, 0x07, 0xff, 0x8a, 0x00, 0xff, 0xbf, 0x44,
+ 0x02, 0xa8, 0xfe, 0x05, 0xb5, 0xd5, 0xff, 0xff, 0xbf,
+ 0x12, 0xc1, 0x9f, 0xaa, 0x02, 0xee, 0xbb, 0x6b, 0xff,
+ 0x5f, 0xa4, 0xf0, 0x76, 0x55, 0x05, 0xb5, 0xee, 0xfd,
+ 0xf7, 0x3f, 0x29, 0xa8, 0xdd, 0xad, 0x00, 0xfe, 0x7b,
+ 0xaf, 0xfe, 0xbf, 0x04, 0xfc, 0xfb, 0x75, 0x01, 0xf5,
+ 0xad, 0xfd, 0xdb, 0x3f, 0x01, 0xb7, 0x56, 0xbd, 0x02,
+ 0x7c, 0xff, 0xb7, 0xfe, 0x37, 0x60, 0xed, 0xff, 0x6d,
+ 0x01, 0xee, 0x55, 0xed, 0x57, 0x1f, 0xaa, 0x7f, 0x55,
+ 0x55, 0x01, 0xbb, 0xff, 0x7f, 0xfd, 0xb5, 0xfa, 0xd5,
+ 0xff, 0x55, 0x05, 0x55, 0x54, 0xd5, 0x6f, 0xdf, 0x6f,
+ 0xff, 0xaa, 0x2a, 0x02, 0x57, 0xff, 0x7f, 0xb5, 0x75,
+ 0xb5, 0x55, 0xff, 0x81, 0x07};
diff --git a/ext/standard/tests/image/blank_file b/ext/standard/tests/image/blank_file
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/ext/standard/tests/image/blank_file
diff --git a/ext/standard/tests/image/blank_file.bmp b/ext/standard/tests/image/blank_file.bmp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/ext/standard/tests/image/blank_file.bmp
diff --git a/ext/standard/tests/image/getimagesize_basic.phpt b/ext/standard/tests/image/getimagesize_basic.phpt
new file mode 100644
index 000000000..63ae33406
--- /dev/null
+++ b/ext/standard/tests/image/getimagesize_basic.phpt
@@ -0,0 +1,219 @@
+--TEST--
+Test getimagesize() function : basic functionality
+--FILE--
+<?php
+/* Prototype : array getimagesize(string imagefile [, array info])
+ * Description: Get the size of an image as 4-element array
+ * Source code: ext/standard/image.c
+ */
+
+$imagetype_filenames = array(
+ // GIF file
+ "GIF image file" => "200x100.gif",
+
+ //JPEG file
+ "JPEG image file" => "200x100.jpg",
+
+ //PNG file
+ "PNG image file" => "200x100.png",
+
+ //SWF file
+ "SWF image file" => "200x100.swf",
+
+ //BMP file
+ "BMP image file" => "200x100.bmp",
+
+ //TIFF intel byte order
+ "TIFF intel byte order image file" => "200x100.tif",
+
+ //JPC file
+ "JPC image file" => "test1pix.jpc",
+
+ //JP2 file
+ "JP2 image file" => "test1pix.jp2",
+
+ //IFF file
+ "IFF image file" => "test4pix.iff"
+);
+
+echo "*** Testing getimagesize() : basic functionality ***\n";
+
+// loop through each element of the array for imagetype
+foreach($imagetype_filenames as $key => $filename) {
+ echo "\n-- $key ($filename) --\n";
+ var_dump( getimagesize(dirname(__FILE__)."/$filename", $info) );
+ var_dump( $info );
+};
+?>
+===DONE===
+--EXPECTF--
+*** Testing getimagesize() : basic functionality ***
+
+-- GIF image file (200x100.gif) --
+array(7) {
+ [0]=>
+ int(200)
+ [1]=>
+ int(100)
+ [2]=>
+ int(1)
+ [3]=>
+ string(24) "width="200" height="100""
+ ["bits"]=>
+ int(8)
+ ["channels"]=>
+ int(3)
+ ["mime"]=>
+ string(9) "image/gif"
+}
+array(0) {
+}
+
+-- JPEG image file (200x100.jpg) --
+array(7) {
+ [0]=>
+ int(200)
+ [1]=>
+ int(100)
+ [2]=>
+ int(2)
+ [3]=>
+ string(24) "width="200" height="100""
+ ["bits"]=>
+ int(8)
+ ["channels"]=>
+ int(3)
+ ["mime"]=>
+ string(10) "image/jpeg"
+}
+array(1) {
+ ["APP0"]=>
+ string(%d)%s
+}
+
+-- PNG image file (200x100.png) --
+array(6) {
+ [0]=>
+ int(200)
+ [1]=>
+ int(100)
+ [2]=>
+ int(3)
+ [3]=>
+ string(24) "width="200" height="100""
+ ["bits"]=>
+ int(8)
+ ["mime"]=>
+ string(9) "image/png"
+}
+array(0) {
+}
+
+-- SWF image file (200x100.swf) --
+array(5) {
+ [0]=>
+ int(200)
+ [1]=>
+ int(100)
+ [2]=>
+ int(4)
+ [3]=>
+ string(24) "width="200" height="100""
+ ["mime"]=>
+ string(29) "application/x-shockwave-flash"
+}
+array(0) {
+}
+
+-- BMP image file (200x100.bmp) --
+array(6) {
+ [0]=>
+ int(200)
+ [1]=>
+ int(100)
+ [2]=>
+ int(6)
+ [3]=>
+ string(24) "width="200" height="100""
+ ["bits"]=>
+ int(24)
+ ["mime"]=>
+ string(9) "image/bmp"
+}
+array(0) {
+}
+
+-- TIFF intel byte order image file (200x100.tif) --
+array(5) {
+ [0]=>
+ int(200)
+ [1]=>
+ int(100)
+ [2]=>
+ int(7)
+ [3]=>
+ string(24) "width="200" height="100""
+ ["mime"]=>
+ string(10) "image/tiff"
+}
+array(0) {
+}
+
+-- JPC image file (test1pix.jpc) --
+array(7) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(1)
+ [2]=>
+ int(9)
+ [3]=>
+ string(20) "width="1" height="1""
+ ["bits"]=>
+ int(8)
+ ["channels"]=>
+ int(3)
+ ["mime"]=>
+ string(24) "application/octet-stream"
+}
+array(0) {
+}
+
+-- JP2 image file (test1pix.jp2) --
+array(7) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(1)
+ [2]=>
+ int(10)
+ [3]=>
+ string(20) "width="1" height="1""
+ ["bits"]=>
+ int(8)
+ ["channels"]=>
+ int(3)
+ ["mime"]=>
+ string(9) "image/jp2"
+}
+array(0) {
+}
+
+-- IFF image file (test4pix.iff) --
+array(6) {
+ [0]=>
+ int(4)
+ [1]=>
+ int(1)
+ [2]=>
+ int(14)
+ [3]=>
+ string(20) "width="4" height="1""
+ ["bits"]=>
+ int(4)
+ ["mime"]=>
+ string(9) "image/iff"
+}
+array(0) {
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/image/getimagesize_error1.phpt b/ext/standard/tests/image/getimagesize_error1.phpt
new file mode 100644
index 000000000..7735c6076
--- /dev/null
+++ b/ext/standard/tests/image/getimagesize_error1.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Test getimagesize() function : error conditions - wrong number of args
+--FILE--
+<?php
+/* Prototype : proto array getimagesize(string imagefile [, array info])
+ * Description: Get the size of an image as 4-element array
+ * Source code: ext/standard/image.c
+ * Alias to functions:
+ */
+
+echo "*** Testing getimagesize() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing getimagesize() function with Zero arguments --\n";
+var_dump( getimagesize() );
+
+//Test getimagesize with one more than the expected number of arguments
+echo "\n-- Testing getimagesize() function with more than expected no. of arguments --\n";
+$imagefile = 'string_val';
+$info = array(1, 2);
+$extra_arg = 10;
+var_dump( getimagesize($imagefile, $info, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing getimagesize() : error conditions ***
+
+-- Testing getimagesize() function with Zero arguments --
+
+Warning: Wrong parameter count for getimagesize() in %s on line 12
+bool(false)
+
+-- Testing getimagesize() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for getimagesize() in %s on line 19
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/image/getimagesize_jpgapp.phpt b/ext/standard/tests/image/getimagesize_jpgapp.phpt
new file mode 100644
index 000000000..8e179d255
--- /dev/null
+++ b/ext/standard/tests/image/getimagesize_jpgapp.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test getimagesize() function : basic functionality - load APP info from jpeg.
+--SKIPIF--
+<?php
+ if (!defined("IMAGETYPE_JPEG")) {
+ die("skip jpeg format is not available");
+ }
+?>
+--FILE--
+<?php
+/* Prototype : proto array getimagesize(string imagefile [, array info])
+ * Description: Get the size of an image as 4-element array
+ * Source code: ext/standard/image.c
+ * Alias to functions:
+ */
+
+/*
+ * Load APP info from jpeg
+ */
+
+$arr['this'] = "will";
+$arr['all'] = "be destroyed!";
+$arr['APP1'] = "and this too";
+
+getimagesize( dirname(__FILE__)."/testAPP.jpg", $arr);
+
+foreach ($arr as $key => $value) {
+ echo "$key - length: ". strlen($value) ."; md5: " . md5($value) . "\n" ;
+}
+
+?>
+===DONE===
+--EXPECTF--
+APP1 - length: 1717; md5: 02cbf4ba6640c131422483138c968516
+APP2 - length: 7275; md5: f5036ccca2031e8bf932bcbd4aca4355
+APP13 - length: 42; md5: 2202998bd05e78bcb419f08c070d6f61
+===DONE===
diff --git a/ext/standard/tests/image/getimagesize_tif_mm.phpt b/ext/standard/tests/image/getimagesize_tif_mm.phpt
new file mode 100644
index 000000000..8bc88fd04
--- /dev/null
+++ b/ext/standard/tests/image/getimagesize_tif_mm.phpt
@@ -0,0 +1,39 @@
+--TEST--
+GetImageSize() for tiff format with big-endian (aka Motorola, aka MM) ordering
+--SKIPIF--
+<?php
+ if (!defined("IMAGETYPE_TIFF_MM")) {
+ die("skip tiff_mm file format is not available");
+ }
+?>
+--FILE--
+<?php
+/* Prototype : proto array getimagesize(string imagefile [, array info])
+ * Description: Get the size of an image as 4-element array
+ * Source code: ext/standard/image.c
+ * Alias to functions:
+ */
+
+echo "*** Testing getimagesize() : tiff_mm format ***\n";
+var_dump(getimagesize(dirname(__FILE__) . "/2x2mm.tif", $arr));
+var_dump($arr);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing getimagesize() : tiff_mm format ***
+array(5) {
+ [0]=>
+ int(2)
+ [1]=>
+ int(2)
+ [2]=>
+ int(8)
+ [3]=>
+ string(20) "width="2" height="2""
+ ["mime"]=>
+ string(10) "image/tiff"
+}
+array(0) {
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/image/getimagesize_variation1.phpt b/ext/standard/tests/image/getimagesize_variation1.phpt
new file mode 100644
index 000000000..a4391d42f
--- /dev/null
+++ b/ext/standard/tests/image/getimagesize_variation1.phpt
@@ -0,0 +1,192 @@
+--TEST--
+Test getimagesize() function : usage variations - unexpected type for arg 1
+--FILE--
+<?php
+/* Prototype : proto array getimagesize(string imagefile [, array info])
+ * Description: Get the size of an image as 4-element array
+ * Source code: ext/standard/image.c
+ * Alias to functions:
+ */
+
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+}
+set_error_handler('test_error_handler');
+
+echo "*** Testing getimagesize() : usage variations ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$info = array(1, 2);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ "0" => 0,
+ "1" => 1,
+ "12345" => 12345,
+ "-2345" => -2345,
+
+ // float data
+ "10.5" => 10.5,
+ "-10.5" => -10.5,
+ "10.1234567e5" => 10.1234567e10,
+ "10.7654321e-5" => 10.7654321E-5,
+ .5,
+
+ // array data
+ "array()" => array(),
+ "array(0)" => array(0),
+ "array(1)" => array(1),
+ "array(1, 2)" => array(1, 2),
+ "array('color' => 'red', 'item' => 'pen')" => array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ "NULL" => NULL,
+ "null" => null,
+
+ // boolean data
+ "true" => true,
+ "false" => false,
+ "TRUE" => TRUE,
+ "FALSE" => FALSE,
+
+ // empty data
+ "\"\"" => "",
+ "''" => '',
+
+ // object data
+ "new stdclass()" => new stdclass(),
+
+ // undefined data
+ "undefined_var" => $undefined_var,
+
+ // unset data
+ "unset_var" => $unset_var,
+);
+
+// loop through each element of the array for imagefile
+
+foreach($values as $key => $value) {
+ echo "\n-- Arg value: $key --\n";
+ var_dump( getimagesize($value, $info) );
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing getimagesize() : usage variations ***
+Error: 8 - Undefined variable: undefined_var, %s(%d)
+Error: 8 - Undefined variable: unset_var, %s(%d)
+
+-- Arg value: 0 --
+Error: 2 - getimagesize(0): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+-- Arg value: 1 --
+Error: 2 - getimagesize(1): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+-- Arg value: 12345 --
+Error: 2 - getimagesize(12345): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+-- Arg value: -2345 --
+Error: 2 - getimagesize(-2345): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+-- Arg value: 10.5 --
+Error: 2 - getimagesize(10.5): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+-- Arg value: -10.5 --
+Error: 2 - getimagesize(-10.5): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+-- Arg value: 10.1234567e5 --
+Error: 2 - getimagesize(101234567000): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+-- Arg value: 10.7654321e-5 --
+Error: 2 - getimagesize(0.000107654321): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+-- Arg value: 12346 --
+Error: 2 - getimagesize(0.5): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+-- Arg value: array() --
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - getimagesize(Array): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+-- Arg value: array(0) --
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - getimagesize(Array): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+-- Arg value: array(1) --
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - getimagesize(Array): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+-- Arg value: array(1, 2) --
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - getimagesize(Array): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+-- Arg value: array('color' => 'red', 'item' => 'pen') --
+Error: 8 - Array to string conversion, %s(%d)
+Error: 2 - getimagesize(Array): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+-- Arg value: NULL --
+Error: 2 - getimagesize(): Filename cannot be empty, %s(%d)
+bool(false)
+
+-- Arg value: null --
+Error: 2 - getimagesize(): Filename cannot be empty, %s(%d)
+bool(false)
+
+-- Arg value: true --
+Error: 2 - getimagesize(1): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+-- Arg value: false --
+Error: 2 - getimagesize(): Filename cannot be empty, %s(%d)
+bool(false)
+
+-- Arg value: TRUE --
+Error: 2 - getimagesize(1): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+-- Arg value: FALSE --
+Error: 2 - getimagesize(): Filename cannot be empty, %s(%d)
+bool(false)
+
+-- Arg value: "" --
+Error: 2 - getimagesize(): Filename cannot be empty, %s(%d)
+bool(false)
+
+-- Arg value: '' --
+Error: 2 - getimagesize(): Filename cannot be empty, %s(%d)
+bool(false)
+
+-- Arg value: new stdclass() --
+Error: 4096 - Object of class stdClass could not be converted to string, %s(%d)
+Error: 8 - Object of class stdClass to string conversion, %s(%d)
+Error: 2 - getimagesize(Object): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+-- Arg value: undefined_var --
+Error: 2 - getimagesize(): Filename cannot be empty, %s(%d)
+bool(false)
+
+-- Arg value: unset_var --
+Error: 2 - getimagesize(): Filename cannot be empty, %s(%d)
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/image/getimagesize_variation2.phpt b/ext/standard/tests/image/getimagesize_variation2.phpt
new file mode 100644
index 000000000..9e8c16b9e
--- /dev/null
+++ b/ext/standard/tests/image/getimagesize_variation2.phpt
@@ -0,0 +1,167 @@
+--TEST--
+Test getimagesize() function : usage variations - unexpected type for arg 2
+--SKIPIF--
+<?php
+ if (!defined("IMAGETYPE_JPEG")) {
+ die("skip jpeg format is not available");
+ }
+?>
+--FILE--
+<?php
+/* Prototype : proto array getimagesize(string imagefile [, array info])
+ * Description: Get the size of an image as 4-element array
+ * Source code: ext/standard/image.c
+ * Alias to functions:
+ */
+
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+}
+set_error_handler('test_error_handler');
+
+echo "*** Testing getimagesize() : usage variations ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$imagefile = dirname(__FILE__)."/test1pix.jpg";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ "0" => 0,
+ "1" => 1,
+ "12345" => 12345,
+ "-2345" => -2345,
+
+ // float data
+ "10.5" => 10.5,
+ "-10.5" => -10.5,
+ "10.1234567e5" => 10.1234567e10,
+ "10.7654321e-5" => 10.7654321E-5,
+ .5,
+
+ // array data
+ "array()" => array(),
+ "array(0)" => array(0),
+ "array(1)" => array(1),
+ "array(1, 2)" => array(1, 2),
+ "array('color' => 'red', 'item' => 'pen')" => array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ "NULL" => NULL,
+ "null" => null,
+
+ // boolean data
+ "true" => true,
+ "false" => false,
+ "TRUE" => TRUE,
+ "FALSE" => FALSE,
+
+ // empty data
+ "\"\"" => "",
+ "''" => '',
+
+ // object data
+ "new stdclass()" => new stdclass(),
+
+ // undefined data
+ "undefined_var" => $undefined_var,
+
+ // unset data
+ "unset_var" => $unset_var,
+);
+
+// loop through each element of the array for info
+
+foreach($values as $key => $value) {
+ echo "\n-- Arg value $key --\n";
+ getimagesize($imagefile, $value);
+ var_dump(bin2hex($value["APP0"]));
+};
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing getimagesize() : usage variations ***
+Error: 8 - Undefined variable: undefined_var, %s(%d)
+Error: 8 - Undefined variable: unset_var, %s(%d)
+
+-- Arg value 0 --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value 1 --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value 12345 --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value -2345 --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value 10.5 --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value -10.5 --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value 10.1234567e5 --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value 10.7654321e-5 --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value 12346 --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value array() --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value array(0) --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value array(1) --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value array(1, 2) --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value array('color' => 'red', 'item' => 'pen') --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value NULL --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value null --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value true --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value false --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value TRUE --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value FALSE --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value "" --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value '' --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value new stdclass() --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value undefined_var --
+string(28) "4a46494600010201006000600000"
+
+-- Arg value unset_var --
+string(28) "4a46494600010201006000600000"
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/image/getimagesize_variation3.phpt b/ext/standard/tests/image/getimagesize_variation3.phpt
new file mode 100644
index 000000000..1de985065
--- /dev/null
+++ b/ext/standard/tests/image/getimagesize_variation3.phpt
@@ -0,0 +1,70 @@
+--TEST--
+Test getimagesize() function : variation - Passing non image files
+--FILE--
+<?php
+/* Prototype : array getimagesize(string imagefile [, array info])
+ * Description: Get the size of an image as 4-element array
+ * Source code: ext/standard/image.c
+ */
+
+
+$file_types_array = array (
+ //File containing text string
+ "File with text data" => "test.txt",
+
+ //File containing forcibly corrupted bmp image
+ "File with corrupted BMP data" => "200x100_unknown.unknown",
+
+ //File which doesn't exist
+ "Non-existent file" => "nofile.ext",
+
+ //File having no data
+ "Empty File" => "blank_file.bmp"
+);
+
+echo "*** Testing getimagesize() : variation ***\n";
+
+//loop through each element of the array for filename
+foreach($file_types_array as $key => $filename) {
+ echo "\n-- $key ($filename) --\n";
+ var_dump( getimagesize(dirname(__FILE__)."/$filename" ) );
+ var_dump( getimagesize(dirname(__FILE__)."/$filename", $info) );
+ var_dump( $info );
+};
+?>
+===DONE===
+--EXPECTF--
+*** Testing getimagesize() : variation ***
+
+-- File with text data (test.txt) --
+bool(false)
+bool(false)
+array(0) {
+}
+
+-- File with corrupted BMP data (200x100_unknown.unknown) --
+bool(false)
+bool(false)
+array(0) {
+}
+
+-- Non-existent file (nofile.ext) --
+
+Warning: getimagesize(%s): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+Warning: getimagesize(%s): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+array(0) {
+}
+
+-- Empty File (blank_file.bmp) --
+
+Notice: getimagesize(): Read error! in %s on line %d
+bool(false)
+
+Notice: getimagesize(): Read error! in %s on line %d
+bool(false)
+array(0) {
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/image/getimagesize_variation4.phpt b/ext/standard/tests/image/getimagesize_variation4.phpt
new file mode 100644
index 000000000..8fa690c27
--- /dev/null
+++ b/ext/standard/tests/image/getimagesize_variation4.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Test getimagesize() function : variation - For shockwave-flash format
+--SKIPIF--
+<?php
+ if (!defined("IMAGETYPE_SWC") || !extension_loaded('zlib')) {
+ die("skip zlib extension is not available");
+ }
+?>
+--FILE--
+<?php
+/* Prototype : array getimagesize(string imagefile [, array info])
+ * Description: Get the size of an image as 4-element array
+ * Source code: ext/standard/image.c
+ */
+
+echo "*** Testing getimagesize() : variation ***\n";
+
+var_dump( getimagesize(dirname(__FILE__)."/test13pix.swf", $info) );
+var_dump( $info );
+?>
+===DONE===
+--EXPECTF--
+*** Testing getimagesize() : variation ***
+array(5) {
+ [0]=>
+ int(550)
+ [1]=>
+ int(400)
+ [2]=>
+ int(13)
+ [3]=>
+ string(24) "width="550" height="400""
+ ["mime"]=>
+ string(29) "application/x-shockwave-flash"
+}
+array(0) {
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/image/getimagesize_wbmp.phpt b/ext/standard/tests/image/getimagesize_wbmp.phpt
new file mode 100644
index 000000000..72216a926
--- /dev/null
+++ b/ext/standard/tests/image/getimagesize_wbmp.phpt
@@ -0,0 +1,39 @@
+--TEST--
+GetImageSize() for wbmp format
+--SKIPIF--
+<?php
+ if (!defined("IMAGETYPE_WBMP")) {
+ die("skip wbmp file format is not available");
+ }
+?>
+--FILE--
+<?php
+/* Prototype : proto array getimagesize(string imagefile [, array info])
+ * Description: Get the size of an image as 4-element array
+ * Source code: ext/standard/image.c
+ * Alias to functions:
+ */
+
+echo "*** Testing getimagesize() : wbmp format ***\n";
+var_dump(getimagesize(dirname(__FILE__) . "/75x50.wbmp", $arr));
+var_dump($arr);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing getimagesize() : wbmp format ***
+array(5) {
+ [0]=>
+ int(75)
+ [1]=>
+ int(50)
+ [2]=>
+ int(15)
+ [3]=>
+ string(22) "width="75" height="50""
+ ["mime"]=>
+ string(18) "image/vnd.wap.wbmp"
+}
+array(0) {
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/image/getimagesize_xbm.phpt b/ext/standard/tests/image/getimagesize_xbm.phpt
new file mode 100644
index 000000000..6d35fbfc5
--- /dev/null
+++ b/ext/standard/tests/image/getimagesize_xbm.phpt
@@ -0,0 +1,39 @@
+--TEST--
+GetImageSize() for xbm format
+--SKIPIF--
+<?php
+ if (!defined("IMAGETYPE_XBM")) {
+ die("skip xbm file format is not available");
+ }
+?>
+--FILE--
+<?php
+/* Prototype : proto array getimagesize(string imagefile [, array info])
+ * Description: Get the size of an image as 4-element array
+ * Source code: ext/standard/image.c
+ * Alias to functions:
+ */
+
+echo "*** Testing getimagesize() : xbm format ***\n";
+var_dump(getimagesize(dirname(__FILE__) . "/75x50.xbm", $arr));
+var_dump($arr);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing getimagesize() : xbm format ***
+array(5) {
+ [0]=>
+ int(75)
+ [1]=>
+ int(50)
+ [2]=>
+ int(16)
+ [3]=>
+ string(22) "width="75" height="50""
+ ["mime"]=>
+ string(9) "image/xbm"
+}
+array(0) {
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/image/test.txt b/ext/standard/tests/image/test.txt
new file mode 100644
index 000000000..81c9dfd31
--- /dev/null
+++ b/ext/standard/tests/image/test.txt
@@ -0,0 +1 @@
+Testing getimagesize \ No newline at end of file
diff --git a/ext/standard/tests/image/testAPP.jpg b/ext/standard/tests/image/testAPP.jpg
new file mode 100644
index 000000000..3936a42e4
--- /dev/null
+++ b/ext/standard/tests/image/testAPP.jpg
Binary files differ
diff --git a/ext/standard/tests/mail/ezmlm_hash_basic.phpt b/ext/standard/tests/mail/ezmlm_hash_basic.phpt
new file mode 100644
index 000000000..ce70eace2
--- /dev/null
+++ b/ext/standard/tests/mail/ezmlm_hash_basic.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Test ezmlm_hash() function : basic functionality
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : int ezmlm_hash ( string $addr )
+ * Description: Calculate the hash value needed by EZMLM.
+ * Source code: ext/standard/mail.c
+ */
+
+echo "*** Testing ezmlm_hash() : basic functionality ***\n";
+
+var_dump(ezmlm_hash(b"webmaster@somewhere.com"));
+var_dump(ezmlm_hash(b"foo@somewhere.com"));
+
+?>
+===Done===
+--EXPECT--
+*** Testing ezmlm_hash() : basic functionality ***
+int(1)
+int(7)
+===Done===
diff --git a/ext/standard/tests/mail/ezmlm_hash_basic_64bit.phpt b/ext/standard/tests/mail/ezmlm_hash_basic_64bit.phpt
new file mode 100644
index 000000000..cd791370c
--- /dev/null
+++ b/ext/standard/tests/mail/ezmlm_hash_basic_64bit.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Test ezmlm_hash() function : basic functionality
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : int ezmlm_hash ( string $addr )
+ * Description: Calculate the hash value needed by EZMLM.
+ * Source code: ext/standard/mail.c
+ */
+
+echo "*** Testing ezmlm_hash() : basic functionality ***\n";
+
+var_dump(ezmlm_hash(b"webmaster@somewhere.com"));
+var_dump(ezmlm_hash(b"foo@somewhere.com"));
+
+?>
+===Done===
+--EXPECT--
+*** Testing ezmlm_hash() : basic functionality ***
+int(27)
+int(48)
+===Done===
diff --git a/ext/standard/tests/mail/ezmlm_hash_error.phpt b/ext/standard/tests/mail/ezmlm_hash_error.phpt
new file mode 100644
index 000000000..c5f49dd73
--- /dev/null
+++ b/ext/standard/tests/mail/ezmlm_hash_error.phpt
@@ -0,0 +1,66 @@
+--TEST--
+Test ezmlm_hash() function : error conditions
+--FILE--
+<?php
+/* Prototype : int ezmlm_hash ( string $addr )
+ * Description: Calculate the hash value needed by EZMLM.
+ * Source code: ext/standard/mail.c
+ */
+
+echo "*** Testing ezmlm_hash() : error conditions ***\n";
+
+echo "\n-- Testing ezmlm_hash() function with fewer than expected no. of arguments --\n";
+var_dump( ezmlm_hash() );
+
+echo "\n-- Testing ezmlm_hash() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( ezmlm_hash("webmaster@example.com", $extra_arg) );
+
+echo "\n-- Testing ezmlm_hash() function with invalid input - ARRAY --\n";
+$array_arg = array(1,2,3,4);
+$extra_arg = 10;
+var_dump( ezmlm_hash($array_arg) );
+
+echo "\n-- Testing ezmlm_hash() function with invalid input - OBJECT without 'cast_object' method --\n";
+class sample {
+}
+
+$obj_arg = new sample();
+var_dump( ezmlm_hash($obj_arg) );
+
+echo "\n-- Testing ezmlm_hash() function with invalid input - RESOURCE --\n";
+$file_handle = fopen(__FILE__, "r");
+$extra_arg = 10;
+var_dump( ezmlm_hash($file_handle) );
+fclose($file_handle);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing ezmlm_hash() : error conditions ***
+
+-- Testing ezmlm_hash() function with fewer than expected no. of arguments --
+
+Warning: ezmlm_hash() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing ezmlm_hash() function with more than expected no. of arguments --
+
+Warning: ezmlm_hash() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+
+-- Testing ezmlm_hash() function with invalid input - ARRAY --
+
+Warning: ezmlm_hash() expects parameter 1 to be string, array given in %s on line %d
+NULL
+
+-- Testing ezmlm_hash() function with invalid input - OBJECT without 'cast_object' method --
+
+Warning: ezmlm_hash() expects parameter 1 to be string, object given in %s on line %d
+NULL
+
+-- Testing ezmlm_hash() function with invalid input - RESOURCE --
+
+Warning: ezmlm_hash() expects parameter 1 to be string, resource given in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/mail/ezmlm_hash_variation1.phpt b/ext/standard/tests/mail/ezmlm_hash_variation1.phpt
new file mode 100644
index 000000000..787f180fb
--- /dev/null
+++ b/ext/standard/tests/mail/ezmlm_hash_variation1.phpt
@@ -0,0 +1,203 @@
+--TEST--
+Test explode() function : usage variations - test values for $delimiter argument
+--FILE--
+<?php
+
+/* Prototype : array explode ( string $delimiter , string $string [, int $limit ] )
+ * Description: Split a string by string.
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing explode() function: with unexpected inputs for 'delimiter' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $delimeter
+$delimeters = array (
+
+ // integer values
+ 0,
+ 1,
+ 255,
+ 256,
+ PHP_INT_MAX,
+ -PHP_INT_MAX,
+
+ // float values
+ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+ NULL,
+ null,
+
+ // objects
+ new sample(),
+
+ // resource
+ $file_handle,
+
+ // undefined variable
+ @$undefined_var,
+
+ // unset variable
+ @$unset_var
+);
+
+// loop through with each element of the $delimeters array to test explode() function
+$count = 1;
+$string = "piece1 piece2 piece3 piece4 piece5 piece6";
+$limit = 5;
+foreach($delimeters as $delimeter) {
+ echo "-- Iteration $count --\n";
+ var_dump( explode($delimeter, $string, $limit) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===Done===
+--EXPECTF--
+*** Testing explode() function: with unexpected inputs for 'delimiter' argument ***
+-- Iteration 1 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 2 --
+array(2) {
+ [0]=>
+ string(5) "piece"
+ [1]=>
+ string(35) " piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 3 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 4 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 5 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 6 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 7 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 8 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 9 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 12 --
+
+Notice: Array to string conversion in %s on line %d
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 13 --
+array(2) {
+ [0]=>
+ string(5) "piece"
+ [1]=>
+ string(35) " piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 14 --
+
+Warning: explode(): Empty delimiter in %s on line %d
+bool(false)
+-- Iteration 15 --
+array(2) {
+ [0]=>
+ string(5) "piece"
+ [1]=>
+ string(35) " piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 16 --
+
+Warning: explode(): Empty delimiter in %s on line %d
+bool(false)
+-- Iteration 17 --
+
+Warning: explode(): Empty delimiter in %s on line %d
+bool(false)
+-- Iteration 18 --
+
+Warning: explode(): Empty delimiter in %s on line %d
+bool(false)
+-- Iteration 19 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 20 --
+array(1) {
+ [0]=>
+ string(%d) "%s"
+}
+-- Iteration 21 --
+
+Warning: explode(): Empty delimiter in %s on line %d
+bool(false)
+-- Iteration 22 --
+
+Warning: explode(): Empty delimiter in %s on line %d
+bool(false)
+===Done===
diff --git a/ext/standard/tests/mail/mail_basic.phpt b/ext/standard/tests/mail/mail_basic.phpt
new file mode 100644
index 000000000..77ff3512d
--- /dev/null
+++ b/ext/standard/tests/mail/mail_basic.phpt
@@ -0,0 +1,59 @@
+--TEST--
+Test mail() function : basic functionality
+--INI--
+sendmail_path=tee mailBasic.out >/dev/null
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip Won't run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])
+ * Description: Send an email message
+ * Source code: ext/standard/mail.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mail() : basic functionality ***\n";
+
+
+// Initialise all required variables
+$to = 'user@company.com';
+$subject = 'Test Subject';
+$message = 'A Message';
+$additional_headers = 'KHeaders';
+$outFile = "mailBasic.out";
+@unlink($outFile);
+
+echo "-- All Mail Content Parameters --\n";
+// Calling mail() with all additional headers
+var_dump( mail($to, $subject, $message, $additional_headers) );
+echo file_get_contents($outFile);
+unlink($outFile);
+
+echo "\n-- Mandatory Parameters --\n";
+// Calling mail() with mandatory arguments
+var_dump( mail($to, $subject, $message) );
+echo file_get_contents($outFile);
+unlink($outFile);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing mail() : basic functionality ***
+-- All Mail Content Parameters --
+bool(true)
+To: user@company.com
+Subject: Test Subject
+KHeaders
+
+A Message
+
+-- Mandatory Parameters --
+bool(true)
+To: user@company.com
+Subject: Test Subject
+
+A Message
+===DONE===
diff --git a/ext/standard/tests/mail/mail_basic2.phpt b/ext/standard/tests/mail/mail_basic2.phpt
new file mode 100644
index 000000000..bb2e42eeb
--- /dev/null
+++ b/ext/standard/tests/mail/mail_basic2.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Test mail() function : basic functionality
+--INI--
+sendmail_path=echo --- > mailBasic2.out
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip Won't run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])
+ * Description: Send an email message
+ * Source code: ext/standard/mail.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mail() : basic functionality ***\n";
+
+
+// Initialise all required variables
+$to = 'user@company.com';
+$subject = 'Test Subject';
+$message = 'A Message';
+$additional_headers = 'KHeaders';
+$additional_parameters = "Extras";
+$outFile = "mailBasic2.out";
+@unlink($outFile);
+
+echo "-- extra parameters --\n";
+// Calling mail() with all possible arguments
+var_dump( mail($to, $subject, $message, $additional_headers, $additional_parameters) );
+
+//This test is just using a shell command (see the INI setting). The sleep()
+//is used because that can take a while. If you see the test failing sometimes try
+//increasing the length of the sleep.
+
+sleep(5);
+echo file_get_contents($outFile);
+//unlink($outFile);
+?>
+===DONE===
+--EXPECT--
+*** Testing mail() : basic functionality ***
+-- extra parameters --
+bool(true)
+--- Extras
+===DONE===
diff --git a/ext/standard/tests/mail/mail_basic3.phpt b/ext/standard/tests/mail/mail_basic3.phpt
new file mode 100644
index 000000000..58eae0379
--- /dev/null
+++ b/ext/standard/tests/mail/mail_basic3.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test mail() function : basic functionality
+--INI--
+sendmail_path="exit 1"
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip Won't run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])
+ * Description: Send an email message
+ * Source code: ext/standard/mail.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mail() : basic functionality ***\n";
+
+
+// Initialise all required variables
+$to = 'user@company.com';
+$subject = 'Test Subject';
+$message = 'A Message';
+
+
+echo "-- failure --\n";
+var_dump( mail($to, $subject, $message) );
+?>
+===DONE===
+--EXPECT--
+*** Testing mail() : basic functionality ***
+-- failure --
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/mail/mail_basic4.phpt b/ext/standard/tests/mail/mail_basic4.phpt
new file mode 100644
index 000000000..9ecc886ae
--- /dev/null
+++ b/ext/standard/tests/mail/mail_basic4.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test mail() function : basic functionality
+--INI--
+sendmail_path="exit 1"
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip Won't run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])
+ * Description: Send an email message
+ * Source code: ext/standard/mail.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mail() : basic functionality ***\n";
+
+
+// Initialise all required variables
+$to = 'user@company.com';
+$subject = 'Test Subject';
+$message = 'A Message';
+
+
+echo "-- failure --\n";
+
+var_dump( mail($to, $subject, $message) );
+?>
+===DONE===
+--EXPECT--
+*** Testing mail() : basic functionality ***
+-- failure --
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/mail/mail_basic5.phpt b/ext/standard/tests/mail/mail_basic5.phpt
new file mode 100644
index 000000000..7e42ccb83
--- /dev/null
+++ b/ext/standard/tests/mail/mail_basic5.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test mail() function : basic functionality
+--INI--
+sendmail_path="exit 1"
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip Won't run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])
+ * Description: Send an email message
+ * Source code: ext/standard/mail.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mail() : basic functionality ***\n";
+
+
+// Initialise all required variables
+$to = 'user@company.com';
+$subject = 'Test Subject';
+$message = 'A Message';
+
+echo "-- failure --\n";
+var_dump( mail($to, $subject, $message) );
+?>
+===DONE===
+--EXPECT--
+*** Testing mail() : basic functionality ***
+-- failure --
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/mail/mail_basic_alt1-win32.phpt b/ext/standard/tests/mail/mail_basic_alt1-win32.phpt
new file mode 100644
index 000000000..3c4dd88a5
--- /dev/null
+++ b/ext/standard/tests/mail/mail_basic_alt1-win32.phpt
@@ -0,0 +1,95 @@
+--TEST--
+Test mail() function : basic functionality
+--SKIPIF--
+<?php
+
+if( substr(PHP_OS, 0, 3) != 'WIN' ) {
+ die('skip...Windows only test');
+}
+
+require_once(dirname(__FILE__).'/mail_skipif.inc');
+?>
+--INI--
+max_execution_time = 120
+--FILE--
+<?php
+/* Prototype : int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])
+ * Description: Send an email message
+ * Source code: ext/standard/mail.c
+ * Alias to functions:
+ */
+
+error_reporting(E_ALL & ~E_STRICT);
+ini_set("SMTP", "localhost");
+ini_set("smtp_port", 25);
+ini_set("sendmail_from", "user@company.com");
+
+echo "*** Testing mail() : basic functionality ***\n";
+require_once(dirname(__FILE__).'/mail_include.inc');
+$subject_prefix = "!**PHPT**!";
+
+$to = "$username";
+$subject = "$subject_prefix: Basic PHPT test for mail() function";
+$message = <<<HERE
+Description
+bool mail ( string \$to , string \$subject , string \$message [, string \$additional_headers [, string \$additional_parameters]] )
+Send an email message
+HERE;
+
+$res = mail($to, $subject, $message);
+
+if ($res !== true) {
+ exit("TEST FAILED : Unable to send test email\n");
+} else {
+ echo "Msg sent OK\n";
+}
+
+// Search for email message on the mail server using imap.
+$imap_stream = imap_open($default_mailbox, $username, $password);
+if ($imap_stream === false) {
+ echo "Cannot connect to IMAP server $server: " . imap_last_error() . "\n";
+ return false;
+}
+
+$found = false;
+$repeat_count = 20; // we will repeat a max of 20 times
+while (!$found && $repeat_count > 0) {
+
+ // sleep for a while to allow msg to be delivered
+ sleep(1);
+
+ $current_msg_count = imap_check($imap_stream)->Nmsgs;
+
+ // Iterate over recent msgs to find the one we sent above
+ for ($i = 1; $i <= $current_msg_count; $i++) {
+ // get hdr details
+ $hdr = imap_headerinfo($imap_stream, $i);
+
+ if (substr($hdr->Subject, 0 , strlen($subject_prefix)) == $subject_prefix) {
+ echo "Id of msg just sent is $i\n";
+ echo ".. delete it\n";
+ imap_delete($imap_stream, $i);
+ $found = true;
+ break;
+ }
+ }
+
+ $repeat_count -= 1;
+}
+
+if (!$found) {
+ echo "TEST FAILED: email not delivered\n";
+} else {
+ echo "TEST PASSED: Msgs sent and deleted OK\n";
+}
+
+imap_close($imap_stream, CL_EXPUNGE);
+?>
+===Done===
+--EXPECTF--
+*** Testing mail() : basic functionality ***
+Msg sent OK
+Id of msg just sent is %d
+.. delete it
+TEST PASSED: Msgs sent and deleted OK
+===Done===
diff --git a/ext/standard/tests/mail/mail_basic_alt2-win32.phpt b/ext/standard/tests/mail/mail_basic_alt2-win32.phpt
new file mode 100644
index 000000000..d7bae62a0
--- /dev/null
+++ b/ext/standard/tests/mail/mail_basic_alt2-win32.phpt
@@ -0,0 +1,93 @@
+--TEST--
+Test mail() function : basic functionality
+--SKIPIF--
+<?php
+if( substr(PHP_OS, 0, 3) != 'WIN' ) {
+ die('skip...Windows only test');
+}
+
+require_once(dirname(__FILE__).'/mail_skipif.inc');
+?>
+--INI--
+max_execution_time = 120
+--FILE--
+<?php
+/* Prototype : int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])
+ * Description: Send an email message
+ * Source code: ext/standard/mail.c
+ * Alias to functions:
+ */
+
+error_reporting(E_ALL & ~E_STRICT);
+
+echo "*** Testing mail() : basic functionality ***\n";
+require_once(dirname(__FILE__).'/mail_include.inc');
+$subject_prefix = "!**PHPT**!";
+
+$to = "$username";
+$subject = "$subject_prefix: Basic PHPT test for mail() function";
+$message = <<<HERE
+Description
+bool mail ( string \$to , string \$subject , string \$message [, string \$additional_headers [, string \$additional_parameters]] )
+Send an email message
+HERE;
+
+$extra_headers = "from: user@company.com";
+
+$res = mail($to, $subject, $message, $extra_headers);
+
+if ($res !== true) {
+ exit("TEST FAILED : Unable to send test email\n");
+} else {
+ echo "Msg sent OK\n";
+}
+
+// Search for email message on the mail server using imap.
+$imap_stream = imap_open($default_mailbox, $username, $password);
+if ($imap_stream === false) {
+ echo "Cannot connect to IMAP server $server: " . imap_last_error() . "\n";
+ return false;
+}
+
+$found = false;
+$repeat_count = 20; // we will repeat a max of 20 times
+while (!$found && $repeat_count > 0) {
+
+ // sleep for a while to allow msg to be delivered
+ sleep(1);
+
+ $current_msg_count = imap_check($imap_stream)->Nmsgs;
+
+ // Iterate over recent msgs to find the one we sent above
+ for ($i = 1; $i <= $current_msg_count; $i++) {
+ // get hdr details
+ $hdr = imap_headerinfo($imap_stream, $i);
+
+ if (substr($hdr->Subject, 0 , strlen($subject_prefix)) == $subject_prefix) {
+ echo "Id of msg just sent is $i\n";
+ echo ".. delete it\n";
+ imap_delete($imap_stream, $i);
+ $found = true;
+ break;
+ }
+ }
+
+ $repeat_count -= 1;
+}
+
+if (!$found) {
+ echo "TEST FAILED: email not delivered\n";
+} else {
+ echo "TEST PASSED: Msgs sent and deleted OK\n";
+}
+
+imap_close($imap_stream, CL_EXPUNGE);
+?>
+===Done===
+--EXPECTF--
+*** Testing mail() : basic functionality ***
+Msg sent OK
+Id of msg just sent is %d
+.. delete it
+TEST PASSED: Msgs sent and deleted OK
+===Done===
diff --git a/ext/standard/tests/mail/mail_basic_alt3-win32.phpt b/ext/standard/tests/mail/mail_basic_alt3-win32.phpt
new file mode 100644
index 000000000..86b57eb81
--- /dev/null
+++ b/ext/standard/tests/mail/mail_basic_alt3-win32.phpt
@@ -0,0 +1,93 @@
+--TEST--
+Test mail() function : basic functionality
+--SKIPIF--
+<?php
+if( substr(PHP_OS, 0, 3) != 'WIN' ) {
+ die('skip...Windows only test');
+}
+
+require_once(dirname(__FILE__).'/mail_skipif.inc');
+?>
+--INI--
+max_execution_time = 120
+--FILE--
+<?php
+/* Prototype : int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])
+ * Description: Send an email message
+ * Source code: ext/standard/mail.c
+ * Alias to functions:
+ */
+
+error_reporting(E_ALL & ~E_STRICT);
+
+echo "*** Testing mail() : basic functionality ***\n";
+require_once(dirname(__FILE__).'/mail_include.inc');
+$subject_prefix = "!**PHPT**!";
+
+$to = "$username";
+$subject = "$subject_prefix: Basic PHPT test for mail() function";
+$message = <<<HERE
+Description
+bool mail ( string \$to , string \$subject , string \$message [, string \$additional_headers [, string \$additional_parameters]] )
+Send an email message
+HERE;
+
+$extra_headers = "FRom: user@company.com";
+
+$res = mail($to, $subject, $message, $extra_headers);
+
+if ($res !== true) {
+ exit("TEST FAILED : Unable to send test email\n");
+} else {
+ echo "Msg sent OK\n";
+}
+
+// Search for email message on the mail server using imap.
+$imap_stream = imap_open($default_mailbox, $username, $password);
+if ($imap_stream === false) {
+ echo "Cannot connect to IMAP server $server: " . imap_last_error() . "\n";
+ return false;
+}
+
+$found = false;
+$repeat_count = 20; // we will repeat a max of 20 times
+while (!$found && $repeat_count > 0) {
+
+ // sleep for a while to allow msg to be delivered
+ sleep(1);
+
+ $current_msg_count = imap_check($imap_stream)->Nmsgs;
+
+ // Iterate over recent msgs to find the one we sent above
+ for ($i = 1; $i <= $current_msg_count; $i++) {
+ // get hdr details
+ $hdr = imap_headerinfo($imap_stream, $i);
+
+ if (substr($hdr->Subject, 0 , strlen($subject_prefix)) == $subject_prefix) {
+ echo "Id of msg just sent is $i\n";
+ echo ".. delete it\n";
+ imap_delete($imap_stream, $i);
+ $found = true;
+ break;
+ }
+ }
+
+ $repeat_count -= 1;
+}
+
+if (!$found) {
+ echo "TEST FAILED: email not delivered\n";
+} else {
+ echo "TEST PASSED: Msgs sent and deleted OK\n";
+}
+
+imap_close($imap_stream, CL_EXPUNGE);
+?>
+===Done===
+--EXPECTF--
+*** Testing mail() : basic functionality ***
+Msg sent OK
+Id of msg just sent is %d
+.. delete it
+TEST PASSED: Msgs sent and deleted OK
+===Done===
diff --git a/ext/standard/tests/mail/mail_basic_alt4-win32.phpt b/ext/standard/tests/mail/mail_basic_alt4-win32.phpt
new file mode 100644
index 000000000..f4a9d466b
--- /dev/null
+++ b/ext/standard/tests/mail/mail_basic_alt4-win32.phpt
@@ -0,0 +1,94 @@
+--TEST--
+Test mail() function : basic functionality
+--SKIPIF--
+<?php
+if( substr(PHP_OS, 0, 3) != 'WIN' ) {
+ die('skip...Windows only test');
+}
+
+require_once(dirname(__FILE__).'/mail_skipif.inc');
+?>
+--INI--
+max_execution_time = 120
+--FILE--
+<?php
+/* Prototype : int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])
+ * Description: Send an email message
+ * Source code: ext/standard/mail.c
+ * Alias to functions:
+ */
+
+error_reporting(E_ALL & ~E_STRICT);
+
+echo "*** Testing mail() : basic functionality ***\n";
+require_once(dirname(__FILE__).'/mail_include.inc');
+$subject_prefix = "!**PHPT**!";
+
+$to = "$username";
+$subject = "$subject_prefix: Basic PHPT test for mail() function";
+$message = <<<HERE
+Description
+bool mail ( string \$to , string \$subject , string \$message [, string \$additional_headers [, string \$additional_parameters]] )
+Send an email message
+HERE;
+
+$extra_headers = "from: user@company.com";
+$extra_parameters = "addons"; // should be ignored
+
+$res = mail($to, $subject, $message, $extra_headers, $extra_parameters);
+
+if ($res !== true) {
+ exit("TEST FAILED : Unable to send test email\n");
+} else {
+ echo "Msg sent OK\n";
+}
+
+// Search for email message on the mail server using imap.
+$imap_stream = imap_open($default_mailbox, $username, $password);
+if ($imap_stream === false) {
+ echo "Cannot connect to IMAP server $server: " . imap_last_error() . "\n";
+ return false;
+}
+
+$found = false;
+$repeat_count = 20; // we will repeat a max of 20 times
+while (!$found && $repeat_count > 0) {
+
+ // sleep for a while to allow msg to be delivered
+ sleep(1);
+
+ $current_msg_count = imap_check($imap_stream)->Nmsgs;
+
+ // Iterate over recent msgs to find the one we sent above
+ for ($i = 1; $i <= $current_msg_count; $i++) {
+ // get hdr details
+ $hdr = imap_headerinfo($imap_stream, $i);
+
+ if (substr($hdr->Subject, 0 , strlen($subject_prefix)) == $subject_prefix) {
+ echo "Id of msg just sent is $i\n";
+ echo ".. delete it\n";
+ imap_delete($imap_stream, $i);
+ $found = true;
+ break;
+ }
+ }
+
+ $repeat_count -= 1;
+}
+
+if (!$found) {
+ echo "TEST FAILED: email not delivered\n";
+} else {
+ echo "TEST PASSED: Msgs sent and deleted OK\n";
+}
+
+imap_close($imap_stream, CL_EXPUNGE);
+?>
+===Done===
+--EXPECTF--
+*** Testing mail() : basic functionality ***
+Msg sent OK
+Id of msg just sent is %d
+.. delete it
+TEST PASSED: Msgs sent and deleted OK
+===Done===
diff --git a/ext/standard/tests/mail/mail_error.phpt b/ext/standard/tests/mail/mail_error.phpt
new file mode 100644
index 000000000..871b6da0b
--- /dev/null
+++ b/ext/standard/tests/mail/mail_error.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test mail() function : error conditions
+--FILE--
+<?php
+/* Prototype : int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])
+ * Description: Send an email message
+ * Source code: ext/standard/mail.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mail() : error conditions ***\n";
+
+
+//Test mail with one more than the expected number of arguments
+echo "\n-- Testing mail() function with more than expected no. of arguments --\n";
+$to = 'string_val';
+$subject = 'string_val';
+$message = 'string_val';
+$additional_headers = 'string_val';
+$additional_parameters = 'string_val';
+$extra_arg = 10;
+var_dump( mail($to, $subject, $message, $additional_headers, $additional_parameters, $extra_arg) );
+
+// Testing mail with one less than the expected number of arguments
+echo "\n-- Testing mail() function with less than expected no. of arguments --\n";
+$to = 'string_val';
+$subject = 'string_val';
+var_dump( mail($to, $subject) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing mail() : error conditions ***
+
+-- Testing mail() function with more than expected no. of arguments --
+
+Warning: mail() expects at most 5 parameters, 6 given in %s on line %d
+NULL
+
+-- Testing mail() function with less than expected no. of arguments --
+
+Warning: mail() expects at least 3 parameters, 2 given in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/mail/mail_include.inc b/ext/standard/tests/mail/mail_include.inc
new file mode 100644
index 000000000..a0ff5e0c1
--- /dev/null
+++ b/ext/standard/tests/mail/mail_include.inc
@@ -0,0 +1,150 @@
+<?php
+// Change these to make tests run successfully
+$server = '{localhost}';
+$default_mailbox = $server . "INBOX";
+$domain = "example.com";
+$admin_user = "webmaster"; // a user with admin access
+$username = "$admin_user@$domain";
+$password = 'p4ssw0rd';
+$users = array("webmaster", "info", "admin", "foo"); // tests require 4 valid userids
+$mailbox_prefix = "phpttest"; // name used for test mailbox
+
+/**
+ * Create a test mailbox and populate with msgs
+ *
+ * @para, string mailbox_suffix Suffix used to uniquely identify mailboxes
+ * @param int message_count number of test msgs to be written to new mailbox
+ *
+ * @return IMAP stream to new mailbox on sucesss; FALSE on failure
+ */
+function setup_test_mailbox($mailbox_suffix, $message_count, &$new_mailbox = null, $msg_type = "simple"){
+ global $server, $default_mailbox, $username, $password;
+
+ // open a stream to default mailbox
+ $imap_stream = imap_open($default_mailbox, $username, $password);
+
+ if ($imap_stream === false) {
+ echo "Cannot connect to IMAP server $server: " . imap_last_error() . "\n";
+ return false;
+ }
+
+ echo "Create a temporary mailbox and add " . $message_count . " msgs\n";
+ $new_mailbox = create_mailbox($imap_stream, $mailbox_suffix, $message_count, $msg_type);
+ if ($new_mailbox === false) {
+ echo "Cant create a temporary mailbox: " . imap_last_error(). "\n";
+ return false;
+ }
+
+ echo ".. mailbox '$new_mailbox' created\n";
+
+ // reopen stream to new mailbox
+ if (imap_reopen($imap_stream, $new_mailbox) === false) {
+ echo "cant re-open '$new_mailbox' mailbox: " . imap_last_error() . "\n";
+ return false;
+ }
+
+ return $imap_stream;
+}
+
+/**
+ * Create mailbox and fill with generic emails
+ *
+ * @param resource $imap_stream
+ * @param string $mailbox
+ */
+function create_mailbox($imap_stream, $mailbox_suffix, $message_count, $msg_type= "simple"){
+ global $default_mailbox, $mailbox_prefix;
+ $mailbox = $default_mailbox . "." . $mailbox_prefix . $mailbox_suffix;
+
+ $mailboxes = imap_getmailboxes($imap_stream, $mailbox, '*');
+
+ // check mailbox does not already exist
+ if ($mailboxes) {
+ foreach($mailboxes as $value) {
+ if ($value->name == $mailbox) {
+ exit ("TEST FAILED : Mailbox '$mailbox' already exists\n");
+ }
+ }
+ }
+
+ if (imap_createmailbox($imap_stream, $mailbox) === false) {
+ return false;
+ }
+
+ // Add number of test msgs requested
+ if ($message_count > 0) {
+ populate_mailbox($imap_stream, $mailbox, $message_count, $msg_type);
+ }
+
+ return $mailbox;
+}
+
+/**
+ * Populate a mailbox with generic emails
+ *
+ * @param resource $imap_stream
+ * @param string $mailbox
+ */
+function populate_mailbox($imap_stream, $mailbox, $message_count, $msg_type = "simple"){
+
+ global $users, $domain;
+
+ for($i = 1; $i <= $message_count; $i++) {
+ if ($msg_type == "simple") {
+ $msg = "From: foo@anywhere.com\r\n"
+ . "To: $users[0]@$domain\r\n"
+ . "Subject: test$i\r\n"
+ . "\r\n"
+ . "$i: this is a test message, please ignore\r\n";
+ } else {
+ $envelope["from"]= "foo@anywhere.com";
+ $envelope["to"] = "$users[0]@$domain";
+ $envelope["subject"] = "Test msg $i";
+
+ $part1["type"] = TYPEMULTIPART;
+ $part1["subtype"] = "mixed";
+
+ $part2["type"] = TYPETEXT;
+ $part2["subtype"] = "plain";
+ $part2["description"] = "imap_mail_compose() function";
+ $part2["contents.data"] = "message 1:xxxxxxxxxxxxxxxxxxxxxxxxxx";
+
+ $part3["type"] = TYPETEXT;
+ $part3["subtype"] = "plain";
+ $part3["description"] = "Example";
+ $part3["contents.data"] = "message 2:yyyyyyyyyyyyyyyyyyyyyyyyyy";
+
+ $part4["type"] = TYPETEXT;
+ $part4["subtype"] = "plain";
+ $part4["description"] = "Return Values";
+ $part4["contents.data"] = "message 3:zzzzzzzzzzzzzzzzzzzzzzzzzz";
+
+ $body[1] = $part1;
+ $body[2] = $part2;
+ $body[3] = $part3;
+ $body[4] = $part4;
+
+ $msg = imap_mail_compose($envelope, $body);
+ }
+
+ imap_append($imap_stream, $mailbox, $msg);
+ }
+}
+
+/**
+ * Get the mailbox name from a mailbox decription, i.e strip off server details.
+ *
+ * @param string mailbox complete mailbox name
+ * @return mailbox name
+ */
+function get_mailbox_name($mailbox){
+
+ if (preg_match('/\{.*?\}(.*)/', $mailbox, $match) != 1) {
+ echo "Unrecpognized mailbox name\n";
+ return false;
+ }
+
+ return $match[1];
+}
+
+?>
diff --git a/ext/standard/tests/mail/mail_skipif.inc b/ext/standard/tests/mail/mail_skipif.inc
new file mode 100644
index 000000000..2f4fbf3d6
--- /dev/null
+++ b/ext/standard/tests/mail/mail_skipif.inc
@@ -0,0 +1,16 @@
+<?php
+extension_loaded('imap') or die('skip imap extension not available in this build');
+
+// Change these to make tests run successfully
+$mailbox = '{localhost}';
+$username = 'webmaster@example.com';
+$password = 'p4ssw0rd';
+$options = OP_HALFOPEN; // this should be enough to verify server present
+$retries = 0; // dont retry connect on failure
+
+$mbox = imap_open($mailbox, $username, $password, $options, $retries);
+if (!$mbox) {
+ die("skip could not connect to mailbox $mailbox");
+}
+imap_close($mbox);
+?>
diff --git a/ext/standard/tests/mail/mail_variation1.phpt b/ext/standard/tests/mail/mail_variation1.phpt
new file mode 100644
index 000000000..bf37bf41e
--- /dev/null
+++ b/ext/standard/tests/mail/mail_variation1.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Test mail() function : variation invalid program for sendmail
+--INI--
+sendmail_path=rubbish 2>/dev/null
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip Won't run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])
+ * Description: Send an email message
+ * Source code: ext/standard/mail.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mail() : variation ***\n";
+
+// Initialise all required variables
+$to = 'user@company.com';
+$subject = 'Test Subject';
+$message = 'A Message';
+var_dump( mail($to, $subject, $message) );
+?>
+===DONE===
+--EXPECT--
+*** Testing mail() : variation ***
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/mail/mail_variation2.phpt b/ext/standard/tests/mail/mail_variation2.phpt
new file mode 100644
index 000000000..1a0fcc69d
--- /dev/null
+++ b/ext/standard/tests/mail/mail_variation2.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test mail() function : variation force extra parameters
+--INI--
+sendmail_path=echo --- > mailBasic2.out
+mail.force_extra_parameters="forced params"
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip Won't run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])
+ * Description: Send an email message
+ * Source code: ext/standard/mail.c
+ * Alias to functions:
+ */
+
+echo "*** Testing mail() : basic functionality ***\n";
+
+
+// Initialise all required variables
+$to = 'user@company.com';
+$subject = 'Test Subject';
+$message = 'A Message';
+$outFile = "mailBasic2.out";
+@unlink($outFile);
+
+var_dump( mail($to, $subject, $message) );
+echo file_get_contents($outFile);
+unlink($outFile);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing mail() : basic functionality ***
+bool(true)
+--- forced params
+===DONE===
diff --git a/ext/standard/tests/mail/mail_variation_alt1-win32.phpt b/ext/standard/tests/mail/mail_variation_alt1-win32.phpt
new file mode 100644
index 000000000..b81f3af9d
--- /dev/null
+++ b/ext/standard/tests/mail/mail_variation_alt1-win32.phpt
@@ -0,0 +1,92 @@
+--TEST--
+Test mail() function : basic functionality
+--SKIPIF--
+<?php
+if( substr(PHP_OS, 0, 3) != 'WIN' ) {
+ die('skip...Windows only test');
+}
+
+require_once(dirname(__FILE__).'/mail_skipif.inc');
+?>
+--INI--
+max_execution_time = 120
+--FILE--
+<?php
+/* Prototype : int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])
+ * Description: Send an email message
+ * Source code: ext/standard/mail.c
+ * Alias to functions:
+ */
+
+error_reporting(E_ALL & ~E_STRICT);
+ini_set("SMTP", "localhost");
+ini_set("smtp_port", 2525);
+ini_set("sendmail_from", "user@company.com");
+
+echo "*** Testing mail() : basic functionality ***\n";
+require_once(dirname(__FILE__).'/mail_include.inc');
+$subject_prefix = "!**PHPT**!";
+
+$to = "$username";
+$subject = "$subject_prefix: Basic PHPT test for mail() function";
+$message = <<<HERE
+Description
+bool mail ( string \$to , string \$subject , string \$message [, string \$additional_headers [, string \$additional_parameters]] )
+Send an email message
+HERE;
+
+$res = mail($to, $subject, $message);
+
+if ($res !== true) {
+ exit("TEST COMPLETED : Unable to send test email\n");
+} else {
+ echo "Msg sent OK\n";
+}
+
+// Search for email message on the mail server using imap.
+$imap_stream = imap_open($default_mailbox, $username, $password);
+if ($imap_stream === false) {
+ echo "Cannot connect to IMAP server $server: " . imap_last_error() . "\n";
+ return false;
+}
+
+$found = false;
+$repeat_count = 20; // we will repeat a max of 20 times
+while (!$found && $repeat_count > 0) {
+
+ // sleep for a while to allow msg to be delivered
+ sleep(1);
+
+ $current_msg_count = imap_check($imap_stream)->Nmsgs;
+
+ // Iterate over recent msgs to find the one we sent above
+ for ($i = 1; $i <= $current_msg_count; $i++) {
+ // get hdr details
+ $hdr = imap_headerinfo($imap_stream, $i);
+
+ if (substr($hdr->Subject, 0 , strlen($subject_prefix)) == $subject_prefix) {
+ echo "Id of msg just sent is $i\n";
+ echo ".. delete it\n";
+ imap_delete($imap_stream, $i);
+ $found = true;
+ break;
+ }
+ }
+
+ $repeat_count -= 1;
+}
+
+if (!$found) {
+ echo "TEST FAILED: email not delivered\n";
+} else {
+ echo "TEST PASSED: Msgs sent and deleted OK\n";
+}
+
+imap_close($imap_stream, CL_EXPUNGE);
+?>
+===Done===
+--EXPECTF--
+*** Testing mail() : basic functionality ***
+
+Warning: mail(): Failed to connect to mailserver at "localhost" port 2525, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in %s on line %d
+TEST COMPLETED : Unable to send test email
diff --git a/ext/standard/tests/mail/mail_variation_alt2-win32.phpt b/ext/standard/tests/mail/mail_variation_alt2-win32.phpt
new file mode 100644
index 000000000..6ae06bb20
--- /dev/null
+++ b/ext/standard/tests/mail/mail_variation_alt2-win32.phpt
@@ -0,0 +1,92 @@
+--TEST--
+Test mail() function : basic functionality
+--SKIPIF--
+<?php
+if( substr(PHP_OS, 0, 3) != 'WIN' ) {
+ die('skip...Windows only test');
+}
+
+require_once(dirname(__FILE__).'/mail_skipif.inc');
+?>
+--INI--
+max_execution_time = 120
+--FILE--
+<?php
+/* Prototype : int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])
+ * Description: Send an email message
+ * Source code: ext/standard/mail.c
+ * Alias to functions:
+ */
+
+error_reporting(E_ALL & ~E_STRICT);
+ini_set("SMTP", "localplace");
+ini_set("smtp_port", 25);
+ini_set("sendmail_from", "user@company.com");
+
+echo "*** Testing mail() : basic functionality ***\n";
+require_once(dirname(__FILE__).'/mail_include.inc');
+$subject_prefix = "!**PHPT**!";
+
+$to = "$username";
+$subject = "$subject_prefix: Basic PHPT test for mail() function";
+$message = <<<HERE
+Description
+bool mail ( string \$to , string \$subject , string \$message [, string \$additional_headers [, string \$additional_parameters]] )
+Send an email message
+HERE;
+
+$res = mail($to, $subject, $message);
+
+if ($res !== true) {
+ exit("TEST COMPLETED : Unable to send test email\n");
+} else {
+ echo "Msg sent OK\n";
+}
+
+// Search for email message on the mail server using imap.
+$imap_stream = imap_open($default_mailbox, $username, $password);
+if ($imap_stream === false) {
+ echo "Cannot connect to IMAP server $server: " . imap_last_error() . "\n";
+ return false;
+}
+
+$found = false;
+$repeat_count = 20; // we will repeat a max of 20 times
+while (!$found && $repeat_count > 0) {
+
+ // sleep for a while to allow msg to be delivered
+ sleep(1);
+
+ $current_msg_count = imap_check($imap_stream)->Nmsgs;
+
+ // Iterate over recent msgs to find the one we sent above
+ for ($i = 1; $i <= $current_msg_count; $i++) {
+ // get hdr details
+ $hdr = imap_headerinfo($imap_stream, $i);
+
+ if (substr($hdr->Subject, 0 , strlen($subject_prefix)) == $subject_prefix) {
+ echo "Id of msg just sent is $i\n";
+ echo ".. delete it\n";
+ imap_delete($imap_stream, $i);
+ $found = true;
+ break;
+ }
+ }
+
+ $repeat_count -= 1;
+}
+
+if (!$found) {
+ echo "TEST FAILED: email not delivered\n";
+} else {
+ echo "TEST PASSED: Msgs sent and deleted OK\n";
+}
+
+imap_close($imap_stream, CL_EXPUNGE);
+?>
+===Done===
+--EXPECTF--
+*** Testing mail() : basic functionality ***
+
+Warning: mail(): Failed to connect to mailserver at "localplace" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in %s on line %d
+TEST COMPLETED : Unable to send test email
diff --git a/ext/standard/tests/mail/mail_variation_alt3-win32.phpt b/ext/standard/tests/mail/mail_variation_alt3-win32.phpt
new file mode 100644
index 000000000..4062fae98
--- /dev/null
+++ b/ext/standard/tests/mail/mail_variation_alt3-win32.phpt
@@ -0,0 +1,91 @@
+--TEST--
+Test mail() function : basic functionality
+--SKIPIF--
+<?php
+if( substr(PHP_OS, 0, 3) != 'WIN' ) {
+ die('skip...Windows only test');
+}
+
+require_once(dirname(__FILE__).'/mail_skipif.inc');
+?>
+--INI--
+max_execution_time = 120
+--FILE--
+<?php
+/* Prototype : int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])
+ * Description: Send an email message
+ * Source code: ext/standard/mail.c
+ * Alias to functions:
+ */
+
+error_reporting(E_ALL & ~E_STRICT);
+ini_set("SMTP", "localhost");
+ini_set("smtp_port", 25);
+
+echo "*** Testing mail() : basic functionality ***\n";
+require_once(dirname(__FILE__).'/mail_include.inc');
+$subject_prefix = "!**PHPT**!";
+
+$to = "$username";
+$subject = "$subject_prefix: Basic PHPT test for mail() function";
+$message = <<<HERE
+Description
+bool mail ( string \$to , string \$subject , string \$message [, string \$additional_headers [, string \$additional_parameters]] )
+Send an email message
+HERE;
+
+$res = mail($to, $subject, $message);
+
+if ($res !== true) {
+ exit("TEST COMPLETED : Unable to send test email\n");
+} else {
+ echo "Msg sent OK\n";
+}
+
+// Search for email message on the mail server using imap.
+$imap_stream = imap_open($default_mailbox, $username, $password);
+if ($imap_stream === false) {
+ echo "Cannot connect to IMAP server $server: " . imap_last_error() . "\n";
+ return false;
+}
+
+$found = false;
+$repeat_count = 20; // we will repeat a max of 20 times
+while (!$found && $repeat_count > 0) {
+
+ // sleep for a while to allow msg to be delivered
+ sleep(1);
+
+ $current_msg_count = imap_check($imap_stream)->Nmsgs;
+
+ // Iterate over recent msgs to find the one we sent above
+ for ($i = 1; $i <= $current_msg_count; $i++) {
+ // get hdr details
+ $hdr = imap_headerinfo($imap_stream, $i);
+
+ if (substr($hdr->Subject, 0 , strlen($subject_prefix)) == $subject_prefix) {
+ echo "Id of msg just sent is $i\n";
+ echo ".. delete it\n";
+ imap_delete($imap_stream, $i);
+ $found = true;
+ break;
+ }
+ }
+
+ $repeat_count -= 1;
+}
+
+if (!$found) {
+ echo "TEST FAILED: email not delivered\n";
+} else {
+ echo "TEST PASSED: Msgs sent and deleted OK\n";
+}
+
+imap_close($imap_stream, CL_EXPUNGE);
+?>
+===Done===
+--EXPECTF--
+*** Testing mail() : basic functionality ***
+
+Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing in %s on line %d
+TEST COMPLETED : Unable to send test email
diff --git a/ext/standard/tests/math/abs_basic.phpt b/ext/standard/tests/math/abs_basic.phpt
new file mode 100644
index 000000000..0f6ecbc09
--- /dev/null
+++ b/ext/standard/tests/math/abs_basic.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test abs() function : basic functionality
+--INI--
+precision = 14
+--FILE--
+<?php
+/* Prototype : number abs ( mixed $number )
+ * Description: Returns the absolute value of number.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing abs() : basic functionality ***\n";
+
+$values = array(23,
+ -23,
+ 2.345e1,
+ -2.345e1,
+ 0x17,
+ 027,
+ "23",
+ "-23",
+ "23.45",
+ "2.345e1",
+ "-2.345e1",
+ null,
+ true,
+ false);
+
+for ($i = 0; $i < count($values); $i++) {
+ $res = abs($values[$i]);
+ var_dump($res);
+}
+?>
+===Done===
+--EXPECTF--
+*** Testing abs() : basic functionality ***
+int(23)
+int(23)
+float(23.45)
+float(23.45)
+int(23)
+int(23)
+int(23)
+int(23)
+float(23.45)
+float(23.45)
+float(23.45)
+int(0)
+int(1)
+int(0)
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/abs_error.phpt b/ext/standard/tests/math/abs_error.phpt
new file mode 100644
index 000000000..490fee076
--- /dev/null
+++ b/ext/standard/tests/math/abs_error.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test abs() function : error conditions - incorrect number of args
+--FILE--
+<?php
+/* Prototype : number abs ( mixed $number )
+ * Description: Returns the absolute value of number.
+ * Source code: ext/standard/math.c
+ */
+
+/*
+ * Pass incorrect number of arguments to abs() to test behaviour
+ */
+
+echo "*** Testing abs() : error conditions ***\n";
+
+$arg_0 = 1.0;
+$extra_arg = 1;
+
+echo "\nToo many arguments\n";
+var_dump(abs($arg_0, $extra_arg));
+
+echo "\nToo few arguments\n";
+var_dump(abs());
+
+?>
+===Done===
+--EXPECTF--
+*** Testing abs() : error conditions ***
+
+Too many arguments
+
+Warning: Wrong parameter count for abs() in %s on line %d
+NULL
+
+Too few arguments
+
+Warning: Wrong parameter count for abs() in %s on line %d
+NULL
+===Done===
diff --git a/ext/standard/tests/math/abs_variation.phpt b/ext/standard/tests/math/abs_variation.phpt
new file mode 100644
index 000000000..6df1e6b55
--- /dev/null
+++ b/ext/standard/tests/math/abs_variation.phpt
@@ -0,0 +1,135 @@
+--TEST--
+Test abs() function : usage variations - different data types as $number arg
+--FILE--
+<?php
+/* Prototype : number abs ( mixed $number )
+ * Description: Returns the absolute value of number.
+ * Source code: ext/standard/math.c
+ */
+
+/*
+ * Pass different data types as $number argument to abs() to test behaviour
+ */
+
+echo "*** Testing abs() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+ public function __toString() {
+ return "abs";
+ }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+abs
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $number argument
+$inputs = array(
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "abs",
+ 'abs',
+ $heredoc,
+
+ // object data
+/*22*/ new classA(),
+
+ // undefined data
+/*23*/ @$undefined_var,
+
+ // unset data
+/*24*/ @$unset_var,
+
+ // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of abs()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(abs($input) );
+ $iterator++;
+};
+
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing abs() : usage variations ***
+
+-- Iteration 1 --
+int(0)
+
+-- Iteration 2 --
+int(0)
+
+-- Iteration 3 --
+int(1)
+
+-- Iteration 4 --
+int(0)
+
+-- Iteration 5 --
+int(1)
+
+-- Iteration 6 --
+int(0)
+
+-- Iteration 7 --
+int(0)
+
+-- Iteration 8 --
+int(0)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+int(0)
+
+-- Iteration 11 --
+int(0)
+
+-- Iteration 12 --
+int(0)
+
+-- Iteration 13 --
+
+Notice: Object of class classA could not be converted to int in %s on line %d
+int(1)
+
+-- Iteration 14 --
+int(0)
+
+-- Iteration 15 --
+int(0)
+
+-- Iteration 16 --
+int(%d)
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/atan2_variation1.phpt b/ext/standard/tests/math/atan2_variation1.phpt
new file mode 100644
index 000000000..1be4127c9
--- /dev/null
+++ b/ext/standard/tests/math/atan2_variation1.phpt
@@ -0,0 +1,173 @@
+--TEST--
+Test atan2() function : usage variations - different data types as $y arg
+--INI--
+precision = 10
+--FILE--
+<?php
+/* Prototype : float atan2 ( float $y , float $x )
+ * Description: Arc tangent of two variables.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing atan2() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12,
+ -12,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 1.234567e2,
+ 1.234567E-2,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of atan2()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(atan2($input, 23));
+ $iterator++;
+};
+
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing atan2() : usage variations ***
+
+-- Iteration 1 --
+float(0)
+
+-- Iteration 2 --
+float(0.04345089539)
+
+-- Iteration 3 --
+float(0.4808872802)
+
+-- Iteration 4 --
+float(-0.4808872802)
+
+-- Iteration 5 --
+float(1.570796316)
+
+-- Iteration 6 --
+float(0.4282641529)
+
+-- Iteration 7 --
+float(-0.4282641529)
+
+-- Iteration 8 --
+float(1.386607742)
+
+-- Iteration 9 --
+float(0.0005367682093)
+
+-- Iteration 10 --
+float(0.02173570684)
+
+-- Iteration 11 --
+float(0)
+
+-- Iteration 12 --
+float(0)
+
+-- Iteration 13 --
+float(0.04345089539)
+
+-- Iteration 14 --
+float(0)
+
+-- Iteration 15 --
+float(0.04345089539)
+
+-- Iteration 16 --
+float(0)
+
+-- Iteration 17 --
+float(0)
+
+-- Iteration 18 --
+float(0)
+
+-- Iteration 19 --
+float(0)
+
+-- Iteration 20 --
+float(0)
+
+-- Iteration 21 --
+float(0)
+
+-- Iteration 22 --
+float(0)
+
+-- Iteration 23 --
+
+Notice: Object of class classA could not be converted to double in %s on line %d
+float(0.04345089539)
+
+-- Iteration 24 --
+float(0)
+
+-- Iteration 25 --
+float(0)
+
+-- Iteration 26 --
+float(%f)
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/atan2_variation2.phpt b/ext/standard/tests/math/atan2_variation2.phpt
new file mode 100644
index 000000000..6da019e6f
--- /dev/null
+++ b/ext/standard/tests/math/atan2_variation2.phpt
@@ -0,0 +1,172 @@
+--TEST--
+Test atan2() function : usage variations - different data types as $x arg
+--INI--
+precision = 10
+--FILE--
+<?php
+/* Prototype : float atan2 ( float $y , float $x )
+ * Description: Arc tangent of two variables.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing atan2() : basic functionality ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12,
+ -12,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 1.234567e2,
+ 1.234567E-2,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of atan2()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(atan2(23, $input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing atan2() : basic functionality ***
+
+-- Iteration 1 --
+float(1.570796327)
+
+-- Iteration 2 --
+float(1.527345431)
+
+-- Iteration 3 --
+float(1.089909047)
+
+-- Iteration 4 --
+float(2.051683607)
+
+-- Iteration 5 --
+float(1.071020961E-8)
+
+-- Iteration 6 --
+float(1.142532174)
+
+-- Iteration 7 --
+float(1.99906048)
+
+-- Iteration 8 --
+float(0.1841885846)
+
+-- Iteration 9 --
+float(1.570259559)
+
+-- Iteration 10 --
+float(1.54906062)
+
+-- Iteration 11 --
+float(1.570796327)
+
+-- Iteration 12 --
+float(1.570796327)
+
+-- Iteration 13 --
+float(1.527345431)
+
+-- Iteration 14 --
+float(1.570796327)
+
+-- Iteration 15 --
+float(1.527345431)
+
+-- Iteration 16 --
+float(1.570796327)
+
+-- Iteration 17 --
+float(1.570796327)
+
+-- Iteration 18 --
+float(1.570796327)
+
+-- Iteration 19 --
+float(1.570796327)
+
+-- Iteration 20 --
+float(1.570796327)
+
+-- Iteration 21 --
+float(1.570796327)
+
+-- Iteration 22 --
+float(1.570796327)
+
+-- Iteration 23 --
+
+Notice: Object of class classA could not be converted to double in %s on line %d
+float(1.527345431)
+
+-- Iteration 24 --
+float(1.570796327)
+
+-- Iteration 25 --
+float(1.570796327)
+
+-- Iteration 26 --
+float(%f)
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/base_convert_error.phpt b/ext/standard/tests/math/base_convert_error.phpt
index 7806c5648..b962e86f9 100644
--- a/ext/standard/tests/math/base_convert_error.phpt
+++ b/ext/standard/tests/math/base_convert_error.phpt
@@ -1,21 +1,43 @@
--TEST--
-Test base_convert() - wrong params base_convert()
+Test base_convert() function : error conditions - incorrect input
--FILE--
<?php
+/* Prototype : string base_convert ( string $number , int $frombase , int $tobase )
+ * Description: Convert a number between arbitrary bases.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing base_convert() : error conditions ***\n";
+
+// get a class
+class classA
+{
+}
+
+echo "Incorrect number of arguments\n";
base_convert();
base_convert(35);
base_convert(35,2);
base_convert(1234, 1, 10);
base_convert(1234, 10, 37);
+
+echo "Incorrect input\n";
+base_convert(new classA(), 8, 10);
+
?>
--EXPECTF--
+*** Testing base_convert() : error conditions ***
+Incorrect number of arguments
+
+Warning: Wrong parameter count for base_convert() in %s on line %d
-Warning: Wrong parameter count for base_convert() in %s on line 2
+Warning: Wrong parameter count for base_convert() in %s on line %d
-Warning: Wrong parameter count for base_convert() in %s on line 3
+Warning: Wrong parameter count for base_convert() in %s on line %d
-Warning: Wrong parameter count for base_convert() in %s on line 4
+Warning: base_convert(): Invalid `from base' (1) in %s on line %d
-Warning: base_convert(): Invalid `from base' (1) in %s on line 5
+Warning: base_convert(): Invalid `to base' (37) in %s on line %d
+Incorrect input
-Warning: base_convert(): Invalid `to base' (37) in %s on line 6
+Catchable fatal error: Object of class classA could not be converted to string in %s on line %d
diff --git a/ext/standard/tests/math/base_convert_variation1.phpt b/ext/standard/tests/math/base_convert_variation1.phpt
new file mode 100644
index 000000000..afa0c5bb8
--- /dev/null
+++ b/ext/standard/tests/math/base_convert_variation1.phpt
@@ -0,0 +1,159 @@
+--TEST--
+Test base_convert() function : usage variations - different data types as $number argument
+--FILE--
+<?php
+/* Prototype : string base_convert ( string $number , int $frombase , int $tobase )
+ * Description: Convert a number between arbitrary bases.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing base_convert() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12,
+ -12,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 1.234567e2,
+ 1.234567E-2,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // undefined data
+/*23*/ @$undefined_var,
+
+ // unset data
+/*24*/ @$unset_var,
+
+ // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of base_convert()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(base_convert($input, 10, 8));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing base_convert() : usage variations ***
+
+-- Iteration 1 --
+string(1) "0"
+
+-- Iteration 2 --
+string(1) "1"
+
+-- Iteration 3 --
+string(2) "14"
+
+-- Iteration 4 --
+string(2) "14"
+
+-- Iteration 5 --
+string(11) "17777777777"
+
+-- Iteration 6 --
+string(3) "151"
+
+-- Iteration 7 --
+string(3) "151"
+
+-- Iteration 8 --
+string(7) "4553207"
+
+-- Iteration 9 --
+string(7) "4553207"
+
+-- Iteration 10 --
+string(1) "5"
+
+-- Iteration 11 --
+string(1) "0"
+
+-- Iteration 12 --
+string(1) "0"
+
+-- Iteration 13 --
+string(1) "1"
+
+-- Iteration 14 --
+string(1) "0"
+
+-- Iteration 15 --
+string(1) "1"
+
+-- Iteration 16 --
+string(1) "0"
+
+-- Iteration 17 --
+string(1) "0"
+
+-- Iteration 18 --
+string(1) "0"
+
+-- Iteration 19 --
+
+Notice: Array to string conversion in %s on line %d
+string(1) "0"
+
+-- Iteration 20 --
+string(1) "0"
+
+-- Iteration 21 --
+string(1) "0"
+
+-- Iteration 22 --
+string(1) "0"
+
+-- Iteration 23 --
+string(1) "0"
+
+-- Iteration 24 --
+string(1) "0"
+
+-- Iteration 25 --
+string(%d) "%d"
+===Done===
diff --git a/ext/standard/tests/math/base_convert_variation2.phpt b/ext/standard/tests/math/base_convert_variation2.phpt
new file mode 100644
index 000000000..81dbbab5e
--- /dev/null
+++ b/ext/standard/tests/math/base_convert_variation2.phpt
@@ -0,0 +1,193 @@
+--TEST--
+Test base_convert() function : usage variations - different data types as $frombase argument
+--FILE--
+<?php
+/* Prototype : string base_convert ( string $number , int $frombase , int $tobase )
+ * Description: Convert a number between arbitrary bases.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing base_convert() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ -1,
+ -12,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 1.234567e2,
+ 1.234567E-2,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // undefined data
+/*23*/ @$undefined_var,
+
+ // unset data
+/*24*/ @$unset_var,
+);
+
+// loop through each element of $inputs to check the behaviour of base_convert()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(base_convert(25, $input, 8));
+ $iterator++;
+};
+?>
+===Done===
+--EXPECTF--
+*** Testing base_convert() : usage variations ***
+
+-- Iteration 1 --
+
+Warning: base_convert(): Invalid `from base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 2 --
+
+Warning: base_convert(): Invalid `from base' (1) in %s on line %d
+bool(false)
+
+-- Iteration 3 --
+
+Warning: base_convert(): Invalid `from base' (-1) in %s on line %d
+bool(false)
+
+-- Iteration 4 --
+
+Warning: base_convert(): Invalid `from base' (-12) in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+
+Warning: base_convert(): Invalid `from base' (2147483647) in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+string(2) "31"
+
+-- Iteration 7 --
+
+Warning: base_convert(): Invalid `from base' (-10) in %s on line %d
+bool(false)
+
+-- Iteration 8 --
+
+Warning: base_convert(): Invalid `from base' (123) in %s on line %d
+bool(false)
+
+-- Iteration 9 --
+
+Warning: base_convert(): Invalid `from base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 10 --
+
+Warning: base_convert(): Invalid `from base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 11 --
+
+Warning: base_convert(): Invalid `from base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 12 --
+
+Warning: base_convert(): Invalid `from base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 13 --
+
+Warning: base_convert(): Invalid `from base' (1) in %s on line %d
+bool(false)
+
+-- Iteration 14 --
+
+Warning: base_convert(): Invalid `from base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 15 --
+
+Warning: base_convert(): Invalid `from base' (1) in %s on line %d
+bool(false)
+
+-- Iteration 16 --
+
+Warning: base_convert(): Invalid `from base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Warning: base_convert(): Invalid `from base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+
+Warning: base_convert(): Invalid `from base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 19 --
+
+Warning: base_convert(): Invalid `from base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 20 --
+
+Warning: base_convert(): Invalid `from base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 21 --
+
+Warning: base_convert(): Invalid `from base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 22 --
+
+Warning: base_convert(): Invalid `from base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 23 --
+
+Warning: base_convert(): Invalid `from base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 24 --
+
+Warning: base_convert(): Invalid `from base' (0) in %s on line %d
+bool(false)
+===Done===
diff --git a/ext/standard/tests/math/base_convert_variation3.phpt b/ext/standard/tests/math/base_convert_variation3.phpt
new file mode 100644
index 000000000..e52867f56
--- /dev/null
+++ b/ext/standard/tests/math/base_convert_variation3.phpt
@@ -0,0 +1,193 @@
+--TEST--
+Test base_convert() function : usage variations - different data types as $tobase argument
+--FILE--
+<?php
+/* Prototype : string base_convert ( string $number , int $frombase , int $tobase )
+ * Description: Convert a number between arbitrary bases.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing base_convert() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ -1,
+ -12,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 1.234567e2,
+ 1.234567E-2,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // undefined data
+/*23*/ @$undefined_var,
+
+ // unset data
+/*24*/ @$unset_var,
+);
+
+// loop through each element of $inputs to check the behaviour of base_convert()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(base_convert(25, 10, $input));
+ $iterator++;
+};
+?>
+===Done===
+--EXPECTF--
+*** Testing base_convert() : usage variations ***
+
+-- Iteration 1 --
+
+Warning: base_convert(): Invalid `to base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 2 --
+
+Warning: base_convert(): Invalid `to base' (1) in %s on line %d
+bool(false)
+
+-- Iteration 3 --
+
+Warning: base_convert(): Invalid `to base' (-1) in %s on line %d
+bool(false)
+
+-- Iteration 4 --
+
+Warning: base_convert(): Invalid `to base' (-12) in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+
+Warning: base_convert(): Invalid `to base' (2147483647) in %s on line %d
+bool(false)
+
+-- Iteration 6 --
+string(2) "25"
+
+-- Iteration 7 --
+
+Warning: base_convert(): Invalid `to base' (-10) in %s on line %d
+bool(false)
+
+-- Iteration 8 --
+
+Warning: base_convert(): Invalid `to base' (123) in %s on line %d
+bool(false)
+
+-- Iteration 9 --
+
+Warning: base_convert(): Invalid `to base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 10 --
+
+Warning: base_convert(): Invalid `to base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 11 --
+
+Warning: base_convert(): Invalid `to base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 12 --
+
+Warning: base_convert(): Invalid `to base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 13 --
+
+Warning: base_convert(): Invalid `to base' (1) in %s on line %d
+bool(false)
+
+-- Iteration 14 --
+
+Warning: base_convert(): Invalid `to base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 15 --
+
+Warning: base_convert(): Invalid `to base' (1) in %s on line %d
+bool(false)
+
+-- Iteration 16 --
+
+Warning: base_convert(): Invalid `to base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Warning: base_convert(): Invalid `to base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+
+Warning: base_convert(): Invalid `to base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 19 --
+
+Warning: base_convert(): Invalid `to base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 20 --
+
+Warning: base_convert(): Invalid `to base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 21 --
+
+Warning: base_convert(): Invalid `to base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 22 --
+
+Warning: base_convert(): Invalid `to base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 23 --
+
+Warning: base_convert(): Invalid `to base' (0) in %s on line %d
+bool(false)
+
+-- Iteration 24 --
+
+Warning: base_convert(): Invalid `to base' (0) in %s on line %d
+bool(false)
+===Done===
diff --git a/ext/standard/tests/math/bindec_basic.phpt b/ext/standard/tests/math/bindec_basic.phpt
index e50dc8d48..9fcca4a7e 100644
--- a/ext/standard/tests/math/bindec_basic.phpt
+++ b/ext/standard/tests/math/bindec_basic.phpt
@@ -4,6 +4,8 @@ Test bindec() - basic function test bindec()
<?php
if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
?>
+--INI--
+precision=14
--FILE--
<?php
$values = array(111000111,
diff --git a/ext/standard/tests/math/bindec_basic_64bit.phpt b/ext/standard/tests/math/bindec_basic_64bit.phpt
index 006983717..949c19eea 100644
--- a/ext/standard/tests/math/bindec_basic_64bit.phpt
+++ b/ext/standard/tests/math/bindec_basic_64bit.phpt
@@ -4,6 +4,8 @@ Test bindec() - basic function test bindec()
<?php
if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
?>
+--INI--
+precision=14
--FILE--
<?php
$values = array(111000111,
diff --git a/ext/standard/tests/math/bindec_error.phpt b/ext/standard/tests/math/bindec_error.phpt
index 36193b63e..59ceebf6b 100644
--- a/ext/standard/tests/math/bindec_error.phpt
+++ b/ext/standard/tests/math/bindec_error.phpt
@@ -1,12 +1,37 @@
--TEST--
-Test bindec() - basic function test bindec()
+Test bindec() function : error conditions - incorrect input
--FILE--
<?php
+/* Prototype : number bindec ( string $binary_string )
+ * Description: Returns the decimal equivalent of the binary number represented by the binary_string argument.
+ * Source code: ext/standard/math.c
+ */
+
+/*
+ * Pass incorrect input to bindec() to test behaviour
+ */
+
+echo "*** Testing bindec() : error conditions ***\n";
+
+// get a class
+class classA
+{
+}
+
+echo "Incorrect number of arguments\n";
bindec();
bindec('01010101111',true);
+
+echo "Incorrect input\n";
+bindec(new classA());
?>
--EXPECTF--
+*** Testing bindec() : error conditions ***
+Incorrect number of arguments
+
+Warning: Wrong parameter count for bindec() in %s on line %d
-Warning: Wrong parameter count for bindec() in %s on line 2
+Warning: Wrong parameter count for bindec() in %s on line %d
+Incorrect input
-Warning: Wrong parameter count for bindec() in %s on line 3
+Catchable fatal error: Object of class classA could not be converted to string in %s on line %d
diff --git a/ext/standard/tests/math/bindec_variation1.phpt b/ext/standard/tests/math/bindec_variation1.phpt
new file mode 100644
index 000000000..1e188bab3
--- /dev/null
+++ b/ext/standard/tests/math/bindec_variation1.phpt
@@ -0,0 +1,158 @@
+--TEST--
+Test bindec() function : usage variations - different data types as $binary_string arg
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : number bindec ( string $binary_string )
+ * Description: Returns the decimal equivalent of the binary number represented by the binary_string argument.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing bindec() : usage variations ***\n";
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // undefined data
+/*22*/ @$undefined_var,
+
+ // unset data
+/*23*/ @$unset_var,
+
+ // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of bindec()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(bindec($input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing bindec() : usage variations ***
+
+-- Iteration 1 --
+int(0)
+
+-- Iteration 2 --
+int(1)
+
+-- Iteration 3 --
+int(1)
+
+-- Iteration 4 --
+int(0)
+
+-- Iteration 5 --
+int(2)
+
+-- Iteration 6 --
+int(2)
+
+-- Iteration 7 --
+int(8)
+
+-- Iteration 8 --
+int(1)
+
+-- Iteration 9 --
+int(0)
+
+-- Iteration 10 --
+int(0)
+
+-- Iteration 11 --
+int(0)
+
+-- Iteration 12 --
+int(1)
+
+-- Iteration 13 --
+int(0)
+
+-- Iteration 14 --
+int(1)
+
+-- Iteration 15 --
+int(0)
+
+-- Iteration 16 --
+int(0)
+
+-- Iteration 17 --
+int(0)
+
+-- Iteration 18 --
+
+Notice: Array to string conversion in %s on line %d
+int(0)
+
+-- Iteration 19 --
+int(0)
+
+-- Iteration 20 --
+int(0)
+
+-- Iteration 21 --
+int(0)
+
+-- Iteration 22 --
+int(0)
+
+-- Iteration 23 --
+int(0)
+
+-- Iteration 24 --
+int(%d)
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/bindec_variation1_64bit.phpt b/ext/standard/tests/math/bindec_variation1_64bit.phpt
new file mode 100644
index 000000000..0a37c4c2f
--- /dev/null
+++ b/ext/standard/tests/math/bindec_variation1_64bit.phpt
@@ -0,0 +1,158 @@
+--TEST--
+Test bindec() function : usage variations - different data types as $binary_string arg
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : number bindec ( string $binary_string )
+ * Description: Returns the decimal equivalent of the binary number represented by the binary_string argument.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing bindec() : usage variations ***\n";
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // undefined data
+/*22*/ @$undefined_var,
+
+ // unset data
+/*23*/ @$unset_var,
+
+ // resource variable
+/*24*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of bindec()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(bindec($input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing bindec() : usage variations ***
+
+-- Iteration 1 --
+int(0)
+
+-- Iteration 2 --
+int(1)
+
+-- Iteration 3 --
+int(1)
+
+-- Iteration 4 --
+int(0)
+
+-- Iteration 5 --
+int(2)
+
+-- Iteration 6 --
+int(2)
+
+-- Iteration 7 --
+int(8)
+
+-- Iteration 8 --
+int(1)
+
+-- Iteration 9 --
+int(0)
+
+-- Iteration 10 --
+int(0)
+
+-- Iteration 11 --
+int(0)
+
+-- Iteration 12 --
+int(1)
+
+-- Iteration 13 --
+int(0)
+
+-- Iteration 14 --
+int(1)
+
+-- Iteration 15 --
+int(0)
+
+-- Iteration 16 --
+int(0)
+
+-- Iteration 17 --
+int(0)
+
+-- Iteration 18 --
+
+Notice: Array to string conversion in %s on line %d
+int(0)
+
+-- Iteration 19 --
+int(0)
+
+-- Iteration 20 --
+int(0)
+
+-- Iteration 21 --
+int(0)
+
+-- Iteration 22 --
+int(0)
+
+-- Iteration 23 --
+int(0)
+
+-- Iteration 24 --
+int(%d)
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/bug45712.phpt b/ext/standard/tests/math/bug45712.phpt
new file mode 100644
index 000000000..3ebc94c92
--- /dev/null
+++ b/ext/standard/tests/math/bug45712.phpt
@@ -0,0 +1,73 @@
+--TEST--
+Bug #45712 (NaN/INF comparison)
+--FILE--
+<?php
+
+// NaN
+$nan = acos(1.01);
+var_dump($nan);
+var_dump(is_nan($nan));
+//
+var_dump($nan=='');
+var_dump($nan==0.5);
+var_dump($nan==50);
+var_dump($nan=='500');
+var_dump($nan=='abc');
+var_dump($nan==$nan);
+//
+var_dump($nan==='');
+var_dump($nan===0.5);
+var_dump($nan===50);
+var_dump($nan==='500');
+var_dump($nan==='abc');
+var_dump($nan===$nan);
+
+// INF
+$inf = pow(0,-2);
+var_dump($inf);
+var_dump(is_infinite($inf));
+//
+var_dump($inf=='');
+var_dump($inf==0.5);
+var_dump($inf==50);
+var_dump($inf=='500');
+var_dump($inf=='abc');
+var_dump($inf==$inf);
+//
+var_dump($inf==='');
+var_dump($inf===0.5);
+var_dump($inf===50);
+var_dump($inf==='500');
+var_dump($inf==='abc');
+var_dump($inf===$inf);
+
+?>
+--EXPECT--
+float(NAN)
+bool(true)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+float(INF)
+bool(true)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(true)
diff --git a/ext/standard/tests/math/ceil_basic.phpt b/ext/standard/tests/math/ceil_basic.phpt
new file mode 100644
index 000000000..4264b1cf5
--- /dev/null
+++ b/ext/standard/tests/math/ceil_basic.phpt
@@ -0,0 +1,66 @@
+--TEST--
+Test ceil() - basic function test for ceil()
+--INI--
+precision=14
+--FILE--
+<?php
+/* Prototype : float ceil ( float $value )
+ * Description: Round fractions up.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing ceil() : basic functionality ***\n";
+$values = array(0,
+ -0,
+ 0.5,
+ -0.5,
+ 1,
+ -1,
+ 1.5,
+ -1.5,
+ 2.6,
+ -2.6,
+ 037,
+ 0x5F,
+ "10.5",
+ "-10.5",
+ "3.95E3",
+ "-3.95E3",
+ "039",
+ "0x5F",
+ true,
+ false,
+ null,
+ );
+
+for ($i = 0; $i < count($values); $i++) {
+ $res = ceil($values[$i]);
+ var_dump($res);
+}
+
+?>
+===Done===
+--EXPECTF--
+*** Testing ceil() : basic functionality ***
+float(0)
+float(0)
+float(1)
+float(-0)
+float(1)
+float(-1)
+float(2)
+float(-1)
+float(3)
+float(-2)
+float(31)
+float(95)
+float(11)
+float(-10)
+float(3950)
+float(-3950)
+float(39)
+float(95)
+float(1)
+float(0)
+float(0)
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/ceil_error.phpt b/ext/standard/tests/math/ceil_error.phpt
new file mode 100644
index 000000000..d769c185b
--- /dev/null
+++ b/ext/standard/tests/math/ceil_error.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test ceil() - error conditions - incorrect number of args
+--FILE--
+<?php
+/* Prototype : float ceil ( float $value )
+ * Description: Round fractions up.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing ceil() : error conditions ***\n";
+$arg_0 = 1.0;
+$extra_arg = 1;
+
+echo "\nToo many arguments\n";
+var_dump(ceil($arg_0, $extra_arg));
+
+echo "\nToo few arguments\n";
+var_dump(ceil());
+?>
+===Done===
+--EXPECTF--
+*** Testing ceil() : error conditions ***
+
+Too many arguments
+
+Warning: Wrong parameter count for ceil() in %s on line %d
+NULL
+
+Too few arguments
+
+Warning: Wrong parameter count for ceil() in %s on line %d
+NULL
+===Done===
diff --git a/ext/standard/tests/math/ceil_variation1.phpt b/ext/standard/tests/math/ceil_variation1.phpt
new file mode 100644
index 000000000..0045c726d
--- /dev/null
+++ b/ext/standard/tests/math/ceil_variation1.phpt
@@ -0,0 +1,128 @@
+--TEST--
+Test ceil() function : usage variations - different data types as $value arg
+--INI--
+precision=14
+--FILE--
+<?php
+/* Prototype : float ceil ( float $value )
+ * Description: Round fractions up.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing ceil() : usage variations ***\n";
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $value argument
+$inputs = array(
+ // null data
+/* 1*/ NULL,
+ null,
+
+ // boolean data
+/* 3*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/* 7*/ "",
+ '',
+ array(),
+
+ // string data
+/*10*/ "abcxyz",
+ 'abcxyz}',
+ $heredoc,
+
+ // object data
+/*13*/ new classA(),
+
+ // undefined data
+/*14*/ @$undefined_var,
+
+ // unset data
+/*15*/ @$unset_var,
+
+ // resource variable
+/*16*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of ceil()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(ceil($input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing ceil() : usage variations ***
+
+-- Iteration 1 --
+float(0)
+
+-- Iteration 2 --
+float(0)
+
+-- Iteration 3 --
+float(1)
+
+-- Iteration 4 --
+float(0)
+
+-- Iteration 5 --
+float(1)
+
+-- Iteration 6 --
+float(0)
+
+-- Iteration 7 --
+float(0)
+
+-- Iteration 8 --
+float(0)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+float(0)
+
+-- Iteration 11 --
+float(0)
+
+-- Iteration 12 --
+float(0)
+
+-- Iteration 13 --
+
+Notice: Object of class classA could not be converted to int in %s on line %d
+float(1)
+
+-- Iteration 14 --
+float(0)
+
+-- Iteration 15 --
+float(0)
+
+-- Iteration 16 --
+float(%f)
+===Done===
diff --git a/ext/standard/tests/math/decbin_error.phpt b/ext/standard/tests/math/decbin_error.phpt
index a350cee7f..bad5ecd8d 100644
--- a/ext/standard/tests/math/decbin_error.phpt
+++ b/ext/standard/tests/math/decbin_error.phpt
@@ -1,13 +1,25 @@
--TEST--
-Test decbin() - wrong params
+Test decbin() - error conditions
--FILE--
<?php
+/* Prototype : string decbin ( int $number )
+ * Description: Decimal to binary.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing decbin() : error conditions ***\n";
+
+echo "Incorrect number of arguments\n";
decbin();
decbin(23,2,true);
+
?>
+===Done===
--EXPECTF--
+*** Testing decbin() : error conditions ***
+Incorrect number of arguments
-Warning: Wrong parameter count for decbin() in %s on line 2
-
-Warning: Wrong parameter count for decbin() in %s on line 3
+Warning: Wrong parameter count for decbin() in %s on line %d
+Warning: Wrong parameter count for decbin() in %s on line %d
+===Done===
diff --git a/ext/standard/tests/math/decbin_variation1.phpt b/ext/standard/tests/math/decbin_variation1.phpt
new file mode 100644
index 000000000..c53261253
--- /dev/null
+++ b/ext/standard/tests/math/decbin_variation1.phpt
@@ -0,0 +1,178 @@
+--TEST--
+Test decbin() function : usage variations - different data types as $number arg
+--INI--
+precision=14
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string decbin ( int $number )
+ * Description: Decimal to binary.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing decbin() : usage variations ***\n";
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 4294967295, // largest decimal
+ 4294967296,
+ // float data
+/*7*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*12*/ NULL,
+ null,
+
+ // boolean data
+/*14*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*18*/ "",
+ '',
+ array(),
+
+ // string data
+/*21*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*24*/ new classA(),
+
+ // undefined data
+/*25*/ @$undefined_var,
+
+ // unset data
+/*26*/ @$unset_var,
+
+ // resource variable
+/*27*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of decbin()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(decbin($input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing decbin() : usage variations ***
+
+-- Iteration 1 --
+string(1) "0"
+
+-- Iteration 2 --
+string(1) "1"
+
+-- Iteration 3 --
+string(14) "11000000111001"
+
+-- Iteration 4 --
+string(32) "11111111111111111111011011010111"
+
+-- Iteration 5 --
+string(32) "11111111111111111111111111111111"
+
+-- Iteration 6 --
+string(1) "0"
+
+-- Iteration 7 --
+string(4) "1010"
+
+-- Iteration 8 --
+string(32) "11111111111111111111111111110110"
+
+-- Iteration 9 --
+string(32) "10111110100110010001101000001000"
+
+-- Iteration 10 --
+string(1) "0"
+
+-- Iteration 11 --
+string(1) "0"
+
+-- Iteration 12 --
+string(1) "0"
+
+-- Iteration 13 --
+string(1) "0"
+
+-- Iteration 14 --
+string(1) "1"
+
+-- Iteration 15 --
+string(1) "0"
+
+-- Iteration 16 --
+string(1) "1"
+
+-- Iteration 17 --
+string(1) "0"
+
+-- Iteration 18 --
+string(1) "0"
+
+-- Iteration 19 --
+string(1) "0"
+
+-- Iteration 20 --
+string(1) "0"
+
+-- Iteration 21 --
+string(1) "0"
+
+-- Iteration 22 --
+string(1) "0"
+
+-- Iteration 23 --
+string(1) "0"
+
+-- Iteration 24 --
+
+Notice: Object of class classA could not be converted to int in %s on line %d
+string(1) "1"
+
+-- Iteration 25 --
+string(1) "0"
+
+-- Iteration 26 --
+string(1) "0"
+
+-- Iteration 27 --
+string(%d) "%d"
+===Done===
diff --git a/ext/standard/tests/math/decbin_variation1_64bit.phpt b/ext/standard/tests/math/decbin_variation1_64bit.phpt
new file mode 100644
index 000000000..e82ee3e88
--- /dev/null
+++ b/ext/standard/tests/math/decbin_variation1_64bit.phpt
@@ -0,0 +1,179 @@
+--TEST--
+Test decbin() function : usage variations - different data types as $number arg
+--INI--
+precision=14
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string decbin ( int $number )
+ * Description: Decimal to binary.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing decbin() : usage variations ***\n";
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 18446744073709551615, // largest decimal
+ 18446744073709551616,
+
+ // float data
+/*7*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*12*/ NULL,
+ null,
+
+ // boolean data
+/*14*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*18*/ "",
+ '',
+ array(),
+
+ // string data
+/*21*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*24*/ new classA(),
+
+ // undefined data
+/*25*/ @$undefined_var,
+
+ // unset data
+/*26*/ @$unset_var,
+
+ // resource variable
+/*27*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of decbin()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(decbin($input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing decbin() : usage variations ***
+
+-- Iteration 1 --
+string(1) "0"
+
+-- Iteration 2 --
+string(1) "1"
+
+-- Iteration 3 --
+string(14) "11000000111001"
+
+-- Iteration 4 --
+string(64) "1111111111111111111111111111111111111111111111111111011011010111"
+
+-- Iteration 5 --
+string(1) "0"
+
+-- Iteration 6 --
+string(1) "0"
+
+-- Iteration 7 --
+string(4) "1010"
+
+-- Iteration 8 --
+string(64) "1111111111111111111111111111111111111111111111111111111111110110"
+
+-- Iteration 9 --
+string(37) "1110010111110100110010001101000001000"
+
+-- Iteration 10 --
+string(1) "0"
+
+-- Iteration 11 --
+string(1) "0"
+
+-- Iteration 12 --
+string(1) "0"
+
+-- Iteration 13 --
+string(1) "0"
+
+-- Iteration 14 --
+string(1) "1"
+
+-- Iteration 15 --
+string(1) "0"
+
+-- Iteration 16 --
+string(1) "1"
+
+-- Iteration 17 --
+string(1) "0"
+
+-- Iteration 18 --
+string(1) "0"
+
+-- Iteration 19 --
+string(1) "0"
+
+-- Iteration 20 --
+string(1) "0"
+
+-- Iteration 21 --
+string(1) "0"
+
+-- Iteration 22 --
+string(1) "0"
+
+-- Iteration 23 --
+string(1) "0"
+
+-- Iteration 24 --
+
+Notice: Object of class classA could not be converted to int in %s on line %d
+string(1) "1"
+
+-- Iteration 25 --
+string(1) "0"
+
+-- Iteration 26 --
+string(1) "0"
+
+-- Iteration 27 --
+string(%d) "%d"
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/dechex_error.phpt b/ext/standard/tests/math/dechex_error.phpt
index f83afb346..618881625 100644
--- a/ext/standard/tests/math/dechex_error.phpt
+++ b/ext/standard/tests/math/dechex_error.phpt
@@ -2,12 +2,25 @@
Test dechex() - wrong params dechex()
--FILE--
<?php
+/* Prototype : string dechex ( int $number )
+ * Description: Returns a string containing a hexadecimal representation of the given number argument.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing dechex() : error conditions ***\n";
+
+echo "\nIncorrect number of arguments\n";
dechex();
dechex(23,2,true);
-?>
+?>
+===Done===
--EXPECTF--
+*** Testing dechex() : error conditions ***
+
+Incorrect number of arguments
-Warning: Wrong parameter count for dechex() in %s on line 2
+Warning: Wrong parameter count for dechex() in %s on line %d
-Warning: Wrong parameter count for dechex() in %s on line 3
+Warning: Wrong parameter count for dechex() in %s on line %d
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/dechex_variation1.phpt b/ext/standard/tests/math/dechex_variation1.phpt
new file mode 100644
index 000000000..43f0e5337
--- /dev/null
+++ b/ext/standard/tests/math/dechex_variation1.phpt
@@ -0,0 +1,179 @@
+--TEST--
+Test dechex() function : usage variations - different data types as $number arg
+--INI--
+precision=14
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string dechex ( int $number )
+ * Description: Returns a string containing a hexadecimal representation of the given number argument.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing dechex() : usage variations ***\n";
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 4294967295, // largest decimal
+ 4294967296,
+
+ // float data
+/*7*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*12*/ NULL,
+ null,
+
+ // boolean data
+/*14*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*18*/ "",
+ '',
+ array(),
+
+ // string data
+/*21*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*24*/ new classA(),
+
+ // undefined data
+/*25*/ @$undefined_var,
+
+ // unset data
+/*26*/ @$unset_var,
+
+ // resource variable
+/*27*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of dechex()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(dechex($input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing dechex() : usage variations ***
+
+-- Iteration 1 --
+string(1) "0"
+
+-- Iteration 2 --
+string(1) "1"
+
+-- Iteration 3 --
+string(4) "3039"
+
+-- Iteration 4 --
+string(8) "fffff6d7"
+
+-- Iteration 5 --
+string(8) "ffffffff"
+
+-- Iteration 6 --
+string(1) "0"
+
+-- Iteration 7 --
+string(1) "a"
+
+-- Iteration 8 --
+string(8) "fffffff6"
+
+-- Iteration 9 --
+string(8) "be991a08"
+
+-- Iteration 10 --
+string(1) "0"
+
+-- Iteration 11 --
+string(1) "0"
+
+-- Iteration 12 --
+string(1) "0"
+
+-- Iteration 13 --
+string(1) "0"
+
+-- Iteration 14 --
+string(1) "1"
+
+-- Iteration 15 --
+string(1) "0"
+
+-- Iteration 16 --
+string(1) "1"
+
+-- Iteration 17 --
+string(1) "0"
+
+-- Iteration 18 --
+string(1) "0"
+
+-- Iteration 19 --
+string(1) "0"
+
+-- Iteration 20 --
+string(1) "0"
+
+-- Iteration 21 --
+string(1) "0"
+
+-- Iteration 22 --
+string(1) "0"
+
+-- Iteration 23 --
+string(1) "0"
+
+-- Iteration 24 --
+
+Notice: Object of class classA could not be converted to int in %s on line %d
+string(1) "1"
+
+-- Iteration 25 --
+string(1) "0"
+
+-- Iteration 26 --
+string(1) "0"
+
+-- Iteration 27 --
+string(%d) "%s"
+===Done===
diff --git a/ext/standard/tests/math/dechex_variation1_64bit.phpt b/ext/standard/tests/math/dechex_variation1_64bit.phpt
new file mode 100644
index 000000000..a115fa913
--- /dev/null
+++ b/ext/standard/tests/math/dechex_variation1_64bit.phpt
@@ -0,0 +1,179 @@
+--TEST--
+Test dechex() function : usage variations - different data types as $number arg
+--INI--
+precision=14
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string dechex ( int $number )
+ * Description: Returns a string containing a hexadecimal representation of the given number argument.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing dechex() : usage variations ***\n";
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 18446744073709551615, // largest decimal
+ 18446744073709551616,
+
+ // float data
+/*7*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*12*/ NULL,
+ null,
+
+ // boolean data
+/*14*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*18*/ "",
+ '',
+ array(),
+
+ // string data
+/*21*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*24*/ new classA(),
+
+ // undefined data
+/*25*/ @$undefined_var,
+
+ // unset data
+/*26*/ @$unset_var,
+
+ // resource variable
+/*27*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of dechex()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(dechex($input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing dechex() : usage variations ***
+
+-- Iteration 1 --
+string(1) "0"
+
+-- Iteration 2 --
+string(1) "1"
+
+-- Iteration 3 --
+string(4) "3039"
+
+-- Iteration 4 --
+string(16) "fffffffffffff6d7"
+
+-- Iteration 5 --
+string(1) "0"
+
+-- Iteration 6 --
+string(1) "0"
+
+-- Iteration 7 --
+string(1) "a"
+
+-- Iteration 8 --
+string(16) "fffffffffffffff6"
+
+-- Iteration 9 --
+string(10) "1cbe991a08"
+
+-- Iteration 10 --
+string(1) "0"
+
+-- Iteration 11 --
+string(1) "0"
+
+-- Iteration 12 --
+string(1) "0"
+
+-- Iteration 13 --
+string(1) "0"
+
+-- Iteration 14 --
+string(1) "1"
+
+-- Iteration 15 --
+string(1) "0"
+
+-- Iteration 16 --
+string(1) "1"
+
+-- Iteration 17 --
+string(1) "0"
+
+-- Iteration 18 --
+string(1) "0"
+
+-- Iteration 19 --
+string(1) "0"
+
+-- Iteration 20 --
+string(1) "0"
+
+-- Iteration 21 --
+string(1) "0"
+
+-- Iteration 22 --
+string(1) "0"
+
+-- Iteration 23 --
+string(1) "0"
+
+-- Iteration 24 --
+
+Notice: Object of class classA could not be converted to int in %s on line %d
+string(1) "1"
+
+-- Iteration 25 --
+string(1) "0"
+
+-- Iteration 26 --
+string(1) "0"
+
+-- Iteration 27 --
+string(%d) "%s"
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/decoct_error.phpt b/ext/standard/tests/math/decoct_error.phpt
index 48c30644f..b62c52fc8 100644
--- a/ext/standard/tests/math/decoct_error.phpt
+++ b/ext/standard/tests/math/decoct_error.phpt
@@ -1,13 +1,25 @@
--TEST--
-Test decoct() - wrong params decoct()
+Test decoct() - error conditions
--FILE--
<?php
+/* Prototype : string decbin ( int $number )
+ * Description: Decimal to binary.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing decoct() : error conditions ***\n";
+
+echo "Incorrect number of arguments\n";
decoct();
decoct(23,2,true);
+
?>
+===Done===
--EXPECTF--
+*** Testing decoct() : error conditions ***
+Incorrect number of arguments
-Warning: Wrong parameter count for decoct() in %s on line 2
-
-Warning: Wrong parameter count for decoct() in %s on line 3
+Warning: Wrong parameter count for decoct() in %s on line %d
+Warning: Wrong parameter count for decoct() in %s on line %d
+===Done===
diff --git a/ext/standard/tests/math/decoct_variation1.phpt b/ext/standard/tests/math/decoct_variation1.phpt
new file mode 100644
index 000000000..49ba57f54
--- /dev/null
+++ b/ext/standard/tests/math/decoct_variation1.phpt
@@ -0,0 +1,180 @@
+--TEST--
+Test decoct() function : usage variations - different data types as $number arg
+--INI--
+precision=14
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string decoct ( int $number )
+ * Description: Returns a string containing an octal representation of the given number argument.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing decoct() : usage variations ***\n";
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 4294967295, // largest decimal
+ 4294967296,
+
+ // float data
+/*7*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*12*/ NULL,
+ null,
+
+ // boolean data
+/*14*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*18*/ "",
+ '',
+ array(),
+
+ // string data
+/*21*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*24*/ new classA(),
+
+ // undefined data
+/*25*/ @$undefined_var,
+
+ // unset data
+/*26*/ @$unset_var,
+
+ // resource variable
+/*27*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of decoct()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(decoct($input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing decoct() : usage variations ***
+
+-- Iteration 1 --
+string(1) "0"
+
+-- Iteration 2 --
+string(1) "1"
+
+-- Iteration 3 --
+string(5) "30071"
+
+-- Iteration 4 --
+string(11) "37777773327"
+
+-- Iteration 5 --
+string(11) "37777777777"
+
+-- Iteration 6 --
+string(1) "0"
+
+-- Iteration 7 --
+string(2) "12"
+
+-- Iteration 8 --
+string(11) "37777777766"
+
+-- Iteration 9 --
+string(11) "27646215010"
+
+-- Iteration 10 --
+string(1) "0"
+
+-- Iteration 11 --
+string(1) "0"
+
+-- Iteration 12 --
+string(1) "0"
+
+-- Iteration 13 --
+string(1) "0"
+
+-- Iteration 14 --
+string(1) "1"
+
+-- Iteration 15 --
+string(1) "0"
+
+-- Iteration 16 --
+string(1) "1"
+
+-- Iteration 17 --
+string(1) "0"
+
+-- Iteration 18 --
+string(1) "0"
+
+-- Iteration 19 --
+string(1) "0"
+
+-- Iteration 20 --
+string(1) "0"
+
+-- Iteration 21 --
+string(1) "0"
+
+-- Iteration 22 --
+string(1) "0"
+
+-- Iteration 23 --
+string(1) "0"
+
+-- Iteration 24 --
+
+Notice: Object of class classA could not be converted to int in %s on line %d
+string(1) "1"
+
+-- Iteration 25 --
+string(1) "0"
+
+-- Iteration 26 --
+string(1) "0"
+
+-- Iteration 27 --
+string(%d) "%d"
+===Done===
diff --git a/ext/standard/tests/math/decoct_variation1_64bit.phpt b/ext/standard/tests/math/decoct_variation1_64bit.phpt
new file mode 100644
index 000000000..40afafa10
--- /dev/null
+++ b/ext/standard/tests/math/decoct_variation1_64bit.phpt
@@ -0,0 +1,180 @@
+--TEST--
+Test decoct() function : usage variations - different data types as $number arg
+--INI--
+precision=14
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string decoct ( int $number )
+ * Description: Returns a string containing an octal representation of the given number argument.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing decoct() : usage variations ***\n";
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 18446744073709551615, // largest decimal
+ 18446744073709551616,
+
+ // float data
+/*7*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*12*/ NULL,
+ null,
+
+ // boolean data
+/*14*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*18*/ "",
+ '',
+ array(),
+
+ // string data
+/*21*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*24*/ new classA(),
+
+ // undefined data
+/*25*/ @$undefined_var,
+
+ // unset data
+/*26*/ @$unset_var,
+
+ // resource variable
+/*27*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of decoct()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(decoct($input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing decoct() : usage variations ***
+
+-- Iteration 1 --
+string(1) "0"
+
+-- Iteration 2 --
+string(1) "1"
+
+-- Iteration 3 --
+string(5) "30071"
+
+-- Iteration 4 --
+string(22) "1777777777777777773327"
+
+-- Iteration 5 --
+string(1) "0"
+
+-- Iteration 6 --
+string(1) "0"
+
+-- Iteration 7 --
+string(2) "12"
+
+-- Iteration 8 --
+string(22) "1777777777777777777766"
+
+-- Iteration 9 --
+string(13) "1627646215010"
+
+-- Iteration 10 --
+string(1) "0"
+
+-- Iteration 11 --
+string(1) "0"
+
+-- Iteration 12 --
+string(1) "0"
+
+-- Iteration 13 --
+string(1) "0"
+
+-- Iteration 14 --
+string(1) "1"
+
+-- Iteration 15 --
+string(1) "0"
+
+-- Iteration 16 --
+string(1) "1"
+
+-- Iteration 17 --
+string(1) "0"
+
+-- Iteration 18 --
+string(1) "0"
+
+-- Iteration 19 --
+string(1) "0"
+
+-- Iteration 20 --
+string(1) "0"
+
+-- Iteration 21 --
+string(1) "0"
+
+-- Iteration 22 --
+string(1) "0"
+
+-- Iteration 23 --
+string(1) "0"
+
+-- Iteration 24 --
+
+Notice: Object of class classA could not be converted to int in %s on line %d
+string(1) "1"
+
+-- Iteration 25 --
+string(1) "0"
+
+-- Iteration 26 --
+string(1) "0"
+
+-- Iteration 27 --
+string(%d) "%d"
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/exp_basic.phpt b/ext/standard/tests/math/exp_basic.phpt
new file mode 100644
index 000000000..e50e7ced9
--- /dev/null
+++ b/ext/standard/tests/math/exp_basic.phpt
@@ -0,0 +1,78 @@
+--TEST--
+Test exp() - basic function test for exp()
+--INI--
+precision=14
+--FILE--
+<?php
+/* Prototype : float exp ( float $arg )
+ * Description: Returns e raised to the power of arg.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing exp() : basic functionality ***\n";
+$values = array(10,
+ 10.3,
+ 3.9505e3,
+ 037,
+ 0x5F,
+ "10",
+ "3950.5",
+ "3.9505e3",
+ "039",
+ "0x5F",
+ true,
+ false,
+ null,
+ );
+
+// loop through each element of $values to check the behaviour of exp()
+$iterator = 1;
+foreach($values as $value) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(exp($value));
+ $iterator++;
+};
+?>
+===Done===
+--EXPECTF--
+*** Testing exp() : basic functionality ***
+
+-- Iteration 1 --
+float(22026.465794807)
+
+-- Iteration 2 --
+float(29732.618852891)
+
+-- Iteration 3 --
+float(INF)
+
+-- Iteration 4 --
+float(29048849665247)
+
+-- Iteration 5 --
+float(1.811239082889E+41)
+
+-- Iteration 6 --
+float(22026.465794807)
+
+-- Iteration 7 --
+float(INF)
+
+-- Iteration 8 --
+float(INF)
+
+-- Iteration 9 --
+float(8.6593400423994E+16)
+
+-- Iteration 10 --
+float(1.811239082889E+41)
+
+-- Iteration 11 --
+float(2.718281828459)
+
+-- Iteration 12 --
+float(1)
+
+-- Iteration 13 --
+float(1)
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/exp_variation1.phpt b/ext/standard/tests/math/exp_variation1.phpt
new file mode 100644
index 000000000..567f6b24b
--- /dev/null
+++ b/ext/standard/tests/math/exp_variation1.phpt
@@ -0,0 +1,187 @@
+--TEST--
+Test exp() function : usage variations - different data types as $arg argument
+--INI--
+precision=14
+--FILE--
+<?php
+/* Prototype : float exp ( float $arg )
+ * Description: Returns e raised to the power of arg.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing exp() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $arg argument
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of exp()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(exp($input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing exp() : usage variations ***
+
+-- Iteration 1 --
+float(1)
+
+-- Iteration 2 --
+float(2.718281828459)
+
+-- Iteration 3 --
+float(INF)
+
+-- Iteration 4 --
+float(0)
+
+-- Iteration 5 --
+float(INF)
+
+-- Iteration 6 --
+float(36315.502674247)
+
+-- Iteration 7 --
+float(2.7536449349747E-5)
+
+-- Iteration 8 --
+float(INF)
+
+-- Iteration 9 --
+float(1.0000000012346)
+
+-- Iteration 10 --
+float(1.6487212707001)
+
+-- Iteration 11 --
+float(1)
+
+-- Iteration 12 --
+float(1)
+
+-- Iteration 13 --
+float(2.718281828459)
+
+-- Iteration 14 --
+float(1)
+
+-- Iteration 15 --
+float(2.718281828459)
+
+-- Iteration 16 --
+float(1)
+
+-- Iteration 17 --
+
+Warning: exp() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 18 --
+
+Warning: exp() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 19 --
+
+Warning: exp() expects parameter 1 to be double, array given in %s on line %d
+NULL
+
+-- Iteration 20 --
+
+Warning: exp() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 21 --
+
+Warning: exp() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 22 --
+
+Warning: exp() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 23 --
+
+Warning: exp() expects parameter 1 to be double, object given in %s on line %d
+NULL
+
+-- Iteration 24 --
+float(1)
+
+-- Iteration 25 --
+float(1)
+
+-- Iteration 26 --
+
+Warning: exp() expects parameter 1 to be double, resource given in %s on line %d
+NULL
+===Done===
diff --git a/ext/standard/tests/math/expm1_basic.phpt b/ext/standard/tests/math/expm1_basic.phpt
new file mode 100644
index 000000000..160c06c42
--- /dev/null
+++ b/ext/standard/tests/math/expm1_basic.phpt
@@ -0,0 +1,83 @@
+--TEST--
+Test expm1() - basic function test for expm1()
+--INI--
+precision=14
+--SKIPIF--
+<?php
+ function_exists('expm1') or die('skip expm1() is not supported in this build.');
+?>
+--FILE--
+<?php
+/* Prototype : float expm1 ( float $arg )
+ * Description: Returns exp(number) - 1, computed in a way that is accurate even
+ * when the value of number is close to zero.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing expm1() : basic functionality ***\n";
+$values = array(10,
+ 10.3,
+ 3.9505e3,
+ 037,
+ 0x5F,
+ "10",
+ "3950.5",
+ "3.9505e3",
+ "039",
+ "0x5F",
+ true,
+ false,
+ null,
+ );
+
+// loop through each element of $values to check the behaviour of expm1()
+$iterator = 1;
+foreach($values as $value) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(expm1($value));
+ $iterator++;
+};
+?>
+===Done===
+--EXPECTF--
+*** Testing expm1() : basic functionality ***
+
+-- Iteration 1 --
+float(22025.465794807)
+
+-- Iteration 2 --
+float(29731.618852891)
+
+-- Iteration 3 --
+float(INF)
+
+-- Iteration 4 --
+float(29048849665246)
+
+-- Iteration 5 --
+float(1.811239082889E+41)
+
+-- Iteration 6 --
+float(22025.465794807)
+
+-- Iteration 7 --
+float(INF)
+
+-- Iteration 8 --
+float(INF)
+
+-- Iteration 9 --
+float(8.6593400423994E+16)
+
+-- Iteration 10 --
+float(0)
+
+-- Iteration 11 --
+float(1.718281828459)
+
+-- Iteration 12 --
+float(0)
+
+-- Iteration 13 --
+float(0)
+===Done===
diff --git a/ext/standard/tests/math/expm1_error.phpt b/ext/standard/tests/math/expm1_error.phpt
new file mode 100644
index 000000000..87bfaf406
--- /dev/null
+++ b/ext/standard/tests/math/expm1_error.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test expm1() - Error conditions
+--INI--
+precision=14
+--SKIPIF--
+<?php
+ function_exists('expm1') or die('skip expm1() is not supported in this build.');
+?>
+--FILE--
+<?php
+/* Prototype : float expm1 ( float $arg )
+ * Description: Returns exp(number) - 1, computed in a way that is accurate even
+ * when the value of number is close to zero.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing expm1() : error conditions ***\n";
+
+echo "\n-- Testing expm1() function with less than expected no. of arguments --\n";
+expm1();
+echo "\n-- Testing expm1() function with more than expected no. of arguments --\n";
+expm1(23,true);
+
+?>
+===Done===
+--EXPECTF--
+*** Testing expm1() : error conditions ***
+
+-- Testing expm1() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for expm1() in %s on line %d
+
+-- Testing expm1() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for expm1() in %s on line %d
+===Done===
+
diff --git a/ext/standard/tests/math/expm1_variation1.phpt b/ext/standard/tests/math/expm1_variation1.phpt
new file mode 100644
index 000000000..f270f245f
--- /dev/null
+++ b/ext/standard/tests/math/expm1_variation1.phpt
@@ -0,0 +1,185 @@
+--TEST--
+Test expm1() function : usage variations - different data types as $arg argument
+--INI--
+precision=14
+--SKIPIF--
+<?php
+ function_exists('expm1') or die('skip expm1() is not supported in this build.');
+?>
+--FILE--
+<?php
+
+/* Prototype : float expm1 ( float $arg )
+ * Description: Returns exp(number) - 1, computed in a way that is accurate even
+ * when the value of number is close to zero.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing expm1() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $arg argument
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 12.3456789E4,
+ 12.3456789E-4,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+ array(),
+
+ // string data
+/*19*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // array data
+ array(),
+ array(1,2,4),
+
+ // object data
+/*24*/ new classA(),
+
+ // undefined data
+/*25*/ @$undefined_var,
+
+ // unset data
+/*26*/ @$unset_var,
+
+ // resource variable
+/*27*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of expm1()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(expm1($input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing expm1() : usage variations ***
+
+-- Iteration 1 --
+float(0)
+
+-- Iteration 2 --
+float(1.718281828459)
+
+-- Iteration 3 --
+float(INF)
+
+-- Iteration 4 --
+float(-1)
+
+-- Iteration 5 --
+float(36314.502674247)
+
+-- Iteration 6 --
+float(-0.99997246355065)
+
+-- Iteration 7 --
+float(INF)
+
+-- Iteration 8 --
+float(0.0012353302826471)
+
+-- Iteration 9 --
+float(0.64872127070013)
+
+-- Iteration 10 --
+float(0)
+
+-- Iteration 11 --
+float(0)
+
+-- Iteration 12 --
+float(1.718281828459)
+
+-- Iteration 13 --
+float(0)
+
+-- Iteration 14 --
+float(1.718281828459)
+
+-- Iteration 15 --
+float(0)
+
+-- Iteration 16 --
+float(0)
+
+-- Iteration 17 --
+float(0)
+
+-- Iteration 18 --
+float(0)
+
+-- Iteration 19 --
+float(0)
+
+-- Iteration 20 --
+float(0)
+
+-- Iteration 21 --
+float(0)
+
+-- Iteration 22 --
+float(0)
+
+-- Iteration 23 --
+float(1.718281828459)
+
+-- Iteration 24 --
+
+Notice: Object of class classA could not be converted to double in %s on line %d
+float(1.718281828459)
+
+-- Iteration 25 --
+float(0)
+
+-- Iteration 26 --
+float(0)
+
+-- Iteration 27 --
+float(%s)
+===Done===
diff --git a/ext/standard/tests/math/floor_basic.phpt b/ext/standard/tests/math/floor_basic.phpt
new file mode 100644
index 000000000..bbb8a2aa5
--- /dev/null
+++ b/ext/standard/tests/math/floor_basic.phpt
@@ -0,0 +1,108 @@
+--TEST--
+Test floor() - basic function test for floor()
+--INI--
+precision=14
+--FILE--
+<?php
+/* Prototype : float floor ( float $value )
+ * Description: Round fractions down.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing floor() : basic functionality ***\n";
+$values = array(0,
+ -0,
+ 0.5,
+ -0.5,
+ 1,
+ -1,
+ 1.5,
+ -1.5,
+ 2.6,
+ -2.6,
+ 037,
+ 0x5F,
+ "10.5",
+ "-10.5",
+ "3.95E3",
+ "-3.95E3",
+ "039",
+ "0x5F",
+ true,
+ false,
+ null,
+ );
+
+foreach($values as $value) {
+ echo "\n-- floor $value --\n";
+ var_dump(floor($value));
+};
+
+?>
+===Done===
+--EXPECTF--
+*** Testing floor() : basic functionality ***
+
+-- floor 0 --
+float(0)
+
+-- floor 0 --
+float(0)
+
+-- floor 0.5 --
+float(0)
+
+-- floor -0.5 --
+float(-1)
+
+-- floor 1 --
+float(1)
+
+-- floor -1 --
+float(-1)
+
+-- floor 1.5 --
+float(1)
+
+-- floor -1.5 --
+float(-2)
+
+-- floor 2.6 --
+float(2)
+
+-- floor -2.6 --
+float(-3)
+
+-- floor 31 --
+float(31)
+
+-- floor 95 --
+float(95)
+
+-- floor 10.5 --
+float(10)
+
+-- floor -10.5 --
+float(-11)
+
+-- floor 3.95E3 --
+float(3950)
+
+-- floor -3.95E3 --
+float(-3950)
+
+-- floor 039 --
+float(39)
+
+-- floor 0x5F --
+float(95)
+
+-- floor 1 --
+float(1)
+
+-- floor --
+float(0)
+
+-- floor --
+float(0)
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/floor_error.phpt b/ext/standard/tests/math/floor_error.phpt
new file mode 100644
index 000000000..b033cfded
--- /dev/null
+++ b/ext/standard/tests/math/floor_error.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test floor() - error conditions - incorrect number of args
+--FILE--
+<?php
+/* Prototype : float floor ( float $value )
+ * Description: Round fractions down.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing floor() : error conditions ***\n";
+$arg_0 = 1.0;
+$extra_arg = 1;
+
+echo "\n-- Too many arguments --\n";
+var_dump(floor($arg_0, $extra_arg));
+
+echo "\n-- Too few arguments --\n";
+var_dump(floor());
+?>
+===Done===
+--EXPECTF--
+*** Testing floor() : error conditions ***
+
+-- Too many arguments --
+
+Warning: Wrong parameter count for floor() in %s on line %d
+NULL
+
+-- Too few arguments --
+
+Warning: Wrong parameter count for floor() in %s on line %d
+NULL
+===Done===
diff --git a/ext/standard/tests/math/floor_variation1.phpt b/ext/standard/tests/math/floor_variation1.phpt
new file mode 100644
index 000000000..baba53aab
--- /dev/null
+++ b/ext/standard/tests/math/floor_variation1.phpt
@@ -0,0 +1,128 @@
+--TEST--
+Test floor() function : usage variations - different data types as $value arg
+--INI--
+precision=14
+--FILE--
+<?php
+/* Prototype : float floor ( float $value )
+ * Description: Round fractions down.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing floor() : usage variations ***\n";
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $value argument
+$inputs = array(
+ // null data
+/* 1*/ NULL,
+ null,
+
+ // boolean data
+/* 3*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/* 7*/ "",
+ '',
+ array(),
+
+ // string data
+/*10*/ "abcxyz",
+ 'abcxyz}',
+ $heredoc,
+
+ // object data
+/*13*/ new classA(),
+
+ // undefined data
+/*14*/ @$undefined_var,
+
+ // unset data
+/*15*/ @$unset_var,
+
+ // resource variable
+/*16*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of floor()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(floor($input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing floor() : usage variations ***
+
+-- Iteration 1 --
+float(0)
+
+-- Iteration 2 --
+float(0)
+
+-- Iteration 3 --
+float(1)
+
+-- Iteration 4 --
+float(0)
+
+-- Iteration 5 --
+float(1)
+
+-- Iteration 6 --
+float(0)
+
+-- Iteration 7 --
+float(0)
+
+-- Iteration 8 --
+float(0)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+float(0)
+
+-- Iteration 11 --
+float(0)
+
+-- Iteration 12 --
+float(0)
+
+-- Iteration 13 --
+
+Notice: Object of class classA could not be converted to int in %s on line %d
+float(1)
+
+-- Iteration 14 --
+float(0)
+
+-- Iteration 15 --
+float(0)
+
+-- Iteration 16 --
+float(%f)
+===Done===
diff --git a/ext/standard/tests/math/fmod_variation1.phpt b/ext/standard/tests/math/fmod_variation1.phpt
new file mode 100644
index 000000000..9c6ab13fd
--- /dev/null
+++ b/ext/standard/tests/math/fmod_variation1.phpt
@@ -0,0 +1,184 @@
+--TEST--
+Test fmod() function : usage variations - different data types as $x argument
+--FILE--
+<?php
+/* Prototype : float fmod ( float $x , float $y )
+ * Description: Returns the floating point remainder (modulo) of the division of the arguments.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing fmod() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of fmod()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(fmod($input, 2));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing fmod() : usage variations ***
+
+-- Iteration 1 --
+float(0)
+
+-- Iteration 2 --
+float(1)
+
+-- Iteration 3 --
+float(1)
+
+-- Iteration 4 --
+float(-1)
+
+-- Iteration 5 --
+float(1)
+
+-- Iteration 6 --
+float(0.5)
+
+-- Iteration 7 --
+float(-0.5)
+
+-- Iteration 8 --
+float(0)
+
+-- Iteration 9 --
+float(1.23456789E-9)
+
+-- Iteration 10 --
+float(0.5)
+
+-- Iteration 11 --
+float(0)
+
+-- Iteration 12 --
+float(0)
+
+-- Iteration 13 --
+float(1)
+
+-- Iteration 14 --
+float(0)
+
+-- Iteration 15 --
+float(1)
+
+-- Iteration 16 --
+float(0)
+
+-- Iteration 17 --
+
+Warning: fmod() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 18 --
+
+Warning: fmod() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 19 --
+
+Warning: fmod() expects parameter 1 to be double, array given in %s on line %d
+NULL
+
+-- Iteration 20 --
+
+Warning: fmod() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 21 --
+
+Warning: fmod() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 22 --
+
+Warning: fmod() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 23 --
+
+Warning: fmod() expects parameter 1 to be double, object given in %s on line %d
+NULL
+
+-- Iteration 24 --
+float(0)
+
+-- Iteration 25 --
+float(0)
+
+-- Iteration 26 --
+
+Warning: fmod() expects parameter 1 to be double, resource given in %s on line %d
+NULL
+===Done===
diff --git a/ext/standard/tests/math/fmod_variation2.phpt b/ext/standard/tests/math/fmod_variation2.phpt
new file mode 100644
index 000000000..bbeddb687
--- /dev/null
+++ b/ext/standard/tests/math/fmod_variation2.phpt
@@ -0,0 +1,184 @@
+--TEST--
+Test fmod() function : usage variations - different data types as $y argument
+--FILE--
+<?php
+/* Prototype : float fmod ( float $x , float $y )
+ * Description: Returns the floating point remainder (modulo) of the division of the arguments.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing fmod() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of fmod()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(fmod(123456, $input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing fmod() : usage variations ***
+
+-- Iteration 1 --
+float(NAN)
+
+-- Iteration 2 --
+float(0)
+
+-- Iteration 3 --
+float(6)
+
+-- Iteration 4 --
+float(1516)
+
+-- Iteration 5 --
+float(123456)
+
+-- Iteration 6 --
+float(7.5)
+
+-- Iteration 7 --
+float(7.5)
+
+-- Iteration 8 --
+float(123456)
+
+-- Iteration 9 --
+float(2.3605615109341E-10)
+
+-- Iteration 10 --
+float(0)
+
+-- Iteration 11 --
+float(NAN)
+
+-- Iteration 12 --
+float(NAN)
+
+-- Iteration 13 --
+float(0)
+
+-- Iteration 14 --
+float(NAN)
+
+-- Iteration 15 --
+float(0)
+
+-- Iteration 16 --
+float(NAN)
+
+-- Iteration 17 --
+
+Warning: fmod() expects parameter 2 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 18 --
+
+Warning: fmod() expects parameter 2 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 19 --
+
+Warning: fmod() expects parameter 2 to be double, array given in %s on line %d
+NULL
+
+-- Iteration 20 --
+
+Warning: fmod() expects parameter 2 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 21 --
+
+Warning: fmod() expects parameter 2 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 22 --
+
+Warning: fmod() expects parameter 2 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 23 --
+
+Warning: fmod() expects parameter 2 to be double, object given in %s on line %d
+NULL
+
+-- Iteration 24 --
+float(NAN)
+
+-- Iteration 25 --
+float(NAN)
+
+-- Iteration 26 --
+
+Warning: fmod() expects parameter 2 to be double, resource given in %s on line %d
+NULL
+===Done===
diff --git a/ext/standard/tests/math/hexdec_basic_64bit.phpt b/ext/standard/tests/math/hexdec_basic_64bit.phpt
new file mode 100644
index 000000000..f1a2028b5
--- /dev/null
+++ b/ext/standard/tests/math/hexdec_basic_64bit.phpt
@@ -0,0 +1,93 @@
+--TEST--
+Test hexdec() - basic function test hexdec()
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+echo "*** Testing hexdec() : basic functionality ***\n";
+
+$values = array(0x123abc,
+ 0x789DEF,
+ 0x7FFFFFFF,
+ 0x80000000,
+ '0x123abc',
+ '0x789DEF',
+ '0x7FFFFFFF',
+ '0x80000000',
+ '0x123XYZABC',
+ 311015,
+ '311015',
+ 31101.3,
+ 31.1013e5,
+ 011237,
+ '011237',
+ true,
+ false,
+ null);
+
+foreach($values as $value) {
+ echo "\n-- hexdec $value --\n";
+ var_dump(hexdec($value));
+};
+
+?>
+===Done===
+--EXPECTF--
+*** Testing hexdec() : basic functionality ***
+
+-- hexdec 1194684 --
+int(18433668)
+
+-- hexdec 7904751 --
+int(126895953)
+
+-- hexdec 2147483647 --
+int(142929835591)
+
+-- hexdec 2147483648 --
+int(142929835592)
+
+-- hexdec 0x123abc --
+int(1194684)
+
+-- hexdec 0x789DEF --
+int(7904751)
+
+-- hexdec 0x7FFFFFFF --
+int(2147483647)
+
+-- hexdec 0x80000000 --
+int(2147483648)
+
+-- hexdec 0x123XYZABC --
+int(1194684)
+
+-- hexdec 311015 --
+int(3215381)
+
+-- hexdec 311015 --
+int(3215381)
+
+-- hexdec 31101.3 --
+int(3215379)
+
+-- hexdec 3110130 --
+int(51446064)
+
+-- hexdec 4767 --
+int(18279)
+
+-- hexdec 011237 --
+int(70199)
+
+-- hexdec 1 --
+int(1)
+
+-- hexdec --
+int(0)
+
+-- hexdec --
+int(0)
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/hexdec_error.phpt b/ext/standard/tests/math/hexdec_error.phpt
index 06ce3fb20..1e9971c5a 100644
--- a/ext/standard/tests/math/hexdec_error.phpt
+++ b/ext/standard/tests/math/hexdec_error.phpt
@@ -2,11 +2,35 @@
Test hexdec() - wrong params test hexdec()
--FILE--
<?php
+/* Prototype : number hexdec ( string $hex_string )
+ * Description: Returns the decimal equivalent of the hexadecimal number represented by the hex_string argument.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing hexdec() : error conditions ***\n";
+
+// get a class
+class classA
+{
+}
+
+echo "\n-- Incorrect number of arguments --\n";
hexdec();
hexdec('0x123abc',true);
+
+echo "\n-- Incorrect input --\n";
+hexdec(new classA());
+
?>
--EXPECTF--
+*** Testing hexdec() : error conditions ***
+
+-- Incorrect number of arguments --
+
+Warning: Wrong parameter count for hexdec() in %s on line %d
+
+Warning: Wrong parameter count for hexdec() in %s on line %d
-Warning: Wrong parameter count for hexdec() in %s on line 2
+-- Incorrect input --
-Warning: Wrong parameter count for hexdec() in %s on line 3
+Catchable fatal error: Object of class classA could not be converted to string in %s on line %d
diff --git a/ext/standard/tests/math/hexdec_variation1.phpt b/ext/standard/tests/math/hexdec_variation1.phpt
new file mode 100644
index 000000000..2b3f1b6ab
--- /dev/null
+++ b/ext/standard/tests/math/hexdec_variation1.phpt
@@ -0,0 +1,168 @@
+--TEST--
+Test hexdec() function : usage variations - different data types as $number arg
+--INI--
+precision=14
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : number hexdec ( string $hex_string )
+ * Description: Returns the decimal equivalent of the hexadecimal number represented by the hex_string argument.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing hexdec() : usage variations ***\n";
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 4294967295, // largest decimal
+ 4294967296,
+
+ // float data
+/*7*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*12*/ NULL,
+ null,
+
+ // boolean data
+/*14*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*18*/ "",
+ '',
+ array(),
+
+ // string data
+/*21*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of hexdec()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(hexdec($input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing hexdec() : usage variations ***
+
+-- Iteration 1 --
+int(0)
+
+-- Iteration 2 --
+int(1)
+
+-- Iteration 3 --
+int(74565)
+
+-- Iteration 4 --
+int(9029)
+
+-- Iteration 5 --
+float(285960729237)
+
+-- Iteration 6 --
+float(285960729238)
+
+-- Iteration 7 --
+int(261)
+
+-- Iteration 8 --
+int(261)
+
+-- Iteration 9 --
+float(20015998341120)
+
+-- Iteration 10 --
+float(1250999896553)
+
+-- Iteration 11 --
+int(5)
+
+-- Iteration 12 --
+int(0)
+
+-- Iteration 13 --
+int(0)
+
+-- Iteration 14 --
+int(1)
+
+-- Iteration 15 --
+int(0)
+
+-- Iteration 16 --
+int(1)
+
+-- Iteration 17 --
+int(0)
+
+-- Iteration 18 --
+int(0)
+
+-- Iteration 19 --
+int(0)
+
+-- Iteration 20 --
+
+Notice: Array to string conversion in %s on line %d
+int(170)
+
+-- Iteration 21 --
+int(2748)
+
+-- Iteration 22 --
+int(2748)
+
+-- Iteration 23 --
+int(2748)
+
+-- Iteration 24 --
+int(0)
+
+-- Iteration 25 --
+int(0)
+
+-- Iteration 26 --
+%s
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/hexdec_variation1_64bit.phpt b/ext/standard/tests/math/hexdec_variation1_64bit.phpt
new file mode 100644
index 000000000..65beb2d91
--- /dev/null
+++ b/ext/standard/tests/math/hexdec_variation1_64bit.phpt
@@ -0,0 +1,168 @@
+--TEST--
+Test hexdec() function : usage variations - different data types as $number arg
+--INI--
+precision=14
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : number hexdec ( string $hex_string )
+ * Description: Returns the decimal equivalent of the hexadecimal number represented by the hex_string argument.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing hexdec() : usage variations ***\n";
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 4294967295, // largest decimal
+ 4294967296,
+
+ // float data
+/*7*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*12*/ NULL,
+ null,
+
+ // boolean data
+/*14*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*18*/ "",
+ '',
+ array(),
+
+ // string data
+/*21*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of hexdec()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(hexdec($input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing hexdec() : usage variations ***
+
+-- Iteration 1 --
+int(0)
+
+-- Iteration 2 --
+int(1)
+
+-- Iteration 3 --
+int(74565)
+
+-- Iteration 4 --
+int(9029)
+
+-- Iteration 5 --
+int(285960729237)
+
+-- Iteration 6 --
+int(285960729238)
+
+-- Iteration 7 --
+int(261)
+
+-- Iteration 8 --
+int(261)
+
+-- Iteration 9 --
+int(20015998341120)
+
+-- Iteration 10 --
+int(1250999896553)
+
+-- Iteration 11 --
+int(5)
+
+-- Iteration 12 --
+int(0)
+
+-- Iteration 13 --
+int(0)
+
+-- Iteration 14 --
+int(1)
+
+-- Iteration 15 --
+int(0)
+
+-- Iteration 16 --
+int(1)
+
+-- Iteration 17 --
+int(0)
+
+-- Iteration 18 --
+int(0)
+
+-- Iteration 19 --
+int(0)
+
+-- Iteration 20 --
+
+Notice: Array to string conversion in %s on line %d
+int(170)
+
+-- Iteration 21 --
+int(2748)
+
+-- Iteration 22 --
+int(2748)
+
+-- Iteration 23 --
+int(2748)
+
+-- Iteration 24 --
+int(0)
+
+-- Iteration 25 --
+int(0)
+
+-- Iteration 26 --
+%s
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/hypot_basic.phpt b/ext/standard/tests/math/hypot_basic.phpt
new file mode 100644
index 000000000..336bf244a
--- /dev/null
+++ b/ext/standard/tests/math/hypot_basic.phpt
@@ -0,0 +1,392 @@
+--TEST--
+Test hypot() - basic function test hypot()
+--INI--
+precision=14
+--FILE--
+<?php
+
+/* Prototype : float hypot ( float $x , float $y )
+ * Description: Calculate the length of the hypotenuse of a right-angle triangle.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing hypot() : basic functionality ***\n";
+
+$valuesy = array(23,
+ -23,
+ 2.345e1,
+ -2.345e1,
+ 0x17,
+ 027,
+ "23",
+ "23.45",
+ "2.345e1",
+ "23abc",
+ null,
+ true,
+ false);
+
+$valuesx = array(33,
+ -33,
+ 3.345e1,
+ -3.345e1,
+ 0x27,
+ 037,
+ "33",
+ "43.45",
+ "1.345e1",
+ "33abc",
+ null,
+ true,
+ false);
+
+for ($i = 0; $i < count($valuesy); $i++) {
+ for ($j = 0; $j < count($valuesx); $j++) {
+ echo "\nY:$valuesy[$i] X:$valuesx[$j] ";
+ $res = hypot($valuesy[$i], $valuesx[$j]);
+ var_dump($res);
+ }
+}
+?>
+===Done===
+--EXPECTF--
+*** Testing hypot() : basic functionality ***
+
+Y:23 X:33 float(40.224370722238)
+
+Y:23 X:-33 float(40.224370722238)
+
+Y:23 X:33.45 float(40.594365372549)
+
+Y:23 X:-33.45 float(40.594365372549)
+
+Y:23 X:39 float(45.276925690687)
+
+Y:23 X:31 float(38.600518131238)
+
+Y:23 X:33 float(40.224370722238)
+
+Y:23 X:43.45 float(49.162002603637)
+
+Y:23 X:1.345e1 float(26.643995571235)
+
+Y:23 X:33abc float(40.224370722238)
+
+Y:23 X: float(23)
+
+Y:23 X:1 float(23.021728866443)
+
+Y:23 X: float(23)
+
+Y:-23 X:33 float(40.224370722238)
+
+Y:-23 X:-33 float(40.224370722238)
+
+Y:-23 X:33.45 float(40.594365372549)
+
+Y:-23 X:-33.45 float(40.594365372549)
+
+Y:-23 X:39 float(45.276925690687)
+
+Y:-23 X:31 float(38.600518131238)
+
+Y:-23 X:33 float(40.224370722238)
+
+Y:-23 X:43.45 float(49.162002603637)
+
+Y:-23 X:1.345e1 float(26.643995571235)
+
+Y:-23 X:33abc float(40.224370722238)
+
+Y:-23 X: float(23)
+
+Y:-23 X:1 float(23.021728866443)
+
+Y:-23 X: float(23)
+
+Y:23.45 X:33 float(40.483360779461)
+
+Y:23.45 X:-33 float(40.483360779461)
+
+Y:23.45 X:33.45 float(40.851009779441)
+
+Y:23.45 X:-33.45 float(40.851009779441)
+
+Y:23.45 X:39 float(45.507169764774)
+
+Y:23.45 X:31 float(38.870329301409)
+
+Y:23.45 X:33 float(40.483360779461)
+
+Y:23.45 X:43.45 float(49.374132903779)
+
+Y:23.45 X:1.345e1 float(27.033405260899)
+
+Y:23.45 X:33abc float(40.483360779461)
+
+Y:23.45 X: float(23.45)
+
+Y:23.45 X:1 float(23.471312276905)
+
+Y:23.45 X: float(23.45)
+
+Y:-23.45 X:33 float(40.483360779461)
+
+Y:-23.45 X:-33 float(40.483360779461)
+
+Y:-23.45 X:33.45 float(40.851009779441)
+
+Y:-23.45 X:-33.45 float(40.851009779441)
+
+Y:-23.45 X:39 float(45.507169764774)
+
+Y:-23.45 X:31 float(38.870329301409)
+
+Y:-23.45 X:33 float(40.483360779461)
+
+Y:-23.45 X:43.45 float(49.374132903779)
+
+Y:-23.45 X:1.345e1 float(27.033405260899)
+
+Y:-23.45 X:33abc float(40.483360779461)
+
+Y:-23.45 X: float(23.45)
+
+Y:-23.45 X:1 float(23.471312276905)
+
+Y:-23.45 X: float(23.45)
+
+Y:23 X:33 float(40.224370722238)
+
+Y:23 X:-33 float(40.224370722238)
+
+Y:23 X:33.45 float(40.594365372549)
+
+Y:23 X:-33.45 float(40.594365372549)
+
+Y:23 X:39 float(45.276925690687)
+
+Y:23 X:31 float(38.600518131238)
+
+Y:23 X:33 float(40.224370722238)
+
+Y:23 X:43.45 float(49.162002603637)
+
+Y:23 X:1.345e1 float(26.643995571235)
+
+Y:23 X:33abc float(40.224370722238)
+
+Y:23 X: float(23)
+
+Y:23 X:1 float(23.021728866443)
+
+Y:23 X: float(23)
+
+Y:23 X:33 float(40.224370722238)
+
+Y:23 X:-33 float(40.224370722238)
+
+Y:23 X:33.45 float(40.594365372549)
+
+Y:23 X:-33.45 float(40.594365372549)
+
+Y:23 X:39 float(45.276925690687)
+
+Y:23 X:31 float(38.600518131238)
+
+Y:23 X:33 float(40.224370722238)
+
+Y:23 X:43.45 float(49.162002603637)
+
+Y:23 X:1.345e1 float(26.643995571235)
+
+Y:23 X:33abc float(40.224370722238)
+
+Y:23 X: float(23)
+
+Y:23 X:1 float(23.021728866443)
+
+Y:23 X: float(23)
+
+Y:23 X:33 float(40.224370722238)
+
+Y:23 X:-33 float(40.224370722238)
+
+Y:23 X:33.45 float(40.594365372549)
+
+Y:23 X:-33.45 float(40.594365372549)
+
+Y:23 X:39 float(45.276925690687)
+
+Y:23 X:31 float(38.600518131238)
+
+Y:23 X:33 float(40.224370722238)
+
+Y:23 X:43.45 float(49.162002603637)
+
+Y:23 X:1.345e1 float(26.643995571235)
+
+Y:23 X:33abc float(40.224370722238)
+
+Y:23 X: float(23)
+
+Y:23 X:1 float(23.021728866443)
+
+Y:23 X: float(23)
+
+Y:23.45 X:33 float(40.483360779461)
+
+Y:23.45 X:-33 float(40.483360779461)
+
+Y:23.45 X:33.45 float(40.851009779441)
+
+Y:23.45 X:-33.45 float(40.851009779441)
+
+Y:23.45 X:39 float(45.507169764774)
+
+Y:23.45 X:31 float(38.870329301409)
+
+Y:23.45 X:33 float(40.483360779461)
+
+Y:23.45 X:43.45 float(49.374132903779)
+
+Y:23.45 X:1.345e1 float(27.033405260899)
+
+Y:23.45 X:33abc float(40.483360779461)
+
+Y:23.45 X: float(23.45)
+
+Y:23.45 X:1 float(23.471312276905)
+
+Y:23.45 X: float(23.45)
+
+Y:2.345e1 X:33 float(40.483360779461)
+
+Y:2.345e1 X:-33 float(40.483360779461)
+
+Y:2.345e1 X:33.45 float(40.851009779441)
+
+Y:2.345e1 X:-33.45 float(40.851009779441)
+
+Y:2.345e1 X:39 float(45.507169764774)
+
+Y:2.345e1 X:31 float(38.870329301409)
+
+Y:2.345e1 X:33 float(40.483360779461)
+
+Y:2.345e1 X:43.45 float(49.374132903779)
+
+Y:2.345e1 X:1.345e1 float(27.033405260899)
+
+Y:2.345e1 X:33abc float(40.483360779461)
+
+Y:2.345e1 X: float(23.45)
+
+Y:2.345e1 X:1 float(23.471312276905)
+
+Y:2.345e1 X: float(23.45)
+
+Y:23abc X:33 float(40.224370722238)
+
+Y:23abc X:-33 float(40.224370722238)
+
+Y:23abc X:33.45 float(40.594365372549)
+
+Y:23abc X:-33.45 float(40.594365372549)
+
+Y:23abc X:39 float(45.276925690687)
+
+Y:23abc X:31 float(38.600518131238)
+
+Y:23abc X:33 float(40.224370722238)
+
+Y:23abc X:43.45 float(49.162002603637)
+
+Y:23abc X:1.345e1 float(26.643995571235)
+
+Y:23abc X:33abc float(40.224370722238)
+
+Y:23abc X: float(23)
+
+Y:23abc X:1 float(23.021728866443)
+
+Y:23abc X: float(23)
+
+Y: X:33 float(33)
+
+Y: X:-33 float(33)
+
+Y: X:33.45 float(33.45)
+
+Y: X:-33.45 float(33.45)
+
+Y: X:39 float(39)
+
+Y: X:31 float(31)
+
+Y: X:33 float(33)
+
+Y: X:43.45 float(43.45)
+
+Y: X:1.345e1 float(13.45)
+
+Y: X:33abc float(33)
+
+Y: X: float(0)
+
+Y: X:1 float(1)
+
+Y: X: float(0)
+
+Y:1 X:33 float(33.015148038438)
+
+Y:1 X:-33 float(33.015148038438)
+
+Y:1 X:33.45 float(33.464944344792)
+
+Y:1 X:-33.45 float(33.464944344792)
+
+Y:1 X:39 float(39.012818406262)
+
+Y:1 X:31 float(31.016124838542)
+
+Y:1 X:33 float(33.015148038438)
+
+Y:1 X:43.45 float(43.461505956421)
+
+Y:1 X:1.345e1 float(13.487123488721)
+
+Y:1 X:33abc float(33.015148038438)
+
+Y:1 X: float(1)
+
+Y:1 X:1 float(1.4142135623731)
+
+Y:1 X: float(1)
+
+Y: X:33 float(33)
+
+Y: X:-33 float(33)
+
+Y: X:33.45 float(33.45)
+
+Y: X:-33.45 float(33.45)
+
+Y: X:39 float(39)
+
+Y: X:31 float(31)
+
+Y: X:33 float(33)
+
+Y: X:43.45 float(43.45)
+
+Y: X:1.345e1 float(13.45)
+
+Y: X:33abc float(33)
+
+Y: X: float(0)
+
+Y: X:1 float(1)
+
+Y: X: float(0)
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/hypot_error.phpt b/ext/standard/tests/math/hypot_error.phpt
index 19a9ee085..5cb79dfdc 100644
--- a/ext/standard/tests/math/hypot_error.phpt
+++ b/ext/standard/tests/math/hypot_error.phpt
@@ -1,18 +1,33 @@
--TEST--
Test hypot() - wrong params test hypot()
---INI--
-precision=14
--FILE--
<?php
+/* Prototype : float hypot ( float $x , float $y )
+ * Description: Calculate the length of the hypotenuse of a right-angle triangle.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing hypot() : error conditions ***\n";
+
+echo "\n-- Testing hypot() function with less than expected no. of arguments --\n";
hypot();
hypot(36);
+
+echo "\n-- Testing hypot() function with more than expected no. of arguments --\n";
hypot(36,25,0);
+
?>
+===Done===
--EXPECTF--
+*** Testing hypot() : error conditions ***
+
+-- Testing hypot() function with less than expected no. of arguments --
+Warning: Wrong parameter count for hypot() in %s on line %d
-Warning: Wrong parameter count for hypot() in %s on line 2
+Warning: Wrong parameter count for hypot() in %s on line %d
-Warning: Wrong parameter count for hypot() in %s on line 3
+-- Testing hypot() function with more than expected no. of arguments --
-Warning: Wrong parameter count for hypot() in %s on line 4
+Warning: Wrong parameter count for hypot() in %s on line %d
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/hypot_variation1.phpt b/ext/standard/tests/math/hypot_variation1.phpt
new file mode 100644
index 000000000..5d5d8b18c
--- /dev/null
+++ b/ext/standard/tests/math/hypot_variation1.phpt
@@ -0,0 +1,171 @@
+--TEST--
+Test hypot() function : usage variations - different data types as $x argument
+--FILE--
+<?php
+/* Prototype : float hypot ( float $x , float $y )
+ * Description: Calculate the length of the hypotenuse of a right-angle triangle
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing hypot() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $arg argument
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of hypot()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(hypot($input, 5));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing hypot() : usage variations ***
+
+-- Iteration 1 --
+float(5)
+
+-- Iteration 2 --
+float(5.0990195135928)
+
+-- Iteration 3 --
+float(12345.001012556)
+
+-- Iteration 4 --
+float(2345.0053304843)
+
+-- Iteration 5 --
+float(2147483647)
+
+-- Iteration 6 --
+float(11.629703349613)
+
+-- Iteration 7 --
+float(11.629703349613)
+
+-- Iteration 8 --
+float(123456789000)
+
+-- Iteration 9 --
+float(5)
+
+-- Iteration 10 --
+float(5.0249378105604)
+
+-- Iteration 11 --
+float(5)
+
+-- Iteration 12 --
+float(5)
+
+-- Iteration 13 --
+float(5.0990195135928)
+
+-- Iteration 14 --
+float(5)
+
+-- Iteration 15 --
+float(5.0990195135928)
+
+-- Iteration 16 --
+float(5)
+
+-- Iteration 17 --
+float(5)
+
+-- Iteration 18 --
+float(5)
+
+-- Iteration 19 --
+float(5)
+
+-- Iteration 20 --
+float(5)
+
+-- Iteration 21 --
+float(5)
+
+-- Iteration 22 --
+float(5)
+
+-- Iteration 23 --
+
+Notice: Object of class classA could not be converted to double in %s on line %d
+float(5.0990195135928)
+
+-- Iteration 24 --
+float(5)
+
+-- Iteration 25 --
+float(5)
+
+-- Iteration 26 --
+float(%f)
+===Done===
diff --git a/ext/standard/tests/math/hypot_variation2.phpt b/ext/standard/tests/math/hypot_variation2.phpt
new file mode 100644
index 000000000..68f71d70f
--- /dev/null
+++ b/ext/standard/tests/math/hypot_variation2.phpt
@@ -0,0 +1,171 @@
+--TEST--
+Test hypot() function : usage variations - different data types as $y argument
+--FILE--
+<?php
+/* Prototype : float hypot ( float $x , float $y )
+ * Description: Calculate the length of the hypotenuse of a right-angle triangle
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing hypot() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $arg argument
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of hypot()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(hypot(3, $input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing hypot() : usage variations ***
+
+-- Iteration 1 --
+float(3)
+
+-- Iteration 2 --
+float(3.1622776601684)
+
+-- Iteration 3 --
+float(12345.00036452)
+
+-- Iteration 4 --
+float(2345.0019189758)
+
+-- Iteration 5 --
+float(2147483647)
+
+-- Iteration 6 --
+float(10.920164833921)
+
+-- Iteration 7 --
+float(10.920164833921)
+
+-- Iteration 8 --
+float(123456789000)
+
+-- Iteration 9 --
+float(3)
+
+-- Iteration 10 --
+float(3.0413812651491)
+
+-- Iteration 11 --
+float(3)
+
+-- Iteration 12 --
+float(3)
+
+-- Iteration 13 --
+float(3.1622776601684)
+
+-- Iteration 14 --
+float(3)
+
+-- Iteration 15 --
+float(3.1622776601684)
+
+-- Iteration 16 --
+float(3)
+
+-- Iteration 17 --
+float(3)
+
+-- Iteration 18 --
+float(3)
+
+-- Iteration 19 --
+float(3)
+
+-- Iteration 20 --
+float(3)
+
+-- Iteration 21 --
+float(3)
+
+-- Iteration 22 --
+float(3)
+
+-- Iteration 23 --
+
+Notice: Object of class classA could not be converted to double in %s on line %d
+float(3.1622776601684)
+
+-- Iteration 24 --
+float(3)
+
+-- Iteration 25 --
+float(3)
+
+-- Iteration 26 --
+float(%f)
+===Done===
diff --git a/ext/standard/tests/math/is_finite_variation1.phpt b/ext/standard/tests/math/is_finite_variation1.phpt
new file mode 100644
index 000000000..83786ad93
--- /dev/null
+++ b/ext/standard/tests/math/is_finite_variation1.phpt
@@ -0,0 +1,184 @@
+--TEST--
+Test is_finite() function : usage variations - different data types as $val argument
+--FILE--
+<?php
+/* Prototype : bool is_finite ( float $val )
+ * Description: Finds whether a value is a legal finite number.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing is_finite() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of is_finite()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(is_finite($input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing is_finite() : usage variations ***
+
+-- Iteration 1 --
+bool(true)
+
+-- Iteration 2 --
+bool(true)
+
+-- Iteration 3 --
+bool(true)
+
+-- Iteration 4 --
+bool(true)
+
+-- Iteration 5 --
+bool(true)
+
+-- Iteration 6 --
+bool(true)
+
+-- Iteration 7 --
+bool(true)
+
+-- Iteration 8 --
+bool(true)
+
+-- Iteration 9 --
+bool(true)
+
+-- Iteration 10 --
+bool(true)
+
+-- Iteration 11 --
+bool(true)
+
+-- Iteration 12 --
+bool(true)
+
+-- Iteration 13 --
+bool(true)
+
+-- Iteration 14 --
+bool(true)
+
+-- Iteration 15 --
+bool(true)
+
+-- Iteration 16 --
+bool(true)
+
+-- Iteration 17 --
+
+Warning: is_finite() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 18 --
+
+Warning: is_finite() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 19 --
+
+Warning: is_finite() expects parameter 1 to be double, array given in %s on line %d
+NULL
+
+-- Iteration 20 --
+
+Warning: is_finite() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 21 --
+
+Warning: is_finite() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 22 --
+
+Warning: is_finite() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 23 --
+
+Warning: is_finite() expects parameter 1 to be double, object given in %s on line %d
+NULL
+
+-- Iteration 24 --
+bool(true)
+
+-- Iteration 25 --
+bool(true)
+
+-- Iteration 26 --
+
+Warning: is_finite() expects parameter 1 to be double, resource given in %s on line %d
+NULL
+===Done===
diff --git a/ext/standard/tests/math/is_infinite_variation1.phpt b/ext/standard/tests/math/is_infinite_variation1.phpt
new file mode 100644
index 000000000..0d8573d9b
--- /dev/null
+++ b/ext/standard/tests/math/is_infinite_variation1.phpt
@@ -0,0 +1,184 @@
+--TEST--
+Test is_infinite() function : usage variations - different data types as $val argument
+--FILE--
+<?php
+/* Prototype : bool is_finite ( float $val )
+ * Description: Finds whether a value is infinite.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing is_infinite() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of is_infinite()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(is_infinite($input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing is_infinite() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+
+Warning: is_infinite() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 18 --
+
+Warning: is_infinite() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 19 --
+
+Warning: is_infinite() expects parameter 1 to be double, array given in %s on line %d
+NULL
+
+-- Iteration 20 --
+
+Warning: is_infinite() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 21 --
+
+Warning: is_infinite() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 22 --
+
+Warning: is_infinite() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 23 --
+
+Warning: is_infinite() expects parameter 1 to be double, object given in %s on line %d
+NULL
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+
+-- Iteration 26 --
+
+Warning: is_infinite() expects parameter 1 to be double, resource given in %s on line %d
+NULL
+===Done===
diff --git a/ext/standard/tests/math/is_nan_variation1.phpt b/ext/standard/tests/math/is_nan_variation1.phpt
new file mode 100644
index 000000000..3eb642954
--- /dev/null
+++ b/ext/standard/tests/math/is_nan_variation1.phpt
@@ -0,0 +1,184 @@
+--TEST--
+Test is_nan() function : usage variations - different data types as $val argument
+--FILE--
+<?php
+/* Prototype : bool is_nan ( float $val )
+ * Description: Finds whether a value is not a number.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing is_nan() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of is_nan()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(is_nan($input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing is_nan() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+
+Warning: is_nan() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 18 --
+
+Warning: is_nan() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 19 --
+
+Warning: is_nan() expects parameter 1 to be double, array given in %s on line %d
+NULL
+
+-- Iteration 20 --
+
+Warning: is_nan() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 21 --
+
+Warning: is_nan() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 22 --
+
+Warning: is_nan() expects parameter 1 to be double, string given in %s on line %d
+NULL
+
+-- Iteration 23 --
+
+Warning: is_nan() expects parameter 1 to be double, object given in %s on line %d
+NULL
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+
+-- Iteration 26 --
+
+Warning: is_nan() expects parameter 1 to be double, resource given in %s on line %d
+NULL
+===Done===
diff --git a/ext/standard/tests/math/log1p_basic.phpt b/ext/standard/tests/math/log1p_basic.phpt
new file mode 100644
index 000000000..debadebbc
--- /dev/null
+++ b/ext/standard/tests/math/log1p_basic.phpt
@@ -0,0 +1,82 @@
+--TEST--
+Test log1p() - basic function test log1p()
+--INI--
+precision=14
+--SKIPIF--
+<?php
+ function_exists('log1p') or die('skip log1p() is not supported in this build.');
+?>
+--FILE--
+<?php
+/* Prototype : float log1p ( float $arg )
+ * Description: Returns log(1 + number), computed in a way that is accurate even
+ * when the value of number is close to zero
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing log1p() : basic functionality ***\n";
+
+$values = array(23,
+ -23,
+ 2.345e1,
+ -2.345e1,
+ 0x17,
+ 027,
+ "23",
+ "23.45",
+ "2.345e1",
+ null,
+ true,
+ false);
+
+echo "\n LOG1p tests\n";
+
+foreach($values as $value) {
+ echo "\n-- log1p $value --\n";
+ var_dump(log1p($value));
+};
+
+
+?>
+===Done===
+--EXPECTF--
+*** Testing log1p() : basic functionality ***
+
+ LOG1p tests
+
+-- log1p 23 --
+float(3.1780538303479)
+
+-- log1p -23 --
+float(NAN)
+
+-- log1p 23.45 --
+float(3.1966302159209)
+
+-- log1p -23.45 --
+float(NAN)
+
+-- log1p 23 --
+float(3.1780538303479)
+
+-- log1p 23 --
+float(3.1780538303479)
+
+-- log1p 23 --
+float(3.1780538303479)
+
+-- log1p 23.45 --
+float(3.1966302159209)
+
+-- log1p 2.345e1 --
+float(3.1966302159209)
+
+-- log1p --
+float(0)
+
+-- log1p 1 --
+float(0.69314718055995)
+
+-- log1p --
+float(0)
+===Done===
diff --git a/ext/standard/tests/math/log1p_error.phpt b/ext/standard/tests/math/log1p_error.phpt
new file mode 100644
index 000000000..63b301f9b
--- /dev/null
+++ b/ext/standard/tests/math/log1p_error.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test log1p() - Error conditions
+--SKIPIF--
+<?php
+ function_exists('log1p') or die('skip log1p() is not supported in this build.');
+?>
+--FILE--
+<?php
+/* Prototype : float log1p ( float $arg )
+ * Description: Returns log(1 + number), computed in a way that is accurate even
+ * when the value of number is close to zero
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing log1p() : error conditions ***\n";
+
+echo "\n-- Testing log1p() function with less than expected no. of arguments --\n";
+log1p();
+echo "\n-- Testing log1p() function with more than expected no. of arguments --\n";
+log1p(36, true);
+?>
+===Done===
+--EXPECTF--
+*** Testing log1p() : error conditions ***
+
+-- Testing log1p() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for log1p() in %s on line %d
+
+-- Testing log1p() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for log1p() in %s on line %d
+===Done===
diff --git a/ext/standard/tests/math/log1p_variation1.phpt b/ext/standard/tests/math/log1p_variation1.phpt
new file mode 100644
index 000000000..93df709c7
--- /dev/null
+++ b/ext/standard/tests/math/log1p_variation1.phpt
@@ -0,0 +1,181 @@
+--TEST--
+Test log1p() function : usage variations - different data types as $arg argument
+--INI--
+precision=14
+--SKIPIF--
+<?php
+ function_exists('log1p') or die('skip log1p() is not supported in this build.');
+?>
+--FILE--
+<?php
+/* Prototype : float log1p ( float $arg )
+ * Description: Returns log(1 + number), computed in a way that is accurate even
+ * when the value of number is close to zero
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing log1p() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 2147483647,
+ -2147483648,
+
+ // float data
+/*7*/ 10.5,
+ -10.5,
+ 12.3456789E4,
+ 12.3456789E-4,
+ .5,
+
+ // null data
+/*12*/ NULL,
+ null,
+
+ // boolean data
+/*14*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*18*/ "",
+ '',
+ array(),
+
+ // string data
+/*21*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*24*/ new classA(),
+
+ // undefined data
+/*25*/ @$undefined_var,
+
+ // unset data
+/*26*/ @$unset_var,
+
+ // resource variable
+/*27*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of log1p()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(log1p($input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing log1p() : usage variations ***
+
+-- Iteration 1 --
+float(0)
+
+-- Iteration 2 --
+float(0.69314718055995)
+
+-- Iteration 3 --
+float(9.4210874029538)
+
+-- Iteration 4 --
+float(NAN)
+
+-- Iteration 5 --
+float(21.487562597358)
+
+-- Iteration 6 --
+float(NAN)
+
+-- Iteration 7 --
+float(2.4423470353692)
+
+-- Iteration 8 --
+float(NAN)
+
+-- Iteration 9 --
+float(11.723654587153)
+
+-- Iteration 10 --
+float(0.0012338064377078)
+
+-- Iteration 11 --
+float(0.40546510810816)
+
+-- Iteration 12 --
+float(0)
+
+-- Iteration 13 --
+float(0)
+
+-- Iteration 14 --
+float(0.69314718055995)
+
+-- Iteration 15 --
+float(0)
+
+-- Iteration 16 --
+float(0.69314718055995)
+
+-- Iteration 17 --
+float(0)
+
+-- Iteration 18 --
+float(0)
+
+-- Iteration 19 --
+float(0)
+
+-- Iteration 20 --
+float(0)
+
+-- Iteration 21 --
+float(0)
+
+-- Iteration 22 --
+float(0)
+
+-- Iteration 23 --
+float(0)
+
+-- Iteration 24 --
+
+Notice: Object of class classA could not be converted to double in %s on line %d
+float(0.69314718055995)
+
+-- Iteration 25 --
+float(0)
+
+-- Iteration 26 --
+float(0)
+
+-- Iteration 27 --
+float(%f)
+===Done===
diff --git a/ext/standard/tests/math/log_variation1.phpt b/ext/standard/tests/math/log_variation1.phpt
new file mode 100644
index 000000000..c1a797c29
--- /dev/null
+++ b/ext/standard/tests/math/log_variation1.phpt
@@ -0,0 +1,170 @@
+--TEST--
+Test log() function : usage variations - different data types as $arg argument
+--FILE--
+<?php
+/* Prototype : float log ( float $arg [, float $base ] )
+ * Description: Natural logarithm.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing log() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of log()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(log($input, 10));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing log() : usage variations ***
+
+-- Iteration 1 --
+float(-INF)
+
+-- Iteration 2 --
+float(0)
+
+-- Iteration 3 --
+float(4.091491094268)
+
+-- Iteration 4 --
+float(NAN)
+
+-- Iteration 5 --
+float(9.3319298653812)
+
+-- Iteration 6 --
+float(1.0211892990699)
+
+-- Iteration 7 --
+float(NAN)
+
+-- Iteration 8 --
+float(11.091514977169)
+
+-- Iteration 9 --
+float(-8.9084850228307)
+
+-- Iteration 10 --
+float(-0.30102999566398)
+
+-- Iteration 11 --
+float(-INF)
+
+-- Iteration 12 --
+float(-INF)
+
+-- Iteration 13 --
+float(0)
+
+-- Iteration 14 --
+float(-INF)
+
+-- Iteration 15 --
+float(0)
+
+-- Iteration 16 --
+float(-INF)
+
+-- Iteration 17 --
+float(-INF)
+
+-- Iteration 18 --
+float(-INF)
+
+-- Iteration 19 --
+float(-INF)
+
+-- Iteration 20 --
+float(-INF)
+
+-- Iteration 21 --
+float(-INF)
+
+-- Iteration 22 --
+float(-INF)
+
+-- Iteration 23 --
+
+Notice: Object of class classA could not be converted to double in %s on line %d
+float(0)
+
+-- Iteration 24 --
+float(-INF)
+
+-- Iteration 25 --
+float(-INF)
+
+-- Iteration 26 --
+float(%f)
+===Done===
diff --git a/ext/standard/tests/math/log_variation2.phpt b/ext/standard/tests/math/log_variation2.phpt
new file mode 100644
index 000000000..837fda360
--- /dev/null
+++ b/ext/standard/tests/math/log_variation2.phpt
@@ -0,0 +1,200 @@
+--TEST--
+Test log() function : usage variations - different data types as $base argument
+--FILE--
+<?php
+/* Prototype : float log ( float $arg [, float $base ] )
+ * Description: Natural logarithm.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing log() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of log()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(log(3.14, $input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing log() : usage variations ***
+
+-- Iteration 1 --
+
+Warning: log(): base must be greater than 0 in %s on line %d
+bool(false)
+
+-- Iteration 2 --
+float(INF)
+
+-- Iteration 3 --
+float(0.12145441273706)
+
+-- Iteration 4 --
+
+Warning: log(): base must be greater than 0 in %s on line %d
+bool(false)
+
+-- Iteration 5 --
+float(0.053250469650086)
+
+-- Iteration 6 --
+float(0.48661854224853)
+
+-- Iteration 7 --
+
+Warning: log(): base must be greater than 0 in %s on line %d
+bool(false)
+
+-- Iteration 8 --
+float(0.044802684673473)
+
+-- Iteration 9 --
+float(-0.055781611216686)
+
+-- Iteration 10 --
+float(-1.6507645591169)
+
+-- Iteration 11 --
+
+Warning: log(): base must be greater than 0 in %s on line %d
+bool(false)
+
+-- Iteration 12 --
+
+Warning: log(): base must be greater than 0 in %s on line %d
+bool(false)
+
+-- Iteration 13 --
+float(INF)
+
+-- Iteration 14 --
+
+Warning: log(): base must be greater than 0 in %s on line %d
+bool(false)
+
+-- Iteration 15 --
+float(INF)
+
+-- Iteration 16 --
+
+Warning: log(): base must be greater than 0 in %s on line %d
+bool(false)
+
+-- Iteration 17 --
+
+Warning: log(): base must be greater than 0 in %s on line %d
+bool(false)
+
+-- Iteration 18 --
+
+Warning: log(): base must be greater than 0 in %s on line %d
+bool(false)
+
+-- Iteration 19 --
+
+Warning: log(): base must be greater than 0 in %s on line %d
+bool(false)
+
+-- Iteration 20 --
+
+Warning: log(): base must be greater than 0 in %s on line %d
+bool(false)
+
+-- Iteration 21 --
+
+Warning: log(): base must be greater than 0 in %s on line %d
+bool(false)
+
+-- Iteration 22 --
+
+Warning: log(): base must be greater than 0 in %s on line %d
+bool(false)
+
+-- Iteration 23 --
+
+Notice: Object of class classA could not be converted to double in %s on line %d
+float(INF)
+
+-- Iteration 24 --
+
+Warning: log(): base must be greater than 0 in %s on line %d
+bool(false)
+
+-- Iteration 25 --
+
+Warning: log(): base must be greater than 0 in %s on line %d
+bool(false)
+
+-- Iteration 26 --
+float(%f)
+===Done===
diff --git a/ext/standard/tests/math/mt_rand_variation1.phpt b/ext/standard/tests/math/mt_rand_variation1.phpt
new file mode 100644
index 000000000..f2ba9bc34
--- /dev/null
+++ b/ext/standard/tests/math/mt_rand_variation1.phpt
@@ -0,0 +1,184 @@
+--TEST--
+Test rand() function : usage variations - different data types as $min argument
+--FILE--
+<?php
+/* Prototype : int mt_rand ([ int $min , int $max ] )
+ * Description: Generate a better random value.
+ * Source code: ext/standard/rand.c
+ */
+
+echo "*** Testing mt_rand() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of mt_rand()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(mt_rand($input, 100));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing mt_rand() : usage variations ***
+
+-- Iteration 1 --
+int(%i)
+
+-- Iteration 2 --
+int(%i)
+
+-- Iteration 3 --
+int(%i)
+
+-- Iteration 4 --
+int(%i)
+
+-- Iteration 5 --
+int(%i)
+
+-- Iteration 6 --
+int(%i)
+
+-- Iteration 7 --
+int(%i)
+
+-- Iteration 8 --
+int(%i)
+
+-- Iteration 9 --
+int(%i)
+
+-- Iteration 10 --
+int(%i)
+
+-- Iteration 11 --
+int(%i)
+
+-- Iteration 12 --
+int(%i)
+
+-- Iteration 13 --
+int(%i)
+
+-- Iteration 14 --
+int(%i)
+
+-- Iteration 15 --
+int(%i)
+
+-- Iteration 16 --
+int(%i)
+
+-- Iteration 17 --
+
+Warning: mt_rand() expects parameter 1 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 18 --
+
+Warning: mt_rand() expects parameter 1 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 19 --
+
+Warning: mt_rand() expects parameter 1 to be long, array given in %s on line %d
+NULL
+
+-- Iteration 20 --
+
+Warning: mt_rand() expects parameter 1 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 21 --
+
+Warning: mt_rand() expects parameter 1 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 22 --
+
+Warning: mt_rand() expects parameter 1 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 23 --
+
+Warning: mt_rand() expects parameter 1 to be long, object given in %s on line %d
+NULL
+
+-- Iteration 24 --
+int(%i)
+
+-- Iteration 25 --
+int(%i)
+
+-- Iteration 26 --
+
+Warning: mt_rand() expects parameter 1 to be long, resource given in %s on line %d
+NULL
+===Done===
diff --git a/ext/standard/tests/math/mt_rand_variation2.phpt b/ext/standard/tests/math/mt_rand_variation2.phpt
new file mode 100644
index 000000000..28b2304a3
--- /dev/null
+++ b/ext/standard/tests/math/mt_rand_variation2.phpt
@@ -0,0 +1,184 @@
+--TEST--
+Test mt_rand() function : usage variations - different data types as $max argument
+--FILE--
+<?php
+/* Prototype : int mt_rand ([ int $min , int $max ] )
+ * Description: Generate a better random value.
+ * Source code: ext/standard/rand.c
+ */
+
+echo "*** Testing mt_rand) : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of mt_rand()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(mt_rand(100, $input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing mt_rand) : usage variations ***
+
+-- Iteration 1 --
+int(%i)
+
+-- Iteration 2 --
+int(%i)
+
+-- Iteration 3 --
+int(%i)
+
+-- Iteration 4 --
+int(%i)
+
+-- Iteration 5 --
+int(%i)
+
+-- Iteration 6 --
+int(%i)
+
+-- Iteration 7 --
+int(%i)
+
+-- Iteration 8 --
+int(%i)
+
+-- Iteration 9 --
+int(%i)
+
+-- Iteration 10 --
+int(%i)
+
+-- Iteration 11 --
+int(%i)
+
+-- Iteration 12 --
+int(%i)
+
+-- Iteration 13 --
+int(%i)
+
+-- Iteration 14 --
+int(%i)
+
+-- Iteration 15 --
+int(%i)
+
+-- Iteration 16 --
+int(%i)
+
+-- Iteration 17 --
+
+Warning: mt_rand() expects parameter 2 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 18 --
+
+Warning: mt_rand() expects parameter 2 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 19 --
+
+Warning: mt_rand() expects parameter 2 to be long, array given in %s on line %d
+NULL
+
+-- Iteration 20 --
+
+Warning: mt_rand() expects parameter 2 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 21 --
+
+Warning: mt_rand() expects parameter 2 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 22 --
+
+Warning: mt_rand() expects parameter 2 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 23 --
+
+Warning: mt_rand() expects parameter 2 to be long, object given in %s on line %d
+NULL
+
+-- Iteration 24 --
+int(%i)
+
+-- Iteration 25 --
+int(%i)
+
+-- Iteration 26 --
+
+Warning: mt_rand() expects parameter 2 to be long, resource given in %s on line %d
+NULL
+===Done===
diff --git a/ext/standard/tests/math/mt_srand_variation1.phpt b/ext/standard/tests/math/mt_srand_variation1.phpt
new file mode 100644
index 000000000..feb0b3797
--- /dev/null
+++ b/ext/standard/tests/math/mt_srand_variation1.phpt
@@ -0,0 +1,184 @@
+--TEST--
+Test mt_srand() function : usage variations - different data types as $seed argument
+--FILE--
+<?php
+/* Prototype : void mt_srand ([ int $seed ] )
+ * Description: Seed the better random number generator.
+ * Source code: ext/standard/rand.c
+ */
+
+echo "*** Testing mt_srand() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of mt_srand()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(mt_srand($input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing mt_srand() : usage variations ***
+
+-- Iteration 1 --
+NULL
+
+-- Iteration 2 --
+NULL
+
+-- Iteration 3 --
+NULL
+
+-- Iteration 4 --
+NULL
+
+-- Iteration 5 --
+NULL
+
+-- Iteration 6 --
+NULL
+
+-- Iteration 7 --
+NULL
+
+-- Iteration 8 --
+NULL
+
+-- Iteration 9 --
+NULL
+
+-- Iteration 10 --
+NULL
+
+-- Iteration 11 --
+NULL
+
+-- Iteration 12 --
+NULL
+
+-- Iteration 13 --
+NULL
+
+-- Iteration 14 --
+NULL
+
+-- Iteration 15 --
+NULL
+
+-- Iteration 16 --
+NULL
+
+-- Iteration 17 --
+
+Warning: mt_srand() expects parameter 1 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 18 --
+
+Warning: mt_srand() expects parameter 1 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 19 --
+
+Warning: mt_srand() expects parameter 1 to be long, array given in %s on line %d
+NULL
+
+-- Iteration 20 --
+
+Warning: mt_srand() expects parameter 1 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 21 --
+
+Warning: mt_srand() expects parameter 1 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 22 --
+
+Warning: mt_srand() expects parameter 1 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 23 --
+
+Warning: mt_srand() expects parameter 1 to be long, object given in %s on line %d
+NULL
+
+-- Iteration 24 --
+NULL
+
+-- Iteration 25 --
+NULL
+
+-- Iteration 26 --
+
+Warning: mt_srand() expects parameter 1 to be long, resource given in %s on line %d
+NULL
+===Done===
diff --git a/ext/standard/tests/math/octdec_basic_64bit.phpt b/ext/standard/tests/math/octdec_basic_64bit.phpt
new file mode 100644
index 000000000..b5bccbcc9
--- /dev/null
+++ b/ext/standard/tests/math/octdec_basic_64bit.phpt
@@ -0,0 +1,54 @@
+--TEST--
+Test octdec() - basic function test octdec()
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+echo "*** Testing octdec() : basic functionality ***\n";
+
+$values = array(01234567,
+ 0567,
+ 017777777777,
+ 020000000000,
+ 0x1234ABC,
+ 12345,
+ '01234567',
+ '0567',
+ '017777777777',
+ '020000000000',
+ '0x1234ABC',
+ '12345',
+ 31101.3,
+ 31.1013e5,
+ true,
+ false,
+ null);
+
+for ($i = 0; $i < count($values); $i++) {
+ $res = octdec($values[$i]);
+ var_dump($res);
+}
+?>
+===Done===
+--EXPECTF--
+*** Testing octdec() : basic functionality ***
+int(14489)
+int(253)
+int(36947879)
+int(4618484)
+int(4104)
+int(5349)
+int(342391)
+int(375)
+int(2147483647)
+int(2147483648)
+int(668)
+int(5349)
+int(102923)
+int(823384)
+int(1)
+int(0)
+int(0)
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/octdec_error.phpt b/ext/standard/tests/math/octdec_error.phpt
index 8a3d1759a..fb855585b 100644
--- a/ext/standard/tests/math/octdec_error.phpt
+++ b/ext/standard/tests/math/octdec_error.phpt
@@ -2,11 +2,36 @@
Test octdec() - wrong params test octdec()
--FILE--
<?php
+/* Prototype : number octdec ( string $octal_string )
+ * Description: Returns the decimal equivalent of the octal number represented by the octal_string argument.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing octdec() : error conditions ***\n";
+
+// get a class
+class classA
+{
+}
+
+echo "\n-- Incorrect number of arguments --\n";
octdec();
octdec('0123567',true);
+
+echo "\n-- Incorrect input --\n";
+octdec(new classA());
+
+
?>
--EXPECTF--
+*** Testing octdec() : error conditions ***
+
+-- Incorrect number of arguments --
+
+Warning: Wrong parameter count for octdec() in %s on line %d
+
+Warning: Wrong parameter count for octdec() in %s on line %d
-Warning: Wrong parameter count for octdec() in %s on line 2
+-- Incorrect input --
-Warning: Wrong parameter count for octdec() in %s on line 3
+Catchable fatal error: Object of class classA could not be converted to string in %s on line %d
diff --git a/ext/standard/tests/math/octdec_variation1.phpt b/ext/standard/tests/math/octdec_variation1.phpt
new file mode 100644
index 000000000..117119600
--- /dev/null
+++ b/ext/standard/tests/math/octdec_variation1.phpt
@@ -0,0 +1,164 @@
+--TEST--
+Test octdec() function : usage variations - different data types as $octal_string arg
+--INI--
+precision=14
+--FILE--
+<?php
+/* Prototype : number octdec ( string $octal_string )
+ * Description: Returns the decimal equivalent of the octal number represented by the octal_string argument.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing octdec() : usage variations ***\n";
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 4294967295, // largest decimal
+ 4294967296,
+
+ // float data
+/*7*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*12*/ NULL,
+ null,
+
+ // boolean data
+/*14*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*18*/ "",
+ '',
+ array(),
+
+ // string data
+/*21*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of octdec()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(octdec($input));
+ $iterator++;
+};
+fclose($fp);
+?>
+---Done---
+--EXPECTF--
+*** Testing octdec() : usage variations ***
+
+-- Iteration 1 --
+int(0)
+
+-- Iteration 2 --
+int(1)
+
+-- Iteration 3 --
+int(5349)
+
+-- Iteration 4 --
+int(1253)
+
+-- Iteration 5 --
+int(1134037)
+
+-- Iteration 6 --
+int(1134038)
+
+-- Iteration 7 --
+int(69)
+
+-- Iteration 8 --
+int(69)
+
+-- Iteration 9 --
+int(175304192)
+
+-- Iteration 10 --
+int(342391)
+
+-- Iteration 11 --
+int(5)
+
+-- Iteration 12 --
+int(0)
+
+-- Iteration 13 --
+int(0)
+
+-- Iteration 14 --
+int(1)
+
+-- Iteration 15 --
+int(0)
+
+-- Iteration 16 --
+int(1)
+
+-- Iteration 17 --
+int(0)
+
+-- Iteration 18 --
+int(0)
+
+-- Iteration 19 --
+int(0)
+
+-- Iteration 20 --
+
+Notice: Array to string conversion in %s on line %d
+int(0)
+
+-- Iteration 21 --
+int(0)
+
+-- Iteration 22 --
+int(0)
+
+-- Iteration 23 --
+int(0)
+
+-- Iteration 24 --
+int(0)
+
+-- Iteration 25 --
+int(0)
+
+-- Iteration 26 --
+int(%d)
+---Done---
diff --git a/ext/standard/tests/math/pow_basic.phpt b/ext/standard/tests/math/pow_basic.phpt
index 96864e0ab..0fdb158b5 100644
--- a/ext/standard/tests/math/pow_basic.phpt
+++ b/ext/standard/tests/math/pow_basic.phpt
@@ -2,36 +2,288 @@
Test pow() - basic function test pow()
--INI--
precision=14
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
--FILE--
<?php
-$values = array(23,
+$bases = array(23,
-23,
+ 23.1,
+ -23,1,
2.345e1,
-2.345e1,
0x17,
027,
"23",
"23.45",
- "2.345e1",
- null,
- true,
- false);
-
-for ($i = 0; $i < count($values); $i++) {
- $res = pow($values[$i], 4);
- var_dump($res);
+ "2.345e1",
+ PHP_INT_MAX,
+ -PHP_INT_MAX - 1);
+
+$exponents = array(0,
+ 1,
+ -1,
+ 2,
+ -2,
+ 3,
+ -3,
+ 2.5,
+ -2.5,
+ 500,
+ -500,
+ 2147483647,
+ -2147483648);
+
+foreach($bases as $base) {
+ echo "\n\nBase = $base";
+ foreach($exponents as $exponent) {
+ echo "\n..... Exponent = $exponent Result = ";
+ $res = pow($base, $exponent);
+ echo $res;
+ }
+ echo "\n\n";
}
?>
+===Done===
--EXPECTF--
-int(279841)
-int(279841)
-float(302392.75950625)
-float(302392.75950625)
-int(279841)
-int(279841)
-int(279841)
-float(302392.75950625)
-float(302392.75950625)
-int(0)
-int(1)
-int(0) \ No newline at end of file
+
+
+Base = 23
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = 23
+..... Exponent = -1 Result = 0.043478260869565
+..... Exponent = 2 Result = 529
+..... Exponent = -2 Result = 0.001890359168242
+..... Exponent = 3 Result = 12167
+..... Exponent = -3 Result = 8.2189529053999E-5
+..... Exponent = 2.5 Result = 2536.9948758324
+..... Exponent = -2.5 Result = 0.00039416713432339
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = -23
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = -23
+..... Exponent = -1 Result = -0.043478260869565
+..... Exponent = 2 Result = 529
+..... Exponent = -2 Result = 0.001890359168242
+..... Exponent = 3 Result = -12167
+..... Exponent = -3 Result = -8.2189529053999E-5
+..... Exponent = 2.5 Result = NAN
+..... Exponent = -2.5 Result = NAN
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = -INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = 23.1
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = 23.1
+..... Exponent = -1 Result = 0.043290043290043
+..... Exponent = 2 Result = 533.61
+..... Exponent = -2 Result = 0.0018740278480538
+..... Exponent = 3 Result = 12326.391
+..... Exponent = -3 Result = 8.1126746668997E-5
+..... Exponent = 2.5 Result = 2564.6608940579
+..... Exponent = -2.5 Result = 0.00038991509650141
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = -23
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = -23
+..... Exponent = -1 Result = -0.043478260869565
+..... Exponent = 2 Result = 529
+..... Exponent = -2 Result = 0.001890359168242
+..... Exponent = 3 Result = -12167
+..... Exponent = -3 Result = -8.2189529053999E-5
+..... Exponent = 2.5 Result = NAN
+..... Exponent = -2.5 Result = NAN
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = -INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = 1
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = 1
+..... Exponent = -1 Result = 1
+..... Exponent = 2 Result = 1
+..... Exponent = -2 Result = 1
+..... Exponent = 3 Result = 1
+..... Exponent = -3 Result = 1
+..... Exponent = 2.5 Result = 1
+..... Exponent = -2.5 Result = 1
+..... Exponent = 500 Result = 1
+..... Exponent = -500 Result = 1
+..... Exponent = 2147483647 Result = 1
+..... Exponent = -2147483648 Result = 1
+
+
+
+Base = 23.45
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = 23.45
+..... Exponent = -1 Result = 0.042643923240938
+..... Exponent = 2 Result = 549.9025
+..... Exponent = -2 Result = 0.001818504189379
+..... Exponent = 3 Result = 12895.213625
+..... Exponent = -3 Result = 7.7548153065204E-5
+..... Exponent = 2.5 Result = 2662.9138571162
+..... Exponent = -2.5 Result = 0.00037552848257846
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = -23.45
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = -23.45
+..... Exponent = -1 Result = -0.042643923240938
+..... Exponent = 2 Result = 549.9025
+..... Exponent = -2 Result = 0.001818504189379
+..... Exponent = 3 Result = -12895.213625
+..... Exponent = -3 Result = -7.7548153065204E-5
+..... Exponent = 2.5 Result = NAN
+..... Exponent = -2.5 Result = NAN
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = -INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = 23
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = 23
+..... Exponent = -1 Result = 0.043478260869565
+..... Exponent = 2 Result = 529
+..... Exponent = -2 Result = 0.001890359168242
+..... Exponent = 3 Result = 12167
+..... Exponent = -3 Result = 8.2189529053999E-5
+..... Exponent = 2.5 Result = 2536.9948758324
+..... Exponent = -2.5 Result = 0.00039416713432339
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = 23
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = 23
+..... Exponent = -1 Result = 0.043478260869565
+..... Exponent = 2 Result = 529
+..... Exponent = -2 Result = 0.001890359168242
+..... Exponent = 3 Result = 12167
+..... Exponent = -3 Result = 8.2189529053999E-5
+..... Exponent = 2.5 Result = 2536.9948758324
+..... Exponent = -2.5 Result = 0.00039416713432339
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = 23
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = 23
+..... Exponent = -1 Result = 0.043478260869565
+..... Exponent = 2 Result = 529
+..... Exponent = -2 Result = 0.001890359168242
+..... Exponent = 3 Result = 12167
+..... Exponent = -3 Result = 8.2189529053999E-5
+..... Exponent = 2.5 Result = 2536.9948758324
+..... Exponent = -2.5 Result = 0.00039416713432339
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = 23.45
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = 23.45
+..... Exponent = -1 Result = 0.042643923240938
+..... Exponent = 2 Result = 549.9025
+..... Exponent = -2 Result = 0.001818504189379
+..... Exponent = 3 Result = 12895.213625
+..... Exponent = -3 Result = 7.7548153065204E-5
+..... Exponent = 2.5 Result = 2662.9138571162
+..... Exponent = -2.5 Result = 0.00037552848257846
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = 2.345e1
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = 23.45
+..... Exponent = -1 Result = 0.042643923240938
+..... Exponent = 2 Result = 549.9025
+..... Exponent = -2 Result = 0.001818504189379
+..... Exponent = 3 Result = 12895.213625
+..... Exponent = -3 Result = 7.7548153065204E-5
+..... Exponent = 2.5 Result = 2662.9138571162
+..... Exponent = -2.5 Result = 0.00037552848257846
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = 2147483647
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = 2147483647
+..... Exponent = -1 Result = 4.6566128752458E-10
+..... Exponent = 2 Result = 4.6116860141324E+18
+..... Exponent = -2 Result = 2.1684043469905E-19
+..... Exponent = 3 Result = 9.903520300448E+27
+..... Exponent = -3 Result = 1.0097419600935E-28
+..... Exponent = 2.5 Result = 2.1370991100146E+23
+..... Exponent = -2.5 Result = 4.6792401686657E-24
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = -2147483648
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = -2147483648
+..... Exponent = -1 Result = -4.6566128730774E-10
+..... Exponent = 2 Result = 4.6116860184274E+18
+..... Exponent = -2 Result = 2.168404344971E-19
+..... Exponent = 3 Result = -9.903520314283E+27
+..... Exponent = -3 Result = -1.0097419586829E-28
+..... Exponent = 2.5 Result = NAN
+..... Exponent = -2.5 Result = NAN
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = -INF
+..... Exponent = -2147483648 Result = 0
+
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/pow_basic2.phpt b/ext/standard/tests/math/pow_basic2.phpt
new file mode 100644
index 000000000..fc55cacca
--- /dev/null
+++ b/ext/standard/tests/math/pow_basic2.phpt
@@ -0,0 +1,52 @@
+--TEST--
+Test pow() - basic function test pow() - with large exponents
+--INI--
+precision=14
+--FILE--
+<?php
+
+$large_exp = 20000;
+
+echo "\n-- The following all result in INF --\n";
+var_dump(pow(24, $large_exp));
+var_dump(pow(0.24, -$large_exp));
+var_dump(pow(-0.24, -$large_exp));
+
+echo "\n\n-- The following all result in 0 --\n";
+var_dump(pow(0.24, $large_exp));
+var_dump(pow(-0.24, $large_exp));
+var_dump(pow(24, -$large_exp));
+var_dump(pow(-24, -$large_exp));
+
+echo "\n\n-- The following all result in -0 --\n";
+var_dump(pow(-0.24, $large_exp+1));
+
+echo "\n\n-- The following all result in -INF --\n";
+var_dump(pow(-24, $large_exp+1));
+var_dump(pow(-0.24, -$large_exp+1));
+
+?>
+===Done===
+--EXPECTF--
+
+-- The following all result in INF --
+float(INF)
+float(INF)
+float(INF)
+
+
+-- The following all result in 0 --
+float(0)
+float(0)
+float(0)
+float(0)
+
+
+-- The following all result in -0 --
+float(%s)
+
+
+-- The following all result in -INF --
+float(-INF)
+float(-INF)
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/pow_basic_64bit.phpt b/ext/standard/tests/math/pow_basic_64bit.phpt
new file mode 100644
index 000000000..339154142
--- /dev/null
+++ b/ext/standard/tests/math/pow_basic_64bit.phpt
@@ -0,0 +1,287 @@
+--TEST--
+Test pow() - basic function test pow()
+--INI--
+precision=14
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+$bases = array(23,
+ -23,
+ 23.1,
+ -23,1,
+ 2.345e1,
+ -2.345e1,
+ 0x17,
+ 027,
+ "23",
+ "23.45",
+ "2.345e1",
+ PHP_INT_MAX,
+ -PHP_INT_MAX - 1);
+
+$exponents = array(0,
+ 1,
+ -1,
+ 2,
+ -2,
+ 3,
+ -3,
+ 2.5,
+ -2.5,
+ 500,
+ -500,
+ 2147483647,
+ -2147483648);
+
+foreach($bases as $base) {
+ echo "\n\nBase = $base";
+ foreach($exponents as $exponent) {
+ echo "\n..... Exponent = $exponent Result = ";
+ $res = pow($base, $exponent);
+ echo $res;
+ }
+ echo "\n\n";
+}
+?>
+===Done===
+--EXPECTF--
+Base = 23
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = 23
+..... Exponent = -1 Result = 0.043478260869565
+..... Exponent = 2 Result = 529
+..... Exponent = -2 Result = 0.001890359168242
+..... Exponent = 3 Result = 12167
+..... Exponent = -3 Result = 8.2189529053999E-5
+..... Exponent = 2.5 Result = 2536.9948758324
+..... Exponent = -2.5 Result = 0.00039416713432339
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = -23
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = -23
+..... Exponent = -1 Result = -0.043478260869565
+..... Exponent = 2 Result = 529
+..... Exponent = -2 Result = 0.001890359168242
+..... Exponent = 3 Result = -12167
+..... Exponent = -3 Result = -8.2189529053999E-5
+..... Exponent = 2.5 Result = NAN
+..... Exponent = -2.5 Result = NAN
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = -INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = 23.1
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = 23.1
+..... Exponent = -1 Result = 0.043290043290043
+..... Exponent = 2 Result = 533.61
+..... Exponent = -2 Result = 0.0018740278480538
+..... Exponent = 3 Result = 12326.391
+..... Exponent = -3 Result = 8.1126746668997E-5
+..... Exponent = 2.5 Result = 2564.6608940579
+..... Exponent = -2.5 Result = 0.00038991509650141
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = -23
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = -23
+..... Exponent = -1 Result = -0.043478260869565
+..... Exponent = 2 Result = 529
+..... Exponent = -2 Result = 0.001890359168242
+..... Exponent = 3 Result = -12167
+..... Exponent = -3 Result = -8.2189529053999E-5
+..... Exponent = 2.5 Result = NAN
+..... Exponent = -2.5 Result = NAN
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = -INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = 1
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = 1
+..... Exponent = -1 Result = 1
+..... Exponent = 2 Result = 1
+..... Exponent = -2 Result = 1
+..... Exponent = 3 Result = 1
+..... Exponent = -3 Result = 1
+..... Exponent = 2.5 Result = 1
+..... Exponent = -2.5 Result = 1
+..... Exponent = 500 Result = 1
+..... Exponent = -500 Result = 1
+..... Exponent = 2147483647 Result = 1
+..... Exponent = -2147483648 Result = 1
+
+
+
+Base = 23.45
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = 23.45
+..... Exponent = -1 Result = 0.042643923240938
+..... Exponent = 2 Result = 549.9025
+..... Exponent = -2 Result = 0.001818504189379
+..... Exponent = 3 Result = 12895.213625
+..... Exponent = -3 Result = 7.7548153065204E-5
+..... Exponent = 2.5 Result = 2662.9138571162
+..... Exponent = -2.5 Result = 0.00037552848257846
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = -23.45
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = -23.45
+..... Exponent = -1 Result = -0.042643923240938
+..... Exponent = 2 Result = 549.9025
+..... Exponent = -2 Result = 0.001818504189379
+..... Exponent = 3 Result = -12895.213625
+..... Exponent = -3 Result = -7.7548153065204E-5
+..... Exponent = 2.5 Result = NAN
+..... Exponent = -2.5 Result = NAN
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = -INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = 23
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = 23
+..... Exponent = -1 Result = 0.043478260869565
+..... Exponent = 2 Result = 529
+..... Exponent = -2 Result = 0.001890359168242
+..... Exponent = 3 Result = 12167
+..... Exponent = -3 Result = 8.2189529053999E-5
+..... Exponent = 2.5 Result = 2536.9948758324
+..... Exponent = -2.5 Result = 0.00039416713432339
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = 23
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = 23
+..... Exponent = -1 Result = 0.043478260869565
+..... Exponent = 2 Result = 529
+..... Exponent = -2 Result = 0.001890359168242
+..... Exponent = 3 Result = 12167
+..... Exponent = -3 Result = 8.2189529053999E-5
+..... Exponent = 2.5 Result = 2536.9948758324
+..... Exponent = -2.5 Result = 0.00039416713432339
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = 23
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = 23
+..... Exponent = -1 Result = 0.043478260869565
+..... Exponent = 2 Result = 529
+..... Exponent = -2 Result = 0.001890359168242
+..... Exponent = 3 Result = 12167
+..... Exponent = -3 Result = 8.2189529053999E-5
+..... Exponent = 2.5 Result = 2536.9948758324
+..... Exponent = -2.5 Result = 0.00039416713432339
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = 23.45
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = 23.45
+..... Exponent = -1 Result = 0.042643923240938
+..... Exponent = 2 Result = 549.9025
+..... Exponent = -2 Result = 0.001818504189379
+..... Exponent = 3 Result = 12895.213625
+..... Exponent = -3 Result = 7.7548153065204E-5
+..... Exponent = 2.5 Result = 2662.9138571162
+..... Exponent = -2.5 Result = 0.00037552848257846
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = 2.345e1
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = 23.45
+..... Exponent = -1 Result = 0.042643923240938
+..... Exponent = 2 Result = 549.9025
+..... Exponent = -2 Result = 0.001818504189379
+..... Exponent = 3 Result = 12895.213625
+..... Exponent = -3 Result = 7.7548153065204E-5
+..... Exponent = 2.5 Result = 2662.9138571162
+..... Exponent = -2.5 Result = 0.00037552848257846
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = 9223372036854775807
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = 9223372036854775807
+..... Exponent = -1 Result = 1.0842021724855E-19
+..... Exponent = 2 Result = 8.5070591730235E+37
+..... Exponent = -2 Result = 1.1754943508223E-38
+..... Exponent = 3 Result = 7.8463771692334E+56
+..... Exponent = -3 Result = 1.274473528906E-57
+..... Exponent = 2.5 Result = 2.5835942961798E+47
+..... Exponent = -2.5 Result = 3.8705767444936E-48
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = INF
+..... Exponent = -2147483648 Result = 0
+
+
+
+Base = -9223372036854775808
+..... Exponent = 0 Result = 1
+..... Exponent = 1 Result = -9223372036854775808
+..... Exponent = -1 Result = -1.0842021724855E-19
+..... Exponent = 2 Result = 8.5070591730235E+37
+..... Exponent = -2 Result = 1.1754943508223E-38
+..... Exponent = 3 Result = -7.8463771692334E+56
+..... Exponent = -3 Result = -1.274473528906E-57
+..... Exponent = 2.5 Result = NAN
+..... Exponent = -2.5 Result = NAN
+..... Exponent = 500 Result = INF
+..... Exponent = -500 Result = 0
+..... Exponent = 2147483647 Result = -INF
+..... Exponent = -2147483648 Result = 0
+
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/pow_variation1.phpt b/ext/standard/tests/math/pow_variation1.phpt
new file mode 100644
index 000000000..df511906b
--- /dev/null
+++ b/ext/standard/tests/math/pow_variation1.phpt
@@ -0,0 +1,176 @@
+--TEST--
+Test pow() function : usage variations - different data types as $base argument
+--INI--
+precision = 14
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : number pow ( number $base , number $exp )
+ * Description: Exponential expression.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing pow() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ PHP_INT_MAX,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of pow()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(pow($input, 3));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing pow() : usage variations ***
+
+-- Iteration 1 --
+int(0)
+
+-- Iteration 2 --
+int(1)
+
+-- Iteration 3 --
+float(1881365963625)
+
+-- Iteration 4 --
+float(-12895213625)
+
+-- Iteration 5 --
+float(9.903520300448E+27)
+
+-- Iteration 6 --
+float(1157.625)
+
+-- Iteration 7 --
+float(-1157.625)
+
+-- Iteration 8 --
+float(1.881676371789%dE+33)
+
+-- Iteration 9 --
+float(1.881676371789%dE-27)
+
+-- Iteration 10 --
+float(0.125)
+
+-- Iteration 11 --
+int(0)
+
+-- Iteration 12 --
+int(0)
+
+-- Iteration 13 --
+int(1)
+
+-- Iteration 14 --
+int(0)
+
+-- Iteration 15 --
+int(1)
+
+-- Iteration 16 --
+int(0)
+
+-- Iteration 17 --
+int(0)
+
+-- Iteration 18 --
+int(0)
+
+-- Iteration 19 --
+float(0)
+
+-- Iteration 20 --
+int(0)
+
+-- Iteration 21 --
+int(0)
+
+-- Iteration 22 --
+int(0)
+
+-- Iteration 23 --
+
+Notice: Object of class classA could not be converted to int in %s on line %d
+int(1)
+
+-- Iteration 24 --
+int(0)
+
+-- Iteration 25 --
+int(0)
+
+-- Iteration 26 --
+%s
+===Done===
diff --git a/ext/standard/tests/math/pow_variation1_64bit.phpt b/ext/standard/tests/math/pow_variation1_64bit.phpt
new file mode 100644
index 000000000..24b482680
--- /dev/null
+++ b/ext/standard/tests/math/pow_variation1_64bit.phpt
@@ -0,0 +1,176 @@
+--TEST--
+Test pow() function : usage variations - different data types as $base argument
+--INI--
+precision = 14
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : number pow ( number $base , number $exp )
+ * Description: Exponential expression.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing pow() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ PHP_INT_MAX,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of pow()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(pow($input, 3));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing pow() : usage variations ***
+
+-- Iteration 1 --
+int(0)
+
+-- Iteration 2 --
+int(1)
+
+-- Iteration 3 --
+int(1881365963625)
+
+-- Iteration 4 --
+int(-12895213625)
+
+-- Iteration 5 --
+float(7.8463771692334E+56)
+
+-- Iteration 6 --
+float(1157.625)
+
+-- Iteration 7 --
+float(-1157.625)
+
+-- Iteration 8 --
+float(1.8816763717892E+33)
+
+-- Iteration 9 --
+float(1.8816763717892E-27)
+
+-- Iteration 10 --
+float(0.125)
+
+-- Iteration 11 --
+int(0)
+
+-- Iteration 12 --
+int(0)
+
+-- Iteration 13 --
+int(1)
+
+-- Iteration 14 --
+int(0)
+
+-- Iteration 15 --
+int(1)
+
+-- Iteration 16 --
+int(0)
+
+-- Iteration 17 --
+int(0)
+
+-- Iteration 18 --
+int(0)
+
+-- Iteration 19 --
+float(0)
+
+-- Iteration 20 --
+int(0)
+
+-- Iteration 21 --
+int(0)
+
+-- Iteration 22 --
+int(0)
+
+-- Iteration 23 --
+
+Notice: Object of class classA could not be converted to int in %s on line %d
+int(1)
+
+-- Iteration 24 --
+int(0)
+
+-- Iteration 25 --
+int(0)
+
+-- Iteration 26 --
+%s
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/pow_variation2.phpt b/ext/standard/tests/math/pow_variation2.phpt
new file mode 100644
index 000000000..b1800bb15
--- /dev/null
+++ b/ext/standard/tests/math/pow_variation2.phpt
@@ -0,0 +1,172 @@
+--TEST--
+Test pow() function : usage variations - different data types as $exp argument
+--INI--
+precision = 14
+--FILE--
+<?php
+/* Prototype : number pow ( number $base , number $exp )
+ * Description: Exponential expression.
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing pow() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 2147483647,
+
+ // float data
+/*6*/ 2.5,
+ -2.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of pow()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(pow(20.3, $input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing pow() : usage variations ***
+
+-- Iteration 1 --
+float(1)
+
+-- Iteration 2 --
+float(20.3)
+
+-- Iteration 3 --
+float(INF)
+
+-- Iteration 4 --
+float(0)
+
+-- Iteration 5 --
+float(INF)
+
+-- Iteration 6 --
+float(1856.6929774279)
+
+-- Iteration 7 --
+float(0.00053859200856424)
+
+-- Iteration 8 --
+float(INF)
+
+-- Iteration 9 --
+float(1.0000000037168)
+
+-- Iteration 10 --
+float(4.5055521304275)
+
+-- Iteration 11 --
+float(1)
+
+-- Iteration 12 --
+float(1)
+
+-- Iteration 13 --
+float(20.3)
+
+-- Iteration 14 --
+float(1)
+
+-- Iteration 15 --
+float(20.3)
+
+-- Iteration 16 --
+float(1)
+
+-- Iteration 17 --
+float(1)
+
+-- Iteration 18 --
+float(1)
+
+-- Iteration 19 --
+float(1)
+
+-- Iteration 20 --
+float(1)
+
+-- Iteration 21 --
+float(1)
+
+-- Iteration 22 --
+float(1)
+
+-- Iteration 23 --
+
+Notice: Object of class classA could not be converted to int in %s on line %d
+float(20.3)
+
+-- Iteration 24 --
+float(1)
+
+-- Iteration 25 --
+float(1)
+
+-- Iteration 26 --
+%s
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/rand_variation1.phpt b/ext/standard/tests/math/rand_variation1.phpt
new file mode 100644
index 000000000..02e552b78
--- /dev/null
+++ b/ext/standard/tests/math/rand_variation1.phpt
@@ -0,0 +1,184 @@
+--TEST--
+Test rand() function : usage variations - different data types as $min argument
+--FILE--
+<?php
+/* Prototype : int rand ([ int $min , int $max ] )
+ * Description: Generate a random integer.
+ * Source code: ext/standard/rand.c
+ */
+
+echo "*** Testing rand() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of rand()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(rand($input, 100));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing rand() : usage variations ***
+
+-- Iteration 1 --
+int(%i)
+
+-- Iteration 2 --
+int(%i)
+
+-- Iteration 3 --
+int(%i)
+
+-- Iteration 4 --
+int(%i)
+
+-- Iteration 5 --
+int(%i)
+
+-- Iteration 6 --
+int(%i)
+
+-- Iteration 7 --
+int(%i)
+
+-- Iteration 8 --
+int(%i)
+
+-- Iteration 9 --
+int(%i)
+
+-- Iteration 10 --
+int(%i)
+
+-- Iteration 11 --
+int(%i)
+
+-- Iteration 12 --
+int(%i)
+
+-- Iteration 13 --
+int(%i)
+
+-- Iteration 14 --
+int(%i)
+
+-- Iteration 15 --
+int(%i)
+
+-- Iteration 16 --
+int(%i)
+
+-- Iteration 17 --
+
+Warning: rand() expects parameter 1 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 18 --
+
+Warning: rand() expects parameter 1 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 19 --
+
+Warning: rand() expects parameter 1 to be long, array given in %s on line %d
+NULL
+
+-- Iteration 20 --
+
+Warning: rand() expects parameter 1 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 21 --
+
+Warning: rand() expects parameter 1 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 22 --
+
+Warning: rand() expects parameter 1 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 23 --
+
+Warning: rand() expects parameter 1 to be long, object given in %s on line %d
+NULL
+
+-- Iteration 24 --
+int(%i)
+
+-- Iteration 25 --
+int(%i)
+
+-- Iteration 26 --
+
+Warning: rand() expects parameter 1 to be long, resource given in %s on line %d
+NULL
+===Done===
diff --git a/ext/standard/tests/math/rand_variation2.phpt b/ext/standard/tests/math/rand_variation2.phpt
new file mode 100644
index 000000000..c0e1fc637
--- /dev/null
+++ b/ext/standard/tests/math/rand_variation2.phpt
@@ -0,0 +1,184 @@
+--TEST--
+Test rand() function : usage variations - different data types as $max argument
+--FILE--
+<?php
+/* Prototype : int rand ([ int $min , int $max ] )
+ * Description: Generate a random integer.
+ * Source code: ext/standard/rand.c
+ */
+
+echo "*** Testing rand) : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of rand()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(rand(100, $input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing rand) : usage variations ***
+
+-- Iteration 1 --
+int(%i)
+
+-- Iteration 2 --
+int(%i)
+
+-- Iteration 3 --
+int(%i)
+
+-- Iteration 4 --
+int(%i)
+
+-- Iteration 5 --
+int(%i)
+
+-- Iteration 6 --
+int(%i)
+
+-- Iteration 7 --
+int(%i)
+
+-- Iteration 8 --
+int(%i)
+
+-- Iteration 9 --
+int(%i)
+
+-- Iteration 10 --
+int(%i)
+
+-- Iteration 11 --
+int(%i)
+
+-- Iteration 12 --
+int(%i)
+
+-- Iteration 13 --
+int(%i)
+
+-- Iteration 14 --
+int(%i)
+
+-- Iteration 15 --
+int(%i)
+
+-- Iteration 16 --
+int(%i)
+
+-- Iteration 17 --
+
+Warning: rand() expects parameter 2 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 18 --
+
+Warning: rand() expects parameter 2 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 19 --
+
+Warning: rand() expects parameter 2 to be long, array given in %s on line %d
+NULL
+
+-- Iteration 20 --
+
+Warning: rand() expects parameter 2 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 21 --
+
+Warning: rand() expects parameter 2 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 22 --
+
+Warning: rand() expects parameter 2 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 23 --
+
+Warning: rand() expects parameter 2 to be long, object given in %s on line %d
+NULL
+
+-- Iteration 24 --
+int(%i)
+
+-- Iteration 25 --
+int(%i)
+
+-- Iteration 26 --
+
+Warning: rand() expects parameter 2 to be long, resource given in %s on line %d
+NULL
+===Done===
diff --git a/ext/standard/tests/math/round_basic.phpt b/ext/standard/tests/math/round_basic.phpt
new file mode 100644
index 000000000..3384522f8
--- /dev/null
+++ b/ext/standard/tests/math/round_basic.phpt
@@ -0,0 +1,192 @@
+--TEST--
+Test round() - basic function test for round()
+--INI--
+precision=14
+--FILE--
+<?php
+/* Prototype : float round ( float $val [, int $precision ] )
+ * Description: Returns the rounded value of val to specified precision (number of digits
+ * after the decimal point)
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing round() : basic functionality ***\n";
+
+$values = array(123456789,
+ 123.456789,
+ -4.5679123,
+ 1.23E4,
+ -4.567E3,
+ 0x234567,
+ 067777777,
+ "1.234567",
+ "2.3456789e8",
+ "0x1234CDEF");
+
+$precision = array(2,
+ 8,
+ 0x3,
+ 04,
+ 3.6,
+ "2",
+ "0x03",
+ "04",
+ "3.6",
+ "2.1e1",
+ null,
+ true,
+ false);
+
+for ($i = 0; $i < count($values); $i++) {
+ echo "round: $values[$i]\n";
+ for ($j = 0; $j < count($precision); $j++) {
+ $res = round($values[$i], $precision[$j]);
+ echo "...with precision $precision[$j]-> ";
+ var_dump($res);
+ }
+}
+?>
+===Done===
+--EXPECTF--
+*** Testing round() : basic functionality ***
+round: 123456789
+...with precision 2-> float(123456789)
+...with precision 8-> float(123456789)
+...with precision 3-> float(123456789)
+...with precision 4-> float(123456789)
+...with precision 3.6-> float(123456789)
+...with precision 2-> float(123456789)
+...with precision 0x03-> float(123456789)
+...with precision 04-> float(123456789)
+...with precision 3.6-> float(123456789)
+...with precision 2.1e1-> float(123456789)
+...with precision -> float(123456789)
+...with precision 1-> float(123456789)
+...with precision -> float(123456789)
+round: 123.456789
+...with precision 2-> float(123.46)
+...with precision 8-> float(123.456789)
+...with precision 3-> float(123.457)
+...with precision 4-> float(123.4568)
+...with precision 3.6-> float(123.457)
+...with precision 2-> float(123.46)
+...with precision 0x03-> float(123)
+...with precision 04-> float(123.4568)
+...with precision 3.6-> float(123.457)
+...with precision 2.1e1-> float(123.46)
+...with precision -> float(123)
+...with precision 1-> float(123.5)
+...with precision -> float(123)
+round: -4.5679123
+...with precision 2-> float(-4.57)
+...with precision 8-> float(-4.5679123)
+...with precision 3-> float(-4.568)
+...with precision 4-> float(-4.5679)
+...with precision 3.6-> float(-4.568)
+...with precision 2-> float(-4.57)
+...with precision 0x03-> float(-5)
+...with precision 04-> float(-4.5679)
+...with precision 3.6-> float(-4.568)
+...with precision 2.1e1-> float(-4.57)
+...with precision -> float(-5)
+...with precision 1-> float(-4.6)
+...with precision -> float(-5)
+round: 12300
+...with precision 2-> float(12300)
+...with precision 8-> float(12300)
+...with precision 3-> float(12300)
+...with precision 4-> float(12300)
+...with precision 3.6-> float(12300)
+...with precision 2-> float(12300)
+...with precision 0x03-> float(12300)
+...with precision 04-> float(12300)
+...with precision 3.6-> float(12300)
+...with precision 2.1e1-> float(12300)
+...with precision -> float(12300)
+...with precision 1-> float(12300)
+...with precision -> float(12300)
+round: -4567
+...with precision 2-> float(-4567)
+...with precision 8-> float(-4567)
+...with precision 3-> float(-4567)
+...with precision 4-> float(-4567)
+...with precision 3.6-> float(-4567)
+...with precision 2-> float(-4567)
+...with precision 0x03-> float(-4567)
+...with precision 04-> float(-4567)
+...with precision 3.6-> float(-4567)
+...with precision 2.1e1-> float(-4567)
+...with precision -> float(-4567)
+...with precision 1-> float(-4567)
+...with precision -> float(-4567)
+round: 2311527
+...with precision 2-> float(2311527)
+...with precision 8-> float(2311527)
+...with precision 3-> float(2311527)
+...with precision 4-> float(2311527)
+...with precision 3.6-> float(2311527)
+...with precision 2-> float(2311527)
+...with precision 0x03-> float(2311527)
+...with precision 04-> float(2311527)
+...with precision 3.6-> float(2311527)
+...with precision 2.1e1-> float(2311527)
+...with precision -> float(2311527)
+...with precision 1-> float(2311527)
+...with precision -> float(2311527)
+round: 14680063
+...with precision 2-> float(14680063)
+...with precision 8-> float(14680063)
+...with precision 3-> float(14680063)
+...with precision 4-> float(14680063)
+...with precision 3.6-> float(14680063)
+...with precision 2-> float(14680063)
+...with precision 0x03-> float(14680063)
+...with precision 04-> float(14680063)
+...with precision 3.6-> float(14680063)
+...with precision 2.1e1-> float(14680063)
+...with precision -> float(14680063)
+...with precision 1-> float(14680063)
+...with precision -> float(14680063)
+round: 1.234567
+...with precision 2-> float(1.23)
+...with precision 8-> float(1.234567)
+...with precision 3-> float(1.235)
+...with precision 4-> float(1.2346)
+...with precision 3.6-> float(1.235)
+...with precision 2-> float(1.23)
+...with precision 0x03-> float(1)
+...with precision 04-> float(1.2346)
+...with precision 3.6-> float(1.235)
+...with precision 2.1e1-> float(1.23)
+...with precision -> float(1)
+...with precision 1-> float(1.2)
+...with precision -> float(1)
+round: 2.3456789e8
+...with precision 2-> float(234567890)
+...with precision 8-> float(234567890)
+...with precision 3-> float(234567890)
+...with precision 4-> float(234567890)
+...with precision 3.6-> float(234567890)
+...with precision 2-> float(234567890)
+...with precision 0x03-> float(234567890)
+...with precision 04-> float(234567890)
+...with precision 3.6-> float(234567890)
+...with precision 2.1e1-> float(234567890)
+...with precision -> float(234567890)
+...with precision 1-> float(234567890)
+...with precision -> float(234567890)
+round: 0x1234CDEF
+...with precision 2-> float(305450479)
+...with precision 8-> float(305450479)
+...with precision 3-> float(305450479)
+...with precision 4-> float(305450479)
+...with precision 3.6-> float(305450479)
+...with precision 2-> float(305450479)
+...with precision 0x03-> float(305450479)
+...with precision 04-> float(305450479)
+...with precision 3.6-> float(305450479)
+...with precision 2.1e1-> float(305450479)
+...with precision -> float(305450479)
+...with precision 1-> float(305450479)
+...with precision -> float(305450479)
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/round_error.phpt b/ext/standard/tests/math/round_error.phpt
new file mode 100644
index 000000000..d0a66201c
--- /dev/null
+++ b/ext/standard/tests/math/round_error.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test round() function : error conditions - incorrect number of args
+--FILE--
+<?php
+/* Prototype : float round ( float $val [, int $precision ] )
+ * Description: Returns the rounded value of val to specified precision (number of digits
+ * after the decimal point)
+ * Source code: ext/standard/math.c
+ */
+
+/*
+ * Pass incorrect number of arguments to round() to test behaviour
+ */
+
+echo "*** Testing round() : error conditions ***\n";
+
+echo "\n-- Wrong nmumber of arguments --\n";
+var_dump(round());
+var_dump(round(500, 10, true));
+
+?>
+===Done===
+--EXPECTF--
+*** Testing round() : error conditions ***
+
+-- Wrong nmumber of arguments --
+
+Warning: Wrong parameter count for round() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for round() in %s on line %d
+NULL
+===Done===
diff --git a/ext/standard/tests/math/round_variation1.phpt b/ext/standard/tests/math/round_variation1.phpt
new file mode 100644
index 000000000..c89dd6818
--- /dev/null
+++ b/ext/standard/tests/math/round_variation1.phpt
@@ -0,0 +1,173 @@
+--TEST--
+Test round() function : usage variations - different data types as $val argument
+--INI--
+precision=14
+--FILE--
+<?php
+/* Prototype : float round ( float $val [, int $precision ] )
+ * Description: Returns the rounded value of val to specified precision (number of digits
+ * after the decimal point)
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing round() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of round()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(round($input, 14));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing round() : usage variations ***
+
+-- Iteration 1 --
+float(0)
+
+-- Iteration 2 --
+float(1)
+
+-- Iteration 3 --
+float(12345)
+
+-- Iteration 4 --
+float(-2345)
+
+-- Iteration 5 --
+float(2147483647)
+
+-- Iteration 6 --
+float(10.5)
+
+-- Iteration 7 --
+float(-10.5)
+
+-- Iteration 8 --
+float(123456789000)
+
+-- Iteration 9 --
+float(1.23457E-9)
+
+-- Iteration 10 --
+float(0.5)
+
+-- Iteration 11 --
+float(0)
+
+-- Iteration 12 --
+float(0)
+
+-- Iteration 13 --
+float(1)
+
+-- Iteration 14 --
+float(0)
+
+-- Iteration 15 --
+float(1)
+
+-- Iteration 16 --
+float(0)
+
+-- Iteration 17 --
+float(0)
+
+-- Iteration 18 --
+float(0)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+float(0)
+
+-- Iteration 21 --
+float(0)
+
+-- Iteration 22 --
+float(0)
+
+-- Iteration 23 --
+
+Notice: Object of class classA could not be converted to int in %s on line %d
+float(1)
+
+-- Iteration 24 --
+float(0)
+
+-- Iteration 25 --
+float(0)
+
+-- Iteration 26 --
+float(%f)
+===Done===
diff --git a/ext/standard/tests/math/round_variation2.phpt b/ext/standard/tests/math/round_variation2.phpt
new file mode 100644
index 000000000..e3287e1b5
--- /dev/null
+++ b/ext/standard/tests/math/round_variation2.phpt
@@ -0,0 +1,173 @@
+--TEST--
+Test round() function : usage variations - different data types as $precision argument
+--INI--
+precision=14
+--FILE--
+<?php
+/* Prototype : float round ( float $val [, int $precision ] )
+ * Description: Returns the rounded value of val to specified precision (number of digits
+ * after the decimal point)
+ * Source code: ext/standard/math.c
+ */
+
+echo "*** Testing round() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 12.3456789000e5,
+ 12.3456789000E-5,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of round()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(round(123.4456789, $input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing round() : usage variations ***
+
+-- Iteration 1 --
+float(123)
+
+-- Iteration 2 --
+float(123.4)
+
+-- Iteration 3 --
+float(123.4456789)
+
+-- Iteration 4 --
+float(0)
+
+-- Iteration 5 --
+float(123.4456789)
+
+-- Iteration 6 --
+float(123.4456789)
+
+-- Iteration 7 --
+float(0)
+
+-- Iteration 8 --
+float(123.4456789)
+
+-- Iteration 9 --
+float(123)
+
+-- Iteration 10 --
+float(123)
+
+-- Iteration 11 --
+float(123)
+
+-- Iteration 12 --
+float(123)
+
+-- Iteration 13 --
+float(123.4)
+
+-- Iteration 14 --
+float(123)
+
+-- Iteration 15 --
+float(123.4)
+
+-- Iteration 16 --
+float(123)
+
+-- Iteration 17 --
+float(123)
+
+-- Iteration 18 --
+float(123)
+
+-- Iteration 19 --
+float(123)
+
+-- Iteration 20 --
+float(123)
+
+-- Iteration 21 --
+float(123)
+
+-- Iteration 22 --
+float(123)
+
+-- Iteration 23 --
+
+Notice: Object of class classA could not be converted to int in %s on line %d
+float(123.4)
+
+-- Iteration 24 --
+float(123)
+
+-- Iteration 25 --
+float(123)
+
+-- Iteration 26 --
+float(%f)
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/math/sqrt_variation.phpt b/ext/standard/tests/math/sqrt_variation.phpt
new file mode 100644
index 000000000..8d2be5371
--- /dev/null
+++ b/ext/standard/tests/math/sqrt_variation.phpt
@@ -0,0 +1,174 @@
+--TEST--
+Test variations in usage of sqrt()
+--INI--
+precision = 14
+--FILE--
+<?php
+/*
+ * proto float sqrt(float number)
+ * Function is implemented in ext/standard/math.c
+*/
+
+
+echo "*** Testing sqrt() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of sqrt()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(sqrt($input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing sqrt() : usage variations ***
+
+-- Iteration 1 --
+float(0)
+
+-- Iteration 2 --
+float(1)
+
+-- Iteration 3 --
+float(111.10805551354)
+
+-- Iteration 4 --
+float(NAN)
+
+-- Iteration 5 --
+float(46340.950001052)
+
+-- Iteration 6 --
+float(3.2403703492039)
+
+-- Iteration 7 --
+float(NAN)
+
+-- Iteration 8 --
+float(351364.18286445)
+
+-- Iteration 9 --
+float(3.5136418286445E-5)
+
+-- Iteration 10 --
+float(0.70710678118655)
+
+-- Iteration 11 --
+float(0)
+
+-- Iteration 12 --
+float(0)
+
+-- Iteration 13 --
+float(1)
+
+-- Iteration 14 --
+float(0)
+
+-- Iteration 15 --
+float(1)
+
+-- Iteration 16 --
+float(0)
+
+-- Iteration 17 --
+float(0)
+
+-- Iteration 18 --
+float(0)
+
+-- Iteration 19 --
+float(0)
+
+-- Iteration 20 --
+float(0)
+
+-- Iteration 21 --
+float(0)
+
+-- Iteration 22 --
+float(0)
+
+-- Iteration 23 --
+
+Notice: Object of class classA could not be converted to double in %s on line %d
+float(1)
+
+-- Iteration 24 --
+float(0)
+
+-- Iteration 25 --
+float(0)
+
+-- Iteration 26 --
+float(%f)
+===Done===
+
diff --git a/ext/standard/tests/math/srand_basic.phpt b/ext/standard/tests/math/srand_basic.phpt
index 16aa2dd69..b56ad10ac 100644
--- a/ext/standard/tests/math/srand_basic.phpt
+++ b/ext/standard/tests/math/srand_basic.phpt
@@ -1,7 +1,14 @@
--TEST--
-Maths test for xapic versions of srand()
+Test srand() - basic function test for srand()
--FILE--
<?php
+/* Prototype : void srand ([ int $seed ] )
+ * Description: Seed the random number generator.
+ * Source code: ext/standard/rand.c
+ */
+
+echo "*** Testing srand() : basic functionality ***\n";
+
// Should return NULL if given anything that it can convert to long
// This doesn't actually test what it does with the input :-\
var_dump(srand());
@@ -13,7 +20,9 @@ var_dump(srand(true));
var_dump(srand(false));
var_dump(srand(NULL));
?>
+===Done===
--EXPECTF--
+*** Testing srand() : basic functionality ***
NULL
NULL
NULL
@@ -21,4 +30,5 @@ NULL
NULL
NULL
NULL
-NULL \ No newline at end of file
+NULL
+===Done===
diff --git a/ext/standard/tests/math/srand_error.phpt b/ext/standard/tests/math/srand_error.phpt
index 852867222..4c21e5572 100644
--- a/ext/standard/tests/math/srand_error.phpt
+++ b/ext/standard/tests/math/srand_error.phpt
@@ -1,17 +1,32 @@
--TEST--
-Test srand() - wrong params test srand()
+Test srand() function : error conditions - incorrect number of args
--FILE--
<?php
-var_dump(mt_srand(500, true));
-var_dump(mt_srand("fivehundred"));
-var_dump(mt_srand("500ABC"));
+/* Prototype : void srand ([ int $seed ] )
+ * Description: Seed the random number generator.
+ * Source code: ext/standard/rand.c
+ */
+
+/*
+ * Pass incorrect number of arguments to srand() to test behaviour
+ */
+
+echo "*** Testing srand() : error conditions ***\n";
+
+var_dump(srand(500, true));
+var_dump(srand("fivehundred"));
+var_dump(srand("500ABC"));
?>
+===Done===
--EXPECTF--
-Warning: mt_srand() expects at most 1 parameter, 2 given in %s on line 2
+*** Testing srand() : error conditions ***
+
+Warning: srand() expects at most 1 parameter, 2 given in %s on line %d
NULL
-Warning: mt_srand() expects parameter 1 to be long, string given in %s on line 3
+Warning: srand() expects parameter 1 to be long, string given in %s on line %d
NULL
-Notice: A non well formed numeric value encountered in %s on line 4
+Notice: A non well formed numeric value encountered in %s on line %d
NULL
+===Done===
diff --git a/ext/standard/tests/math/srand_variation1.phpt b/ext/standard/tests/math/srand_variation1.phpt
new file mode 100644
index 000000000..16da80fd6
--- /dev/null
+++ b/ext/standard/tests/math/srand_variation1.phpt
@@ -0,0 +1,184 @@
+--TEST--
+Test srand() function : usage variations - different data types as $seed argument
+--FILE--
+<?php
+/* Prototype : void srand ([ int $seed ] )
+ * Description: Seed the random number generator.
+ * Source code: ext/standard/rand.c
+ */
+
+echo "*** Testing srand() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// heredoc string
+$heredoc = <<<EOT
+abc
+xyz
+EOT;
+
+// get a class
+class classA
+{
+}
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+$inputs = array(
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+ 2147483647,
+
+ // float data
+/*6*/ 10.5,
+ -10.5,
+ 12.3456789000e10,
+ 12.3456789000E-10,
+ .5,
+
+ // null data
+/*11*/ NULL,
+ null,
+
+ // boolean data
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*17*/ "",
+ '',
+ array(),
+
+ // string data
+/*20*/ "abcxyz",
+ 'abcxyz',
+ $heredoc,
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
+);
+
+// loop through each element of $inputs to check the behaviour of srand()
+$iterator = 1;
+foreach($inputs as $input) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump(srand($input));
+ $iterator++;
+};
+fclose($fp);
+?>
+===Done===
+--EXPECTF--
+*** Testing srand() : usage variations ***
+
+-- Iteration 1 --
+NULL
+
+-- Iteration 2 --
+NULL
+
+-- Iteration 3 --
+NULL
+
+-- Iteration 4 --
+NULL
+
+-- Iteration 5 --
+NULL
+
+-- Iteration 6 --
+NULL
+
+-- Iteration 7 --
+NULL
+
+-- Iteration 8 --
+NULL
+
+-- Iteration 9 --
+NULL
+
+-- Iteration 10 --
+NULL
+
+-- Iteration 11 --
+NULL
+
+-- Iteration 12 --
+NULL
+
+-- Iteration 13 --
+NULL
+
+-- Iteration 14 --
+NULL
+
+-- Iteration 15 --
+NULL
+
+-- Iteration 16 --
+NULL
+
+-- Iteration 17 --
+
+Warning: srand() expects parameter 1 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 18 --
+
+Warning: srand() expects parameter 1 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 19 --
+
+Warning: srand() expects parameter 1 to be long, array given in %s on line %d
+NULL
+
+-- Iteration 20 --
+
+Warning: srand() expects parameter 1 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 21 --
+
+Warning: srand() expects parameter 1 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 22 --
+
+Warning: srand() expects parameter 1 to be long, string given in %s on line %d
+NULL
+
+-- Iteration 23 --
+
+Warning: srand() expects parameter 1 to be long, object given in %s on line %d
+NULL
+
+-- Iteration 24 --
+NULL
+
+-- Iteration 25 --
+NULL
+
+-- Iteration 26 --
+
+Warning: srand() expects parameter 1 to be long, resource given in %s on line %d
+NULL
+===Done===
diff --git a/ext/standard/tests/misc/syslog_basic.phpt b/ext/standard/tests/misc/syslog_basic.phpt
new file mode 100644
index 000000000..6c627e918
--- /dev/null
+++ b/ext/standard/tests/misc/syslog_basic.phpt
@@ -0,0 +1,13 @@
+--TEST--
+Basic syslog test
+--FILE--
+<?php
+openlog('phpt', LOG_NDELAY | LOG_PID, LOG_USER);
+
+syslog(LOG_WARNING, 'Basic syslog test');
+
+closelog();
+?>
+===DONE===
+--EXPECT--
+===DONE===
diff --git a/ext/standard/tests/misc/syslog_parameters.phpt b/ext/standard/tests/misc/syslog_parameters.phpt
new file mode 100644
index 000000000..f4b651973
--- /dev/null
+++ b/ext/standard/tests/misc/syslog_parameters.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Syslog parameter parsing test
+--FILE--
+<?php
+openlog();
+openlog(NULL, 'string', 0);
+
+syslog();
+syslog('Wrong parameter order', LOG_WARNING);
+
+closelog('Doesnt take any parameters');
+?>
+--EXPECTF--
+Warning: openlog() expects exactly 3 parameters, 0 given in %s on line %d
+
+Warning: openlog() expects parameter 2 to be long, string given in %s on line %d
+
+Warning: syslog() expects exactly 2 parameters, 0 given in %s on line %d
+
+Warning: syslog() expects parameter 1 to be long, string given in %s on line %d
+
+Warning: Wrong parameter count for closelog() in %s on line %d
diff --git a/ext/standard/tests/misc/syslog_vars_variation1.phpt b/ext/standard/tests/misc/syslog_vars_variation1.phpt
new file mode 100644
index 000000000..7cac8adf6
--- /dev/null
+++ b/ext/standard/tests/misc/syslog_vars_variation1.phpt
@@ -0,0 +1,10 @@
+--TEST--
+define_syslog_variables() variation 1
+--INI--
+define_syslog_variables=On
+--FILE--
+<?php
+var_dump(isset($LOG_ERR));
+?>
+--EXPECTF--
+bool(true)
diff --git a/ext/standard/tests/misc/syslog_vars_variation2.phpt b/ext/standard/tests/misc/syslog_vars_variation2.phpt
new file mode 100644
index 000000000..07acb8075
--- /dev/null
+++ b/ext/standard/tests/misc/syslog_vars_variation2.phpt
@@ -0,0 +1,51 @@
+--TEST--
+define_syslog_variables() variation 2
+--FILE--
+<?php
+define_syslog_variables();
+
+$standard_types = Array(
+ 'LOG_EMERG',
+ 'LOG_ALERT',
+ 'LOG_CRIT',
+ 'LOG_ERR',
+ 'LOG_WARNING',
+ 'LOG_NOTICE',
+ 'LOG_INFO',
+ 'LOG_DEBUG',
+ 'LOG_KERN',
+ 'LOG_USER',
+ 'LOG_MAIL',
+ 'LOG_DAEMON',
+ 'LOG_AUTH',
+ 'LOG_LPR',
+ 'LOG_PID',
+ 'LOG_CONS',
+ 'LOG_ODELAY',
+ 'LOG_NDELAY'
+ );
+
+foreach($standard_types as $logtype)
+{
+ var_dump(isset(${$logtype}));
+}
+?>
+--EXPECTF--
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
diff --git a/ext/standard/tests/network/closelog_basic.phpt b/ext/standard/tests/network/closelog_basic.phpt
new file mode 100644
index 000000000..06798a5c1
--- /dev/null
+++ b/ext/standard/tests/network/closelog_basic.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Test closelog() function : basic functionality
+--FILE--
+<?php
+/* Prototype : bool closelog(void)
+ * Description: Close connection to system logger
+ * Source code: ext/standard/syslog.c
+ * Alias to functions:
+ */
+
+echo "*** Testing closelog() : basic functionality ***\n";
+
+// Zero arguments
+echo "\n-- Testing closelog() function with Zero arguments --\n";
+var_dump( closelog() );
+?>
+===DONE===
+--EXPECT--
+*** Testing closelog() : basic functionality ***
+
+-- Testing closelog() function with Zero arguments --
+bool(true)
+===DONE===
diff --git a/ext/standard/tests/network/closelog_error.phpt b/ext/standard/tests/network/closelog_error.phpt
new file mode 100644
index 000000000..e759e35a7
--- /dev/null
+++ b/ext/standard/tests/network/closelog_error.phpt
@@ -0,0 +1,27 @@
+--TEST--
+Test closelog() function : error conditions
+--FILE--
+<?php
+/* Prototype : bool closelog(void)
+ * Description: Close connection to system logger
+ * Source code: ext/standard/syslog.c
+ * Alias to functions:
+ */
+
+echo "*** Testing closelog() : error conditions ***\n";
+
+// One argument
+echo "\n-- Testing closelog() function with one argument --\n";
+$extra_arg = 10;;
+var_dump( closelog($extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing closelog() : error conditions ***
+
+-- Testing closelog() function with one argument --
+
+Warning: Wrong parameter count for closelog() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/network/define_syslog_variables_basic-win32.phpt b/ext/standard/tests/network/define_syslog_variables_basic-win32.phpt
new file mode 100644
index 000000000..5a07239e8
--- /dev/null
+++ b/ext/standard/tests/network/define_syslog_variables_basic-win32.phpt
@@ -0,0 +1,105 @@
+--TEST--
+Test define_syslog_variables() function : basic functionality
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Only run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : void define_syslog_variables(void)
+ * Description: Initializes all syslog-related variables
+ * Source code: ext/standard/syslog.c
+ * Alias to functions:
+ */
+
+echo "*** Testing define_syslog_variables() : basic functionality ***\n";
+
+$log_constants = array(
+ LOG_EMERG,
+ LOG_ALERT,
+ LOG_CRIT,
+ LOG_ERR,
+ LOG_WARNING,
+ LOG_NOTICE,
+ LOG_INFO,
+ LOG_DEBUG,
+ LOG_KERN,
+ LOG_USER,
+ LOG_MAIL,
+ LOG_DAEMON,
+ LOG_AUTH,
+ LOG_SYSLOG,
+ LOG_LPR,
+ LOG_NEWS,
+ LOG_UUCP,
+ LOG_CRON,
+ LOG_AUTHPRIV,
+ LOG_PID,
+ LOG_CONS,
+ LOG_ODELAY,
+ LOG_NDELAY,
+ LOG_NOWAIT,
+ LOG_PERROR,
+);
+
+
+$log_variables = array(
+ "LOG_EMERG",
+ "LOG_ALERT",
+ "LOG_CRIT",
+ "LOG_ERR",
+ "LOG_WARNING",
+ "LOG_NOTICE",
+ "LOG_INFO",
+ "LOG_DEBUG",
+ "LOG_KERN",
+ "LOG_USER",
+ "LOG_MAIL",
+ "LOG_DAEMON",
+ "LOG_AUTH",
+ "LOG_SYSLOG",
+ "LOG_LPR",
+ "LOG_NEWS",
+ "LOG_UUCP",
+ "LOG_CRON",
+ "LOG_AUTHPRIV",
+ "LOG_PID",
+ "LOG_CONS",
+ "LOG_ODELAY",
+ "LOG_NDELAY",
+ "LOG_NOWAIT",
+ "LOG_PERROR",
+);
+
+error_reporting(E_ALL);
+$failed = false;
+
+// show variables not defined
+foreach($log_variables as $log_var) {
+ if (isset($$log_var)) {
+ $failed = true;
+ echo "FAILED: variable defined\n";
+ }
+}
+
+var_dump( define_syslog_variables() );
+
+// show variables defined
+for ($t = 0; $t < count($log_variables); $t++) {
+ if (isset($$log_variables[$t]) === false || $$log_variables[$t] != $log_constants[$t]) {
+ $failed = true;
+ echo "FAILED: $log_variables[$t] doesn't contain the correct value\n";
+ }
+}
+
+if ($failed == false) {
+ echo "PASSED\n";
+}
+?>
+===DONE===
+--EXPECT--
+*** Testing define_syslog_variables() : basic functionality ***
+NULL
+PASSED
+===DONE===
diff --git a/ext/standard/tests/network/define_syslog_variables_basic.phpt b/ext/standard/tests/network/define_syslog_variables_basic.phpt
new file mode 100644
index 000000000..836c0b30f
--- /dev/null
+++ b/ext/standard/tests/network/define_syslog_variables_basic.phpt
@@ -0,0 +1,124 @@
+--TEST--
+Test define_syslog_variables() function : basic functionality
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip don't run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : void define_syslog_variables(void)
+ * Description: Initializes all syslog-related variables
+ * Source code: ext/standard/syslog.c
+ * Alias to functions:
+ */
+
+echo "*** Testing define_syslog_variables() : basic functionality ***\n";
+
+$log_constants = array(
+ LOG_EMERG,
+ LOG_ALERT,
+ LOG_CRIT,
+ LOG_ERR,
+ LOG_WARNING,
+ LOG_NOTICE,
+ LOG_INFO,
+ LOG_DEBUG,
+ LOG_KERN,
+ LOG_USER,
+ LOG_MAIL,
+ LOG_DAEMON,
+ LOG_AUTH,
+ LOG_SYSLOG,
+ LOG_LPR,
+ LOG_NEWS,
+ LOG_UUCP,
+ LOG_CRON,
+ LOG_AUTHPRIV,
+ LOG_PID,
+ LOG_CONS,
+ LOG_ODELAY,
+ LOG_NDELAY,
+ LOG_NOWAIT,
+ LOG_PERROR,
+
+ LOG_LOCAL0,
+ LOG_LOCAL1,
+ LOG_LOCAL2,
+ LOG_LOCAL3,
+ LOG_LOCAL4,
+ LOG_LOCAL5,
+ LOG_LOCAL6,
+ LOG_LOCAL7
+
+);
+
+
+$log_variables = array(
+ "LOG_EMERG",
+ "LOG_ALERT",
+ "LOG_CRIT",
+ "LOG_ERR",
+ "LOG_WARNING",
+ "LOG_NOTICE",
+ "LOG_INFO",
+ "LOG_DEBUG",
+ "LOG_KERN",
+ "LOG_USER",
+ "LOG_MAIL",
+ "LOG_DAEMON",
+ "LOG_AUTH",
+ "LOG_SYSLOG",
+ "LOG_LPR",
+ "LOG_NEWS",
+ "LOG_UUCP",
+ "LOG_CRON",
+ "LOG_AUTHPRIV",
+ "LOG_PID",
+ "LOG_CONS",
+ "LOG_ODELAY",
+ "LOG_NDELAY",
+ "LOG_NOWAIT",
+ "LOG_PERROR",
+
+ "LOG_LOCAL0",
+ "LOG_LOCAL1",
+ "LOG_LOCAL2",
+ "LOG_LOCAL3",
+ "LOG_LOCAL4",
+ "LOG_LOCAL5",
+ "LOG_LOCAL6",
+ "LOG_LOCAL7"
+);
+
+error_reporting(E_ALL);
+$failed = false;
+
+// show variables not defined
+foreach($log_variables as $log_var) {
+ if (isset($$log_var)) {
+ $failed = true;
+ echo "FAILED: variable defined\n";
+ }
+}
+
+var_dump( define_syslog_variables() );
+
+// show variables now defined
+for ($t = 0; $t < count($log_variables); $t++) {
+ if (isset($$log_variables[$t]) === false || $$log_variables[$t] != $log_constants[$t]) {
+ $failed = true;
+ echo "FAILED: $log_variables[$t] doesn't contain the correct value\n";
+ }
+}
+
+if ($failed == false) {
+ echo "PASSED\n";
+}
+?>
+===DONE===
+--EXPECT--
+*** Testing define_syslog_variables() : basic functionality ***
+NULL
+PASSED
+===DONE===
diff --git a/ext/standard/tests/network/define_syslog_variables_error.phpt b/ext/standard/tests/network/define_syslog_variables_error.phpt
new file mode 100644
index 000000000..d02a26503
--- /dev/null
+++ b/ext/standard/tests/network/define_syslog_variables_error.phpt
@@ -0,0 +1,27 @@
+--TEST--
+Test define_syslog_variables() function : error conditions
+--FILE--
+<?php
+/* Prototype : void define_syslog_variables(void)
+ * Description: Initializes all syslog-related variables
+ * Source code: ext/standard/syslog.c
+ * Alias to functions:
+ */
+
+echo "*** Testing define_syslog_variables() : error conditions ***\n";
+
+// One argument
+echo "\n-- Testing define_syslog_variables() function with one argument --\n";
+$extra_arg = 10;
+var_dump( define_syslog_variables($extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing define_syslog_variables() : error conditions ***
+
+-- Testing define_syslog_variables() function with one argument --
+
+Warning: Wrong parameter count for define_syslog_variables() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/network/define_syslog_variables_variation-win32.phpt b/ext/standard/tests/network/define_syslog_variables_variation-win32.phpt
new file mode 100644
index 000000000..b5bfdd263
--- /dev/null
+++ b/ext/standard/tests/network/define_syslog_variables_variation-win32.phpt
@@ -0,0 +1,96 @@
+--TEST--
+Test define_syslog_variables() function : variation
+--INI--
+define_syslog_variables = true
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Only run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : void define_syslog_variables(void)
+ * Description: Initializes all syslog-related variables
+ * Source code: ext/standard/syslog.c
+ * Alias to functions:
+ */
+
+echo "*** Testing define_syslog_variables() : variation ***\n";
+
+$log_constants = array(
+ LOG_EMERG,
+ LOG_ALERT,
+ LOG_CRIT,
+ LOG_ERR,
+ LOG_WARNING,
+ LOG_NOTICE,
+ LOG_INFO,
+ LOG_DEBUG,
+ LOG_KERN,
+ LOG_USER,
+ LOG_MAIL,
+ LOG_DAEMON,
+ LOG_AUTH,
+ LOG_SYSLOG,
+ LOG_LPR,
+ LOG_NEWS,
+ LOG_UUCP,
+ LOG_CRON,
+ LOG_AUTHPRIV,
+ LOG_PID,
+ LOG_CONS,
+ LOG_ODELAY,
+ LOG_NDELAY,
+ LOG_NOWAIT,
+ LOG_PERROR,
+);
+
+
+$log_variables = array(
+ "LOG_EMERG",
+ "LOG_ALERT",
+ "LOG_CRIT",
+ "LOG_ERR",
+ "LOG_WARNING",
+ "LOG_NOTICE",
+ "LOG_INFO",
+ "LOG_DEBUG",
+ "LOG_KERN",
+ "LOG_USER",
+ "LOG_MAIL",
+ "LOG_DAEMON",
+ "LOG_AUTH",
+ "LOG_SYSLOG",
+ "LOG_LPR",
+ "LOG_NEWS",
+ "LOG_UUCP",
+ "LOG_CRON",
+ "LOG_AUTHPRIV",
+ "LOG_PID",
+ "LOG_CONS",
+ "LOG_ODELAY",
+ "LOG_NDELAY",
+ "LOG_NOWAIT",
+ "LOG_PERROR",
+);
+
+error_reporting(E_ALL);
+$failed = false;
+
+// show variables defined
+for ($t = 0; $t < count($log_variables); $t++) {
+ if (isset($$log_variables[$t]) === false || $$log_variables[$t] != $log_constants[$t]) {
+ $failed = true;
+ echo "FAILED: $log_variables[$t] doesn't contain the correct value\n";
+ }
+}
+
+if ($failed == false) {
+ echo "PASSED\n";
+}
+?>
+===DONE===
+--EXPECT--
+*** Testing define_syslog_variables() : variation ***
+PASSED
+===DONE===
diff --git a/ext/standard/tests/network/define_syslog_variables_variation.phpt b/ext/standard/tests/network/define_syslog_variables_variation.phpt
new file mode 100644
index 000000000..010dbdd38
--- /dev/null
+++ b/ext/standard/tests/network/define_syslog_variables_variation.phpt
@@ -0,0 +1,96 @@
+--TEST--
+Test define_syslog_variables() function : variation
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip don't run on Windows");
+?>
+--INI--
+define_syslog_variables = true
+--FILE--
+<?php
+/* Prototype : void define_syslog_variables(void)
+ * Description: Initializes all syslog-related variables
+ * Source code: ext/standard/syslog.c
+ * Alias to functions:
+ */
+
+echo "*** Testing define_syslog_variables() : variation ***\n";
+
+$log_constants = array(
+ LOG_EMERG,
+ LOG_ALERT,
+ LOG_CRIT,
+ LOG_ERR,
+ LOG_WARNING,
+ LOG_NOTICE,
+ LOG_INFO,
+ LOG_DEBUG,
+ LOG_KERN,
+ LOG_USER,
+ LOG_MAIL,
+ LOG_DAEMON,
+ LOG_AUTH,
+ LOG_SYSLOG,
+ LOG_LPR,
+ LOG_NEWS,
+ LOG_UUCP,
+ LOG_CRON,
+ LOG_AUTHPRIV,
+ LOG_PID,
+ LOG_CONS,
+ LOG_ODELAY,
+ LOG_NDELAY,
+ LOG_NOWAIT,
+ LOG_PERROR,
+);
+
+
+$log_variables = array(
+ "LOG_EMERG",
+ "LOG_ALERT",
+ "LOG_CRIT",
+ "LOG_ERR",
+ "LOG_WARNING",
+ "LOG_NOTICE",
+ "LOG_INFO",
+ "LOG_DEBUG",
+ "LOG_KERN",
+ "LOG_USER",
+ "LOG_MAIL",
+ "LOG_DAEMON",
+ "LOG_AUTH",
+ "LOG_SYSLOG",
+ "LOG_LPR",
+ "LOG_NEWS",
+ "LOG_UUCP",
+ "LOG_CRON",
+ "LOG_AUTHPRIV",
+ "LOG_PID",
+ "LOG_CONS",
+ "LOG_ODELAY",
+ "LOG_NDELAY",
+ "LOG_NOWAIT",
+ "LOG_PERROR",
+);
+
+error_reporting(E_ALL);
+$failed = false;
+
+// show variables defined
+for ($t = 0; $t < count($log_variables); $t++) {
+ if (isset($$log_variables[$t]) === false || $$log_variables[$t] != $log_constants[$t]) {
+ $failed = true;
+ echo "FAILED: $log_variables[$t] doesn't contain the correct value\n";
+ }
+}
+
+if ($failed == false) {
+ echo "PASSED\n";
+}
+?>
+===DONE===
+--EXPECT--
+*** Testing define_syslog_variables() : variation ***
+PASSED
+===DONE===
diff --git a/ext/standard/tests/network/define_syslog_variables_variation2-win32.phpt b/ext/standard/tests/network/define_syslog_variables_variation2-win32.phpt
new file mode 100644
index 000000000..a8785fe7d
--- /dev/null
+++ b/ext/standard/tests/network/define_syslog_variables_variation2-win32.phpt
@@ -0,0 +1,96 @@
+--TEST--
+Test define_syslog_variables() function : variation
+--INI--
+define_syslog_variables = false
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Only run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : void define_syslog_variables(void)
+ * Description: Initializes all syslog-related variables
+ * Source code: ext/standard/syslog.c
+ * Alias to functions:
+ */
+
+echo "*** Testing define_syslog_variables() : variation ***\n";
+
+$log_constants = array(
+ LOG_EMERG,
+ LOG_ALERT,
+ LOG_CRIT,
+ LOG_ERR,
+ LOG_WARNING,
+ LOG_NOTICE,
+ LOG_INFO,
+ LOG_DEBUG,
+ LOG_KERN,
+ LOG_USER,
+ LOG_MAIL,
+ LOG_DAEMON,
+ LOG_AUTH,
+ LOG_SYSLOG,
+ LOG_LPR,
+ LOG_NEWS,
+ LOG_UUCP,
+ LOG_CRON,
+ LOG_AUTHPRIV,
+ LOG_PID,
+ LOG_CONS,
+ LOG_ODELAY,
+ LOG_NDELAY,
+ LOG_NOWAIT,
+ LOG_PERROR,
+);
+
+
+$log_variables = array(
+ "LOG_EMERG",
+ "LOG_ALERT",
+ "LOG_CRIT",
+ "LOG_ERR",
+ "LOG_WARNING",
+ "LOG_NOTICE",
+ "LOG_INFO",
+ "LOG_DEBUG",
+ "LOG_KERN",
+ "LOG_USER",
+ "LOG_MAIL",
+ "LOG_DAEMON",
+ "LOG_AUTH",
+ "LOG_SYSLOG",
+ "LOG_LPR",
+ "LOG_NEWS",
+ "LOG_UUCP",
+ "LOG_CRON",
+ "LOG_AUTHPRIV",
+ "LOG_PID",
+ "LOG_CONS",
+ "LOG_ODELAY",
+ "LOG_NDELAY",
+ "LOG_NOWAIT",
+ "LOG_PERROR",
+);
+
+error_reporting(E_ALL);
+$failed = false;
+
+// show variables not defined
+foreach($log_variables as $log_var) {
+ if (isset($$log_var)) {
+ $failed = true;
+ echo "FAILED: variable defined\n";
+ }
+}
+
+if ($failed == false) {
+ echo "PASSED\n";
+}
+?>
+===DONE===
+--EXPECT--
+*** Testing define_syslog_variables() : variation ***
+PASSED
+===DONE===
diff --git a/ext/standard/tests/network/define_syslog_variables_variation2.phpt b/ext/standard/tests/network/define_syslog_variables_variation2.phpt
new file mode 100644
index 000000000..da68df289
--- /dev/null
+++ b/ext/standard/tests/network/define_syslog_variables_variation2.phpt
@@ -0,0 +1,96 @@
+--TEST--
+Test define_syslog_variables() function : variation
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip don't run on Windows");
+?>
+--INI--
+define_syslog_variables = false
+--FILE--
+<?php
+/* Prototype : void define_syslog_variables(void)
+ * Description: Initializes all syslog-related variables
+ * Source code: ext/standard/syslog.c
+ * Alias to functions:
+ */
+
+echo "*** Testing define_syslog_variables() : variation ***\n";
+
+$log_constants = array(
+ LOG_EMERG,
+ LOG_ALERT,
+ LOG_CRIT,
+ LOG_ERR,
+ LOG_WARNING,
+ LOG_NOTICE,
+ LOG_INFO,
+ LOG_DEBUG,
+ LOG_KERN,
+ LOG_USER,
+ LOG_MAIL,
+ LOG_DAEMON,
+ LOG_AUTH,
+ LOG_SYSLOG,
+ LOG_LPR,
+ LOG_NEWS,
+ LOG_UUCP,
+ LOG_CRON,
+ LOG_AUTHPRIV,
+ LOG_PID,
+ LOG_CONS,
+ LOG_ODELAY,
+ LOG_NDELAY,
+ LOG_NOWAIT,
+ LOG_PERROR,
+);
+
+
+$log_variables = array(
+ "LOG_EMERG",
+ "LOG_ALERT",
+ "LOG_CRIT",
+ "LOG_ERR",
+ "LOG_WARNING",
+ "LOG_NOTICE",
+ "LOG_INFO",
+ "LOG_DEBUG",
+ "LOG_KERN",
+ "LOG_USER",
+ "LOG_MAIL",
+ "LOG_DAEMON",
+ "LOG_AUTH",
+ "LOG_SYSLOG",
+ "LOG_LPR",
+ "LOG_NEWS",
+ "LOG_UUCP",
+ "LOG_CRON",
+ "LOG_AUTHPRIV",
+ "LOG_PID",
+ "LOG_CONS",
+ "LOG_ODELAY",
+ "LOG_NDELAY",
+ "LOG_NOWAIT",
+ "LOG_PERROR",
+);
+
+error_reporting(E_ALL);
+$failed = false;
+
+// show variables not defined
+foreach($log_variables as $log_var) {
+ if (isset($$log_var)) {
+ $failed = true;
+ echo "FAILED: variable defined\n";
+ }
+}
+
+if ($failed == false) {
+ echo "PASSED\n";
+}
+?>
+===DONE===
+--EXPECT--
+*** Testing define_syslog_variables() : variation ***
+PASSED
+===DONE===
diff --git a/ext/standard/tests/network/fsockopen_basic.phpt b/ext/standard/tests/network/fsockopen_basic.phpt
new file mode 100644
index 000000000..3ec936633
--- /dev/null
+++ b/ext/standard/tests/network/fsockopen_basic.phpt
@@ -0,0 +1,54 @@
+--TEST--
+Test fsockopen() function : basic functionality
+--FILE--
+<?php
+/* Prototype : proto resource fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])
+ * Description: Open Internet or Unix domain socket connection
+ * Source code: ext/standard/fsock.c
+ * Alias to functions:
+ */
+
+echo "*** Testing fsockopen() : basic functionality ***\n";
+
+echo "Open a server socket\n";
+$server = stream_socket_server('tcp://127.0.0.1:31337');
+
+
+// Initialise all required variables
+$hostname = 'tcp://127.0.0.1'; // loopback address
+$port = 31337;
+$errno = null;
+$errstr = null;
+$timeout = 1.5;
+
+echo "\nCalling fsockopen() with all possible arguments:\n";
+$client = fsockopen($hostname, $port, $errno, $errstr, $timeout);
+var_dump($client);
+fclose($client);
+
+echo "\nCalling fsockopen() with mandatory arguments:\n";
+$second_client = fsockopen($hostname, $port);
+var_dump($second_client);
+fclose($second_client);
+
+echo "\nCalling fsockopen() with address and port in same string:\n";
+$address = $hostname . ':' . $port;
+$third_client = fsockopen($address);
+var_dump($third_client);
+fclose($third_client);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing fsockopen() : basic functionality ***
+Open a server socket
+
+Calling fsockopen() with all possible arguments:
+resource(%d) of type (stream)
+
+Calling fsockopen() with mandatory arguments:
+resource(%d) of type (stream)
+
+Calling fsockopen() with address and port in same string:
+resource(%d) of type (stream)
+Done
diff --git a/ext/standard/tests/network/fsockopen_error.phpt b/ext/standard/tests/network/fsockopen_error.phpt
new file mode 100644
index 000000000..3b13b8cf3
--- /dev/null
+++ b/ext/standard/tests/network/fsockopen_error.phpt
@@ -0,0 +1,75 @@
+--TEST--
+Test fsockopen() function : error conditions
+--FILE--
+<?php
+/* Prototype : proto resource fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])
+ * Description: Open Internet or Unix domain socket connection
+ * Source code: ext/standard/fsock.c
+ * Alias to functions:
+ */
+
+
+echo "*** Testing fsockopen() : basic error conditions ***\n";
+
+
+echo "\n-- Testing fsockopen() function with more than expected no. of arguments --\n";
+$hostname = 'string_val';
+$port = 10;
+$errno = 10;
+$errstr = 'string_val';
+$timeout = 10.5;
+$extra_arg = 10;
+var_dump( fsockopen($hostname, $port, $errno, $errstr, $timeout, $extra_arg) );
+var_dump($errstr);
+var_dump($errno);
+
+echo "\n-- Testing fsockopen() function with less than expected no. of arguments --\n";
+var_dump( fsockopen() );
+
+echo "\n-- Attempting to connect to a non-existent socket --\n";
+$hostname = 'tcp://127.0.0.1'; // loopback address
+$port = 31337;
+$errno = null;
+$errstr = null;
+$timeout = 1.5;
+var_dump( fsockopen($hostname, $port, $errno, $errstr, $timeout) );
+var_dump($errstr);
+
+echo "\n-- Attempting to connect using an invalid protocol --\n";
+$hostname = 'invalid://127.0.0.1'; // loopback address
+$port = 31337;
+$errno = null;
+$errstr = null;
+$timeout = 1.5;
+var_dump( fsockopen($hostname, $port, $errno, $errstr, $timeout) );
+var_dump($errstr);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing fsockopen() : basic error conditions ***
+
+-- Testing fsockopen() function with more than expected no. of arguments --
+
+Warning: fsockopen() expects at most 5 parameters, 6 given in %s on line %d
+bool(false)
+string(10) "string_val"
+int(10)
+
+-- Testing fsockopen() function with less than expected no. of arguments --
+
+Warning: fsockopen() expects at least 1 parameter, 0 given in %s on line %d
+bool(false)
+
+-- Attempting to connect to a non-existent socket --
+
+Warning: fsockopen(): unable to connect to tcp://127.0.0.1:31337 (%a) in %s on line %d
+bool(false)
+string(%d) "%a"
+
+-- Attempting to connect using an invalid protocol --
+
+Warning: fsockopen(): unable to connect to invalid://127.0.0.1:31337 (Unable to find the socket transport "invalid" - did you forget to enable it when you configured PHP?) in %s on line %d
+bool(false)
+string(100) "Unable to find the socket transport "invalid" - did you forget to enable it when you configured PHP?"
+Done
diff --git a/ext/standard/tests/network/fsockopen_variation1.phpt b/ext/standard/tests/network/fsockopen_variation1.phpt
new file mode 100644
index 000000000..2e5f8d9ad
--- /dev/null
+++ b/ext/standard/tests/network/fsockopen_variation1.phpt
@@ -0,0 +1,32 @@
+--TEST--
+testing fsockopen without a protocol string
+--FILE--
+<?php
+
+echo "Open a server socket\n";
+$server = stream_socket_server('tcp://127.0.0.1:31337');
+
+echo "\nCalling fsockopen() without a protocol in the hostname string:\n";
+$hostname = '127.0.0.1';
+$port = '31337';
+$client = fsockopen($hostname, $port);
+var_dump($client);
+fclose($client);
+
+echo "\nCalling fsockopen() with address and port in same string, without a protocol:\n";
+$address = $hostname . ':' . $port;
+$second_client = fsockopen($address);
+var_dump($second_client);
+fclose($second_client);
+
+echo "Done";
+?>
+--EXPECTF--
+Open a server socket
+
+Calling fsockopen() without a protocol in the hostname string:
+resource(%d) of type (stream)
+
+Calling fsockopen() with address and port in same string, without a protocol:
+resource(%d) of type (stream)
+Done
diff --git a/ext/standard/tests/network/fsockopen_variation2.phpt b/ext/standard/tests/network/fsockopen_variation2.phpt
new file mode 100644
index 000000000..262ae0ba0
--- /dev/null
+++ b/ext/standard/tests/network/fsockopen_variation2.phpt
@@ -0,0 +1,48 @@
+--TEST--
+testing fsockopen() with udp sockets
+--FILE--
+<?php
+
+$hostname = 'udp://127.0.0.1';
+$port = '31337';
+
+echo "Open a server socket\n";
+$server = stream_socket_server($hostname . ':' . $port, $errno, $errstr, STREAM_SERVER_BIND);
+
+echo "\nCalling fsockopen():\n";
+$client = fsockopen($hostname, $port);
+var_dump($client);
+
+echo "\nPass some data between the sockets:\n";
+fwrite($client, "0123456789");
+var_dump(fread($server, 10));
+fclose($client);
+
+echo "\nCalling fsockopen() with address and port in same string:\n";
+$address = $hostname . ':' . $port;
+$second_client = fsockopen($address);
+var_dump($second_client);
+
+echo "\nPass some data between the sockets:\n";
+fwrite($second_client, "0123456789");
+var_dump(fread($server, 10));
+fclose($second_client);
+
+echo "Done";
+
+?>
+--EXPECTF--
+Open a server socket
+
+Calling fsockopen():
+resource(%d) of type (stream)
+
+Pass some data between the sockets:
+string(10) "0123456789"
+
+Calling fsockopen() with address and port in same string:
+resource(%d) of type (stream)
+
+Pass some data between the sockets:
+string(10) "0123456789"
+Done
diff --git a/ext/standard/tests/network/inet.phpt b/ext/standard/tests/network/inet.phpt
index 09cf20623..0df527c7a 100644
--- a/ext/standard/tests/network/inet.phpt
+++ b/ext/standard/tests/network/inet.phpt
@@ -64,12 +64,12 @@ bool(false)
Warning: inet_pton(): Unrecognized address abra in %s on line %d
bool(false)
-string(4) "%s"
+string(%d) "%s"
string(9) "127.0.0.1"
-string(4) "%s"
+string(%d) "%s"
string(14) "66.163.161.116"
-string(4) "%s"
+string(%d) "%s"
string(15) "255.255.255.255"
-string(4) "%s"
+string(%d) "%s"
string(7) "0.0.0.0"
Done
diff --git a/ext/standard/tests/network/ip2long_error.phpt b/ext/standard/tests/network/ip2long_error.phpt
new file mode 100644
index 000000000..219363e6a
--- /dev/null
+++ b/ext/standard/tests/network/ip2long_error.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test ip2long() function : error conditions
+--FILE--
+<?php
+/* Prototype : int ip2long(string ip_address)
+ * Description: Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address
+ * Source code: ext/standard/basic_functions.c
+ * Alias to functions:
+ */
+
+echo "*** Testing ip2long() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing ip2long() function with Zero arguments --\n";
+var_dump( ip2long() );
+
+//Test ip2long with one more than the expected number of arguments
+echo "\n-- Testing ip2long() function with more than expected no. of arguments --\n";
+$ip_address = '127.0.0.1';
+$extra_arg = 10;
+var_dump( ip2long($ip_address, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing ip2long() : error conditions ***
+
+-- Testing ip2long() function with Zero arguments --
+
+Warning: Wrong parameter count for ip2long() in %s on line %d
+NULL
+
+-- Testing ip2long() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for ip2long() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/network/ip2long_variation1.phpt b/ext/standard/tests/network/ip2long_variation1.phpt
new file mode 100644
index 000000000..c4af00446
--- /dev/null
+++ b/ext/standard/tests/network/ip2long_variation1.phpt
@@ -0,0 +1,199 @@
+--TEST--
+Test ip2long() function : usage variation
+--FILE--
+<?php
+/* Prototype : int ip2long(string ip_address)
+ * Description: Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address
+ * Source code: ext/standard/basic_functions.c
+ * Alias to functions:
+ */
+
+echo "*** Testing ip2long() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$res = fopen(__FILE__,'r');
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource
+ 'resource' => $res,
+);
+
+// loop through each element of the array for ip_address
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( ip2long($value) );
+};
+
+fclose($res);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing ip2long() : usage variation ***
+
+--int 0--
+int(0)
+
+--int 1--
+int(1)
+
+--int 12345--
+int(12345)
+
+--int -12345--
+bool(false)
+
+--float 10.5--
+int(167772165)
+
+--float -10.5--
+bool(false)
+
+--float 12.3456789000e10--
+bool(false)
+
+--float -12.3456789000e10--
+bool(false)
+
+--float .5--
+int(5)
+
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+bool(false)
+
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+bool(false)
+
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+bool(false)
+
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+bool(false)
+
+--uppercase NULL--
+bool(false)
+
+--lowercase null--
+bool(false)
+
+--lowercase true--
+int(1)
+
+--lowercase false--
+bool(false)
+
+--uppercase TRUE--
+int(1)
+
+--uppercase FALSE--
+bool(false)
+
+--empty string DQ--
+bool(false)
+
+--empty string SQ--
+bool(false)
+
+--instance of classWithToString--
+bool(false)
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+bool(false)
+
+--undefined var--
+bool(false)
+
+--unset var--
+bool(false)
+
+--resource--
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/network/long2ip_error.phpt b/ext/standard/tests/network/long2ip_error.phpt
new file mode 100644
index 000000000..61fb34a80
--- /dev/null
+++ b/ext/standard/tests/network/long2ip_error.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test long2ip() function : error conditions
+--FILE--
+<?php
+/* Prototype : string long2ip(int proper_address)
+ * Description: Converts an (IPv4) Internet network address into a string in Internet standard dotted format
+ * Source code: ext/standard/basic_functions.c
+ * Alias to functions:
+ */
+
+echo "*** Testing long2ip() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing long2ip() function with Zero arguments --\n";
+var_dump( long2ip() );
+
+//Test long2ip with one more than the expected number of arguments
+echo "\n-- Testing long2ip() function with more than expected no. of arguments --\n";
+$proper_address = 10;
+$extra_arg = 10;
+var_dump( long2ip($proper_address, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing long2ip() : error conditions ***
+
+-- Testing long2ip() function with Zero arguments --
+
+Warning: Wrong parameter count for long2ip() in %s on line %d
+NULL
+
+-- Testing long2ip() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for long2ip() in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/network/long2ip_variation1.phpt b/ext/standard/tests/network/long2ip_variation1.phpt
new file mode 100644
index 000000000..a4a867277
--- /dev/null
+++ b/ext/standard/tests/network/long2ip_variation1.phpt
@@ -0,0 +1,196 @@
+--TEST--
+Test long2ip() function : usage variation
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) == "WIN")
+ die("skip don't run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : string long2ip(int proper_address)
+ * Description: Converts an (IPv4) Internet network address into a string in Internet standard dotted format
+ * Source code: ext/standard/basic_functions.c
+ * Alias to functions:
+ */
+
+echo "*** Testing long2ip() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+// resource
+$res = fopen(__FILE__,'r');
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource
+ 'resource' => $res,
+);
+
+// loop through each element of the array for proper_address
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( long2ip($value) );
+};
+
+fclose($res);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing long2ip() : usage variation ***
+
+--float 10.5--
+string(8) "0.0.0.10"
+
+--float -10.5--
+string(15) "255.255.255.246"
+
+--float .5--
+string(7) "0.0.0.0"
+
+--empty array--
+Error: 8 - Array to string conversion, %s(%d)
+string(7) "0.0.0.0"
+
+--int indexed array--
+Error: 8 - Array to string conversion, %s(%d)
+string(7) "0.0.0.0"
+
+--associative array--
+Error: 8 - Array to string conversion, %s(%d)
+string(7) "0.0.0.0"
+
+--nested arrays--
+Error: 8 - Array to string conversion, %s(%d)
+string(7) "0.0.0.0"
+
+--uppercase NULL--
+string(7) "0.0.0.0"
+
+--lowercase null--
+string(7) "0.0.0.0"
+
+--lowercase true--
+string(7) "0.0.0.1"
+
+--lowercase false--
+string(7) "0.0.0.0"
+
+--uppercase TRUE--
+string(7) "0.0.0.1"
+
+--uppercase FALSE--
+string(7) "0.0.0.0"
+
+--empty string DQ--
+string(7) "0.0.0.0"
+
+--empty string SQ--
+string(7) "0.0.0.0"
+
+--string DQ--
+string(7) "0.0.0.0"
+
+--string SQ--
+string(7) "0.0.0.0"
+
+--mixed case string--
+string(7) "0.0.0.0"
+
+--heredoc--
+string(7) "0.0.0.0"
+
+--instance of classWithToString--
+string(7) "0.0.0.0"
+
+--instance of classWithoutToString--
+Error: 4096 - Object of class classWithoutToString could not be converted to string, %s(%d)
+Error: 8 - Object of class classWithoutToString to string conversion, %s(%d)
+string(7) "0.0.0.0"
+
+--undefined var--
+string(7) "0.0.0.0"
+
+--unset var--
+string(7) "0.0.0.0"
+
+--resource--
+string(7) "0.0.0.0"
+===DONE===
diff --git a/ext/standard/tests/network/socket_get_status_basic.phpt b/ext/standard/tests/network/socket_get_status_basic.phpt
new file mode 100644
index 000000000..f72662b16
--- /dev/null
+++ b/ext/standard/tests/network/socket_get_status_basic.phpt
@@ -0,0 +1,27 @@
+--TEST--
+Testing socket_get_status()
+--FILE--
+<?php
+
+$tcp_socket = stream_socket_server('tcp://127.0.0.1:31337');
+var_dump(socket_get_status($tcp_socket));
+fclose($tcp_socket);
+
+?>
+--EXPECTF--
+array(7) {
+ ["stream_type"]=>
+ string(%d) "tcp_socket%S"
+ ["mode"]=>
+ string(2) "r+"
+ ["unread_bytes"]=>
+ int(0)
+ ["seekable"]=>
+ bool(false)
+ ["timed_out"]=>
+ bool(false)
+ ["blocked"]=>
+ bool(true)
+ ["eof"]=>
+ bool(false)
+}
diff --git a/ext/standard/tests/network/syslog_basic-win32.phpt b/ext/standard/tests/network/syslog_basic-win32.phpt
new file mode 100644
index 000000000..88d3c5a6d
--- /dev/null
+++ b/ext/standard/tests/network/syslog_basic-win32.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Test syslog() function : basic functionality
+--SKIPIF--
+<?php
+if(substr(PHP_OS, 0, 3) != "WIN")
+ die("skip Only run on Windows");
+?>
+--FILE--
+<?php
+/* Prototype : bool syslog(int priority, string message)
+ * Description: Generate a system log message
+ * Source code: ext/standard/syslog.c
+ * Alias to functions:
+ */
+
+echo "*** Testing syslog() : basic functionality ***\n";
+
+
+// Initialise all required variables
+$priority = LOG_WARNING;
+$message = 'A test syslog call invocation';
+
+// Calling syslog() with all possible arguments
+var_dump( syslog($priority, $message) );
+
+?>
+===DONE===
+--EXPECT--
+*** Testing syslog() : basic functionality ***
+bool(true)
+===DONE===
diff --git a/ext/standard/tests/network/syslog_error.phpt b/ext/standard/tests/network/syslog_error.phpt
new file mode 100644
index 000000000..a99fd5314
--- /dev/null
+++ b/ext/standard/tests/network/syslog_error.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Test syslog() function : error conditions
+--FILE--
+<?php
+/* Prototype : bool syslog(int priority, string message)
+ * Description: Generate a system log message
+ * Source code: ext/standard/syslog.c
+ * Alias to functions:
+ */
+
+echo "*** Testing syslog() : error conditions ***\n";
+
+
+//Test syslog with one more than the expected number of arguments
+echo "\n-- Testing syslog() function with more than expected no. of arguments --\n";
+$priority = 10;
+$message = 'string_val';
+$extra_arg = 10;
+var_dump( syslog($priority, $message, $extra_arg) );
+
+// Testing syslog with one less than the expected number of arguments
+echo "\n-- Testing syslog() function with less than expected no. of arguments --\n";
+$priority = 10;
+var_dump( syslog($priority) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing syslog() : error conditions ***
+
+-- Testing syslog() function with more than expected no. of arguments --
+
+Warning: syslog() expects exactly 2 parameters, 3 given in %s on line %d
+NULL
+
+-- Testing syslog() function with less than expected no. of arguments --
+
+Warning: syslog() expects exactly 2 parameters, 1 given in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/serialize/incomplete_class.phpt b/ext/standard/tests/serialize/incomplete_class.phpt
new file mode 100644
index 000000000..828048551
--- /dev/null
+++ b/ext/standard/tests/serialize/incomplete_class.phpt
@@ -0,0 +1,27 @@
+--TEST--
+(un)serializing __PHP_Incomplete_Class instance
+--FILE--
+<?php
+
+$d = serialize(new __PHP_Incomplete_Class);
+$o = unserialize($d);
+var_dump($o);
+
+$o->test = "a";
+var_dump($o->test);
+var_dump($o->test2);
+
+echo "Done\n";
+?>
+--EXPECTF--
+object(__PHP_Incomplete_Class)#%d (0) {
+}
+
+Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "unknown" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line %d
+
+Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "unknown" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line %d
+NULL
+
+Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "unknown" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line %d
+NULL
+Done
diff --git a/ext/standard/tests/streams/bug44818.phpt b/ext/standard/tests/streams/bug44818.phpt
new file mode 100644
index 000000000..628f64e34
--- /dev/null
+++ b/ext/standard/tests/streams/bug44818.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Bug #44818 (php://memory writeable when opened read only)
+--FILE--
+<?php
+function test($url, $mode) {
+ echo "$url, $mode\n";
+ $fd = fopen($url, $mode);
+ var_dump($fd, fwrite($fd, b"foo"));
+ var_dump(fseek($fd, 0, SEEK_SET), fread($fd, 3));
+ fclose($fd);
+}
+test("php://memory","r");
+test("php://memory","r+");
+test("php://temp","r");
+test("php://temp","w");
+?>
+--EXPECTF--
+php://memory, r
+resource(%d) of type (stream)
+int(0)
+int(0)
+string(0) ""
+php://memory, r+
+resource(%d) of type (stream)
+int(3)
+int(0)
+string(3) "foo"
+php://temp, r
+resource(%d) of type (stream)
+int(0)
+int(0)
+string(0) ""
+php://temp, w
+resource(%d) of type (stream)
+int(3)
+int(0)
+string(3) "foo"
diff --git a/ext/standard/tests/streams/bug46024.phpt b/ext/standard/tests/streams/bug46024.phpt
new file mode 100644
index 000000000..34407cdc8
--- /dev/null
+++ b/ext/standard/tests/streams/bug46024.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Bug #46024 stream_select() doesn't return the correct number
+--SKIPIF--
+<?php if (!getenv('TEST_PHP_EXECUTABLE')) die("TEST_PHP_EXECUTABLE not defined"); ?>
+--FILE--
+<?php
+$php = getenv('TEST_PHP_EXECUTABLE');
+$pipes = array();
+$proc = proc_open(
+ "$php -n -i"
+ ,array(0 => array('pipe', 'r'), 1 => array('pipe', 'w'))
+ ,$pipes, dirname(__FILE__), array(), array('binary_pipes' => true)
+);
+var_dump($proc);
+if (!$proc) {
+ exit(1);
+}
+$r = array($pipes[1]);
+$w = array($pipes[0]);
+$e = null;
+$ret = stream_select($r, $w, $e, 1);
+var_dump($ret === (count($r) + count($w)));
+fread($pipes[1], 1);
+
+$r = array($pipes[1]);
+$w = array($pipes[0]);
+$e = null;
+$ret = stream_select($r, $w, $e, 1);
+var_dump($ret === (count($r) + count($w)));
+
+
+foreach($pipes as $pipe) {
+ fclose($pipe);
+}
+proc_terminate($proc);
+if (defined('SIGKILL')) {
+ proc_terminate($proc, SIGKILL);
+} else {
+ proc_terminate($proc);
+}
+proc_close($proc);
+?>
+--EXPECTF--
+resource(%d) of type (process)
+bool(true)
+bool(true)
diff --git a/ext/standard/tests/streams/bug46426.phpt b/ext/standard/tests/streams/bug46426.phpt
new file mode 100644
index 000000000..8c95ea456
--- /dev/null
+++ b/ext/standard/tests/streams/bug46426.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Bug #46426 (3rd parameter offset of stream_get_contents not works for "0")
+--FILE--
+<?php
+
+$tmp = tmpfile();
+
+fwrite($tmp, "12345");
+
+echo stream_get_contents($tmp, 2, 1);
+echo "\n";
+echo stream_get_contents($tmp, -1);
+echo "\n";
+echo stream_get_contents($tmp, -1, 0);
+echo "\n";
+echo stream_get_contents($tmp, -1, 2);
+echo "\n";
+echo stream_get_contents($tmp, 0, 0);
+echo "\n";
+echo stream_get_contents($tmp, 1, 0);
+echo "\n";
+echo stream_get_contents($tmp, -1);
+
+@unlink($tmp);
+
+?>
+--EXPECT--
+23
+45
+12345
+345
+
+1
+2345
diff --git a/ext/standard/tests/streams/stream_get_contents_001.phpt b/ext/standard/tests/streams/stream_get_contents_001.phpt
new file mode 100644
index 000000000..dc7fcb239
--- /dev/null
+++ b/ext/standard/tests/streams/stream_get_contents_001.phpt
@@ -0,0 +1,22 @@
+--TEST--
+stream_get_contents() - Testing offset out of range
+--FILE--
+<?php
+
+$tmp = tmpfile();
+
+fwrite($tmp, "12345");
+
+echo stream_get_contents($tmp, 2, 5), "--\n";
+echo stream_get_contents($tmp, 2), "--\n";
+echo stream_get_contents($tmp, 2, 3), "--\n";
+echo stream_get_contents($tmp, 2, -1), "--\n";
+
+@unlink($tmp);
+
+?>
+--EXPECT--
+--
+--
+45--
+--
diff --git a/ext/standard/tests/streams/stream_get_contents_002.phpt b/ext/standard/tests/streams/stream_get_contents_002.phpt
new file mode 100644
index 000000000..66ff3fb18
--- /dev/null
+++ b/ext/standard/tests/streams/stream_get_contents_002.phpt
@@ -0,0 +1,18 @@
+--TEST--
+stream_get_contents() - Testing on socket with $maxlength
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') die("skip: non windows test");
+?>
+--FILE--
+<?php
+$sockets = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0);
+
+stream_set_timeout($sockets[1], 6000);
+
+fwrite($sockets[0], b"foo");
+var_dump(stream_get_contents($sockets[1], 3));
+
+?>
+--EXPECT--
+string(3) "foo"
diff --git a/ext/standard/tests/streams/stream_get_line_nb.phpt b/ext/standard/tests/streams/stream_get_line_nb.phpt
new file mode 100644
index 000000000..3e3848f54
--- /dev/null
+++ b/ext/standard/tests/streams/stream_get_line_nb.phpt
@@ -0,0 +1,66 @@
+--TEST--
+stream_get_line() on non-blocking stream
+--SKIPIF--
+<?php
+$sockets = @stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0);
+if (!$sockets) die("skip");
+fclose($sockets[0]);
+fclose($sockets[1]);
+?>
+--FILE--
+<?php
+/**
+ * Tests that stream_get_line() behaves as documented on non-blocking streams:
+ * Never return incomplete lines, except on documented conditions:
+ * length bytes have been read, the string specified by ending is found, EOF.
+ */
+
+$sockets = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0);
+var_dump($sockets);
+
+stream_set_blocking($sockets[1], 0);
+
+$eol = b'<EOL>';
+
+fwrite($sockets[0], b"line start");
+var_dump(stream_get_line($sockets[1], 8192, $eol)); // Does not returns incomplete line (EOL not found)
+var_dump(stream_get_line($sockets[1], 8192, $eol));
+fwrite($sockets[0], b", line end");
+fwrite($sockets[0], b", $eol");
+var_dump(stream_get_line($sockets[1], 8192, $eol)); // Returns full line (EOL found)
+var_dump(stream_get_line($sockets[1], 8192, $eol)); // Nothing to read
+var_dump(stream_get_line($sockets[1], 8192, $eol));
+
+fwrite($sockets[0], b"incomplete line");
+var_dump(stream_get_line($sockets[1], strlen(b"incomplete line"), $eol)); // EOL not found but $length has been read, return incomplete line
+
+fwrite($sockets[0], b"incomplete line");
+var_dump(stream_get_line($sockets[1], 8192, $eol)); // Does not returns incomplete line (EOL not found)
+var_dump(fread($sockets[1], strlen(b"incomplete line"))); // Returns buffer readden by stream_get_line
+
+fwrite($sockets[0], b"end of file");
+var_dump(stream_get_line($sockets[1], 8192, $eol)); // Does not returns incomplete line (EOL not found)
+
+fclose($sockets[0]);
+var_dump(stream_get_line($sockets[1], 8192, $eol)); // Returns incomplete line (End of file)
+
+fclose($sockets[1]);
+
+?>
+--EXPECTF--
+array(2) {
+ [0]=>
+ resource(%d) of type (stream)
+ [1]=>
+ resource(%d) of type (stream)
+}
+bool(false)
+bool(false)
+string(22) "line start, line end, "
+bool(false)
+bool(false)
+string(15) "incomplete line"
+bool(false)
+string(15) "incomplete line"
+bool(false)
+string(11) "end of file"
diff --git a/ext/standard/tests/streams/stream_get_meta_data_socket_variation1.phpt b/ext/standard/tests/streams/stream_get_meta_data_socket_variation1.phpt
index 649311039..16b38d9a1 100644
--- a/ext/standard/tests/streams/stream_get_meta_data_socket_variation1.phpt
+++ b/ext/standard/tests/streams/stream_get_meta_data_socket_variation1.phpt
@@ -8,6 +8,9 @@ $server = stream_socket_server('tcp://127.0.0.1:31337');
/* Connect to it */
$client = fsockopen('tcp://127.0.0.1:31337');
+if (!$client) {
+ die("Unable to create socket");
+}
/* Accept that connection */
$socket = stream_socket_accept($server);
diff --git a/ext/standard/tests/streams/stream_get_meta_data_socket_variation2.phpt b/ext/standard/tests/streams/stream_get_meta_data_socket_variation2.phpt
index c04f3cb5d..d30fec705 100644
--- a/ext/standard/tests/streams/stream_get_meta_data_socket_variation2.phpt
+++ b/ext/standard/tests/streams/stream_get_meta_data_socket_variation2.phpt
@@ -8,6 +8,9 @@ $server = stream_socket_server('tcp://127.0.0.1:31337');
/* Connect to it */
$client = fsockopen('tcp://127.0.0.1:31337');
+if (!$client) {
+ die("Unable to create socket");
+}
/* Accept that connection */
$socket = stream_socket_accept($server);
diff --git a/ext/standard/tests/streams/stream_get_meta_data_socket_variation3.phpt b/ext/standard/tests/streams/stream_get_meta_data_socket_variation3.phpt
index 4ec00b3fd..0b079ccf7 100644
--- a/ext/standard/tests/streams/stream_get_meta_data_socket_variation3.phpt
+++ b/ext/standard/tests/streams/stream_get_meta_data_socket_variation3.phpt
@@ -8,6 +8,9 @@ $server = stream_socket_server('tcp://127.0.0.1:31337');
/* Connect to it */
$client = fsockopen('tcp://127.0.0.1:31337');
+if (!$client) {
+ die("Unable to create socket");
+}
/* Accept that connection */
$socket = stream_socket_accept($server);
diff --git a/ext/standard/tests/streams/stream_get_meta_data_socket_variation4.phpt b/ext/standard/tests/streams/stream_get_meta_data_socket_variation4.phpt
index dae4f470f..f9ef74798 100644
--- a/ext/standard/tests/streams/stream_get_meta_data_socket_variation4.phpt
+++ b/ext/standard/tests/streams/stream_get_meta_data_socket_variation4.phpt
@@ -8,6 +8,9 @@ $server = stream_socket_server('tcp://127.0.0.1:31337');
/* Connect to it */
$client = fsockopen('tcp://127.0.0.1:31337');
+if (!$client) {
+ die("Unable to create socket");
+}
/* Accept that connection */
$socket = stream_socket_accept($server);
diff --git a/ext/standard/tests/streams/stream_set_timeout_error.phpt b/ext/standard/tests/streams/stream_set_timeout_error.phpt
index 1e8e60bd2..67e56df36 100644
--- a/ext/standard/tests/streams/stream_set_timeout_error.phpt
+++ b/ext/standard/tests/streams/stream_set_timeout_error.phpt
@@ -8,13 +8,8 @@ Test stream_set_timeout() function : error conditions
* Alias to functions: socket_set_timeout
*/
-/*
- * add a comment here to say what the test is supposed to do
- */
-
echo "*** Testing stream_set_timeout() : error conditions ***\n";
-
//Test stream_set_timeout with one more than the expected number of arguments
echo "\n-- Testing stream_set_timeout() function with more than expected no. of arguments --\n";
diff --git a/ext/standard/tests/streams/stream_socket_pair.phpt b/ext/standard/tests/streams/stream_socket_pair.phpt
new file mode 100644
index 000000000..5556d8e22
--- /dev/null
+++ b/ext/standard/tests/streams/stream_socket_pair.phpt
@@ -0,0 +1,22 @@
+--TEST--
+stream_socket_pair()
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') die("skip: non windows test");
+?>
+--FILE--
+<?php
+$sockets = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0);
+var_dump($sockets);
+fwrite($sockets[0], b"foo");
+var_dump(fread($sockets[1], strlen(b"foo")));
+fclose($sockets[0]);
+?>
+--EXPECTF--
+array(2) {
+ [0]=>
+ resource(%d) of type (stream)
+ [1]=>
+ resource(%d) of type (stream)
+}
+string(3) "foo"
diff --git a/ext/standard/tests/strings/006.phpt b/ext/standard/tests/strings/006.phpt
index f0156ccf6..a5dc3e81e 100644
--- a/ext/standard/tests/strings/006.phpt
+++ b/ext/standard/tests/strings/006.phpt
@@ -1,5 +1,7 @@
--TEST--
highlight_file() and output buffer
+--INI--
+log_errors_max_len = 4096
--FILE--
<?php
@@ -11,9 +13,9 @@ var_dump(ob_get_contents());
echo "Done\n";
?>
--EXPECTF--
-Warning: highlight_file(AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA in %s on line %d
+Warning: highlight_file(AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA): failed to open stream: File name too long in %s on line %d
-Warning: highlight_file(): Failed opening 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA in %s on line %d
+Warning: highlight_file(): Failed opening 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' for highlighting in %s on line %d
bool(false)
bool(false)
Done
diff --git a/ext/standard/tests/strings/007.phpt b/ext/standard/tests/strings/007.phpt
index e0e516389..af8c9e299 100644
--- a/ext/standard/tests/strings/007.phpt
+++ b/ext/standard/tests/strings/007.phpt
@@ -1,5 +1,7 @@
--TEST--
php_strip_whitespace() and output buffer
+--INI--
+log_errors_max_len = 4096
--FILE--
<?php
@@ -11,7 +13,7 @@ var_dump(ob_get_contents());
echo "Done\n";
?>
--EXPECTF--
-Warning: php_strip_whitespace(AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA in %s on line %d
+Warning: php_strip_whitespace(AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA): failed to open stream: File name too long in %s on line %d
string(0) ""
bool(false)
Done
diff --git a/ext/standard/tests/strings/addslashes_variation1.phpt b/ext/standard/tests/strings/addslashes_variation1.phpt
index a86f86d05..c4f9fdd09 100644
--- a/ext/standard/tests/strings/addslashes_variation1.phpt
+++ b/ext/standard/tests/strings/addslashes_variation1.phpt
@@ -32,50 +32,50 @@ $file_handle = fopen(__FILE__, 'r');
// array with different values
$values = array (
- // integer values
- 0,
- 1,
- 12345,
- -2345,
-
- // float values
- 10.5,
- -10.5,
- 10.5e10,
- 10.6E-10,
- .5,
-
- // array values
- array(),
- array(0),
- array(1),
- array(1, 2),
- array('color' => 'red', 'item' => 'pen'),
-
- // boolean values
- true,
- false,
- TRUE,
- FALSE,
-
- // empty string
- "",
- '',
-
- // undefined variable
- $undefined_var,
-
- // unset variable
- $unset_var,
-
- // objects
- new sample(),
-
- // resource
- $file_handle,
-
- NULL,
- null
+ // integer values
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float values
+/*5*/ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array values
+/*10*/ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // boolean values
+/*15*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty string
+/*19*/ "",
+ '',
+
+ // undefined variable
+/*21*/ $undefined_var,
+
+ // unset variable
+/*22*/ $unset_var,
+
+ // objects
+/*23*/ new sample(),
+
+ // resource
+/*24*/ $file_handle,
+
+/*25*/ NULL,
+ null
);
@@ -95,8 +95,8 @@ for($index = 0; $index < count($values); $index ++) {
// closing the file
fclose($file_handle);
-echo "Done\n";
?>
+===DONE===
--EXPECTF--
*** Testing addslashes() : with non-string type argument ***
@@ -118,9 +118,9 @@ string(4) "10.5"
-- Iteration 6 --
string(5) "-10.5"
-- Iteration 7 --
-string(12) "105000000000"
+string(12) "101234567000"
-- Iteration 8 --
-string(7) "1.06E-9"
+string(13) "1.07654321E-9"
-- Iteration 9 --
string(3) "0.5"
-- Iteration 10 --
@@ -167,4 +167,4 @@ string(%d) "Resource id #%d"
string(0) ""
-- Iteration 26 --
string(0) ""
-Done
+===DONE===
diff --git a/ext/standard/tests/strings/bin2hex_basic.phpt b/ext/standard/tests/strings/bin2hex_basic.phpt
new file mode 100644
index 000000000..5d667a7ff
--- /dev/null
+++ b/ext/standard/tests/strings/bin2hex_basic.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test bin2hex() function : basic functionality
+--FILE--
+<?php
+
+/* Prototype : string bin2hex ( string $str )
+ * Description: Convert binary data into hexadecimal representation
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing bin2hex() : basic functionality ***\n";
+
+// array with different values for $string
+$strings = array (
+
+ //double quoted strings
+/*1*/ "Here is a simple string",
+ "\t This String contains \t\t some control characters\r\n",
+ "\x90\x91\x00\x93\x94\x90\x91\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f",
+
+ //single quoted strings
+/*4*/ 'Here is a simple string',
+ '\t This String contains \t\t some control characters\r\n',
+ '\x90\x91\x00\x93\x94\x90\x91\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f',
+);
+
+// loop through with each element of the $strings array to test bin2hex() function
+$count = 1;
+foreach($strings as $string) {
+ echo "-- Iteration $count --\n";
+ var_dump(bin2hex($string));
+ $count ++;
+}
+?>
+===DONE===
+--EXPECT--
+*** Testing bin2hex() : basic functionality ***
+-- Iteration 1 --
+string(46) "4865726520697320612073696d706c6520737472696e67"
+-- Iteration 2 --
+string(102) "09205468697320537472696e6720636f6e7461696e7320090920736f6d6520636f6e74726f6c20636861726163746572730d0a"
+-- Iteration 3 --
+string(36) "9091009394909195969798999a9b9c9d9e9f"
+-- Iteration 4 --
+string(46) "4865726520697320612073696d706c6520737472696e67"
+-- Iteration 5 --
+string(112) "5c74205468697320537472696e6720636f6e7461696e73205c745c7420736f6d6520636f6e74726f6c20636861726163746572735c725c6e"
+-- Iteration 6 --
+string(144) "5c7839305c7839315c7830305c7839335c7839345c7839305c7839315c7839355c7839365c7839375c7839385c7839395c7839615c7839625c7839635c7839645c7839655c783966"
+===DONE===
diff --git a/ext/standard/tests/strings/bin2hex_error.phpt b/ext/standard/tests/strings/bin2hex_error.phpt
new file mode 100644
index 000000000..5864133ec
--- /dev/null
+++ b/ext/standard/tests/strings/bin2hex_error.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test bin2hex() function : error conditions
+--FILE--
+<?php
+
+/* Prototype : string bin2hex ( string $str )
+ * Description: Convert binary data into hexadecimal representation
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing bin2hex() : error conditions ***\n";
+
+echo "\n-- Testing bin2hex() function with no arguments --\n";
+var_dump( bin2hex() );
+
+echo "\n-- Testing bin2hex() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( bin2hex("Hello World", $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing bin2hex() : error conditions ***
+
+-- Testing bin2hex() function with no arguments --
+
+Warning: Wrong parameter count for bin2hex() in %s on line %d
+NULL
+
+-- Testing bin2hex() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for bin2hex() in %s on line %d
+NULL
+
+===DONE===
diff --git a/ext/standard/tests/strings/bin2hex_variation1.phpt b/ext/standard/tests/strings/bin2hex_variation1.phpt
new file mode 100644
index 000000000..e616c1c47
--- /dev/null
+++ b/ext/standard/tests/strings/bin2hex_variation1.phpt
@@ -0,0 +1,126 @@
+--TEST--
+Test bin2hex() function : usage variations - test values for $str argument
+--FILE--
+<?php
+
+/* Prototype : string bin2hex ( string $str )
+ * Description: Convert binary data into hexadecimal representation
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing bin2hex() function: with unexpected inputs for 'str' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $input
+$inputs = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ 123456,
+
+ // float values
+/*4*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*7*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*10*/true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*14*/NULL,
+ null,
+
+ // objects
+/*16*/new sample(),
+
+ // resource
+/*17*/$file_handle,
+
+ // undefined variable
+/*18*/@$undefined_var,
+
+ // unset variable
+/*19*/@$unset_var
+);
+
+// loop through with each element of the $inputs array to test bin2hex() function
+$count = 1;
+foreach($inputs as $input) {
+ echo "-- Iteration $count --\n";
+ var_dump(bin2hex($input) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing bin2hex() function: with unexpected inputs for 'str' argument ***
+-- Iteration 1 --
+string(2) "30"
+-- Iteration 2 --
+string(2) "31"
+-- Iteration 3 --
+string(12) "313233343536"
+-- Iteration 4 --
+string(8) "31302e35"
+-- Iteration 5 --
+string(10) "2d32302e35"
+-- Iteration 6 --
+string(24) "313031323334353637303030"
+-- Iteration 7 --
+
+Notice: Array to string conversion in %s on line %d
+string(10) "4172726179"
+-- Iteration 8 --
+
+Notice: Array to string conversion in %s on line %d
+string(10) "4172726179"
+-- Iteration 9 --
+
+Notice: Array to string conversion in %s on line %d
+string(10) "4172726179"
+-- Iteration 10 --
+string(2) "31"
+-- Iteration 11 --
+string(0) ""
+-- Iteration 12 --
+string(2) "31"
+-- Iteration 13 --
+string(0) ""
+-- Iteration 14 --
+string(0) ""
+-- Iteration 15 --
+string(0) ""
+-- Iteration 16 --
+string(26) "73616d706c65206f626a656374"
+-- Iteration 17 --
+string(%d) "%s"
+-- Iteration 18 --
+string(0) ""
+-- Iteration 19 --
+string(0) ""
+===DONE===
diff --git a/ext/standard/tests/strings/bug37262.phpt b/ext/standard/tests/strings/bug37262.phpt
index 6fe2d9f37..5a9f7f724 100644
--- a/ext/standard/tests/strings/bug37262.phpt
+++ b/ext/standard/tests/strings/bug37262.phpt
@@ -5,5 +5,5 @@ Bug #37262 (var_export() does not escape \0 character)
$func = create_function('$a', 'return $a;');
var_export($func);
?>
---EXPECT--
-'' . "\0" . 'lambda_1'
+--EXPECTF--
+'' . "\0" . 'lambda_%d'
diff --git a/ext/standard/tests/strings/bug40754.phpt b/ext/standard/tests/strings/bug40754.phpt
index 943114d51..e4bba8f44 100644
--- a/ext/standard/tests/strings/bug40754.phpt
+++ b/ext/standard/tests/strings/bug40754.phpt
@@ -53,10 +53,10 @@ bool(false)
Warning: stripos(): Offset not contained in string in %s on line %d
bool(false)
-Notice: strrpos(): Offset is greater than the length of haystack string in %s on line %d
+Warning: strrpos(): Offset is greater than the length of haystack string in %s on line %d
bool(false)
-Notice: strripos(): Offset is greater than the length of haystack string in %s on line %d
+Warning: strripos(): Offset is greater than the length of haystack string in %s on line %d
bool(false)
int(2)
string(8) "abcdeabc"
diff --git a/ext/standard/tests/strings/bug45166.phpt b/ext/standard/tests/strings/bug45166.phpt
new file mode 100644
index 000000000..60449e04f
--- /dev/null
+++ b/ext/standard/tests/strings/bug45166.phpt
@@ -0,0 +1,10 @@
+--TEST--
+Bug #45166 (substr() )
+--FILE--
+<?php
+ echo substr('cd', -3) . "\n";
+?>
+===DONE===
+--EXPECT--
+cd
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/bug45485.phpt b/ext/standard/tests/strings/bug45485.phpt
new file mode 100644
index 000000000..4d24c9ad8
--- /dev/null
+++ b/ext/standard/tests/strings/bug45485.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Bug #45485 (strip_tags and <?XML tag)
+--FILE--
+<?php
+
+$s =<<< EOD
+This text is shown <?XML:NAMESPACE PREFIX = ST1 /><b>This Text disappears</b>
+EOD;
+
+$s = strip_tags($s);
+echo htmlspecialchars($s),"\n";
+
+$s =<<< EOD
+This text is shown <?xml:NAMESPACE PREFIX = ST1 /><b>This Text disappears</b>
+EOD;
+
+$s = strip_tags($s);
+echo htmlspecialchars($s),"\n";
+
+?>
+--EXPECT--
+This text is shown This Text disappears
+This text is shown This Text disappears
diff --git a/ext/standard/tests/strings/bug47322.phpt b/ext/standard/tests/strings/bug47322.phpt
new file mode 100644
index 000000000..e04b230ba
--- /dev/null
+++ b/ext/standard/tests/strings/bug47322.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Bug #47322 (sscanf %d does't work)
+--FILE--
+<?php
+
+sscanf(":59:58","%s:%d:%f", $a, $b, $c);
+echo "[$a][$b][$c]\n";
+
+sscanf("15:01:58.2","%d:%f:%f", $a, $b, $c);
+echo "[$a][$b][$c]\n";
+
+sscanf("15.1111::foo","%f:%d:%s", $a, $b, $c);
+echo "[$a][$b][$c]\n";
+
+?>
+--EXPECT--
+[:59:58][][]
+[15][1][58.2]
+[15.1111][1][58.2]
diff --git a/ext/standard/tests/strings/chr_basic.phpt b/ext/standard/tests/strings/chr_basic.phpt
new file mode 100644
index 000000000..378b4027a
--- /dev/null
+++ b/ext/standard/tests/strings/chr_basic.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Test chr() function : basic functionality
+--FILE--
+<?php
+
+/* Prototype : string chr ( int $ascii )
+ * Description: Return a specific character
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing chr() : basic functionality ***\n";
+
+echo chr(72). chr(101) . chr(108) . chr(108). chr(111); // Hello
+echo chr(10); // "\n"
+echo "World";
+echo "\n";
+?>
+===DONE===
+--EXPECTF--
+*** Testing chr() : basic functionality ***
+Hello
+World
+===DONE===
diff --git a/ext/standard/tests/strings/chr_error.phpt b/ext/standard/tests/strings/chr_error.phpt
new file mode 100644
index 000000000..d5fb97455
--- /dev/null
+++ b/ext/standard/tests/strings/chr_error.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test chr() function : error conditions
+--FILE--
+<?php
+
+/* Prototype : string chr ( int $ascii )
+ * Description: Return a specific character
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing chr() : error conditions ***\n";
+
+echo "\n-- Testing chr() function with no arguments --\n";
+var_dump( chr() );
+
+echo "\n-- Testing chr() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( chr(72, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing chr() : error conditions ***
+
+-- Testing chr() function with no arguments --
+
+Warning: Wrong parameter count for chr() in %s on line %d
+NULL
+
+-- Testing chr() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for chr() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/strings/chr_variation1.phpt b/ext/standard/tests/strings/chr_variation1.phpt
new file mode 100644
index 000000000..1d9e8e91c
--- /dev/null
+++ b/ext/standard/tests/strings/chr_variation1.phpt
@@ -0,0 +1,125 @@
+--TEST--
+Test chr() function : usage variations - test values for $ascii argument
+--FILE--
+<?php
+
+/* Prototype : string chr ( int $ascii )
+ * Description: Return a specific character
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing chr() function: with unexpected inputs for 'ascii' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $input
+$inputs = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ 255,
+ 256,
+
+ // float values
+/*5*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*8*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*11*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*15*/ NULL,
+ null,
+
+ // objects
+/*17*/ new sample(),
+
+ // resource
+/*18*/ $file_handle,
+
+ // undefined variable
+/*19*/ @$undefined_var,
+
+ // unset variable
+/*20*/ @$unset_var
+);
+
+// loop through with each element of the $inputs array to test chr() function
+$count = 1;
+foreach($inputs as $input) {
+ echo "-- Iteration $count --\n";
+ var_dump( bin2hex(chr($input)) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing chr() function: with unexpected inputs for 'ascii' argument ***
+-- Iteration 1 --
+string(2) "00"
+-- Iteration 2 --
+string(2) "01"
+-- Iteration 3 --
+string(2) "ff"
+-- Iteration 4 --
+string(2) "00"
+-- Iteration 5 --
+string(2) "0a"
+-- Iteration 6 --
+string(2) "ec"
+-- Iteration 7 --
+string(2) "58"
+-- Iteration 8 --
+string(2) "00"
+-- Iteration 9 --
+string(2) "01"
+-- Iteration 10 --
+string(2) "01"
+-- Iteration 11 --
+string(2) "01"
+-- Iteration 12 --
+string(2) "00"
+-- Iteration 13 --
+string(2) "01"
+-- Iteration 14 --
+string(2) "00"
+-- Iteration 15 --
+string(2) "00"
+-- Iteration 16 --
+string(2) "00"
+-- Iteration 17 --
+
+Notice: Object of class sample could not be converted to int in %s on line %d
+string(2) "01"
+-- Iteration 18 --
+string(%d) "%s"
+-- Iteration 19 --
+string(2) "00"
+-- Iteration 20 --
+string(2) "00"
+===DONE===
diff --git a/ext/standard/tests/strings/convert_cyr_string_basic.phpt b/ext/standard/tests/strings/convert_cyr_string_basic.phpt
new file mode 100644
index 000000000..e29ad330c
--- /dev/null
+++ b/ext/standard/tests/strings/convert_cyr_string_basic.phpt
@@ -0,0 +1,165 @@
+--TEST--
+Test convert_cyr_string() function : basic functionality
+--FILE--
+<?php
+
+/* Prototype : string convert_cyr_string ( string $str , string $from , string $to )
+ * Description: Convert from one Cyrillic character set to another
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing convert_cyr_string() : basic functionality ***\n";
+
+$str = "Convert from one Cyrillic character set to another.";
+
+echo "\n-- First try some simple English text --\n";
+var_dump(bin2hex(convert_cyr_string($str, 'w', 'k')));
+var_dump(bin2hex(convert_cyr_string($str, 'w', 'i')));
+
+
+echo "\n-- Now try some of characters in 128-255 range --\n";
+
+for ($i = 128; $i < 256; $i++) {
+ $str = chr($i);
+ echo "$i: " . bin2hex(convert_cyr_string($str, 'w', 'k')) . "\n";
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing convert_cyr_string() : basic functionality ***
+
+-- First try some simple English text --
+string(102) "436f6e766572742066726f6d206f6e6520437972696c6c6963206368617261637465722073657420746f20616e6f746865722e"
+string(102) "436f6e766572742066726f6d206f6e6520437972696c6c6963206368617261637465722073657420746f20616e6f746865722e"
+
+-- Now try some of characters in 128-255 range --
+128: 2e
+129: 2e
+130: 2e
+131: 2e
+132: 2e
+133: 2e
+134: 2e
+135: 2e
+136: 2e
+137: 2e
+138: 2e
+139: 2e
+140: 2e
+141: 2e
+142: 2e
+143: 2e
+144: 2e
+145: 2e
+146: 2e
+147: 2e
+148: 2e
+149: 2e
+150: 2e
+151: 2e
+152: 2e
+153: 2e
+154: 2e
+155: 2e
+156: 2e
+157: 2e
+158: 2e
+159: 2e
+160: 9a
+161: ae
+162: be
+163: 2e
+164: 9f
+165: bd
+166: 2e
+167: 2e
+168: b3
+169: bf
+170: b4
+171: 9d
+172: 2e
+173: 2e
+174: 9c
+175: b7
+176: 2e
+177: 2e
+178: b6
+179: a6
+180: ad
+181: 2e
+182: 2e
+183: 9e
+184: a3
+185: 98
+186: a4
+187: 9b
+188: 2e
+189: 2e
+190: 2e
+191: a7
+192: e1
+193: e2
+194: f7
+195: e7
+196: e4
+197: e5
+198: f6
+199: fa
+200: e9
+201: ea
+202: eb
+203: ec
+204: ed
+205: ee
+206: ef
+207: f0
+208: f2
+209: f3
+210: f4
+211: f5
+212: e6
+213: e8
+214: e3
+215: fe
+216: fb
+217: fd
+218: ff
+219: f9
+220: f8
+221: fc
+222: e0
+223: f1
+224: c1
+225: c2
+226: d7
+227: c7
+228: c4
+229: c5
+230: d6
+231: da
+232: c9
+233: ca
+234: cb
+235: cc
+236: cd
+237: ce
+238: cf
+239: d0
+240: d2
+241: d3
+242: d4
+243: d5
+244: c6
+245: c8
+246: c3
+247: de
+248: db
+249: dd
+250: df
+251: d9
+252: d8
+253: dc
+254: c0
+255: d1
+===DONE===
diff --git a/ext/standard/tests/strings/convert_cyr_string_error.phpt b/ext/standard/tests/strings/convert_cyr_string_error.phpt
new file mode 100644
index 000000000..21471074e
--- /dev/null
+++ b/ext/standard/tests/strings/convert_cyr_string_error.phpt
@@ -0,0 +1,73 @@
+--TEST--
+Test convert_cyr_string() function : error conditions
+--FILE--
+<?php
+
+/* Prototype : string convert_cyr_string ( string $str , string $from , string $to )
+ * Description: Convert from one Cyrillic character set to another
+ * Source code: ext/standard/string.c
+*/
+
+$str = "hello";
+$from = "k";
+$to = "d";
+$extra_arg = 10;
+
+echo "*** Testing convert_cyr_string() : error conditions ***\n";
+
+echo "\n-- Testing convert_cyr_string() function with no arguments --\n";
+var_dump( convert_cyr_string() );
+
+echo "\n-- Testing convert_cyr_string() function with no 'to' character set --\n";
+var_dump( convert_cyr_string($str, $from) );
+
+echo "\n-- Testing convert_cyr_string() function with more than expected no. of arguments --\n";
+var_dump( convert_cyr_string($str, $from, $to, $extra_arg) );
+
+echo "\n-- Testing convert_cyr_string() function with invalid 'from' character set --\n";
+var_dump(bin2hex( convert_cyr_string($str, "?", $to) ));
+
+echo "\n-- Testing convert_cyr_string() function with invalid 'to' character set --\n";
+var_dump(bin2hex( convert_cyr_string($str, $from, "?")) );
+
+echo "\n-- Testing convert_cyr_string() function with invalid 'from' and 'to' character set --\n";
+var_dump(bin2hex( convert_cyr_string($str, ">", "?")) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing convert_cyr_string() : error conditions ***
+
+-- Testing convert_cyr_string() function with no arguments --
+
+Warning: Wrong parameter count for convert_cyr_string() in %s on line %d
+NULL
+
+-- Testing convert_cyr_string() function with no 'to' character set --
+
+Warning: Wrong parameter count for convert_cyr_string() in %s on line %d
+NULL
+
+-- Testing convert_cyr_string() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for convert_cyr_string() in %s on line %d
+NULL
+
+-- Testing convert_cyr_string() function with invalid 'from' character set --
+
+Warning: convert_cyr_string(): Unknown source charset: ? in %s on line %d
+string(10) "68656c6c6f"
+
+-- Testing convert_cyr_string() function with invalid 'to' character set --
+
+Warning: convert_cyr_string(): Unknown destination charset: ? in %s on line %d
+string(10) "68656c6c6f"
+
+-- Testing convert_cyr_string() function with invalid 'from' and 'to' character set --
+
+Warning: convert_cyr_string(): Unknown source charset: > in %s on line %d
+
+Warning: convert_cyr_string(): Unknown destination charset: ? in %s on line %d
+string(10) "68656c6c6f"
+
+===DONE===
diff --git a/ext/standard/tests/strings/convert_cyr_string_variation1.phpt b/ext/standard/tests/strings/convert_cyr_string_variation1.phpt
new file mode 100644
index 000000000..d2bd82b4b
--- /dev/null
+++ b/ext/standard/tests/strings/convert_cyr_string_variation1.phpt
@@ -0,0 +1,137 @@
+--TEST--
+Test convert_cyr_string() function : usage variations - test values for $str argument
+--FILE--
+<?php
+
+/* Prototype : string convert_cyr_string ( string $str , string $from , string $to )
+ * Description: Convert from one Cyrillic character set to another
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing convert_cyr_string() function: with unexpected inputs for 'str' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $str
+$inputs = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ 255,
+ 256,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*7*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*10*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*17*/ NULL,
+ null,
+
+ // objects
+/*19*/ new sample(),
+
+ // resource
+/*20*/ $file_handle,
+
+ // undefined variable
+/*21*/ @$undefined_var,
+
+ // unset variable
+/*22*/ @$unset_var
+);
+
+// loop through with each element of the $inputs array to test convert_cyr_string() function
+$count = 1;
+$from = "w";
+$to = "k";
+foreach($inputs as $input) {
+ echo "-- Iteration $count --\n";
+ var_dump( convert_cyr_string($input, $from, $to) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing convert_cyr_string() function: with unexpected inputs for 'str' argument ***
+-- Iteration 1 --
+string(1) "0"
+-- Iteration 2 --
+string(1) "1"
+-- Iteration 3 --
+string(3) "255"
+-- Iteration 4 --
+string(3) "256"
+-- Iteration 5 --
+string(10) "2147483647"
+-- Iteration 6 --
+string(11) "-2147483648"
+-- Iteration 7 --
+string(4) "10.5"
+-- Iteration 8 --
+string(5) "-20.5"
+-- Iteration 9 --
+string(12) "101234567000"
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 12 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 13 --
+string(1) "1"
+-- Iteration 14 --
+string(0) ""
+-- Iteration 15 --
+string(1) "1"
+-- Iteration 16 --
+string(0) ""
+-- Iteration 17 --
+string(0) ""
+-- Iteration 18 --
+string(0) ""
+-- Iteration 19 --
+string(13) "sample object"
+-- Iteration 20 --
+string(%d) "Resource id #%d"
+-- Iteration 21 --
+string(0) ""
+-- Iteration 22 --
+string(0) ""
+===DONE===
diff --git a/ext/standard/tests/strings/convert_uudecode_basic.phpt b/ext/standard/tests/strings/convert_uudecode_basic.phpt
new file mode 100644
index 000000000..6e334a981
--- /dev/null
+++ b/ext/standard/tests/strings/convert_uudecode_basic.phpt
@@ -0,0 +1,54 @@
+--TEST--
+Test convert_uudecode() function : basic functionality
+--FILE--
+<?php
+
+/* Prototype : string convert_uudecode ( string $data )
+ * Description: Decode a uuencoded string
+ * Source code: ext/standard/uuencode.c
+*/
+
+echo "*** Testing convert_uudecode() : basic functionality ***\n";
+
+// array with different values for $string
+$strings = array (
+
+ //double quoted strings
+ "123",
+ "abc",
+ "1a2b3c",
+ "Here is a simple string to test convert_uuencode/decode",
+ "\t This String contains \t\t some control characters\r\n",
+ "\x90\x91\x00\x93\x94\x90\x91\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f",
+
+ //single quoted strings
+ '123',
+ 'abc',
+ '1a2b3c',
+ '\t This String contains \t\t some control characters\r\n',
+
+);
+
+// loop through with each element of the $strings array to test convert_uudecode() function
+$count = 1;
+foreach($strings as $string) {
+
+ $encode = convert_uuencode($string);
+ $decode = convert_uudecode($encode);
+
+ if ($decode != $string) {
+ var_dump($encode, $decode, $string);
+ exit("TEST FAILED on iteration $count\n");
+ }
+
+ $count ++;
+}
+
+echo "TEST PASSED\n";
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing convert_uudecode() : basic functionality ***
+TEST PASSED
+===DONE===
diff --git a/ext/standard/tests/strings/convert_uudecode_error.phpt b/ext/standard/tests/strings/convert_uudecode_error.phpt
new file mode 100644
index 000000000..77d3a8883
--- /dev/null
+++ b/ext/standard/tests/strings/convert_uudecode_error.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test convert_uudecode() function : error conditions
+--FILE--
+<?php
+
+/* Prototype : string convert_uudecode ( string $data )
+ * Description: Decode a uuencoded string
+ * Source code: ext/standard/uuencode.c
+*/
+
+echo "*** Testing convert_uudecode() : error conditions ***\n";
+
+echo "\n-- Testing convert_uudecode() function with no arguments --\n";
+var_dump( convert_uudecode() );
+
+echo "\n-- Testing convert_uudecode() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( convert_uudecode(72, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing convert_uudecode() : error conditions ***
+
+-- Testing convert_uudecode() function with no arguments --
+
+Warning: convert_uudecode() expects exactly 1 parameter, 0 given in %s on line %d
+bool(false)
+
+-- Testing convert_uudecode() function with more than expected no. of arguments --
+
+Warning: convert_uudecode() expects exactly 1 parameter, 2 given in %s on line %d
+bool(false)
+
+===DONE===
diff --git a/ext/standard/tests/strings/convert_uudecode_variation1.phpt b/ext/standard/tests/strings/convert_uudecode_variation1.phpt
new file mode 100644
index 000000000..049fd7f65
--- /dev/null
+++ b/ext/standard/tests/strings/convert_uudecode_variation1.phpt
@@ -0,0 +1,161 @@
+--TEST--
+Test convert_uudecode() function : usage variations - test values for $data argument
+--FILE--
+<?php
+
+/* Prototype : string convert_uudecode ( string $data )
+ * Description: Decode a uuencoded string
+ * Source code: ext/standard/uuencode.c
+*/
+
+echo "*** Testing convert_uudecode() function: with unexpected inputs for 'data' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $data
+$inputs = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ 255,
+ 256,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*7*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*10*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*17*/ NULL,
+ null,
+
+ // objects
+/*19*/ new sample(),
+
+ // resource
+/*20*/ $file_handle,
+
+ // undefined variable
+/*21*/ @$undefined_var,
+
+ // unset variable
+/*22*/ @$unset_var
+);
+
+// loop through with each element of the $data array to test convert_uudecode() function
+$count = 1;
+foreach($inputs as $input) {
+ echo "-- Iteration $count --\n";
+ var_dump( convert_uudecode($input) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing convert_uudecode() function: with unexpected inputs for 'data' argument ***
+-- Iteration 1 --
+
+Warning: convert_uudecode(): The given parameter is not a valid uuencoded string in %s on line %d
+bool(false)
+-- Iteration 2 --
+
+Warning: convert_uudecode(): The given parameter is not a valid uuencoded string in %s on line %d
+bool(false)
+-- Iteration 3 --
+
+Warning: convert_uudecode(): The given parameter is not a valid uuencoded string in %s on line %d
+bool(false)
+-- Iteration 4 --
+
+Warning: convert_uudecode(): The given parameter is not a valid uuencoded string in %s on line %d
+bool(false)
+-- Iteration 5 --
+
+Warning: convert_uudecode(): The given parameter is not a valid uuencoded string in %s on line %d
+bool(false)
+-- Iteration 6 --
+
+Warning: convert_uudecode(): The given parameter is not a valid uuencoded string in %s on line %d
+bool(false)
+-- Iteration 7 --
+
+Warning: convert_uudecode(): The given parameter is not a valid uuencoded string in %s on line %d
+bool(false)
+-- Iteration 8 --
+
+Warning: convert_uudecode(): The given parameter is not a valid uuencoded string in %s on line %d
+bool(false)
+-- Iteration 9 --
+
+Warning: convert_uudecode(): The given parameter is not a valid uuencoded string in %s on line %d
+bool(false)
+-- Iteration 10 --
+
+Warning: convert_uudecode() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+-- Iteration 11 --
+
+Warning: convert_uudecode() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+-- Iteration 12 --
+
+Warning: convert_uudecode() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+-- Iteration 13 --
+
+Warning: convert_uudecode(): The given parameter is not a valid uuencoded string in %s on line %d
+bool(false)
+-- Iteration 14 --
+bool(false)
+-- Iteration 15 --
+
+Warning: convert_uudecode(): The given parameter is not a valid uuencoded string in %s on line %d
+bool(false)
+-- Iteration 16 --
+bool(false)
+-- Iteration 17 --
+bool(false)
+-- Iteration 18 --
+bool(false)
+-- Iteration 19 --
+
+Warning: convert_uudecode(): The given parameter is not a valid uuencoded string in %s on line %d
+bool(false)
+-- Iteration 20 --
+
+Warning: convert_uudecode() expects parameter 1 to be string, resource given in %s on line %d
+bool(false)
+-- Iteration 21 --
+bool(false)
+-- Iteration 22 --
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/strings/convert_uuencode_basic.phpt b/ext/standard/tests/strings/convert_uuencode_basic.phpt
new file mode 100644
index 000000000..df8ee3666
--- /dev/null
+++ b/ext/standard/tests/strings/convert_uuencode_basic.phpt
@@ -0,0 +1,88 @@
+--TEST--
+Test convert_uuencode() function : basic functionality
+--FILE--
+<?php
+
+/* Prototype : string convert_uuencode ( string $data )
+ * Description: Uuencode a string
+ * Source code: ext/standard/uuencode.c
+*/
+
+echo "*** Testing convert_uuencode() : basic functionality ***\n";
+
+// array with different values for $string
+$strings = array (
+
+ //double quoted strings
+ b"123",
+ b"abc",
+ b"1a2b3c",
+ b"Here is a simple string to test convert_uuencode/decode",
+ b"\t This String contains \t\t some control characters\r\n",
+ b"\x90\x91\x00\x93\x94\x90\x91\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f",
+
+ //single quoted strings
+ b'123',
+ b'abc',
+ b'1a2b3c',
+ b'\t This String contains \t\t some control characters\r\n',
+
+);
+
+// loop through with each element of the $strings array to test convert_uuencode() function
+$count = 1;
+foreach($strings as $string) {
+ echo "-- Iteration $count --\n";
+ var_dump( convert_uuencode($string) );
+ $count ++;
+}
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing convert_uuencode() : basic functionality ***
+-- Iteration 1 --
+string(8) "#,3(S
+`
+"
+-- Iteration 2 --
+string(8) "#86)C
+`
+"
+-- Iteration 3 --
+string(12) "&,6$R8C-C
+`
+"
+-- Iteration 4 --
+string(82) "M2&5R92!I<R!A('-I;7!L92!S=')I;F<@=&\@=&5S="!C;VYV97)T7W5U96YC
+*;V1E+V1E8V]D90``
+`
+"
+-- Iteration 5 --
+string(74) "M"2!4:&ES(%-T<FEN9R!C;VYT86EN<R`)"2!S;VUE(&-O;G1R;VP@8VAA<F%C
+&=&5R<PT*
+`
+"
+-- Iteration 6 --
+string(28) "2D)$`DY20D966EYB9FIN<G9Z?
+`
+"
+-- Iteration 7 --
+string(8) "#,3(S
+`
+"
+-- Iteration 8 --
+string(8) "#86)C
+`
+"
+-- Iteration 9 --
+string(12) "&,6$R8C-C
+`
+"
+-- Iteration 10 --
+string(82) "M7'0@5&AI<R!3=')I;F<@8V]N=&%I;G,@7'1<="!S;VUE(&-O;G1R;VP@8VAA
++<F%C=&5R<UQR7&X`
+`
+"
+===DONE===
diff --git a/ext/standard/tests/strings/convert_uuencode_error.phpt b/ext/standard/tests/strings/convert_uuencode_error.phpt
new file mode 100644
index 000000000..a995e18fe
--- /dev/null
+++ b/ext/standard/tests/strings/convert_uuencode_error.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test convert_uuencode() function : error conditions
+--FILE--
+<?php
+
+/* Prototype : string convert_uuencode ( string $data )
+ * Description: Uuencode a string
+ * Source code: ext/standard/uuencode.c
+*/
+
+echo "*** Testing convert_uuencode() : error conditions ***\n";
+
+echo "\n-- Testing chconvert_uuencoder() function with no arguments --\n";
+var_dump( convert_uuencode() );
+
+echo "\n-- Testing convert_uuencode() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( convert_uuencode(72, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing convert_uuencode() : error conditions ***
+
+-- Testing chconvert_uuencoder() function with no arguments --
+
+Warning: convert_uuencode() expects exactly 1 parameter, 0 given in %s on line %d
+bool(false)
+
+-- Testing convert_uuencode() function with more than expected no. of arguments --
+
+Warning: convert_uuencode() expects exactly 1 parameter, 2 given in %s on line %d
+bool(false)
+
+===DONE===
diff --git a/ext/standard/tests/strings/convert_uuencode_variation1.phpt b/ext/standard/tests/strings/convert_uuencode_variation1.phpt
new file mode 100644
index 000000000..12ca28196
--- /dev/null
+++ b/ext/standard/tests/strings/convert_uuencode_variation1.phpt
@@ -0,0 +1,137 @@
+--TEST--
+Test convert_uuencode() function : usage variations - test values for $data argument
+--FILE--
+<?php
+
+/* Prototype : string convert_uuencode ( string $data )
+ * Description: Uuencode a string
+ * Source code: ext/standard/uuencode.c
+*/
+
+echo "*** Testing convert_uuencode() function: with unexpected inputs for 'data' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $data
+$inputs = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ 255,
+ 256,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*7*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*10*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*17*/ NULL,
+ null,
+
+ // objects
+/*19*/ new sample(),
+
+ // resource
+/*20*/ $file_handle,
+
+ // undefined variable
+/*21*/ @$undefined_var,
+
+ // unset variable
+/*22*/ @$unset_var
+);
+
+// loop through with each element of the $data array to test convert_uuencode() function
+$count = 1;
+foreach($inputs as $input) {
+ echo "-- Iteration $count --\n";
+ var_dump( bin2hex(convert_uuencode($input)) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing convert_uuencode() function: with unexpected inputs for 'data' argument ***
+-- Iteration 1 --
+string(16) "212c6060600a600a"
+-- Iteration 2 --
+string(16) "212c3060600a600a"
+-- Iteration 3 --
+string(16) "232c4334550a600a"
+-- Iteration 4 --
+string(16) "232c4334560a600a"
+-- Iteration 5 --
+string(40) "2a2c4324542d5330582c5338542d5060600a600a"
+-- Iteration 6 --
+string(40) "2b2b3328512d233c542e232c562d2340600a600a"
+-- Iteration 7 --
+string(24) "242c33604e2d3060600a600a"
+-- Iteration 8 --
+string(24) "252b3328502b4334600a600a"
+-- Iteration 9 --
+string(40) "2c2c3360512c432c542d3338572c2360500a600a"
+-- Iteration 10 --
+
+Warning: convert_uuencode() expects parameter 1 to be string, array given in %s on line %d
+string(0) ""
+-- Iteration 11 --
+
+Warning: convert_uuencode() expects parameter 1 to be string, array given in %s on line %d
+string(0) ""
+-- Iteration 12 --
+
+Warning: convert_uuencode() expects parameter 1 to be string, array given in %s on line %d
+string(0) ""
+-- Iteration 13 --
+string(16) "212c3060600a600a"
+-- Iteration 14 --
+string(0) ""
+-- Iteration 15 --
+string(16) "212c3060600a600a"
+-- Iteration 16 --
+string(0) ""
+-- Iteration 17 --
+string(0) ""
+-- Iteration 18 --
+string(0) ""
+-- Iteration 19 --
+string(48) "2d3c56254d3c26514528265d423a4635433d6060600a600a"
+-- Iteration 20 --
+
+Warning: convert_uuencode() expects parameter 1 to be string, resource given in %s on line %d
+string(0) ""
+-- Iteration 21 --
+string(0) ""
+-- Iteration 22 --
+string(0) ""
+===DONE===
diff --git a/ext/standard/tests/strings/count_chars_basic.phpt b/ext/standard/tests/strings/count_chars_basic.phpt
new file mode 100644
index 000000000..f28fa63b2
--- /dev/null
+++ b/ext/standard/tests/strings/count_chars_basic.phpt
@@ -0,0 +1,1574 @@
+--TEST--
+Test count_chars() function : basic functionality
+--FILE--
+<?php
+
+/* Prototype : mixed count_chars ( string $string [, int $mode ] )
+ * Description: Return information about characters used in a string
+ * Source code: ext/standard/string.c
+*/
+
+
+echo "*** Testing count_chars() : basic functionality ***\n";
+
+$string = "Return information about characters used in a string";
+
+var_dump(count_chars($string));
+var_dump(count_chars($string, 0));
+var_dump(count_chars($string, 1));
+var_dump(count_chars($string, 2));
+var_dump(count_chars($string, 3));
+var_dump(bin2hex(count_chars($string, 4)));
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing count_chars() : basic functionality ***
+array(256) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(0)
+ [4]=>
+ int(0)
+ [5]=>
+ int(0)
+ [6]=>
+ int(0)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+ [9]=>
+ int(0)
+ [10]=>
+ int(0)
+ [11]=>
+ int(0)
+ [12]=>
+ int(0)
+ [13]=>
+ int(0)
+ [14]=>
+ int(0)
+ [15]=>
+ int(0)
+ [16]=>
+ int(0)
+ [17]=>
+ int(0)
+ [18]=>
+ int(0)
+ [19]=>
+ int(0)
+ [20]=>
+ int(0)
+ [21]=>
+ int(0)
+ [22]=>
+ int(0)
+ [23]=>
+ int(0)
+ [24]=>
+ int(0)
+ [25]=>
+ int(0)
+ [26]=>
+ int(0)
+ [27]=>
+ int(0)
+ [28]=>
+ int(0)
+ [29]=>
+ int(0)
+ [30]=>
+ int(0)
+ [31]=>
+ int(0)
+ [32]=>
+ int(7)
+ [33]=>
+ int(0)
+ [34]=>
+ int(0)
+ [35]=>
+ int(0)
+ [36]=>
+ int(0)
+ [37]=>
+ int(0)
+ [38]=>
+ int(0)
+ [39]=>
+ int(0)
+ [40]=>
+ int(0)
+ [41]=>
+ int(0)
+ [42]=>
+ int(0)
+ [43]=>
+ int(0)
+ [44]=>
+ int(0)
+ [45]=>
+ int(0)
+ [46]=>
+ int(0)
+ [47]=>
+ int(0)
+ [48]=>
+ int(0)
+ [49]=>
+ int(0)
+ [50]=>
+ int(0)
+ [51]=>
+ int(0)
+ [52]=>
+ int(0)
+ [53]=>
+ int(0)
+ [54]=>
+ int(0)
+ [55]=>
+ int(0)
+ [56]=>
+ int(0)
+ [57]=>
+ int(0)
+ [58]=>
+ int(0)
+ [59]=>
+ int(0)
+ [60]=>
+ int(0)
+ [61]=>
+ int(0)
+ [62]=>
+ int(0)
+ [63]=>
+ int(0)
+ [64]=>
+ int(0)
+ [65]=>
+ int(0)
+ [66]=>
+ int(0)
+ [67]=>
+ int(0)
+ [68]=>
+ int(0)
+ [69]=>
+ int(0)
+ [70]=>
+ int(0)
+ [71]=>
+ int(0)
+ [72]=>
+ int(0)
+ [73]=>
+ int(0)
+ [74]=>
+ int(0)
+ [75]=>
+ int(0)
+ [76]=>
+ int(0)
+ [77]=>
+ int(0)
+ [78]=>
+ int(0)
+ [79]=>
+ int(0)
+ [80]=>
+ int(0)
+ [81]=>
+ int(0)
+ [82]=>
+ int(1)
+ [83]=>
+ int(0)
+ [84]=>
+ int(0)
+ [85]=>
+ int(0)
+ [86]=>
+ int(0)
+ [87]=>
+ int(0)
+ [88]=>
+ int(0)
+ [89]=>
+ int(0)
+ [90]=>
+ int(0)
+ [91]=>
+ int(0)
+ [92]=>
+ int(0)
+ [93]=>
+ int(0)
+ [94]=>
+ int(0)
+ [95]=>
+ int(0)
+ [96]=>
+ int(0)
+ [97]=>
+ int(5)
+ [98]=>
+ int(1)
+ [99]=>
+ int(2)
+ [100]=>
+ int(1)
+ [101]=>
+ int(3)
+ [102]=>
+ int(1)
+ [103]=>
+ int(1)
+ [104]=>
+ int(1)
+ [105]=>
+ int(4)
+ [106]=>
+ int(0)
+ [107]=>
+ int(0)
+ [108]=>
+ int(0)
+ [109]=>
+ int(1)
+ [110]=>
+ int(5)
+ [111]=>
+ int(3)
+ [112]=>
+ int(0)
+ [113]=>
+ int(0)
+ [114]=>
+ int(5)
+ [115]=>
+ int(3)
+ [116]=>
+ int(5)
+ [117]=>
+ int(3)
+ [118]=>
+ int(0)
+ [119]=>
+ int(0)
+ [120]=>
+ int(0)
+ [121]=>
+ int(0)
+ [122]=>
+ int(0)
+ [123]=>
+ int(0)
+ [124]=>
+ int(0)
+ [125]=>
+ int(0)
+ [126]=>
+ int(0)
+ [127]=>
+ int(0)
+ [128]=>
+ int(0)
+ [129]=>
+ int(0)
+ [130]=>
+ int(0)
+ [131]=>
+ int(0)
+ [132]=>
+ int(0)
+ [133]=>
+ int(0)
+ [134]=>
+ int(0)
+ [135]=>
+ int(0)
+ [136]=>
+ int(0)
+ [137]=>
+ int(0)
+ [138]=>
+ int(0)
+ [139]=>
+ int(0)
+ [140]=>
+ int(0)
+ [141]=>
+ int(0)
+ [142]=>
+ int(0)
+ [143]=>
+ int(0)
+ [144]=>
+ int(0)
+ [145]=>
+ int(0)
+ [146]=>
+ int(0)
+ [147]=>
+ int(0)
+ [148]=>
+ int(0)
+ [149]=>
+ int(0)
+ [150]=>
+ int(0)
+ [151]=>
+ int(0)
+ [152]=>
+ int(0)
+ [153]=>
+ int(0)
+ [154]=>
+ int(0)
+ [155]=>
+ int(0)
+ [156]=>
+ int(0)
+ [157]=>
+ int(0)
+ [158]=>
+ int(0)
+ [159]=>
+ int(0)
+ [160]=>
+ int(0)
+ [161]=>
+ int(0)
+ [162]=>
+ int(0)
+ [163]=>
+ int(0)
+ [164]=>
+ int(0)
+ [165]=>
+ int(0)
+ [166]=>
+ int(0)
+ [167]=>
+ int(0)
+ [168]=>
+ int(0)
+ [169]=>
+ int(0)
+ [170]=>
+ int(0)
+ [171]=>
+ int(0)
+ [172]=>
+ int(0)
+ [173]=>
+ int(0)
+ [174]=>
+ int(0)
+ [175]=>
+ int(0)
+ [176]=>
+ int(0)
+ [177]=>
+ int(0)
+ [178]=>
+ int(0)
+ [179]=>
+ int(0)
+ [180]=>
+ int(0)
+ [181]=>
+ int(0)
+ [182]=>
+ int(0)
+ [183]=>
+ int(0)
+ [184]=>
+ int(0)
+ [185]=>
+ int(0)
+ [186]=>
+ int(0)
+ [187]=>
+ int(0)
+ [188]=>
+ int(0)
+ [189]=>
+ int(0)
+ [190]=>
+ int(0)
+ [191]=>
+ int(0)
+ [192]=>
+ int(0)
+ [193]=>
+ int(0)
+ [194]=>
+ int(0)
+ [195]=>
+ int(0)
+ [196]=>
+ int(0)
+ [197]=>
+ int(0)
+ [198]=>
+ int(0)
+ [199]=>
+ int(0)
+ [200]=>
+ int(0)
+ [201]=>
+ int(0)
+ [202]=>
+ int(0)
+ [203]=>
+ int(0)
+ [204]=>
+ int(0)
+ [205]=>
+ int(0)
+ [206]=>
+ int(0)
+ [207]=>
+ int(0)
+ [208]=>
+ int(0)
+ [209]=>
+ int(0)
+ [210]=>
+ int(0)
+ [211]=>
+ int(0)
+ [212]=>
+ int(0)
+ [213]=>
+ int(0)
+ [214]=>
+ int(0)
+ [215]=>
+ int(0)
+ [216]=>
+ int(0)
+ [217]=>
+ int(0)
+ [218]=>
+ int(0)
+ [219]=>
+ int(0)
+ [220]=>
+ int(0)
+ [221]=>
+ int(0)
+ [222]=>
+ int(0)
+ [223]=>
+ int(0)
+ [224]=>
+ int(0)
+ [225]=>
+ int(0)
+ [226]=>
+ int(0)
+ [227]=>
+ int(0)
+ [228]=>
+ int(0)
+ [229]=>
+ int(0)
+ [230]=>
+ int(0)
+ [231]=>
+ int(0)
+ [232]=>
+ int(0)
+ [233]=>
+ int(0)
+ [234]=>
+ int(0)
+ [235]=>
+ int(0)
+ [236]=>
+ int(0)
+ [237]=>
+ int(0)
+ [238]=>
+ int(0)
+ [239]=>
+ int(0)
+ [240]=>
+ int(0)
+ [241]=>
+ int(0)
+ [242]=>
+ int(0)
+ [243]=>
+ int(0)
+ [244]=>
+ int(0)
+ [245]=>
+ int(0)
+ [246]=>
+ int(0)
+ [247]=>
+ int(0)
+ [248]=>
+ int(0)
+ [249]=>
+ int(0)
+ [250]=>
+ int(0)
+ [251]=>
+ int(0)
+ [252]=>
+ int(0)
+ [253]=>
+ int(0)
+ [254]=>
+ int(0)
+ [255]=>
+ int(0)
+}
+array(256) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(0)
+ [4]=>
+ int(0)
+ [5]=>
+ int(0)
+ [6]=>
+ int(0)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+ [9]=>
+ int(0)
+ [10]=>
+ int(0)
+ [11]=>
+ int(0)
+ [12]=>
+ int(0)
+ [13]=>
+ int(0)
+ [14]=>
+ int(0)
+ [15]=>
+ int(0)
+ [16]=>
+ int(0)
+ [17]=>
+ int(0)
+ [18]=>
+ int(0)
+ [19]=>
+ int(0)
+ [20]=>
+ int(0)
+ [21]=>
+ int(0)
+ [22]=>
+ int(0)
+ [23]=>
+ int(0)
+ [24]=>
+ int(0)
+ [25]=>
+ int(0)
+ [26]=>
+ int(0)
+ [27]=>
+ int(0)
+ [28]=>
+ int(0)
+ [29]=>
+ int(0)
+ [30]=>
+ int(0)
+ [31]=>
+ int(0)
+ [32]=>
+ int(7)
+ [33]=>
+ int(0)
+ [34]=>
+ int(0)
+ [35]=>
+ int(0)
+ [36]=>
+ int(0)
+ [37]=>
+ int(0)
+ [38]=>
+ int(0)
+ [39]=>
+ int(0)
+ [40]=>
+ int(0)
+ [41]=>
+ int(0)
+ [42]=>
+ int(0)
+ [43]=>
+ int(0)
+ [44]=>
+ int(0)
+ [45]=>
+ int(0)
+ [46]=>
+ int(0)
+ [47]=>
+ int(0)
+ [48]=>
+ int(0)
+ [49]=>
+ int(0)
+ [50]=>
+ int(0)
+ [51]=>
+ int(0)
+ [52]=>
+ int(0)
+ [53]=>
+ int(0)
+ [54]=>
+ int(0)
+ [55]=>
+ int(0)
+ [56]=>
+ int(0)
+ [57]=>
+ int(0)
+ [58]=>
+ int(0)
+ [59]=>
+ int(0)
+ [60]=>
+ int(0)
+ [61]=>
+ int(0)
+ [62]=>
+ int(0)
+ [63]=>
+ int(0)
+ [64]=>
+ int(0)
+ [65]=>
+ int(0)
+ [66]=>
+ int(0)
+ [67]=>
+ int(0)
+ [68]=>
+ int(0)
+ [69]=>
+ int(0)
+ [70]=>
+ int(0)
+ [71]=>
+ int(0)
+ [72]=>
+ int(0)
+ [73]=>
+ int(0)
+ [74]=>
+ int(0)
+ [75]=>
+ int(0)
+ [76]=>
+ int(0)
+ [77]=>
+ int(0)
+ [78]=>
+ int(0)
+ [79]=>
+ int(0)
+ [80]=>
+ int(0)
+ [81]=>
+ int(0)
+ [82]=>
+ int(1)
+ [83]=>
+ int(0)
+ [84]=>
+ int(0)
+ [85]=>
+ int(0)
+ [86]=>
+ int(0)
+ [87]=>
+ int(0)
+ [88]=>
+ int(0)
+ [89]=>
+ int(0)
+ [90]=>
+ int(0)
+ [91]=>
+ int(0)
+ [92]=>
+ int(0)
+ [93]=>
+ int(0)
+ [94]=>
+ int(0)
+ [95]=>
+ int(0)
+ [96]=>
+ int(0)
+ [97]=>
+ int(5)
+ [98]=>
+ int(1)
+ [99]=>
+ int(2)
+ [100]=>
+ int(1)
+ [101]=>
+ int(3)
+ [102]=>
+ int(1)
+ [103]=>
+ int(1)
+ [104]=>
+ int(1)
+ [105]=>
+ int(4)
+ [106]=>
+ int(0)
+ [107]=>
+ int(0)
+ [108]=>
+ int(0)
+ [109]=>
+ int(1)
+ [110]=>
+ int(5)
+ [111]=>
+ int(3)
+ [112]=>
+ int(0)
+ [113]=>
+ int(0)
+ [114]=>
+ int(5)
+ [115]=>
+ int(3)
+ [116]=>
+ int(5)
+ [117]=>
+ int(3)
+ [118]=>
+ int(0)
+ [119]=>
+ int(0)
+ [120]=>
+ int(0)
+ [121]=>
+ int(0)
+ [122]=>
+ int(0)
+ [123]=>
+ int(0)
+ [124]=>
+ int(0)
+ [125]=>
+ int(0)
+ [126]=>
+ int(0)
+ [127]=>
+ int(0)
+ [128]=>
+ int(0)
+ [129]=>
+ int(0)
+ [130]=>
+ int(0)
+ [131]=>
+ int(0)
+ [132]=>
+ int(0)
+ [133]=>
+ int(0)
+ [134]=>
+ int(0)
+ [135]=>
+ int(0)
+ [136]=>
+ int(0)
+ [137]=>
+ int(0)
+ [138]=>
+ int(0)
+ [139]=>
+ int(0)
+ [140]=>
+ int(0)
+ [141]=>
+ int(0)
+ [142]=>
+ int(0)
+ [143]=>
+ int(0)
+ [144]=>
+ int(0)
+ [145]=>
+ int(0)
+ [146]=>
+ int(0)
+ [147]=>
+ int(0)
+ [148]=>
+ int(0)
+ [149]=>
+ int(0)
+ [150]=>
+ int(0)
+ [151]=>
+ int(0)
+ [152]=>
+ int(0)
+ [153]=>
+ int(0)
+ [154]=>
+ int(0)
+ [155]=>
+ int(0)
+ [156]=>
+ int(0)
+ [157]=>
+ int(0)
+ [158]=>
+ int(0)
+ [159]=>
+ int(0)
+ [160]=>
+ int(0)
+ [161]=>
+ int(0)
+ [162]=>
+ int(0)
+ [163]=>
+ int(0)
+ [164]=>
+ int(0)
+ [165]=>
+ int(0)
+ [166]=>
+ int(0)
+ [167]=>
+ int(0)
+ [168]=>
+ int(0)
+ [169]=>
+ int(0)
+ [170]=>
+ int(0)
+ [171]=>
+ int(0)
+ [172]=>
+ int(0)
+ [173]=>
+ int(0)
+ [174]=>
+ int(0)
+ [175]=>
+ int(0)
+ [176]=>
+ int(0)
+ [177]=>
+ int(0)
+ [178]=>
+ int(0)
+ [179]=>
+ int(0)
+ [180]=>
+ int(0)
+ [181]=>
+ int(0)
+ [182]=>
+ int(0)
+ [183]=>
+ int(0)
+ [184]=>
+ int(0)
+ [185]=>
+ int(0)
+ [186]=>
+ int(0)
+ [187]=>
+ int(0)
+ [188]=>
+ int(0)
+ [189]=>
+ int(0)
+ [190]=>
+ int(0)
+ [191]=>
+ int(0)
+ [192]=>
+ int(0)
+ [193]=>
+ int(0)
+ [194]=>
+ int(0)
+ [195]=>
+ int(0)
+ [196]=>
+ int(0)
+ [197]=>
+ int(0)
+ [198]=>
+ int(0)
+ [199]=>
+ int(0)
+ [200]=>
+ int(0)
+ [201]=>
+ int(0)
+ [202]=>
+ int(0)
+ [203]=>
+ int(0)
+ [204]=>
+ int(0)
+ [205]=>
+ int(0)
+ [206]=>
+ int(0)
+ [207]=>
+ int(0)
+ [208]=>
+ int(0)
+ [209]=>
+ int(0)
+ [210]=>
+ int(0)
+ [211]=>
+ int(0)
+ [212]=>
+ int(0)
+ [213]=>
+ int(0)
+ [214]=>
+ int(0)
+ [215]=>
+ int(0)
+ [216]=>
+ int(0)
+ [217]=>
+ int(0)
+ [218]=>
+ int(0)
+ [219]=>
+ int(0)
+ [220]=>
+ int(0)
+ [221]=>
+ int(0)
+ [222]=>
+ int(0)
+ [223]=>
+ int(0)
+ [224]=>
+ int(0)
+ [225]=>
+ int(0)
+ [226]=>
+ int(0)
+ [227]=>
+ int(0)
+ [228]=>
+ int(0)
+ [229]=>
+ int(0)
+ [230]=>
+ int(0)
+ [231]=>
+ int(0)
+ [232]=>
+ int(0)
+ [233]=>
+ int(0)
+ [234]=>
+ int(0)
+ [235]=>
+ int(0)
+ [236]=>
+ int(0)
+ [237]=>
+ int(0)
+ [238]=>
+ int(0)
+ [239]=>
+ int(0)
+ [240]=>
+ int(0)
+ [241]=>
+ int(0)
+ [242]=>
+ int(0)
+ [243]=>
+ int(0)
+ [244]=>
+ int(0)
+ [245]=>
+ int(0)
+ [246]=>
+ int(0)
+ [247]=>
+ int(0)
+ [248]=>
+ int(0)
+ [249]=>
+ int(0)
+ [250]=>
+ int(0)
+ [251]=>
+ int(0)
+ [252]=>
+ int(0)
+ [253]=>
+ int(0)
+ [254]=>
+ int(0)
+ [255]=>
+ int(0)
+}
+array(18) {
+ [32]=>
+ int(7)
+ [82]=>
+ int(1)
+ [97]=>
+ int(5)
+ [98]=>
+ int(1)
+ [99]=>
+ int(2)
+ [100]=>
+ int(1)
+ [101]=>
+ int(3)
+ [102]=>
+ int(1)
+ [103]=>
+ int(1)
+ [104]=>
+ int(1)
+ [105]=>
+ int(4)
+ [109]=>
+ int(1)
+ [110]=>
+ int(5)
+ [111]=>
+ int(3)
+ [114]=>
+ int(5)
+ [115]=>
+ int(3)
+ [116]=>
+ int(5)
+ [117]=>
+ int(3)
+}
+array(238) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(0)
+ [2]=>
+ int(0)
+ [3]=>
+ int(0)
+ [4]=>
+ int(0)
+ [5]=>
+ int(0)
+ [6]=>
+ int(0)
+ [7]=>
+ int(0)
+ [8]=>
+ int(0)
+ [9]=>
+ int(0)
+ [10]=>
+ int(0)
+ [11]=>
+ int(0)
+ [12]=>
+ int(0)
+ [13]=>
+ int(0)
+ [14]=>
+ int(0)
+ [15]=>
+ int(0)
+ [16]=>
+ int(0)
+ [17]=>
+ int(0)
+ [18]=>
+ int(0)
+ [19]=>
+ int(0)
+ [20]=>
+ int(0)
+ [21]=>
+ int(0)
+ [22]=>
+ int(0)
+ [23]=>
+ int(0)
+ [24]=>
+ int(0)
+ [25]=>
+ int(0)
+ [26]=>
+ int(0)
+ [27]=>
+ int(0)
+ [28]=>
+ int(0)
+ [29]=>
+ int(0)
+ [30]=>
+ int(0)
+ [31]=>
+ int(0)
+ [33]=>
+ int(0)
+ [34]=>
+ int(0)
+ [35]=>
+ int(0)
+ [36]=>
+ int(0)
+ [37]=>
+ int(0)
+ [38]=>
+ int(0)
+ [39]=>
+ int(0)
+ [40]=>
+ int(0)
+ [41]=>
+ int(0)
+ [42]=>
+ int(0)
+ [43]=>
+ int(0)
+ [44]=>
+ int(0)
+ [45]=>
+ int(0)
+ [46]=>
+ int(0)
+ [47]=>
+ int(0)
+ [48]=>
+ int(0)
+ [49]=>
+ int(0)
+ [50]=>
+ int(0)
+ [51]=>
+ int(0)
+ [52]=>
+ int(0)
+ [53]=>
+ int(0)
+ [54]=>
+ int(0)
+ [55]=>
+ int(0)
+ [56]=>
+ int(0)
+ [57]=>
+ int(0)
+ [58]=>
+ int(0)
+ [59]=>
+ int(0)
+ [60]=>
+ int(0)
+ [61]=>
+ int(0)
+ [62]=>
+ int(0)
+ [63]=>
+ int(0)
+ [64]=>
+ int(0)
+ [65]=>
+ int(0)
+ [66]=>
+ int(0)
+ [67]=>
+ int(0)
+ [68]=>
+ int(0)
+ [69]=>
+ int(0)
+ [70]=>
+ int(0)
+ [71]=>
+ int(0)
+ [72]=>
+ int(0)
+ [73]=>
+ int(0)
+ [74]=>
+ int(0)
+ [75]=>
+ int(0)
+ [76]=>
+ int(0)
+ [77]=>
+ int(0)
+ [78]=>
+ int(0)
+ [79]=>
+ int(0)
+ [80]=>
+ int(0)
+ [81]=>
+ int(0)
+ [83]=>
+ int(0)
+ [84]=>
+ int(0)
+ [85]=>
+ int(0)
+ [86]=>
+ int(0)
+ [87]=>
+ int(0)
+ [88]=>
+ int(0)
+ [89]=>
+ int(0)
+ [90]=>
+ int(0)
+ [91]=>
+ int(0)
+ [92]=>
+ int(0)
+ [93]=>
+ int(0)
+ [94]=>
+ int(0)
+ [95]=>
+ int(0)
+ [96]=>
+ int(0)
+ [106]=>
+ int(0)
+ [107]=>
+ int(0)
+ [108]=>
+ int(0)
+ [112]=>
+ int(0)
+ [113]=>
+ int(0)
+ [118]=>
+ int(0)
+ [119]=>
+ int(0)
+ [120]=>
+ int(0)
+ [121]=>
+ int(0)
+ [122]=>
+ int(0)
+ [123]=>
+ int(0)
+ [124]=>
+ int(0)
+ [125]=>
+ int(0)
+ [126]=>
+ int(0)
+ [127]=>
+ int(0)
+ [128]=>
+ int(0)
+ [129]=>
+ int(0)
+ [130]=>
+ int(0)
+ [131]=>
+ int(0)
+ [132]=>
+ int(0)
+ [133]=>
+ int(0)
+ [134]=>
+ int(0)
+ [135]=>
+ int(0)
+ [136]=>
+ int(0)
+ [137]=>
+ int(0)
+ [138]=>
+ int(0)
+ [139]=>
+ int(0)
+ [140]=>
+ int(0)
+ [141]=>
+ int(0)
+ [142]=>
+ int(0)
+ [143]=>
+ int(0)
+ [144]=>
+ int(0)
+ [145]=>
+ int(0)
+ [146]=>
+ int(0)
+ [147]=>
+ int(0)
+ [148]=>
+ int(0)
+ [149]=>
+ int(0)
+ [150]=>
+ int(0)
+ [151]=>
+ int(0)
+ [152]=>
+ int(0)
+ [153]=>
+ int(0)
+ [154]=>
+ int(0)
+ [155]=>
+ int(0)
+ [156]=>
+ int(0)
+ [157]=>
+ int(0)
+ [158]=>
+ int(0)
+ [159]=>
+ int(0)
+ [160]=>
+ int(0)
+ [161]=>
+ int(0)
+ [162]=>
+ int(0)
+ [163]=>
+ int(0)
+ [164]=>
+ int(0)
+ [165]=>
+ int(0)
+ [166]=>
+ int(0)
+ [167]=>
+ int(0)
+ [168]=>
+ int(0)
+ [169]=>
+ int(0)
+ [170]=>
+ int(0)
+ [171]=>
+ int(0)
+ [172]=>
+ int(0)
+ [173]=>
+ int(0)
+ [174]=>
+ int(0)
+ [175]=>
+ int(0)
+ [176]=>
+ int(0)
+ [177]=>
+ int(0)
+ [178]=>
+ int(0)
+ [179]=>
+ int(0)
+ [180]=>
+ int(0)
+ [181]=>
+ int(0)
+ [182]=>
+ int(0)
+ [183]=>
+ int(0)
+ [184]=>
+ int(0)
+ [185]=>
+ int(0)
+ [186]=>
+ int(0)
+ [187]=>
+ int(0)
+ [188]=>
+ int(0)
+ [189]=>
+ int(0)
+ [190]=>
+ int(0)
+ [191]=>
+ int(0)
+ [192]=>
+ int(0)
+ [193]=>
+ int(0)
+ [194]=>
+ int(0)
+ [195]=>
+ int(0)
+ [196]=>
+ int(0)
+ [197]=>
+ int(0)
+ [198]=>
+ int(0)
+ [199]=>
+ int(0)
+ [200]=>
+ int(0)
+ [201]=>
+ int(0)
+ [202]=>
+ int(0)
+ [203]=>
+ int(0)
+ [204]=>
+ int(0)
+ [205]=>
+ int(0)
+ [206]=>
+ int(0)
+ [207]=>
+ int(0)
+ [208]=>
+ int(0)
+ [209]=>
+ int(0)
+ [210]=>
+ int(0)
+ [211]=>
+ int(0)
+ [212]=>
+ int(0)
+ [213]=>
+ int(0)
+ [214]=>
+ int(0)
+ [215]=>
+ int(0)
+ [216]=>
+ int(0)
+ [217]=>
+ int(0)
+ [218]=>
+ int(0)
+ [219]=>
+ int(0)
+ [220]=>
+ int(0)
+ [221]=>
+ int(0)
+ [222]=>
+ int(0)
+ [223]=>
+ int(0)
+ [224]=>
+ int(0)
+ [225]=>
+ int(0)
+ [226]=>
+ int(0)
+ [227]=>
+ int(0)
+ [228]=>
+ int(0)
+ [229]=>
+ int(0)
+ [230]=>
+ int(0)
+ [231]=>
+ int(0)
+ [232]=>
+ int(0)
+ [233]=>
+ int(0)
+ [234]=>
+ int(0)
+ [235]=>
+ int(0)
+ [236]=>
+ int(0)
+ [237]=>
+ int(0)
+ [238]=>
+ int(0)
+ [239]=>
+ int(0)
+ [240]=>
+ int(0)
+ [241]=>
+ int(0)
+ [242]=>
+ int(0)
+ [243]=>
+ int(0)
+ [244]=>
+ int(0)
+ [245]=>
+ int(0)
+ [246]=>
+ int(0)
+ [247]=>
+ int(0)
+ [248]=>
+ int(0)
+ [249]=>
+ int(0)
+ [250]=>
+ int(0)
+ [251]=>
+ int(0)
+ [252]=>
+ int(0)
+ [253]=>
+ int(0)
+ [254]=>
+ int(0)
+ [255]=>
+ int(0)
+}
+string(18) " Rabcdefghimnorstu"
+string(476) "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051535455565758595a5b5c5d5e5f606a6b6c7071767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff"
+===DONE===
diff --git a/ext/standard/tests/strings/count_chars_error.phpt b/ext/standard/tests/strings/count_chars_error.phpt
new file mode 100644
index 000000000..68510be53
--- /dev/null
+++ b/ext/standard/tests/strings/count_chars_error.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test count_chars() function : error conditions
+--FILE--
+<?php
+
+/* Prototype : mixed count_chars ( string $string [, int $mode ] )
+ * Description: Return information about characters used in a string
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing count_chars() : error conditions ***\n";
+
+echo "\n-- Testing count_chars() function with no arguments --\n";
+var_dump( count_chars() );
+
+echo "\n-- Testing count_chars() function with more than expected no. of arguments --\n";
+$string = "Hello World\n";
+$mode = 1;
+$extra_arg = 10;
+var_dump( count_chars($string, $mode, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing count_chars() : error conditions ***
+
+-- Testing count_chars() function with no arguments --
+
+Warning: Wrong parameter count for count_chars() in %s on line %d
+NULL
+
+-- Testing count_chars() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for count_chars() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/strings/count_chars_variation1.phpt b/ext/standard/tests/strings/count_chars_variation1.phpt
new file mode 100644
index 000000000..a4480a182
--- /dev/null
+++ b/ext/standard/tests/strings/count_chars_variation1.phpt
@@ -0,0 +1,289 @@
+--TEST--
+Test count_chars() function : usage variations - test values for $string argument
+--FILE--
+<?php
+
+/* Prototype : mixed count_chars ( string $string [, int $mode ] )
+ * Description: Return information about characters used in a string
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing count_chars() function: with unexpected inputs for 'string' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $input
+$inputs = array (
+
+ // integer values
+/* 1 */ 0,
+ 1,
+ 255,
+ 256,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/* 7 */ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/* 10 */ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/* 13 */ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/* 17 */ NULL,
+ null,
+
+ // objects
+/* 19 */ new sample(),
+
+ // resource
+/* 20 */ $file_handle,
+
+ // undefined variable
+/* 21 */ @$undefined_var,
+
+ // unset variable
+/* 22 */ @$unset_var
+);
+
+// loop through with each element of the $inputs array to test count_chars() function
+$count = 1;
+foreach($inputs as $input) {
+ echo "-- Iteration $count --\n";
+ // only list characters with a frequency > 0
+ var_dump(count_chars($input, 1));
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing count_chars() function: with unexpected inputs for 'string' argument ***
+-- Iteration 1 --
+array(1) {
+ [48]=>
+ int(1)
+}
+-- Iteration 2 --
+array(1) {
+ [49]=>
+ int(1)
+}
+-- Iteration 3 --
+array(2) {
+ [50]=>
+ int(1)
+ [53]=>
+ int(2)
+}
+-- Iteration 4 --
+array(3) {
+ [50]=>
+ int(1)
+ [53]=>
+ int(1)
+ [54]=>
+ int(1)
+}
+-- Iteration 5 --
+array(7) {
+ [49]=>
+ int(1)
+ [50]=>
+ int(1)
+ [51]=>
+ int(1)
+ [52]=>
+ int(3)
+ [54]=>
+ int(1)
+ [55]=>
+ int(2)
+ [56]=>
+ int(1)
+}
+-- Iteration 6 --
+array(8) {
+ [45]=>
+ int(1)
+ [49]=>
+ int(1)
+ [50]=>
+ int(1)
+ [51]=>
+ int(1)
+ [52]=>
+ int(3)
+ [54]=>
+ int(1)
+ [55]=>
+ int(1)
+ [56]=>
+ int(2)
+}
+-- Iteration 7 --
+array(4) {
+ [46]=>
+ int(1)
+ [48]=>
+ int(1)
+ [49]=>
+ int(1)
+ [53]=>
+ int(1)
+}
+-- Iteration 8 --
+array(5) {
+ [45]=>
+ int(1)
+ [46]=>
+ int(1)
+ [48]=>
+ int(1)
+ [50]=>
+ int(1)
+ [53]=>
+ int(1)
+}
+-- Iteration 9 --
+array(8) {
+ [48]=>
+ int(4)
+ [49]=>
+ int(2)
+ [50]=>
+ int(1)
+ [51]=>
+ int(1)
+ [52]=>
+ int(1)
+ [53]=>
+ int(1)
+ [54]=>
+ int(1)
+ [55]=>
+ int(1)
+}
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+array(4) {
+ [65]=>
+ int(1)
+ [97]=>
+ int(1)
+ [114]=>
+ int(2)
+ [121]=>
+ int(1)
+}
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+array(4) {
+ [65]=>
+ int(1)
+ [97]=>
+ int(1)
+ [114]=>
+ int(2)
+ [121]=>
+ int(1)
+}
+-- Iteration 12 --
+
+Notice: Array to string conversion in %s on line %d
+array(4) {
+ [65]=>
+ int(1)
+ [97]=>
+ int(1)
+ [114]=>
+ int(2)
+ [121]=>
+ int(1)
+}
+-- Iteration 13 --
+array(1) {
+ [49]=>
+ int(1)
+}
+-- Iteration 14 --
+array(0) {
+}
+-- Iteration 15 --
+array(1) {
+ [49]=>
+ int(1)
+}
+-- Iteration 16 --
+array(0) {
+}
+-- Iteration 17 --
+array(0) {
+}
+-- Iteration 18 --
+array(0) {
+}
+-- Iteration 19 --
+array(12) {
+ [32]=>
+ int(1)
+ [97]=>
+ int(1)
+ [98]=>
+ int(1)
+ [99]=>
+ int(1)
+ [101]=>
+ int(2)
+ [106]=>
+ int(1)
+ [108]=>
+ int(1)
+ [109]=>
+ int(1)
+ [111]=>
+ int(1)
+ [112]=>
+ int(1)
+ [115]=>
+ int(1)
+ [116]=>
+ int(1)
+}
+-- Iteration 20 --
+array(%d) {
+ %a
+}
+-- Iteration 21 --
+array(0) {
+}
+-- Iteration 22 --
+array(0) {
+}
+===DONE===
diff --git a/ext/standard/tests/strings/count_chars_variation2.phpt b/ext/standard/tests/strings/count_chars_variation2.phpt
new file mode 100644
index 000000000..103c39826
--- /dev/null
+++ b/ext/standard/tests/strings/count_chars_variation2.phpt
@@ -0,0 +1,150 @@
+--TEST--
+Test count_chars() function : usage variations - test values for $mode argument
+--FILE--
+<?php
+
+/* Prototype : mixed count_chars ( string $string [, int $mode ] )
+ * Description: Return information about characters used in a string
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing count_chars() function: with unexpected inputs for 'mode' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+}
+
+// array with different values for $input
+$inputs = array (
+
+ // integer values
+/* 1 */ 0,
+ 1,
+ 255,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/* 6 */ 0.0,
+ 1.3,
+ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/* 11 */ array(),
+ array(1, 2, 3, 4, 5, 6, 7, 8, 9),
+
+ // boolean values
+/* 14 */ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/* 18 */ NULL,
+ null,
+
+ // string values
+/* 20 */ "ABCD",
+ 'abcd',
+ "1ABC",
+ "5ABC",
+
+ // objects
+/* 24 */ new sample(),
+
+ // undefined variable
+/* 25 */ @$undefined_var,
+
+ // unset variable
+/* 26 */ @$unset_var
+);
+
+// loop through with each element of the $inputs array to test count_chars() function
+// with unexepcted values for the 'mode' argument
+$count = 1;
+$string = "Return information about characters used in a string";
+foreach($inputs as $input) {
+ echo "-- Iteration $count --\n";
+ // only list characters with a frequency > 0
+ var_dump(is_array(count_chars($string, $input)));
+ $count ++;
+}
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing count_chars() function: with unexpected inputs for 'mode' argument ***
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+
+Warning: count_chars(): Unknown mode in %s on line %d
+bool(false)
+-- Iteration 4 --
+
+Warning: count_chars(): Unknown mode in %s on line %d
+bool(false)
+-- Iteration 5 --
+
+Warning: count_chars(): Unknown mode in %s on line %d
+bool(false)
+-- Iteration 6 --
+bool(true)
+-- Iteration 7 --
+bool(true)
+-- Iteration 8 --
+
+Warning: count_chars(): Unknown mode in %s on line %d
+bool(false)
+-- Iteration 9 --
+
+Warning: count_chars(): Unknown mode in %s on line %d
+bool(false)
+-- Iteration 10 --
+
+Warning: count_chars(): Unknown mode in %s on line %d
+bool(false)
+-- Iteration 11 --
+bool(true)
+-- Iteration 12 --
+bool(true)
+-- Iteration 13 --
+bool(true)
+-- Iteration 14 --
+bool(true)
+-- Iteration 15 --
+bool(true)
+-- Iteration 16 --
+bool(true)
+-- Iteration 17 --
+bool(true)
+-- Iteration 18 --
+bool(true)
+-- Iteration 19 --
+bool(true)
+-- Iteration 20 --
+bool(true)
+-- Iteration 21 --
+bool(true)
+-- Iteration 22 --
+
+Warning: count_chars(): Unknown mode in %s on line %d
+bool(false)
+-- Iteration 23 --
+
+Notice: Object of class sample could not be converted to int in %s on line %d
+bool(true)
+-- Iteration 24 --
+bool(true)
+-- Iteration 25 --
+bool(true)
+===DONE===
diff --git a/ext/standard/tests/strings/explode.phpt b/ext/standard/tests/strings/explode.phpt
index 6d54b6609..1047fb785 100644
--- a/ext/standard/tests/strings/explode.phpt
+++ b/ext/standard/tests/strings/explode.phpt
@@ -17,6 +17,7 @@ var_dump(@explode("a", NULL));
var_dump(@explode(NULL, a));
var_dump(@explode("abc", "acb"));
var_dump(@explode("somestring", "otherstring"));
+var_dump(@explode("somestring", "otherstring", -1));
var_dump(@explode("a", "aaaaaa"));
var_dump(@explode("==", str_repeat("-=".ord(0)."=-", 10)));
var_dump(@explode("=", str_repeat("-=".ord(0)."=-", 10)));
@@ -63,6 +64,8 @@ array(1) {
[0]=>
string(11) "otherstring"
}
+array(0) {
+}
array(7) {
[0]=>
string(0) ""
diff --git a/ext/standard/tests/strings/explode_bug.phpt b/ext/standard/tests/strings/explode_bug.phpt
new file mode 100644
index 000000000..9766f0b8f
--- /dev/null
+++ b/ext/standard/tests/strings/explode_bug.phpt
@@ -0,0 +1,15 @@
+--TEST--
+Explode/memnstr bug
+--INI--
+error_reporting=2047
+memory_limit=256M
+--FILE--
+<?php
+$res = explode(str_repeat("A",145999999),1);
+var_dump($res);
+?>
+--EXPECTF--
+array(1) {
+ [0]=>
+ string(1) "1"
+}
diff --git a/ext/standard/tests/strings/explode_error.phpt b/ext/standard/tests/strings/explode_error.phpt
new file mode 100644
index 000000000..3f18bede8
--- /dev/null
+++ b/ext/standard/tests/strings/explode_error.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test explode() function : error conditions
+--FILE--
+<?php
+
+/* Prototype : array explode ( string $delimiter , string $string [, int $limit ] )
+ * Description: Split a string by string.
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing explode() : error conditions ***\n";
+
+echo "\n-- Testing explode() function with no arguments --\n";
+var_dump( explode() );
+
+echo "\n-- Testing explode() function with more than expected no. of arguments --\n";
+$delimeter = " ";
+$string = "piece1 piece2 piece3 piece4 piece5 piece6";
+$limit = 5;
+$extra_arg = 10;
+var_dump( explode($delimeter, $string, $limit, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing explode() : error conditions ***
+
+-- Testing explode() function with no arguments --
+
+Warning: Wrong parameter count for explode() in %s on line %d
+NULL
+
+-- Testing explode() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for explode() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/strings/explode_variation1.phpt b/ext/standard/tests/strings/explode_variation1.phpt
new file mode 100644
index 000000000..abb3c3223
--- /dev/null
+++ b/ext/standard/tests/strings/explode_variation1.phpt
@@ -0,0 +1,203 @@
+--TEST--
+Test explode() function : usage variations - test values for $delimiter argument
+--FILE--
+<?php
+
+/* Prototype : array explode ( string $delimiter , string $string [, int $limit ] )
+ * Description: Split a string by string.
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing explode() function: with unexpected inputs for 'delimiter' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $delimeter
+$delimeters = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ 255,
+ 256,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*7*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*10*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*17*/ NULL,
+ null,
+
+ // objects
+/*19*/ new sample(),
+
+ // resource
+/*20*/ $file_handle,
+
+ // undefined variable
+/*21*/ @$undefined_var,
+
+ // unset variable
+/*22*/ @$unset_var
+);
+
+// loop through with each element of the $delimeters array to test explode() function
+$count = 1;
+$string = "piece1 piece2 piece3 piece4 piece5 piece6";
+$limit = 5;
+foreach($delimeters as $delimeter) {
+ echo "-- Iteration $count --\n";
+ var_dump( explode($delimeter, $string, $limit) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing explode() function: with unexpected inputs for 'delimiter' argument ***
+-- Iteration 1 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 2 --
+array(2) {
+ [0]=>
+ string(5) "piece"
+ [1]=>
+ string(35) " piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 3 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 4 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 5 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 6 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 7 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 8 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 9 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 12 --
+
+Notice: Array to string conversion in %s on line %d
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 13 --
+array(2) {
+ [0]=>
+ string(5) "piece"
+ [1]=>
+ string(35) " piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 14 --
+
+Warning: explode(): Empty delimiter in %s on line %d
+bool(false)
+-- Iteration 15 --
+array(2) {
+ [0]=>
+ string(5) "piece"
+ [1]=>
+ string(35) " piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 16 --
+
+Warning: explode(): Empty delimiter in %s on line %d
+bool(false)
+-- Iteration 17 --
+
+Warning: explode(): Empty delimiter in %s on line %d
+bool(false)
+-- Iteration 18 --
+
+Warning: explode(): Empty delimiter in %s on line %d
+bool(false)
+-- Iteration 19 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 20 --
+array(1) {
+ [0]=>
+ string(%d) "%s"
+}
+-- Iteration 21 --
+
+Warning: explode(): Empty delimiter in %s on line %d
+bool(false)
+-- Iteration 22 --
+
+Warning: explode(): Empty delimiter in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/strings/explode_variation2.phpt b/ext/standard/tests/strings/explode_variation2.phpt
new file mode 100644
index 000000000..f2c0057fe
--- /dev/null
+++ b/ext/standard/tests/strings/explode_variation2.phpt
@@ -0,0 +1,209 @@
+--TEST--
+Test explode() function : usage variations - test values for $string argument
+--FILE--
+<?php
+
+/* Prototype : array explode ( string $delimiter , string $string [, int $limit ] )
+ * Description: Split a string by string.
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing explode() function: with unexpected inputs for 'string' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $string
+$strings = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ 255,
+ 256,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*7*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*10*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*17*/ NULL,
+ null,
+
+ // objects
+/*19*/ new sample(),
+
+ // resource
+/*20*/ $file_handle,
+
+ // undefined variable
+/*21*/ @$undefined_var,
+
+ // unset variable
+/*22*/ @$unset_var
+);
+
+// loop through with each element of the $strings array to test explode() function
+$count = 1;
+$delimeter = " ";
+$limit = 5;
+foreach($strings as $string) {
+ echo "-- Iteration $count --\n";
+ var_dump( explode($delimeter, $string, $limit) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing explode() function: with unexpected inputs for 'string' argument ***
+-- Iteration 1 --
+array(1) {
+ [0]=>
+ string(1) "0"
+}
+-- Iteration 2 --
+array(1) {
+ [0]=>
+ string(1) "1"
+}
+-- Iteration 3 --
+array(1) {
+ [0]=>
+ string(3) "255"
+}
+-- Iteration 4 --
+array(1) {
+ [0]=>
+ string(3) "256"
+}
+-- Iteration 5 --
+array(1) {
+ [0]=>
+ string(10) "2147483647"
+}
+-- Iteration 6 --
+array(1) {
+ [0]=>
+ string(11) "-2147483648"
+}
+-- Iteration 7 --
+array(1) {
+ [0]=>
+ string(4) "10.5"
+}
+-- Iteration 8 --
+array(1) {
+ [0]=>
+ string(5) "-20.5"
+}
+-- Iteration 9 --
+array(1) {
+ [0]=>
+ string(12) "101234567000"
+}
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+array(1) {
+ [0]=>
+ string(5) "Array"
+}
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+array(1) {
+ [0]=>
+ string(5) "Array"
+}
+-- Iteration 12 --
+
+Notice: Array to string conversion in %s on line %d
+array(1) {
+ [0]=>
+ string(5) "Array"
+}
+-- Iteration 13 --
+array(1) {
+ [0]=>
+ string(1) "1"
+}
+-- Iteration 14 --
+array(1) {
+ [0]=>
+ string(0) ""
+}
+-- Iteration 15 --
+array(1) {
+ [0]=>
+ string(1) "1"
+}
+-- Iteration 16 --
+array(1) {
+ [0]=>
+ string(0) ""
+}
+-- Iteration 17 --
+array(1) {
+ [0]=>
+ string(0) ""
+}
+-- Iteration 18 --
+array(1) {
+ [0]=>
+ string(0) ""
+}
+-- Iteration 19 --
+array(2) {
+ [0]=>
+ string(6) "sample"
+ [1]=>
+ string(6) "object"
+}
+-- Iteration 20 --
+array(3) {
+ [0]=>
+ string(8) "Resource"
+ [1]=>
+ string(2) "id"
+ [2]=>
+ string(%d) "#%d"
+}
+-- Iteration 21 --
+array(1) {
+ [0]=>
+ string(0) ""
+}
+-- Iteration 22 --
+array(1) {
+ [0]=>
+ string(0) ""
+}
+===DONE===
diff --git a/ext/standard/tests/strings/explode_variation3.phpt b/ext/standard/tests/strings/explode_variation3.phpt
new file mode 100644
index 000000000..8d725e7fd
--- /dev/null
+++ b/ext/standard/tests/strings/explode_variation3.phpt
@@ -0,0 +1,244 @@
+--TEST--
+Test explode() function : usage variations - test values for $limit argument
+--FILE--
+<?php
+
+/* Prototype : array explode ( string $delimiter , string $string [, int $limit ] )
+ * Description: Split a string by string.
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing explode() function: with unexpected inputs for 'limit' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $delimeter
+$limits = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ 255,
+ 256,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*7*/ 10.5,
+ -20.5,
+ 10.1234567e5,
+
+ // array values
+/*10*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*17*/ NULL,
+ null,
+
+ // objects
+/*19*/ new sample(),
+
+ // resource
+/*20*/ $file_handle,
+
+ // undefined variable
+/*21*/ @$undefined_var,
+
+ // unset variable
+/*22*/ @$unset_var
+);
+
+// loop through with each element of the $limits array to test explode() function
+$count = 1;
+$delimeter = " ";
+$string = "piece1 piece2 piece3 piece4 piece5 piece6";
+foreach($limits as $limit) {
+ echo "-- Iteration $count --\n";
+ var_dump( explode($delimeter, $string, $limit) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing explode() function: with unexpected inputs for 'limit' argument ***
+-- Iteration 1 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 2 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 3 --
+array(6) {
+ [0]=>
+ string(6) "piece1"
+ [1]=>
+ string(6) "piece2"
+ [2]=>
+ string(6) "piece3"
+ [3]=>
+ string(6) "piece4"
+ [4]=>
+ string(6) "piece5"
+ [5]=>
+ string(6) "piece6"
+}
+-- Iteration 4 --
+array(6) {
+ [0]=>
+ string(6) "piece1"
+ [1]=>
+ string(6) "piece2"
+ [2]=>
+ string(6) "piece3"
+ [3]=>
+ string(6) "piece4"
+ [4]=>
+ string(6) "piece5"
+ [5]=>
+ string(6) "piece6"
+}
+-- Iteration 5 --
+array(6) {
+ [0]=>
+ string(6) "piece1"
+ [1]=>
+ string(6) "piece2"
+ [2]=>
+ string(6) "piece3"
+ [3]=>
+ string(6) "piece4"
+ [4]=>
+ string(6) "piece5"
+ [5]=>
+ string(6) "piece6"
+}
+-- Iteration 6 --
+array(0) {
+}
+-- Iteration 7 --
+array(6) {
+ [0]=>
+ string(6) "piece1"
+ [1]=>
+ string(6) "piece2"
+ [2]=>
+ string(6) "piece3"
+ [3]=>
+ string(6) "piece4"
+ [4]=>
+ string(6) "piece5"
+ [5]=>
+ string(6) "piece6"
+}
+-- Iteration 8 --
+array(0) {
+}
+-- Iteration 9 --
+array(6) {
+ [0]=>
+ string(6) "piece1"
+ [1]=>
+ string(6) "piece2"
+ [2]=>
+ string(6) "piece3"
+ [3]=>
+ string(6) "piece4"
+ [4]=>
+ string(6) "piece5"
+ [5]=>
+ string(6) "piece6"
+}
+-- Iteration 10 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 11 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 12 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 13 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 14 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 15 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 16 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 17 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 18 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 19 --
+
+Notice: Object of class sample could not be converted to int in %s on line %d
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 20 --
+array(%d) {
+%a
+}
+-- Iteration 21 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+-- Iteration 22 --
+array(1) {
+ [0]=>
+ string(41) "piece1 piece2 piece3 piece4 piece5 piece6"
+}
+===DONE===
diff --git a/ext/standard/tests/strings/explode_variation4.phpt b/ext/standard/tests/strings/explode_variation4.phpt
new file mode 100644
index 000000000..080531c6e
--- /dev/null
+++ b/ext/standard/tests/strings/explode_variation4.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test explode() function : usage variations - match longer string
+--FILE--
+<?php
+
+/* Prototype : array explode ( string $delimiter , string $string [, int $limit ] )
+ * Description: Split a string by string.
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing explode() function: match longer string ***\n";
+
+$pizza = "piece1 piece2 piece3 piece4 piece5 piece6 p";
+$pieces = explode(" p", $pizza);
+var_dump($pieces);
+?>
+===DONE===
+--EXPECT--
+*** Testing explode() function: match longer string ***
+array(7) {
+ [0]=>
+ string(6) "piece1"
+ [1]=>
+ string(5) "iece2"
+ [2]=>
+ string(5) "iece3"
+ [3]=>
+ string(5) "iece4"
+ [4]=>
+ string(5) "iece5"
+ [5]=>
+ string(5) "iece6"
+ [6]=>
+ string(0) ""
+}
+===DONE===
diff --git a/ext/standard/tests/strings/explode_variation5.phpt b/ext/standard/tests/strings/explode_variation5.phpt
new file mode 100644
index 000000000..754e55222
--- /dev/null
+++ b/ext/standard/tests/strings/explode_variation5.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Test explode() function : usage variations - positive and negative limits
+--FILE--
+<?php
+
+/* Prototype : array explode ( string $delimiter , string $string [, int $limit ] )
+ * Description: Split a string by string.
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing explode() function: positive and negative limits ***\n";
+$str = 'one||two||three||four';
+
+echo "\n-- positive limit --\n";
+var_dump(explode('||', $str, 2));
+
+echo "\n-- negative limit (since PHP 5.1) --\n";
+var_dump(explode('||', $str, -1));
+
+echo "\n-- negative limit (since PHP 5.1) with null string -- \n";
+var_dump(explode('||', "", -1));
+?>
+===DONE===
+--EXPECT--
+*** Testing explode() function: positive and negative limits ***
+
+-- positive limit --
+array(2) {
+ [0]=>
+ string(3) "one"
+ [1]=>
+ string(16) "two||three||four"
+}
+
+-- negative limit (since PHP 5.1) --
+array(3) {
+ [0]=>
+ string(3) "one"
+ [1]=>
+ string(3) "two"
+ [2]=>
+ string(5) "three"
+}
+
+-- negative limit (since PHP 5.1) with null string --
+array(0) {
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/explode_variation6.phpt b/ext/standard/tests/strings/explode_variation6.phpt
new file mode 100644
index 000000000..d1b34e3ef
--- /dev/null
+++ b/ext/standard/tests/strings/explode_variation6.phpt
@@ -0,0 +1,70 @@
+--TEST--
+Test explode() function : usage variations - misc tests
+--FILE--
+<?php
+
+/* Prototype : array explode ( string $delimiter , string $string [, int $limit ] )
+ * Description: Split a string by string.
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing explode() function: misc tests ***\n";
+
+$str = "one\x00two\x00three\x00four";
+
+echo "\n-- positive limit with null separator --\n";
+$e = test_explode("\x00", $str, 2);
+
+echo "\n-- negative limit (since PHP 5.1) with null separator --\n";
+$e = test_explode("\x00", $str, -2);
+
+echo "\n-- unknown string --\n";
+$e = test_explode("fred", $str,1);
+
+echo "\n-- limit = 0 --\n";
+$e = test_explode("\x00", $str, 0);
+
+echo "\n-- limit = -1 --\n";
+$e = test_explode("\x00", $str, -1);
+
+echo "\n-- large limit = -100 --\n";
+$e = test_explode("\x00", $str, 100);
+
+function test_explode($delim, $string, $limit)
+{
+ $e = explode($delim, $string, $limit);
+ foreach ( $e as $v)
+ {
+ var_dump(bin2hex($v));
+ }
+}
+?>
+===DONE===
+--EXPECT--
+*** Testing explode() function: misc tests ***
+
+-- positive limit with null separator --
+string(6) "6f6e65"
+string(28) "74776f00746872656500666f7572"
+
+-- negative limit (since PHP 5.1) with null separator --
+string(6) "6f6e65"
+string(6) "74776f"
+
+-- unknown string --
+string(36) "6f6e650074776f00746872656500666f7572"
+
+-- limit = 0 --
+string(36) "6f6e650074776f00746872656500666f7572"
+
+-- limit = -1 --
+string(6) "6f6e65"
+string(6) "74776f"
+string(10) "7468726565"
+
+-- large limit = -100 --
+string(6) "6f6e65"
+string(6) "74776f"
+string(10) "7468726565"
+string(8) "666f7572"
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/hebrev_basic.phpt b/ext/standard/tests/strings/hebrev_basic.phpt
new file mode 100644
index 000000000..2f53c6fc2
--- /dev/null
+++ b/ext/standard/tests/strings/hebrev_basic.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test hebrev() function : basic functionality
+--FILE--
+<?php
+
+/* Prototype : string hebrev ( string $hebrew_text [, int $max_chars_per_line ] )
+ * Description: Convert logical Hebrew text to visual text
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing hebrev() : basic functionality ***\n";
+
+$hebrew_text = "The hebrev function converts logical Hebrew text to visual text.\nThe function tries to avoid breaking words.\n";
+
+var_dump(hebrev($hebrew_text));
+var_dump(hebrev($hebrew_text, 15));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing hebrev() : basic functionality ***
+string(109) ".The hebrev function converts logical Hebrew text to visual text
+.The function tries to avoid breaking words
+"
+string(109) "to visual text
+Hebrew text
+logical
+converts
+hebrev function
+.The
+breaking words
+tries to avoid
+.The function
+"
+===DONE===
diff --git a/ext/standard/tests/strings/hebrev_error.phpt b/ext/standard/tests/strings/hebrev_error.phpt
new file mode 100644
index 000000000..c4e3ee6bb
--- /dev/null
+++ b/ext/standard/tests/strings/hebrev_error.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test hebrev() function : error conditions
+--FILE--
+<?php
+
+/* Prototype : string hebrev ( string $hebrew_text [, int $max_chars_per_line ] )
+ * Description: Convert logical Hebrew text to visual text
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing hebrev() : error conditions ***\n";
+
+echo "\n-- Testing hebrev() function with no arguments --\n";
+var_dump( hebrev() );
+
+echo "\n-- Testing hebrev() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( hebrev("Hello World", 5, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing hebrev() : error conditions ***
+
+-- Testing hebrev() function with no arguments --
+
+Warning: Wrong parameter count for hebrev() in %s on line %s
+NULL
+
+-- Testing hebrev() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for hebrev() in %s on line %d
+NULL
+
+===DONE===
diff --git a/ext/standard/tests/strings/hebrev_variation1.phpt b/ext/standard/tests/strings/hebrev_variation1.phpt
new file mode 100644
index 000000000..498980249
--- /dev/null
+++ b/ext/standard/tests/strings/hebrev_variation1.phpt
@@ -0,0 +1,136 @@
+--TEST--
+Test hebrev() function : usage variations - test values for $hebrew_text argument
+--FILE--
+<?php
+
+/* Prototype : string hebrev ( string $hebrew_text [, int $max_chars_per_line ] )
+ * Description: Convert logical Hebrew text to visual text
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing hebrev() function: with unexpected inputs for 'hebrew_text' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $hebrew_text
+$texts = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ 255,
+ 256,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*7*/ 10.5,
+ -20.5,
+ 10.1234567e5,
+
+ // array values
+/*10*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*17*/ NULL,
+ null,
+
+ // objects
+/*19*/ new sample(),
+
+ // resource
+/*20*/ $file_handle,
+
+ // undefined variable
+/*21*/ @$undefined_var,
+
+ // unset variable
+/*22*/ @$unset_var
+);
+
+// loop through with each element of the $texts array to test hebrev() function
+$count = 1;
+
+foreach($texts as $hebrew_text) {
+ echo "-- Iteration $count --\n";
+ var_dump( hebrev($hebrew_text) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing hebrev() function: with unexpected inputs for 'hebrew_text' argument ***
+-- Iteration 1 --
+string(1) "0"
+-- Iteration 2 --
+string(1) "1"
+-- Iteration 3 --
+string(3) "255"
+-- Iteration 4 --
+string(3) "256"
+-- Iteration 5 --
+string(10) "2147483647"
+-- Iteration 6 --
+string(11) "-2147483648"
+-- Iteration 7 --
+string(4) "10.5"
+-- Iteration 8 --
+string(5) "-20.5"
+-- Iteration 9 --
+string(10) "1012345.67"
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 12 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 13 --
+string(1) "1"
+-- Iteration 14 --
+bool(false)
+-- Iteration 15 --
+string(1) "1"
+-- Iteration 16 --
+bool(false)
+-- Iteration 17 --
+bool(false)
+-- Iteration 18 --
+bool(false)
+-- Iteration 19 --
+string(13) "sample object"
+-- Iteration 20 --
+string(%d) "Resource id #%d"
+-- Iteration 21 --
+bool(false)
+-- Iteration 22 --
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/strings/hebrev_variation2.phpt b/ext/standard/tests/strings/hebrev_variation2.phpt
new file mode 100644
index 000000000..07d454560
--- /dev/null
+++ b/ext/standard/tests/strings/hebrev_variation2.phpt
@@ -0,0 +1,298 @@
+--TEST--
+Test hebrev() function : usage variations - test values for $max_chars_per_line argument
+--FILE--
+<?php
+
+/* Prototype : string hebrev ( string $hebrew_text [, int $max_chars_per_line ] )
+ * Description: Convert logical Hebrew text to visual text
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing hebrev() function: with unexpected inputs for 'max_chars_per_line' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $max_chars_per_line
+$inputs = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ 255,
+ 256,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*7*/ 10.5,
+ -20.5,
+ 10.1234567e5,
+
+ // array values
+/*10*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*17*/ NULL,
+ null,
+
+ // string values
+/*19*/ "abc",
+ 'abc',
+ "3abc",
+ "0abc",
+ "0x3",
+
+ // objects
+/*24*/ new sample(),
+
+ // resource
+/*25*/ $file_handle,
+
+ // undefined variable
+/*26*/ @$undefined_var,
+
+ // unset variable
+/*27*/ @$unset_var
+);
+
+// loop through with each element of the $texts array to test hebrev() function
+$count = 1;
+
+$hebrew_text = "The hebrev function converts logical Hebrew text to visual text.\nThe function tries to avoid breaking words.\n";
+
+foreach($inputs as $max_chars_per_line) {
+ echo "-- Iteration $count --\n";
+ var_dump( hebrev($hebrew_text, $max_chars_per_line) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing hebrev() function: with unexpected inputs for 'max_chars_per_line' argument ***
+-- Iteration 1 --
+string(109) ".The hebrev function converts logical Hebrew text to visual text
+.The function tries to avoid breaking words
+"
+-- Iteration 2 --
+string(109) "xttel uaisv
+tot ext
+ewbrHel cagilos rtveonc
+ontincfuv reebh
+he.Ts
+rdwog inakreb
+idvoa
+tos ietrn ioctunf
+he.T
+"
+-- Iteration 3 --
+string(109) ".The hebrev function converts logical Hebrew text to visual text
+.The function tries to avoid breaking words
+"
+-- Iteration 4 --
+string(109) ".The hebrev function converts logical Hebrew text to visual text
+.The function tries to avoid breaking words
+"
+-- Iteration 5 --
+string(109) ".The hebrev function converts logical Hebrew text to visual text
+.The function tries to avoid breaking words
+"
+-- Iteration 6 --
+string(109) "txet
+lausiv
+ot
+txet
+werbeH
+lacigol
+strevnoc
+noitcnuf
+verbeh
+ehT.
+sdrow
+gnikaerb
+diova
+ot
+seirt
+noitcnuf
+ehT.
+"
+-- Iteration 7 --
+string(109) "text
+to visual
+text
+Hebrew
+logical
+converts
+function
+hebrev
+.The
+words
+breaking
+to avoid
+tries
+function
+.The
+"
+-- Iteration 8 --
+string(109) "txet
+lausiv
+ot
+txet
+werbeH
+lacigol
+strevnoc
+noitcnuf
+verbeh
+ehT.
+sdrow
+gnikaerb
+diova
+ot
+seirt
+noitcnuf
+ehT.
+"
+-- Iteration 9 --
+string(109) ".The hebrev function converts logical Hebrew text to visual text
+.The function tries to avoid breaking words
+"
+-- Iteration 10 --
+string(109) ".The hebrev function converts logical Hebrew text to visual text
+.The function tries to avoid breaking words
+"
+-- Iteration 11 --
+string(109) "xttel uaisv
+tot ext
+ewbrHel cagilos rtveonc
+ontincfuv reebh
+he.Ts
+rdwog inakreb
+idvoa
+tos ietrn ioctunf
+he.T
+"
+-- Iteration 12 --
+string(109) "xttel uaisv
+tot ext
+ewbrHel cagilos rtveonc
+ontincfuv reebh
+he.Ts
+rdwog inakreb
+idvoa
+tos ietrn ioctunf
+he.T
+"
+-- Iteration 13 --
+string(109) "xttel uaisv
+tot ext
+ewbrHel cagilos rtveonc
+ontincfuv reebh
+he.Ts
+rdwog inakreb
+idvoa
+tos ietrn ioctunf
+he.T
+"
+-- Iteration 14 --
+string(109) ".The hebrev function converts logical Hebrew text to visual text
+.The function tries to avoid breaking words
+"
+-- Iteration 15 --
+string(109) "xttel uaisv
+tot ext
+ewbrHel cagilos rtveonc
+ontincfuv reebh
+he.Ts
+rdwog inakreb
+idvoa
+tos ietrn ioctunf
+he.T
+"
+-- Iteration 16 --
+string(109) ".The hebrev function converts logical Hebrew text to visual text
+.The function tries to avoid breaking words
+"
+-- Iteration 17 --
+string(109) ".The hebrev function converts logical Hebrew text to visual text
+.The function tries to avoid breaking words
+"
+-- Iteration 18 --
+string(109) ".The hebrev function converts logical Hebrew text to visual text
+.The function tries to avoid breaking words
+"
+-- Iteration 19 --
+string(109) ".The hebrev function converts logical Hebrew text to visual text
+.The function tries to avoid breaking words
+"
+-- Iteration 20 --
+string(109) ".The hebrev function converts logical Hebrew text to visual text
+.The function tries to avoid breaking words
+"
+-- Iteration 21 --
+string(109) "textual vis
+to
+textrew Heb
+icallog
+ertsconvion unctf
+brevhe
+.Therds
+wo
+kingbreaoid av
+to
+riest
+tionfuncThe .
+"
+-- Iteration 22 --
+string(109) ".The hebrev function converts logical Hebrew text to visual text
+.The function tries to avoid breaking words
+"
+-- Iteration 23 --
+string(109) ".The hebrev function converts logical Hebrew text to visual text
+.The function tries to avoid breaking words
+"
+-- Iteration 24 --
+
+Notice: Object of class sample could not be converted to int in %s on line %d
+string(109) "xttel uaisv
+tot ext
+ewbrHel cagilos rtveonc
+ontincfuv reebh
+he.Ts
+rdwog inakreb
+idvoa
+tos ietrn ioctunf
+he.T
+"
+-- Iteration 25 --
+string(109) "%a"
+-- Iteration 26 --
+string(109) ".The hebrev function converts logical Hebrew text to visual text
+.The function tries to avoid breaking words
+"
+-- Iteration 27 --
+string(109) ".The hebrev function converts logical Hebrew text to visual text
+.The function tries to avoid breaking words
+"
+===DONE===
diff --git a/ext/standard/tests/strings/hebrevc_basic.phpt b/ext/standard/tests/strings/hebrevc_basic.phpt
new file mode 100644
index 000000000..9d9a7137c
--- /dev/null
+++ b/ext/standard/tests/strings/hebrevc_basic.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test hebrevc() function : basic functionality
+--FILE--
+<?php
+
+/* Prototype : string hebrevc ( string $hebrew_text [, int $max_chars_per_line ] )
+ * Description: Convert logical Hebrew text to visual text
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing hebrevc() : basic functionality ***\n";
+
+$hebrew_text = "The hebrevc function converts logical Hebrew text to visual text.\nThis function is similar to hebrev() with the difference that it converts newlines (\n) to '<br>\n'.\nThe function tries to avoid breaking words.\n";
+
+var_dump(hebrevc($hebrew_text));
+var_dump(hebrevc($hebrew_text, 15));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing hebrevc() : basic functionality ***
+string(239) ".The hebrevc function converts logical Hebrew text to visual text<br />
+) This function is similar to hebrev() with the difference that it converts newlines<br />
+<to '<br (<br />
+.'<br />
+.The function tries to avoid breaking words<br />
+"
+string(317) "to visual text<br />
+Hebrew text<br />
+logical<br />
+converts<br />
+function<br />
+.The hebrevc<br />
+newlines<br />
+it converts<br />
+difference that<br />
+with the<br />
+to hebrev()<br />
+is similar<br />
+) This function<br />
+<to '<br (<br />
+.'<br />
+breaking words<br />
+tries to avoid<br />
+.The function<br />
+"
+===DONE===
diff --git a/ext/standard/tests/strings/hebrevc_error.phpt b/ext/standard/tests/strings/hebrevc_error.phpt
new file mode 100644
index 000000000..5c54369a3
--- /dev/null
+++ b/ext/standard/tests/strings/hebrevc_error.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test hebrevc() function : error conditions
+--FILE--
+<?php
+
+/* Prototype : string hebrevc ( string $hebrew_text [, int $max_chars_per_line ] )
+ * Description: Convert logical Hebrew text to visual text
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing hebrevc() : error conditions ***\n";
+
+echo "\n-- Testing hebrevc() function with no arguments --\n";
+var_dump( hebrevc() );
+
+echo "\n-- Testing hebrevc() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( hebrevc("Hello World", 5, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing hebrevc() : error conditions ***
+
+-- Testing hebrevc() function with no arguments --
+
+Warning: Wrong parameter count for hebrevc() in %s on line %s
+NULL
+
+-- Testing hebrevc() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for hebrevc() in %s on line %d
+NULL
+
+===DONE===
diff --git a/ext/standard/tests/strings/hebrevc_variation1.phpt b/ext/standard/tests/strings/hebrevc_variation1.phpt
new file mode 100644
index 000000000..173b90390
--- /dev/null
+++ b/ext/standard/tests/strings/hebrevc_variation1.phpt
@@ -0,0 +1,136 @@
+--TEST--
+Test hebrevc() function : usage variations - test values for $hebrew_text argument
+--FILE--
+<?php
+
+/* Prototype : string hebrevc ( string $hebrew_text [, int $max_chars_per_line ] )
+ * Description: Convert logical Hebrew text to visual text
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing hebrevc() function: with unexpected inputs for 'hebrew_text' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $hebrew_text
+$texts = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ 255,
+ 256,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*7*/ 10.5,
+ -20.5,
+ 10.1234567e5,
+
+ // array values
+/*10*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*17*/ NULL,
+ null,
+
+ // objects
+/*19*/ new sample(),
+
+ // resource
+/*20*/ $file_handle,
+
+ // undefined variable
+/*21*/ @$undefined_var,
+
+ // unset variable
+/*22*/ @$unset_var
+);
+
+// loop through with each element of the $texts array to test hebrevc() function
+$count = 1;
+
+foreach($texts as $hebrew_text) {
+ echo "-- Iteration $count --\n";
+ var_dump( hebrevc($hebrew_text) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing hebrevc() function: with unexpected inputs for 'hebrew_text' argument ***
+-- Iteration 1 --
+string(1) "0"
+-- Iteration 2 --
+string(1) "1"
+-- Iteration 3 --
+string(3) "255"
+-- Iteration 4 --
+string(3) "256"
+-- Iteration 5 --
+string(10) "2147483647"
+-- Iteration 6 --
+string(11) "-2147483648"
+-- Iteration 7 --
+string(4) "10.5"
+-- Iteration 8 --
+string(5) "-20.5"
+-- Iteration 9 --
+string(10) "1012345.67"
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 12 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 13 --
+string(1) "1"
+-- Iteration 14 --
+bool(false)
+-- Iteration 15 --
+string(1) "1"
+-- Iteration 16 --
+bool(false)
+-- Iteration 17 --
+bool(false)
+-- Iteration 18 --
+bool(false)
+-- Iteration 19 --
+string(13) "sample object"
+-- Iteration 20 --
+string(%d) "Resource id #%d"
+-- Iteration 21 --
+bool(false)
+-- Iteration 22 --
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/strings/hebrevc_variation2.phpt b/ext/standard/tests/strings/hebrevc_variation2.phpt
new file mode 100644
index 000000000..909e8818f
--- /dev/null
+++ b/ext/standard/tests/strings/hebrevc_variation2.phpt
@@ -0,0 +1,471 @@
+--TEST--
+Test hebrevc() function : usage variations - test values for $max_chars_per_line argument
+--FILE--
+<?php
+
+/* Prototype : string hebrevc ( string $hebrew_text [, int $max_chars_per_line ] )
+ * Description: Convert logical Hebrew text to visual text
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing hebrevc() function: with unexpected inputs for 'max_chars_per_line' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $max_chars_per_line
+$inputs = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ 255,
+ 256,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*7*/ 10.5,
+ -20.5,
+ 10.1234567e5,
+
+ // array values
+/*10*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*17*/ NULL,
+ null,
+
+ // string values
+/*19*/ "abc",
+ 'abc',
+ "3abc",
+ "0abc",
+ "0x3",
+
+ // objects
+/*24*/ new sample(),
+
+ // resource
+/*25*/ $file_handle,
+
+ // undefined variable
+/*26*/ @$undefined_var,
+
+ // unset variable
+/*27*/ @$unset_var
+);
+
+// loop through with each element of the $texts array to test hebrevc() function
+$count = 1;
+
+$hebrew_text = "The hebrevcc function converts logical Hebrew text to visual text.\nThis function is similar to hebrevc() with the difference that it converts newlines (\n) to '<br>\n'.\nThe function tries to avoid breaking words.\n";
+
+foreach($inputs as $max_chars_per_line) {
+ echo "-- Iteration $count --\n";
+ var_dump( hebrevc($hebrew_text, $max_chars_per_line) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing hebrevc() function: with unexpected inputs for 'max_chars_per_line' argument ***
+-- Iteration 1 --
+string(241) ".The hebrevcc function converts logical Hebrew text to visual text<br />
+) This function is similar to hebrevc() with the difference that it converts newlines<br />
+<to '<br (<br />
+.'<br />
+.The function tries to avoid breaking words<br />
+"
+-- Iteration 2 --
+string(331) "xttel uaisv<br />
+tot ext<br />
+ewbrHel cagilos rtveonc<br />
+ontincfuc vcreebh<br />
+he.Ts<br />
+neliewn<br />
+tsernvcot i<br />
+atthe ncrefeifd<br />
+het<br />
+thwi) c(evbrheo t<br />
+arilims<br />
+isn ioctunf<br />
+isTh) (<br />
+r <b'<br />
+to<<br />
+.'s<br />
+rdwog inakreb<br />
+idvoa<br />
+tos ietrn ioctunf<br />
+he.T<br />
+"
+-- Iteration 3 --
+string(241) ".The hebrevcc function converts logical Hebrew text to visual text<br />
+) This function is similar to hebrevc() with the difference that it converts newlines<br />
+<to '<br (<br />
+.'<br />
+.The function tries to avoid breaking words<br />
+"
+-- Iteration 4 --
+string(241) ".The hebrevcc function converts logical Hebrew text to visual text<br />
+) This function is similar to hebrevc() with the difference that it converts newlines<br />
+<to '<br (<br />
+.'<br />
+.The function tries to avoid breaking words<br />
+"
+-- Iteration 5 --
+string(241) ".The hebrevcc function converts logical Hebrew text to visual text<br />
+) This function is similar to hebrevc() with the difference that it converts newlines<br />
+<to '<br (<br />
+.'<br />
+.The function tries to avoid breaking words<br />
+"
+-- Iteration 6 --
+string(421) "txet<br />
+lausiv<br />
+ot<br />
+txet<br />
+werbeH<br />
+lacigol<br />
+strevnoc<br />
+noitcnuf<br />
+ccverbeh<br />
+ehT.<br />
+senilwen<br />
+strevnoc<br />
+ti<br />
+taht<br />
+ecnereffid<br />
+eht<br />
+htiw<br />
+)(cverbeh<br />
+ot<br />
+ralimis<br />
+si<br />
+noitcnuf<br />
+sihT<br />
+)<br />
+(<br />
+rb<'<br />
+ot<<br />
+'.<br />
+sdrow<br />
+gnikaerb<br />
+diova<br />
+ot<br />
+seirt<br />
+noitcnuf<br />
+ehT.<br />
+"
+-- Iteration 7 --
+string(373) "text<br />
+to visual<br />
+text<br />
+Hebrew<br />
+logical<br />
+converts<br />
+function<br />
+hebrevcc<br />
+.The<br />
+newlines<br />
+converts<br />
+that it<br />
+difference<br />
+with the<br />
+hebrevc()<br />
+similar to<br />
+is<br />
+function<br />
+) This<br />
+<to '<br (<br />
+.'<br />
+words<br />
+breaking<br />
+to avoid<br />
+tries<br />
+function<br />
+.The<br />
+"
+-- Iteration 8 --
+string(421) "txet<br />
+lausiv<br />
+ot<br />
+txet<br />
+werbeH<br />
+lacigol<br />
+strevnoc<br />
+noitcnuf<br />
+ccverbeh<br />
+ehT.<br />
+senilwen<br />
+strevnoc<br />
+ti<br />
+taht<br />
+ecnereffid<br />
+eht<br />
+htiw<br />
+)(cverbeh<br />
+ot<br />
+ralimis<br />
+si<br />
+noitcnuf<br />
+sihT<br />
+)<br />
+(<br />
+rb<'<br />
+ot<<br />
+'.<br />
+sdrow<br />
+gnikaerb<br />
+diova<br />
+ot<br />
+seirt<br />
+noitcnuf<br />
+ehT.<br />
+"
+-- Iteration 9 --
+string(241) ".The hebrevcc function converts logical Hebrew text to visual text<br />
+) This function is similar to hebrevc() with the difference that it converts newlines<br />
+<to '<br (<br />
+.'<br />
+.The function tries to avoid breaking words<br />
+"
+-- Iteration 10 --
+string(241) ".The hebrevcc function converts logical Hebrew text to visual text<br />
+) This function is similar to hebrevc() with the difference that it converts newlines<br />
+<to '<br (<br />
+.'<br />
+.The function tries to avoid breaking words<br />
+"
+-- Iteration 11 --
+string(331) "xttel uaisv<br />
+tot ext<br />
+ewbrHel cagilos rtveonc<br />
+ontincfuc vcreebh<br />
+he.Ts<br />
+neliewn<br />
+tsernvcot i<br />
+atthe ncrefeifd<br />
+het<br />
+thwi) c(evbrheo t<br />
+arilims<br />
+isn ioctunf<br />
+isTh) (<br />
+r <b'<br />
+to<<br />
+.'s<br />
+rdwog inakreb<br />
+idvoa<br />
+tos ietrn ioctunf<br />
+he.T<br />
+"
+-- Iteration 12 --
+string(331) "xttel uaisv<br />
+tot ext<br />
+ewbrHel cagilos rtveonc<br />
+ontincfuc vcreebh<br />
+he.Ts<br />
+neliewn<br />
+tsernvcot i<br />
+atthe ncrefeifd<br />
+het<br />
+thwi) c(evbrheo t<br />
+arilims<br />
+isn ioctunf<br />
+isTh) (<br />
+r <b'<br />
+to<<br />
+.'s<br />
+rdwog inakreb<br />
+idvoa<br />
+tos ietrn ioctunf<br />
+he.T<br />
+"
+-- Iteration 13 --
+string(331) "xttel uaisv<br />
+tot ext<br />
+ewbrHel cagilos rtveonc<br />
+ontincfuc vcreebh<br />
+he.Ts<br />
+neliewn<br />
+tsernvcot i<br />
+atthe ncrefeifd<br />
+het<br />
+thwi) c(evbrheo t<br />
+arilims<br />
+isn ioctunf<br />
+isTh) (<br />
+r <b'<br />
+to<<br />
+.'s<br />
+rdwog inakreb<br />
+idvoa<br />
+tos ietrn ioctunf<br />
+he.T<br />
+"
+-- Iteration 14 --
+string(241) ".The hebrevcc function converts logical Hebrew text to visual text<br />
+) This function is similar to hebrevc() with the difference that it converts newlines<br />
+<to '<br (<br />
+.'<br />
+.The function tries to avoid breaking words<br />
+"
+-- Iteration 15 --
+string(331) "xttel uaisv<br />
+tot ext<br />
+ewbrHel cagilos rtveonc<br />
+ontincfuc vcreebh<br />
+he.Ts<br />
+neliewn<br />
+tsernvcot i<br />
+atthe ncrefeifd<br />
+het<br />
+thwi) c(evbrheo t<br />
+arilims<br />
+isn ioctunf<br />
+isTh) (<br />
+r <b'<br />
+to<<br />
+.'s<br />
+rdwog inakreb<br />
+idvoa<br />
+tos ietrn ioctunf<br />
+he.T<br />
+"
+-- Iteration 16 --
+string(241) ".The hebrevcc function converts logical Hebrew text to visual text<br />
+) This function is similar to hebrevc() with the difference that it converts newlines<br />
+<to '<br (<br />
+.'<br />
+.The function tries to avoid breaking words<br />
+"
+-- Iteration 17 --
+string(241) ".The hebrevcc function converts logical Hebrew text to visual text<br />
+) This function is similar to hebrevc() with the difference that it converts newlines<br />
+<to '<br (<br />
+.'<br />
+.The function tries to avoid breaking words<br />
+"
+-- Iteration 18 --
+string(241) ".The hebrevcc function converts logical Hebrew text to visual text<br />
+) This function is similar to hebrevc() with the difference that it converts newlines<br />
+<to '<br (<br />
+.'<br />
+.The function tries to avoid breaking words<br />
+"
+-- Iteration 19 --
+string(241) ".The hebrevcc function converts logical Hebrew text to visual text<br />
+) This function is similar to hebrevc() with the difference that it converts newlines<br />
+<to '<br (<br />
+.'<br />
+.The function tries to avoid breaking words<br />
+"
+-- Iteration 20 --
+string(241) ".The hebrevcc function converts logical Hebrew text to visual text<br />
+) This function is similar to hebrevc() with the difference that it converts newlines<br />
+<to '<br (<br />
+.'<br />
+.The function tries to avoid breaking words<br />
+"
+-- Iteration 21 --
+string(349) "textual vis<br />
+to<br />
+textrew Heb<br />
+icallog<br />
+ertsconvion unctf<br />
+evcchebrThe .<br />
+inesnewlrts onvec<br />
+it<br />
+thatnce feredif<br />
+the<br />
+withc() brevhe<br />
+to<br />
+ilarsim<br />
+is<br />
+tionfunchis ) T<br />
+(<br />
+'<br<to .'<br />
+<br />
+ordsw<br />
+kingbreaoid av<br />
+to<br />
+riest<br />
+tionfuncThe .<br />
+"
+-- Iteration 22 --
+string(241) ".The hebrevcc function converts logical Hebrew text to visual text<br />
+) This function is similar to hebrevc() with the difference that it converts newlines<br />
+<to '<br (<br />
+.'<br />
+.The function tries to avoid breaking words<br />
+"
+-- Iteration 23 --
+string(241) ".The hebrevcc function converts logical Hebrew text to visual text<br />
+) This function is similar to hebrevc() with the difference that it converts newlines<br />
+<to '<br (<br />
+.'<br />
+.The function tries to avoid breaking words<br />
+"
+-- Iteration 24 --
+
+Notice: Object of class sample could not be converted to int in %s on line %d
+string(331) "xttel uaisv<br />
+tot ext<br />
+ewbrHel cagilos rtveonc<br />
+ontincfuc vcreebh<br />
+he.Ts<br />
+neliewn<br />
+tsernvcot i<br />
+atthe ncrefeifd<br />
+het<br />
+thwi) c(evbrheo t<br />
+arilims<br />
+isn ioctunf<br />
+isTh) (<br />
+r <b'<br />
+to<<br />
+.'s<br />
+rdwog inakreb<br />
+idvoa<br />
+tos ietrn ioctunf<br />
+he.T<br />
+"
+-- Iteration 25 --
+string(%d) %a
+-- Iteration 26 --
+string(241) ".The hebrevcc function converts logical Hebrew text to visual text<br />
+) This function is similar to hebrevc() with the difference that it converts newlines<br />
+<to '<br (<br />
+.'<br />
+.The function tries to avoid breaking words<br />
+"
+-- Iteration 27 --
+string(241) ".The hebrevcc function converts logical Hebrew text to visual text<br />
+) This function is similar to hebrevc() with the difference that it converts newlines<br />
+<to '<br (<br />
+.'<br />
+.The function tries to avoid breaking words<br />
+"
+===DONE===
diff --git a/ext/standard/tests/strings/htmlentities18.phpt b/ext/standard/tests/strings/htmlentities18.phpt
index ab3df05da..8970be8a0 100644
--- a/ext/standard/tests/strings/htmlentities18.phpt
+++ b/ext/standard/tests/strings/htmlentities18.phpt
@@ -6,7 +6,8 @@ $tests = array(
"abc",
"abc&amp;sfdsa",
"test&#043;s &amp; some more &#68;",
- "&; &amp &#a; &9;",
+ "test&#x2b;s &amp; some more &#X44;",
+ "&; &amp &#a; &9; &#xyz;",
"&kffjadfdhsjfhjasdhffasdfas;",
"&#8787978789",
"&",
@@ -26,8 +27,10 @@ string(13) "abc&amp;sfdsa"
string(13) "abc&amp;sfdsa"
string(33) "test&#043;s &amp; some more &#68;"
string(33) "test&#043;s &amp; some more &#68;"
-string(24) "&; &amp;amp &amp;#a; &9;"
-string(24) "&; &amp;amp &amp;#a; &9;"
+string(34) "test&#x2b;s &amp; some more &#X44;"
+string(34) "test&#x2b;s &amp; some more &#X44;"
+string(35) "&; &amp;amp &amp;#a; &9; &amp;#xyz;"
+string(35) "&; &amp;amp &amp;#a; &9; &amp;#xyz;"
string(32) "&amp;kffjadfdhsjfhjasdhffasdfas;"
string(32) "&amp;kffjadfdhsjfhjasdhffasdfas;"
string(16) "&amp;#8787978789"
diff --git a/ext/standard/tests/strings/levenshtein.phpt b/ext/standard/tests/strings/levenshtein.phpt
index d7d5e7a44..249b532da 100644
--- a/ext/standard/tests/strings/levenshtein.phpt
+++ b/ext/standard/tests/strings/levenshtein.phpt
@@ -77,10 +77,8 @@ Warning: levenshtein(): Argument string(s) too long in %s on line %d
Warning: levenshtein(): Argument string(s) too long in %s on line %d
all passed
-Notice: Array to string conversion in %s on line %d
-
-Notice: Array to string conversion in %s on line %d
-int(0)
+Warning: levenshtein() expects parameter 1 to be string, array given in %s on line %d
+NULL
int(0)
int(0)
diff --git a/ext/standard/tests/strings/ltrim_basic.phpt b/ext/standard/tests/strings/ltrim_basic.phpt
new file mode 100644
index 000000000..74769cac9
--- /dev/null
+++ b/ext/standard/tests/strings/ltrim_basic.phpt
@@ -0,0 +1,53 @@
+--TEST--
+Test ltrim() function : basic functionality
+--FILE--
+<?php
+
+/* Prototype : string ltrim ( string $str [, string $charlist ] )
+ * Description: Strip whitespace (or other characters) from the beginning of a string.
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing ltrim() : basic functionality ***\n";
+
+$text = " \t\r\n\0\x0B ---These are a few words--- ";
+$hello = "!===Hello World===!";
+$binary = "\x09\x0AExample string";
+$alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+
+echo "\n-- Trim string with all white space characters --\n";
+var_dump(ltrim($text));
+
+echo "\n-- Trim non-whitespace from a string --\n";
+var_dump(ltrim($hello, "=!"));
+
+echo "\n-- Trim some non-white space characters from a string --\n";
+var_dump(ltrim($hello, "!oleH="));
+
+echo "\n-- Trim some non-white space characters from a string suing a character range --\n";
+var_dump(ltrim($alpha, "A..Z"));
+
+
+echo "\n-- Trim the ASCII control characters at the beginning of a string --\n";
+var_dump(ltrim($binary, "\x00..\x1F"));
+
+?>
+===DONE===
+--EXPECT--
+*** Testing ltrim() : basic functionality ***
+
+-- Trim string with all white space characters --
+string(29) "---These are a few words--- "
+
+-- Trim non-whitespace from a string --
+string(15) "Hello World===!"
+
+-- Trim some non-white space characters from a string --
+string(10) " World===!"
+
+-- Trim some non-white space characters from a string suing a character range --
+string(10) "0123456789"
+
+-- Trim the ASCII control characters at the beginning of a string --
+string(14) "Example string"
+===DONE===
diff --git a/ext/standard/tests/strings/ltrim_error.phpt b/ext/standard/tests/strings/ltrim_error.phpt
new file mode 100644
index 000000000..bb9cdfe79
--- /dev/null
+++ b/ext/standard/tests/strings/ltrim_error.phpt
@@ -0,0 +1,61 @@
+--TEST--
+Test ltrim() function : error conditions
+--FILE--
+<?php
+
+/* Prototype : string ltrim ( string $str [, string $charlist ] )
+ * Description: Strip whitespace (or other characters) from the beginning of a string.
+ * Source code: ext/standard/string.c
+*/
+
+
+echo "*** Testing ltrim() : error conditions ***\n";
+
+echo "\n-- Testing ltrim() function with no arguments --\n";
+var_dump( ltrim() );
+
+echo "\n-- Testing ltrim() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( ltrim("Hello World", "Heo", $extra_arg) );
+
+
+$hello = " Hello World\n";
+echo "\n-- Test ltrim function with various invalid charlists\n";
+var_dump(ltrim($hello, "..a"));
+var_dump(ltrim($hello, "a.."));
+var_dump(ltrim($hello, "z..a"));
+var_dump(ltrim($hello, "a..b..c"));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing ltrim() : error conditions ***
+
+-- Testing ltrim() function with no arguments --
+
+Warning: Wrong parameter count for ltrim() in %s on line %d
+NULL
+
+-- Testing ltrim() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for ltrim() in %s on line %d
+NULL
+
+-- Test ltrim function with various invalid charlists
+
+Warning: ltrim(): Invalid '..'-range, no character to the left of '..' in %s on line %d
+string(14) " Hello World
+"
+
+Warning: ltrim(): Invalid '..'-range, no character to the right of '..' in %s on line %d
+string(14) " Hello World
+"
+
+Warning: ltrim(): Invalid '..'-range, '..'-range needs to be incrementing in %s on line %d
+string(14) " Hello World
+"
+
+Warning: ltrim(): Invalid '..'-range in %s on line %d
+string(14) " Hello World
+"
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/ltrim_variation1.phpt b/ext/standard/tests/strings/ltrim_variation1.phpt
new file mode 100644
index 000000000..ef765111e
--- /dev/null
+++ b/ext/standard/tests/strings/ltrim_variation1.phpt
@@ -0,0 +1,136 @@
+--TEST--
+Test ltrim() function : usage variations - test values for $str argument
+--FILE--
+<?php
+
+/* Prototype : string ltrim ( string $str [, string $charlist ] )
+ * Description: Strip whitespace (or other characters) from the beginning of a string.
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing ltrim() function: with unexpected inputs for 'str' argument ***\n";
+
+//get an unset variable
+$unset_var = ' string_val ';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return " sample object ";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $input
+$inputs = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ 255,
+ 256,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*7*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*10*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*17*/ NULL,
+ null,
+
+ // objects
+/*19*/ new sample(),
+
+ // resource
+/*20*/ $file_handle,
+
+ // undefined variable
+/*21*/ @$undefined_var,
+
+ // unset variable
+/*22*/ @$unset_var
+);
+
+// loop through with each element of the $inputs array to test ltrim() function
+$count = 1;
+foreach($inputs as $input) {
+ echo "-- Iteration $count --\n";
+ // strip white space and any "minus" signs
+ var_dump( ltrim($input, " \t-") );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing ltrim() function: with unexpected inputs for 'str' argument ***
+-- Iteration 1 --
+string(1) "0"
+-- Iteration 2 --
+string(1) "1"
+-- Iteration 3 --
+string(3) "255"
+-- Iteration 4 --
+string(3) "256"
+-- Iteration 5 --
+string(10) "2147483647"
+-- Iteration 6 --
+string(10) "2147483648"
+-- Iteration 7 --
+string(4) "10.5"
+-- Iteration 8 --
+string(4) "20.5"
+-- Iteration 9 --
+string(12) "101234567000"
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 12 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 13 --
+string(1) "1"
+-- Iteration 14 --
+string(0) ""
+-- Iteration 15 --
+string(1) "1"
+-- Iteration 16 --
+string(0) ""
+-- Iteration 17 --
+string(0) ""
+-- Iteration 18 --
+string(0) ""
+-- Iteration 19 --
+string(15) "sample object "
+-- Iteration 20 --
+string(%d) "Resource id #%d"
+-- Iteration 21 --
+string(0) ""
+-- Iteration 22 --
+string(0) ""
+===DONE===
diff --git a/ext/standard/tests/strings/ltrim_variation2.phpt b/ext/standard/tests/strings/ltrim_variation2.phpt
new file mode 100644
index 000000000..fea708891
--- /dev/null
+++ b/ext/standard/tests/strings/ltrim_variation2.phpt
@@ -0,0 +1,136 @@
+--TEST--
+Test ltrim() function : usage variations - test values for $charlist argument
+--FILE--
+<?php
+
+/* Prototype : string ltrim ( string $str [, string $charlist ] )
+ * Description: Strip whitespace (or other characters) from the beginning of a string.
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing ltrim() function: with unexpected inputs for 'charlist' argument ***\n";
+
+//get an unset variable
+$unset_var = ' string_val ';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return " sample object ";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $input
+$inputs = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ 255,
+ 256,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*7*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*10*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*17*/ NULL,
+ null,
+
+ // objects
+/*19*/ new sample(),
+
+ // resource
+/*20*/ $file_handle,
+
+ // undefined variable
+/*21*/ @$undefined_var,
+
+ // unset variable
+/*22*/ @$unset_var
+);
+
+// loop through with each element of the $inputs array to test ltrim() function
+$count = 1;
+foreach($inputs as $charlist) {
+ echo "-- Iteration $count --\n";
+ // strip white space and any "minus" signs
+ var_dump( ltrim("!---Hello World---!", $charlist) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing ltrim() function: with unexpected inputs for 'charlist' argument ***
+-- Iteration 1 --
+string(19) "!---Hello World---!"
+-- Iteration 2 --
+string(19) "!---Hello World---!"
+-- Iteration 3 --
+string(19) "!---Hello World---!"
+-- Iteration 4 --
+string(19) "!---Hello World---!"
+-- Iteration 5 --
+string(19) "!---Hello World---!"
+-- Iteration 6 --
+string(19) "!---Hello World---!"
+-- Iteration 7 --
+string(19) "!---Hello World---!"
+-- Iteration 8 --
+string(19) "!---Hello World---!"
+-- Iteration 9 --
+string(19) "!---Hello World---!"
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+string(19) "!---Hello World---!"
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+string(19) "!---Hello World---!"
+-- Iteration 12 --
+
+Notice: Array to string conversion in %s on line %d
+string(19) "!---Hello World---!"
+-- Iteration 13 --
+string(19) "!---Hello World---!"
+-- Iteration 14 --
+string(19) "!---Hello World---!"
+-- Iteration 15 --
+string(19) "!---Hello World---!"
+-- Iteration 16 --
+string(19) "!---Hello World---!"
+-- Iteration 17 --
+string(19) "!---Hello World---!"
+-- Iteration 18 --
+string(19) "!---Hello World---!"
+-- Iteration 19 --
+string(19) "!---Hello World---!"
+-- Iteration 20 --
+string(19) "!---Hello World---!"
+-- Iteration 21 --
+string(19) "!---Hello World---!"
+-- Iteration 22 --
+string(19) "!---Hello World---!"
+===DONE===
diff --git a/ext/standard/tests/strings/md5_file.phpt b/ext/standard/tests/strings/md5_file.phpt
index c10d62044..879cd59aa 100644
--- a/ext/standard/tests/strings/md5_file.phpt
+++ b/ext/standard/tests/strings/md5_file.phpt
Binary files differ
diff --git a/ext/standard/tests/strings/money_format_basic1.phpt b/ext/standard/tests/strings/money_format_basic1.phpt
new file mode 100644
index 000000000..e76aa6087
--- /dev/null
+++ b/ext/standard/tests/strings/money_format_basic1.phpt
@@ -0,0 +1,84 @@
+--TEST--
+Test money_format() function : basic functionality using national currency symbols
+--SKIPIF--
+<?php
+ if (!function_exists('money_format') || !function_exists('setlocale')) {
+ die("SKIP money_format - not supported\n");
+ }
+
+ if (setlocale(LC_MONETARY, 'en_US') == false) {
+ die("SKIP en_US locale not available\n");
+ }
+?>
+--FILE--
+<?php
+/* Prototype : string money_format ( string $format , float $number )
+ * Description: Formats a number as a currency string
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing money_format() : basic functionality using national currency symbols***\n";
+
+$original = setlocale(LC_MONETARY, 'en_US');
+
+$value = 1234.5678;
+$negative_value = -1234.5678;
+
+// Format with 14 positions of width, 8 digits of
+// left precision, 2 of right precision using national
+// format for en_US
+echo "Format values with 14 positions, 8 digits to left, 2 to right using national format\n";
+var_dump( money_format('%14#8.2n', $value));
+var_dump( money_format('%14#8.2n', $negative_value));
+
+// Same again but use '(' for negative values
+echo "Format again but with ( for negative values\n";
+var_dump( money_format('%(14#8.2n', $value));
+var_dump( money_format('%(14#8.2n', $negative_value));
+
+// Same again but use a '0' for padding character
+echo "Format with 0 for padding character\n";
+var_dump( money_format('%=014#8.2n', $value));
+var_dump( money_format('%=014#8.2n', $negative_value));
+
+// Same again but use a '*' for padding character
+echo "Format again with * for padding character\n";
+var_dump( money_format('%=*14#8.2n', $value));
+var_dump( money_format('%=*14#8.2n', $negative_value));
+
+// Same again but disable grouping character
+echo "Format again but disable grouping character\n";
+var_dump( money_format('%=*^14#8.2n', $value));
+var_dump( money_format('%=*^14#8.2n', $negative_value));
+
+// Same again but suppress currency symbol
+echo "Format again suppress currency symbol\n";
+var_dump( money_format('%=*!14#8.2n', $value));
+var_dump( money_format('%=*!14#8.2n', $negative_value));
+
+setlocale(LC_MONETARY, $original);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing money_format() : basic functionality using national currency symbols***
+Format values with 14 positions, 8 digits to left, 2 to right using national format
+string(15) " $ 1,234.57"
+string(15) "-$ 1,234.57"
+Format again but with ( for negative values
+string(15) " $ 1,234.57"
+string(16) "($ 1,234.57)"
+Format with 0 for padding character
+string(15) " $000001,234.57"
+string(15) "-$000001,234.57"
+Format again with * for padding character
+string(15) " $*****1,234.57"
+string(15) "-$*****1,234.57"
+Format again but disable grouping character
+string(14) " $****1234.57"
+string(14) " -$****1234.57"
+Format again suppress currency symbol
+string(14) " *****1,234.57"
+string(14) "-*****1,234.57"
+===DONE===
+
diff --git a/ext/standard/tests/strings/money_format_basic2.phpt b/ext/standard/tests/strings/money_format_basic2.phpt
new file mode 100644
index 000000000..8074cf998
--- /dev/null
+++ b/ext/standard/tests/strings/money_format_basic2.phpt
@@ -0,0 +1,84 @@
+--TEST--
+Test money_format() function : basic functionality using international currency symbols
+--SKIPIF--
+<?php
+ if (!function_exists('money_format') || !function_exists('setlocale')) {
+ die("SKIP money_format - not supported\n");
+ }
+
+ if (setlocale(LC_MONETARY, 'en_US') == false) {
+ die("SKIP en_US locale not available\n");
+ }
+?>
+--FILE--
+<?php
+/* Prototype : string money_format ( string $format , float $number )
+ * Description: Formats a number as a currency string
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing money_format() : basic functionality using international currency symbols***\n";
+
+$original = setlocale(LC_MONETARY, 'en_US');
+
+$value = 1234.5678;
+$negative_value = -1234.5678;
+
+// Format with 14 positions of width, 8 digits of
+// left precision, 2 of right precision using national
+// format for en_US
+echo "Format with 14 positions, 8 digits to left, 2 to right using national format\n";
+var_dump( money_format('%14#8.2i', $value));
+var_dump( money_format('%14#8.2i', $negative_value));
+
+// Same again but use '(' for negative values
+echo "Format with ( for negative values\n";
+var_dump( money_format('%(14#8.2i', $value));
+var_dump( money_format('%(14#8.2i', $negative_value));
+
+// Same again but use a '0' for padding character
+echo "Format with 0 for padding character\n";
+var_dump( money_format('%=014#8.2i', $value));
+var_dump( money_format('%=014#8.2i', $negative_value));
+
+// Same again but use a '*' for padding character
+echo "Format with * for padding character\n";
+var_dump( money_format('%=*14#8.2i', $value));
+var_dump( money_format('%=*14#8.2i', $negative_value));
+
+// Same again but disable grouping character
+echo "Format again but disable grouping character\n";
+var_dump( money_format('%=*^14#8.2i', $value));
+var_dump( money_format('%=*^14#8.2i', $negative_value));
+
+// Same again but suppress currency symbol
+echo "Format again but suppress currency symbol\n";
+var_dump( money_format('%=*!14#8.2i', $value));
+var_dump( money_format('%=*!14#8.2i', $negative_value));
+
+setlocale(LC_MONETARY, $original);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing money_format() : basic functionality using international currency symbols***
+Format with 14 positions, 8 digits to left, 2 to right using national format
+string(18) " USD 1,234.57"
+string(18) "-USD 1,234.57"
+Format with ( for negative values
+string(18) " USD 1,234.57"
+string(19) "(USD 1,234.57)"
+Format with 0 for padding character
+string(18) " USD 000001,234.57"
+string(18) "-USD 000001,234.57"
+Format with * for padding character
+string(18) " USD *****1,234.57"
+string(18) "-USD *****1,234.57"
+Format again but disable grouping character
+string(16) " USD ****1234.57"
+string(16) "-USD ****1234.57"
+Format again but suppress currency symbol
+string(14) " *****1,234.57"
+string(14) "-*****1,234.57"
+===DONE===
+
diff --git a/ext/standard/tests/strings/money_format_basic3.phpt b/ext/standard/tests/strings/money_format_basic3.phpt
new file mode 100644
index 000000000..98d0fca7f
--- /dev/null
+++ b/ext/standard/tests/strings/money_format_basic3.phpt
@@ -0,0 +1,83 @@
+--TEST--
+Test money_format() function : basic functionality using national currency symbols and de_DE locale
+--SKIPIF--
+<?php
+ if (!function_exists('money_format') || !function_exists('setlocale')) {
+ die("SKIP money_format - not supported\n");
+ }
+
+ if (setlocale(LC_MONETARY, 'de_DE') == false) {
+ die("SKIP de_DE locale not available\n");
+ }
+?>
+--FILE--
+<?php
+/* Prototype : string money_format ( string $format , float $number )
+ * Description: Formats a number as a currency string
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing money_format() : basic functionality using national currency symbols and de_DE locale***\n";
+
+$original = setlocale(LC_MONETARY, 'de_DE');
+
+$value = 1234.5678;
+$negative_value = -1234.5678;
+
+// Format with 14 positions of width, 8 digits of
+// left precision, 2 of right precision using national
+// format for en_US
+echo "Format values with 14 positions, 8 digits to left, 2 to right using national format\n";
+var_dump( money_format('%14#8.2n', $value));
+var_dump( money_format('%14#8.2n', $negative_value));
+
+// Same again but use '(' for negative values
+echo "Format again but with ( for negative values\n";
+var_dump( money_format('%(14#8.2n', $value));
+var_dump( money_format('%(14#8.2n', $negative_value));
+
+// Same again but use a '0' for padding character
+echo "Format with 0 for padding character\n";
+var_dump( money_format('%=014#8.2n', $value));
+var_dump( money_format('%=014#8.2n', $negative_value));
+
+// Same again but use a '*' for padding character
+echo "Format again with * for padding character\n";
+var_dump( money_format('%=*14#8.2n', $value));
+var_dump( money_format('%=*14#8.2n', $negative_value));
+
+// Same again but disable grouping character
+echo "Format again but disable grouping character\n";
+var_dump( money_format('%=*^14#8.2n', $value));
+var_dump( money_format('%=*^14#8.2n', $negative_value));
+
+// Same again but suppress currency symbol
+echo "Format again suppress currency symbol\n";
+var_dump( money_format('%=*!14#8.2n', $value));
+var_dump( money_format('%=*!14#8.2n', $negative_value));
+
+setlocale(LC_MONETARY, $original);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing money_format() : basic functionality using national currency symbols and de_DE locale***
+Format values with 14 positions, 8 digits to left, 2 to right using national format
+string(18) " 1.234,57 EUR"
+string(18) "- 1.234,57 EUR"
+Format again but with ( for negative values
+string(18) " 1.234,57 EUR"
+string(19) "( 1.234,57 EUR)"
+Format with 0 for padding character
+string(18) " 000001.234,57 EUR"
+string(18) "-000001.234,57 EUR"
+Format again with * for padding character
+string(18) " *****1.234,57 EUR"
+string(18) "-*****1.234,57 EUR"
+Format again but disable grouping character
+string(16) " ****1234,57 EUR"
+string(16) "-****1234,57 EUR"
+Format again suppress currency symbol
+string(14) " *****1.234,57"
+string(14) "-*****1.234,57"
+===DONE===
diff --git a/ext/standard/tests/strings/money_format_error.phpt b/ext/standard/tests/strings/money_format_error.phpt
new file mode 100644
index 000000000..fac89d1b5
--- /dev/null
+++ b/ext/standard/tests/strings/money_format_error.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test money_format() function : error conditions
+--SKIPIF--
+<?php
+ if (!function_exists('money_format')) {
+ die("SKIP money_format - not supported\n");
+ }
+?>
+--FILE--
+<?php
+/* Prototype : string money_format ( string $format , float $number )
+ * Description: Formats a number as a currency string
+ * Source code: ext/standard/string.c
+*/
+
+$string = '%14#8.2n';
+$value = 1234.56;
+$extra_arg = 10;
+
+echo "*** Testing money_format() : error conditions ***\n";
+
+echo "\n-- Testing money_format() function with no arguments --\n";
+var_dump( money_format() );
+
+echo "\n-- Testing money_format() function with insufficient arguments --\n";
+var_dump( money_format($string) );
+
+echo "\n-- Testing money_format() function with more than expected no. of arguments --\n";
+
+var_dump( money_format($string, $value, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing money_format() : error conditions ***
+
+-- Testing money_format() function with no arguments --
+
+Warning: money_format() expects exactly 2 parameters, 0 given in %s on line %d
+NULL
+
+-- Testing money_format() function with insufficient arguments --
+
+Warning: money_format() expects exactly 2 parameters, 1 given in %s on line %d
+NULL
+
+-- Testing money_format() function with more than expected no. of arguments --
+
+Warning: money_format() expects exactly 2 parameters, 3 given in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/money_format_variation1.phpt b/ext/standard/tests/strings/money_format_variation1.phpt
new file mode 100644
index 000000000..4224a6975
--- /dev/null
+++ b/ext/standard/tests/strings/money_format_variation1.phpt
@@ -0,0 +1,178 @@
+--TEST--
+Test money_format() function : usage variations - test values for $format argument
+--SKIPIF--
+<?php
+ if (!function_exists('money_format') || !function_exists('setlocale')) {
+ die("SKIP money_format - not supported\n");
+ }
+
+ if (setlocale(LC_MONETARY, 'de_DE') == false) {
+ die("SKIP de_DE locale not available\n");
+ }
+?>
+--FILE--
+<?php
+/* Prototype : string money_format ( string $format , float $number )
+ * Description: Formats a number as a currency string
+ * Source code: ext/standard/string.c
+*/
+
+$original = setlocale(LC_MONETARY, 'en_US');
+
+
+echo "*** Testing money_format() function: with unexpected inputs for 'format' argument ***\n";
+
+//get an unset variable
+$unset_var = ' string_val ';
+unset($unset_var);
+
+//defining a couple of sample classes
+class class_no_tostring {
+}
+
+class class_with_tostring {
+ public function __toString() {
+ return " sample object ";
+ }
+}
+
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $input
+$formats = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ 255,
+ 256,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*7*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*10*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*17*/ NULL,
+ null,
+
+ // string values
+/*19*/ "abcd",
+ 'abcd',
+ "0x12f",
+ "%=*!14#8.2nabcd",
+
+ // objects
+/*23*/ new class_no_tostring(),
+ new class_with_tostring(),
+
+ // resource
+/*25*/ $file_handle,
+
+ // undefined variable
+/*26*/ @$undefined_var,
+
+ // unset variable
+/*27*/ @$unset_var
+);
+
+// loop through with each element of the $formats array to test money_format() function
+$count = 1;
+$value = 1234.56;
+
+foreach($formats as $format) {
+ echo "-- Iteration $count --\n";
+ var_dump( money_format($format, $value) );
+ $count ++;
+}
+
+// close the file handle
+fclose($file_handle);
+
+// restore original locale
+setlocale(LC_MONETARY, $original);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing money_format() function: with unexpected inputs for 'format' argument ***
+-- Iteration 1 --
+string(1) "0"
+-- Iteration 2 --
+string(1) "1"
+-- Iteration 3 --
+string(3) "255"
+-- Iteration 4 --
+string(3) "256"
+-- Iteration 5 --
+string(10) "2147483647"
+-- Iteration 6 --
+string(11) "-2147483648"
+-- Iteration 7 --
+string(4) "10.5"
+-- Iteration 8 --
+string(5) "-20.5"
+-- Iteration 9 --
+string(12) "101234567000"
+-- Iteration 10 --
+
+Warning: money_format() expects parameter 1 to be string, array given in %s on line %d
+NULL
+-- Iteration 11 --
+
+Warning: money_format() expects parameter 1 to be string, array given in %s on line %d
+NULL
+-- Iteration 12 --
+
+Warning: money_format() expects parameter 1 to be string, array given in %s on line %d
+NULL
+-- Iteration 13 --
+string(1) "1"
+-- Iteration 14 --
+string(0) ""
+-- Iteration 15 --
+string(1) "1"
+-- Iteration 16 --
+string(0) ""
+-- Iteration 17 --
+string(0) ""
+-- Iteration 18 --
+string(0) ""
+-- Iteration 19 --
+string(4) "abcd"
+-- Iteration 20 --
+string(4) "abcd"
+-- Iteration 21 --
+string(5) "0x12f"
+-- Iteration 22 --
+string(18) " *****1,234.56abcd"
+-- Iteration 23 --
+
+Warning: money_format() expects parameter 1 to be string, object given in %s on line %d
+NULL
+-- Iteration 24 --
+string(17) " sample object "
+-- Iteration 25 --
+
+Warning: money_format() expects parameter 1 to be string, resource given in %s on line %d
+NULL
+-- Iteration 26 --
+string(0) ""
+-- Iteration 27 --
+string(0) ""
+===DONE===
diff --git a/ext/standard/tests/strings/money_format_variation2.phpt b/ext/standard/tests/strings/money_format_variation2.phpt
new file mode 100644
index 000000000..24d48735b
--- /dev/null
+++ b/ext/standard/tests/strings/money_format_variation2.phpt
@@ -0,0 +1,186 @@
+--TEST--
+Test money_format() function : usage variations - test values for $number argument
+--SKIPIF--
+<?php
+ if (!function_exists('money_format') || !function_exists('setlocale')) {
+ die("SKIP money_format - not supported\n");
+ }
+
+ if (setlocale(LC_MONETARY, 'de_DE') == false) {
+ die("SKIP de_DE locale not available\n");
+ }
+?>
+--FILE--
+<?php
+/* Prototype : string money_format ( string $format , float $number )
+ * Description: Formats a number as a currency string
+ * Source code: ext/standard/string.c
+*/
+
+$original = setlocale(LC_MONETARY, 'en_US');
+
+
+echo "*** Testing money_format() function: with unexpected inputs for 'number' argument ***\n";
+
+//get an unset variable
+$unset_var = ' string_val ';
+unset($unset_var);
+
+//defining a couple of sample classes
+class class_no_tostring {
+}
+
+class class_with_tostring {
+ public function __toString() {
+ return " sample object ";
+ }
+}
+
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $number
+$numbers = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ 255,
+ 256,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*7*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*10*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*17*/ NULL,
+ null,
+
+ // string values
+/*19*/ "abcd",
+ 'abcd',
+ "0x12f",
+ "%=*!14#8.2nabcd",
+
+ // objects
+/*23*/ new class_no_tostring(),
+ new class_with_tostring(),
+
+ // resource
+/*25*/ $file_handle,
+
+ // undefined variable
+/*26*/ @$undefined_var,
+
+ // unset variable
+/*27*/ @$unset_var
+);
+
+// loop through with each element of the $numbers array to test money_format() function
+$count = 1;
+$format = '%14#8.2i';
+
+foreach($numbers as $number) {
+ echo "-- Iteration $count --\n";
+ var_dump( money_format($format, $number) );
+ $count ++;
+}
+
+// close the file handle
+fclose($file_handle);
+
+// restore original locale
+setlocale(LC_MONETARY, $original);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing money_format() function: with unexpected inputs for 'number' argument ***
+-- Iteration 1 --
+string(18) " USD 0.00"
+-- Iteration 2 --
+string(18) " USD 1.00"
+-- Iteration 3 --
+string(18) " USD 255.00"
+-- Iteration 4 --
+string(18) " USD 256.00"
+-- Iteration 5 --
+string(21) " USD 2,147,483,647.00"
+-- Iteration 6 --
+string(21) "-USD 2,147,483,648.00"
+-- Iteration 7 --
+string(18) " USD 10.50"
+-- Iteration 8 --
+string(18) "-USD 20.50"
+-- Iteration 9 --
+string(23) " USD 101,234,567,000.00"
+-- Iteration 10 --
+
+Warning: money_format() expects parameter 2 to be double, array given in %s on line %d
+NULL
+-- Iteration 11 --
+
+Warning: money_format() expects parameter 2 to be double, array given in %s on line %d
+NULL
+-- Iteration 12 --
+
+Warning: money_format() expects parameter 2 to be double, array given in %s on line %d
+NULL
+-- Iteration 13 --
+string(18) " USD 1.00"
+-- Iteration 14 --
+string(18) " USD 0.00"
+-- Iteration 15 --
+string(18) " USD 1.00"
+-- Iteration 16 --
+string(18) " USD 0.00"
+-- Iteration 17 --
+string(18) " USD 0.00"
+-- Iteration 18 --
+string(18) " USD 0.00"
+-- Iteration 19 --
+
+Warning: money_format() expects parameter 2 to be double, string given in %s on line %d
+NULL
+-- Iteration 20 --
+
+Warning: money_format() expects parameter 2 to be double, string given in %s on line %d
+NULL
+-- Iteration 21 --
+string(18) " USD 303.00"
+-- Iteration 22 --
+
+Warning: money_format() expects parameter 2 to be double, string given in %s on line %d
+NULL
+-- Iteration 23 --
+
+Warning: money_format() expects parameter 2 to be double, object given in %s on line %d
+NULL
+-- Iteration 24 --
+
+Warning: money_format() expects parameter 2 to be double, object given in %s on line %d
+NULL
+-- Iteration 25 --
+
+Warning: money_format() expects parameter 2 to be double, resource given in %s on line %d
+NULL
+-- Iteration 26 --
+string(18) " USD 0.00"
+-- Iteration 27 --
+string(18) " USD 0.00"
+===DONE===
diff --git a/ext/standard/tests/strings/nl2br_variation5.phpt b/ext/standard/tests/strings/nl2br_variation5.phpt
index 066d642cd..a042dd6b1 100644
--- a/ext/standard/tests/strings/nl2br_variation5.phpt
+++ b/ext/standard/tests/strings/nl2br_variation5.phpt
@@ -40,8 +40,8 @@ $values = array(
// float data
10.5,
-10.5,
- 10.5e10,
- 10.6E-10,
+ 10.1234567e10,
+ 10.7654321E-10,
.5,
// array data
@@ -85,8 +85,8 @@ foreach($values as $value) {
//closing the file handle
fclose( $file_handle );
-echo "Done";
?>
+===DONE===
--EXPECTF--
*** Testing nl2br() : usage variations ***
-- Iteration 1 --
@@ -102,9 +102,9 @@ string(4) "10.5"
-- Iteration 6 --
string(5) "-10.5"
-- Iteration 7 --
-string(12) "105000000000"
+string(12) "101234567000"
-- Iteration 8 --
-string(7) "1.06E-9"
+string(13) "1.07654321E-9"
-- Iteration 9 --
string(3) "0.5"
-- Iteration 10 --
@@ -147,4 +147,4 @@ string(9) "My String"
string(0) ""
-- Iteration 24 --
string(0) ""
-Done
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/nl_langinfo_basic.phpt b/ext/standard/tests/strings/nl_langinfo_basic.phpt
new file mode 100644
index 000000000..370177ba8
--- /dev/null
+++ b/ext/standard/tests/strings/nl_langinfo_basic.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test nl_langinfo() function : basic functionality
+--SKIPIF--
+<?php
+if( substr(PHP_OS, 0, 3) == 'WIN'){
+ die('skip Not for Windows');
+}
+?>
+--FILE--
+<?php
+
+/* Prototype : string nl_langinfo ( int $item )
+ * Description: Query language and locale information
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing nl_langinfo() : basic functionality ***\n";
+
+$original = setlocale(LC_ALL, 'C');
+
+var_dump(nl_langinfo(ABDAY_2));
+var_dump(nl_langinfo(DAY_4));
+var_dump(nl_langinfo(ABMON_7));
+var_dump(nl_langinfo(MON_4));
+var_dump(nl_langinfo(RADIXCHAR));
+
+setlocale(LC_ALL, $original);
+?>
+===DONE===
+--EXPECTF--
+*** Testing nl_langinfo() : basic functionality ***
+string(3) "Mon"
+string(9) "Wednesday"
+string(3) "Jul"
+string(5) "April"
+string(1) "."
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/nl_langinfo_error1.phpt b/ext/standard/tests/strings/nl_langinfo_error1.phpt
new file mode 100644
index 000000000..7702b012e
--- /dev/null
+++ b/ext/standard/tests/strings/nl_langinfo_error1.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Test nl_langinfo() function : error conditions
+--SKIPIF--
+<?php
+if( substr(PHP_OS, 0, 3) == 'WIN'){
+ die('skip Not for Windows');
+}
+?>
+--FILE--
+<?php
+
+/* Prototype : string nl_langinfo ( int $item )
+ * Description: Query language and locale information
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing nl_langinfo() : error conditions ***\n";
+
+echo "\n-- Testing nl_langinfo() function with no arguments --\n";
+var_dump( nl_langinfo() );
+
+echo "\n-- Testing nl_langinfo() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( nl_langinfo(ABDAY_2, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing nl_langinfo() : error conditions ***
+
+-- Testing nl_langinfo() function with no arguments --
+
+Warning: nl_langinfo() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing nl_langinfo() function with more than expected no. of arguments --
+
+Warning: nl_langinfo() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/strings/nl_langinfo_variation1.phpt b/ext/standard/tests/strings/nl_langinfo_variation1.phpt
new file mode 100644
index 000000000..65dbb2804
--- /dev/null
+++ b/ext/standard/tests/strings/nl_langinfo_variation1.phpt
@@ -0,0 +1,181 @@
+--TEST--
+Test nl_langinfo() function : unexpected inputs for '$tem' argument
+--SKIPIF--
+<?php
+if( substr(PHP_OS, 0, 3) == 'WIN'){
+ die('skip Not for Windows');
+}
+?>
+--FILE--
+<?php
+
+/* Prototype : string nl_langinfo ( int $item )
+ * Description: Query language and locale information
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing nl_langinfo() : with unexpected inputs for 'item' argument ***\n";
+
+$original = setlocale(LC_ALL, 'C');
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $input
+$items = array (
+
+ // integer values
+/*1*/ 0,
+ 10,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*5*/ 10.5,
+ 20.3,
+ -20.5,
+ 10.1234567e5,
+
+ // array values
+/*9*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null vlaues
+/*16*/ NULL,
+ null,
+
+ // objects
+/*18*/ new sample(),
+
+ // resource
+/*19*/ $file_handle,
+
+ // undefined variable
+/*20*/ @$undefined_var,
+
+ // unset variable
+/*21*/ @$unset_var
+);
+
+//defining '$input' argument
+$input = "Test string";
+
+// loop through with each element of the $items array to test nl_langinfo() function
+$count = 1;
+foreach($items as $item) {
+ echo "-- Iteration $count --\n";
+ var_dump( nl_langinfo($item) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+setlocale(LC_ALL, $original);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing nl_langinfo() : with unexpected inputs for 'item' argument ***
+-- Iteration 1 --
+
+Warning: nl_langinfo(): Item '0' is not valid in %s on line %d
+bool(false)
+-- Iteration 2 --
+
+Warning: nl_langinfo(): Item '10' is not valid in %s on line %d
+bool(false)
+-- Iteration 3 --
+
+Warning: nl_langinfo(): Item '2147483647' is not valid in %s on line %d
+bool(false)
+-- Iteration 4 --
+
+Warning: nl_langinfo(): Item '-2147483648' is not valid in %s on line %d
+bool(false)
+-- Iteration 5 --
+
+Warning: nl_langinfo(): Item '10' is not valid in %s on line %d
+bool(false)
+-- Iteration 6 --
+
+Warning: nl_langinfo(): Item '20' is not valid in %s on line %d
+bool(false)
+-- Iteration 7 --
+
+Warning: nl_langinfo(): Item '-20' is not valid in %s on line %d
+bool(false)
+-- Iteration 8 --
+
+Warning: nl_langinfo(): Item '1012345' is not valid in %s on line %d
+bool(false)
+-- Iteration 9 --
+
+Warning: nl_langinfo() expects parameter 1 to be long, array given in %s on line %d
+NULL
+-- Iteration 10 --
+
+Warning: nl_langinfo() expects parameter 1 to be long, array given in %s on line %d
+NULL
+-- Iteration 11 --
+
+Warning: nl_langinfo() expects parameter 1 to be long, array given in %s on line %d
+NULL
+-- Iteration 12 --
+
+Warning: nl_langinfo(): Item '1' is not valid in %s on line %d
+bool(false)
+-- Iteration 13 --
+
+Warning: nl_langinfo(): Item '0' is not valid in %s on line %d
+bool(false)
+-- Iteration 14 --
+
+Warning: nl_langinfo(): Item '1' is not valid in %s on line %d
+bool(false)
+-- Iteration 15 --
+
+Warning: nl_langinfo(): Item '0' is not valid in %s on line %d
+bool(false)
+-- Iteration 16 --
+
+Warning: nl_langinfo(): Item '0' is not valid in %s on line %d
+bool(false)
+-- Iteration 17 --
+
+Warning: nl_langinfo(): Item '0' is not valid in %s on line %d
+bool(false)
+-- Iteration 18 --
+
+Warning: nl_langinfo() expects parameter 1 to be long, object given in %s on line %d
+NULL
+-- Iteration 19 --
+
+Warning: nl_langinfo() expects parameter 1 to be long, resource given in %s on line %d
+NULL
+-- Iteration 20 --
+
+Warning: nl_langinfo(): Item '0' is not valid in %s on line %d
+bool(false)
+-- Iteration 21 --
+
+Warning: nl_langinfo(): Item '0' is not valid in %s on line %d
+bool(false)
+===DONE===
+
diff --git a/ext/standard/tests/strings/number_format_basic.phpt b/ext/standard/tests/strings/number_format_basic.phpt
new file mode 100644
index 000000000..7a5a7a770
--- /dev/null
+++ b/ext/standard/tests/strings/number_format_basic.phpt
@@ -0,0 +1,99 @@
+--TEST--
+Test number_format() - basic function test number_format()
+--FILE--
+<?php
+$values = array(1234.5678,
+ -1234.5678,
+ 1234.6578e4,
+ -1234.56789e4,
+ 0x1234CDEF,
+ 02777777777,
+ "123456789",
+ "123.456789",
+ "12.3456789e1",
+ null,
+ true,
+ false);
+
+echo "\n-- number_format tests.....default --\n";
+for ($i = 0; $i < count($values); $i++) {
+ $res = number_format($values[$i]);
+ var_dump($res);
+}
+
+echo "\n-- number_format tests.....with two dp --\n";
+for ($i = 0; $i < count($values); $i++) {
+ $res = number_format($values[$i], 2);
+ var_dump($res);
+}
+
+echo "\n-- number_format tests.....English format --\n";
+for ($i = 0; $i < count($values); $i++) {
+ $res = number_format($values[$i], 2, '.', ' ');
+ var_dump($res);
+}
+
+echo "\n-- number_format tests.....French format --\n";
+for ($i = 0; $i < count($values); $i++) {
+ $res = number_format($values[$i], 2, ',' , ' ');
+ var_dump($res);
+}
+?>
+===DONE===
+--EXPECTF--
+-- number_format tests.....default --
+string(5) "1,235"
+string(6) "-1,235"
+string(10) "12,346,578"
+string(11) "-12,345,679"
+string(11) "305,450,479"
+string(11) "402,653,183"
+string(11) "123,456,789"
+string(3) "123"
+string(3) "123"
+string(1) "0"
+string(1) "1"
+string(1) "0"
+
+-- number_format tests.....with two dp --
+string(8) "1,234.57"
+string(9) "-1,234.57"
+string(13) "12,346,578.00"
+string(14) "-12,345,678.90"
+string(14) "305,450,479.00"
+string(14) "402,653,183.00"
+string(14) "123,456,789.00"
+string(6) "123.46"
+string(6) "123.46"
+string(4) "0.00"
+string(4) "1.00"
+string(4) "0.00"
+
+-- number_format tests.....English format --
+string(8) "1 234.57"
+string(9) "-1 234.57"
+string(13) "12 346 578.00"
+string(14) "-12 345 678.90"
+string(14) "305 450 479.00"
+string(14) "402 653 183.00"
+string(14) "123 456 789.00"
+string(6) "123.46"
+string(6) "123.46"
+string(4) "0.00"
+string(4) "1.00"
+string(4) "0.00"
+
+-- number_format tests.....French format --
+string(8) "1 234,57"
+string(9) "-1 234,57"
+string(13) "12 346 578,00"
+string(14) "-12 345 678,90"
+string(14) "305 450 479,00"
+string(14) "402 653 183,00"
+string(14) "123 456 789,00"
+string(6) "123,46"
+string(6) "123,46"
+string(4) "0,00"
+string(4) "1,00"
+string(4) "0,00"
+===DONE===
diff --git a/ext/standard/tests/strings/number_format_error.phpt b/ext/standard/tests/strings/number_format_error.phpt
new file mode 100644
index 000000000..be3521607
--- /dev/null
+++ b/ext/standard/tests/strings/number_format_error.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Test number_format() - wrong params test number_format()
+--FILE--
+<?php
+/* Prototype : string number_format ( float $number [, int $decimals ] )
+ * string number_format ( float $number , int $decimals , string $dec_point , string $thousands_sep )
+ * Description: Format a number with grouped thousands
+ * Source code: ext/standard/string.c
+ */
+
+echo "*** Testing number_format() : error conditions ***\n";
+
+echo "\n-- Testing number_format() function with less than expected no. of arguments --\n";
+number_format();
+
+echo "\n-- Testing number_format() function with 3 arguments --\n";
+number_format(23,2,true);
+
+echo "\n-- Testing number_format() function with more than 4 arguments --\n";
+number_format(23,2,true,false,36);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing number_format() : error conditions ***
+
+-- Testing number_format() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for number_format() in %s on line %d
+
+-- Testing number_format() function with 3 arguments --
+
+Warning: Wrong parameter count for number_format() in %s on line %d
+
+-- Testing number_format() function with more than 4 arguments --
+
+Warning: Wrong parameter count for number_format() in %s on line %d
+===DONE===
diff --git a/ext/standard/tests/strings/ord_basic.phpt b/ext/standard/tests/strings/ord_basic.phpt
new file mode 100644
index 000000000..19f3ea28d
--- /dev/null
+++ b/ext/standard/tests/strings/ord_basic.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test ord() function : basic functionality
+--FILE--
+<?php
+
+/* Prototype : int ord ( string $string )
+ * Description: Return ASCII value of character
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing ord() : basic functionality ***\n";
+
+var_dump(ord("a"));
+var_dump(ord("z"));
+var_dump(ord("0"));
+var_dump(ord("9"));
+var_dump(ord("!"));
+var_dump(ord("*"));
+var_dump(ord("@"));
+var_dump(ord("\n"));
+var_dump(ord("\x0A"));
+var_dump(ord("\xFF"));
+var_dump(ord("Hello"));
+
+// Make sure all valid ascii chars round trip
+for ($i = 0; $i < 255; $i++) {
+ if (ord(chr($i)) != $i) {
+ exit("TEST FAILED: $i does not round trip\n");
+ }
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing ord() : basic functionality ***
+int(97)
+int(122)
+int(48)
+int(57)
+int(33)
+int(42)
+int(64)
+int(10)
+int(10)
+int(255)
+int(72)
+===DONE===
diff --git a/ext/standard/tests/strings/ord_error.phpt b/ext/standard/tests/strings/ord_error.phpt
new file mode 100644
index 000000000..c81839264
--- /dev/null
+++ b/ext/standard/tests/strings/ord_error.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test ord() function : error conditions
+--FILE--
+<?php
+
+/* Prototype : int ord ( string $string )
+ * Description: Return ASCII value of character
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing ord() : error conditions ***\n";
+
+echo "\n-- Testing ord() function with no arguments --\n";
+var_dump( ord() );
+
+echo "\n-- Testing ord() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( ord(72, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing ord() : error conditions ***
+
+-- Testing ord() function with no arguments --
+
+Warning: Wrong parameter count for ord() in %s on line %d
+NULL
+
+-- Testing ord() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for ord() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/strings/ord_variation1.phpt b/ext/standard/tests/strings/ord_variation1.phpt
new file mode 100644
index 000000000..ebff2f7db
--- /dev/null
+++ b/ext/standard/tests/strings/ord_variation1.phpt
@@ -0,0 +1,135 @@
+--TEST--
+Test ord() function : usage variations - test values for $string argument
+--FILE--
+<?php
+
+/* Prototype : int ord ( string $string )
+ * Description: Return ASCII value of character
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing ord() function: with unexpected inputs for 'string' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $input
+$inputs = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ 255,
+ 256,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*7*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*10*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*17*/ NULL,
+ null,
+
+ // objects
+/*19*/ new sample(),
+
+ // resource
+/*20*/ $file_handle,
+
+ // undefined variable
+/*21*/ @$undefined_var,
+
+ // unset variable
+/*22*/ @$unset_var
+);
+
+// loop through with each element of the $string array to test ord() function
+$count = 1;
+foreach($inputs as $input) {
+ echo "-- Iteration $count --\n";
+ var_dump( ord($input) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing ord() function: with unexpected inputs for 'string' argument ***
+-- Iteration 1 --
+int(48)
+-- Iteration 2 --
+int(49)
+-- Iteration 3 --
+int(50)
+-- Iteration 4 --
+int(50)
+-- Iteration 5 --
+int(50)
+-- Iteration 6 --
+int(45)
+-- Iteration 7 --
+int(49)
+-- Iteration 8 --
+int(45)
+-- Iteration 9 --
+int(49)
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+int(65)
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+int(65)
+-- Iteration 12 --
+
+Notice: Array to string conversion in %s on line %d
+int(65)
+-- Iteration 13 --
+int(49)
+-- Iteration 14 --
+int(0)
+-- Iteration 15 --
+int(49)
+-- Iteration 16 --
+int(0)
+-- Iteration 17 --
+int(0)
+-- Iteration 18 --
+int(0)
+-- Iteration 19 --
+int(115)
+-- Iteration 20 --
+int(%d)
+-- Iteration 21 --
+int(0)
+-- Iteration 22 --
+int(0)
+===DONE===
diff --git a/ext/standard/tests/strings/print_basic.phpt b/ext/standard/tests/strings/print_basic.phpt
new file mode 100644
index 000000000..a4bc8c239
--- /dev/null
+++ b/ext/standard/tests/strings/print_basic.phpt
@@ -0,0 +1,92 @@
+--TEST--
+Test print() function : basic functionality
+--FILE--
+<?php
+
+/* Prototype : int print ( string $arg )
+ * Description: Output a string
+ * Source code: n/a, print is a language construct not an extension function
+ * Test based on php.net manual example.
+*/
+
+echo "*** Testing print() : basic functionality ***\n";
+
+echo "\n-- Iteration 1 --\n";
+print("Hello World");
+
+echo "\n-- Iteration 2 --\n";
+print "print() also works without parentheses.";
+
+echo "\n-- Iteration 3 --\n";
+print "This spans
+multiple lines. The newlines will be
+output as well";
+
+echo "\n-- Iteration 4 --\n";
+print "This also spans\nmultiple lines. The newlines will be\noutput as well.";
+
+echo "\n-- Iteration 5 --\n";
+print "escaping characters is done \"Like this\".";
+
+// You can use variables inside of a print statement
+$foo = "foobar";
+$bar = "barbaz";
+
+echo "\n-- Iteration 6 --\n";
+print "foo is $foo"; // foo is foobar
+
+// You can also use arrays
+$bar = array("value" => "foo");
+
+echo "\n-- Iteration 7 --\n";
+print "this is {$bar['value']} !"; // this is foo !
+
+// Using single quotes will print the variable name, not the value
+echo "\n-- Iteration 8 --\n";
+print 'foo is $foo'; // foo is $foo
+
+// If you are not using any other characters, you can just print variables
+echo "\n-- Iteration 9 --\n";
+print $foo; // foobar
+
+echo "\n-- Iteration 10 --\n";
+$variable = "VARIABLE";
+print <<<END
+This uses the "here document" syntax to output
+multiple lines with $variable interpolation. Note
+that the here document terminator must appear on a
+line with just a semicolon no extra whitespace!\n
+END;
+?>
+===DONE===
+--EXPECT--
+*** Testing print() : basic functionality ***
+
+-- Iteration 1 --
+Hello World
+-- Iteration 2 --
+print() also works without parentheses.
+-- Iteration 3 --
+This spans
+multiple lines. The newlines will be
+output as well
+-- Iteration 4 --
+This also spans
+multiple lines. The newlines will be
+output as well.
+-- Iteration 5 --
+escaping characters is done "Like this".
+-- Iteration 6 --
+foo is foobar
+-- Iteration 7 --
+this is foo !
+-- Iteration 8 --
+foo is $foo
+-- Iteration 9 --
+foobar
+-- Iteration 10 --
+This uses the "here document" syntax to output
+multiple lines with VARIABLE interpolation. Note
+that the here document terminator must appear on a
+line with just a semicolon no extra whitespace!
+===DONE===
diff --git a/ext/standard/tests/strings/print_variation1.phpt b/ext/standard/tests/strings/print_variation1.phpt
new file mode 100644
index 000000000..084f22f64
--- /dev/null
+++ b/ext/standard/tests/strings/print_variation1.phpt
@@ -0,0 +1,150 @@
+--TEST--
+Test print() function : usage variations
+--FILE--
+<?php
+
+/* Prototype : int print ( string $arg )
+ * Description: Output a string
+ * Source code: n/a, print is a language construct not an extension function
+ * Test based on php.net manual example.
+*/
+
+echo "*** Testing print() function: with unexpected inputs for 'arg' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $input
+$inputs = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ -2,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*6*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*9*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null vlaues
+/*16*/ NULL,
+ null,
+
+ // objects
+/*18*/ new sample(),
+
+ // resource
+/*19*/ $file_handle,
+
+ // undefined variable
+/*20*/ @$undefined_var,
+
+ // unset variable
+/*21*/ @$unset_var
+);
+
+// loop through with each element of the $inputs array to test print() function
+$count = 1;
+foreach($inputs as $input) {
+ echo "-- Iteration $count --\n";
+ $res = print($input);
+ echo "\n";
+ var_dump($res);
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing print() function: with unexpected inputs for 'arg' argument ***
+-- Iteration 1 --
+0
+int(1)
+-- Iteration 2 --
+1
+int(1)
+-- Iteration 3 --
+-2
+int(1)
+-- Iteration 4 --
+2147483647
+int(1)
+-- Iteration 5 --
+-2147483648
+int(1)
+-- Iteration 6 --
+10.5
+int(1)
+-- Iteration 7 --
+-20.5
+int(1)
+-- Iteration 8 --
+101234567000
+int(1)
+-- Iteration 9 --
+Array
+int(1)
+-- Iteration 10 --
+Array
+int(1)
+-- Iteration 11 --
+Array
+int(1)
+-- Iteration 12 --
+1
+int(1)
+-- Iteration 13 --
+
+int(1)
+-- Iteration 14 --
+1
+int(1)
+-- Iteration 15 --
+
+int(1)
+-- Iteration 16 --
+
+int(1)
+-- Iteration 17 --
+
+int(1)
+-- Iteration 18 --
+sample object
+int(1)
+-- Iteration 19 --
+Resource id #%d
+int(1)
+-- Iteration 20 --
+
+int(1)
+-- Iteration 21 --
+
+int(1)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/printf.phpt b/ext/standard/tests/strings/printf.phpt
index 13a8ed071..9b0c2ee9e 100755
--- a/ext/standard/tests/strings/printf.phpt
+++ b/ext/standard/tests/strings/printf.phpt
@@ -645,10 +645,10 @@ Array
-123456
123456
-123456
-120000
--120000
-+120000
--120000
+1.2e+5
+-1.2e+5
++1.2e+5
+-1.2e+5
123456
-123456
1.0E+5
@@ -657,10 +657,10 @@ Array
-123456
123456
-123456
-120000
--120000
-+120000
--120000
+1.2E+5
+-1.2E+5
++1.2E+5
+-1.2E+5
*** Output for '%%%.2f' as the format parameter ***
%12345678900.00
@@ -669,6 +669,8 @@ Array
%
*** Output for precision value more than maximum ***
+
+Notice: printf(): Requested precision of 988 digits was truncated to PHP maximum of 40 digits in %s on line %d
12345678900.0000000000000000000000000000000000000000
*** Output for invalid width(-15) specifier ***
diff --git a/ext/standard/tests/strings/printf_64bit.phpt b/ext/standard/tests/strings/printf_64bit.phpt
index 10ea360c0..81f6516e2 100755
--- a/ext/standard/tests/strings/printf_64bit.phpt
+++ b/ext/standard/tests/strings/printf_64bit.phpt
@@ -645,10 +645,10 @@ Array
-123456
123456
-123456
-120000
--120000
-+120000
--120000
+1.2e+5
+-1.2e+5
++1.2e+5
+-1.2e+5
123456
-123456
1.0E+5
@@ -657,10 +657,10 @@ Array
-123456
123456
-123456
-120000
--120000
-+120000
--120000
+1.2E+5
+-1.2E+5
++1.2E+5
+-1.2E+5
*** Output for '%%%.2f' as the format parameter ***
%12345678900.00
@@ -669,6 +669,8 @@ Array
%
*** Output for precision value more than maximum ***
+
+Notice: printf(): Requested precision of 988 digits was truncated to PHP maximum of %d digits in %s on line %d
12345678900.0000000000000000000000000000000000000000
*** Output for invalid width(-15) specifier ***
diff --git a/ext/standard/tests/strings/printf_basic1.phpt b/ext/standard/tests/strings/printf_basic1.phpt
new file mode 100644
index 000000000..e6fd1d991
--- /dev/null
+++ b/ext/standard/tests/strings/printf_basic1.phpt
@@ -0,0 +1,62 @@
+--TEST--
+Test printf() function : basic functionality - string format
+--FILE--
+<?php
+/* Prototype : int printf ( string $format [, mixed $args [, mixed $... ]] )
+ * Description: Produces output according to format .
+ * Source code: ext/standard/formatted_print.c
+ */
+
+echo "*** Testing printf() : basic functionality - using string format ***\n";
+
+// Initialise all required variables
+$format = "format";
+$format1 = "%s";
+$format2 = "%s %s";
+$format3 = "%s %s %s";
+$arg1 = "arg1 argument";
+$arg2 = "arg2 argument";
+$arg3 = "arg3 argument";
+
+echo "\n-- Calling printf() with no arguments --\n";
+$result = printf($format);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with one arguments --\n";
+$result = printf($format1, $arg1);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with two arguments --\n";
+$result = printf($format2, $arg1, $arg2);
+echo "\n";
+var_dump($result);
+
+
+echo "\n-- Calling printf() with string three arguments --\n";
+$result = printf($format3, $arg1, $arg2, $arg3);
+echo "\n";
+var_dump($result);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing printf() : basic functionality - using string format ***
+
+-- Calling printf() with no arguments --
+format
+int(6)
+
+-- Calling printf() with one arguments --
+arg1 argument
+int(13)
+
+-- Calling printf() with two arguments --
+arg1 argument arg2 argument
+int(27)
+
+-- Calling printf() with string three arguments --
+arg1 argument arg2 argument arg3 argument
+int(41)
+===DONE===
diff --git a/ext/standard/tests/strings/printf_basic2.phpt b/ext/standard/tests/strings/printf_basic2.phpt
new file mode 100644
index 000000000..195f7cb58
--- /dev/null
+++ b/ext/standard/tests/strings/printf_basic2.phpt
@@ -0,0 +1,62 @@
+--TEST--
+Test printf() function : basic functionality - integer format
+--FILE--
+<?php
+/* Prototype : int printf ( string $format [, mixed $args [, mixed $... ]] )
+ * Description: Produces output according to format .
+ * Source code: ext/standard/formatted_print.c
+ */
+
+echo "*** Testing printf() : basic functionality - using integer format ***\n";
+
+
+// Initialise all required variables
+$format = "format";
+$format1 = "%d";
+$format2 = "%d %d";
+$format3 = "%d %d %d";
+$arg1 = 111;
+$arg2 = 222;
+$arg3 = 333;
+
+echo "\n-- Calling printf() with no arguments --\n";
+$result = printf($format);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with one arguments--\n";
+$result = printf($format1, $arg1);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with two arguments--\n";
+$result = printf($format2, $arg1, $arg2);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with three arguments--\n";
+$result = printf($format3, $arg1, $arg2, $arg3);
+echo "\n";
+var_dump($result);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing printf() : basic functionality - using integer format ***
+
+-- Calling printf() with no arguments --
+format
+int(6)
+
+-- Calling printf() with one arguments--
+111
+int(3)
+
+-- Calling printf() with two arguments--
+111 222
+int(7)
+
+-- Calling printf() with three arguments--
+111 222 333
+int(11)
+===DONE===
diff --git a/ext/standard/tests/strings/printf_basic3.phpt b/ext/standard/tests/strings/printf_basic3.phpt
new file mode 100644
index 000000000..1e51d41fc
--- /dev/null
+++ b/ext/standard/tests/strings/printf_basic3.phpt
@@ -0,0 +1,82 @@
+--TEST--
+Test printf() function : basic functionality - float format
+--FILE--
+<?php
+/* Prototype : int printf ( string $format [, mixed $args [, mixed $... ]] )
+ * Description: Produces output according to format .
+ * Source code: ext/standard/formatted_print.c
+ */
+
+echo "*** Testing printf() : basic functionality - using float format ***\n";
+
+
+// Initialise all required variables
+
+$format = "format";
+$format1 = "%f";
+$format2 = "%f %f";
+$format3 = "%f %f %f";
+
+$format11 = "%F";
+$format22 = "%F %F";
+$format33 = "%F %F %F";
+$arg1 = 11.11;
+$arg2 = 22.22;
+$arg3 = 33.33;
+
+echo "\n-- Calling printf() with no arguments--\n";
+$result = printf($format);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with one arguments--\n";
+$result = printf($format1, $arg1);
+echo "\n";
+var_dump($result);
+$result = printf($format11, $arg1);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with two arguments--\n";
+$result = printf($format2, $arg1, $arg2);
+echo "\n";
+var_dump($result);
+$result = printf($format22, $arg1, $arg2);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with three arguments--\n";
+$result = printf($format3, $arg1, $arg2, $arg3);
+echo "\n";
+var_dump($result);
+$result = printf($format33, $arg1, $arg2, $arg3);
+echo "\n";
+var_dump($result);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing printf() : basic functionality - using float format ***
+
+-- Calling printf() with no arguments--
+format
+int(6)
+
+-- Calling printf() with one arguments--
+11.110000
+int(9)
+11.110000
+int(9)
+
+-- Calling printf() with two arguments--
+11.110000 22.220000
+int(19)
+11.110000 22.220000
+int(19)
+
+-- Calling printf() with three arguments--
+11.110000 22.220000 33.330000
+int(29)
+11.110000 22.220000 33.330000
+int(29)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/printf_basic4.phpt b/ext/standard/tests/strings/printf_basic4.phpt
new file mode 100644
index 000000000..9de049767
--- /dev/null
+++ b/ext/standard/tests/strings/printf_basic4.phpt
@@ -0,0 +1,61 @@
+--TEST--
+Test printf() function : basic functionality - bool format
+--FILE--
+<?php
+/* Prototype : int printf ( string $format [, mixed $args [, mixed $... ]] )
+ * Description: Produces output according to format .
+ * Source code: ext/standard/formatted_print.c
+ */
+
+echo "*** Testing printf() : basic functionality - using bool format ***\n";
+
+
+// Initialise all required variables
+$format = "format";
+$format1 = "%b";
+$format2 = "%b %b";
+$format3 = "%b %b %b";
+$arg1 = TRUE;
+$arg2 = FALSE;
+$arg3 = true;
+
+echo "\n-- Calling printf() with no arguments --\n";
+$result = printf($format);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with one arguments--\n";
+$result = printf($format1, $arg1);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with two arguments--\n";
+$result = printf($format2, $arg1, $arg2);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with three arguments--\n";
+$result = printf($format3, $arg1, $arg2, $arg3);
+echo "\n";
+var_dump($result);
+?>
+===DONE===
+--EXPECTF--
+*** Testing printf() : basic functionality - using bool format ***
+
+-- Calling printf() with no arguments --
+format
+int(6)
+
+-- Calling printf() with one arguments--
+1
+int(1)
+
+-- Calling printf() with two arguments--
+1 0
+int(3)
+
+-- Calling printf() with three arguments--
+1 0 1
+int(5)
+===DONE===
diff --git a/ext/standard/tests/strings/printf_basic5.phpt b/ext/standard/tests/strings/printf_basic5.phpt
new file mode 100644
index 000000000..57b17d494
--- /dev/null
+++ b/ext/standard/tests/strings/printf_basic5.phpt
@@ -0,0 +1,61 @@
+--TEST--
+Test printf() function : basic functionality - char format
+--FILE--
+<?php
+/* Prototype : int printf ( string $format [, mixed $args [, mixed $... ]] )
+ * Description: Produces output according to format .
+ * Source code: ext/standard/formatted_print.c
+ */
+
+echo "*** Testing printf() : basic functionality - using char format ***\n";
+
+
+// Initialise all required variables
+$format = "format";
+$format1 = "%c";
+$format2 = "%c %c";
+$format3 = "%c %c %c";
+$arg1 = 65;
+$arg2 = 66;
+$arg3 = 67;
+
+echo "\n-- Calling printf() with no arguments --\n";
+$result = printf($format);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with one arguments --\n";
+$result = printf($format1, $arg1);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with two arguments --\n";
+$result = printf($format2, $arg1, $arg2);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with three arguments --\n";
+$result = printf($format3, $arg1, $arg2, $arg3);
+echo "\n";
+var_dump($result);
+?>
+===DONE===
+--EXPECTF--
+*** Testing printf() : basic functionality - using char format ***
+
+-- Calling printf() with no arguments --
+format
+int(6)
+
+-- Calling printf() with one arguments --
+A
+int(1)
+
+-- Calling printf() with two arguments --
+A B
+int(3)
+
+-- Calling printf() with three arguments --
+A B C
+int(5)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/printf_basic6.phpt b/ext/standard/tests/strings/printf_basic6.phpt
new file mode 100644
index 000000000..95b9d4a04
--- /dev/null
+++ b/ext/standard/tests/strings/printf_basic6.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test printf() function : basic functionality - exponential format
+--FILE--
+<?php
+/* Prototype : int printf ( string $format [, mixed $args [, mixed $... ]] )
+ * Description: Produces output according to format .
+ * Source code: ext/standard/formatted_print.c
+ */
+
+echo "*** Testing printf() : basic functionality - using exponential format ***\n";
+
+// Initialise all required variables
+$format = "format";
+$format1 = "%e";
+$format2 = "%E %e";
+$format3 = "%e %E %e";
+$arg1 = 1000;
+$arg2 = 2e3;
+$arg3 = +3e3;
+
+echo "\n-- Calling printf() with no arguments --\n";
+$result = printf($format);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with one argument --\n";
+$result = printf($format1, $arg1);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with two arguments --\n";
+$result = printf($format2, $arg1, $arg2);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with three arguments --\n";
+$result = printf($format3, $arg1, $arg2, $arg3);
+echo "\n";
+var_dump($result);
+?>
+===DONE===
+--EXPECTF--
+*** Testing printf() : basic functionality - using exponential format ***
+
+-- Calling printf() with no arguments --
+format
+int(6)
+
+-- Calling printf() with one argument --
+1.000000e+3
+int(11)
+
+-- Calling printf() with two arguments --
+1.000000E+3 2.000000e+3
+int(23)
+
+-- Calling printf() with three arguments --
+1.000000e+3 2.000000E+3 3.000000e+3
+int(35)
+===DONE===
diff --git a/ext/standard/tests/strings/printf_basic7.phpt b/ext/standard/tests/strings/printf_basic7.phpt
new file mode 100644
index 000000000..a43fcf2da
--- /dev/null
+++ b/ext/standard/tests/strings/printf_basic7.phpt
@@ -0,0 +1,68 @@
+--TEST--
+Test printf() function : basic functionality - unsigned format
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) {
+ die("skip this test is for 32bit platform only");
+}
+?>
+--FILE--
+<?php
+/* Prototype : int printf ( string $format [, mixed $args [, mixed $... ]] )
+ * Description: Produces output according to format .
+ * Source code: ext/standard/formatted_print.c
+ */
+
+echo "*** Testing printf() : basic functionality - using unsigned format ***\n";
+
+
+// Initialise all required variables
+$format = "format";
+$format1 = "%u";
+$format2 = "%u %u";
+$format3 = "%u %u %u";
+$arg1 = -1111;
+$arg2 = -1234567;
+$arg3 = +2345432;
+
+echo "\n-- Calling printf() with no arguments --\n";
+$result = printf($format);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with one arguments --\n";
+$result = printf($format1, $arg1);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with two arguments --\n";
+$result = printf($format2, $arg1, $arg2);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with three arguments --\n";
+$result = printf($format3, $arg1, $arg2, $arg3);
+echo "\n";
+var_dump($result);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing printf() : basic functionality - using unsigned format ***
+
+-- Calling printf() with no arguments --
+format
+int(6)
+
+-- Calling printf() with one arguments --
+4294966185
+int(10)
+
+-- Calling printf() with two arguments --
+4294966185 4293732729
+int(21)
+
+-- Calling printf() with three arguments --
+4294966185 4293732729 2345432
+int(29)
+===DONE===
diff --git a/ext/standard/tests/strings/printf_basic8.phpt b/ext/standard/tests/strings/printf_basic8.phpt
new file mode 100644
index 000000000..0e028ea9d
--- /dev/null
+++ b/ext/standard/tests/strings/printf_basic8.phpt
@@ -0,0 +1,67 @@
+--TEST--
+Test printf() function : basic functionality - octal format
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) {
+ die("skip this test is for 32bit platform only");
+}
+?>
+--FILE--
+<?php
+/* Prototype : int printf ( string $format [, mixed $args [, mixed $... ]] )
+ * Description: Produces output according to format .
+ * Source code: ext/standard/formatted_print.c
+ */
+
+echo "*** Testing printf() : basic functionality - using octal format ***\n";
+
+// Initialise all required variables
+$format = "format";
+$format1 = "%o";
+$format2 = "%o %o";
+$format3 = "%o %o %o";
+$arg1 = 021;
+$arg2 = -0347;
+$arg3 = 05678;
+
+echo "\n-- Calling printf() with no arguments --\n";
+$result = printf($format);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with one arguments --\n";
+$result = printf($format1, $arg1);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with two arguments --\n";
+$result = printf($format2, $arg1, $arg2);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with three arguments --\n";
+$result = printf($format3, $arg1, $arg2, $arg3);
+echo "\n";
+var_dump($result);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing printf() : basic functionality - using octal format ***
+
+-- Calling printf() with no arguments --
+format
+int(6)
+
+-- Calling printf() with one arguments --
+21
+int(2)
+
+-- Calling printf() with two arguments --
+21 37777777431
+int(14)
+
+-- Calling printf() with three arguments --
+21 37777777431 567
+int(18)
+===DONE===
diff --git a/ext/standard/tests/strings/printf_basic9.phpt b/ext/standard/tests/strings/printf_basic9.phpt
new file mode 100644
index 000000000..9b441b2cc
--- /dev/null
+++ b/ext/standard/tests/strings/printf_basic9.phpt
@@ -0,0 +1,83 @@
+--TEST--
+Test printf() function : basic functionality - hexadecimal format
+--FILE--
+<?php
+/* Prototype : int printf ( string $format [, mixed $args [, mixed $... ]] )
+ * Description: Produces output according to format .
+ * Source code: ext/standard/formatted_print.c
+ */
+
+echo "*** Testing printf() : basic functionality - using hexadecimal format ***\n";
+
+// Initialise all required variables
+
+// Initialising different format strings
+$format = "format";
+$format1 = "%x";
+$format2 = "%x %x";
+$format3 = "%x %x %x";
+
+$format11 = "%X";
+$format22 = "%X %X";
+$format33 = "%X %X %X";
+
+$arg1 = 11;
+$arg2 = 132;
+$arg3 = 177;
+
+echo "\n-- Calling printf() with no arguments --\n";
+$result = printf($format);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with one arguments --\n";
+$result = printf($format1, $arg1);
+echo "\n";
+var_dump($result);
+$result = printf($format11, $arg1);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with two arguments --\n";
+$result = printf($format2, $arg1, $arg2);
+echo "\n";
+var_dump($result);
+$result = printf($format22, $arg1, $arg2);
+echo "\n";
+var_dump($result);
+
+echo "\n-- Calling printf() with three arguments --\n";
+$result = printf($format3, $arg1, $arg2, $arg3);
+echo "\n";
+var_dump($result);
+$result = printf($format33, $arg1, $arg2, $arg3);
+echo "\n";
+var_dump($result);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing printf() : basic functionality - using hexadecimal format ***
+
+-- Calling printf() with no arguments --
+format
+int(6)
+
+-- Calling printf() with one arguments --
+b
+int(1)
+B
+int(1)
+
+-- Calling printf() with two arguments --
+b 84
+int(4)
+B 84
+int(4)
+
+-- Calling printf() with three arguments --
+b 84 b1
+int(7)
+B 84 B1
+int(7)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/printf_error.phpt b/ext/standard/tests/strings/printf_error.phpt
new file mode 100644
index 000000000..a4a1076e6
--- /dev/null
+++ b/ext/standard/tests/strings/printf_error.phpt
@@ -0,0 +1,70 @@
+--TEST--
+Test printf() function : error conditions
+--FILE--
+<?php
+/* Prototype : int printf ( string $format [, mixed $args [, mixed $... ]] )
+ * Description: Produces output according to format .
+ * Source code: ext/standard/formatted_print.c
+ */
+
+echo "*** Testing printf() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing printf() function with Zero arguments --\n";
+var_dump( printf() );
+
+echo "\n-- Testing printf() function with less than expected no. of arguments --\n";
+$format1 = '%s';
+$format2 = '%s%s';
+$format3 = '%s%s%s';
+$arg1 = 'one';
+$arg2 = 'two';
+
+echo "\n-- Call printf with one argument less than expected --\n";
+var_dump( printf($format1) );
+var_dump( printf($format2,$arg1) );
+var_dump( printf($format3,$arg1,$arg2) );
+
+echo "\n-- Call printf with two argument less than expected --\n";
+var_dump( printf($format2) );
+var_dump( printf($format3,$arg1) );
+
+echo "\n-- Call printf with three argument less than expected --\n";
+var_dump( printf($format3) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing printf() : error conditions ***
+
+-- Testing printf() function with Zero arguments --
+
+Warning: Wrong parameter count for printf() in %s on line %d
+bool(false)
+
+-- Testing printf() function with less than expected no. of arguments --
+
+-- Call printf with one argument less than expected --
+
+Warning: printf(): Too few arguments in %s on line %d
+bool(false)
+
+Warning: printf(): Too few arguments in %s on line %d
+bool(false)
+
+Warning: printf(): Too few arguments in %s on line %d
+bool(false)
+
+-- Call printf with two argument less than expected --
+
+Warning: printf(): Too few arguments in %s on line %d
+bool(false)
+
+Warning: printf(): Too few arguments in %s on line %d
+bool(false)
+
+-- Call printf with three argument less than expected --
+
+Warning: printf(): Too few arguments in %s on line %d
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/printf_variation1.phpt b/ext/standard/tests/strings/printf_variation1.phpt
new file mode 100644
index 000000000..e71e564da
--- /dev/null
+++ b/ext/standard/tests/strings/printf_variation1.phpt
@@ -0,0 +1,354 @@
+--TEST--
+Test printf() function : usage variations - unexpected values for format argument
+--FILE--
+<?php
+/* Prototype : int printf ( string $format [, mixed $args [, mixed $... ]] )
+ * Description: Produces output according to format .
+ * Source code: ext/standard/formatted_print.c
+ */
+
+/*
+* Testing printf() : with different unexpected values for format argument other than the strings
+*/
+
+echo "*** Testing printf() : with unexpected values for format argument ***\n";
+
+// initialing required variables
+$arg1 = "second arg";
+$arg2 = "third arg";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// declaring class
+class sample
+{
+ public function __toString() {
+ return "Object";
+ }
+}
+
+// creating a file resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+/*10*/ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+/*15*/ NULL,
+ null,
+
+ // boolean data
+/*17*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*21*/ "",
+ '',
+
+ // object data
+/*23*/ new sample(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource data
+/*26*/ $file_handle
+);
+
+// loop through each element of the array for format
+
+$count = 1;
+foreach($values as $value) {
+ echo "\n-- Iteration $count --\n";
+
+ // with default argument
+ $result = printf($value);
+ echo "\n";
+ var_dump($result);
+
+ // with two arguments
+ $result = printf($value, $arg1);
+ echo "\n";
+ var_dump($result);
+
+ // with three arguments
+ $result = printf($value, $arg1, $arg2);
+ echo "\n";
+ var_dump($result);
+
+ $count++;
+};
+
+// close the resource
+fclose($file_handle);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing printf() : with unexpected values for format argument ***
+
+-- Iteration 1 --
+0
+int(1)
+0
+int(1)
+0
+int(1)
+
+-- Iteration 2 --
+1
+int(1)
+1
+int(1)
+1
+int(1)
+
+-- Iteration 3 --
+12345
+int(5)
+12345
+int(5)
+12345
+int(5)
+
+-- Iteration 4 --
+-2345
+int(5)
+-2345
+int(5)
+-2345
+int(5)
+
+-- Iteration 5 --
+10.5
+int(4)
+10.5
+int(4)
+10.5
+int(4)
+
+-- Iteration 6 --
+-10.5
+int(5)
+-10.5
+int(5)
+-10.5
+int(5)
+
+-- Iteration 7 --
+101234567000
+int(12)
+101234567000
+int(12)
+101234567000
+int(12)
+
+-- Iteration 8 --
+1.07654321E-9
+int(13)
+1.07654321E-9
+int(13)
+1.07654321E-9
+int(13)
+
+-- Iteration 9 --
+0.5
+int(3)
+0.5
+int(3)
+0.5
+int(3)
+
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+Array
+int(5)
+
+Notice: Array to string conversion in %s on line %d
+Array
+int(5)
+
+Notice: Array to string conversion in %s on line %d
+Array
+int(5)
+
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+Array
+int(5)
+
+Notice: Array to string conversion in %s on line %d
+Array
+int(5)
+
+Notice: Array to string conversion in %s on line %d
+Array
+int(5)
+
+-- Iteration 12 --
+
+Notice: Array to string conversion in %s on line %d
+Array
+int(5)
+
+Notice: Array to string conversion in %s on line %d
+Array
+int(5)
+
+Notice: Array to string conversion in %s on line %d
+Array
+int(5)
+
+-- Iteration 13 --
+
+Notice: Array to string conversion in %s on line %d
+Array
+int(5)
+
+Notice: Array to string conversion in %s on line %d
+Array
+int(5)
+
+Notice: Array to string conversion in %s on line %d
+Array
+int(5)
+
+-- Iteration 14 --
+
+Notice: Array to string conversion in %s on line %d
+Array
+int(5)
+
+Notice: Array to string conversion in %s on line %d
+Array
+int(5)
+
+Notice: Array to string conversion in %s on line %d
+Array
+int(5)
+
+-- Iteration 15 --
+
+int(0)
+
+int(0)
+
+int(0)
+
+-- Iteration 16 --
+
+int(0)
+
+int(0)
+
+int(0)
+
+-- Iteration 17 --
+1
+int(1)
+1
+int(1)
+1
+int(1)
+
+-- Iteration 18 --
+
+int(0)
+
+int(0)
+
+int(0)
+
+-- Iteration 19 --
+1
+int(1)
+1
+int(1)
+1
+int(1)
+
+-- Iteration 20 --
+
+int(0)
+
+int(0)
+
+int(0)
+
+-- Iteration 21 --
+
+int(0)
+
+int(0)
+
+int(0)
+
+-- Iteration 22 --
+
+int(0)
+
+int(0)
+
+int(0)
+
+-- Iteration 23 --
+Object
+int(6)
+Object
+int(6)
+Object
+int(6)
+
+-- Iteration 24 --
+
+int(0)
+
+int(0)
+
+int(0)
+
+-- Iteration 25 --
+
+int(0)
+
+int(0)
+
+int(0)
+
+-- Iteration 26 --
+Resource id #%d
+int(%d)
+Resource id #%d
+int(%d)
+Resource id #%d
+int(%d)
+===DONE===
diff --git a/ext/standard/tests/strings/printf_variation2.phpt b/ext/standard/tests/strings/printf_variation2.phpt
new file mode 100644
index 000000000..be66ad8fc
--- /dev/null
+++ b/ext/standard/tests/strings/printf_variation2.phpt
@@ -0,0 +1,281 @@
+--TEST--
+Test printf() function : usage variations - with all types of values for arg1 argument
+--FILE--
+<?php
+/* Prototype : int printf ( string $format [, mixed $args [, mixed $... ]] )
+ * Description: Produces output according to format .
+ * Source code: ext/standard/formatted_print.c
+ */
+
+error_reporting(E_ALL & ~E_NOTICE);
+
+echo "*** Testing printf() : with different types of values passed for arg1 argument ***\n";
+
+// initialing required variables
+$format = '%s';
+$arg2 = 'third argument';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// declaring class
+class sample
+{
+ public function __toString() {
+ return "Object";
+ }
+}
+
+// creating a file resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+/*10*/ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+/*15*/ NULL,
+ null,
+
+ // boolean data
+/*17*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*21*/ "",
+ '',
+
+ // string data
+/*23*/ "string",
+ 'string',
+
+ // object data
+/*25*/ new sample(),
+
+ // undefined data
+/*26*/ @$undefined_var,
+
+ // unset data
+/*27*/ @$unset_var,
+
+ // resource data
+/*28*/ $file_handle
+);
+
+// loop through each element of the array for arg1
+
+$count = 1;
+foreach($values as $value) {
+ echo "\n-- Iteration $count --\n";
+
+ // with two arguments
+ $result = printf($format, $value);
+ echo "\n";
+ var_dump($result);
+
+ // with three arguments
+ $result = printf($format, $value, $arg2);
+ echo "\n";
+ var_dump($result);
+
+ $count++;
+};
+
+// closing the resource
+fclose($file_handle);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing printf() : with different types of values passed for arg1 argument ***
+
+-- Iteration 1 --
+0
+int(1)
+0
+int(1)
+
+-- Iteration 2 --
+1
+int(1)
+1
+int(1)
+
+-- Iteration 3 --
+12345
+int(5)
+12345
+int(5)
+
+-- Iteration 4 --
+-2345
+int(5)
+-2345
+int(5)
+
+-- Iteration 5 --
+10.5
+int(4)
+10.5
+int(4)
+
+-- Iteration 6 --
+-10.5
+int(5)
+-10.5
+int(5)
+
+-- Iteration 7 --
+101234567000
+int(12)
+101234567000
+int(12)
+
+-- Iteration 8 --
+1.07654321E-9
+int(13)
+1.07654321E-9
+int(13)
+
+-- Iteration 9 --
+0.5
+int(3)
+0.5
+int(3)
+
+-- Iteration 10 --
+Array
+int(5)
+Array
+int(5)
+
+-- Iteration 11 --
+Array
+int(5)
+Array
+int(5)
+
+-- Iteration 12 --
+Array
+int(5)
+Array
+int(5)
+
+-- Iteration 13 --
+Array
+int(5)
+Array
+int(5)
+
+-- Iteration 14 --
+Array
+int(5)
+Array
+int(5)
+
+-- Iteration 15 --
+
+int(0)
+
+int(0)
+
+-- Iteration 16 --
+
+int(0)
+
+int(0)
+
+-- Iteration 17 --
+1
+int(1)
+1
+int(1)
+
+-- Iteration 18 --
+
+int(0)
+
+int(0)
+
+-- Iteration 19 --
+1
+int(1)
+1
+int(1)
+
+-- Iteration 20 --
+
+int(0)
+
+int(0)
+
+-- Iteration 21 --
+
+int(0)
+
+int(0)
+
+-- Iteration 22 --
+
+int(0)
+
+int(0)
+
+-- Iteration 23 --
+string
+int(6)
+string
+int(6)
+
+-- Iteration 24 --
+string
+int(6)
+string
+int(6)
+
+-- Iteration 25 --
+Object
+int(6)
+Object
+int(6)
+
+-- Iteration 26 --
+
+int(0)
+
+int(0)
+
+-- Iteration 27 --
+
+int(0)
+
+int(0)
+
+-- Iteration 28 --
+Resource id #%d
+int(%d)
+Resource id #%d
+int(%d)
+===DONE===
diff --git a/ext/standard/tests/strings/quoted_printable_decode_basic.phpt b/ext/standard/tests/strings/quoted_printable_decode_basic.phpt
new file mode 100644
index 000000000..5b15388d0
--- /dev/null
+++ b/ext/standard/tests/strings/quoted_printable_decode_basic.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Test quoted_printable_decode() function : basic functionality
+--FILE--
+<?php
+/* Prototype : string quoted_printable_decode ( string $str )
+ * Description: Convert a quoted-printable string to an 8 bit string
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing quoted_printable_decode() : basic functionality ***\n";
+
+$str = "=FAwow-factor=C1=d0=D5=DD=C5=CE=CE=D9=C5=0A=
+=20=D4=cf=D2=C7=CF=D7=D9=C5=
+=20=
+=D0=
+=D2=CF=C5=CB=D4=D9";
+
+var_dump(bin2hex(quoted_printable_decode($str)));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing quoted_printable_decode() : basic functionality ***
+string(76) "fa776f772d666163746f72c1d0d5ddc5ceced9c50a20d4cfd2c7cfd7d9c520d0d2cfc5cbd4d9"
+===DONE===
diff --git a/ext/standard/tests/strings/quoted_printable_decode_error.phpt b/ext/standard/tests/strings/quoted_printable_decode_error.phpt
new file mode 100644
index 000000000..6eddfc79c
--- /dev/null
+++ b/ext/standard/tests/strings/quoted_printable_decode_error.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Test quoted_printable_decode() function : error conditions
+--FILE--
+<?php
+/* Prototype : string quoted_printable_decode ( string $str )
+ * Description: Convert a quoted-printable string to an 8 bit string
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing quoted_printable_decode() : error conditions ***\n";
+
+echo "\n-- Testing quoted_printable_decode() function with no arguments --\n";
+var_dump( quoted_printable_decode() );
+
+echo "\n-- Testing quoted_printable_decode() function with more than expected no. of arguments --\n";
+$str = b"=FAwow-factor=C1=d0=D5=DD=C5=CE=CE=D9=C5=0A=
+=20=D4=cf=D2=C7=CF=D7=D9=C5=
+=20=
+=D0=
+=D2=CF=C5=CB=D4=D9";
+$extra_arg = 10;
+var_dump( quoted_printable_decode($str, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing quoted_printable_decode() : error conditions ***
+
+-- Testing quoted_printable_decode() function with no arguments --
+
+Warning: Wrong parameter count for quoted_printable_decode() in %s on line %d
+NULL
+
+-- Testing quoted_printable_decode() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for quoted_printable_decode() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/strings/quoted_printable_decode_variation1.phpt b/ext/standard/tests/strings/quoted_printable_decode_variation1.phpt
new file mode 100644
index 000000000..384dbcf9e
--- /dev/null
+++ b/ext/standard/tests/strings/quoted_printable_decode_variation1.phpt
@@ -0,0 +1,189 @@
+--TEST--
+Test quoted_printable_decode() function : usage variations - unexpected values for 'str' argument
+--FILE--
+<?php
+/* Prototype : string quoted_printable_decode ( string $str )
+ * Description: Convert a quoted-printable string to an 8 bit string
+ * Source code: ext/standard/string.c
+*/
+
+/*
+* Testing quoted_printable_decode() : with different unexpected values for format argument other than the strings
+*/
+
+echo "*** Testing quoted_printable_decode() : with unexpected values for 'str' argument ***\n";
+
+// initialing required variables
+$arg1 = "second arg";
+$arg2 = "third arg";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// declaring class
+class sample
+{
+ public function __toString() {
+ return "Object";
+ }
+}
+
+// creating a file resource
+$file_handle = fopen(__FILE__, 'r');
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+/*10*/ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+/*15*/ NULL,
+ null,
+
+ // boolean data
+/*17*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*21*/ "",
+ '',
+
+ // object data
+/*23*/ new sample(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource data
+/*26*/ $file_handle
+);
+
+// loop through each element of the array for 'str'
+
+$count = 1;
+foreach($values as $value) {
+ echo "\n-- Iteration $count --\n";
+ var_dump(bin2hex(quoted_printable_decode($value)));
+ $count++;
+};
+
+// close the resource
+fclose($file_handle);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing quoted_printable_decode() : with unexpected values for 'str' argument ***
+
+-- Iteration 1 --
+string(2) "30"
+
+-- Iteration 2 --
+string(2) "31"
+
+-- Iteration 3 --
+string(10) "3132333435"
+
+-- Iteration 4 --
+string(10) "2d32333435"
+
+-- Iteration 5 --
+string(8) "31302e35"
+
+-- Iteration 6 --
+string(10) "2d31302e35"
+
+-- Iteration 7 --
+string(24) "313031323334353637303030"
+
+-- Iteration 8 --
+string(26) "312e3037363534333231452d39"
+
+-- Iteration 9 --
+string(6) "302e35"
+
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+string(10) "4172726179"
+
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+string(10) "4172726179"
+
+-- Iteration 12 --
+
+Notice: Array to string conversion in %s on line %d
+string(10) "4172726179"
+
+-- Iteration 13 --
+
+Notice: Array to string conversion in %s on line %d
+string(10) "4172726179"
+
+-- Iteration 14 --
+
+Notice: Array to string conversion in %s on line %d
+string(10) "4172726179"
+
+-- Iteration 15 --
+string(0) ""
+
+-- Iteration 16 --
+string(0) ""
+
+-- Iteration 17 --
+string(2) "31"
+
+-- Iteration 18 --
+string(0) ""
+
+-- Iteration 19 --
+string(2) "31"
+
+-- Iteration 20 --
+string(0) ""
+
+-- Iteration 21 --
+string(0) ""
+
+-- Iteration 22 --
+string(0) ""
+
+-- Iteration 23 --
+string(12) "4f626a656374"
+
+-- Iteration 24 --
+string(0) ""
+
+-- Iteration 25 --
+string(0) ""
+
+-- Iteration 26 --
+string(%d) "%s"
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/quotemeta_basic.phpt b/ext/standard/tests/strings/quotemeta_basic.phpt
new file mode 100644
index 000000000..9a2f23c46
--- /dev/null
+++ b/ext/standard/tests/strings/quotemeta_basic.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Test quotemeta() function : basic functionality
+--FILE--
+<?php
+
+/* Prototype : string quotemeta ( string $str )
+ * Description: Quote meta characters
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing quotemeta() : basic functionality ***\n";
+
+var_dump(quotemeta("Hello how are you ?"));
+var_dump(quotemeta("(100 + 50) * 10"));
+var_dump(quotemeta("\+*?[^]($)"));
+?>
+===DONE===
+--EXPECTF--
+*** Testing quotemeta() : basic functionality ***
+string(20) "Hello how are you \?"
+string(19) "\(100 \+ 50\) \* 10"
+string(20) "\\\+\*\?\[\^\]\(\$\)"
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/quotemeta_error.phpt b/ext/standard/tests/strings/quotemeta_error.phpt
new file mode 100644
index 000000000..f592225da
--- /dev/null
+++ b/ext/standard/tests/strings/quotemeta_error.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test quotemeta() function : error conditions
+--FILE--
+<?php
+
+/* Prototype : string quotemeta ( string $str )
+ * Description: Quote meta characters
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing quotemeta() : error conditions ***\n";
+
+echo "\n-- Testing quotemeta() function with no arguments --\n";
+var_dump( quotemeta());
+
+echo "\n-- Testing quotemeta() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump(quotemeta("How are you ?", $extra_arg));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing quotemeta() : error conditions ***
+
+-- Testing quotemeta() function with no arguments --
+
+Warning: Wrong parameter count for quotemeta() in %s on line %d
+NULL
+
+-- Testing quotemeta() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for quotemeta() in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/rtrim_basic.phpt b/ext/standard/tests/strings/rtrim_basic.phpt
new file mode 100644
index 000000000..7193b5986
--- /dev/null
+++ b/ext/standard/tests/strings/rtrim_basic.phpt
@@ -0,0 +1,54 @@
+--TEST--
+Test rtrim() function : basic functionality
+--FILE--
+<?php
+
+/* Prototype : string rtrim ( string $str [, string $charlist ] )
+ * Description: Strip whitespace (or other characters) from the end of a string.
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing rtrim() : basic functionality ***\n";
+
+$text = "---These are a few words--- \t\r\n\0\x0B ";
+$hello = "!===Hello World===!";
+$alpha = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+$binary = "Example string\x0A\x0D";
+
+
+
+echo "\n-- Trim string with all white space characters --\n";
+var_dump(rtrim($text));
+
+echo "\n-- Trim non-whitespace from a string --\n";
+var_dump(rtrim($hello, "=!"));
+
+echo "\n-- Trim some non-white space characters from a string --\n";
+var_dump(rtrim($hello, "!dlWro="));
+
+echo "\n-- Trim some non-white space characters from a string using a character range --\n";
+var_dump(rtrim($alpha, "A..Z"));
+
+echo "\n-- Trim the ASCII control characters at the beginning of a string --\n";
+var_dump(rtrim($binary, "\x00..\x1F"));
+
+?>
+===DONE===
+--EXPECT--
+*** Testing rtrim() : basic functionality ***
+
+-- Trim string with all white space characters --
+string(27) "---These are a few words---"
+
+-- Trim non-whitespace from a string --
+string(15) "!===Hello World"
+
+-- Trim some non-white space characters from a string --
+string(10) "!===Hello "
+
+-- Trim some non-white space characters from a string using a character range --
+string(10) "0123456789"
+
+-- Trim the ASCII control characters at the beginning of a string --
+string(14) "Example string"
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/rtrim_error.phpt b/ext/standard/tests/strings/rtrim_error.phpt
new file mode 100644
index 000000000..9b1cc36b3
--- /dev/null
+++ b/ext/standard/tests/strings/rtrim_error.phpt
@@ -0,0 +1,61 @@
+--TEST--
+Test rtrim() function : error conditions
+--FILE--
+<?php
+
+/* Prototype : string rtrim ( string $str [, string $charlist ] )
+ * Description: Strip whitespace (or other characters) from the end of a string.
+ * Source code: ext/standard/string.c
+*/
+
+
+echo "*** Testing rtrim() : error conditions ***\n";
+
+echo "\n-- Testing rtrim() function with no arguments --\n";
+var_dump( rtrim() );
+
+echo "\n-- Testing rtrim() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( rtrim("Hello World", "Heo", $extra_arg) );
+
+
+$hello = " Hello World\n";
+echo "\n-- Test rtrim function with various invalid charlists\n";
+var_dump(rtrim($hello, "..a"));
+var_dump(rtrim($hello, "a.."));
+var_dump(rtrim($hello, "z..a"));
+var_dump(rtrim($hello, "a..b..c"));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing rtrim() : error conditions ***
+
+-- Testing rtrim() function with no arguments --
+
+Warning: Wrong parameter count for rtrim() in %s on line %d
+NULL
+
+-- Testing rtrim() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for rtrim() in %s on line %d
+NULL
+
+-- Test rtrim function with various invalid charlists
+
+Warning: rtrim(): Invalid '..'-range, no character to the left of '..' in %s on line %d
+string(14) " Hello World
+"
+
+Warning: rtrim(): Invalid '..'-range, no character to the right of '..' in %s on line %d
+string(14) " Hello World
+"
+
+Warning: rtrim(): Invalid '..'-range, '..'-range needs to be incrementing in %s on line %d
+string(14) " Hello World
+"
+
+Warning: rtrim(): Invalid '..'-range in %s on line %d
+string(14) " Hello World
+"
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/rtrim_variation1.phpt b/ext/standard/tests/strings/rtrim_variation1.phpt
new file mode 100644
index 000000000..19090a03d
--- /dev/null
+++ b/ext/standard/tests/strings/rtrim_variation1.phpt
@@ -0,0 +1,136 @@
+--TEST--
+Test rtrim() function : usage variations - test values for $str argument
+--FILE--
+<?php
+
+/* Prototype : string rtrim ( string $str [, string $charlist ] )
+ * Description: Strip whitespace (or other characters) from the end of a string.
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing rtrim() function: with unexpected inputs for 'str' argument ***\n";
+
+//get an unset variable
+$unset_var = ' !--string_val--! ';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return " !---sample object---! ";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $input
+$inputs = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ 255,
+ 256,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*7*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*10*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*17*/ NULL,
+ null,
+
+ // objects
+/*19*/ new sample(),
+
+ // resource
+/*20*/ $file_handle,
+
+ // undefined variable
+/*21*/ @$undefined_var,
+
+ // unset variable
+/*22*/ @$unset_var
+);
+
+// loop through with each element of the $inputs array to test rtrim() function
+$count = 1;
+foreach($inputs as $input) {
+ echo "-- Iteration $count --\n";
+ // strip white space and any "minus" signs
+ var_dump( rtrim($input, " !-") );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing rtrim() function: with unexpected inputs for 'str' argument ***
+-- Iteration 1 --
+string(1) "0"
+-- Iteration 2 --
+string(1) "1"
+-- Iteration 3 --
+string(3) "255"
+-- Iteration 4 --
+string(3) "256"
+-- Iteration 5 --
+string(10) "2147483647"
+-- Iteration 6 --
+string(11) "-2147483648"
+-- Iteration 7 --
+string(4) "10.5"
+-- Iteration 8 --
+string(5) "-20.5"
+-- Iteration 9 --
+string(12) "101234567000"
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 12 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 13 --
+string(1) "1"
+-- Iteration 14 --
+string(0) ""
+-- Iteration 15 --
+string(1) "1"
+-- Iteration 16 --
+string(0) ""
+-- Iteration 17 --
+string(0) ""
+-- Iteration 18 --
+string(0) ""
+-- Iteration 19 --
+string(19) " !---sample object"
+-- Iteration 20 --
+string(%d) "Resource id #%d"
+-- Iteration 21 --
+string(0) ""
+-- Iteration 22 --
+string(0) ""
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/rtrim_variation2.phpt b/ext/standard/tests/strings/rtrim_variation2.phpt
new file mode 100644
index 000000000..6be2d76f5
--- /dev/null
+++ b/ext/standard/tests/strings/rtrim_variation2.phpt
@@ -0,0 +1,136 @@
+--TEST--
+Test rtrim() function : usage variations - test values for $charlist argument
+--FILE--
+<?php
+
+/* Prototype : string rtrim ( string $str [, string $charlist ] )
+ * Description: Strip whitespace (or other characters) from the end of a string.
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing rtrim() function: with unexpected inputs for 'charlist' argument ***\n";
+
+//get an unset variable
+$unset_var = ' string_val ';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return " sample object ";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $input
+$inputs = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ 255,
+ 256,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*7*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*10*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*17*/ NULL,
+ null,
+
+ // objects
+/*19*/ new sample(),
+
+ // resource
+/*20*/ $file_handle,
+
+ // undefined variable
+/*21*/ @$undefined_var,
+
+ // unset variable
+/*22*/ @$unset_var
+);
+
+// loop through with each element of the $inputs array to test rtrim() function
+$count = 1;
+foreach($inputs as $charlist) {
+ echo "-- Iteration $count --\n";
+ // strip white space and any "minus" signs
+ var_dump( rtrim("!---Hello World---!", $charlist) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing rtrim() function: with unexpected inputs for 'charlist' argument ***
+-- Iteration 1 --
+string(19) "!---Hello World---!"
+-- Iteration 2 --
+string(19) "!---Hello World---!"
+-- Iteration 3 --
+string(19) "!---Hello World---!"
+-- Iteration 4 --
+string(19) "!---Hello World---!"
+-- Iteration 5 --
+string(19) "!---Hello World---!"
+-- Iteration 6 --
+string(19) "!---Hello World---!"
+-- Iteration 7 --
+string(19) "!---Hello World---!"
+-- Iteration 8 --
+string(19) "!---Hello World---!"
+-- Iteration 9 --
+string(19) "!---Hello World---!"
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d3
+string(19) "!---Hello World---!"
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d3
+string(19) "!---Hello World---!"
+-- Iteration 12 --
+
+Notice: Array to string conversion in %s on line %d3
+string(19) "!---Hello World---!"
+-- Iteration 13 --
+string(19) "!---Hello World---!"
+-- Iteration 14 --
+string(19) "!---Hello World---!"
+-- Iteration 15 --
+string(19) "!---Hello World---!"
+-- Iteration 16 --
+string(19) "!---Hello World---!"
+-- Iteration 17 --
+string(19) "!---Hello World---!"
+-- Iteration 18 --
+string(19) "!---Hello World---!"
+-- Iteration 19 --
+string(19) "!---Hello World---!"
+-- Iteration 20 --
+string(19) "!---Hello World---!"
+-- Iteration 21 --
+string(19) "!---Hello World---!"
+-- Iteration 22 --
+string(19) "!---Hello World---!"
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/sha1_basic.phpt b/ext/standard/tests/strings/sha1_basic.phpt
new file mode 100644
index 000000000..00b764f41
--- /dev/null
+++ b/ext/standard/tests/strings/sha1_basic.phpt
@@ -0,0 +1,70 @@
+--TEST--
+sha1() with ASCII output.
+--FILE--
+<?php
+
+/* Prototype: string sha1 ( string $str [, bool $raw_output ] )
+ * Description: Calculate the sha1 hash of a string
+ */
+
+echo "*** Testing sha1() : basic functionality ***\n";
+
+echo "\n-- Without raw argument --\n";
+var_dump(sha1(""));
+var_dump(sha1("a"));
+var_dump(sha1("abc"));
+var_dump(sha1("message digest"));
+var_dump(sha1("abcdefghijklmnopqrstuvwxyz"));
+var_dump(sha1("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"));
+var_dump(sha1("12345678901234567890123456789012345678901234567890123456789012345678901234567890"));
+
+echo "\n-- With raw == false --\n";
+var_dump(sha1("", false));
+var_dump(sha1("a", false));
+var_dump(sha1("abc", false));
+var_dump(sha1("message digest", false));
+var_dump(sha1("abcdefghijklmnopqrstuvwxyz", false));
+var_dump(sha1("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", false));
+var_dump(sha1("12345678901234567890123456789012345678901234567890123456789012345678901234567890", false));
+
+echo "\n-- With raw == true --\n";
+var_dump(bin2hex(sha1("", true)));
+var_dump(bin2hex(sha1("a", true)));
+var_dump(bin2hex(sha1("abc", true)));
+var_dump(bin2hex(sha1("message digest", true)));
+var_dump(bin2hex(sha1("abcdefghijklmnopqrstuvwxyz", true)));
+var_dump(bin2hex(sha1("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", true)));
+var_dump(bin2hex(sha1("12345678901234567890123456789012345678901234567890123456789012345678901234567890", true)));
+
+?>
+===DONE===
+--EXPECT--
+*** Testing sha1() : basic functionality ***
+
+-- Without raw argument --
+string(40) "da39a3ee5e6b4b0d3255bfef95601890afd80709"
+string(40) "86f7e437faa5a7fce15d1ddcb9eaeaea377667b8"
+string(40) "a9993e364706816aba3e25717850c26c9cd0d89d"
+string(40) "c12252ceda8be8994d5fa0290a47231c1d16aae3"
+string(40) "32d10c7b8cf96570ca04ce37f2a19d84240d3a89"
+string(40) "761c457bf73b14d27e9e9265c46f4b4dda11f940"
+string(40) "50abf5706a150990a08b2c5ea40fa0e585554732"
+
+-- With raw == false --
+string(40) "da39a3ee5e6b4b0d3255bfef95601890afd80709"
+string(40) "86f7e437faa5a7fce15d1ddcb9eaeaea377667b8"
+string(40) "a9993e364706816aba3e25717850c26c9cd0d89d"
+string(40) "c12252ceda8be8994d5fa0290a47231c1d16aae3"
+string(40) "32d10c7b8cf96570ca04ce37f2a19d84240d3a89"
+string(40) "761c457bf73b14d27e9e9265c46f4b4dda11f940"
+string(40) "50abf5706a150990a08b2c5ea40fa0e585554732"
+
+-- With raw == true --
+string(40) "da39a3ee5e6b4b0d3255bfef95601890afd80709"
+string(40) "86f7e437faa5a7fce15d1ddcb9eaeaea377667b8"
+string(40) "a9993e364706816aba3e25717850c26c9cd0d89d"
+string(40) "c12252ceda8be8994d5fa0290a47231c1d16aae3"
+string(40) "32d10c7b8cf96570ca04ce37f2a19d84240d3a89"
+string(40) "761c457bf73b14d27e9e9265c46f4b4dda11f940"
+string(40) "50abf5706a150990a08b2c5ea40fa0e585554732"
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/sha1_error.phpt b/ext/standard/tests/strings/sha1_error.phpt
new file mode 100644
index 000000000..bfc3e44fd
--- /dev/null
+++ b/ext/standard/tests/strings/sha1_error.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test sha1() function : error conditions
+--FILE--
+<?php
+
+
+/* Prototype: string sha1 ( string $str [, bool $raw_output ] )
+ * Description: Calculate the sha1 hash of a string
+ */
+
+echo "*** Testing sha1() : error conditions ***\n";
+
+echo "\n-- Testing sha1() function with no arguments --\n";
+var_dump( sha1() );
+
+echo "\n-- Testing sha1() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( sha1("Hello World", true, $extra_arg) );
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing sha1() : error conditions ***
+
+-- Testing sha1() function with no arguments --
+
+Warning: sha1() expects at least 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing sha1() function with more than expected no. of arguments --
+
+Warning: sha1() expects at most 2 parameters, 3 given in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/strings/sha1_file.phpt b/ext/standard/tests/strings/sha1_file.phpt
new file mode 100644
index 000000000..3013adc34
--- /dev/null
+++ b/ext/standard/tests/strings/sha1_file.phpt
@@ -0,0 +1,131 @@
+--TEST--
+Test sha1_file() function with ASCII output and raw binary output. Based on ext/standard/tests/strings/md5_file.phpt
+--SKIPIF--
+<?php
+
+$path = dirname(__FILE__);
+$data_file = "$path/EmptyFile.txt";
+$data_file1 = "$path/DataFile.txt";
+if !(($fp = fopen($data_file, 'w')) || ($fp1 = fopen($data_file1, 'w')) {
+ echo "File could not be created ,hence exiting from testcase due to pre-requisite failure\n";
+}
+fclose( $fp );
+fclose( $fp1 );
+
+--FILE--
+<?php
+
+/* Prototype: string sha1_file( string filename[, bool raw_output] )
+ * Description: Calculate the sha1 hash of a file
+ */
+
+echo "*** Testing sha1_file() : basic functionality ***\n";
+
+/* Creating an empty file */
+if (($handle = fopen( "EmptyFile.txt", "w+")) == FALSE)
+return false;
+
+/* Creating a data file */
+if (($handle2 = fopen( "DataFile.txt", "w+")) == FALSE)
+return false;
+
+/* Writing into file */
+$filename = "DataFile.txt";
+$content = b"Add this to the file\n";
+if (is_writable($filename)) {
+ if (fwrite($handle2, $content) === FALSE) {
+ echo "Cannot write to file ($filename)";
+ exit;
+ }
+}
+
+// close the files
+fclose($handle);
+fclose($handle2);
+
+/* Testing error conditions */
+echo "\n*** Testing for error conditions ***\n";
+
+echo "\n-- No filename --\n";
+var_dump( sha1_file("") );
+
+echo "\n-- invalid filename --\n";
+var_dump( sha1_file("a") );
+
+echo "\n-- Scalar value as filename --\n";
+var_dump( sha1_file(12) );
+
+echo "\n-- NULL as filename --\n";
+var_dump( sha1_file(NULL) );
+
+echo "\n-- Zero arguments --\n";
+ var_dump ( sha1_file() );
+
+echo "\n-- More than valid number of arguments ( valid is 2) --\n";
+var_dump ( sha1_file("EmptyFile.txt", true, NULL) );
+
+echo "\n-- Hexadecimal Output for Empty file as Argument --\n";
+var_dump( sha1_file("EmptyFile.txt") );
+
+echo "\n-- Raw Binary Output for Empty file as Argument --\n";
+var_dump( bin2hex(sha1_file("EmptyFile.txt", true)));
+
+echo "\n-- Hexadecimal Output for a valid file with some contents --\n";
+var_dump( sha1_file("DataFile.txt") );
+
+echo "\n-- Raw Binary Output for a valid file with some contents --\n";
+var_dump ( bin2hex(sha1_file("DataFile.txt", true)));
+
+// remove temp files
+unlink("DataFile.txt");
+unlink("EmptyFile.txt");
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing sha1_file() : basic functionality ***
+
+*** Testing for error conditions ***
+
+-- No filename --
+
+Warning: sha1_file(): Filename cannot be empty in %s on line %d
+bool(false)
+
+-- invalid filename --
+
+Warning: sha1_file(a): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+-- Scalar value as filename --
+
+Warning: sha1_file(12): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+-- NULL as filename --
+
+Warning: sha1_file(): Filename cannot be empty in %s on line %d
+bool(false)
+
+-- Zero arguments --
+
+Warning: sha1_file() expects at least 1 parameter, 0 given in %s on line %d
+NULL
+
+-- More than valid number of arguments ( valid is 2) --
+
+Warning: sha1_file() expects at most 2 parameters, 3 given in %s on line %d
+NULL
+
+-- Hexadecimal Output for Empty file as Argument --
+string(40) "da39a3ee5e6b4b0d3255bfef95601890afd80709"
+
+-- Raw Binary Output for Empty file as Argument --
+string(40) "da39a3ee5e6b4b0d3255bfef95601890afd80709"
+
+-- Hexadecimal Output for a valid file with some contents --
+string(40) "d16a568ab98233deff7ec8b1668eb4b3d9e53fee"
+
+-- Raw Binary Output for a valid file with some contents --
+string(40) "d16a568ab98233deff7ec8b1668eb4b3d9e53fee"
+===DONE===
diff --git a/ext/standard/tests/strings/sha1_variation1.phpt b/ext/standard/tests/strings/sha1_variation1.phpt
new file mode 100644
index 000000000..044be46d9
--- /dev/null
+++ b/ext/standard/tests/strings/sha1_variation1.phpt
@@ -0,0 +1,157 @@
+--TEST--
+Test sha1() function : usage variations - unexpected values for 'str' argument
+--FILE--
+<?php
+
+/* Prototype: string sha1 ( string $str [, bool $raw_output ] )
+ * Description: Calculate the sha1 hash of a string
+ */
+
+echo "*** Testing sha1() : unexpected values for 'str' ***\n";
+
+$raw = false;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//defining class for object variable
+class MyClass
+{
+ public function __toString()
+ {
+ return "object";
+ }
+}
+
+//resource variable
+$fp = fopen(__FILE__, 'r');
+
+//different values for 'str' argument
+$values = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.1234567E-10,
+ .5,
+
+ // array data
+/*10*/ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+/*15*/ NULL,
+ null,
+
+ // boolean data
+/*17*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*21*/ "",
+ '',
+
+ // object data
+/*23*/ new MyClass(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ //resource data
+/*26*/ $fp
+);
+
+// loop through each element of $values for 'str' argument
+for($count = 0; $count < count($values); $count++) {
+ echo "-- Iteration ".($count+1)." --\n";
+ var_dump( sha1($values[$count], $raw) );
+}
+
+//closing resource
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing sha1() : unexpected values for 'str' ***
+-- Iteration 1 --
+string(40) "b6589fc6ab0dc82cf12099d1c2d40ab994e8410c"
+-- Iteration 2 --
+string(40) "356a192b7913b04c54574d18c28d46e6395428ab"
+-- Iteration 3 --
+string(40) "8cb2237d0679ca88db6464eac60da96345513964"
+-- Iteration 4 --
+string(40) "bc97c643aba3b6c6abe253222f439d4002a87528"
+-- Iteration 5 --
+string(40) "1287384bc5ef3ab84a36a5ef1d888df2763567f4"
+-- Iteration 6 --
+string(40) "c9d6e1b691f17c8ae6d458984a5f56f80e62a60b"
+-- Iteration 7 --
+string(40) "39493e1e645578a655f532e1f9bcff67991f2c2f"
+-- Iteration 8 --
+string(40) "681b45cae882ad795afd54ccc2a04ad58e056b83"
+-- Iteration 9 --
+string(40) "1b390cd54a0c0d4f27fa7adf23e3c45536e9f37c"
+-- Iteration 10 --
+
+Warning: sha1() expects parameter 1 to be string, array given in %s on line %d
+NULL
+-- Iteration 11 --
+
+Warning: sha1() expects parameter 1 to be string, array given in %s on line %d
+NULL
+-- Iteration 12 --
+
+Warning: sha1() expects parameter 1 to be string, array given in %s on line %d
+NULL
+-- Iteration 13 --
+
+Warning: sha1() expects parameter 1 to be string, array given in %s on line %d
+NULL
+-- Iteration 14 --
+
+Warning: sha1() expects parameter 1 to be string, array given in %s on line %d
+NULL
+-- Iteration 15 --
+string(40) "da39a3ee5e6b4b0d3255bfef95601890afd80709"
+-- Iteration 16 --
+string(40) "da39a3ee5e6b4b0d3255bfef95601890afd80709"
+-- Iteration 17 --
+string(40) "356a192b7913b04c54574d18c28d46e6395428ab"
+-- Iteration 18 --
+string(40) "da39a3ee5e6b4b0d3255bfef95601890afd80709"
+-- Iteration 19 --
+string(40) "356a192b7913b04c54574d18c28d46e6395428ab"
+-- Iteration 20 --
+string(40) "da39a3ee5e6b4b0d3255bfef95601890afd80709"
+-- Iteration 21 --
+string(40) "da39a3ee5e6b4b0d3255bfef95601890afd80709"
+-- Iteration 22 --
+string(40) "da39a3ee5e6b4b0d3255bfef95601890afd80709"
+-- Iteration 23 --
+string(40) "1615307cc4523f183e777df67f168c86908e8007"
+-- Iteration 24 --
+string(40) "da39a3ee5e6b4b0d3255bfef95601890afd80709"
+-- Iteration 25 --
+string(40) "da39a3ee5e6b4b0d3255bfef95601890afd80709"
+-- Iteration 26 --
+
+Warning: sha1() expects parameter 1 to be string, resource given in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/strings/sha1_variation2.phpt b/ext/standard/tests/strings/sha1_variation2.phpt
new file mode 100644
index 000000000..a5bf5f868
--- /dev/null
+++ b/ext/standard/tests/strings/sha1_variation2.phpt
@@ -0,0 +1,160 @@
+--TEST--
+Test sha1() function : usage variations - unexpected values for 'raw' argument
+--FILE--
+<?php
+
+/* Prototype: string sha1 ( string $str [, bool $raw_output ] )
+ * Description: Calculate the sha1 hash of a string
+ */
+
+echo "*** Testing sha1() : unexpected values for 'raw' ***\n";
+
+$string = "Hello World";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//defining class for object variable
+class MyClass
+{
+ public function __toString()
+ {
+ return "object";
+ }
+}
+
+//resource variable
+$fp = fopen(__FILE__, 'r');
+
+//different values for 'str' argument
+$values = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.1234567E-10,
+ .5,
+
+ // array data
+/*10*/ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+/*15*/ NULL,
+ null,
+
+ // string data
+/*17*/ "ABC",
+ 'abc',
+ "0abc",
+ "123abc",
+
+ // empty data
+/*21*/ "",
+ '',
+
+ // object data
+/*23*/ new MyClass(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ //resource data
+/*26*/ $fp
+);
+
+// loop through each element of $values for 'raw' argument
+for($count = 0; $count < count($values); $count++) {
+ echo "-- Iteration ".($count+1)." --\n";
+ // use bin2hex to catch those cases were raw is true
+ var_dump( bin2hex(sha1($string, $values[$count])) );
+}
+
+//closing resource
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing sha1() : unexpected values for 'raw' ***
+-- Iteration 1 --
+string(80) "30613464353561386437373865353032326661623730313937376335643834306262633438366430"
+-- Iteration 2 --
+string(40) "0a4d55a8d778e5022fab701977c5d840bbc486d0"
+-- Iteration 3 --
+string(40) "0a4d55a8d778e5022fab701977c5d840bbc486d0"
+-- Iteration 4 --
+string(40) "0a4d55a8d778e5022fab701977c5d840bbc486d0"
+-- Iteration 5 --
+string(40) "0a4d55a8d778e5022fab701977c5d840bbc486d0"
+-- Iteration 6 --
+string(40) "0a4d55a8d778e5022fab701977c5d840bbc486d0"
+-- Iteration 7 --
+string(40) "0a4d55a8d778e5022fab701977c5d840bbc486d0"
+-- Iteration 8 --
+string(40) "0a4d55a8d778e5022fab701977c5d840bbc486d0"
+-- Iteration 9 --
+string(40) "0a4d55a8d778e5022fab701977c5d840bbc486d0"
+-- Iteration 10 --
+
+Warning: sha1() expects parameter 2 to be boolean, array given in %s on line %d
+string(0) ""
+-- Iteration 11 --
+
+Warning: sha1() expects parameter 2 to be boolean, array given in %s on line %d
+string(0) ""
+-- Iteration 12 --
+
+Warning: sha1() expects parameter 2 to be boolean, array given in %s on line %d
+string(0) ""
+-- Iteration 13 --
+
+Warning: sha1() expects parameter 2 to be boolean, array given in %s on line %d
+string(0) ""
+-- Iteration 14 --
+
+Warning: sha1() expects parameter 2 to be boolean, array given in %s on line %d
+string(0) ""
+-- Iteration 15 --
+string(80) "30613464353561386437373865353032326661623730313937376335643834306262633438366430"
+-- Iteration 16 --
+string(80) "30613464353561386437373865353032326661623730313937376335643834306262633438366430"
+-- Iteration 17 --
+string(40) "0a4d55a8d778e5022fab701977c5d840bbc486d0"
+-- Iteration 18 --
+string(40) "0a4d55a8d778e5022fab701977c5d840bbc486d0"
+-- Iteration 19 --
+string(40) "0a4d55a8d778e5022fab701977c5d840bbc486d0"
+-- Iteration 20 --
+string(40) "0a4d55a8d778e5022fab701977c5d840bbc486d0"
+-- Iteration 21 --
+string(80) "30613464353561386437373865353032326661623730313937376335643834306262633438366430"
+-- Iteration 22 --
+string(80) "30613464353561386437373865353032326661623730313937376335643834306262633438366430"
+-- Iteration 23 --
+
+Warning: sha1() expects parameter 2 to be boolean, object given in %s on line %d
+string(0) ""
+-- Iteration 24 --
+string(80) "30613464353561386437373865353032326661623730313937376335643834306262633438366430"
+-- Iteration 25 --
+string(80) "30613464353561386437373865353032326661623730313937376335643834306262633438366430"
+-- Iteration 26 --
+
+Warning: sha1() expects parameter 2 to be boolean, resource given in %s on line %d
+string(0) ""
+===DONE===
diff --git a/ext/standard/tests/strings/similar_text_basic.phpt b/ext/standard/tests/strings/similar_text_basic.phpt
new file mode 100644
index 000000000..cf2044b4c
--- /dev/null
+++ b/ext/standard/tests/strings/similar_text_basic.phpt
@@ -0,0 +1,44 @@
+--TEST--
+similar_text(), basic tests
+--CREDITS--
+Mats Lindh <mats at lindh.no>
+#Testfest php.no
+--INI--
+precision=14
+--FILE--
+<?php
+/* Prototype : proto int similar_text(string str1, string str2 [, float percent])
+* Description: Calculates the similarity between two strings
+* Source code: ext/standard/string.c
+*/
+echo "\n-- Basic calls with just two strings --\n";
+var_dump(similar_text("abcdefgh", "efg"));
+var_dump(similar_text("abcdefgh", "mno"));
+var_dump(similar_text("abcdefghcc", "c"));
+var_dump(similar_text("abcdefghabcdef", "zzzzabcdefggg"));
+
+echo "\n-- Same calls with precentage return variable specified --\n";
+$percent = 0;
+similar_text("abcdefgh", "efg", $percent);
+var_dump($percent);
+similar_text("abcdefgh", "mno", $percent);
+var_dump($percent);
+similar_text("abcdefghcc", "c", $percent);
+var_dump($percent);
+similar_text("abcdefghabcdef", "zzzzabcdefggg", $percent);
+var_dump($percent);
+?>
+===DONE===
+--EXPECTF--
+-- Basic calls with just two strings --
+int(3)
+int(0)
+int(1)
+int(7)
+
+-- Same calls with precentage return variable specified --
+float(54.545454545455)
+float(0)
+float(18.181818181818)
+float(51.851851851852)
+===DONE===
diff --git a/ext/standard/tests/strings/similar_text_error.phpt b/ext/standard/tests/strings/similar_text_error.phpt
new file mode 100644
index 000000000..a6e3a4674
--- /dev/null
+++ b/ext/standard/tests/strings/similar_text_error.phpt
@@ -0,0 +1,29 @@
+--TEST--
+similar_text(), error tests for missing parameters
+--CREDITS--
+Mats Lindh <mats at lindh.no>
+#Testfest php.no
+--FILE--
+<?php
+/* Prototype : proto int similar_text(string str1, string str2 [, float percent])
+* Description: Calculates the similarity between two strings
+* Source code: ext/standard/string.c
+*/
+
+$extra_arg = 10;
+echo "\n-- Testing similar_text() function with more than expected no. of arguments --\n";
+similar_text("abc", "def", $percent, $extra_arg);
+
+echo "\n-- Testing similar_text() function with less than expected no. of arguments --\n";
+similar_text("abc");
+?>
+===DONE===
+--EXPECTF--
+-- Testing similar_text() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for similar_text() in %s on line %d
+
+-- Testing similar_text() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for similar_text() in %s on line %d
+===DONE===
diff --git a/ext/standard/tests/strings/sprintf_variation23.phpt b/ext/standard/tests/strings/sprintf_variation23.phpt
index bf88ba68c..09e5b9fbb 100644
--- a/ext/standard/tests/strings/sprintf_variation23.phpt
+++ b/ext/standard/tests/strings/sprintf_variation23.phpt
@@ -39,40 +39,40 @@ foreach($resource_values as $resource_value) {
// closing the resources
fclose($fp);
-fclose($dfp);
+closedir($dfp);
-echo "Done";
?>
+===DONE===
--EXPECTF--
*** Testing sprintf() : char formats with resource values ***
-- Iteration 1 --
-string(1) ""
+string(1) "%a"
string(1) "c"
-string(1) ""
+string(1) "%a"
string(1) "c"
-string(2) " "
-string(2) " "
-string(2) " "
+string(2) " %a"
+string(2) "%a "
+string(2) " %a"
string(2) "
-"
-string(1) ""
-string(1) ""
+%a"
+string(1) "%a"
+string(1) "%a"
string(11) "a-bA-B@#$&]"
string(1) "c"
-- Iteration 2 --
-string(1) ""
+string(1) "%a"
+string(1) "%a"
+string(1) "%a"
string(1) "c"
-string(1) ""
-string(1) "c"
-string(2) " "
-string(2) " "
-string(2) " "
+string(2) " %a"
+string(2) "%a "
+string(2) " %a"
string(2) "
-"
-string(1) ""
-string(1) ""
+%a"
+string(1) "%a"
+string(1) "%a"
string(11) "a-bA-B@#$&]"
string(1) "c"
-Done \ No newline at end of file
+===DONE===
diff --git a/ext/standard/tests/strings/sprintf_variation36.phpt b/ext/standard/tests/strings/sprintf_variation36.phpt
index b7b16d7d9..d7d6999de 100644
--- a/ext/standard/tests/strings/sprintf_variation36.phpt
+++ b/ext/standard/tests/strings/sprintf_variation36.phpt
@@ -37,38 +37,42 @@ foreach($resource_values as $resource_value) {
$count++;
};
-echo "Done";
+// closing the resources
+fclose($fp);
+closedir($dfp);
+
?>
+===DONE===
--EXPECTF--
*** Testing sprintf() : hexa formats with resource values ***
-- Iteration 1 --
-string(%d) "%d"
-string(%d) "%dx"
-string(%d) "%d"
+string(%d) "%a"
+string(%d) "%ax"
+string(%d) "%a"
string(1) "x"
-string(%d) " %d"
-string(%d) "%d "
-string(%d) " %d"
+string(%d) " %a"
+string(%d) "%a "
+string(%d) " %a"
string(%d) "
-%d"
-string(%d) " %d"
-string(%d) " %d"
+%a"
+string(4) "%a"
+string(30) "%a"
string(10) "0-9A-Fa-f]"
string(1) "x"
-- Iteration 2 --
-string(%d) "%d"
-string(%d) "%dx"
-string(%d) "%d"
+string(%d) "%a"
+string(%d) "%ax"
+string(%d) "%a"
string(1) "x"
-string(%d) " %d"
-string(%d) "%d "
-string(%d) " %d"
+string(%d) " %a"
+string(%d) "%a "
+string(%d) " %a"
string(%d) "
-%d"
-string(%d) " %d"
-string(%d) " %d"
+%a"
+string(4) "%a"
+string(30) "%a"
string(10) "0-9A-Fa-f]"
string(1) "x"
-Done
+===DONE===
diff --git a/ext/standard/tests/strings/sprintf_variation48.phpt b/ext/standard/tests/strings/sprintf_variation48.phpt
index ce7bdf8ae..758b705c0 100644
--- a/ext/standard/tests/strings/sprintf_variation48.phpt
+++ b/ext/standard/tests/strings/sprintf_variation48.phpt
@@ -41,9 +41,8 @@ foreach($resource_values as $resource_value) {
fclose($fp);
closedir($dfp);
-
-echo "Done";
?>
+===DONE===
--EXPECTF--
*** Testing sprintf() : scientific formats with resource values ***
@@ -58,7 +57,7 @@ string(%d) " %f"
string(%d) "
%f"
string(%d) "%f"
-string(%d) "%s%f"
+string(30) "%s%f"
string(%d) "0-1]"
string(1) "e"
@@ -73,7 +72,7 @@ string(%d) " %f"
string(%d) "
%f"
string(%d) "%f"
-string(%d) "%s%f"
+string(30) "%s%f"
string(%d) "0-1]"
string(1) "e"
-Done
+===DONE===
diff --git a/ext/standard/tests/strings/sprintf_variation52.phpt b/ext/standard/tests/strings/sprintf_variation52.phpt
index 9ca598527..6155c9ec5 100644
--- a/ext/standard/tests/strings/sprintf_variation52.phpt
+++ b/ext/standard/tests/strings/sprintf_variation52.phpt
@@ -46,6 +46,8 @@ string(15) "%12345678900.00"
string(1) "%"
-- Testing for precision value more than maximum --
+
+Notice: sprintf(): Requested precision of 988 digits was truncated to PHP maximum of %d digits in %s on line %d
string(52) "12345678900.0000000000000000000000000000000000000000"
-- Testing for invalid width(-15) specifier --
diff --git a/ext/standard/tests/strings/sscanf_basic1.phpt b/ext/standard/tests/strings/sscanf_basic1.phpt
new file mode 100644
index 000000000..dadafbde2
--- /dev/null
+++ b/ext/standard/tests/strings/sscanf_basic1.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test sscanf() function : basic functionality - string format
+--FILE--
+<?php
+/* Prototype : mixed sscanf ( string $str , string $format [, mixed &$... ] )
+ * Description: Parses input from a string according to a format
+ * Source code: ext/standard/string.c
+*/
+
+/*
+ * Testing sscanf() : basic functionality
+*/
+
+echo "*** Testing sscanf() : basic functionality - using string format ***\n";
+
+$str = "Part: Widget Serial Number: 1234789 Stock: 25";
+$format = "Part: %s Serial Number: %s Stock: %s";
+
+echo "\n-- Try sccanf() WITHOUT optional args --\n";
+// extract details using short format
+list($part, $number, $stock) = sscanf($str, $format);
+var_dump($part, $number, $stock);
+
+echo "\n-- Try sccanf() WITH optional args --\n";
+// extract details using long format
+$res = sscanf($str, $format, $part, $number, $stock);
+var_dump($res, $part, $number, $stock);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing sscanf() : basic functionality - using string format ***
+
+-- Try sccanf() WITHOUT optional args --
+string(6) "Widget"
+string(7) "1234789"
+string(2) "25"
+
+-- Try sccanf() WITH optional args --
+int(3)
+string(6) "Widget"
+string(7) "1234789"
+string(2) "25"
+===DONE===
diff --git a/ext/standard/tests/strings/sscanf_basic2.phpt b/ext/standard/tests/strings/sscanf_basic2.phpt
new file mode 100644
index 000000000..693a307c0
--- /dev/null
+++ b/ext/standard/tests/strings/sscanf_basic2.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test sscanf() function : basic functionality - integer format
+--FILE--
+<?php
+/* Prototype : mixed sscanf ( string $str , string $format [, mixed &$... ] )
+ * Description: Parses input from a string according to a format
+ * Source code: ext/standard/string.c
+*/
+
+/*
+ * Testing sscanf() : basic functionality
+*/
+
+echo "*** Testing sscanf() : basic functionality - using integer format ***\n";
+
+$str = "Part: Widget Serial Number: 1234789 Stock: 25";
+$format = "Part: %s Serial Number: %d Stock: %d";
+
+echo "\n-- Try sccanf() WITHOUT optional args --\n";
+// extract details using short format
+list($part, $number, $stock) = sscanf($str, $format);
+var_dump($part, $number, $stock);
+
+echo "\n-- Try sccanf() WITH optional args --\n";
+// extract details using long format
+$res = sscanf($str, $format, $part, $number, $stock);
+var_dump($res, $part, $number, $stock);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing sscanf() : basic functionality - using integer format ***
+
+-- Try sccanf() WITHOUT optional args --
+string(6) "Widget"
+int(1234789)
+int(25)
+
+-- Try sccanf() WITH optional args --
+int(3)
+string(6) "Widget"
+int(1234789)
+int(25)
+===DONE===
diff --git a/ext/standard/tests/strings/sscanf_basic3.phpt b/ext/standard/tests/strings/sscanf_basic3.phpt
new file mode 100644
index 000000000..de910ef4b
--- /dev/null
+++ b/ext/standard/tests/strings/sscanf_basic3.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test sscanf() function : basic functionality - float format
+--FILE--
+<?php
+
+/* Prototype : mixed sscanf ( string $str , string $format [, mixed &$... ] )
+ * Description: Parses input from a string according to a format
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing sscanf() : basic functionality -- using float format ***\n";
+
+$str = "Part: Widget Length: 111.53 Width: 22.345 Depth: 12.4";
+$format = "Part: %s Length: %f Width: %f Depth: %f";
+
+echo "\n-- Try sccanf() WITHOUT optional args --\n";
+// extract details using short format
+list($part, $length, $width, $depth) = sscanf($str, $format);
+var_dump($part, $length, $width, $depth);
+
+echo "\n-- Try sccanf() WITH optional args --\n";
+// extract details using long format
+$res = sscanf($str, $format, $part, $length, $width, $depth);
+var_dump($res, $part, $length, $width, $depth);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing sscanf() : basic functionality -- using float format ***
+
+-- Try sccanf() WITHOUT optional args --
+string(6) "Widget"
+float(111.53)
+float(22.345)
+float(12.4)
+
+-- Try sccanf() WITH optional args --
+int(4)
+string(6) "Widget"
+float(111.53)
+float(22.345)
+float(12.4)
+===DONE===
diff --git a/ext/standard/tests/strings/sscanf_basic4.phpt b/ext/standard/tests/strings/sscanf_basic4.phpt
new file mode 100644
index 000000000..8ce44ff4c
--- /dev/null
+++ b/ext/standard/tests/strings/sscanf_basic4.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test sscanf() function : basic functionality - char format
+--FILE--
+<?php
+
+/* Prototype : mixed sscanf ( string $str , string $format [, mixed &$... ] )
+ * Description: Parses input from a string according to a format
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing sscanf() : basic functionality - using char format ***\n";
+
+$str = "X = A + B - C";
+$format = "%c = %c + %c - %c";
+
+echo "\n-- Try sccanf() WITHOUT optional args --\n";
+// extract details using short format
+list($arg1, $arg2, $arg3, $arg4) = sscanf($str, $format);
+var_dump($arg1, $arg2, $arg3, $arg4);
+
+echo "\n-- Try sccanf() WITH optional args --\n";
+// extract details using long format
+$res = sscanf($str, $format, $arg1, $arg2, $arg3, $arg4);
+var_dump($res, $arg1, $arg2, $arg3, $arg4);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing sscanf() : basic functionality - using char format ***
+
+-- Try sccanf() WITHOUT optional args --
+string(1) "X"
+string(1) "A"
+string(1) "B"
+string(1) "C"
+
+-- Try sccanf() WITH optional args --
+int(4)
+string(1) "X"
+string(1) "A"
+string(1) "B"
+string(1) "C"
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/sscanf_basic5.phpt b/ext/standard/tests/strings/sscanf_basic5.phpt
new file mode 100644
index 000000000..5dbbf4481
--- /dev/null
+++ b/ext/standard/tests/strings/sscanf_basic5.phpt
@@ -0,0 +1,58 @@
+--TEST--
+Test sscanf() function : basic functionality - exponential format
+--FILE--
+<?php
+
+/* Prototype : mixed sscanf ( string $str , string $format [, mixed &$... ] )
+ * Description: Parses input from a string according to a format
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing sscanf() : basic functionality -using exponential format ***\n";
+
+$str = "10.12345 10.12345E3 10.12345e3 -10.12345e4" ;
+$format1 = "%e %e %e %e";
+$format2 = "%E %E %E %E";
+
+echo "\n-- Try sccanf() WITHOUT optional args --\n";
+// extract details using short format
+list($arg1, $arg2, $arg3, $arg4) = sscanf($str, $format1);
+var_dump($arg1, $arg2, $arg3, $arg4);
+list($arg1, $arg2, $arg3, $arg4) = sscanf($str, $format2);
+var_dump($arg1, $arg2, $arg3, $arg4);
+
+echo "\n-- Try sccanf() WITH optional args --\n";
+// extract details using long format
+$res = sscanf($str, $format1, $arg1, $arg2, $arg3, $arg4);
+var_dump($res, $arg1, $arg2, $arg3, $arg4);
+$res = sscanf($str, $format2,$arg1, $arg2, $arg3, $arg4);
+var_dump($res, $arg1, $arg2, $arg3, $arg4);
+
+
+?>
+===DONE===
+--EXPECT--
+*** Testing sscanf() : basic functionality -using exponential format ***
+
+-- Try sccanf() WITHOUT optional args --
+float(10.12345)
+float(10123.45)
+float(10123.45)
+float(-101234.5)
+float(10.12345)
+float(10123.45)
+float(10123.45)
+float(-101234.5)
+
+-- Try sccanf() WITH optional args --
+int(4)
+float(10.12345)
+float(10123.45)
+float(10123.45)
+float(-101234.5)
+int(4)
+float(10.12345)
+float(10123.45)
+float(10123.45)
+float(-101234.5)
+===DONE===
diff --git a/ext/standard/tests/strings/sscanf_basic6.phpt b/ext/standard/tests/strings/sscanf_basic6.phpt
new file mode 100644
index 000000000..4506c4ba9
--- /dev/null
+++ b/ext/standard/tests/strings/sscanf_basic6.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test sscanf() function : basic functionality - unsigned format
+--FILE--
+<?php
+
+/* Prototype : mixed sscanf ( string $str , string $format [, mixed &$... ] )
+ * Description: Parses input from a string according to a format
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing sscanf() : basic functionality - using unsigned format ***\n";
+
+$str = "-11 +11 11 -11.234 +11.234 11.234";
+$format = "%u %u %u %u %u %u";
+
+echo "\n-- Try sccanf() WITHOUT optional args --\n";
+// extract details using short format
+list($arg1, $arg2, $arg3, $arg4, $arg5, $arg6) = sscanf($str, $format);
+var_dump($arg1, $arg2, $arg3, $arg4, $arg5, $arg6);
+
+echo "\n-- Try sccanf() WITH optional args --\n";
+// extract details using long format
+$res = sscanf($str, $format, $arg1, $arg2, $arg3, $arg4, $arg5, $arg6);
+var_dump($res, $arg1, $arg2, $arg3, $arg4, $arg5, $arg6);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing sscanf() : basic functionality - using unsigned format ***
+
+-- Try sccanf() WITHOUT optional args --
+string(10) "4294967285"
+int(11)
+int(11)
+string(10) "4294967285"
+NULL
+NULL
+
+-- Try sccanf() WITH optional args --
+int(4)
+string(10) "4294967285"
+int(11)
+int(11)
+string(10) "4294967285"
+NULL
+NULL
+===DONE===
diff --git a/ext/standard/tests/strings/sscanf_basic7.phpt b/ext/standard/tests/strings/sscanf_basic7.phpt
new file mode 100644
index 000000000..1d54054d4
--- /dev/null
+++ b/ext/standard/tests/strings/sscanf_basic7.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test sscanf() function : basic functionality - octal format
+--FILE--
+<?php
+
+/* Prototype : mixed sscanf ( string $str , string $format [, mixed &$... ] )
+ * Description: Parses input from a string according to a format
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing sscanf() : basic functionality - using octal format ***\n";
+
+$str = "0123 -0123 +0123 0129 -0129 +0129";
+$format = "%o %o %o %o %o %o";
+
+echo "\n-- Try sccanf() WITHOUT optional args --\n";
+// extract details using short format
+list($arg1, $arg2, $arg3, $arg4, $arg5, $arg6) = sscanf($str, $format);
+var_dump($arg1, $arg2, $arg3, $arg4, $arg5, $arg6);
+
+echo "\n-- Try sccanf() WITH optional args --\n";
+// extract details using long format
+$res = sscanf($str, $format, $arg1, $arg2, $arg3, $arg4, $arg5, $arg6);
+var_dump($res, $arg1, $arg2, $arg3, $arg4, $arg5, $arg6);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing sscanf() : basic functionality - using octal format ***
+
+-- Try sccanf() WITHOUT optional args --
+int(83)
+int(-83)
+int(83)
+int(10)
+NULL
+NULL
+
+-- Try sccanf() WITH optional args --
+int(4)
+int(83)
+int(-83)
+int(83)
+int(10)
+NULL
+NULL
+===DONE===
diff --git a/ext/standard/tests/strings/sscanf_basic8.phpt b/ext/standard/tests/strings/sscanf_basic8.phpt
new file mode 100644
index 000000000..4773f026a
--- /dev/null
+++ b/ext/standard/tests/strings/sscanf_basic8.phpt
@@ -0,0 +1,65 @@
+--TEST--
+Test sscanf() function : basic functionality - hexadecimal format
+--FILE--
+<?php
+
+/* Prototype : mixed sscanf ( string $str , string $format [, mixed &$... ] )
+ * Description: Parses input from a string according to a format
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing sscanf() : basic functionality - - using hexadecimal format ***\n";
+
+$str = "129 12F 123B -123B 01ABC 1G";
+$format1 = "%x %x %x %x %x %x";
+$format2 = "%X %X %X %X %X %X";
+
+echo "\n-- Try sccanf() WITHOUT optional args --\n";
+// extract details using short format
+list($arg1, $arg2, $arg3, $arg4, $arg5, $arg6) = sscanf($str, $format1);
+var_dump($arg1, $arg2, $arg3, $arg4, $arg5, $arg6);
+list($arg1, $arg2, $arg3, $arg4, $arg5, $arg6) = sscanf($str, $format2);
+var_dump($arg1, $arg2, $arg3, $arg4, $arg5, $arg6);
+
+echo "\n-- Try sccanf() WITH optional args --\n";
+// extract details using long format
+$res = sscanf($str, $format1, $arg1, $arg2, $arg3, $arg4, $arg5, $arg6);
+var_dump($res, $arg1, $arg2, $arg3, $arg4, $arg5, $arg6);
+$res = sscanf($str, $format2, $arg1, $arg2, $arg3, $arg4, $arg5, $arg6);
+var_dump($res, $arg1, $arg2, $arg3, $arg4, $arg5, $arg6);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing sscanf() : basic functionality - - using hexadecimal format ***
+
+-- Try sccanf() WITHOUT optional args --
+int(297)
+int(303)
+int(4667)
+int(-4667)
+int(6844)
+int(1)
+int(297)
+int(303)
+int(4667)
+int(-4667)
+int(6844)
+int(1)
+
+-- Try sccanf() WITH optional args --
+int(6)
+int(297)
+int(303)
+int(4667)
+int(-4667)
+int(6844)
+int(1)
+int(6)
+int(297)
+int(303)
+int(4667)
+int(-4667)
+int(6844)
+int(1)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/sscanf_error.phpt b/ext/standard/tests/strings/sscanf_error.phpt
new file mode 100644
index 000000000..4bf72c25e
--- /dev/null
+++ b/ext/standard/tests/strings/sscanf_error.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test sscanf() function : error conditions
+--FILE--
+<?php
+
+/* Prototype : mixed sscanf ( string $str , string $format [, mixed &$... ] )
+ * Description: Parses input from a string according to a format
+ * Source code: ext/standard/string.c
+*/
+echo "*** Testing sscanf() : error conditions ***\n";
+
+$str = "Hello World";
+$format = "%s %s";
+
+echo "\n-- Testing sscanf() function with no arguments --\n";
+var_dump( sscanf() );
+
+echo "\n-- Testing sscanf() function with one argument --\n";
+var_dump( sscanf($str) );
+
+echo "\n-- Testing sscanf() function with more than expected no. of arguments --\n";
+
+var_dump( sscanf($str, $format, $str1, $str2, $extra_str) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing sscanf() : error conditions ***
+
+-- Testing sscanf() function with no arguments --
+
+Warning: Wrong parameter count for sscanf() in %s on line %d
+NULL
+
+-- Testing sscanf() function with one argument --
+
+Warning: Wrong parameter count for sscanf() in %s on line %d
+NULL
+
+-- Testing sscanf() function with more than expected no. of arguments --
+
+Warning: sscanf(): Variable is not assigned by any conversion specifiers in %s on line %d
+int(-1)
+===DONE===
diff --git a/ext/standard/tests/strings/sscanf_variation1.phpt b/ext/standard/tests/strings/sscanf_variation1.phpt
new file mode 100644
index 000000000..3739c8820
--- /dev/null
+++ b/ext/standard/tests/strings/sscanf_variation1.phpt
@@ -0,0 +1,179 @@
+--TEST--
+Test sscanf() function : usage variations - unexpected inputs for '$str' argument
+--FILE--
+<?php
+/* Prototype : mixed sscanf ( string $str , string $format [, mixed &$... ] )
+ * Description: Parses input from a string according to a format
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing sscanf() function: with unexpected inputs for 'str' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $input
+$inputs = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ -2,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*6*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*9*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*16*/ NULL,
+ null,
+
+ // objects
+/*18*/ new sample(),
+
+ // resource
+/*19*/ $file_handle,
+
+ // undefined variable
+/*20*/ @$undefined_var,
+
+ // unset variable
+/*21*/ @$unset_var
+);
+
+//defining '$pad_length' argument
+$format = "%s";
+
+// loop through with each element of the $inputs array to test sscanf() function
+$count = 1;
+foreach($inputs as $input) {
+ echo "-- Iteration $count --\n";
+ var_dump( sscanf($input, $format) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing sscanf() function: with unexpected inputs for 'str' argument ***
+-- Iteration 1 --
+array(1) {
+ [0]=>
+ string(1) "0"
+}
+-- Iteration 2 --
+array(1) {
+ [0]=>
+ string(1) "1"
+}
+-- Iteration 3 --
+array(1) {
+ [0]=>
+ string(2) "-2"
+}
+-- Iteration 4 --
+array(1) {
+ [0]=>
+ string(10) "2147483647"
+}
+-- Iteration 5 --
+array(1) {
+ [0]=>
+ string(11) "-2147483648"
+}
+-- Iteration 6 --
+array(1) {
+ [0]=>
+ string(4) "10.5"
+}
+-- Iteration 7 --
+array(1) {
+ [0]=>
+ string(5) "-20.5"
+}
+-- Iteration 8 --
+array(1) {
+ [0]=>
+ string(12) "101234567000"
+}
+-- Iteration 9 --
+
+Notice: Array to string conversion in %s on line %d
+array(1) {
+ [0]=>
+ string(5) "Array"
+}
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+array(1) {
+ [0]=>
+ string(5) "Array"
+}
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+array(1) {
+ [0]=>
+ string(5) "Array"
+}
+-- Iteration 12 --
+array(1) {
+ [0]=>
+ string(1) "1"
+}
+-- Iteration 13 --
+NULL
+-- Iteration 14 --
+array(1) {
+ [0]=>
+ string(1) "1"
+}
+-- Iteration 15 --
+NULL
+-- Iteration 16 --
+NULL
+-- Iteration 17 --
+NULL
+-- Iteration 18 --
+array(1) {
+ [0]=>
+ string(6) "sample"
+}
+-- Iteration 19 --
+array(1) {
+ [0]=>
+ string(8) "Resource"
+}
+-- Iteration 20 --
+NULL
+-- Iteration 21 --
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/sscanf_variation2.phpt b/ext/standard/tests/strings/sscanf_variation2.phpt
new file mode 100644
index 000000000..0fd9296b9
--- /dev/null
+++ b/ext/standard/tests/strings/sscanf_variation2.phpt
@@ -0,0 +1,155 @@
+--TEST--
+Test sscanf() function : usage variations - unexpected inputs for '$format' argument
+--FILE--
+<?php
+/* Prototype : mixed sscanf ( string $str , string $format [, mixed &$... ] )
+ * Description: Parses input from a string according to a format
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing sscanf() function: with unexpected inputs for 'format' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $input
+$inputs = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ -2,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*6*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*9*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*16*/ NULL,
+ null,
+
+ // objects
+/*18*/ new sample(),
+
+ // resource
+/*19*/ $file_handle,
+
+ // undefined variable
+/*20*/ @$undefined_var,
+
+ // unset variable
+/*21*/ @$unset_var
+);
+
+//defining '$pad_length' argument
+$str = "Hello World";
+
+// loop through with each element of the $inputs array to test sscanf() function
+$count = 1;
+foreach($inputs as $input) {
+ echo "-- Iteration $count --\n";
+ var_dump( sscanf($str, $input) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing sscanf() function: with unexpected inputs for 'format' argument ***
+-- Iteration 1 --
+array(0) {
+}
+-- Iteration 2 --
+array(0) {
+}
+-- Iteration 3 --
+array(0) {
+}
+-- Iteration 4 --
+array(0) {
+}
+-- Iteration 5 --
+array(0) {
+}
+-- Iteration 6 --
+array(0) {
+}
+-- Iteration 7 --
+array(0) {
+}
+-- Iteration 8 --
+array(0) {
+}
+-- Iteration 9 --
+
+Notice: Array to string conversion in %s on line %d
+array(0) {
+}
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+array(0) {
+}
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+array(0) {
+}
+-- Iteration 12 --
+array(0) {
+}
+-- Iteration 13 --
+array(0) {
+}
+-- Iteration 14 --
+array(0) {
+}
+-- Iteration 15 --
+array(0) {
+}
+-- Iteration 16 --
+array(0) {
+}
+-- Iteration 17 --
+array(0) {
+}
+-- Iteration 18 --
+array(0) {
+}
+-- Iteration 19 --
+array(0) {
+}
+-- Iteration 20 --
+array(0) {
+}
+-- Iteration 21 --
+array(0) {
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/str_pad_variation1.phpt b/ext/standard/tests/strings/str_pad_variation1.phpt
new file mode 100644
index 000000000..4320661e4
--- /dev/null
+++ b/ext/standard/tests/strings/str_pad_variation1.phpt
@@ -0,0 +1,138 @@
+--TEST--
+Test str_pad() function : usage variations - unexpected inputs for '$input' argument
+--FILE--
+<?php
+/* Prototype : string str_pad ( string $input , int $pad_length [, string $pad_string [, int $pad_type ]] )
+ * Description: Pad a string to a certain length with another string
+ * Source code: ext/standard/string.c
+*/
+
+/* Test str_pad() function: with unexpected inputs for '$input'
+ * and expected type for '$pad_length'
+*/
+
+echo "*** Testing str_pad() function: with unexpected inputs for 'input' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $input
+$inputs = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ -2,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*6*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*9*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null vlaues
+/*16*/ NULL,
+ null,
+
+ // objects
+/*18*/ new sample(),
+
+ // resource
+/*19*/ $file_handle,
+
+ // undefined variable
+/*20*/ @$undefined_var,
+
+ // unset variable
+/*21*/ @$unset_var
+);
+
+//defining '$pad_length' argument
+$pad_length = "20";
+
+// loop through with each element of the $inputs array to test str_pad() function
+$count = 1;
+foreach($inputs as $input) {
+ echo "-- Iteration $count --\n";
+ var_dump( str_pad($input, $pad_length) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing str_pad() function: with unexpected inputs for 'input' argument ***
+-- Iteration 1 --
+string(20) "0 "
+-- Iteration 2 --
+string(20) "1 "
+-- Iteration 3 --
+string(20) "-2 "
+-- Iteration 4 --
+string(20) "2147483647 "
+-- Iteration 5 --
+string(20) "-2147483648 "
+-- Iteration 6 --
+string(20) "10.5 "
+-- Iteration 7 --
+string(20) "-20.5 "
+-- Iteration 8 --
+string(20) "101234567000 "
+-- Iteration 9 --
+
+Notice: Array to string conversion in %s on line %d
+string(20) "Array "
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+string(20) "Array "
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+string(20) "Array "
+-- Iteration 12 --
+string(20) "1 "
+-- Iteration 13 --
+string(20) " "
+-- Iteration 14 --
+string(20) "1 "
+-- Iteration 15 --
+string(20) " "
+-- Iteration 16 --
+string(20) " "
+-- Iteration 17 --
+string(20) " "
+-- Iteration 18 --
+string(20) "sample object "
+-- Iteration 19 --
+string(%d) "Resource id #%d%S"
+-- Iteration 20 --
+string(20) " "
+-- Iteration 21 --
+string(20) " "
+===DONE===
diff --git a/ext/standard/tests/strings/str_pad_variation2.phpt b/ext/standard/tests/strings/str_pad_variation2.phpt
new file mode 100644
index 000000000..d7d34954e
--- /dev/null
+++ b/ext/standard/tests/strings/str_pad_variation2.phpt
@@ -0,0 +1,131 @@
+--TEST--
+Test str_pad() function : usage variations - unexpected inputs for '$pad_length' argument
+--FILE--
+<?php
+/* Prototype : string str_pad ( string $input , int $pad_length [, string $pad_string [, int $pad_type ]] )
+ * Description: Pad a string to a certain length with another string
+ * Source code: ext/standard/string.c
+*/
+
+/* Test str_pad() function: with unexpected inputs for '$pad_length'
+ * and expected type for '$input'
+*/
+
+echo "*** Testing str_pad() function: with unexpected inputs for 'pad_length' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $input
+$pad_lengths = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ -2,
+ 255,
+
+ // float values
+/*5*/ 10.5,
+ -20.5,
+ 10.12345e2,
+
+ // array values
+/*8*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*11*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null vlaues
+/*15*/ NULL,
+ null,
+
+ // objects
+/*17*/ new sample(),
+
+ // resource
+/*18*/ $file_handle,
+
+ // undefined variable
+/*19*/ @$undefined_var,
+
+ // unset variable
+/*20*/ @$unset_var
+);
+
+//defining '$input' argument
+$input = "Test string";
+
+// loop through with each element of the $pad_lengths array to test str_pad() function
+$count = 1;
+foreach($pad_lengths as $pad_length) {
+ echo "-- Iteration $count --\n";
+ var_dump( str_pad($input, $pad_length) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing str_pad() function: with unexpected inputs for 'pad_length' argument ***
+-- Iteration 1 --
+string(11) "Test string"
+-- Iteration 2 --
+string(11) "Test string"
+-- Iteration 3 --
+string(11) "Test string"
+-- Iteration 4 --
+string(255) "Test string "
+-- Iteration 5 --
+string(11) "Test string"
+-- Iteration 6 --
+string(11) "Test string"
+-- Iteration 7 --
+string(1012) "Test string "
+-- Iteration 8 --
+string(11) "Test string"
+-- Iteration 9 --
+string(11) "Test string"
+-- Iteration 10 --
+string(11) "Test string"
+-- Iteration 11 --
+string(11) "Test string"
+-- Iteration 12 --
+string(11) "Test string"
+-- Iteration 13 --
+string(11) "Test string"
+-- Iteration 14 --
+string(11) "Test string"
+-- Iteration 15 --
+string(11) "Test string"
+-- Iteration 16 --
+string(11) "Test string"
+-- Iteration 17 --
+
+Notice: Object of class sample could not be converted to int in %s on line %d
+string(11) "Test string"
+-- Iteration 18 --
+string(%d) "Test string%S"
+-- Iteration 19 --
+string(11) "Test string"
+-- Iteration 20 --
+string(11) "Test string"
+===DONE===
diff --git a/ext/standard/tests/strings/str_pad_variation3.phpt b/ext/standard/tests/strings/str_pad_variation3.phpt
new file mode 100644
index 000000000..9cf3d1ce6
--- /dev/null
+++ b/ext/standard/tests/strings/str_pad_variation3.phpt
@@ -0,0 +1,151 @@
+--TEST--
+Test str_pad() function : usage variations - unexpected inputs for '$pad_string' argument
+--FILE--
+<?php
+/* Prototype : string str_pad ( string $input , int $pad_length [, string $pad_string [, int $pad_type ]] )
+ * Description: Pad a string to a certain length with another string
+ * Source code: ext/standard/string.c
+*/
+
+/* Test str_pad() function: with unexpected inputs for '$pad_string'
+ * and expected type for '$input' and '$pad_length'
+*/
+
+echo "*** Testing str_pad() function: with unexpected inputs for 'pad_string' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $input
+$pad_strings = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ -2,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*6*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*9*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null vlaues
+/*16*/ NULL,
+ null,
+
+ // objects
+/*18*/ new sample(),
+
+ // resource
+/*19*/ $file_handle,
+
+ // undefined variable
+/*20*/ @$undefined_var,
+
+ // unset variable
+/*21*/ @$unset_var
+);
+
+//defining '$input' argument
+$input = "Test string";
+$pad_length = 20;
+
+// loop through with each element of the $pad_strings array to test str_pad() function
+$count = 1;
+foreach($pad_strings as $pad_string) {
+ echo "-- Iteration $count --\n";
+ var_dump( str_pad($input, $pad_length, $pad_string) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing str_pad() function: with unexpected inputs for 'pad_string' argument ***
+-- Iteration 1 --
+string(20) "Test string000000000"
+-- Iteration 2 --
+string(20) "Test string111111111"
+-- Iteration 3 --
+string(20) "Test string-2-2-2-2-"
+-- Iteration 4 --
+string(20) "Test string214748364"
+-- Iteration 5 --
+string(20) "Test string-21474836"
+-- Iteration 6 --
+string(20) "Test string10.510.51"
+-- Iteration 7 --
+string(20) "Test string-20.5-20."
+-- Iteration 8 --
+string(20) "Test string101234567"
+-- Iteration 9 --
+
+Notice: Array to string conversion in %s on line %d
+string(20) "Test stringArrayArra"
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+string(20) "Test stringArrayArra"
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+string(20) "Test stringArrayArra"
+-- Iteration 12 --
+string(20) "Test string111111111"
+-- Iteration 13 --
+
+Warning: str_pad(): Padding string cannot be empty in %s on line %d
+NULL
+-- Iteration 14 --
+string(20) "Test string111111111"
+-- Iteration 15 --
+
+Warning: str_pad(): Padding string cannot be empty in %s on line %d
+NULL
+-- Iteration 16 --
+
+Warning: str_pad(): Padding string cannot be empty in %s on line %d
+NULL
+-- Iteration 17 --
+
+Warning: str_pad(): Padding string cannot be empty in %s on line %d
+NULL
+-- Iteration 18 --
+string(20) "Test stringsample ob"
+-- Iteration 19 --
+string(20) "Test stringResource "
+-- Iteration 20 --
+
+Warning: str_pad(): Padding string cannot be empty in %s on line %d
+NULL
+-- Iteration 21 --
+
+Warning: str_pad(): Padding string cannot be empty in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/strings/str_pad_variation4.phpt b/ext/standard/tests/strings/str_pad_variation4.phpt
new file mode 100644
index 000000000..949c615b2
--- /dev/null
+++ b/ext/standard/tests/strings/str_pad_variation4.phpt
@@ -0,0 +1,158 @@
+--TEST--
+Test str_pad() function : usage variations - unexpected inputs for '$pad_type' argument
+--FILE--
+<?php
+/* Prototype : string str_pad ( string $input , int $pad_length [, string $pad_string [, int $pad_type ]] )
+ * Description: Pad a string to a certain length with another string
+ * Source code: ext/standard/string.c
+*/
+
+/* Test str_pad() function: with unexpected inputs for '$pad_type'
+ * and expected type for '$input', '$pad_length' and '$pad_string'
+*/
+
+echo "*** Testing str_pad() function: with unexpected inputs for 'pad_type' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+// array with different values for $input
+$pad_types = array (
+
+ // integer values
+/*1*/ 0, // == STR_PAD_LEFT
+ 1, // == STR_PAD_RIGHT
+ 2, // == STR_PAD_BOTH
+ -2,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*7*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // string data
+/*10*/ "abc",
+ "STR_PAD_LEFT",
+ "2",
+ "0x2",
+ "02",
+
+ // array values
+/*15*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*18*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null vlaues
+/*22*/ NULL,
+ null,
+
+ // objects
+/*24*/ new sample(),
+
+ // undefined variable
+/*25*/ @$undefined_var,
+
+ // unset variable
+/*26*/ @$unset_var
+);
+
+//defining '$input' argument
+$input = "Test string";
+$pad_length = 20;
+$pad_string = "*";
+
+// loop through with each element of the $pad_types array to test str_pad() function
+$count = 1;
+foreach($pad_types as $pad_type) {
+ echo "-- Iteration $count --\n";
+ var_dump( str_pad($input, $pad_length, $pad_string, $pad_type) );
+ $count ++;
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing str_pad() function: with unexpected inputs for 'pad_type' argument ***
+-- Iteration 1 --
+string(20) "*********Test string"
+-- Iteration 2 --
+string(20) "Test string*********"
+-- Iteration 3 --
+string(20) "****Test string*****"
+-- Iteration 4 --
+
+Warning: str_pad(): Padding type has to be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH in %s on line %d
+NULL
+-- Iteration 5 --
+
+Warning: str_pad(): Padding type has to be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH in %s on line %d
+NULL
+-- Iteration 6 --
+
+Warning: str_pad(): Padding type has to be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH in %s on line %d
+NULL
+-- Iteration 7 --
+
+Warning: str_pad(): Padding type has to be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH in %s on line %d
+NULL
+-- Iteration 8 --
+
+Warning: str_pad(): Padding type has to be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH in %s on line %d
+NULL
+-- Iteration 9 --
+
+Warning: str_pad(): Padding type has to be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH in %s on line %d
+NULL
+-- Iteration 10 --
+string(20) "*********Test string"
+-- Iteration 11 --
+string(20) "*********Test string"
+-- Iteration 12 --
+string(20) "****Test string*****"
+-- Iteration 13 --
+string(20) "*********Test string"
+-- Iteration 14 --
+string(20) "****Test string*****"
+-- Iteration 15 --
+string(20) "*********Test string"
+-- Iteration 16 --
+string(20) "Test string*********"
+-- Iteration 17 --
+string(20) "Test string*********"
+-- Iteration 18 --
+string(20) "Test string*********"
+-- Iteration 19 --
+string(20) "*********Test string"
+-- Iteration 20 --
+string(20) "Test string*********"
+-- Iteration 21 --
+string(20) "*********Test string"
+-- Iteration 22 --
+string(20) "*********Test string"
+-- Iteration 23 --
+string(20) "*********Test string"
+-- Iteration 24 --
+
+Notice: Object of class sample could not be converted to int in %s on line %d
+string(20) "Test string*********"
+-- Iteration 25 --
+string(20) "*********Test string"
+-- Iteration 26 --
+string(20) "*********Test string"
+===DONE===
diff --git a/ext/standard/tests/strings/str_pad_variation5.phpt b/ext/standard/tests/strings/str_pad_variation5.phpt
new file mode 100644
index 000000000..4b300c471
--- /dev/null
+++ b/ext/standard/tests/strings/str_pad_variation5.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Test str_pad() function : usage variations - unexpected large value for '$pad_length' argument
+--INI--
+memory_limit=128M
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string str_pad ( string $input , int $pad_length [, string $pad_string [, int $pad_type ]] )
+ * Description: Pad a string to a certain length with another string
+ * Source code: ext/standard/string.c
+*/
+
+/* Test str_pad() function: with unexpected inputs for '$pad_length'
+ * and expected type for '$input'
+*/
+
+echo "*** Testing str_pad() function: with large value for for 'pad_length' argument ***\n";
+
+//defining '$input' argument
+$input = "Test string";
+$pad_length = PHP_INT_MAX;
+var_dump( str_pad($input, $pad_length) );
+
+?>
+--EXPECTF--
+*** Testing str_pad() function: with large value for for 'pad_length' argument ***
+
+Fatal error: Allowed memory size of 134217728 bytes exhausted%s(tried to allocate 2147483648 bytes) in %s on line %d
diff --git a/ext/standard/tests/strings/str_shuffle_basic.phpt b/ext/standard/tests/strings/str_shuffle_basic.phpt
new file mode 100644
index 000000000..b60a35f56
--- /dev/null
+++ b/ext/standard/tests/strings/str_shuffle_basic.phpt
@@ -0,0 +1,59 @@
+--TEST--
+Test str_shuffle() function : basic functionality
+--FILE--
+<?php
+/* Prototype : string str_shuffle ( string $str )
+ * Description: Randomly shuffles a string
+ * Source code: ext/standard/string.c
+*/
+
+/*
+ * Testing str_shuffle() : basic functionality
+*/
+
+echo "*** Testing str_shuffle() : basic functionality ***\n";
+
+// Initialize all required variables
+$str = 'This testcase tests the str_shuffle() function.';
+var_dump(str_shuffle($str));
+
+
+// For a given i/p string ensure that all combinations are
+// generated given a reasonable sample of calls
+$a = array();
+$trys = 1000;
+$ip = 'abcd';
+$len_ip = strlen($ip);
+
+for ($i = 0; $i < $trys; $i++) {
+ $op = str_shuffle($ip);
+
+ if (!is_string($op) || strlen($op) != $len_ip) {
+ echo "TEST FAILED\n";
+ }
+
+ // Combination already hit ?
+ if (empty($a[$op])) {
+ // No first time init
+ $a[$op] = 0;
+ }
+
+ // Increment count for this combination
+ $a[$op]++;
+}
+
+$combinations = count($a);
+
+if ($combinations != 24) {
+ echo "TEST FAILED.. Only $combinations out of a possible 24 combinations used\n";
+} else {
+ echo "TEST PASSED\n";
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing str_shuffle() : basic functionality ***
+string(47) "%s"
+TEST PASSED
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/str_shuffle_error.phpt b/ext/standard/tests/strings/str_shuffle_error.phpt
new file mode 100644
index 000000000..f2feef9b5
--- /dev/null
+++ b/ext/standard/tests/strings/str_shuffle_error.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test str_shuffle() function : error conditions
+--FILE--
+<?php
+
+/* Prototype : string str_shuffle ( string $str )
+ * Description: Randomly shuffles a string
+ * Source code: ext/standard/string.c
+*/
+echo "*** Testing str_shuffle() : error conditions ***\n";
+
+echo "\n-- Testing str_shuffle() function with no arguments --\n";
+var_dump( str_shuffle() );
+
+echo "\n-- Testing str_shuffle() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( str_shuffle("Hello World", $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing str_shuffle() : error conditions ***
+
+-- Testing str_shuffle() function with no arguments --
+
+Warning: Wrong parameter count for str_shuffle() in %s on line %d
+NULL
+
+-- Testing str_shuffle() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for str_shuffle() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/strings/str_shuffle_variation1.phpt b/ext/standard/tests/strings/str_shuffle_variation1.phpt
new file mode 100644
index 000000000..a62eea010
--- /dev/null
+++ b/ext/standard/tests/strings/str_shuffle_variation1.phpt
@@ -0,0 +1,133 @@
+--TEST--
+Test str_shuffle() function : usage variations - test values for $haystack argument
+--FILE--
+<?php
+
+/* Prototype : string str_shuffle ( string $str )
+ * Description: Randomly shuffles a string
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing str_shuffle() function: with unexpected inputs for 'string' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $input
+$inputs = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ -2,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*6*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*9*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null vlaues
+/*16*/ NULL,
+ null,
+
+ // objects
+/*18*/ new sample(),
+
+ // resource
+/*19*/ $file_handle,
+
+ // undefined variable
+/*20*/ @$undefined_var,
+
+ // unset variable
+/*21*/ @$unset_var
+);
+
+
+// loop through with each element of the $inputs array to test str_shuffle() function
+$count = 1;
+foreach($inputs as $input) {
+ echo "-- Iteration $count --\n";
+ var_dump( str_shuffle($input) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing str_shuffle() function: with unexpected inputs for 'string' argument ***
+-- Iteration 1 --
+string(1) "0"
+-- Iteration 2 --
+string(1) "1"
+-- Iteration 3 --
+string(2) "%s"
+-- Iteration 4 --
+string(10) "%s"
+-- Iteration 5 --
+string(11) "%s"
+-- Iteration 6 --
+string(4) "%s"
+-- Iteration 7 --
+string(5) "%s"
+-- Iteration 8 --
+string(12) "%s"
+-- Iteration 9 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "%s"
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "%s"
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "%s"
+-- Iteration 12 --
+string(1) "1"
+-- Iteration 13 --
+string(0) ""
+-- Iteration 14 --
+string(1) "1"
+-- Iteration 15 --
+string(0) ""
+-- Iteration 16 --
+string(0) ""
+-- Iteration 17 --
+string(0) ""
+-- Iteration 18 --
+string(13) "%s"
+-- Iteration 19 --
+string(%d) "%s"
+-- Iteration 20 --
+string(0) ""
+-- Iteration 21 --
+string(0) ""
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/strip_tags_variation1.phpt b/ext/standard/tests/strings/strip_tags_variation1.phpt
index b312fb24e..ba6581249 100644
--- a/ext/standard/tests/strings/strip_tags_variation1.phpt
+++ b/ext/standard/tests/strings/strip_tags_variation1.phpt
@@ -32,51 +32,51 @@ class classA{
//array of values to iterate over
$values = array(
- // int data
- 0,
- 1,
- 12345,
- -2345,
-
- // float data
- 10.5,
- -10.5,
- 10.5e10,
- 10.6E-10,
- .5,
-
- // array data
- array(),
- array(0),
- array(1),
- array(1, 2),
- array('color' => 'red', 'item' => 'pen'),
-
- // null data
- NULL,
- null,
-
- // boolean data
- true,
- false,
- TRUE,
- FALSE,
-
- // empty data
- "",
- '',
-
- // object data
- new classA(),
-
- // undefined data
- @$undefined_var,
-
- // unset data
- @$unset_var,
-
- // resource variable
- $fp
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+/*10*/ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+/*15*/ NULL,
+ null,
+
+ // boolean data
+/*17*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*21*/ "",
+ '',
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
);
@@ -88,8 +88,8 @@ foreach($values as $value) {
$iterator++;
};
-echo "Done";
?>
+===DONE===
--EXPECTF--
*** Testing strip_tags() : usage variations ***
-- Iteration 1 --
@@ -105,9 +105,9 @@ string(4) "10.5"
-- Iteration 6 --
string(5) "-10.5"
-- Iteration 7 --
-string(12) "105000000000"
+string(12) "101234567000"
-- Iteration 8 --
-string(7) "1.06E-9"
+string(13) "1.07654321E-9"
-- Iteration 9 --
string(3) "0.5"
-- Iteration 10 --
@@ -154,4 +154,4 @@ string(0) ""
string(0) ""
-- Iteration 26 --
string(%d) "Resource id #%d"
-Done
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/strip_tags_variation11.phpt b/ext/standard/tests/strings/strip_tags_variation11.phpt
new file mode 100644
index 000000000..3b47b5c6b
--- /dev/null
+++ b/ext/standard/tests/strings/strip_tags_variation11.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Test strip_tags() function : obscure values within attributes
+--INI--
+short_open_tag = on
+--FILE--
+<?php
+
+echo "*** Testing strip_tags() : obscure functionality ***\n";
+
+// array of arguments
+$string_array = array (
+ 'hello <img title="<"> world',
+ 'hello <img title=">"> world',
+ 'hello <img title=">_<"> world',
+ "hello <img title='>_<'> world"
+);
+
+
+// Calling strip_tags() with default arguments
+// loop through the $string_array to test strip_tags on various inputs
+$iteration = 1;
+foreach($string_array as $string)
+{
+ echo "-- Iteration $iteration --\n";
+ var_dump( strip_tags($string) );
+ $iteration++;
+}
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing strip_tags() : obscure functionality ***
+-- Iteration 1 --
+string(12) "hello world"
+-- Iteration 2 --
+string(12) "hello world"
+-- Iteration 3 --
+string(12) "hello world"
+-- Iteration 4 --
+string(12) "hello world"
+Done
diff --git a/ext/standard/tests/strings/strip_tags_variation3.phpt b/ext/standard/tests/strings/strip_tags_variation3.phpt
index 1e1ed9efb..216aaac01 100644
--- a/ext/standard/tests/strings/strip_tags_variation3.phpt
+++ b/ext/standard/tests/strings/strip_tags_variation3.phpt
@@ -32,51 +32,51 @@ class classA{
//array of values to iterate over
$values = array(
- // int data
- 0,
- 1,
- 12345,
- -2345,
-
- // float data
- 10.5,
- -10.5,
- 10.5e10,
- 10.6E-10,
- .5,
-
- // array data
- array(),
- array(0),
- array(1),
- array(1, 2),
- array('color' => 'red', 'item' => 'pen'),
-
- // null data
- NULL,
- null,
-
- // boolean data
- true,
- false,
- TRUE,
- FALSE,
-
- // empty data
- "",
- '',
-
- // object data
- new classA(),
-
- // undefined data
- @$undefined_var,
-
- // unset data
- @$unset_var,
-
- // resource variable
- $fp
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+/*10*/ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+/*15*/ NULL,
+ null,
+
+ // boolean data
+/*17*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*21*/ "",
+ '',
+
+ // object data
+/*23*/ new classA(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource variable
+/*26*/ $fp
);
@@ -88,8 +88,8 @@ foreach($values as $value) {
$iterator++;
};
-echo "Done";
?>
+===DONE===
--EXPECTF--
*** Testing strip_tags() : usage variations ***
-- Iteration 1 --
@@ -105,9 +105,9 @@ string(4) "10.5"
-- Iteration 6 --
string(5) "-10.5"
-- Iteration 7 --
-string(12) "105000000000"
+string(12) "101234567000"
-- Iteration 8 --
-string(7) "1.06E-9"
+string(13) "1.07654321E-9"
-- Iteration 9 --
string(3) "0.5"
-- Iteration 10 --
@@ -164,4 +164,4 @@ string(0) ""
string(0) ""
-- Iteration 26 --
string(%d) "Resource id #%d"
-Done
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/stripcslashes_basic.phpt b/ext/standard/tests/strings/stripcslashes_basic.phpt
new file mode 100644
index 000000000..b292ceede
--- /dev/null
+++ b/ext/standard/tests/strings/stripcslashes_basic.phpt
@@ -0,0 +1,27 @@
+--TEST--
+Test stripcslashes() function : basic functionality
+--FILE--
+<?php
+
+/* Prototype : string stripcslashes ( string $str )
+ * Description: Returns a string with backslashes stripped off. Recognizes C-like \n, \r ...,
+ * octal and hexadecimal representation.
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing stripcslashes() : basic functionality ***\n";
+var_dump(stripcslashes('\H\e\l\l\o \W\or\l\d'));
+var_dump(stripcslashes('Hello World\\r\\n'));
+var_dump(stripcslashes('\x48\x65\x6c\x6c\x6f \x57\x6f\x72\x6c\x64'));
+var_dump(stripcslashes('\110\145\154\154\157 \127\157\162\154\144'));
+
+?>
+===DONE===
+--EXPECT--
+*** Testing stripcslashes() : basic functionality ***
+string(11) "Hello World"
+string(13) "Hello World
+"
+string(11) "Hello World"
+string(11) "Hello World"
+===DONE===
diff --git a/ext/standard/tests/strings/stripcslashes_error.phpt b/ext/standard/tests/strings/stripcslashes_error.phpt
new file mode 100644
index 000000000..35dc82a67
--- /dev/null
+++ b/ext/standard/tests/strings/stripcslashes_error.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test stripcslashes() function : error conditions
+--FILE--
+<?php
+
+/* Prototype : string stripcslashes ( string $str )
+ * Description: Returns a string with backslashes stripped off. Recognizes C-like \n, \r ...,
+ * octal and hexadecimal representation.
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing stripcslashes() : unexpected number of arguments ***";
+
+
+echo "\n-- Testing stripcslashes() function with no arguments --\n";
+var_dump( stripcslashes() );
+
+echo "\n-- Testing stripcslashes() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( stripcslashes("abc def", $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing stripcslashes() : unexpected number of arguments ***
+-- Testing stripcslashes() function with no arguments --
+
+Warning: Wrong parameter count for stripcslashes() in %s on line %d
+NULL
+
+-- Testing stripcslashes() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for stripcslashes() in %s on line %d
+NULL
+===DONE===
+
diff --git a/ext/standard/tests/strings/stripcslashes_variation1.phpt b/ext/standard/tests/strings/stripcslashes_variation1.phpt
new file mode 100644
index 000000000..5251cab8d
--- /dev/null
+++ b/ext/standard/tests/strings/stripcslashes_variation1.phpt
@@ -0,0 +1,172 @@
+--TEST--
+Test stripcslashes() function : usage variations - non-string type argument
+--INI--
+--FILE--
+<?php
+/* Prototype : string stripcslashes ( string $str )
+ * Description: Returns a string with backslashes stripped off. Recognizes C-like \n, \r ...,
+ * octal and hexadecimal representation.
+ * Source code: ext/standard/string.c
+*/
+
+/*
+ * Test stripcslashes() with non-string type argument such as int, float, etc
+*/
+
+echo "*** Testing stripcslashes() : with non-string type argument ***\n";
+// initialize all required variables
+
+// get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+// declaring a class
+class sample {
+ public function __toString() {
+ return "obj'ct";
+ }
+}
+
+// Defining resource
+$file_handle = fopen(__FILE__, 'r');
+
+// array with different values
+$values = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float values
+/*5*/ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array values
+/*10*/ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // boolean values
+/*15*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty string
+/*19*/ "",
+ '',
+
+ // undefined variable
+/*21*/ $undefined_var,
+
+ // unset variable
+/*22*/ $unset_var,
+
+ // objects
+/*23*/ new sample(),
+
+ // resource
+/*24*/ $file_handle,
+
+ // null values
+/*25*/ NULL,
+ null
+);
+
+
+// loop through each element of the array and check the working of stripcslashes()
+// when $str arugment is supplied with different values
+echo "\n--- Testing stripcslashes() by supplying different values for 'str' argument ---\n";
+$counter = 1;
+for($index = 0; $index < count($values); $index ++) {
+ echo "-- Iteration $counter --\n";
+ $str = $values [$index];
+
+ var_dump( stripcslashes($str) );
+
+ $counter ++;
+}
+
+// closing the file
+fclose($file_handle);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing stripcslashes() : with non-string type argument ***
+
+Notice: Undefined variable: undefined_var in %s on line %d
+
+Notice: Undefined variable: unset_var in %s on line %d
+
+--- Testing stripcslashes() by supplying different values for 'str' argument ---
+-- Iteration 1 --
+string(1) "0"
+-- Iteration 2 --
+string(1) "1"
+-- Iteration 3 --
+string(5) "12345"
+-- Iteration 4 --
+string(5) "-2345"
+-- Iteration 5 --
+string(4) "10.5"
+-- Iteration 6 --
+string(5) "-10.5"
+-- Iteration 7 --
+string(12) "101234567000"
+-- Iteration 8 --
+string(13) "1.07654321E-9"
+-- Iteration 9 --
+string(3) "0.5"
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 12 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 13 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 14 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 15 --
+string(1) "1"
+-- Iteration 16 --
+string(0) ""
+-- Iteration 17 --
+string(1) "1"
+-- Iteration 18 --
+string(0) ""
+-- Iteration 19 --
+string(0) ""
+-- Iteration 20 --
+string(0) ""
+-- Iteration 21 --
+string(0) ""
+-- Iteration 22 --
+string(0) ""
+-- Iteration 23 --
+string(6) "obj'ct"
+-- Iteration 24 --
+string(%d) "Resource id #%d"
+-- Iteration 25 --
+string(0) ""
+-- Iteration 26 --
+string(0) ""
+===DONE===
diff --git a/ext/standard/tests/strings/stripslashes_variation1.phpt b/ext/standard/tests/strings/stripslashes_variation1.phpt
index 4d58fd7a0..00a3f28f6 100644
--- a/ext/standard/tests/strings/stripslashes_variation1.phpt
+++ b/ext/standard/tests/strings/stripslashes_variation1.phpt
@@ -31,51 +31,51 @@ $file_handle = fopen(__FILE__, 'r');
// array with different values
$values = array (
- // integer values
- 0,
- 1,
- 12345,
- -2345,
-
- // float values
- 10.5,
- -10.5,
- 10.5e10,
- 10.6E-10,
- .5,
-
- // array values
- array(),
- array(0),
- array(1),
- array(1, 2),
- array('color' => 'red', 'item' => 'pen'),
-
- // boolean values
- true,
- false,
- TRUE,
- FALSE,
-
- // empty string
- "",
- '',
-
- // undefined variable
- $undefined_var,
-
- // unset variable
- $unset_var,
-
- // objects
- new sample(),
-
- // resource
- $file_handle,
-
- // NULL values
- NULL,
- null
+ // integer values
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float values
+/*5*/ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array values
+/*10*/ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // boolean values
+/*15*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty string
+/*19*/ "",
+ '',
+
+ // undefined variable
+/*21*/ $undefined_var,
+
+ // unset variable
+/*22*/ $unset_var,
+
+ // objects
+/*23*/ new sample(),
+
+ // resource
+/*24*/ $file_handle,
+
+ // null values
+/*25*/ NULL,
+ null
);
@@ -95,8 +95,8 @@ for($index = 0; $index < count($values); $index ++) {
// closing the file
fclose($file_handle);
-echo "Done\n";
?>
+===DONE===
--EXPECTF--
*** Testing stripslashes() : with non-string type argument ***
@@ -118,9 +118,9 @@ string(4) "10.5"
-- Iteration 6 --
string(5) "-10.5"
-- Iteration 7 --
-string(12) "105000000000"
+string(12) "101234567000"
-- Iteration 8 --
-string(7) "1.06E-9"
+string(13) "1.07654321E-9"
-- Iteration 9 --
string(3) "0.5"
-- Iteration 10 --
@@ -167,4 +167,4 @@ string(%d) "Resource id #%d"
string(0) ""
-- Iteration 26 --
string(0) ""
-Done
+===DONE===
diff --git a/ext/standard/tests/strings/stripslashes_variation2.phpt b/ext/standard/tests/strings/stripslashes_variation2.phpt
index d813d0b33..c86cd5890 100644
--- a/ext/standard/tests/strings/stripslashes_variation2.phpt
+++ b/ext/standard/tests/strings/stripslashes_variation2.phpt
Binary files differ
diff --git a/ext/standard/tests/strings/stristr_basic.phpt b/ext/standard/tests/strings/stristr_basic.phpt
new file mode 100644
index 000000000..b3705f323
--- /dev/null
+++ b/ext/standard/tests/strings/stristr_basic.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Test stristr() function : basic functionality
+--FILE--
+<?php
+/* Prototype: string stristr ( string $haystack, string $needle );
+ Description: Case-insensitive strstr().
+*/
+
+echo "*** Testing stristr() : basic functionality ***\n";
+
+var_dump( stristr("Test string", "teSt") );
+var_dump( stristr("test stRIng", "striNG") );
+var_dump( stristr("teST StrinG", "stRIn") );
+var_dump( stristr("tesT string", "t S") );
+var_dump( stristr("test strinG", "g") );
+var_dump( bin2hex(stristr(b"te".chr(0).b"St", chr(0))) );
+var_dump( stristr("tEst", "test") );
+var_dump( stristr("teSt", "test") );
+?>
+===DONE===
+--EXPECTF--
+*** Testing stristr() : basic functionality ***
+string(11) "Test string"
+string(6) "stRIng"
+string(6) "StrinG"
+string(8) "T string"
+string(1) "G"
+string(6) "005374"
+string(4) "tEst"
+string(4) "teSt"
+===DONE===
diff --git a/ext/standard/tests/strings/stristr_error.phpt b/ext/standard/tests/strings/stristr_error.phpt
new file mode 100644
index 000000000..725670405
--- /dev/null
+++ b/ext/standard/tests/strings/stristr_error.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test stristr() function : error conditions
+--FILE--
+<?php
+
+/* Prototype: string stristr ( string $haystack, string $needle );
+ Description: Case-insensitive strstr()
+*/
+echo "*** Testing stristr() : error conditions ***\n";
+
+echo "\n-- Testing stristr() function with no arguments --\n";
+var_dump( stristr() );
+var_dump( stristr("") );
+
+echo "\n-- Testing stristr() function with no needle --\n";
+var_dump( stristr("Hello World") ); // without "needle"
+
+echo "\n-- Testing stristr() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( stristr("Hello World", "World", $extra_arg) );
+
+echo "\n-- Testing stristr() function with empty haystack --\n";
+var_dump( stristr(NULL, "") );
+
+echo "\n-- Testing stristr() function with empty needle --\n";
+var_dump( stristr("Hello World", "") );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing stristr() : error conditions ***
+
+-- Testing stristr() function with no arguments --
+
+Warning: Wrong parameter count for stristr() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for stristr() in %s on line %d
+NULL
+
+-- Testing stristr() function with no needle --
+
+Warning: Wrong parameter count for stristr() in %s on line %d
+NULL
+
+-- Testing stristr() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for stristr() in %s on line %d
+NULL
+
+-- Testing stristr() function with empty haystack --
+
+Warning: stristr(): Empty delimiter in %s on line %d
+bool(false)
+
+-- Testing stristr() function with empty needle --
+
+Warning: stristr(): Empty delimiter in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/strings/stristr_variation1.phpt b/ext/standard/tests/strings/stristr_variation1.phpt
new file mode 100644
index 000000000..b50c93726
--- /dev/null
+++ b/ext/standard/tests/strings/stristr_variation1.phpt
@@ -0,0 +1,131 @@
+--TEST--
+Test stristr() function : usage variations - test values for $haystack argument
+--FILE--
+<?php
+
+/* Prototype: string stristr ( string $haystack, string $needle );
+ Description: Case-insensitive strstr().
+*/
+
+echo "*** Testing stristr() function: with unexpected inputs for 'string' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $input
+$inputs = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ -2,
+ -PHP_INT_MAX,
+
+ // float values
+/*5*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*8*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*11*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null vlaues
+/*15*/ NULL,
+ null,
+
+ // objects
+/*17*/ new sample(),
+
+ // resource
+/*18*/ $file_handle,
+
+ // undefined variable
+/*19*/ @$undefined_var,
+
+ // unset variable
+/*20*/ @$unset_var
+);
+
+//defining '$pad_length' argument
+$pad_length = "20";
+
+// loop through with each element of the $inputs array to test stristr() function
+$count = 1;
+foreach($inputs as $input) {
+ echo "-- Iteration $count --\n";
+ var_dump( stristr($input, " ") );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing stristr() function: with unexpected inputs for 'string' argument ***
+-- Iteration 1 --
+bool(false)
+-- Iteration 2 --
+bool(false)
+-- Iteration 3 --
+bool(false)
+-- Iteration 4 --
+bool(false)
+-- Iteration 5 --
+bool(false)
+-- Iteration 6 --
+bool(false)
+-- Iteration 7 --
+bool(false)
+-- Iteration 8 --
+
+Notice: Array to string conversion in %s on line %d2
+bool(false)
+-- Iteration 9 --
+
+Notice: Array to string conversion in %s on line %d2
+bool(false)
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d2
+bool(false)
+-- Iteration 11 --
+bool(false)
+-- Iteration 12 --
+bool(false)
+-- Iteration 13 --
+bool(false)
+-- Iteration 14 --
+bool(false)
+-- Iteration 15 --
+bool(false)
+-- Iteration 16 --
+bool(false)
+-- Iteration 17 --
+string(7) " object"
+-- Iteration 18 --
+string(%d) " id #%d"
+-- Iteration 19 --
+bool(false)
+-- Iteration 20 --
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/strings/stristr_variation2.phpt b/ext/standard/tests/strings/stristr_variation2.phpt
new file mode 100644
index 000000000..7d1d2feb2
--- /dev/null
+++ b/ext/standard/tests/strings/stristr_variation2.phpt
@@ -0,0 +1,127 @@
+--TEST--
+Test stristr() function : usage variations - test values for $needle argument
+--FILE--
+<?php
+
+/* Prototype: string stristr ( string $haystack, string $needle );
+ Description: Case-insensitive strstr().
+*/
+
+echo "*** Testing stristr() function: with unexpected inputs for 'needle' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $input
+$inputs = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ -2,
+ -PHP_INT_MAX,
+
+ // float values
+/*5*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*8*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*11*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null vlaues
+/*15*/ NULL,
+ null,
+
+ // objects
+/*17*/ new sample(),
+
+ // resource
+/*18*/ $file_handle,
+
+ // undefined variable
+/*19*/ @$undefined_var,
+
+ // unset variable
+/*20*/ @$unset_var
+);
+
+//defining '$pad_length' argument
+$pad_length = "20";
+
+// loop through with each element of the $inputs array to test stristr() function
+$count = 1;
+foreach($inputs as $input) {
+ echo "-- Iteration $count --\n";
+ var_dump( stristr("Hello World", $input) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing stristr() function: with unexpected inputs for 'needle' argument ***
+-- Iteration 1 --
+bool(false)
+-- Iteration 2 --
+bool(false)
+-- Iteration 3 --
+bool(false)
+-- Iteration 4 --
+bool(false)
+-- Iteration 5 --
+bool(false)
+-- Iteration 6 --
+bool(false)
+-- Iteration 7 --
+bool(false)
+-- Iteration 8 --
+bool(false)
+-- Iteration 9 --
+bool(false)
+-- Iteration 10 --
+bool(false)
+-- Iteration 11 --
+bool(false)
+-- Iteration 12 --
+bool(false)
+-- Iteration 13 --
+bool(false)
+-- Iteration 14 --
+bool(false)
+-- Iteration 15 --
+bool(false)
+-- Iteration 16 --
+bool(false)
+-- Iteration 17 --
+
+Notice: Object of class sample could not be converted to int in %s on line %d
+bool(false)
+-- Iteration 18 --
+%s
+-- Iteration 19 --
+bool(false)
+-- Iteration 20 --
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/strings/strlen_basic.phpt b/ext/standard/tests/strings/strlen_basic.phpt
new file mode 100644
index 000000000..3ed2b97e5
--- /dev/null
+++ b/ext/standard/tests/strings/strlen_basic.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Test strlen() function : basic functionality
+--FILE--
+<?php
+
+/* Prototype : int strlen ( string $string )
+ * Description: Get string length
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing strlen() : basic functionality ***\n";
+var_dump(strlen("abcdef"));
+var_dump(strlen(" ab de "));
+var_dump(strlen(""));
+var_dump(strlen("\x90\x91\x00\x93\x94\x90\x91\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"));
+?>
+===DONE===
+--EXPECTF--
+*** Testing strlen() : basic functionality ***
+int(6)
+int(7)
+int(0)
+int(18)
+===DONE===
diff --git a/ext/standard/tests/strings/strlen_error.phpt b/ext/standard/tests/strings/strlen_error.phpt
new file mode 100644
index 000000000..1e8b975f3
--- /dev/null
+++ b/ext/standard/tests/strings/strlen_error.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test strlen() function : error conditions
+--FILE--
+<?php
+
+/* Prototype : int strlen ( string $string )
+ * Description: Get string length
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing strlen() : unexpected number of arguments ***";
+
+
+echo "\n-- Testing strlen() function with no arguments --\n";
+var_dump( strlen() );
+
+echo "\n-- Testing strlen() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( strlen("abc def", $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing strlen() : unexpected number of arguments ***
+-- Testing strlen() function with no arguments --
+
+Warning: Wrong parameter count for strlen() in %s on line %d
+NULL
+
+-- Testing strlen() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for strlen() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/strings/strlen_variation1.phpt b/ext/standard/tests/strings/strlen_variation1.phpt
new file mode 100644
index 000000000..101cf6434
--- /dev/null
+++ b/ext/standard/tests/strings/strlen_variation1.phpt
@@ -0,0 +1,135 @@
+--TEST--
+Test strlen() function : usage variations - unexpected input for '$string' argument
+--FILE--
+<?php
+
+/* Prototype : int strlen ( string $string )
+ * Description: Get string length
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing strlen() : with unexpected input for 'string' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $input
+$inputs = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ -2,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*6*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*9*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*16*/ NULL,
+ null,
+
+ // objects
+/*18*/ new sample(),
+
+ // resource
+/*19*/ $file_handle,
+
+ // undefined variable
+/*20*/ @$undefined_var,
+
+ // unset variable
+/*21*/ @$unset_var
+);
+
+//defining '$pad_length' argument
+$pad_length = "20";
+
+// loop through with each element of the $inputs array to test strlen() function
+$count = 1;
+foreach($inputs as $input) {
+ echo "-- Iteration $count --\n";
+ var_dump( strlen($input) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strlen() : with unexpected input for 'string' argument ***
+-- Iteration 1 --
+int(1)
+-- Iteration 2 --
+int(1)
+-- Iteration 3 --
+int(2)
+-- Iteration 4 --
+int(10)
+-- Iteration 5 --
+int(11)
+-- Iteration 6 --
+int(4)
+-- Iteration 7 --
+int(5)
+-- Iteration 8 --
+int(12)
+-- Iteration 9 --
+
+Notice: Array to string conversion in %s on line %d
+int(5)
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+int(5)
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+int(5)
+-- Iteration 12 --
+int(1)
+-- Iteration 13 --
+int(0)
+-- Iteration 14 --
+int(1)
+-- Iteration 15 --
+int(0)
+-- Iteration 16 --
+int(0)
+-- Iteration 17 --
+int(0)
+-- Iteration 18 --
+int(13)
+-- Iteration 19 --
+int(%d)
+-- Iteration 20 --
+int(0)
+-- Iteration 21 --
+int(0)
+===DONE===
diff --git a/ext/standard/tests/strings/strripos_basic1.phpt b/ext/standard/tests/strings/strripos_basic1.phpt
new file mode 100644
index 000000000..759c23114
--- /dev/null
+++ b/ext/standard/tests/strings/strripos_basic1.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test strripos() function : basic functionality - with default arguments
+--FILE--
+<?php
+/* Prototype : int strripos ( string $haystack, string $needle [, int $offset] );
+ * Description: Find position of last occurrence of a case-insensitive 'needle' in a 'haystack'
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing strripos() function: basic functionality ***\n";
+$heredoc_str = <<<EOD
+Hello, World
+EOD;
+
+echo "\n-- regular string for haystack & needle --\n";
+var_dump( strripos("Hello, World", "HeLLo") );
+var_dump( strripos('Hello, World', "hello") );
+var_dump( strripos("Hello, World", 'WoRLd') );
+var_dump( strripos('Hello, World', 'WORLD') );
+var_dump( strripos('Hello, World', 'foo') );
+
+echo "\n-- single char for needle --\n";
+var_dump( strripos("Hello, World", "O") );
+var_dump( strripos("Hello, World", ",") );
+
+echo "\n-- heredoc string for haystack & needle --\n";
+var_dump( strripos($heredoc_str, "Hello, WoRLd") );
+var_dump( strripos($heredoc_str, 'HelLO') );
+var_dump( strripos($heredoc_str, $heredoc_str) );
+
+?>
+===DONE===
+--EXPECT--
+*** Testing strripos() function: basic functionality ***
+
+-- regular string for haystack & needle --
+int(0)
+int(0)
+int(7)
+int(7)
+bool(false)
+
+-- single char for needle --
+int(8)
+int(5)
+
+-- heredoc string for haystack & needle --
+int(0)
+int(0)
+int(0)
+===DONE===
diff --git a/ext/standard/tests/strings/strripos_basic2.phpt b/ext/standard/tests/strings/strripos_basic2.phpt
new file mode 100644
index 000000000..d4a1a73f0
--- /dev/null
+++ b/ext/standard/tests/strings/strripos_basic2.phpt
@@ -0,0 +1,64 @@
+--TEST--
+Test strripos() function : basic functionality - with all arguments
+--FILE--
+<?php
+/* Prototype : int strripos ( string $haystack, string $needle [, int $offset] );
+ * Description: Find position of last occurrence of a case-insensitive 'needle' in a 'haystack'
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing strripos() function: basic functionality ***\n";
+$heredoc_str = <<<EOD
+Hello, World
+EOD;
+
+echo "\n-- regular string for haystack & needle, with various offsets --\n";
+var_dump( strripos("Hello, World", "HeLLo", 0) );
+var_dump( strripos("Hello, World", 'Hello', 1) );
+var_dump( strripos('Hello, World', 'world', 1) );
+var_dump( strripos('Hello, World', "WorLD", 5) );
+
+echo "\n-- heredoc string for haystack & needle, with various offsets --\n";
+var_dump( strripos($heredoc_str, "Hello, WORLD", 0) );
+var_dump( strripos($heredoc_str, 'HelLo', 0) );
+var_dump( strripos($heredoc_str, 'HeLLo', 1) );
+var_dump( strripos($heredoc_str, $heredoc_str, 0) );
+var_dump( strripos($heredoc_str, $heredoc_str, 1) );
+
+echo "\n-- various +ve offsets --\n";
+var_dump( strripos("Hello, World", "O", 3) );
+var_dump( strripos("Hello, World", "O", 6) );
+var_dump( strripos("Hello, World", "O", 10) );
+
+echo "\n-- various -ve offsets --\n";
+var_dump( strripos("Hello, World", "O", -1) );
+var_dump( strripos("Hello, World", "O", -5) );
+var_dump( strripos("Hello, World", "O", -9) );
+?>
+===DONE===
+--EXPECT--
+*** Testing strripos() function: basic functionality ***
+
+-- regular string for haystack & needle, with various offsets --
+int(0)
+bool(false)
+int(7)
+int(7)
+
+-- heredoc string for haystack & needle, with various offsets --
+int(0)
+int(0)
+bool(false)
+int(0)
+bool(false)
+
+-- various +ve offsets --
+int(8)
+int(8)
+bool(false)
+
+-- various -ve offsets --
+int(8)
+int(4)
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/strings/strripos_error.phpt b/ext/standard/tests/strings/strripos_error.phpt
new file mode 100644
index 000000000..59d592681
--- /dev/null
+++ b/ext/standard/tests/strings/strripos_error.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test strripos() function : error conditions
+--FILE--
+<?php
+/* Prototype : int strripos ( string $haystack, string $needle [, int $offset] );
+ * Description: Find position of last occurrence of a case-insensitive 'needle' in a 'haystack'
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing strripos() function: error conditions ***";
+echo "\n-- With Zero arguments --";
+var_dump( strripos() );
+
+echo "\n-- With less than expected number of arguments --";
+var_dump( strripos("String") );
+
+echo "\n-- With more than expected number of arguments --";
+var_dump( strripos("string", "String", 1, 'extra_arg') );
+?>
+===DONE===
+--EXPECTF--
+*** Testing strripos() function: error conditions ***
+-- With Zero arguments --
+Warning: strripos() expects at least 2 parameters, 0 given in %s on line %d
+bool(false)
+
+-- With less than expected number of arguments --
+Warning: strripos() expects at least 2 parameters, 1 given in %s on line %d
+bool(false)
+
+-- With more than expected number of arguments --
+Warning: strripos() expects at most 3 parameters, 4 given in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/strings/strripos_offset.phpt b/ext/standard/tests/strings/strripos_offset.phpt
index daa917e79..524699ad5 100644
--- a/ext/standard/tests/strings/strripos_offset.phpt
+++ b/ext/standard/tests/strings/strripos_offset.phpt
@@ -16,30 +16,30 @@ var_dump(strripos(1024, "te", -PHP_INT_MAX-1));
echo "Done\n";
?>
--EXPECTF--
-Notice: strripos(): Offset is greater than the length of haystack string in %s on line %d
+Warning: strripos(): Offset is greater than the length of haystack string in %s on line %d
bool(false)
-Notice: strripos(): Offset is greater than the length of haystack string in %s on line %d
+Warning: strripos(): Offset is greater than the length of haystack string in %s on line %d
bool(false)
-Notice: strripos(): Offset is greater than the length of haystack string in %s on line %d
+Warning: strripos(): Offset is greater than the length of haystack string in %s on line %d
bool(false)
-Notice: strripos(): Offset is greater than the length of haystack string in %s on line %d
+Warning: strripos(): Offset is greater than the length of haystack string in %s on line %d
bool(false)
Warning: strripos() expects parameter 1 to be string, array given in %s on line %d
bool(false)
-Notice: strripos(): Offset is greater than the length of haystack string in %s on line %d
+Warning: strripos(): Offset is greater than the length of haystack string in %s on line %d
bool(false)
-Notice: strripos(): Offset is greater than the length of haystack string in %s on line %d
+Warning: strripos(): Offset is greater than the length of haystack string in %s on line %d
bool(false)
-Notice: strripos(): Offset is greater than the length of haystack string in %s on line %d
+Warning: strripos(): Offset is greater than the length of haystack string in %s on line %d
bool(false)
-Notice: strripos(): Offset is greater than the length of haystack string in %s on line %d
+Warning: strripos(): Offset is greater than the length of haystack string in %s on line %d
bool(false)
Done
diff --git a/ext/standard/tests/strings/strripos_variation1.phpt b/ext/standard/tests/strings/strripos_variation1.phpt
new file mode 100644
index 000000000..b8a8943d0
--- /dev/null
+++ b/ext/standard/tests/strings/strripos_variation1.phpt
@@ -0,0 +1,254 @@
+--TEST--
+Test strripos() function : usage variations - double quoted strings for 'haystack' & 'needle' arguments
+--FILE--
+<?php
+/* Prototype : int strripos ( string $haystack, string $needle [, int $offset] );
+ * Description: Find position of last occurrence of a case-insensitive 'needle' in a 'haystack'
+ * Source code: ext/standard/string.c
+*/
+
+/* Test strripos() function by passing double quoted strings for 'haystack' & 'needle' arguments */
+
+echo "*** Testing strripos() function: with double quoted strings ***\n";
+$haystack = "Hello,\t\n\0\n $&!#%()*<=>?@hello123456he \x234 \101 ";
+$needles = array(
+ //regular strings
+/*1*/ "l",
+ "L",
+ "HELLO",
+ "hEllo",
+
+ //escape characters
+/*5*/ "\t",
+ "\T", //invalid input
+ " ",
+ "\n",
+ "\N", //invalid input
+ "
+", //new line
+
+ //nulls
+/*11*/ "\0",
+ NULL,
+ null,
+
+ //boolean false
+/*14*/ FALSE,
+ false,
+
+ //empty string
+/*16*/ "",
+
+ //special chars
+/*17*/ " ",
+ "$",
+ " $",
+ "&",
+ "!#",
+ "()",
+ "<=>",
+ ">",
+ "=>",
+ "?",
+ "@",
+ "@hEllo",
+
+/*29*/ "12345", //decimal numeric string
+ "\x23", //hexadecimal numeric string
+ "#", //respective ASCII char of \x23
+ "\101", //octal numeric string
+ "A", //respective ASCII char of \101
+ "456HEE", //numerics + chars
+ $haystack //haystack as needle
+);
+
+/* loop through to get the position of the needle in haystack string */
+$count = 1;
+foreach ($needles as $needle) {
+ echo "-- Iteration $count --\n";
+ var_dump( strripos($haystack, $needle) );
+ var_dump( strripos($haystack, $needle, 1) );
+ var_dump( strripos($haystack, $needle, 20) );
+ var_dump( strripos($haystack, $needle, -1) );
+ $count++;
+}
+?>
+===DONE===
+--EXPECTF--
+*** Testing strripos() function: with double quoted strings ***
+-- Iteration 1 --
+int(28)
+int(28)
+int(28)
+int(28)
+-- Iteration 2 --
+int(28)
+int(28)
+int(28)
+int(28)
+-- Iteration 3 --
+int(25)
+int(25)
+int(25)
+int(25)
+-- Iteration 4 --
+int(25)
+int(25)
+int(25)
+int(25)
+-- Iteration 5 --
+int(6)
+int(6)
+bool(false)
+int(6)
+-- Iteration 6 --
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+-- Iteration 7 --
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+-- Iteration 8 --
+int(9)
+int(9)
+bool(false)
+int(9)
+-- Iteration 9 --
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+-- Iteration 10 --
+int(9)
+int(9)
+bool(false)
+int(9)
+-- Iteration 11 --
+int(8)
+int(8)
+bool(false)
+int(8)
+-- Iteration 12 --
+int(8)
+int(8)
+bool(false)
+int(8)
+-- Iteration 13 --
+int(8)
+int(8)
+bool(false)
+int(8)
+-- Iteration 14 --
+int(8)
+int(8)
+bool(false)
+int(8)
+-- Iteration 15 --
+int(8)
+int(8)
+bool(false)
+int(8)
+-- Iteration 16 --
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+-- Iteration 17 --
+int(43)
+int(43)
+int(43)
+int(43)
+-- Iteration 18 --
+int(12)
+int(12)
+bool(false)
+int(12)
+-- Iteration 19 --
+int(11)
+int(11)
+bool(false)
+int(11)
+-- Iteration 20 --
+int(13)
+int(13)
+bool(false)
+int(13)
+-- Iteration 21 --
+int(14)
+int(14)
+bool(false)
+int(14)
+-- Iteration 22 --
+int(17)
+int(17)
+bool(false)
+int(17)
+-- Iteration 23 --
+int(20)
+int(20)
+int(20)
+int(20)
+-- Iteration 24 --
+int(22)
+int(22)
+int(22)
+int(22)
+-- Iteration 25 --
+int(21)
+int(21)
+int(21)
+int(21)
+-- Iteration 26 --
+int(23)
+int(23)
+int(23)
+int(23)
+-- Iteration 27 --
+int(24)
+int(24)
+int(24)
+int(24)
+-- Iteration 28 --
+int(24)
+int(24)
+int(24)
+int(24)
+-- Iteration 29 --
+int(30)
+int(30)
+int(30)
+int(30)
+-- Iteration 30 --
+int(39)
+int(39)
+int(39)
+int(39)
+-- Iteration 31 --
+int(39)
+int(39)
+int(39)
+int(39)
+-- Iteration 32 --
+int(42)
+int(42)
+int(42)
+int(42)
+-- Iteration 33 --
+int(42)
+int(42)
+int(42)
+int(42)
+-- Iteration 34 --
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+-- Iteration 35 --
+int(0)
+bool(false)
+bool(false)
+int(0)
+===DONE===
diff --git a/ext/standard/tests/strings/strripos_variation2.phpt b/ext/standard/tests/strings/strripos_variation2.phpt
new file mode 100644
index 000000000..d8caf7374
--- /dev/null
+++ b/ext/standard/tests/strings/strripos_variation2.phpt
@@ -0,0 +1,260 @@
+--TEST--
+Test strripos() function : usage variations - single quoted strings for 'haystack' & 'needle' arguments
+--FILE--
+<?php
+/* Prototype : int strripos ( string $haystack, string $needle [, int $offset] );
+ * Description: Find position of last occurrence of a case-insensitive 'needle' in a 'haystack'
+ * Source code: ext/standard/string.c
+*/
+
+/* Test strripos() function by passing single quoted strings to 'haystack' & 'needle' arguments */
+
+echo "*** Testing strripos() function: with single quoted strings ***\n";
+$haystack = 'Hello,\t\n\0\n $&!#%()*<=>?@hello123456he \x234 \101 ';
+$needles = array(
+ //regular strings
+/*1*/ 'l',
+ 'L',
+ 'HELLO',
+ 'hEllo',
+
+ //escape characters
+/*5*/ '\t',
+ '\T',
+ ' ',
+ '\n',
+ '\N',
+ '
+ ', //new line
+
+ //nulls
+/*11*/ '\0',
+ NULL,
+ null,
+
+ //boolean false
+/*14*/ FALSE,
+ false,
+
+ //empty string
+/*16*/ '',
+
+ //special chars
+/*17*/ ' ',
+ '$',
+ ' $',
+ '&',
+ '!#',
+ '()',
+ '<=>',
+ '>',
+ '=>',
+ '?',
+ '@',
+ '@hEllo',
+
+/*29*/ '12345', //decimal numeric string
+ '\x23', //hexadecimal numeric string
+ '#', //respective ASCII char of \x23
+ '\101', //octal numeric string
+ 'A', // respective ASCII char for \101
+ '456HEE', //numerics + chars
+ 42, //needle as int(ASCII value of '*')
+ $haystack //haystack as needle
+);
+
+/* loop through to get the position of the needle in haystack string */
+$count = 1;
+foreach ($needles as $needle) {
+ echo "-- Iteration $count --\n";
+ var_dump( strripos($haystack, $needle) );
+ var_dump( strripos($haystack, $needle, 1) );
+ var_dump( strripos($haystack, $needle, 20) );
+ var_dump( strripos($haystack, $needle, -1) );
+ $count++;
+}
+?>
+===DONE===
+--EXPECT--
+*** Testing strripos() function: with single quoted strings ***
+-- Iteration 1 --
+int(32)
+int(32)
+int(32)
+int(32)
+-- Iteration 2 --
+int(32)
+int(32)
+int(32)
+int(32)
+-- Iteration 3 --
+int(29)
+int(29)
+int(29)
+int(29)
+-- Iteration 4 --
+int(29)
+int(29)
+int(29)
+int(29)
+-- Iteration 5 --
+int(6)
+int(6)
+bool(false)
+int(6)
+-- Iteration 6 --
+int(6)
+int(6)
+bool(false)
+int(6)
+-- Iteration 7 --
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+-- Iteration 8 --
+int(12)
+int(12)
+bool(false)
+int(12)
+-- Iteration 9 --
+int(12)
+int(12)
+bool(false)
+int(12)
+-- Iteration 10 --
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+-- Iteration 11 --
+int(10)
+int(10)
+bool(false)
+int(10)
+-- Iteration 12 --
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+-- Iteration 13 --
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+-- Iteration 14 --
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+-- Iteration 15 --
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+-- Iteration 16 --
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+-- Iteration 17 --
+int(53)
+int(53)
+int(53)
+int(53)
+-- Iteration 18 --
+int(16)
+int(16)
+bool(false)
+int(16)
+-- Iteration 19 --
+int(15)
+int(15)
+bool(false)
+int(15)
+-- Iteration 20 --
+int(17)
+int(17)
+bool(false)
+int(17)
+-- Iteration 21 --
+int(18)
+int(18)
+bool(false)
+int(18)
+-- Iteration 22 --
+int(21)
+int(21)
+int(21)
+int(21)
+-- Iteration 23 --
+int(24)
+int(24)
+int(24)
+int(24)
+-- Iteration 24 --
+int(26)
+int(26)
+int(26)
+int(26)
+-- Iteration 25 --
+int(25)
+int(25)
+int(25)
+int(25)
+-- Iteration 26 --
+int(27)
+int(27)
+int(27)
+int(27)
+-- Iteration 27 --
+int(28)
+int(28)
+int(28)
+int(28)
+-- Iteration 28 --
+int(28)
+int(28)
+int(28)
+int(28)
+-- Iteration 29 --
+int(34)
+int(34)
+int(34)
+int(34)
+-- Iteration 30 --
+int(43)
+int(43)
+int(43)
+int(43)
+-- Iteration 31 --
+int(19)
+int(19)
+bool(false)
+int(19)
+-- Iteration 32 --
+int(49)
+int(49)
+int(49)
+int(49)
+-- Iteration 33 --
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+-- Iteration 34 --
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+-- Iteration 35 --
+int(23)
+int(23)
+int(23)
+int(23)
+-- Iteration 36 --
+int(0)
+bool(false)
+bool(false)
+int(0)
+===DONE===
diff --git a/ext/standard/tests/strings/strripos_variation3.phpt b/ext/standard/tests/strings/strripos_variation3.phpt
new file mode 100644
index 000000000..c38010634
--- /dev/null
+++ b/ext/standard/tests/strings/strripos_variation3.phpt
@@ -0,0 +1,59 @@
+--TEST--
+Test strripos() function : usage variations - multi line heredoc string for 'haystack' argument
+--FILE--
+<?php
+/* Prototype : int strripos ( string $haystack, string $needle [, int $offset] );
+ * Description: Find position of last occurrence of a case-insensitive 'needle' in a 'haystack'
+ * Source code: ext/standard/string.c
+*/
+
+/* Test strripos() function by passing multi-line heredoc string for haystack and
+ * with various needles & offsets
+*/
+
+echo "*** Testing strripos() function: with heredoc strings ***\n";
+echo "-- With heredoc string containing multi lines --\n";
+$multi_line_str = <<<EOD
+Example of string
+spanning multiple lines
+using heredoc syntax.
+EOD;
+
+echo "\n-- Multi line strings with +ve offsets -- \n";
+var_dump( strripos($multi_line_str, "iNg", 0) );
+var_dump( strripos($multi_line_str, "inG", 15) );
+var_dump( strripos($multi_line_str, "Ing", 22) );
+
+echo "\n-- Multi line strings with +ve offsets -- \n";
+var_dump( strripos($multi_line_str, "Ing", -1) );
+var_dump( strripos($multi_line_str, "Ing", -17) );
+var_dump( strripos($multi_line_str, "Ing", -50) );
+
+echo "\n-- Multi line strings with no offset -- \n";
+var_dump( strripos($multi_line_str, "spAn") );
+var_dump( strripos($multi_line_str, "IPlE") );
+var_dump( strripos($multi_line_str, "") );
+var_dump( strripos($multi_line_str, " ") );
+
+?>
+===DONE===
+--EXPECT--
+*** Testing strripos() function: with heredoc strings ***
+-- With heredoc string containing multi lines --
+
+-- Multi line strings with +ve offsets --
+int(44)
+int(44)
+int(44)
+
+-- Multi line strings with +ve offsets --
+int(44)
+int(44)
+bool(false)
+
+-- Multi line strings with no offset --
+int(18)
+int(31)
+bool(false)
+int(55)
+===DONE===
diff --git a/ext/standard/tests/strings/strripos_variation4.phpt b/ext/standard/tests/strings/strripos_variation4.phpt
new file mode 100644
index 000000000..c355330ca
--- /dev/null
+++ b/ext/standard/tests/strings/strripos_variation4.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Test strripos() function : usage variations - heredoc string containing special chars for 'haystack' argument
+--FILE--
+<?php
+/* Prototype : int strripos ( string $haystack, string $needle [, int $offset] );
+ * Description: Find position of last occurrence of a case-insensitive 'needle' in a 'haystack'
+ * Source code: ext/standard/string.c
+*/
+
+/* Test strripos() function by passing heredoc string containing special chars for haystack
+ * and with various needles & offets
+*/
+
+echo "*** Testing strripos() function: with heredoc strings ***\n";
+echo "-- With heredoc string containing special chars --\n";
+$special_chars_str = <<<EOD
+Ex'ple of h'doc st'g, contains
+$#%^*&*_("_")!#@@!$#$^^&$*(special)
+chars.
+EOD;
+var_dump( strripos($special_chars_str, "Ex'pLE", 0) );
+var_dump( strripos($special_chars_str, "!@@!", 23) );
+var_dump( strripos($special_chars_str, '_') );
+var_dump( strripos($special_chars_str, '("_")') );
+var_dump( strripos($special_chars_str, "$*") );
+var_dump( strripos($special_chars_str, "$*", 10) );
+var_dump( strripos($special_chars_str, "(speCIal)") );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strripos() function: with heredoc strings ***
+-- With heredoc string containing special chars --
+int(0)
+bool(false)
+int(41)
+int(39)
+int(55)
+int(55)
+int(57)
+===DONE===
diff --git a/ext/standard/tests/strings/strripos_variation5.phpt b/ext/standard/tests/strings/strripos_variation5.phpt
new file mode 100644
index 000000000..5f6df7990
--- /dev/null
+++ b/ext/standard/tests/strings/strripos_variation5.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test strripos() function : usage variations - heredoc string containing escape chars for 'haystack' argument
+--FILE--
+<?php
+/* Prototype : int strripos ( string $haystack, string $needle [, int $offset] );
+ * Description: Find position of last occurrence of a case-insensitive 'needle' in a 'haystack'
+ * Source code: ext/standard/string.c
+*/
+
+/* Test strripos() function by passing heredoc string containing escape chars for haystack
+ * and with various needles & offsets
+*/
+
+echo "*** Testing strripos() function: with heredoc strings ***\n";
+echo "-- With heredoc string containing escape characters --\n";
+$control_char_str = <<<EOD
+Hello, World\n
+Hello\tWorld
+EOD;
+var_dump( strripos($control_char_str, "\n") );
+var_dump( strripos($control_char_str, "\t") );
+var_dump( strripos($control_char_str, "\n", 12) );
+var_dump( strripos($control_char_str, "\t", 15) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strripos() function: with heredoc strings ***
+-- With heredoc string containing escape characters --
+int(13)
+int(19)
+int(13)
+int(19)
+===DONE===
diff --git a/ext/standard/tests/strings/strrpos_variation14.phpt b/ext/standard/tests/strings/strrpos_variation14.phpt
index 617685325..53c123a3f 100644
--- a/ext/standard/tests/strings/strrpos_variation14.phpt
+++ b/ext/standard/tests/strings/strrpos_variation14.phpt
@@ -92,7 +92,7 @@ int(6)
int(6)
-- Iteration 3 --
-Notice: strrpos(): Offset is greater than the length of haystack string in %s on line %d
+Warning: strrpos(): Offset is greater than the length of haystack string in %s on line %d
bool(false)
-- Iteration 4 --
int(6)
diff --git a/ext/standard/tests/strings/strrpos_variation15.phpt b/ext/standard/tests/strings/strrpos_variation15.phpt
index 23c7aef14..d958cdc48 100644
--- a/ext/standard/tests/strings/strrpos_variation15.phpt
+++ b/ext/standard/tests/strings/strrpos_variation15.phpt
@@ -94,23 +94,23 @@ bool(false)
bool(false)
-- Iteration 3 --
-Notice: strrpos(): Offset is greater than the length of haystack string in %s on line %d
+Warning: strrpos(): Offset is greater than the length of haystack string in %s on line %d
bool(false)
-- Iteration 4 --
-Notice: strrpos(): Offset is greater than the length of haystack string in %s on line %d
+Warning: strrpos(): Offset is greater than the length of haystack string in %s on line %d
bool(false)
-- Iteration 5 --
-Notice: strrpos(): Offset is greater than the length of haystack string in %s on line %d
+Warning: strrpos(): Offset is greater than the length of haystack string in %s on line %d
bool(false)
-- Iteration 6 --
-Notice: strrpos(): Offset is greater than the length of haystack string in %s on line %d
+Warning: strrpos(): Offset is greater than the length of haystack string in %s on line %d
bool(false)
-- Iteration 7 --
-Notice: strrpos(): Offset is greater than the length of haystack string in %s on line %d
+Warning: strrpos(): Offset is greater than the length of haystack string in %s on line %d
bool(false)
-- Iteration 8 --
bool(false)
diff --git a/ext/standard/tests/strings/strtolower-win32.phpt b/ext/standard/tests/strings/strtolower-win32.phpt
index af1290f1b..18e32488c 100644
--- a/ext/standard/tests/strings/strtolower-win32.phpt
+++ b/ext/standard/tests/strings/strtolower-win32.phpt
Binary files differ
diff --git a/ext/standard/tests/strings/strtoupper1-win32.phpt b/ext/standard/tests/strings/strtoupper1-win32.phpt
index 283492d9d..0f023afeb 100644
--- a/ext/standard/tests/strings/strtoupper1-win32.phpt
+++ b/ext/standard/tests/strings/strtoupper1-win32.phpt
Binary files differ
diff --git a/ext/standard/tests/strings/strtr_variation5.phpt b/ext/standard/tests/strings/strtr_variation5.phpt
index 7bd170473..82c86eb29 100644
--- a/ext/standard/tests/strings/strtr_variation5.phpt
+++ b/ext/standard/tests/strings/strtr_variation5.phpt
@@ -31,42 +31,42 @@ $file_handle = fopen(__FILE__, "r");
// array with different values
$strings = array (
- // integer values
- 0,
- 1,
- -2,
-
- // float values
- 10.5,
- -20.5,
- 10.5e10,
-
- // array values
- array(),
- array(0),
- array(1, 2),
-
- // boolean values
- true,
- false,
- TRUE,
- FALSE,
-
- // null vlaues
- NULL,
- null,
-
- // objects
- new sample(),
-
- // resource
- $file_handle,
-
- // undefined variable
- @$undefined_var,
-
- // unset variable
- @$unset_var
+ // integer values
+/*1*/ 0,
+ 1,
+ -2,
+
+ // float values
+/*4*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*7*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*10*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null vlaues
+/*14*/ NULL,
+ null,
+
+ // objects
+/*16*/ new sample(),
+
+ // resource
+/*17*/ $file_handle,
+
+ // undefined variable
+/*18*/ @$undefined_var,
+
+ // unset variable
+/*19*/ @$unset_var
);
//defining 'from' argument
@@ -86,8 +86,8 @@ for($index = 0; $index < count($strings); $index++) {
fclose($file_handle); //closing the file handle
-echo "*** Done ***";
?>
+===Done===
--EXPECTF--
*** Testing strtr() function: with unexpected inputs for 'str' ***
-- Iteration 1 --
@@ -101,7 +101,7 @@ string(4) "ta.5"
-- Iteration 5 --
string(5) "-ma.5"
-- Iteration 6 --
-string(12) "ta5aaaaaaaaa"
+string(12) "tatm34567aaa"
-- Iteration 7 --
Notice: Array to string conversion in %s on line %d
@@ -129,9 +129,9 @@ string(0) ""
-- Iteration 16 --
string(13) "s02ple objec1"
-- Iteration 17 --
-string(%d) "Resource id #%d"
+string(%d) "Resource id #%s"
-- Iteration 18 --
string(0) ""
-- Iteration 19 --
string(0) ""
-*** Done ***
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/strtr_variation6.phpt b/ext/standard/tests/strings/strtr_variation6.phpt
index 2d8ab7183..9a4463e75 100644
--- a/ext/standard/tests/strings/strtr_variation6.phpt
+++ b/ext/standard/tests/strings/strtr_variation6.phpt
@@ -34,42 +34,42 @@ $str = "012atm";
// array of values for 'from'
$from_arr = array (
- // integer values
- 0,
- 1,
- -2,
-
- // float values
- 10.5,
- -20.5,
- 10.5e10,
-
- // array values
- array(),
- array(0),
- array(1, 2),
-
- // boolean values
- true,
- false,
- TRUE,
- FALSE,
-
- // null vlaues
- NULL,
- null,
-
- // objects
- new sample(),
-
- // resource
- $file_handle,
-
- // undefined variable
- @$undefined_var,
-
- // unset variable
- @$unset_var
+ // integer values
+/*1*/ 0,
+ 1,
+ -2,
+
+ // float values
+/*4*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*7*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*10*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null vlaues
+/*14*/ NULL,
+ null,
+
+ // objects
+/*16*/ new sample(),
+
+ // resource
+/*17*/ $file_handle,
+
+ // undefined variable
+/*18*/ @$undefined_var,
+
+ // unset variable
+/*19*/ @$unset_var
);
//defining 'to' argument
@@ -85,9 +85,8 @@ for($index = 0; $index < count($from_arr); $index++) {
}
fclose($file_handle); //closing the file handle
-
-echo "*** Done ***";
?>
+===Done===
--EXPECTF--
*** Testing strtr() function: with unexpected inputs for 'from' ***
-- Iteration 1 --
@@ -101,7 +100,7 @@ string(6) "ta2atm"
-- Iteration 5 --
string(6) "m1tatm"
-- Iteration 6 --
-string(6) "2a2atm"
+string(6) "tm0atm"
-- Iteration 7 --
Notice: Array to string conversion in %s on line %d
@@ -134,4 +133,4 @@ string(6) "012atm"
string(6) "012atm"
-- Iteration 19 --
string(6) "012atm"
-*** Done ***
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/strtr_variation7.phpt b/ext/standard/tests/strings/strtr_variation7.phpt
index 04b742f31..5a8e9c9ff 100644
--- a/ext/standard/tests/strings/strtr_variation7.phpt
+++ b/ext/standard/tests/strings/strtr_variation7.phpt
@@ -37,42 +37,42 @@ $from = "atm012";
// array of values for 'to' argument
$to_arr = array (
- // integer values
- 0,
- 1,
- -2,
-
- // float values
- 10.5,
- -20.5,
- 10.5e10,
-
- // array values
- array(),
- array(0),
- array(1, 2),
-
- // boolean values
- true,
- false,
- TRUE,
- FALSE,
-
- // null vlaues
- NULL,
- null,
-
- // objects
- new sample(),
-
- // resource
- $file_handle,
-
- // undefined variable
- @$undefined_var,
-
- // unset variable
- @$unset_var
+ // integer values
+/*1*/ 0,
+ 1,
+ -2,
+
+ // float values
+/*4*/ 10.5,
+ -20.5,
+ 10.12345675e10,
+
+ // array values
+/*7*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*10*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null vlaues
+/*14*/ NULL,
+ null,
+
+ // objects
+/*16*/ new sample(),
+
+ // resource
+/*17*/ $file_handle,
+
+ // undefined variable
+/*18*/ @$undefined_var,
+
+ // unset variable
+/*19*/ @$unset_var
);
// loop through with each element of the $to array to test strtr() function
@@ -86,8 +86,8 @@ for($index = 0; $index < count($to_arr); $index++) {
fclose($file_handle); //closing the file handle
-echo "*** Done ***";
?>
+===Done===
--EXPECTF--
*** Testing strtr() function: with unexpected inputs for 'to' ***
@@ -107,7 +107,7 @@ string(6) "51210."
string(6) ".52-20"
-- Iteration 6 --
-string(6) "000105"
+string(6) "234101"
-- Iteration 7 --
@@ -153,4 +153,4 @@ string(6) "012atm"
-- Iteration 19 --
string(6) "012atm"
-*** Done ***
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/strtr_variation9.phpt b/ext/standard/tests/strings/strtr_variation9.phpt
index 0f5875c72..2d4f39f23 100644
--- a/ext/standard/tests/strings/strtr_variation9.phpt
+++ b/ext/standard/tests/strings/strtr_variation9.phpt
@@ -29,44 +29,44 @@ $file_handle = fopen(__FILE__, "r");
// array with different values
$values = array (
- // integer values
- 0,
- 1,
- -2,
-
- // float values
- 10.5,
- -20.5,
- 10.5e10,
-
- // array values
- array(),
- array(0),
- array(1),
- array(1, 2),
- array('color' => 'red', 'item' => 'pen'),
-
- // boolean values
- true,
- false,
- TRUE,
- FALSE,
-
- // null vlaues
- NULL,
- null,
-
- // objects
- new sample(),
-
- // resource
- $file_handle,
-
- // undefined variable
- @$undefined_var,
-
- // unset variable
- @$unset_var
+ // integer values
+/*1*/ 0,
+ 1,
+ -2,
+
+ // float values
+/*4*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*7*/ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // boolean values
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null vlaues
+/*16*/ NULL,
+ null,
+
+ // objects
+/*18*/ new sample(),
+
+ // resource
+/*19*/ $file_handle,
+
+ // undefined variable
+/*20*/ @$undefined_var,
+
+ // unset variable
+/*21*/ @$unset_var
);
// loop through with each element of the $values array to test strtr() function
@@ -80,8 +80,8 @@ for($index = 0; $index < count($values); $index++) {
fclose($file_handle); //closing the file handle
-echo "*** Done ***";
?>
+===Done===
--EXPECTF--
*** Testing strtr() function: with unexpected inputs for all arguments ***
@@ -116,7 +116,7 @@ Warning: strtr(): The second argument is not an array in %s on line %d
bool(false)
-- Iteration 6 --
-string(12) "105000000000"
+string(12) "101234567000"
Warning: strtr(): The second argument is not an array in %s on line %d
bool(false)
@@ -240,4 +240,4 @@ string(0) ""
Warning: strtr(): The second argument is not an array in %s on line %d
bool(false)
-*** Done ***
+===Done===
diff --git a/ext/standard/tests/strings/strval_basic.phpt b/ext/standard/tests/strings/strval_basic.phpt
new file mode 100644
index 000000000..c099058b9
--- /dev/null
+++ b/ext/standard/tests/strings/strval_basic.phpt
@@ -0,0 +1,77 @@
+--TEST--
+Test strval() function : basic functionality
+--FILE--
+<?php
+/* Prototype : string strval ( mixed $var )
+ * Description: Get the string value of a variable.
+ * Source code: ext/standard/string.c
+ */
+
+echo "*** Testing strval() : basic variations ***\n";
+
+error_reporting(E_ALL ^ E_NOTICE);
+
+$simple_heredoc =<<<EOT
+Simple HEREDOC string
+EOT;
+
+
+//array of values to iterate over
+$values = array(
+ // Simple strings
+/*1*/ "Hello World",
+ 'Hello World',
+
+ // String with control chars
+/*3*/ "String\nwith\ncontrol\ncharacters\r\n",
+
+ // String with quotes
+/*4*/ "String with \"quotes\"",
+
+ //Numeric String
+/*5*/ "123456",
+
+ // Hexadecimal string
+/*6*/ "0xABC",
+
+ //Heredoc String
+/*7*/ $simple_heredoc
+);
+
+// loop through each element of the array for strval
+$iterator = 1;
+foreach($values as $value) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( strval($value) );
+ $iterator++;
+};
+?>
+===DONE===
+--EXPECTF--
+*** Testing strval() : basic variations ***
+
+-- Iteration 1 --
+string(11) "Hello World"
+
+-- Iteration 2 --
+string(11) "Hello World"
+
+-- Iteration 3 --
+string(32) "String
+with
+control
+characters
+"
+
+-- Iteration 4 --
+string(20) "String with "quotes""
+
+-- Iteration 5 --
+string(6) "123456"
+
+-- Iteration 6 --
+string(5) "0xABC"
+
+-- Iteration 7 --
+string(21) "Simple HEREDOC string"
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/strval_error.phpt b/ext/standard/tests/strings/strval_error.phpt
new file mode 100644
index 000000000..ce57266b7
--- /dev/null
+++ b/ext/standard/tests/strings/strval_error.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test strval() function : usage variations - error conditions
+--FILE--
+<?php
+/* Prototype : string strval ( mixed $var )
+ * Description: Get the string value of a variable.
+ * Source code: ext/standard/string.c
+ */
+
+echo "*** Testing strval() : error conditions ***\n";
+
+error_reporting(E_ALL ^ E_NOTICE);
+
+class MyClass
+{
+ // no toString() method defined
+}
+
+$string = "Hello";
+$extra_arg = 10;
+
+//Test strval with one more than the expected number of arguments
+echo "\n-- Testing strval() function with more than expected no. of arguments --\n";
+var_dump( strval($string, $extra_arg) );
+
+// Testing strval with one less than the expected number of arguments
+echo "\n-- Testing strval() function with less than expected no. of arguments --\n";
+var_dump( strval() );
+
+// Testing strval with a object which has no toString() method
+echo "\n-- Testing strval() function with object which has not toString() method --\n";
+var_dump( strval(new MyClass()) );
+
+?>
+--EXPECTF--
+*** Testing strval() : error conditions ***
+
+-- Testing strval() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for strval() in %s on line %d
+NULL
+
+-- Testing strval() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for strval() in %s on line %d
+NULL
+
+-- Testing strval() function with object which has not toString() method --
+
+Catchable fatal error: Object of class MyClass could not be converted to string in %s on line %d \ No newline at end of file
diff --git a/ext/standard/tests/strings/strval_variation1.phpt b/ext/standard/tests/strings/strval_variation1.phpt
new file mode 100644
index 000000000..430a4362b
--- /dev/null
+++ b/ext/standard/tests/strings/strval_variation1.phpt
@@ -0,0 +1,190 @@
+--TEST--
+Test strval() function : usage variations - Pass different data types as strval
+--FILE--
+<?php
+/* Prototype : string strval ( mixed $var )
+ * Description: Get the string value of a variable.
+ * Source code: ext/standard/string.c
+ */
+
+echo "*** Testing strval() : usage variations ***\n";
+
+error_reporting(E_ALL ^ E_NOTICE);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+class MyClass
+{
+ function __toString() {
+ return "MyClass";
+ }
+}
+
+//array of values to iterate over
+$values = array(
+ //Decimal values
+/*1*/ 0,
+ 1,
+ 12345,
+ -12345,
+
+ //Octal values
+/*5*/ 02,
+ 010,
+ 030071,
+ -030071,
+
+ //Hexadecimal values
+/*9*/ 0x0,
+ 0x1,
+ 0xABCD,
+ -0xABCD,
+
+ // float data
+/*13*/ 100.5,
+ -100.5,
+ 100.1234567e10,
+ 100.7654321E-10,
+ .5,
+
+ // array data
+/*18*/ array(),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+/*20*/ NULL,
+ null,
+
+ // boolean data
+/*22*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*26*/ "",
+ '',
+
+ // object data
+/*28*/ new MyClass(),
+
+ // resource
+/*29*/ $file_handle,
+
+ // undefined data
+/*30*/ @$undefined_var,
+
+ // unset data
+/*31*/ @$unset_var,
+);
+
+// loop through each element of the array for strval
+$iterator = 1;
+foreach($values as $value) {
+ echo "\n-- Iteration $iterator --\n";
+ var_dump( strval($value) );
+ $iterator++;
+};
+?>
+===DONE===
+--EXPECTF--
+*** Testing strval() : usage variations ***
+
+-- Iteration 1 --
+string(1) "0"
+
+-- Iteration 2 --
+string(1) "1"
+
+-- Iteration 3 --
+string(5) "12345"
+
+-- Iteration 4 --
+string(6) "-12345"
+
+-- Iteration 5 --
+string(1) "2"
+
+-- Iteration 6 --
+string(1) "8"
+
+-- Iteration 7 --
+string(5) "12345"
+
+-- Iteration 8 --
+string(6) "-12345"
+
+-- Iteration 9 --
+string(1) "0"
+
+-- Iteration 10 --
+string(1) "1"
+
+-- Iteration 11 --
+string(5) "43981"
+
+-- Iteration 12 --
+string(6) "-43981"
+
+-- Iteration 13 --
+string(5) "100.5"
+
+-- Iteration 14 --
+string(6) "-100.5"
+
+-- Iteration 15 --
+string(13) "1001234567000"
+
+-- Iteration 16 --
+string(14) "1.007654321E-8"
+
+-- Iteration 17 --
+string(3) "0.5"
+
+-- Iteration 18 --
+string(5) "Array"
+
+-- Iteration 19 --
+string(5) "Array"
+
+-- Iteration 20 --
+string(0) ""
+
+-- Iteration 21 --
+string(0) ""
+
+-- Iteration 22 --
+string(1) "1"
+
+-- Iteration 23 --
+string(0) ""
+
+-- Iteration 24 --
+string(1) "1"
+
+-- Iteration 25 --
+string(0) ""
+
+-- Iteration 26 --
+string(0) ""
+
+-- Iteration 27 --
+string(0) ""
+
+-- Iteration 28 --
+string(7) "MyClass"
+
+-- Iteration 29 --
+string(%d) "Resource id #%d"
+
+-- Iteration 30 --
+string(0) ""
+
+-- Iteration 31 --
+string(0) ""
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/strval_variation2.phpt b/ext/standard/tests/strings/strval_variation2.phpt
new file mode 100644
index 000000000..da74973c5
--- /dev/null
+++ b/ext/standard/tests/strings/strval_variation2.phpt
@@ -0,0 +1,82 @@
+--TEST--
+Test strval() function : usage variations - Pass all valid char codes
+--FILE--
+<?php
+/* Prototype : string strval ( mixed $var )
+ * Description: Get the string value of a variable.
+ * Source code: ext/standard/string.c
+ */
+
+echo "*** Testing strval() : usage variations - Pass all valid char codes ***\n";
+
+$s0 = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f";
+$s1 = "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f";
+$s2 = "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f";
+$s3 = "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f";
+$s4 = "\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f";
+$s5 = "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f";
+$s6 = "\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f";
+$s7 = "\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f";
+$s8 = "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f";
+$s9 = "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f";
+$sa = "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf";
+$sb = "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf";
+$sc = "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf";
+$sd = "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf";
+$se = "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef";
+$sf = "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff";
+
+echo bin2hex(strval($s0));
+echo "\n";
+echo bin2hex(strval($s1));
+echo "\n";
+echo bin2hex(strval($s2));
+echo "\n";
+echo bin2hex(strval($s3));
+echo "\n";
+echo bin2hex(strval($s4));
+echo "\n";
+echo bin2hex(strval($s5));
+echo "\n";
+echo bin2hex(strval($s6));
+echo "\n";
+echo bin2hex(strval($s7));
+echo "\n";
+echo bin2hex(strval($s8));
+echo "\n";
+echo bin2hex(strval($s9));
+echo "\n";
+echo bin2hex(strval($sa));
+echo "\n";
+echo bin2hex(strval($sb));
+echo "\n";
+echo bin2hex(strval($sc));
+echo "\n";
+echo bin2hex(strval($sd));
+echo "\n";
+echo bin2hex(strval($se));
+echo "\n";
+echo bin2hex(strval($sf));
+echo "\n";
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing strval() : usage variations - Pass all valid char codes ***
+000102030405060708090a0b0c0d0e0f
+101112131415161718191a1b1c1d1e1f
+202122232425262728292a2b2c2d2e2f
+303132333435363738393a3b3c3d3e3f
+404142434445464748494a4b4c4d4e4f
+505152535455565758595a5b5c5d5e5f
+606162636465666768696a6b6c6d6e6f
+707172737475767778797a7b7c7d7e7f
+808182838485868788898a8b8c8d8e8f
+909192939495969798999a9b9c9d9e9f
+a0a1a2a3a4a5a6a7a8a9aaabacadaeaf
+b0b1b2b3b4b5b6b7b8b9babbbcbdbebf
+c0c1c2c3c4c5c6c7c8c9cacbcccdcecf
+d0d1d2d3d4d5d6d7d8d9dadbdcdddedf
+e0e1e2e3e4e5e6e7e8e9eaebecedeeef
+f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/substr_replace_error.phpt b/ext/standard/tests/strings/substr_replace_error.phpt
new file mode 100644
index 000000000..facea3468
--- /dev/null
+++ b/ext/standard/tests/strings/substr_replace_error.phpt
@@ -0,0 +1,70 @@
+--TEST--
+Test substr_replace() function : error conditions
+--FILE--
+<?php
+/* Prototype : mixed substr_replace ( mixed $string , string $replacement , int $start [, int $length ] )
+ * Description: Replace text within a portion of a string
+ * Source code: ext/standard/string.c
+*/
+
+/*
+ * Testing substr_replace() for error conditions
+*/
+
+echo "*** Testing substr_replace() : error conditions ***\n";
+
+$s1 = "Good morning";
+
+echo "\n-- Testing substr_replace() function with less than expected no. of arguments --\n";
+var_dump(substr_replace());
+var_dump(substr_replace($s1, "evening"));
+
+echo "\n-- Testing substr_replace() function with more than expected no. of arguments --\n";
+var_dump(substr_replace($s1, "evening", 5, 7, true));
+
+echo "\n-- Testing substr_replace() function with start and length different types --\n";
+var_dump(substr_replace($s1, "evening", array(5)));
+var_dump(substr_replace($s1, "evening", 5, array(8)));
+
+echo "\n-- Testing substr_replace() function with start and length with a different number of elments --\n";
+var_dump(substr_replace($s1, "evening", array(5, 1), array(8)));
+
+echo "\n-- Testing substr_replace() function with start and length as arrays but string not--\n";
+var_dump(substr_replace($s1, "evening", array(5), array(8)));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing substr_replace() : error conditions ***
+
+-- Testing substr_replace() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for substr_replace() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for substr_replace() in %s on line %d
+NULL
+
+-- Testing substr_replace() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for substr_replace() in %s on line %d
+NULL
+
+-- Testing substr_replace() function with start and length different types --
+
+Warning: substr_replace(): 'from' and 'len' should be of same type - numerical or array in %s on line %d
+string(12) "Good morning"
+
+Warning: substr_replace(): 'from' and 'len' should be of same type - numerical or array in %s on line %d
+string(12) "Good morning"
+
+-- Testing substr_replace() function with start and length with a different number of elments --
+
+Warning: substr_replace(): 'from' and 'len' should have the same number of elements in %s on line %d
+string(12) "Good morning"
+
+-- Testing substr_replace() function with start and length as arrays but string not--
+
+Warning: substr_replace(): Functionality of 'from' and 'len' as arrays is not implemented in %s on line %d
+string(12) "Good morning"
+===DONE===
diff --git a/ext/standard/tests/strings/trim_basic.phpt b/ext/standard/tests/strings/trim_basic.phpt
new file mode 100644
index 000000000..501b47742
--- /dev/null
+++ b/ext/standard/tests/strings/trim_basic.phpt
@@ -0,0 +1,45 @@
+--TEST--
+Test trim() function : basic functionality
+--FILE--
+<?php
+
+/* Prototype : string trim ( string $str [, string $charlist ] )
+ * Description: Strip whitespace (or other characters) from the beginning and end of a string.
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing trim() : basic functionality ***\n";
+
+$text = " \t\r\n\0\x0B ---These are a few words--- \t\r\n\0\x0B ";
+$hello = "!===Hello World===!";
+$binary = "\x0A\x0DExample string\x0A\x0D";
+
+echo "\n-- Trim string with all white space characters --\n";
+var_dump(trim($text));
+
+echo "\n-- Trim non-whitespace from a string --\n";
+var_dump(trim($hello, "=!"));
+
+echo "\n-- Trim some non-white space characters from a string --\n";
+var_dump(trim($hello, "Hdle"));
+
+echo "\n-- Trim the ASCII control characters at the beginning of a string --\n";
+var_dump(trim($binary, "\x00..\x1F"));
+
+?>
+===DONE===
+--EXPECT--
+*** Testing trim() : basic functionality ***
+
+-- Trim string with all white space characters --
+string(27) "---These are a few words---"
+
+-- Trim non-whitespace from a string --
+string(11) "Hello World"
+
+-- Trim some non-white space characters from a string --
+string(19) "!===Hello World===!"
+
+-- Trim the ASCII control characters at the beginning of a string --
+string(14) "Example string"
+===DONE===
diff --git a/ext/standard/tests/strings/trim_error.phpt b/ext/standard/tests/strings/trim_error.phpt
new file mode 100644
index 000000000..010a45d16
--- /dev/null
+++ b/ext/standard/tests/strings/trim_error.phpt
@@ -0,0 +1,61 @@
+--TEST--
+Test trim() function : error conditions
+--FILE--
+<?php
+
+/* Prototype : string trim ( string $str [, string $charlist ] )
+ * Description: Strip whitespace (or other characters) from the begining and end of a string.
+ * Source code: ext/standard/string.c
+*/
+
+
+echo "*** Testing trim() : error conditions ***\n";
+
+echo "\n-- Testing trim() function with no arguments --\n";
+var_dump( trim() );
+
+echo "\n-- Testing trim() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( trim("Hello World", "Heo", $extra_arg) );
+
+
+$hello = " Hello World\n";
+echo "\n-- Test trim function with various invalid charlists --\n";
+var_dump(trim($hello, "..a"));
+var_dump(trim($hello, "a.."));
+var_dump(trim($hello, "z..a"));
+var_dump(trim($hello, "a..b..c"));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing trim() : error conditions ***
+
+-- Testing trim() function with no arguments --
+
+Warning: Wrong parameter count for trim() in %s on line %d
+NULL
+
+-- Testing trim() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for trim() in %s on line %d
+NULL
+
+-- Test trim function with various invalid charlists --
+
+Warning: trim(): Invalid '..'-range, no character to the left of '..' in %s on line %d
+string(14) " Hello World
+"
+
+Warning: trim(): Invalid '..'-range, no character to the right of '..' in %s on line %d
+string(14) " Hello World
+"
+
+Warning: trim(): Invalid '..'-range, '..'-range needs to be incrementing in %s on line %d
+string(14) " Hello World
+"
+
+Warning: trim(): Invalid '..'-range in %s on line %d
+string(14) " Hello World
+"
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/trim_variation1.phpt b/ext/standard/tests/strings/trim_variation1.phpt
new file mode 100644
index 000000000..74362b814
--- /dev/null
+++ b/ext/standard/tests/strings/trim_variation1.phpt
@@ -0,0 +1,136 @@
+--TEST--
+Test trim() function : usage variations - test values for $str argument
+--FILE--
+<?php
+
+/* Prototype : string trim ( string $str [, string $charlist ] )
+ * Description: Strip whitespace (or other characters) from the begining and end of a string.
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing trim() function: with unexpected inputs for 'str' argument ***\n";
+
+//get an unset variable
+$unset_var = ' !--string_val--! ';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return " !---sample object---! ";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $input
+$inputs = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ 255,
+ 256,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*7*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*10*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*17*/ NULL,
+ null,
+
+ // objects
+/*19*/ new sample(),
+
+ // resource
+/*20*/ $file_handle,
+
+ // undefined variable
+/*21*/ @$undefined_var,
+
+ // unset variable
+/*22*/ @$unset_var
+);
+
+// loop through with each element of the $inputs array to test trim() function
+$count = 1;
+foreach($inputs as $input) {
+ echo "-- Iteration $count --\n";
+ // strip white space and any "minus" signs
+ var_dump( trim($input, " !-") );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing trim() function: with unexpected inputs for 'str' argument ***
+-- Iteration 1 --
+string(1) "0"
+-- Iteration 2 --
+string(1) "1"
+-- Iteration 3 --
+string(3) "255"
+-- Iteration 4 --
+string(3) "256"
+-- Iteration 5 --
+string(10) "2147483647"
+-- Iteration 6 --
+string(10) "2147483648"
+-- Iteration 7 --
+string(4) "10.5"
+-- Iteration 8 --
+string(4) "20.5"
+-- Iteration 9 --
+string(12) "101234567000"
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 12 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 13 --
+string(1) "1"
+-- Iteration 14 --
+string(0) ""
+-- Iteration 15 --
+string(1) "1"
+-- Iteration 16 --
+string(0) ""
+-- Iteration 17 --
+string(0) ""
+-- Iteration 18 --
+string(0) ""
+-- Iteration 19 --
+string(13) "sample object"
+-- Iteration 20 --
+string(%d) "Resource id #%d"
+-- Iteration 21 --
+string(0) ""
+-- Iteration 22 --
+string(0) ""
+===DONE===
diff --git a/ext/standard/tests/strings/trim_variation2.phpt b/ext/standard/tests/strings/trim_variation2.phpt
new file mode 100644
index 000000000..9ba2af616
--- /dev/null
+++ b/ext/standard/tests/strings/trim_variation2.phpt
@@ -0,0 +1,136 @@
+--TEST--
+Test trim() function : usage variations - test values for $charlist argument
+--FILE--
+<?php
+
+/* Prototype : string trim ( string $str [, string $charlist ] )
+ * Description: Strip whitespace (or other characters) from the begining and end of a string.
+ * Source code: ext/standard/string.c
+*/
+
+echo "*** Testing trim() function: with unexpected inputs for 'charlist' argument ***\n";
+
+//get an unset variable
+$unset_var = ' string_val ';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return " sample object ";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $input
+$inputs = array (
+
+ // integer values
+/*1*/ 0,
+ 1,
+ 255,
+ 256,
+ 2147483647,
+ -2147483648,
+
+ // float values
+/*7*/ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+/*10*/ array(),
+ array(0),
+ array(1, 2),
+
+ // boolean values
+/*13*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+/*17*/ NULL,
+ null,
+
+ // objects
+/*19*/ new sample(),
+
+ // resource
+/*20*/ $file_handle,
+
+ // undefined variable
+/*21*/ @$undefined_var,
+
+ // unset variable
+/*22*/ @$unset_var
+);
+
+// loop through with each element of the $inputs array to test trim() function
+$count = 1;
+foreach($inputs as $charlist) {
+ echo "-- Iteration $count --\n";
+ // strip white space and any "minus" signs
+ var_dump( trim("!---Hello World---!", $charlist) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing trim() function: with unexpected inputs for 'charlist' argument ***
+-- Iteration 1 --
+string(19) "!---Hello World---!"
+-- Iteration 2 --
+string(19) "!---Hello World---!"
+-- Iteration 3 --
+string(19) "!---Hello World---!"
+-- Iteration 4 --
+string(19) "!---Hello World---!"
+-- Iteration 5 --
+string(19) "!---Hello World---!"
+-- Iteration 6 --
+string(19) "!---Hello World---!"
+-- Iteration 7 --
+string(19) "!---Hello World---!"
+-- Iteration 8 --
+string(19) "!---Hello World---!"
+-- Iteration 9 --
+string(19) "!---Hello World---!"
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+string(19) "!---Hello World---!"
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+string(19) "!---Hello World---!"
+-- Iteration 12 --
+
+Notice: Array to string conversion in %s on line %d
+string(19) "!---Hello World---!"
+-- Iteration 13 --
+string(19) "!---Hello World---!"
+-- Iteration 14 --
+string(19) "!---Hello World---!"
+-- Iteration 15 --
+string(19) "!---Hello World---!"
+-- Iteration 16 --
+string(19) "!---Hello World---!"
+-- Iteration 17 --
+string(19) "!---Hello World---!"
+-- Iteration 18 --
+string(19) "!---Hello World---!"
+-- Iteration 19 --
+string(19) "!---Hello World---!"
+-- Iteration 20 --
+string(19) "!---Hello World---!"
+-- Iteration 21 --
+string(19) "!---Hello World---!"
+-- Iteration 22 --
+string(19) "!---Hello World---!"
+===DONE===
diff --git a/ext/standard/tests/strings/unpack_error.phpt b/ext/standard/tests/strings/unpack_error.phpt
new file mode 100644
index 000000000..32dd25dcb
--- /dev/null
+++ b/ext/standard/tests/strings/unpack_error.phpt
@@ -0,0 +1,42 @@
+--TEST--
+Test unpack() function : error conditions
+--FILE--
+<?php
+
+/* Prototype : array unpack ( string $format , string $data )
+ * Description: Unpack data from binary string
+ * Source code: ext/standard/pack.c
+*/
+
+echo "*** Testing unpack() : error conditions ***\n";
+
+echo "\n-- Testing unpack() function with no arguments --\n";
+var_dump( unpack() );
+
+echo "\n-- Testing unpack() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump(unpack("I", pack("I", 65534), $extra_arg));
+
+echo "\n-- Testing unpack() function with invalid format character --\n";
+$extra_arg = 10;
+var_dump(unpack("Z", pack("I", 65534)));
+?>
+===DONE===
+--EXPECTF--
+*** Testing unpack() : error conditions ***
+
+-- Testing unpack() function with no arguments --
+
+Warning: Wrong parameter count for unpack() in %s on line %d
+NULL
+
+-- Testing unpack() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for unpack() in %s on line %d
+NULL
+
+-- Testing unpack() function with invalid format character --
+
+Warning: unpack(): Invalid format type Z in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_basic.phpt b/ext/standard/tests/strings/vfprintf_basic.phpt
new file mode 100644
index 000000000..8189aaf0b
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_basic.phpt
@@ -0,0 +1,71 @@
+--TEST--
+Test vfprintf() function : basic functionality
+--CREDITS--
+Felix De Vliegher <felix.devliegher@gmail.com>
+--INI--
+precision=14
+--FILE--
+<?php
+/* Prototype : int vfprintf(resource stream, string format, array args)
+ * Description: Output a formatted string into a stream
+ * Source code: ext/standard/formatted_print.c
+ * Alias to functions:
+ */
+
+function writeAndDump($fp, $format, $args)
+{
+ ftruncate( $fp, 0 );
+ $length = vfprintf( $fp, $format, $args );
+ rewind( $fp );
+ $content = stream_get_contents( $fp );
+ var_dump( $content );
+ var_dump( $length );
+}
+
+echo "*** Testing vfprintf() : basic functionality ***\n";
+
+// Open handle
+$file = 'vfprintf_test.txt';
+$fp = fopen( $file, "a+" );
+
+// Test vfprintf()
+writeAndDump( $fp, "Foo is %d and %s", array( 30, 'bar' ) );
+writeAndDump( $fp, "%s %s %s", array( 'bar', 'bar', 'bar' ) );
+writeAndDump( $fp, "%d digit", array( '54' ) );
+writeAndDump( $fp, "%b %b", array( true, false ) );
+writeAndDump( $fp, "%c %c %c", array( 65, 66, 67 ) );
+writeAndDump( $fp, "%e %E %e", array( 1000, 2e4, +2e2 ) );
+writeAndDump( $fp, "%02d", array( 50 ) );
+writeAndDump( $fp, "Testing %b %d %f %s %x %X", array( 9, 6, 2.5502, "foobar", 15, 65 ) );
+
+// Close handle
+fclose( $fp );
+
+?>
+===DONE===
+--CLEAN--
+<?php
+
+$file = 'vfprintf_test.txt';
+unlink( $file );
+
+?>
+--EXPECTF--
+*** Testing vfprintf() : basic functionality ***
+string(17) "Foo is 30 and bar"
+int(17)
+string(11) "bar bar bar"
+int(11)
+string(8) "54 digit"
+int(8)
+string(3) "1 0"
+int(3)
+string(5) "A B C"
+int(5)
+string(35) "1.000000e+3 2.000000E+4 2.000000e+2"
+int(35)
+string(2) "50"
+int(2)
+string(35) "Testing 1001 6 2.550200 foobar f 41"
+int(35)
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_basic1.phpt b/ext/standard/tests/strings/vfprintf_basic1.phpt
new file mode 100644
index 000000000..3129d4fcc
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_basic1.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Test vfprintf() function : basic functionality - string format
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+echo "*** Testing vfprintf() : basic functionality - using string format ***\n";
+
+// Initialise all required variables
+$format = "format";
+$format1 = "%s\n";
+$format2 = "%s %s\n";
+$format3 = "%s %s %s\n";
+$arg1 = array("one");
+$arg2 = array("one","two");
+$arg3 = array("one","two","three");
+
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+$result = vfprintf($fp, $format1, $arg1);
+var_dump($result);
+$result = vfprintf($fp, $format2, $arg2);
+var_dump($result);
+$result = vfprintf($fp, $format3, $arg3);
+var_dump($result);
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : basic functionality - using string format ***
+int(4)
+int(8)
+int(14)
+one
+one two
+one two three
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_basic2.phpt b/ext/standard/tests/strings/vfprintf_basic2.phpt
new file mode 100644
index 000000000..a7e0dbc63
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_basic2.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test vfprintf() function : basic functionality - integer format
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Testing vfprintf() : basic functionality - using integer format
+*/
+
+echo "*** Testing vfprintf() : basic functionality - using integer format ***\n";
+
+// Initialise all required variables
+$format = "format";
+$format1 = "%d";
+$format2 = "%d %d";
+$format3 = "%d %d %d";
+$arg1 = array(111);
+$arg2 = array(111,222);
+$arg3 = array(111,222,333);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+vfprintf($fp, $format1, $arg1);
+fprintf($fp, "\n");
+
+vfprintf($fp, $format2, $arg2);
+fprintf($fp, "\n");
+
+vfprintf($fp, $format3, $arg3);
+fprintf($fp, "\n");
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : basic functionality - using integer format ***
+111
+111 222
+111 222 333
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_basic3.phpt b/ext/standard/tests/strings/vfprintf_basic3.phpt
new file mode 100644
index 000000000..8c52e57f9
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_basic3.phpt
@@ -0,0 +1,63 @@
+--TEST--
+Test vfprintf() function : basic functionality - float format
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+echo "*** Testing vfprintf() : basic functionality - using float format ***\n";
+
+// Initialise all required variables
+
+$format = "format";
+$format1 = "%f";
+$format2 = "%f %f";
+$format3 = "%f %f %f";
+
+$format11 = "%F";
+$format22 = "%F %F";
+$format33 = "%F %F %F";
+$arg1 = array(11.11);
+$arg2 = array(11.11,22.22);
+$arg3 = array(11.11,22.22,33.33);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+vfprintf($fp, $format1,$arg1);
+fprintf($fp, "\n");
+
+vfprintf($fp,$format11,$arg1);
+fprintf($fp, "\n");
+
+vfprintf($fp,$format2,$arg2);
+fprintf($fp, "\n");
+
+vfprintf($fp,$format22,$arg2);
+fprintf($fp, "\n");
+
+vfprintf($fp,$format3,$arg3);
+fprintf($fp, "\n");
+
+vfprintf($fp, $format33,$arg3);
+fprintf($fp, "\n");
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+
+unlink($data_file);
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : basic functionality - using float format ***
+11.110000
+11.110000
+11.110000 22.220000
+11.110000 22.220000
+11.110000 22.220000 33.330000
+11.110000 22.220000 33.330000
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_basic4.phpt b/ext/standard/tests/strings/vfprintf_basic4.phpt
new file mode 100644
index 000000000..76b3a0421
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_basic4.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test vfprintf() function : basic functionality - bool format
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+echo "*** Testing vfprintf() : basic functionality - using bool format ***\n";
+
+// Initialise all required variables
+$format = "format";
+$format1 = "%b";
+$format2 = "%b %b";
+$format3 = "%b %b %b";
+$arg1 = array(TRUE);
+$arg2 = array(TRUE,FALSE);
+$arg3 = array(TRUE,FALSE,TRUE);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+vfprintf($fp, $format1,$arg1);
+fprintf($fp, "\n");
+
+vfprintf($fp, $format2,$arg2);
+fprintf($fp, "\n");
+
+vfprintf($fp, $format3,$arg3);
+fprintf($fp, "\n");
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+
+unlink($data_file);
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : basic functionality - using bool format ***
+1
+1 0
+1 0 1
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_basic5.phpt b/ext/standard/tests/strings/vfprintf_basic5.phpt
new file mode 100644
index 000000000..a080c9e6c
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_basic5.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Test vfprintf() function : basic functionality - char format
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+echo "*** Testing vfprintf() : basic functionality - using char format ***\n";
+
+// Initialise all required variables
+$format = "format";
+$format1 = "%c";
+$format2 = "%c %c";
+$format3 = "%c %c %c";
+$arg1 = array(65);
+$arg2 = array(65,66);
+$arg3 = array(65,66,67);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+vfprintf($fp, $format1,$arg1);
+fprintf($fp, "\n");
+
+vfprintf($fp, $format2,$arg2);
+fprintf($fp, "\n");
+
+vfprintf($fp, $format3,$arg3);
+fprintf($fp, "\n");
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+
+unlink($data_file);
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : basic functionality - using char format ***
+A
+A B
+A B C
+===DONE===
+
+
diff --git a/ext/standard/tests/strings/vfprintf_basic6.phpt b/ext/standard/tests/strings/vfprintf_basic6.phpt
new file mode 100644
index 000000000..ed88a2832
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_basic6.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Test vfprintf() function : basic functionality - exponential format
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+
+echo "*** Testing vfprintf() : basic functionality - using exponential format ***\n";
+
+// Initialise all required variables
+$format = "format";
+$format1 = "%e";
+$format2 = "%e %e";
+$format3 = "%e %e %e";
+$arg1 = array(1000);
+$arg2 = array(1000,2000);
+$arg3 = array(1000,2000,3000);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+vfprintf($fp, $format1,$arg1);
+fprintf($fp, "\n");
+
+vfprintf($fp, $format2,$arg2);
+fprintf($fp, "\n");
+
+vfprintf($fp, $format3,$arg3);
+fprintf($fp, "\n");
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : basic functionality - using exponential format ***
+1.000000e+3
+1.000000e+3 2.000000e+3
+1.000000e+3 2.000000e+3 3.000000e+3
+===DONE===
+
diff --git a/ext/standard/tests/strings/vfprintf_basic7.phpt b/ext/standard/tests/strings/vfprintf_basic7.phpt
new file mode 100644
index 000000000..45544a39e
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_basic7.phpt
@@ -0,0 +1,53 @@
+--TEST--
+Test vfprintf() function : basic functionality - unsigned format
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+echo "*** Testing vfprintf() : basic functionality - using unsigned format ***\n";
+
+// Initialise all required variables
+$format = "format";
+$format1 = "%u";
+$format2 = "%u %u";
+$format3 = "%u %u %u";
+$arg1 = array(-1111);
+$arg2 = array(-1111,-1234567);
+$arg3 = array(-1111,-1234567,-2345432);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+vfprintf($fp, $format1,$arg1);
+fprintf($fp, "\n");
+
+vfprintf($fp, $format2,$arg2);
+fprintf($fp, "\n");
+
+vfprintf($fp, $format3,$arg3);
+fprintf($fp, "\n");
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : basic functionality - using unsigned format ***
+4294966185
+4294966185 4293732729
+4294966185 4293732729 4292621864
+===DONE===
+
+
diff --git a/ext/standard/tests/strings/vfprintf_basic7_64bit.phpt b/ext/standard/tests/strings/vfprintf_basic7_64bit.phpt
new file mode 100644
index 000000000..77fae2c09
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_basic7_64bit.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test vfprintf() function : basic functionality - unsigned format
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+echo "*** Testing vfprintf() : basic functionality - using unsigned format ***\n";
+
+// Initialise all required variables
+$format = "format";
+$format1 = "%u";
+$format2 = "%u %u";
+$format3 = "%u %u %u";
+$arg1 = array(-1111);
+$arg2 = array(-1111,-1234567);
+$arg3 = array(-1111,-1234567,-2345432);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+vfprintf($fp, $format1,$arg1);
+fprintf($fp, "\n");
+
+vfprintf($fp, $format2,$arg2);
+fprintf($fp, "\n");
+
+vfprintf($fp, $format3,$arg3);
+fprintf($fp, "\n");
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : basic functionality - using unsigned format ***
+18446744073709550505
+18446744073709550505 18446744073708317049
+18446744073709550505 18446744073708317049 18446744073707206184
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_basic8.phpt b/ext/standard/tests/strings/vfprintf_basic8.phpt
new file mode 100644
index 000000000..6fe215154
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_basic8.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test vfprintf() function : basic functionality - octal format
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+echo "*** Testing vfprintf() : basic functionality - using octal format ***\n";
+
+// Initialise all required variables
+$format = "format";
+$format1 = "%o";
+$format2 = "%o %o";
+$format3 = "%o %o %o";
+$arg1 = array(021);
+$arg2 = array(021,0347);
+$arg3 = array(021,0347,05678);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+vfprintf($fp, $format1,$arg1);
+fprintf($fp, "\n");
+
+vfprintf($fp, $format2,$arg2);
+fprintf($fp, "\n");
+
+vfprintf($fp, $format3,$arg3);
+fprintf($fp, "\n");
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+
+unlink($data_file);
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : basic functionality - using octal format ***
+21
+21 347
+21 347 567
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_basic9.phpt b/ext/standard/tests/strings/vfprintf_basic9.phpt
new file mode 100644
index 000000000..8294c8482
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_basic9.phpt
@@ -0,0 +1,60 @@
+--TEST--
+Test vfprintf) function : basic functionality - hexadecimal format
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+echo "*** Testing vfprintf) : basic functionality - using hexadecimal format ***\n";
+
+// Initialising different format strings
+$format = "format";
+$format1 = "%x";
+$format2 = "%x %x";
+$format3 = "%x %x %x";
+
+$format11 = "%X";
+$format22 = "%X %X";
+$format33 = "%X %X %X";
+
+$arg1 = array(11);
+$arg2 = array(11,132);
+$arg3 = array(11,132,177);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+vfprintf($fp, $format1, $arg1);
+fprintf($fp, "\n");
+vfprintf($fp, $format11, $arg1);
+fprintf($fp, "\n");
+
+vfprintf($fp, $format2, $arg2);
+fprintf($fp, "\n");
+vfprintf($fp, $format22, $arg2);
+fprintf($fp, "\n");
+
+vfprintf($fp, $format3, $arg3);
+fprintf($fp, "\n");
+vfprintf($fp, $format33, $arg3);
+fprintf($fp, "\n");
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+
+unlink($data_file);
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf) : basic functionality - using hexadecimal format ***
+b
+B
+b 84
+B 84
+b 84 b1
+B 84 B1
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_error1.phpt b/ext/standard/tests/strings/vfprintf_error1.phpt
new file mode 100644
index 000000000..b8cc17097
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_error1.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test vfprintf() function : error conditions (more than expected arguments)
+--CREDITS--
+Felix De Vliegher <felix.devliegher@gmail.com>
+--INI--
+precision=14
+--FILE--
+<?php
+/* Prototype : int vfprintf(resource stream, string format, array args)
+ * Description: Output a formatted string into a stream
+ * Source code: ext/standard/formatted_print.c
+ * Alias to functions:
+ */
+
+// Open handle
+$file = 'vfprintf_test.txt';
+$fp = fopen( $file, "a+" );
+
+echo "\n-- Testing vfprintf() function with more than expected no. of arguments --\n";
+$format = 'string_val';
+$args = array( 1, 2 );
+$extra_arg = 10;
+var_dump( vfprintf( $fp, $format, $args, $extra_arg ) );
+var_dump( vfprintf( $fp, "Foo %d", array(6), "bar" ) );
+
+// Close handle
+fclose($fp);
+
+?>
+===DONE===
+--CLEAN--
+<?php
+
+$file = 'vfprintf_text.txt';
+unlink( $file );
+
+?>
+--EXPECTF--
+-- Testing vfprintf() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for vfprintf() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for vfprintf() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_error2.phpt b/ext/standard/tests/strings/vfprintf_error2.phpt
new file mode 100644
index 000000000..981b1a745
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_error2.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Test vfprintf() function : error conditions (less than expected arguments)
+--CREDITS--
+Felix De Vliegher <felix.devliegher@gmail.com>
+--INI--
+precision=14
+--FILE--
+<?php
+/* Prototype : int vfprintf(resource stream, string format, array args)
+ * Description: Output a formatted string into a stream
+ * Source code: ext/standard/formatted_print.c
+ * Alias to functions:
+ */
+
+// Open handle
+$file = 'vfprintf_test.txt';
+$fp = fopen( $file, "a+" );
+
+echo "\n-- Testing vfprintf() function with less than expected no. of arguments --\n";
+$format = 'string_val';
+var_dump( vfprintf($fp, $format) );
+var_dump( vfprintf( $fp ) );
+var_dump( vfprintf() );
+
+// Close handle
+fclose($fp);
+
+?>
+===DONE===
+--CLEAN--
+<?php
+
+$file = 'vfprintf_text.txt';
+unlink( $file );
+
+?>
+--EXPECTF--
+-- Testing vfprintf() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for vfprintf() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for vfprintf() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for vfprintf() in %s on line %d
+NULL
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_error3.phpt b/ext/standard/tests/strings/vfprintf_error3.phpt
new file mode 100644
index 000000000..3edc06807
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_error3.phpt
@@ -0,0 +1,54 @@
+--TEST--
+Test vfprintf() function : error conditions (wrong argument types)
+--CREDITS--
+Felix De Vliegher <felix.devliegher@gmail.com>
+--INI--
+precision=14
+--FILE--
+<?php
+/* Prototype : int vfprintf(resource stream, string format, array args)
+ * Description: Output a formatted string into a stream
+ * Source code: ext/standard/formatted_print.c
+ * Alias to functions:
+ */
+
+// Open handle
+$file = 'vfprintf_test.txt';
+$fp = fopen( $file, "a+" );
+
+echo "\n-- Testing vfprintf() function with wrong variable types as argument --\n";
+var_dump( vfprintf( $fp, array( 'foo %d', 'bar %s' ), 3.55552 ) );
+
+rewind( $fp );
+var_dump( stream_get_contents( $fp ) );
+ftruncate( $fp, 0 );
+rewind( $fp );
+
+var_dump( vfprintf( $fp, "Foo %y fake", "not available" ) );
+
+rewind( $fp );
+var_dump( stream_get_contents( $fp ) );
+ftruncate( $fp, 0 );
+rewind( $fp );
+
+// Close handle
+fclose( $fp );
+
+?>
+===DONE===
+--CLEAN--
+<?php
+
+$file = 'vfprintf_text.txt';
+unlink( $file );
+
+?>
+--EXPECTF--
+-- Testing vfprintf() function with wrong variable types as argument --
+
+Notice: Array to string conversion in %s on line %d
+int(5)
+string(5) "Array"
+int(9)
+string(9) "Foo fake"
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_error4.phpt b/ext/standard/tests/strings/vfprintf_error4.phpt
new file mode 100644
index 000000000..e23507a17
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_error4.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test vfprintf() function : error conditions (various conditions)
+--CREDITS--
+Felix De Vliegher <felix.devliegher@gmail.com>
+--INI--
+precision=14
+--FILE--
+<?php
+/* Prototype : int vfprintf(resource stream, string format, array args)
+ * Description: Output a formatted string into a stream
+ * Source code: ext/standard/formatted_print.c
+ * Alias to functions:
+ */
+
+// Open handle
+$file = 'vfprintf_test.txt';
+$fp = fopen( $file, "a+" );
+
+echo "\n-- Testing vfprintf() function with other strangeties --\n";
+var_dump( vfprintf( 'foo', 'bar', array( 'baz' ) ) );
+var_dump( vfprintf( $fp, 'Foo %$c-0202Sd', array( 2 ) ) );
+
+// Close handle
+fclose( $fp );
+
+?>
+===DONE===
+--CLEAN--
+<?php
+
+$file = 'vfprintf_text.txt';
+unlink( $file );
+
+?>
+--EXPECTF--
+-- Testing vfprintf() function with other strangeties --
+
+Warning: vfprintf(): supplied argument is not a valid stream resource in %s on line %d
+bool(false)
+
+Warning: vfprintf(): Argument number must be greater than zero in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation1.phpt b/ext/standard/tests/strings/vfprintf_variation1.phpt
new file mode 100644
index 000000000..316e55ce2
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation1.phpt
@@ -0,0 +1,86 @@
+--TEST--
+Test vfprintf() function : variation functionality
+--CREDITS--
+Felix De Vliegher <felix.devliegher@gmail.com>
+--INI--
+precision=14
+--FILE--
+<?php
+/* Prototype : int vfprintf(resource stream, string format, array args)
+ * Description: Output a formatted string into a stream
+ * Source code: ext/standard/formatted_print.c
+ * Alias to functions:
+ */
+
+echo "*** Testing vfprintf() : variation functionality ***\n";
+
+// Open handle
+$file = 'vfprintf_test.txt';
+$fp = fopen( $file, 'a+' );
+
+$funset = fopen( __FILE__, 'r' );
+unset( $funset );
+
+class FooClass
+{
+ public function __toString()
+ {
+ return "Object";
+ }
+}
+
+// Output facilitating function
+function writeAndDump($fp, $format, $args)
+{
+ ftruncate( $fp, 0 );
+ $length = vfprintf( $fp, $format, $args );
+ rewind( $fp );
+ $content = stream_get_contents( $fp );
+ var_dump( $content );
+ var_dump( $length );
+}
+
+// Test vfprintf()
+writeAndDump( $fp, "format", null );
+writeAndDump( $fp, "Foo is %d and %s", array( 30, 'bar' ) );
+writeAndDump( $fp, "Foobar testing", array() );
+writeAndDump( $fp, "%s %s %s", array( 'bar', 'bar', 'bar' ) );
+writeAndDump( $fp, "%02d", array( 50 ) );
+writeAndDump( $fp, "", array() );
+writeAndDump( $fp, "Testing %b %d %f %o %s %x %X", array( 9, 6, 2.5502, 24, "foobar", 15, 65 ) );
+@writeAndDump( $funset, "Foo with %s", array( 'string' ) );
+@writeAndDump( new FooClass(), "Foo with %s", array( 'string' ) );
+
+// Close handle
+fclose( $fp );
+
+?>
+===DONE===
+--CLEAN--
+<?php
+
+$file = 'vfprintf_test.txt';
+unlink( $file );
+
+?>
+--EXPECTF--
+*** Testing vfprintf() : variation functionality ***
+string(6) "format"
+int(6)
+string(17) "Foo is 30 and bar"
+int(17)
+string(14) "Foobar testing"
+int(14)
+string(11) "bar bar bar"
+int(11)
+string(2) "50"
+int(2)
+string(0) ""
+int(0)
+string(38) "Testing 1001 6 2.550200 30 foobar f 41"
+int(38)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation10.phpt b/ext/standard/tests/strings/vfprintf_variation10.phpt
new file mode 100644
index 000000000..e2c066eff
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation10.phpt
Binary files differ
diff --git a/ext/standard/tests/strings/vfprintf_variation11.phpt b/ext/standard/tests/strings/vfprintf_variation11.phpt
new file mode 100644
index 000000000..45f1f61fa
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation11.phpt
@@ -0,0 +1,88 @@
+--TEST--
+Test vfprintf() function : usage variations - octal formats with octal values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vfprintf() when different octal formats and octal values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vfprintf() : octal formats with octal values ***\n";
+
+// defining array of octal formats
+$formats = array(
+ "%o",
+ "%+o %-o %O",
+ "%lo %Lo, %4o %-4o",
+ "%10.4o %-10.4o %04o %04.4o",
+ "%'#2o %'2o %'$2o %'_2o",
+ "%o %o %o %o",
+ "%% %%o %10 o%",
+ '%3$o %4$o %1$o %2$o'
+);
+
+// Arrays of octal values for the format defined in $format.
+// Each sub array contains octal values which correspond to each format string in $format
+$args_array = array(
+ array(00),
+ array(-01, 01, +022),
+ array(-020000000000, 020000000000, 017777777777, -017777777777),
+ array(0123456, 012345678, -01234567, 01234567),
+ array(0111, 02222, -0333333, -044444444),
+ array(0x123b, 0xfAb, 0123, 01293),
+ array(01234, 05678, -01234, 02345),
+ array(03, 04, 01, 02)
+
+);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+// looping to test vfprintf() with different octal formats from the above $formats array
+// and with octal values from the above $args_array array
+$counter = 1;
+foreach($formats as $format) {
+ fprintf($fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp, $format, $args_array[$counter-1]);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : octal formats with octal values ***
+
+-- Iteration 1 --
+0
+-- Iteration 2 --
+37777777777 1
+-- Iteration 3 --
+20000000000 o, 17777777777 20000000001
+-- Iteration 4 --
+ 37776543211 0000
+-- Iteration 5 --
+111 2222 37777444445 37733333334
+-- Iteration 6 --
+11073 7653 123 12
+-- Iteration 7 --
+% %o o
+-- Iteration 8 --
+1 2 3 4
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation11_64bit.phpt b/ext/standard/tests/strings/vfprintf_variation11_64bit.phpt
new file mode 100644
index 000000000..d6549846b
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation11_64bit.phpt
@@ -0,0 +1,88 @@
+--TEST--
+Test vfprintf() function : usage variations - octal formats with octal values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vfprintf() when different octal formats and octal values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vfprintf() : octal formats with octal values ***\n";
+
+// defining array of octal formats
+$formats = array(
+ "%o",
+ "%+o %-o %O",
+ "%lo %Lo, %4o %-4o",
+ "%10.4o %-10.4o %04o %04.4o",
+ "%'#2o %'2o %'$2o %'_2o",
+ "%o %o %o %o",
+ "%% %%o %10 o%",
+ '%3$o %4$o %1$o %2$o'
+);
+
+// Arrays of octal values for the format defined in $format.
+// Each sub array contains octal values which correspond to each format string in $format
+$args_array = array(
+ array(00),
+ array(-01, 01, +022),
+ array(-020000000000, 020000000000, 017777777777, -017777777777),
+ array(0123456, 012345678, -01234567, 01234567),
+ array(0111, 02222, -0333333, -044444444),
+ array(0x123b, 0xfAb, 0123, 01293),
+ array(01234, 05678, -01234, 02345),
+ array(03, 04, 01, 02)
+
+);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+// looping to test vfprintf() with different octal formats from the above $formats array
+// and with octal values from the above $args_array array
+$counter = 1;
+foreach($formats as $format) {
+ fprintf($fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp, $format, $args_array[$counter-1]);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : octal formats with octal values ***
+
+-- Iteration 1 --
+0
+-- Iteration 2 --
+1777777777777777777777 1
+-- Iteration 3 --
+1777777777760000000000 o, 17777777777 1777777777760000000001
+-- Iteration 4 --
+ 1777777777777776543211 0000
+-- Iteration 5 --
+111 2222 1777777777777777444445 1777777777777733333334
+-- Iteration 6 --
+11073 7653 123 12
+-- Iteration 7 --
+% %o o
+-- Iteration 8 --
+1 2 3 4
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation12.phpt b/ext/standard/tests/strings/vfprintf_variation12.phpt
new file mode 100644
index 000000000..e95fd5bb7
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation12.phpt
@@ -0,0 +1,125 @@
+--TEST--
+Test vfprintf() function : usage variations - octal formats with non-octal values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vfprintf() when different octal formats and non-octal values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vfprintf() : octal formats and non-octal values ***\n";
+
+// defining array of octal formats
+$formats =
+ '%o %+o %-o
+ %lo %Lo %4o %-4o
+ %10.4o %-10.4o %.4o
+ %\'#2o %\'2o %\'$2o %\'_2o
+ %3$o %4$o %1$o %2$o';
+
+// Arrays of non octal values for the format defined in $format.
+// Each sub array contains non octal values which correspond to each format in $format
+$args_array = array(
+
+ // array of float values
+ array(2.2, .2, 10.2,
+ 123456.234, 123456.234, -1234.6789, +1234.6789,
+ 2e10, +2e12, 22e+12,
+ 12345.780, 12.000000011111, -12.00000111111, -123456.234,
+ 3.33, +4.44, 1.11,-2.22 ),
+
+ // array of int values
+ array(2, -2, +2,
+ 123456, 123456234, -12346789, +12346789,
+ 123200, +20000, 22212,
+ 12345780, 1211111, -12111111, -12345634,
+ 3, +4, 1,-2 ),
+
+ // array of strings
+ array(" ", ' ', 'hello',
+ '123hello', "123hello", '-123hello', '+123hello',
+ "\12345678hello", "-\12345678hello", 'h123456ello',
+ "1234hello", "hello\0world", "NULL", "true",
+ "3", "4", '1', '2'),
+
+ // different arrays
+ array( array(0), array(1, 2), array(-1, -1),
+ array("123"), array('123'), array('-123'), array("-123"),
+ array(true), array(false), array(FALSE),
+ array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
+ array("3"), array("4"), array("1"), array("2") ),
+
+ // array of boolean data
+ array( true, TRUE, false,
+ TRUE, 0, FALSE, 1,
+ true, false, TRUE,
+ 0, 1, 1, 0,
+ 1, TRUE, 0, FALSE),
+
+);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+// looping to test vfprintf() with different octal formats from the above $format array
+// and with non-octal values from the above $args_array array
+$counter = 1;
+foreach($args_array as $args) {
+ fprintf($fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp, $formats, $args);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : octal formats and non-octal values ***
+
+-- Iteration 1 --
+2 0 12
+ 361100 o 37777775456 2322
+
+ 30071 14 37777777764 37777416700
+ 12 361100 2 0
+-- Iteration 2 --
+2 37777777776 2
+ 361100 o 37720715133 57062645
+
+ 57060664 4475347 37721631371 37720717336
+ 2 361100 2 37777777776
+-- Iteration 3 --
+0 0 0
+ 173 o 37777777605 173
+
+ 2322 0 $0 _0
+ 0 173 0 0
+-- Iteration 4 --
+1 1 1
+ 1 o 1 1
+
+ #1 1 $1 _1
+ 1 1 1 1
+-- Iteration 5 --
+1 1 0
+ 1 o 0 1
+
+ #0 1 $1 _0
+ 0 1 1 1
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation12_64bit.phpt b/ext/standard/tests/strings/vfprintf_variation12_64bit.phpt
new file mode 100644
index 000000000..a1e57bc42
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation12_64bit.phpt
@@ -0,0 +1,125 @@
+--TEST--
+Test vfprintf() function : usage variations - octal formats with non-octal values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vfprintf() when different octal formats and non-octal values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vfprintf() : octal formats and non-octal values ***\n";
+
+// defining array of octal formats
+$formats =
+ '%o %+o %-o
+ %lo %Lo %4o %-4o
+ %10.4o %-10.4o %.4o
+ %\'#2o %\'2o %\'$2o %\'_2o
+ %3$o %4$o %1$o %2$o';
+
+// Arrays of non octal values for the format defined in $format.
+// Each sub array contains non octal values which correspond to each format in $format
+$args_array = array(
+
+ // array of float values
+ array(2.2, .2, 10.2,
+ 123456.234, 123456.234, -1234.6789, +1234.6789,
+ 2e10, +2e12, 22e+12,
+ 12345.780, 12.000000011111, -12.00000111111, -123456.234,
+ 3.33, +4.44, 1.11,-2.22 ),
+
+ // array of int values
+ array(2, -2, +2,
+ 123456, 123456234, -12346789, +12346789,
+ 123200, +20000, 22212,
+ 12345780, 1211111, -12111111, -12345634,
+ 3, +4, 1,-2 ),
+
+ // array of strings
+ array(" ", ' ', 'hello',
+ '123hello', "123hello", '-123hello', '+123hello',
+ "\12345678hello", "-\12345678hello", 'h123456ello',
+ "1234hello", "hello\0world", "NULL", "true",
+ "3", "4", '1', '2'),
+
+ // different arrays
+ array( array(0), array(1, 2), array(-1, -1),
+ array("123"), array('123'), array('-123'), array("-123"),
+ array(true), array(false), array(FALSE),
+ array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
+ array("3"), array("4"), array("1"), array("2") ),
+
+ // array of boolean data
+ array( true, TRUE, false,
+ TRUE, 0, FALSE, 1,
+ true, false, TRUE,
+ 0, 1, 1, 0,
+ 1, TRUE, 0, FALSE),
+
+);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+// looping to test vfprintf() with different octal formats from the above $format array
+// and with non-octal values from the above $args_array array
+$counter = 1;
+foreach($args_array as $args) {
+ fprintf($fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp, $formats, $args);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : octal formats and non-octal values ***
+
+-- Iteration 1 --
+2 0 12
+ 361100 o 1777777777777777775456 2322
+
+ 30071 14 1777777777777777777764 1777777777777777416700
+ 12 361100 2 0
+-- Iteration 2 --
+2 1777777777777777777776 2
+ 361100 o 1777777777777720715133 57062645
+
+ 57060664 4475347 1777777777777721631371 1777777777777720717336
+ 2 361100 2 1777777777777777777776
+-- Iteration 3 --
+0 0 0
+ 173 o 1777777777777777777605 173
+
+ 2322 0 $0 _0
+ 0 173 0 0
+-- Iteration 4 --
+1 1 1
+ 1 o 1 1
+
+ #1 1 $1 _1
+ 1 1 1 1
+-- Iteration 5 --
+1 1 0
+ 1 o 0 1
+
+ #0 1 $1 _0
+ 0 1 1 1
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation13.phpt b/ext/standard/tests/strings/vfprintf_variation13.phpt
new file mode 100644
index 000000000..245feb5a2
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation13.phpt
@@ -0,0 +1,88 @@
+--TEST--
+Test vfprintf() function : usage variations - hexa formats with hexa values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vfprintf() when different hexa formats and hexa values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vfprintf() : hexa formats with hexa values ***\n";
+
+// defining array of different hexa formats
+$formats = array(
+ "%x",
+ "%+x %-x %X",
+ "%lx %Lx, %4x %-4x",
+ "%10.4x %-10.4x %04x %04.4x",
+ "%'#2x %'2x %'$2x %'_2x",
+ "%x %x %x %x",
+ "% %%x x%",
+ '%3$x %4$x %1$x %2$x'
+);
+
+// Arrays of hexa values for the format defined in $format.
+// Each sub array contains hexa values which correspond to each format string in $format
+$args_array = array(
+ array(0x0),
+ array(-0x1, 0x1, +0x22),
+ array(0x7FFFFFFF, -0x7fffffff, +0x7000000, -0x80000000),
+ array(123456, 12345678, -1234567, 1234567),
+ array(1, 0x2222, 0333333, -0x44444444),
+ array(0x123b, 0xfAb, "0xaxz", 01293),
+ array(0x1234, 0x34, 0x2ff),
+ array(0x3, 0x4, 0x1, 0x2)
+
+);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+// looping to test vfprintf() with different char octal from the above $format array
+// and with octal values from the above $args_array array
+$counter = 1;
+foreach($formats as $format) {
+ fprintf($fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp, $format, $args_array[$counter-1]);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : hexa formats with hexa values ***
+
+-- Iteration 1 --
+0
+-- Iteration 2 --
+ffffffff 1 22
+-- Iteration 3 --
+7fffffff x, 7000000 80000000
+-- Iteration 4 --
+ ffed2979 0000
+-- Iteration 5 --
+#1 2222 1b6db bbbbbbbc
+-- Iteration 6 --
+123b fab 0 a
+-- Iteration 7 --
+%34 x
+-- Iteration 8 --
+1 2 3 4
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation13_64bit.phpt b/ext/standard/tests/strings/vfprintf_variation13_64bit.phpt
new file mode 100644
index 000000000..bf6fcb5ec
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation13_64bit.phpt
@@ -0,0 +1,88 @@
+--TEST--
+Test vfprintf() function : usage variations - hexa formats with hexa values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vfprintf() when different hexa formats and hexa values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vfprintf() : hexa formats with hexa values ***\n";
+
+// defining array of different hexa formats
+$formats = array(
+ "%x",
+ "%+x %-x %X",
+ "%lx %Lx, %4x %-4x",
+ "%10.4x %-10.4x %04x %04.4x",
+ "%'#2x %'2x %'$2x %'_2x",
+ "%x %x %x %x",
+ "% %%x x%",
+ '%3$x %4$x %1$x %2$x'
+);
+
+// Arrays of hexa values for the format defined in $format.
+// Each sub array contains hexa values which correspond to each format string in $format
+$args_array = array(
+ array(0x0),
+ array(-0x1, 0x1, +0x22),
+ array(0x7FFFFFFF, -0x7fffffff, +0x7000000, -0x80000000),
+ array(123456, 12345678, -1234567, 1234567),
+ array(1, 0x2222, 0333333, -0x44444444),
+ array(0x123b, 0xfAb, "0xaxz", 01293),
+ array(0x1234, 0x34, 0x2ff),
+ array(0x3, 0x4, 0x1, 0x2)
+
+);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+// looping to test vfprintf() with different char octal from the above $format array
+// and with octal values from the above $args_array array
+$counter = 1;
+foreach($formats as $format) {
+ fprintf($fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp, $format, $args_array[$counter-1]);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : hexa formats with hexa values ***
+
+-- Iteration 1 --
+0
+-- Iteration 2 --
+ffffffffffffffff 1 22
+-- Iteration 3 --
+7fffffff x, 7000000 ffffffff80000000
+-- Iteration 4 --
+ ffffffffffed2979 0000
+-- Iteration 5 --
+#1 2222 1b6db ffffffffbbbbbbbc
+-- Iteration 6 --
+123b fab 0 a
+-- Iteration 7 --
+%34 x
+-- Iteration 8 --
+1 2 3 4
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation14.phpt b/ext/standard/tests/strings/vfprintf_variation14.phpt
new file mode 100644
index 000000000..c714d8975
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation14.phpt
@@ -0,0 +1,125 @@
+--TEST--
+Test vfprintf() function : usage variations - hexa formats with non-hexa values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vfprintf() when different hexa formats and non-hexa values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vfprintf() : hexa formats and non-hexa values ***\n";
+
+// defining array of different hexa formats
+$formats =
+ '%x %+x %-x
+ %lx %Lx %4x %-4x
+ %10.4x %-10.4x %.4x
+ %\'#2x %\'2x %\'$2x %\'_2x
+ %3$x %4$x %1$x %2$x';
+
+// Arrays of non hexa values for the format defined in $format.
+// Each sub array contains non hexa values which correspond to each format in $format
+$args_array = array(
+
+ // array of float values
+ array(2.2, .2, 10.2,
+ 123456.234, 123456.234, -1234.6789, +1234.6789,
+ 2e10, +2e12, 22e+12,
+ 12345.780, 12.000000011111, -12.00000111111, -123456.234,
+ 3.33, +4.44, 1.11,-2.22 ),
+
+ // array of int values
+ array(2, -2, +2,
+ 123456, 123456234, -12346789, +12346789,
+ 123200, +20000, 22212,
+ 12345780, 1211111, -12111111, -12345634,
+ 3, +4, 1,-2 ),
+
+ // array of strings
+ array(" ", ' ', 'hello',
+ '123hello', "123hello", '-123hello', '+123hello',
+ "\12345678hello", "-\12345678hello", 'h123456ello',
+ "1234hello", "hello\0world", "NULL", "true",
+ "3", "4", '1', '2'),
+
+ // different arrays
+ array( array(0), array(1, 2), array(-1, -1),
+ array("123"), array('123'), array('-123'), array("-123"),
+ array(true), array(TRUE), array(FALSE),
+ array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
+ array("3"), array("4"), array("1"), array("2") ),
+
+ // array of boolean data
+ array( true, TRUE, false,
+ TRUE, 0, FALSE, 1,
+ true, TRUE, FALSE,
+ 0, 1, 1, 0,
+ 1, TRUE, 0, FALSE),
+
+);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+// looping to test vfprintf() with different hexa formats from the above $format array
+// and with non-hexa values from the above $args_array array
+$counter = 1;
+foreach($args_array as $args) {
+ fprintf($fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp, $formats, $args);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : hexa formats and non-hexa values ***
+
+-- Iteration 1 --
+2 0 a
+ 1e240 x fffffb2e 4d2
+
+ 3039 c fffffff4 fffe1dc0
+ a 1e240 2 0
+-- Iteration 2 --
+2 fffffffe 2
+ 1e240 x ff439a5b bc65a5
+
+ bc61b4 127ae7 ff4732f9 ff439ede
+ 2 1e240 2 fffffffe
+-- Iteration 3 --
+0 0 0
+ 7b x ffffff85 7b
+
+ 4d2 0 $0 _0
+ 0 7b 0 0
+-- Iteration 4 --
+1 1 1
+ 1 x 1 1
+
+ #1 1 $1 _1
+ 1 1 1 1
+-- Iteration 5 --
+1 1 0
+ 1 x 0 1
+
+ #0 1 $1 _0
+ 0 1 1 1
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation14_64bit.phpt b/ext/standard/tests/strings/vfprintf_variation14_64bit.phpt
new file mode 100644
index 000000000..930ee3d03
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation14_64bit.phpt
@@ -0,0 +1,125 @@
+--TEST--
+Test vfprintf() function : usage variations - hexa formats with non-hexa values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vfprintf() when different hexa formats and non-hexa values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vfprintf() : hexa formats and non-hexa values ***\n";
+
+// defining array of different hexa formats
+$formats =
+ '%x %+x %-x
+ %lx %Lx %4x %-4x
+ %10.4x %-10.4x %.4x
+ %\'#2x %\'2x %\'$2x %\'_2x
+ %3$x %4$x %1$x %2$x';
+
+// Arrays of non hexa values for the format defined in $format.
+// Each sub array contains non hexa values which correspond to each format in $format
+$args_array = array(
+
+ // array of float values
+ array(2.2, .2, 10.2,
+ 123456.234, 123456.234, -1234.6789, +1234.6789,
+ 2e10, +2e12, 22e+12,
+ 12345.780, 12.000000011111, -12.00000111111, -123456.234,
+ 3.33, +4.44, 1.11,-2.22 ),
+
+ // array of int values
+ array(2, -2, +2,
+ 123456, 123456234, -12346789, +12346789,
+ 123200, +20000, 22212,
+ 12345780, 1211111, -12111111, -12345634,
+ 3, +4, 1,-2 ),
+
+ // array of strings
+ array(" ", ' ', 'hello',
+ '123hello', "123hello", '-123hello', '+123hello',
+ "\12345678hello", "-\12345678hello", 'h123456ello',
+ "1234hello", "hello\0world", "NULL", "true",
+ "3", "4", '1', '2'),
+
+ // different arrays
+ array( array(0), array(1, 2), array(-1, -1),
+ array("123"), array('123'), array('-123'), array("-123"),
+ array(true), array(TRUE), array(FALSE),
+ array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
+ array("3"), array("4"), array("1"), array("2") ),
+
+ // array of boolean data
+ array( true, TRUE, false,
+ TRUE, 0, FALSE, 1,
+ true, TRUE, FALSE,
+ 0, 1, 1, 0,
+ 1, TRUE, 0, FALSE),
+
+);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+// looping to test vfprintf() with different hexa formats from the above $format array
+// and with non-hexa values from the above $args_array array
+$counter = 1;
+foreach($args_array as $args) {
+ fprintf($fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp, $formats, $args);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : hexa formats and non-hexa values ***
+
+-- Iteration 1 --
+2 0 a
+ 1e240 x fffffffffffffb2e 4d2
+
+ 3039 c fffffffffffffff4 fffffffffffe1dc0
+ a 1e240 2 0
+-- Iteration 2 --
+2 fffffffffffffffe 2
+ 1e240 x ffffffffff439a5b bc65a5
+
+ bc61b4 127ae7 ffffffffff4732f9 ffffffffff439ede
+ 2 1e240 2 fffffffffffffffe
+-- Iteration 3 --
+0 0 0
+ 7b x ffffffffffffff85 7b
+
+ 4d2 0 $0 _0
+ 0 7b 0 0
+-- Iteration 4 --
+1 1 1
+ 1 x 1 1
+
+ #1 1 $1 _1
+ 1 1 1 1
+-- Iteration 5 --
+1 1 0
+ 1 x 0 1
+
+ #0 1 $1 _0
+ 0 1 1 1
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation15.phpt b/ext/standard/tests/strings/vfprintf_variation15.phpt
new file mode 100644
index 000000000..95667b5a8
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation15.phpt
@@ -0,0 +1,75 @@
+--TEST--
+Test vfprintf() function : usage variations - unsigned formats with unsigned values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vfprintf() when different unsigned formats and unsigned values
+ * are passed to the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vfprintf() : unsigned formats and unsigned values ***\n";
+
+// defining array of unsigned formats
+$formats = array(
+ '%u %+u %-u',
+ '%lu %Lu %4u %-4u',
+ '%10.4u %-10.4u %.4u',
+ '%\'#2u %\'2u %\'$2u %\'_2u',
+ '%3$u %4$u %1$u %2$u'
+);
+
+// Arrays of unsigned values for the format defined in $format.
+// Each sub array contains unsigned values which correspond to each format string in $format
+$args_array = array(
+ array(1234567, 01234567, 0 ),
+ array(12345678900, 12345678900, 1234, 12345),
+ array("1234000", 10.1234567e10, 1.2e2),
+ array(1, 0, 00, "10_"),
+ array(3, 4, 1, 2)
+);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+// looping to test vfprintf() with different unsigned formats from the above $format array
+// and with signed and other types of values from the above $args_array array
+$counter = 1;
+foreach($formats as $format) {
+ fprintf($fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp, $format, $args_array[$counter-1]);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : unsigned formats and unsigned values ***
+
+-- Iteration 1 --
+1234567 342391 0
+-- Iteration 2 --
+3755744308 u 1234 12345
+-- Iteration 3 --
+ 1234000 2450319192 120
+-- Iteration 4 --
+#1 0 $0 10
+-- Iteration 5 --
+1 2 3 4
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation15_64bit.phpt b/ext/standard/tests/strings/vfprintf_variation15_64bit.phpt
new file mode 100644
index 000000000..d2e331c2d
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation15_64bit.phpt
@@ -0,0 +1,75 @@
+--TEST--
+Test vfprintf() function : usage variations - unsigned formats with unsigned values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vfprintf() when different unsigned formats and unsigned values
+ * are passed to the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vfprintf() : unsigned formats and unsigned values ***\n";
+
+// defining array of unsigned formats
+$formats = array(
+ '%u %+u %-u',
+ '%lu %Lu %4u %-4u',
+ '%10.4u %-10.4u %.4u',
+ '%\'#2u %\'2u %\'$2u %\'_2u',
+ '%3$u %4$u %1$u %2$u'
+);
+
+// Arrays of unsigned values for the format defined in $format.
+// Each sub array contains unsigned values which correspond to each format string in $format
+$args_array = array(
+ array(1234567, 01234567, 0 ),
+ array(12345678900, 12345678900, 1234, 12345),
+ array("1234000", 10.1234567e10, 1.2e2),
+ array(1, 0, 00, "10_"),
+ array(3, 4, 1, 2)
+);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+// looping to test vfprintf() with different unsigned formats from the above $format array
+// and with signed and other types of values from the above $args_array array
+$counter = 1;
+foreach($formats as $format) {
+ fprintf($fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp, $format, $args_array[$counter-1]);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : unsigned formats and unsigned values ***
+
+-- Iteration 1 --
+1234567 342391 0
+-- Iteration 2 --
+12345678900 u 1234 12345
+-- Iteration 3 --
+ 1234000 101234567000 120
+-- Iteration 4 --
+#1 0 $0 10
+-- Iteration 5 --
+1 2 3 4
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation16.phpt b/ext/standard/tests/strings/vfprintf_variation16.phpt
new file mode 100644
index 000000000..2f403948a
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation16.phpt
@@ -0,0 +1,112 @@
+--TEST--
+Test vfprintf() function : usage variations - unsigned formats with signed and other types of values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vfprintf() when different unsigned formats and signed values and other types of values
+ * are passed to the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vfprintf() : unsigned formats and signed & other types of values ***\n";
+
+// defining array of unsigned formats
+$formats =
+ '%u %+u %-u
+ %lu %Lu %4u %-4u
+ %10.4u %-10.4u %.4u
+ %\'#2u %\'2u %\'$2u %\'_2u
+ %3$u %4$u %1$u %2$u';
+
+// Arrays of signed and other type of values for the format defined in $format.
+// Each sub array contains signed values which correspond to each format in $format
+$args_array = array(
+
+ // array of float values
+ array(+2.2, +.2, +10.2,
+ +123456.234, +123456.234, +1234.6789,
+ +2e10, +2e12, +22e+12,
+ +12345.780, +12.000000011111, -12.00000111111, -123456.234,
+ +3.33, +4.44, +1.11,-2.22 ),
+
+ // array of strings
+ array(" ", ' ', 'hello',
+ '123hello', "123hello", '-123hello', '+123hello',
+ "\12345678hello", "-\12345678hello", 'h123456ello',
+ "1234hello", "hello\0world", "NULL", "true",
+ "3", "4", '1', '2'),
+
+ // different arrays
+ array( array(0), array(1, 2), array(-1, -1),
+ array("123"), array('123'), array('-123'), array("-123"),
+ array(true), array(TRUE), array(FALSE),
+ array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
+ array("3"), array("4"), array("1"), array("2") ),
+
+ // array of boolean data
+ array( true, TRUE, false,
+ TRUE, 0, FALSE, 1,
+ true, TRUE, FALSE,
+ 0, 1, 1, 0,
+ 1, TRUE, 0, FALSE),
+
+);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+// looping to test vfprintf() with different unsigned formats from the above $format array
+// and with signed and other types of values from the above $args_array array
+$counter = 1;
+foreach($args_array as $args) {
+ fprintf($fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp, $formats, $args);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : unsigned formats and signed & other types of values ***
+
+-- Iteration 1 --
+2 0 10
+ 123456 u 1234 2820130816
+ 2840207360 1177509888 12345
+ 12 4294967284 4294843840 _3
+ 10 123456 2 0
+-- Iteration 2 --
+0 0 0
+ 123 u 4294967173 123
+ 0 0 0
+ 1234 0 $0 _0
+ 0 123 0 0
+-- Iteration 3 --
+1 1 1
+ 1 u 1 1
+ 1 1 1
+ #1 1 $1 _1
+ 1 1 1 1
+-- Iteration 4 --
+1 1 0
+ 1 u 0 1
+ 1 1 0
+ #0 1 $1 _0
+ 0 1 1 1
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation16_64bit.phpt b/ext/standard/tests/strings/vfprintf_variation16_64bit.phpt
new file mode 100644
index 000000000..381e67c33
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation16_64bit.phpt
@@ -0,0 +1,112 @@
+--TEST--
+Test vfprintf() function : usage variations - unsigned formats with signed and other types of values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vfprintf() when different unsigned formats and signed values and other types of values
+ * are passed to the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vfprintf() : unsigned formats and signed & other types of values ***\n";
+
+// defining array of unsigned formats
+$formats =
+ '%u %+u %-u
+ %lu %Lu %4u %-4u
+ %10.4u %-10.4u %.4u
+ %\'#2u %\'2u %\'$2u %\'_2u
+ %3$u %4$u %1$u %2$u';
+
+// Arrays of signed and other type of values for the format defined in $format.
+// Each sub array contains signed values which correspond to each format in $format
+$args_array = array(
+
+ // array of float values
+ array(+2.2, +.2, +10.2,
+ +123456.234, +123456.234, +1234.6789,
+ +2e10, +2e12, +22e+12,
+ +12345.780, +12.000000011111, -12.00000111111, -123456.234,
+ +3.33, +4.44, +1.11,-2.22 ),
+
+ // array of strings
+ array(" ", ' ', 'hello',
+ '123hello', "123hello", '-123hello', '+123hello',
+ "\12345678hello", "-\12345678hello", 'h123456ello',
+ "1234hello", "hello\0world", "NULL", "true",
+ "3", "4", '1', '2'),
+
+ // different arrays
+ array( array(0), array(1, 2), array(-1, -1),
+ array("123"), array('123'), array('-123'), array("-123"),
+ array(true), array(TRUE), array(FALSE),
+ array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
+ array("3"), array("4"), array("1"), array("2") ),
+
+ // array of boolean data
+ array( true, TRUE, false,
+ TRUE, 0, FALSE, 1,
+ true, TRUE, FALSE,
+ 0, 1, 1, 0,
+ 1, TRUE, 0, FALSE),
+
+);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+// looping to test vfprintf() with different unsigned formats from the above $format array
+// and with signed and other types of values from the above $args_array array
+$counter = 1;
+foreach($args_array as $args) {
+ fprintf($fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp, $formats, $args);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : unsigned formats and signed & other types of values ***
+
+-- Iteration 1 --
+2 0 10
+ 123456 u 1234 20000000000
+ 2000000000000 22000000000000 12345
+ 12 18446744073709551604 18446744073709428160 _3
+ 10 123456 2 0
+-- Iteration 2 --
+0 0 0
+ 123 u 18446744073709551493 123
+ 0 0 0
+ 1234 0 $0 _0
+ 0 123 0 0
+-- Iteration 3 --
+1 1 1
+ 1 u 1 1
+ 1 1 1
+ #1 1 $1 _1
+ 1 1 1 1
+-- Iteration 4 --
+1 1 0
+ 1 u 0 1
+ 1 1 0
+ #0 1 $1 _0
+ 0 1 1 1
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation17.phpt b/ext/standard/tests/strings/vfprintf_variation17.phpt
new file mode 100644
index 000000000..871ae98d8
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation17.phpt
@@ -0,0 +1,70 @@
+--TEST--
+Test vfprintf() function : usage variations - scientific formats with scientific values
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vfprintf() when different scientific formats and scientific values
+ * are passed to the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vfprintf() : scientific formats and scientific values ***\n";
+
+// defining array of scientific formats
+$formats = array(
+ '%e %+e %-e',
+ '%le %Le %4e %-4e',
+ '%10.4e %-10.4e %.4e',
+ '%\'#20e %\'20e %\'$20e %\'_20e',
+ '%3$e %4$e %1$e %2$e'
+);
+
+// Arrays of scientific values for the format defined in $format.
+// Each sub array contains scientific values which correspond to each format string in $format
+$args_array = array(
+ array(0, 1e0, "10e2" ),
+ array(2.2e2, 10e10, 1000e-2, 1000e7),
+ array(-22e12, 10e20, 1.2e2),
+ array(1e1, +1e2, -1e3, "1e2_"),
+ array(3e3, 4e3, 1e3, 2e3)
+);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+// looping to test vfprintf() with different scientific formats from the above $format array
+// and with signed and other types of values from the above $args_array array
+$counter = 1;
+foreach($formats as $format) {
+ fprintf($fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp, $format, $args_array[$counter-1]);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : scientific formats and scientific values ***
+
+-- Iteration 1 --
+0.000000e+0 +1.000000e+0 1.000000e+3
+-- Iteration 2 --
+2.200000e+2 e 1.000000e+1 1.000000e+10
+-- Iteration 3 --
+-2.2000e+13 1.0000e+21 1.2000e+2
+-- Iteration 4 --
+#########1.000000e+1 1.000000e+2 $$$$$$$$-1.000000e+3 _________1.000000e+2
+-- Iteration 5 --
+1.000000e+3 2.000000e+3 3.000000e+3 4.000000e+3
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation18.phpt b/ext/standard/tests/strings/vfprintf_variation18.phpt
new file mode 100644
index 000000000..76168621c
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation18.phpt
@@ -0,0 +1,107 @@
+--TEST--
+Test vfprintf() function : usage variations - scientific formats with non-scientific values
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vfprintf() when different scientific formats and non-scientific values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vfprintf() : scientific formats and non-scientific values ***\n";
+
+// defining array of non-scientific formats
+$formats =
+ '%e %+e %-e
+ %le %Le %4e %-4e
+ %10.4e %-10.4e %04e %04.4e
+ %\'#2e %\'2e %\'$2e %\'_2e
+ %3$e %4$e %1$e %2$e';
+
+// Arrays of non scientific values for the format defined in $format.
+// Each sub array contains non scientific values which correspond to each format in $format
+$args_array = array(
+
+ // array of float values
+ array(2.2, .2, 10.2,
+ 123456.234, 123456.234, -1234.6789, +1234.6789,
+ 20.00, +212.2, -411000000000, 2212.000000000001,
+ 12345.780, 12.000000011111, -12.00000111111, -123456.234,
+ 3.33, +4.44, 1.11,-2.22 ),
+
+ // array of strings
+ array(" ", ' ', 'hello',
+ '123hello', "123hello", '-123hello', '+123hello',
+ "\12345678hello", "-\12345678hello", '0123456hello', 'h123456ello',
+ "1234hello", "hello\0world", "NULL", "true",
+ "3", "4", '1', '2'),
+
+ // different arrays
+ array( array(0), array(1, 2), array(-1, -1),
+ array("123"), array('123'), array('-123'), array("-123"),
+ array(true), array(false), array(TRUE), array(FALSE),
+ array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
+ array("3"), array("4"), array("1"), array("2") ),
+
+ // array of boolean data
+ array( true, TRUE, false,
+ TRUE, 0, FALSE, 1,
+ true, false, TRUE, FALSE,
+ 0, 1, 1, 0,
+ 1, TRUE, 0, FALSE),
+
+);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+// looping to test vfprintf() with different scientific formats from the above $format array
+// and with non-scientific values from the above $args_array array
+$counter = 1;
+foreach($args_array as $args) {
+ fprintf($fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp, $formats, $args);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : scientific formats and non-scientific values ***
+
+-- Iteration 1 --
+2.200000e+0 +2.000000e-1 1.020000e+1
+ 1.234562e+5 e -1.234679e+3 1.234679e+3
+ 2.0000e+1 2.1220e+2 -4.110000e+11 2.2120e+3
+ 1.234578e+4 1.200000e+1 -1.200000e+1 -1.234562e+5
+ 1.020000e+1 1.234562e+5 2.200000e+0 2.000000e-1
+-- Iteration 2 --
+0.000000e+0 +0.000000e+0 0.000000e+0
+ 1.230000e+2 e -1.230000e+2 1.230000e+2
+ 0.0000e+0 0.0000e+0 1.234560e+5 0.0000e+0
+ 1.234000e+3 0.000000e+0 0.000000e+0 0.000000e+0
+ 0.000000e+0 1.230000e+2 0.000000e+0 0.000000e+0
+-- Iteration 3 --
+1.000000e+0 +1.000000e+0 1.000000e+0
+ 1.000000e+0 e 1.000000e+0 1.000000e+0
+ 1.0000e+0 1.0000e+0 1.000000e+0 1.0000e+0
+ 1.000000e+0 1.000000e+0 1.000000e+0 1.000000e+0
+ 1.000000e+0 1.000000e+0 1.000000e+0 1.000000e+0
+-- Iteration 4 --
+1.000000e+0 +1.000000e+0 0.000000e+0
+ 1.000000e+0 e 0.000000e+0 1.000000e+0
+ 1.0000e+0 0.0000e+0 1.000000e+0 0.0000e+0
+ 0.000000e+0 1.000000e+0 1.000000e+0 0.000000e+0
+ 0.000000e+0 1.000000e+0 1.000000e+0 1.000000e+0
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation19.phpt b/ext/standard/tests/strings/vfprintf_variation19.phpt
new file mode 100644
index 000000000..7ee01a97e
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation19.phpt
@@ -0,0 +1,94 @@
+--TEST--
+Test vfprintf() function : usage variations - with whitespaces in format strings
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+echo "*** Testing vfprintf() : with white spaces in format strings ***\n";
+
+// initializing the format array
+$formats = array(
+ "% d % d % d",
+ "% f % f % f",
+ "% F % F % F",
+ "% b % b % b",
+ "% c % c % c",
+ "% e % e % e",
+ "% u % u % u",
+ "% o % o % o",
+ "% x % x % x",
+ "% X % X % X",
+ "% E % E % E"
+);
+
+// initializing the args array
+
+$args_array = array(
+ array(111, 222, 333),
+ array(1.1, .2, -0.6),
+ array(1.12, -1.13, +0.23),
+ array(1, 2, 3),
+ array(65, 66, 67),
+ array(2e1, 2e-1, -2e1),
+ array(-11, +22, 33),
+ array(012, -02394, +02389),
+ array(0x11, -0x22, +0x33),
+ array(0x11, -0x22, +0x33),
+ array(2e1, 2e-1, -2e1)
+);
+
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+// looping to test vfprintf() with different scientific formats from the above $format array
+// and with non-scientific values from the above $args_array array
+$counter = 1;
+foreach($formats as $format) {
+ fprintf($fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp,$format, $args_array[$counter-1]);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : with white spaces in format strings ***
+
+-- Iteration 1 --
+111 222 333
+-- Iteration 2 --
+1.100000 0.200000 -0.600000
+-- Iteration 3 --
+1.120000 -1.130000 0.230000
+-- Iteration 4 --
+1 10 11
+-- Iteration 5 --
+A B C
+-- Iteration 6 --
+2.000000e+1 2.000000e-1 -2.000000e+1
+-- Iteration 7 --
+4294967285 22 33
+-- Iteration 8 --
+12 37777777755 23
+-- Iteration 9 --
+11 ffffffde 33
+-- Iteration 10 --
+11 FFFFFFDE 33
+-- Iteration 11 --
+2.000000E+1 2.000000E-1 -2.000000E+1
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation19_64bit.phpt b/ext/standard/tests/strings/vfprintf_variation19_64bit.phpt
new file mode 100644
index 000000000..58810a811
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation19_64bit.phpt
@@ -0,0 +1,94 @@
+--TEST--
+Test vfprintf() function : usage variations - with whitespaces in format strings
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+echo "*** Testing vfprintf() : with white spaces in format strings ***\n";
+
+// initializing the format array
+$formats = array(
+ "% d % d % d",
+ "% f % f % f",
+ "% F % F % F",
+ "% b % b % b",
+ "% c % c % c",
+ "% e % e % e",
+ "% u % u % u",
+ "% o % o % o",
+ "% x % x % x",
+ "% X % X % X",
+ "% E % E % E"
+);
+
+// initializing the args array
+
+$args_array = array(
+ array(111, 222, 333),
+ array(1.1, .2, -0.6),
+ array(1.12, -1.13, +0.23),
+ array(1, 2, 3),
+ array(65, 66, 67),
+ array(2e1, 2e-1, -2e1),
+ array(-11, +22, 33),
+ array(012, -02394, +02389),
+ array(0x11, -0x22, +0x33),
+ array(0x11, -0x22, +0x33),
+ array(2e1, 2e-1, -2e1)
+);
+
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+// looping to test vfprintf() with different scientific formats from the above $format array
+// and with non-scientific values from the above $args_array array
+$counter = 1;
+foreach($formats as $format) {
+ fprintf($fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp,$format, $args_array[$counter-1]);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : with white spaces in format strings ***
+
+-- Iteration 1 --
+111 222 333
+-- Iteration 2 --
+1.100000 0.200000 -0.600000
+-- Iteration 3 --
+1.120000 -1.130000 0.230000
+-- Iteration 4 --
+1 10 11
+-- Iteration 5 --
+A B C
+-- Iteration 6 --
+2.000000e+1 2.000000e-1 -2.000000e+1
+-- Iteration 7 --
+18446744073709551605 22 33
+-- Iteration 8 --
+12 1777777777777777777755 23
+-- Iteration 9 --
+11 ffffffffffffffde 33
+-- Iteration 10 --
+11 FFFFFFFFFFFFFFDE 33
+-- Iteration 11 --
+2.000000E+1 2.000000E-1 -2.000000E+1
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation20.phpt b/ext/standard/tests/strings/vfprintf_variation20.phpt
new file mode 100644
index 000000000..cd348d835
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation20.phpt
@@ -0,0 +1,175 @@
+--TEST--
+Test vfprintf() function : usage variations - unexpected values for the format argument
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vfprintf() when different unexpected format strings are passed to
+ * the '$format' argument of the function
+*/
+
+echo "*** Testing vfprintf() : with unexpected values for format argument ***\n";
+
+// initialising the required variables
+$args = array(1, 2);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// declaring a class
+class sample
+{
+ public function __toString() {
+ return "object";
+ }
+}
+
+// Defining resource
+$file_handle = fopen(__FILE__, 'r');
+
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+/*10*/ array(),
+ array(0),
+ array(1),
+ array(1,2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+/*15*/ NULL,
+ null,
+
+ // boolean data
+/*17*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*21*/ "",
+ '',
+
+ // object data
+/*23*/ new sample(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource data
+/*26*/ $file_handle
+);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+fprintf($fp, "\n*** Testing vprintf() with with unexpected values for format argument ***\n");
+
+$counter = 1;
+foreach( $values as $value ) {
+ fprintf( $fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp, $value, $args);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing vfprintf() : with unexpected values for format argument ***
+
+Notice: Array to string conversion in %s on line %d
+
+Notice: Array to string conversion in %s on line %d
+
+Notice: Array to string conversion in %s on line %d
+
+Notice: Array to string conversion in %s on line %d
+
+Notice: Array to string conversion in %s on line %d
+
+*** Testing vprintf() with with unexpected values for format argument ***
+
+-- Iteration 1 --
+0
+-- Iteration 2 --
+1
+-- Iteration 3 --
+12345
+-- Iteration 4 --
+-2345
+-- Iteration 5 --
+10.5
+-- Iteration 6 --
+-10.5
+-- Iteration 7 --
+101234567000
+-- Iteration 8 --
+1.07654321E-9
+-- Iteration 9 --
+0.5
+-- Iteration 10 --
+Array
+-- Iteration 11 --
+Array
+-- Iteration 12 --
+Array
+-- Iteration 13 --
+Array
+-- Iteration 14 --
+Array
+-- Iteration 15 --
+
+-- Iteration 16 --
+
+-- Iteration 17 --
+1
+-- Iteration 18 --
+
+-- Iteration 19 --
+1
+-- Iteration 20 --
+
+-- Iteration 21 --
+
+-- Iteration 22 --
+
+-- Iteration 23 --
+object
+-- Iteration 24 --
+
+-- Iteration 25 --
+
+-- Iteration 26 --
+Resource id #%d
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation21.phpt b/ext/standard/tests/strings/vfprintf_variation21.phpt
new file mode 100644
index 000000000..387a3b96f
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation21.phpt
@@ -0,0 +1,167 @@
+--TEST--
+Test vfprintf() function : usage variations - unexpected values for args argument
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vfprintf() when different unexpected values are passed to
+ * the '$args' arguments of the function
+*/
+
+echo "*** Testing vfprintf() : with unexpected values for args argument ***\n";
+
+// initialising the required variables
+$format = '%s';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// declaring a class
+class sample
+{
+ public function __toString() {
+ return "object";
+ }
+}
+
+// Defining resource
+$file_handle = fopen(__FILE__, 'r');
+
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+
+ // string data
+/*18*/ "string",
+ 'string',
+
+ // object data
+/*20*/ new sample(),
+
+ // undefined data
+/*21*/ @$undefined_var,
+
+ // unset data
+/*22*/ @$unset_var,
+
+ // resource data
+/*23*/ $file_handle
+);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+fprintf($fp, "\n*** Testing vprintf() with unexpected values for args argument ***\n");
+
+$counter = 1;
+foreach( $values as $value ) {
+ fprintf($fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp, $format, $value);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing vfprintf() : with unexpected values for args argument ***
+
+Warning: vfprintf(): Too few arguments in %s on line %d
+
+Warning: vfprintf(): Too few arguments in %s on line %d
+
+Warning: vfprintf(): Too few arguments in %s on line %d
+
+Warning: vfprintf(): Too few arguments in %s on line %d
+
+Warning: vfprintf(): Too few arguments in %s on line %d
+
+*** Testing vprintf() with unexpected values for args argument ***
+
+-- Iteration 1 --
+0
+-- Iteration 2 --
+1
+-- Iteration 3 --
+12345
+-- Iteration 4 --
+-2345
+-- Iteration 5 --
+10.5
+-- Iteration 6 --
+-10.5
+-- Iteration 7 --
+101234567000
+-- Iteration 8 --
+1.07654321E-9
+-- Iteration 9 --
+0.5
+-- Iteration 10 --
+
+-- Iteration 11 --
+
+-- Iteration 12 --
+1
+-- Iteration 13 --
+
+-- Iteration 14 --
+1
+-- Iteration 15 --
+
+-- Iteration 16 --
+
+-- Iteration 17 --
+
+-- Iteration 18 --
+string
+-- Iteration 19 --
+string
+-- Iteration 20 --
+
+-- Iteration 21 --
+
+-- Iteration 22 --
+
+-- Iteration 23 --
+Resource id #%d
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation3.phpt b/ext/standard/tests/strings/vfprintf_variation3.phpt
new file mode 100644
index 000000000..02535cefb
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation3.phpt
@@ -0,0 +1,87 @@
+--TEST--
+Test vfprintf() function : usage variations - int formats with int values
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vfprintf() when different int formats and int values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vfprintf() : int formats with int values ***\n";
+
+
+// defining array of int formats
+$formats = array(
+ "%d",
+ "%+d %-d %D",
+ "%ld %Ld, %4d %-4d",
+ "%10.4d %-10.4d %04d %04.4d",
+ "%'#2d %'2d %'$2d %'_2d",
+ "%d %d %d %d",
+ "% %%d d%",
+ '%3$d %4$d %1$d %2$d'
+);
+
+// Arrays of int values for the format defined in $format.
+// Each sub array contains int values which correspond to each format string in $format
+$args_array = array(
+ array(0),
+ array(-1, 1, +22),
+ array(2147483647, -2147483648, +2147483640, -2147483640),
+ array(123456, 12345678, -1234567, 1234567),
+ array(111, 2222, 333333, 44444444),
+ array(0x123b, 0xfAb, 0123, 01293),
+ array(1234, -5678, 2345),
+ array(3, 4, 1, 2)
+
+);
+
+// looping to test vfprintf() with different int formats from the above $format array
+// and with int values from the above $args_array array
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+$counter = 1;
+foreach($formats as $format) {
+ fprintf($fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp, $format, $args_array[$counter-1]);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : int formats with int values ***
+
+-- Iteration 1 --
+0
+-- Iteration 2 --
+-1 1
+-- Iteration 3 --
+2147483647 d, 2147483640 -2147483640
+-- Iteration 4 --
+ 123456 12345678 -1234567 1234567
+-- Iteration 5 --
+111 2222 333333 44444444
+-- Iteration 6 --
+4667 4011 83 10
+-- Iteration 7 --
+%-5678 d
+-- Iteration 8 --
+1 2 3 4
+===DONE===
+
diff --git a/ext/standard/tests/strings/vfprintf_variation4.phpt b/ext/standard/tests/strings/vfprintf_variation4.phpt
new file mode 100644
index 000000000..32382bd79
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation4.phpt
@@ -0,0 +1,113 @@
+--TEST--
+Test vfprintf() function : usage variations - int formats with non-integer values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vfprintf() when different int formats and non-int values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vfprintf() : int formats and non-integer values ***\n";
+
+// defining array of int formats
+$formats =
+ '%d %+d %-d
+ %ld %Ld %4d %-4d
+ %10.4d %-10.4d %.4d %04.4d
+ %\'#2d %\'2d %\'$2d %\'_2d
+ %3$d %4$d %1$d %2$d';
+
+// Arrays of non int values for the format defined in $format.
+// Each sub array contains non int values which correspond to each format in $format
+$args_array = array(
+
+ // array of float values
+ array(2.2, .2, 10.2,
+ 123456.234, 123456.234, -1234.6789, +1234.6789,
+ 2e10, +2e5, 4e3, 22e+6,
+ 12345.780, 12.000000011111, -12.00000111111, -123456.234,
+ 3.33, +4.44, 1.11,-2.22 ),
+
+ // array of strings
+ array(" ", ' ', 'hello',
+ '123hello', "123hello", '-123hello', '+123hello',
+ "\12345678hello", "-\12345678hello", '0123456hello', 'h123456ello',
+ "1234hello", "hello\0world", "NULL", "true",
+ "3", "4", '1', '2'),
+
+ // different arrays
+ array( array(0), array(1, 2), array(-1, -1),
+ array("123"), array('123'), array('-123'), array("-123"),
+ array(true), array(false), array(TRUE), array(FALSE),
+ array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
+ array("3"), array("4"), array("1"), array("2") ),
+
+ // array of boolean data
+ array( true, TRUE, false,
+ TRUE, 0, FALSE, 1,
+ true, false, TRUE, FALSE,
+ 0, 1, 1, 0,
+ 1, TRUE, 0, FALSE),
+
+);
+
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+// looping to test vfprintf() with different int formats from the above $format array
+// and with non-int values from the above $args_array array
+$counter = 1;
+foreach($args_array as $args) {
+ fprintf($fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp, $formats, $args);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : int formats and non-integer values ***
+
+-- Iteration 1 --
+2 +0 10
+ 123456 d -1234 1234
+ -1474836480 200000 4000 22000000
+ 12345 12 -12 -123456
+ 10 123456 2 0
+-- Iteration 2 --
+0 +0 0
+ 123 d -123 123
+ 0 0 123456 0000
+ 1234 0 $0 _0
+ 0 123 0 0
+-- Iteration 3 --
+1 +1 1
+ 1 d 1 1
+ 1 1 1 0001
+ #1 1 $1 _1
+ 1 1 1 1
+-- Iteration 4 --
+1 +1 0
+ 1 d 0 1
+ 1 0 1 0000
+ #0 1 $1 _0
+ 0 1 1 1
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation4_64bit.phpt b/ext/standard/tests/strings/vfprintf_variation4_64bit.phpt
new file mode 100644
index 000000000..f7038ff76
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation4_64bit.phpt
@@ -0,0 +1,113 @@
+--TEST--
+Test vfprintf() function : usage variations - int formats with non-integer values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vfprintf() when different int formats and non-int values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vfprintf() : int formats and non-integer values ***\n";
+
+// defining array of int formats
+$formats =
+ '%d %+d %-d
+ %ld %Ld %4d %-4d
+ %10.4d %-10.4d %.4d %04.4d
+ %\'#2d %\'2d %\'$2d %\'_2d
+ %3$d %4$d %1$d %2$d';
+
+// Arrays of non int values for the format defined in $format.
+// Each sub array contains non int values which correspond to each format in $format
+$args_array = array(
+
+ // array of float values
+ array(2.2, .2, 10.2,
+ 123456.234, 123456.234, -1234.6789, +1234.6789,
+ 2e10, +2e5, 4e3, 22e+6,
+ 12345.780, 12.000000011111, -12.00000111111, -123456.234,
+ 3.33, +4.44, 1.11,-2.22 ),
+
+ // array of strings
+ array(" ", ' ', 'hello',
+ '123hello', "123hello", '-123hello', '+123hello',
+ "\12345678hello", "-\12345678hello", '0123456hello', 'h123456ello',
+ "1234hello", "hello\0world", "NULL", "true",
+ "3", "4", '1', '2'),
+
+ // different arrays
+ array( array(0), array(1, 2), array(-1, -1),
+ array("123"), array('123'), array('-123'), array("-123"),
+ array(true), array(false), array(TRUE), array(FALSE),
+ array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
+ array("3"), array("4"), array("1"), array("2") ),
+
+ // array of boolean data
+ array( true, TRUE, false,
+ TRUE, 0, FALSE, 1,
+ true, false, TRUE, FALSE,
+ 0, 1, 1, 0,
+ 1, TRUE, 0, FALSE),
+
+);
+
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+// looping to test vfprintf() with different int formats from the above $format array
+// and with non-int values from the above $args_array array
+$counter = 1;
+foreach($args_array as $args) {
+ fprintf($fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp, $formats, $args);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : int formats and non-integer values ***
+
+-- Iteration 1 --
+2 +0 10
+ 123456 d -1234 1234
+ 20000000000 200000 4000 22000000
+ 12345 12 -12 -123456
+ 10 123456 2 0
+-- Iteration 2 --
+0 +0 0
+ 123 d -123 123
+ 0 0 123456 0000
+ 1234 0 $0 _0
+ 0 123 0 0
+-- Iteration 3 --
+1 +1 1
+ 1 d 1 1
+ 1 1 1 0001
+ #1 1 $1 _1
+ 1 1 1 1
+-- Iteration 4 --
+1 +1 0
+ 1 d 0 1
+ 1 0 1 0000
+ #0 1 $1 _0
+ 0 1 1 1
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation5.phpt b/ext/standard/tests/strings/vfprintf_variation5.phpt
new file mode 100644
index 000000000..8a27eea31
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation5.phpt
@@ -0,0 +1,85 @@
+--TEST--
+Test vfprintf() function : usage variations - float formats with float values
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vfprintf() when different float formats and float values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vfprintf() : int formats with float values ***\n";
+
+
+// defining array of float formats
+$formats = array(
+ "%f",
+ "%+f %-f %F",
+ "%lf %Lf, %4f %-4f",
+ "%10.4f %-10.4F %04f %04.4f",
+ "%'#2f %'2f %'$2f %'_2f",
+ "%f %f %f %f",
+ "% %%f f%",
+ '%3$f %4$f %1$f %2$f'
+);
+
+// Arrays of float values for the format defined in $format.
+// Each sub array contains float values which correspond to each format string in $format
+$args_array = array(
+ array(0.0),
+ array(-0.1, +0.1, +10.0000006),
+ array(2147483649, -2147483647, +2147483640, -2147483640),
+ array(2e5, 2e-5, -2e5, -2e-5),
+ array(0.2E5, -0.2e40, 0.2E-20, 0.2E+20),
+ array(0x123b, 0xfAb, 0123, 01293),
+ array(1234.1234, -5678.5678, 2345.2345),
+ array(3.33, 4.44, 1.11, 2.22)
+
+);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+// looping to test vprintf() with different float formats from the above $format array
+// and with float values from the above $args_array array
+$counter = 1;
+foreach($formats as $format) {
+ fprintf($fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp, $format, $args_array[$counter-1]);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : int formats with float values ***
+
+-- Iteration 1 --
+0.000000
+-- Iteration 2 --
+-0.100000 0.100000 10.000001
+-- Iteration 3 --
+2147483649.000000 f, 2147483640.000000 -2147483640.000000
+-- Iteration 4 --
+200000.0000 0.0000 -200000.000000 -0.0000
+-- Iteration 5 --
+20000.000000 -1999999999999999879418332743206357172224.000000 0.000000 20000000000000000000.000000
+-- Iteration 6 --
+4667.000000 4011.000000 83.000000 10.000000
+-- Iteration 7 --
+%-5678.567800 f
+-- Iteration 8 --
+1.110000 2.220000 3.330000 4.440000
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation6.phpt b/ext/standard/tests/strings/vfprintf_variation6.phpt
new file mode 100644
index 000000000..6b5425d5c
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation6.phpt
@@ -0,0 +1,108 @@
+--TEST--
+Test vfprintf() function : usage variations - float formats with non-float values
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vfprintf() when different float formats and non-float values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vfprintf() : float formats and non-float values ***\n";
+
+// defining array of float formats
+$formats =
+ '%f %+f %-f
+ %lf %Lf %4f %-4f
+ %10.4f %-10.4f %04f %04.4f
+ %\'#2f %\'2f %\'$2f %\'_2f
+ %3$f %4$f %1$f %2$f';
+
+// Arrays of non float values for the format defined in $format.
+// Each sub array contains non float values which correspond to each format in $format
+$args_array = array(
+
+ // array of int values
+ array(2, -2, +2,
+ 123456, 123456234, -12346789, +12346789,
+ 123200, +20000, -40000, 22212,
+ 12345780, 1211111, -12111111, -12345634,
+ 3, +4, 1,-2 ),
+
+ // array of strings
+ array(" ", ' ', 'hello',
+ '123hello', "123hello", '-123hello', '+123hello',
+ "\12345678hello", "-\12345678hello", '0123456hello', 'h123456ello',
+ "1234hello", "hello\0world", "NULL", "true",
+ "3", "4", '1', '2'),
+
+ // different arrays
+ array( array(0), array(1, 2), array(-1, -1),
+ array("123"), array('123'), array('-123'), array("-123"),
+ array(true), array(false), array(TRUE), array(FALSE),
+ array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
+ array("3"), array("4"), array("1"), array("2") ),
+
+ // array of boolean data
+ array( true, TRUE, false,
+ TRUE, 0, FALSE, 1,
+ true, false, TRUE, FALSE,
+ 0, 1, 1, 0,
+ 1, TRUE, 0, FALSE),
+
+);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+// looping to test vfprintf() with different float formats from the above $format array
+// and with non-float values from the above $args_array array
+$counter = 1;
+foreach($args_array as $args) {
+ fprintf($fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp, $formats, $args);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : float formats and non-float values ***
+
+-- Iteration 1 --
+2.000000 -2.000000 2.000000
+ 123456.000000 f -12346789.000000 12346789.000000
+ 123200.0000 20000.0000 -40000.000000 22212.0000
+ 12345780.000000 1211111.000000 -12111111.000000 -12345634.000000
+ 2.000000 123456.000000 2.000000 -2.000000
+-- Iteration 2 --
+0.000000 +0.000000 0.000000
+ 123.000000 f -123.000000 123.000000
+ 0.0000 0.0000 123456.000000 0.0000
+ 1234.000000 0.000000 0.000000 0.000000
+ 0.000000 123.000000 0.000000 0.000000
+-- Iteration 3 --
+1.000000 +1.000000 1.000000
+ 1.000000 f 1.000000 1.000000
+ 1.0000 1.0000 1.000000 1.0000
+ 1.000000 1.000000 1.000000 1.000000
+ 1.000000 1.000000 1.000000 1.000000
+-- Iteration 4 --
+1.000000 +1.000000 0.000000
+ 1.000000 f 0.000000 1.000000
+ 1.0000 0.0000 1.000000 0.0000
+ 0.000000 1.000000 1.000000 0.000000
+ 0.000000 1.000000 1.000000 1.000000
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation7.phpt b/ext/standard/tests/strings/vfprintf_variation7.phpt
new file mode 100644
index 000000000..a206fd869
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation7.phpt
Binary files differ
diff --git a/ext/standard/tests/strings/vfprintf_variation8.phpt b/ext/standard/tests/strings/vfprintf_variation8.phpt
new file mode 100644
index 000000000..cda05c4d7
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation8.phpt
@@ -0,0 +1,111 @@
+--TEST--
+Test vfprintf() function : usage variations - string formats with non-string values
+--FILE--
+<?php
+/* Prototype : int vfprintf ( resource $handle , string $format , array $args )
+ * Description: Write a formatted string to a stream
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vfprintf() when different string formats and non-string values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+error_reporting(E_ALL & ~E_NOTICE);
+
+echo "*** Testing vfprintf() : string formats and non-string values ***\n";
+
+// defining array of string formats
+$formats =
+ '%s %+s %-s
+ %ls %Ls %4s %-4s
+ %10.4s %-10.4s %04s %04.4s
+ %\'#2s %\'2s %\'$2s %\'_2s
+ %3$s %4$s %1$s %2$s';
+
+// Arrays of non string values for the format defined in $format.
+// Each sub array contains non string values which correspond to each format in $format
+$args_array = array(
+
+ // array of float values
+ array(2.2, .2, 10.2,
+ 123456.234, 123456.234, -1234.6789, +1234.6789,
+ 2.1234567e10, +2.7654321e10, -2.7654321e10,
+ 12345.780, 12.000000011111, -12.00000111111, -123456.234,
+ 3.33, +4.44, 1.11,-2.22 ),
+
+ // array of int values
+ array(2, -2, +2,
+ 123456, 123456234, -12346789, +12346789,
+ 123200, +20000, -40000, 22212,
+ 12345780, 1211111, -12111111, -12345634,
+ 3, +4, 1,-2 ),
+
+
+ // different arrays
+ array( array(0), array(1, 2), array(-1, -1),
+ array("123"), array('123'), array('-123'), array("-123"),
+ array(true), array(false), array(TRUE), array(FALSE),
+ array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
+ array("3"), array("4"), array("1"), array("2") ),
+
+ // array of boolean data
+ array( true, TRUE, false,
+ TRUE, 0, FALSE, 1,
+ true, false, TRUE, FALSE,
+ 0, 1, 1, 0,
+ 1, TRUE, 0, FALSE),
+
+);
+
+/* creating dumping file */
+$data_file = dirname(__FILE__) . '/dump.txt';
+if (!($fp = fopen($data_file, 'wt')))
+ return;
+
+// looping to test vfprintf() with different string formats from the above $format array
+// and with non-string values from the above $args_array array
+$counter = 1;
+foreach($args_array as $args) {
+ fprintf($fp, "\n-- Iteration %d --\n",$counter);
+ vfprintf($fp, $formats, $args);
+ $counter++;
+}
+
+fclose($fp);
+print_r(file_get_contents($data_file));
+echo "\n";
+
+unlink($data_file);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vfprintf() : string formats and non-string values ***
+
+-- Iteration 1 --
+2.2 0.2 10.2
+ 123456.234 s -1234.6789 1234.6789
+ 2123 2765 -27654321000 1234
+ 12.000000011111 -12.00000111111 -123456.234 3.33
+ 10.2 123456.234 2.2 0.2
+-- Iteration 2 --
+2 -2 2
+ 123456 s -12346789 12346789
+ 1232 2000 -40000 2221
+ 12345780 1211111 -12111111 -12345634
+ 2 123456 2 -2
+-- Iteration 3 --
+Array Array Array
+ Array s Array Array
+ Arra Arra Array Arra
+ Array Array Array Array
+ Array Array Array Array
+-- Iteration 4 --
+1 1
+ 1 s 1
+ 1 0001 0000
+ #0 1 $1 _0
+ 1 1 1
+===DONE===
diff --git a/ext/standard/tests/strings/vfprintf_variation9.phpt b/ext/standard/tests/strings/vfprintf_variation9.phpt
new file mode 100644
index 000000000..d10c8aed5
--- /dev/null
+++ b/ext/standard/tests/strings/vfprintf_variation9.phpt
Binary files differ
diff --git a/ext/standard/tests/strings/vprintf_basic1.phpt b/ext/standard/tests/strings/vprintf_basic1.phpt
new file mode 100644
index 000000000..7f31f783e
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_basic1.phpt
@@ -0,0 +1,42 @@
+--TEST--
+Test vprintf() function : basic functionality - string format
+--FILE--
+<?php
+/* Prototype : int vprintf(string $format , array $args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+echo "*** Testing vprintf() : basic functionality - using string format ***\n";
+
+// Initialise all required variables
+$format = "format";
+$format1 = "%s";
+$format2 = "%s %s";
+$format3 = "%s %s %s";
+$arg1 = array("one");
+$arg2 = array("one","two");
+$arg3 = array("one","two","three");
+
+
+$result = vprintf($format1,$arg1);
+echo "\n";
+var_dump($result);
+$result = vprintf($format2,$arg2);
+echo "\n";
+var_dump($result);
+$result = vprintf($format3,$arg3);
+echo "\n";
+var_dump($result);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : basic functionality - using string format ***
+one
+int(3)
+one two
+int(7)
+one two three
+int(13)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_basic2.phpt b/ext/standard/tests/strings/vprintf_basic2.phpt
new file mode 100644
index 000000000..cdf6c2d83
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_basic2.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test vprintf() function : basic functionality - integer format
+--FILE--
+<?php
+/* Prototype : string vprintf(string $format , array $args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Testing vprintf() : basic functionality - using integer format
+*/
+
+echo "*** Testing vprintf() : basic functionality - using integer format ***\n";
+
+// Initialise all required variables
+$format = "format";
+$format1 = "%d";
+$format2 = "%d %d";
+$format3 = "%d %d %d";
+$arg1 = array(111);
+$arg2 = array(111,222);
+$arg3 = array(111,222,333);
+
+$result = vprintf($format1,$arg1);
+echo "\n";
+var_dump($result);
+
+$result = vprintf($format2,$arg2);
+echo "\n";
+var_dump($result);
+
+$result = vprintf($format3,$arg3);
+echo "\n";
+var_dump($result);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : basic functionality - using integer format ***
+111
+int(3)
+111 222
+int(7)
+111 222 333
+int(11)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_basic3.phpt b/ext/standard/tests/strings/vprintf_basic3.phpt
new file mode 100644
index 000000000..966ea56f7
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_basic3.phpt
@@ -0,0 +1,66 @@
+--TEST--
+Test vprintf() function : basic functionality - float format
+--FILE--
+<?php
+/* Prototype : string vprintf(string $format , array $args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+echo "*** Testing vprintf() : basic functionality - using float format ***\n";
+
+// Initialise all required variables
+
+$format = "format";
+$format1 = "%f";
+$format2 = "%f %f";
+$format3 = "%f %f %f";
+
+$format11 = "%F";
+$format22 = "%F %F";
+$format33 = "%F %F %F";
+$arg1 = array(11.11);
+$arg2 = array(11.11,22.22);
+$arg3 = array(11.11,22.22,33.33);
+
+$result = vprintf($format1,$arg1);
+echo "\n";
+var_dump($result);
+
+$result = vprintf($format11,$arg1);
+echo "\n";
+var_dump($result);
+
+$result = vprintf($format2,$arg2);
+echo "\n";
+var_dump($result);
+
+$result = vprintf($format22,$arg2);
+echo "\n";
+var_dump($result);
+
+$result = vprintf($format3,$arg3);
+echo "\n";
+var_dump($result);
+
+$result = vprintf($format33,$arg3);
+echo "\n";
+var_dump($result);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : basic functionality - using float format ***
+11.110000
+int(9)
+11.110000
+int(9)
+11.110000 22.220000
+int(19)
+11.110000 22.220000
+int(19)
+11.110000 22.220000 33.330000
+int(29)
+11.110000 22.220000 33.330000
+int(29)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_basic4.phpt b/ext/standard/tests/strings/vprintf_basic4.phpt
new file mode 100644
index 000000000..89494e121
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_basic4.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test vprintf() function : basic functionality - bool format
+--FILE--
+<?php
+/* Prototype : string vprintf(string $format , array $args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+echo "*** Testing vprintf() : basic functionality - using bool format ***\n";
+
+// Initialise all required variables
+$format = "format";
+$format1 = "%b";
+$format2 = "%b %b";
+$format3 = "%b %b %b";
+$arg1 = array(TRUE);
+$arg2 = array(TRUE,FALSE);
+$arg3 = array(TRUE,FALSE,TRUE);
+
+$result = vprintf($format1,$arg1);
+echo "\n";
+var_dump($result);
+
+$result = vprintf($format2,$arg2);
+echo "\n";
+var_dump($result);
+
+$result = vprintf($format3,$arg3);
+echo "\n";
+var_dump($result);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : basic functionality - using bool format ***
+1
+int(1)
+1 0
+int(3)
+1 0 1
+int(5)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_basic5.phpt b/ext/standard/tests/strings/vprintf_basic5.phpt
new file mode 100644
index 000000000..e999417bf
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_basic5.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test vprintf() function : basic functionality - char format
+--FILE--
+<?php
+/* Prototype : string vprintf(string $format , array $args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+echo "*** Testing vprintf() : basic functionality - using char format ***\n";
+
+// Initialise all required variables
+$format = "format";
+$format1 = "%c";
+$format2 = "%c %c";
+$format3 = "%c %c %c";
+$arg1 = array(65);
+$arg2 = array(65,66);
+$arg3 = array(65,66,67);
+
+$result = vprintf($format1,$arg1);
+echo "\n";
+var_dump($result);
+
+$result = vprintf($format2,$arg2);
+echo "\n";
+var_dump($result);
+
+$result = vprintf($format3,$arg3);
+echo "\n";
+var_dump($result);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : basic functionality - using char format ***
+A
+int(1)
+A B
+int(3)
+A B C
+int(5)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_basic6.phpt b/ext/standard/tests/strings/vprintf_basic6.phpt
new file mode 100644
index 000000000..7f1bbd1dd
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_basic6.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test vprintf() function : basic functionality - exponential format
+--FILE--
+<?php
+/* Prototype : string vprintf(string $format , array $args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+echo "*** Testing vprintf() : basic functionality - using exponential format ***\n";
+
+// Initialise all required variables
+$format = "format";
+$format1 = "%e";
+$format2 = "%e %e";
+$format3 = "%e %e %e";
+$arg1 = array(1000);
+$arg2 = array(1000,2000);
+$arg3 = array(1000,2000,3000);
+
+$result = vprintf($format1,$arg1);
+echo "\n";
+var_dump($result);
+
+$result = vprintf($format2,$arg2);
+echo "\n";
+var_dump($result);
+
+$result = vprintf($format3,$arg3);
+echo "\n";
+var_dump($result);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : basic functionality - using exponential format ***
+1.000000e+3
+int(11)
+1.000000e+3 2.000000e+3
+int(23)
+1.000000e+3 2.000000e+3 3.000000e+3
+int(35)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_basic7.phpt b/ext/standard/tests/strings/vprintf_basic7.phpt
new file mode 100644
index 000000000..fdf90fd47
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_basic7.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test vprintf() function : basic functionality - unsigned format
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string vprintf(string $format , aaray $args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+echo "*** Testing vprintf() : basic functionality - using unsigned format ***\n";
+
+// Initialise all required variables
+$format = "format";
+$format1 = "%u";
+$format2 = "%u %u";
+$format3 = "%u %u %u";
+$arg1 = array(-1111);
+$arg2 = array(-1111,-1234567);
+$arg3 = array(-1111,-1234567,-2345432);
+
+$result = vprintf($format1,$arg1);
+echo "\n";
+var_dump($result);
+
+$result = vprintf($format2,$arg2);
+echo "\n";
+var_dump($result);
+
+$result = vprintf($format3,$arg3);
+echo "\n";
+var_dump($result);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : basic functionality - using unsigned format ***
+4294966185
+int(10)
+4294966185 4293732729
+int(21)
+4294966185 4293732729 4292621864
+int(32)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_basic7_64bit.phpt b/ext/standard/tests/strings/vprintf_basic7_64bit.phpt
new file mode 100644
index 000000000..32aa33889
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_basic7_64bit.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test vprintf() function : basic functionality - unsigned format
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string vprintf(string $format , aaray $args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+echo "*** Testing vprintf() : basic functionality - using unsigned format ***\n";
+
+// Initialise all required variables
+$format = "format";
+$format1 = "%u";
+$format2 = "%u %u";
+$format3 = "%u %u %u";
+$arg1 = array(-1111);
+$arg2 = array(-1111,-1234567);
+$arg3 = array(-1111,-1234567,-2345432);
+
+$result = vprintf($format1,$arg1);
+echo "\n";
+var_dump($result);
+
+$result = vprintf($format2,$arg2);
+echo "\n";
+var_dump($result);
+
+$result = vprintf($format3,$arg3);
+echo "\n";
+var_dump($result);
+?>
+===DONE===
+--EXPECTF--
+*** Testing vprintf() : basic functionality - using unsigned format ***
+18446744073709550505
+int(20)
+18446744073709550505 18446744073708317049
+int(41)
+18446744073709550505 18446744073708317049 18446744073707206184
+int(62)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_basic8.phpt b/ext/standard/tests/strings/vprintf_basic8.phpt
new file mode 100644
index 000000000..91c6dd782
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_basic8.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test vprintf() function : basic functionality - octal format
+--FILE--
+<?php
+/* Prototype : string vprintf(string $format , array $args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+echo "*** Testing vprintf() : basic functionality - using octal format ***\n";
+
+// Initialise all required variables
+$format = "format";
+$format1 = "%o";
+$format2 = "%o %o";
+$format3 = "%o %o %o";
+$arg1 = array(021);
+$arg2 = array(021,0347);
+$arg3 = array(021,0347,05678);
+
+$result = vprintf($format1,$arg1);
+echo "\n";
+var_dump($result);
+
+$result = vprintf($format2,$arg2);
+echo "\n";
+var_dump($result);
+
+$result = vprintf($format3,$arg3);
+echo "\n";
+var_dump($result);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : basic functionality - using octal format ***
+21
+int(2)
+21 347
+int(6)
+21 347 567
+int(10)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_basic9.phpt b/ext/standard/tests/strings/vprintf_basic9.phpt
new file mode 100644
index 000000000..4aa12a080
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_basic9.phpt
@@ -0,0 +1,62 @@
+--TEST--
+Test vprintf() function : basic functionality - hexadecimal format
+--FILE--
+<?php
+/* Prototype : string vprintf(string $format , array $args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+echo "*** Testing vprintf() : basic functionality - using hexadecimal format ***\n";
+
+// Initialising different format strings
+$format = "format";
+$format1 = "%x";
+$format2 = "%x %x";
+$format3 = "%x %x %x";
+
+$format11 = "%X";
+$format22 = "%X %X";
+$format33 = "%X %X %X";
+
+$arg1 = array(11);
+$arg2 = array(11,132);
+$arg3 = array(11,132,177);
+
+$result = vprintf($format1,$arg1);
+echo "\n";
+var_dump($result);
+$result = vprintf($format11,$arg1);
+echo "\n";
+var_dump($result);
+
+$result = vprintf($format2,$arg2);
+echo "\n";
+var_dump($result);
+$result = vprintf($format22,$arg2);
+echo "\n";
+var_dump($result);
+
+$result = vprintf($format3,$arg3);echo "\n";
+var_dump($result);
+$result = vprintf($format33,$arg3);
+echo "\n";
+var_dump($result);
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : basic functionality - using hexadecimal format ***
+b
+int(1)
+B
+int(1)
+b 84
+int(4)
+B 84
+int(4)
+b 84 b1
+int(7)
+B 84 B1
+int(7)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_error.phpt b/ext/standard/tests/strings/vprintf_error.phpt
new file mode 100644
index 000000000..1be1613e1
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_error.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test vprintf() function : error conditions
+--FILE--
+<?php
+/* Prototype : int vprintf(string $format , array $args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+ */
+
+echo "*** Testing vprintf() : error conditions ***\n";
+
+// initialising the required variables
+$format = "%s";
+$args = array("hello");
+$extra_arg = "extra arg";
+
+// Zero arguments
+echo "\n-- Testing vprintf() function with Zero arguments --\n";
+var_dump( vprintf() );
+
+echo "\n-- Testing vprintf() function with less than expected no. of arguments --\n";
+var_dump( vprintf($format) );
+
+echo "\n-- testing vprintf() function with more than expected no. of arguments --\n";
+var_dump( vprintf($format, $args, $extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing vprintf() : error conditions ***
+
+-- Testing vprintf() function with Zero arguments --
+
+Warning: Wrong parameter count for vprintf() in %s on line %d
+bool(false)
+
+-- Testing vprintf() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for vprintf() in %s on line %d
+bool(false)
+
+-- testing vprintf() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for vprintf() in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation1.phpt b/ext/standard/tests/strings/vprintf_variation1.phpt
new file mode 100644
index 000000000..18f314f28
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation1.phpt
@@ -0,0 +1,219 @@
+--TEST--
+Test vprintf() function : usage variations - unexpected values for the format argument
+--FILE--
+<?php
+/* Prototype : string vprintf(string $format, array $args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vprintf() when different unexpected format strings are passed to
+ * the '$format' argument of the function
+*/
+
+echo "*** Testing vprintf() : with unexpected values for format argument ***\n";
+
+// initialising the required variables
+$args = array(1, 2);
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// declaring a class
+class sample
+{
+ public function __toString() {
+ return "object";
+ }
+}
+
+// Defining resource
+$file_handle = fopen(__FILE__, 'r');
+
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+/*10*/ array(),
+ array(0),
+ array(1),
+ array(1,2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+/*15*/ NULL,
+ null,
+
+ // boolean data
+/*17*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*21*/ "",
+ '',
+
+ // object data
+/*23*/ new sample(),
+
+ // undefined data
+/*24*/ @$undefined_var,
+
+ // unset data
+/*25*/ @$unset_var,
+
+ // resource data
+/*26*/ $file_handle
+);
+
+// loop through each element of the array for format
+
+$counter = 1;
+foreach($values as $value) {
+ echo "\n -- Iteration $counter --\n";
+ $result = vprintf($value,$args);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+
+};
+
+// closing the resource
+fclose($file_handle);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing vprintf() : with unexpected values for format argument ***
+
+ -- Iteration 1 --
+0
+int(1)
+
+ -- Iteration 2 --
+1
+int(1)
+
+ -- Iteration 3 --
+12345
+int(5)
+
+ -- Iteration 4 --
+-2345
+int(5)
+
+ -- Iteration 5 --
+10.5
+int(4)
+
+ -- Iteration 6 --
+-10.5
+int(5)
+
+ -- Iteration 7 --
+101234567000
+int(12)
+
+ -- Iteration 8 --
+1.07654321E-9
+int(13)
+
+ -- Iteration 9 --
+0.5
+int(3)
+
+ -- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+Array
+int(5)
+
+ -- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+Array
+int(5)
+
+ -- Iteration 12 --
+
+Notice: Array to string conversion in %s on line %d
+Array
+int(5)
+
+ -- Iteration 13 --
+
+Notice: Array to string conversion in %s on line %d
+Array
+int(5)
+
+ -- Iteration 14 --
+
+Notice: Array to string conversion in %s on line %d
+Array
+int(5)
+
+ -- Iteration 15 --
+
+int(0)
+
+ -- Iteration 16 --
+
+int(0)
+
+ -- Iteration 17 --
+1
+int(1)
+
+ -- Iteration 18 --
+
+int(0)
+
+ -- Iteration 19 --
+1
+int(1)
+
+ -- Iteration 20 --
+
+int(0)
+
+ -- Iteration 21 --
+
+int(0)
+
+ -- Iteration 22 --
+
+int(0)
+
+ -- Iteration 23 --
+object
+int(6)
+
+ -- Iteration 24 --
+
+int(0)
+
+ -- Iteration 25 --
+
+int(0)
+
+ -- Iteration 26 --
+Resource id #%d
+int(%d)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation10.phpt b/ext/standard/tests/strings/vprintf_variation10.phpt
new file mode 100644
index 000000000..d63738e72
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation10.phpt
Binary files differ
diff --git a/ext/standard/tests/strings/vprintf_variation11.phpt b/ext/standard/tests/strings/vprintf_variation11.phpt
new file mode 100644
index 000000000..f803e96c8
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation11.phpt
@@ -0,0 +1,94 @@
+--TEST--
+Test vprintf() function : usage variations - octal formats with octal values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string vprintf(string format, array args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vprintf() when different octal formats and octal values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vprintf() : octal formats with octal values ***\n";
+
+// defining array of octal formats
+$formats = array(
+ "%o",
+ "%+o %-o %O",
+ "%lo %Lo, %4o %-4o",
+ "%10.4o %-10.4o %04o %04.4o",
+ "%'#2o %'2o %'$2o %'_2o",
+ "%o %o %o %o",
+ "%% %%o %10 o%",
+ '%3$o %4$o %1$o %2$o'
+);
+
+// Arrays of octal values for the format defined in $format.
+// Each sub array contains octal values which correspond to each format string in $format
+$args_array = array(
+ array(00),
+ array(-01, 01, +022),
+ array(-020000000000, 020000000000, 017777777777, -017777777777),
+ array(0123456, 012345678, -01234567, 01234567),
+ array(0111, 02222, -0333333, -044444444),
+ array(0x123b, 0xfAb, 0123, 01293),
+ array(01234, 05678, -01234, 02345),
+ array(03, 04, 01, 02)
+
+);
+
+// looping to test vprintf() with different octal formats from the above $formats array
+// and with octal values from the above $args_array array
+$counter = 1;
+foreach($formats as $format) {
+ echo "\n-- Iteration $counter --\n";
+ $result = vprintf($format, $args_array[$counter-1]);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : octal formats with octal values ***
+
+-- Iteration 1 --
+0
+int(1)
+
+-- Iteration 2 --
+37777777777 1
+int(14)
+
+-- Iteration 3 --
+20000000000 o, 17777777777 20000000001
+int(38)
+
+-- Iteration 4 --
+ 37776543211 0000
+int(38)
+
+-- Iteration 5 --
+111 2222 37777444445 37733333334
+int(32)
+
+-- Iteration 6 --
+11073 7653 123 12
+int(17)
+
+-- Iteration 7 --
+% %o o
+int(6)
+
+-- Iteration 8 --
+1 2 3 4
+int(7)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation11_64bit.phpt b/ext/standard/tests/strings/vprintf_variation11_64bit.phpt
new file mode 100644
index 000000000..c92ef088f
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation11_64bit.phpt
@@ -0,0 +1,94 @@
+--TEST--
+Test vprintf() function : usage variations - octal formats with octal values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string vprintf(string format, array args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vprintf() when different octal formats and octal values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vprintf() : octal formats with octal values ***\n";
+
+// defining array of octal formats
+$formats = array(
+ "%o",
+ "%+o %-o %O",
+ "%lo %Lo, %4o %-4o",
+ "%10.4o %-10.4o %04o %04.4o",
+ "%'#2o %'2o %'$2o %'_2o",
+ "%o %o %o %o",
+ "%% %%o %10 o%",
+ '%3$o %4$o %1$o %2$o'
+);
+
+// Arrays of octal values for the format defined in $format.
+// Each sub array contains octal values which correspond to each format string in $format
+$args_array = array(
+ array(00),
+ array(-01, 01, +022),
+ array(-020000000000, 020000000000, 017777777777, -017777777777),
+ array(0123456, 012345678, -01234567, 01234567),
+ array(0111, 02222, -0333333, -044444444),
+ array(0x123b, 0xfAb, 0123, 01293),
+ array(01234, 05678, -01234, 02345),
+ array(03, 04, 01, 02)
+
+);
+
+// looping to test vprintf() with different octal formats from the above $formats array
+// and with octal values from the above $args_array array
+$counter = 1;
+foreach($formats as $format) {
+ echo "\n-- Iteration $counter --\n";
+ $result = vprintf($format, $args_array[$counter-1]);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : octal formats with octal values ***
+
+-- Iteration 1 --
+0
+int(1)
+
+-- Iteration 2 --
+1777777777777777777777 1
+int(25)
+
+-- Iteration 3 --
+1777777777760000000000 o, 17777777777 1777777777760000000001
+int(60)
+
+-- Iteration 4 --
+ 1777777777777776543211 0000
+int(49)
+
+-- Iteration 5 --
+111 2222 1777777777777777444445 1777777777777733333334
+int(54)
+
+-- Iteration 6 --
+11073 7653 123 12
+int(17)
+
+-- Iteration 7 --
+% %o o
+int(6)
+
+-- Iteration 8 --
+1 2 3 4
+int(7)
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/strings/vprintf_variation12.phpt b/ext/standard/tests/strings/vprintf_variation12.phpt
new file mode 100644
index 000000000..99938502d
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation12.phpt
@@ -0,0 +1,125 @@
+--TEST--
+Test vprintf() function : usage variations - octal formats with non-octal values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string vprintf(string format, array args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vprintf() when different octal formats and non-octal values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vprintf() : octal formats and non-octal values ***\n";
+
+// defining array of octal formats
+$formats =
+ '%o %+o %-o
+ %lo %Lo %4o %-4o
+ %10.4o %-10.4o %.4o
+ %\'#2o %\'2o %\'$2o %\'_2o
+ %3$o %4$o %1$o %2$o';
+
+// Arrays of non octal values for the format defined in $format.
+// Each sub array contains non octal values which correspond to each format in $format
+$args_array = array(
+
+ // array of float values
+ array(2.2, .2, 10.2,
+ 123456.234, 123456.234, -1234.6789, +1234.6789,
+ 2e10, +2e12, 22e+12,
+ 12345.780, 12.000000011111, -12.00000111111, -123456.234,
+ 3.33, +4.44, 1.11,-2.22 ),
+
+ // array of int values
+ array(2, -2, +2,
+ 123456, 123456234, -12346789, +12346789,
+ 123200, +20000, 22212,
+ 12345780, 1211111, -12111111, -12345634,
+ 3, +4, 1,-2 ),
+
+ // array of strings
+ array(" ", ' ', 'hello',
+ '123hello', "123hello", '-123hello', '+123hello',
+ "\12345678hello", "-\12345678hello", 'h123456ello',
+ "1234hello", "hello\0world", "NULL", "true",
+ "3", "4", '1', '2'),
+
+ // different arrays
+ array( array(0), array(1, 2), array(-1, -1),
+ array("123"), array('123'), array('-123'), array("-123"),
+ array(true), array(false), array(FALSE),
+ array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
+ array("3"), array("4"), array("1"), array("2") ),
+
+ // array of boolean data
+ array( true, TRUE, false,
+ TRUE, 0, FALSE, 1,
+ true, false, TRUE,
+ 0, 1, 1, 0,
+ 1, TRUE, 0, FALSE),
+
+);
+
+// looping to test vprintf() with different octal formats from the above $format array
+// and with non-octal values from the above $args_array array
+$counter = 1;
+foreach($args_array as $args) {
+ echo "\n-- Iteration $counter --\n";
+ $result = vprintf($formats, $args);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : octal formats and non-octal values ***
+
+-- Iteration 1 --
+2 0 12
+ 361100 o 37777775456 2322
+
+ 30071 14 37777777764 37777416700
+ 12 361100 2 0
+int(116)
+
+-- Iteration 2 --
+2 37777777776 2
+ 361100 o 37720715133 57062645
+
+ 57060664 4475347 37721631371 37720717336
+ 2 361100 2 37777777776
+int(146)
+
+-- Iteration 3 --
+0 0 0
+ 173 o 37777777605 173
+
+ 2322 0 $0 _0
+ 0 173 0 0
+int(88)
+
+-- Iteration 4 --
+1 1 1
+ 1 o 1 1
+
+ #1 1 $1 _1
+ 1 1 1 1
+int(75)
+
+-- Iteration 5 --
+1 1 0
+ 1 o 0 1
+
+ #0 1 $1 _0
+ 0 1 1 1
+int(75)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation12_64bit.phpt b/ext/standard/tests/strings/vprintf_variation12_64bit.phpt
new file mode 100644
index 000000000..32dc01bfc
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation12_64bit.phpt
@@ -0,0 +1,125 @@
+--TEST--
+Test vprintf() function : usage variations - octal formats with non-octal values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string vprintf(string format, array args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vprintf() when different octal formats and non-octal values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vprintf() : octal formats and non-octal values ***\n";
+
+// defining array of octal formats
+$formats =
+ '%o %+o %-o
+ %lo %Lo %4o %-4o
+ %10.4o %-10.4o %.4o
+ %\'#2o %\'2o %\'$2o %\'_2o
+ %3$o %4$o %1$o %2$o';
+
+// Arrays of non octal values for the format defined in $format.
+// Each sub array contains non octal values which correspond to each format in $format
+$args_array = array(
+
+ // array of float values
+ array(2.2, .2, 10.2,
+ 123456.234, 123456.234, -1234.6789, +1234.6789,
+ 2e10, +2e12, 22e+12,
+ 12345.780, 12.000000011111, -12.00000111111, -123456.234,
+ 3.33, +4.44, 1.11,-2.22 ),
+
+ // array of int values
+ array(2, -2, +2,
+ 123456, 123456234, -12346789, +12346789,
+ 123200, +20000, 22212,
+ 12345780, 1211111, -12111111, -12345634,
+ 3, +4, 1,-2 ),
+
+ // array of strings
+ array(" ", ' ', 'hello',
+ '123hello', "123hello", '-123hello', '+123hello',
+ "\12345678hello", "-\12345678hello", 'h123456ello',
+ "1234hello", "hello\0world", "NULL", "true",
+ "3", "4", '1', '2'),
+
+ // different arrays
+ array( array(0), array(1, 2), array(-1, -1),
+ array("123"), array('123'), array('-123'), array("-123"),
+ array(true), array(false), array(FALSE),
+ array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
+ array("3"), array("4"), array("1"), array("2") ),
+
+ // array of boolean data
+ array( true, TRUE, false,
+ TRUE, 0, FALSE, 1,
+ true, false, TRUE,
+ 0, 1, 1, 0,
+ 1, TRUE, 0, FALSE),
+
+);
+
+// looping to test vprintf() with different octal formats from the above $format array
+// and with non-octal values from the above $args_array array
+$counter = 1;
+foreach($args_array as $args) {
+ echo "\n-- Iteration $counter --\n";
+ $result = vprintf($formats, $args);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing vprintf() : octal formats and non-octal values ***
+
+-- Iteration 1 --
+2 0 12
+ 361100 o 1777777777777777775456 2322
+
+ 30071 14 1777777777777777777764 1777777777777777416700
+ 12 361100 2 0
+int(149)
+
+-- Iteration 2 --
+2 1777777777777777777776 2
+ 361100 o 1777777777777720715133 57062645
+
+ 57060664 4475347 1777777777777721631371 1777777777777720717336
+ 2 361100 2 1777777777777777777776
+int(201)
+
+-- Iteration 3 --
+0 0 0
+ 173 o 1777777777777777777605 173
+
+ 2322 0 $0 _0
+ 0 173 0 0
+int(99)
+
+-- Iteration 4 --
+1 1 1
+ 1 o 1 1
+
+ #1 1 $1 _1
+ 1 1 1 1
+int(75)
+
+-- Iteration 5 --
+1 1 0
+ 1 o 0 1
+
+ #0 1 $1 _0
+ 0 1 1 1
+int(75)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation13.phpt b/ext/standard/tests/strings/vprintf_variation13.phpt
new file mode 100644
index 000000000..6b629c851
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation13.phpt
@@ -0,0 +1,94 @@
+--TEST--
+Test vprintf() function : usage variations - hexa formats with hexa values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string vprintf(string format, array args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vprintf() when different hexa formats and hexa values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vprintf() : hexa formats with hexa values ***\n";
+
+// defining array of different hexa formats
+$formats = array(
+ "%x",
+ "%+x %-x %X",
+ "%lx %Lx, %4x %-4x",
+ "%10.4x %-10.4x %04x %04.4x",
+ "%'#2x %'2x %'$2x %'_2x",
+ "%x %x %x %x",
+ "% %%x x%",
+ '%3$x %4$x %1$x %2$x'
+);
+
+// Arrays of hexa values for the format defined in $format.
+// Each sub array contains hexa values which correspond to each format string in $format
+$args_array = array(
+ array(0x0),
+ array(-0x1, 0x1, +0x22),
+ array(0x7FFFFFFF, -0x7fffffff, +0x7000000, -0x80000000),
+ array(123456, 12345678, -1234567, 1234567),
+ array(1, 0x2222, 0333333, -0x44444444),
+ array(0x123b, 0xfAb, "0xaxz", 01293),
+ array(0x1234, 0x34, 0x2ff),
+ array(0x3, 0x4, 0x1, 0x2)
+
+);
+
+// looping to test vprintf() with different char octal from the above $format array
+// and with octal values from the above $args_array array
+$counter = 1;
+foreach($formats as $format) {
+ echo "\n-- Iteration $counter --\n";
+ $result = vprintf($format, $args_array[$counter-1]);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : hexa formats with hexa values ***
+
+-- Iteration 1 --
+0
+int(1)
+
+-- Iteration 2 --
+ffffffff 1 22
+int(13)
+
+-- Iteration 3 --
+7fffffff x, 7000000 80000000
+int(28)
+
+-- Iteration 4 --
+ ffed2979 0000
+int(35)
+
+-- Iteration 5 --
+#1 2222 1b6db bbbbbbbc
+int(22)
+
+-- Iteration 6 --
+123b fab 0 a
+int(12)
+
+-- Iteration 7 --
+%34 x
+int(5)
+
+-- Iteration 8 --
+1 2 3 4
+int(7)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation13_64bit.phpt b/ext/standard/tests/strings/vprintf_variation13_64bit.phpt
new file mode 100644
index 000000000..8cf768b77
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation13_64bit.phpt
@@ -0,0 +1,94 @@
+--TEST--
+Test vprintf() function : usage variations - hexa formats with hexa values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string vprintf(string format, array args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vprintf() when different hexa formats and hexa values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vprintf() : hexa formats with hexa values ***\n";
+
+// defining array of different hexa formats
+$formats = array(
+ "%x",
+ "%+x %-x %X",
+ "%lx %Lx, %4x %-4x",
+ "%10.4x %-10.4x %04x %04.4x",
+ "%'#2x %'2x %'$2x %'_2x",
+ "%x %x %x %x",
+ "% %%x x%",
+ '%3$x %4$x %1$x %2$x'
+);
+
+// Arrays of hexa values for the format defined in $format.
+// Each sub array contains hexa values which correspond to each format string in $format
+$args_array = array(
+ array(0x0),
+ array(-0x1, 0x1, +0x22),
+ array(0x7FFFFFFF, -0x7fffffff, +0x7000000, -0x80000000),
+ array(123456, 12345678, -1234567, 1234567),
+ array(1, 0x2222, 0333333, -0x44444444),
+ array(0x123b, 0xfAb, "0xaxz", 01293),
+ array(0x1234, 0x34, 0x2ff),
+ array(0x3, 0x4, 0x1, 0x2)
+
+);
+
+// looping to test vprintf() with different char octal from the above $format array
+// and with octal values from the above $args_array array
+$counter = 1;
+foreach($formats as $format) {
+ echo "\n-- Iteration $counter --\n";
+ $result = vprintf($format, $args_array[$counter-1]);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : hexa formats with hexa values ***
+
+-- Iteration 1 --
+0
+int(1)
+
+-- Iteration 2 --
+ffffffffffffffff 1 22
+int(21)
+
+-- Iteration 3 --
+7fffffff x, 7000000 ffffffff80000000
+int(36)
+
+-- Iteration 4 --
+ ffffffffffed2979 0000
+int(43)
+
+-- Iteration 5 --
+#1 2222 1b6db ffffffffbbbbbbbc
+int(30)
+
+-- Iteration 6 --
+123b fab 0 a
+int(12)
+
+-- Iteration 7 --
+%34 x
+int(5)
+
+-- Iteration 8 --
+1 2 3 4
+int(7)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation14.phpt b/ext/standard/tests/strings/vprintf_variation14.phpt
new file mode 100644
index 000000000..bbb15e149
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation14.phpt
@@ -0,0 +1,126 @@
+--TEST--
+Test vprintf() function : usage variations - hexa formats with non-hexa values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string vprintf(string format, array args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vprintf() when different hexa formats and non-hexa values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vprintf() : hexa formats and non-hexa values ***\n";
+
+// defining array of different hexa formats
+$formats =
+ '%x %+x %-x
+ %lx %Lx %4x %-4x
+ %10.4x %-10.4x %.4x
+ %\'#2x %\'2x %\'$2x %\'_2x
+ %3$x %4$x %1$x %2$x';
+
+// Arrays of non hexa values for the format defined in $format.
+// Each sub array contains non hexa values which correspond to each format in $format
+$args_array = array(
+
+ // array of float values
+ array(2.2, .2, 10.2,
+ 123456.234, 123456.234, -1234.6789, +1234.6789,
+ 2e10, +2e12, 22e+12,
+ 12345.780, 12.000000011111, -12.00000111111, -123456.234,
+ 3.33, +4.44, 1.11,-2.22 ),
+
+ // array of int values
+ array(2, -2, +2,
+ 123456, 123456234, -12346789, +12346789,
+ 123200, +20000, 22212,
+ 12345780, 1211111, -12111111, -12345634,
+ 3, +4, 1,-2 ),
+
+ // array of strings
+ array(" ", ' ', 'hello',
+ '123hello', "123hello", '-123hello', '+123hello',
+ "\12345678hello", "-\12345678hello", 'h123456ello',
+ "1234hello", "hello\0world", "NULL", "true",
+ "3", "4", '1', '2'),
+
+ // different arrays
+ array( array(0), array(1, 2), array(-1, -1),
+ array("123"), array('123'), array('-123'), array("-123"),
+ array(true), array(TRUE), array(FALSE),
+ array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
+ array("3"), array("4"), array("1"), array("2") ),
+
+ // array of boolean data
+ array( true, TRUE, false,
+ TRUE, 0, FALSE, 1,
+ true, TRUE, FALSE,
+ 0, 1, 1, 0,
+ 1, TRUE, 0, FALSE),
+
+);
+
+// looping to test vprintf() with different hexa formats from the above $format array
+// and with non-hexa values from the above $args_array array
+
+$counter = 1;
+foreach($args_array as $args) {
+ echo "\n-- Iteration $counter --\n";
+ $result = vprintf($formats, $args);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : hexa formats and non-hexa values ***
+
+-- Iteration 1 --
+2 0 a
+ 1e240 x fffffb2e 4d2
+
+ 3039 c fffffff4 fffe1dc0
+ a 1e240 2 0
+int(101)
+
+-- Iteration 2 --
+2 fffffffe 2
+ 1e240 x ff439a5b bc65a5
+
+ bc61b4 127ae7 ff4732f9 ff439ede
+ 2 1e240 2 fffffffe
+int(124)
+
+-- Iteration 3 --
+0 0 0
+ 7b x ffffff85 7b
+
+ 4d2 0 $0 _0
+ 0 7b 0 0
+int(82)
+
+-- Iteration 4 --
+1 1 1
+ 1 x 1 1
+
+ #1 1 $1 _1
+ 1 1 1 1
+int(75)
+
+-- Iteration 5 --
+1 1 0
+ 1 x 0 1
+
+ #0 1 $1 _0
+ 0 1 1 1
+int(75)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation14_64bit.phpt b/ext/standard/tests/strings/vprintf_variation14_64bit.phpt
new file mode 100644
index 000000000..51b2f477b
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation14_64bit.phpt
@@ -0,0 +1,126 @@
+--TEST--
+Test vprintf() function : usage variations - hexa formats with non-hexa values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string vprintf(string format, array args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vprintf() when different hexa formats and non-hexa values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vprintf() : hexa formats and non-hexa values ***\n";
+
+// defining array of different hexa formats
+$formats =
+ '%x %+x %-x
+ %lx %Lx %4x %-4x
+ %10.4x %-10.4x %.4x
+ %\'#2x %\'2x %\'$2x %\'_2x
+ %3$x %4$x %1$x %2$x';
+
+// Arrays of non hexa values for the format defined in $format.
+// Each sub array contains non hexa values which correspond to each format in $format
+$args_array = array(
+
+ // array of float values
+ array(2.2, .2, 10.2,
+ 123456.234, 123456.234, -1234.6789, +1234.6789,
+ 2e10, +2e12, 22e+12,
+ 12345.780, 12.000000011111, -12.00000111111, -123456.234,
+ 3.33, +4.44, 1.11,-2.22 ),
+
+ // array of int values
+ array(2, -2, +2,
+ 123456, 123456234, -12346789, +12346789,
+ 123200, +20000, 22212,
+ 12345780, 1211111, -12111111, -12345634,
+ 3, +4, 1,-2 ),
+
+ // array of strings
+ array(" ", ' ', 'hello',
+ '123hello', "123hello", '-123hello', '+123hello',
+ "\12345678hello", "-\12345678hello", 'h123456ello',
+ "1234hello", "hello\0world", "NULL", "true",
+ "3", "4", '1', '2'),
+
+ // different arrays
+ array( array(0), array(1, 2), array(-1, -1),
+ array("123"), array('123'), array('-123'), array("-123"),
+ array(true), array(TRUE), array(FALSE),
+ array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
+ array("3"), array("4"), array("1"), array("2") ),
+
+ // array of boolean data
+ array( true, TRUE, false,
+ TRUE, 0, FALSE, 1,
+ true, TRUE, FALSE,
+ 0, 1, 1, 0,
+ 1, TRUE, 0, FALSE),
+
+);
+
+// looping to test vprintf() with different hexa formats from the above $format array
+// and with non-hexa values from the above $args_array array
+
+$counter = 1;
+foreach($args_array as $args) {
+ echo "\n-- Iteration $counter --\n";
+ $result = vprintf($formats, $args);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : hexa formats and non-hexa values ***
+
+-- Iteration 1 --
+2 0 a
+ 1e240 x fffffffffffffb2e 4d2
+
+ 3039 c fffffffffffffff4 fffffffffffe1dc0
+ a 1e240 2 0
+int(125)
+
+-- Iteration 2 --
+2 fffffffffffffffe 2
+ 1e240 x ffffffffff439a5b bc65a5
+
+ bc61b4 127ae7 ffffffffff4732f9 ffffffffff439ede
+ 2 1e240 2 fffffffffffffffe
+int(164)
+
+-- Iteration 3 --
+0 0 0
+ 7b x ffffffffffffff85 7b
+
+ 4d2 0 $0 _0
+ 0 7b 0 0
+int(90)
+
+-- Iteration 4 --
+1 1 1
+ 1 x 1 1
+
+ #1 1 $1 _1
+ 1 1 1 1
+int(75)
+
+-- Iteration 5 --
+1 1 0
+ 1 x 0 1
+
+ #0 1 $1 _0
+ 0 1 1 1
+int(75)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation15.phpt b/ext/standard/tests/strings/vprintf_variation15.phpt
new file mode 100644
index 000000000..97b1bc5c6
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation15.phpt
@@ -0,0 +1,75 @@
+--TEST--
+Test vprintf() function : usage variations - unsigned formats with unsigned values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string vprintf(string format, array args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vprintf() when different unsigned formats and unsigned values
+ * are passed to the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vprintf() : unsigned formats and unsigned values ***\n";
+
+// defining array of unsigned formats
+$formats = array(
+ '%u %+u %-u',
+ '%lu %Lu %4u %-4u',
+ '%10.4u %-10.4u %.4u',
+ '%\'#2u %\'2u %\'$2u %\'_2u',
+ '%3$u %4$u %1$u %2$u'
+);
+
+// Arrays of unsigned values for the format defined in $format.
+// Each sub array contains unsigned values which correspond to each format string in $format
+$args_array = array(
+ array(1234567, 01234567, 0 ),
+ array(12345678900, 12345678900, 1234, 12345),
+ array("1234000", 10.1234567e10, 1.2e2),
+ array(1, 0, 00, "10_"),
+ array(3, 4, 1, 2)
+);
+
+// looping to test vprintf() with different unsigned formats from the above $format array
+// and with signed and other types of values from the above $args_array array
+$counter = 1;
+foreach($formats as $format) {
+ echo "\n-- Iteration $counter --\n";
+ $result = vprintf($format, $args_array[$counter-1]);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : unsigned formats and unsigned values ***
+
+-- Iteration 1 --
+1234567 342391 0
+int(16)
+
+-- Iteration 2 --
+3755744308 u 1234 12345
+int(23)
+
+-- Iteration 3 --
+ 1234000 2450319192 120
+int(25)
+
+-- Iteration 4 --
+#1 0 $0 10
+int(10)
+
+-- Iteration 5 --
+1 2 3 4
+int(7)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation15_64bit.phpt b/ext/standard/tests/strings/vprintf_variation15_64bit.phpt
new file mode 100644
index 000000000..226f17572
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation15_64bit.phpt
@@ -0,0 +1,75 @@
+--TEST--
+Test vprintf() function : usage variations - unsigned formats with unsigned values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string vprintf(string format, array args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vprintf() when different unsigned formats and unsigned values
+ * are passed to the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vprintf() : unsigned formats and unsigned values ***\n";
+
+// defining array of unsigned formats
+$formats = array(
+ '%u %+u %-u',
+ '%lu %Lu %4u %-4u',
+ '%10.4u %-10.4u %.4u',
+ '%\'#2u %\'2u %\'$2u %\'_2u',
+ '%3$u %4$u %1$u %2$u'
+);
+
+// Arrays of unsigned values for the format defined in $format.
+// Each sub array contains unsigned values which correspond to each format string in $format
+$args_array = array(
+ array(1234567, 01234567, 0 ),
+ array(12345678900, 12345678900, 1234, 12345),
+ array("1234000", 10e20, 1.2e2),
+ array(1, 0, 00, "10_"),
+ array(3, 4, 1, 2)
+);
+
+// looping to test vprintf() with different unsigned formats from the above $format array
+// and with signed and other types of values from the above $args_array array
+$counter = 1;
+foreach($formats as $format) {
+ echo "\n-- Iteration $counter --\n";
+ $result = vprintf($format, $args_array[$counter-1]);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing vprintf() : unsigned formats and unsigned values ***
+
+-- Iteration 1 --
+1234567 342391 0
+int(16)
+
+-- Iteration 2 --
+12345678900 u 1234 12345
+int(24)
+
+-- Iteration 3 --
+ 1234000 0 120
+int(25)
+
+-- Iteration 4 --
+#1 0 $0 10
+int(10)
+
+-- Iteration 5 --
+1 2 3 4
+int(7)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation16.phpt b/ext/standard/tests/strings/vprintf_variation16.phpt
new file mode 100644
index 000000000..8c3d66d02
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation16.phpt
@@ -0,0 +1,109 @@
+--TEST--
+Test vprintf() function : usage variations - unsigned formats with signed and other types of values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string vprintf(string format, array args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vprintf() when different unsigned formats and signed values and other types of values
+ * are passed to the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vprintf() : unsigned formats and signed & other types of values ***\n";
+
+// defining array of unsigned formats
+$formats =
+ '%u %+u %-u
+ %lu %Lu %4u %-4u
+ %10.4u %-10.4u %.4u
+ %\'#2u %\'2u %\'$2u %\'_2u
+ %3$u %4$u %1$u %2$u';
+
+// Arrays of signed and other type of values for the format defined in $format.
+// Each sub array contains signed values which correspond to each format in $format
+$args_array = array(
+
+ // array of float values
+ array(+2.2, +.2, +10.2,
+ +123456.234, +123456.234, +1234.6789,
+ +2e10, +2e12, +22e+12,
+ +12345.780, +12.000000011111, -12.00000111111, -123456.234,
+ +3.33, +4.44, +1.11,-2.22 ),
+
+ // array of strings
+ array(" ", ' ', 'hello',
+ '123hello', "123hello", '-123hello', '+123hello',
+ "\12345678hello", "-\12345678hello", 'h123456ello',
+ "1234hello", "hello\0world", "NULL", "true",
+ "3", "4", '1', '2'),
+
+ // different arrays
+ array( array(0), array(1, 2), array(-1, -1),
+ array("123"), array('123'), array('-123'), array("-123"),
+ array(true), array(TRUE), array(FALSE),
+ array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
+ array("3"), array("4"), array("1"), array("2") ),
+
+ // array of boolean data
+ array( true, TRUE, false,
+ TRUE, 0, FALSE, 1,
+ true, TRUE, FALSE,
+ 0, 1, 1, 0,
+ 1, TRUE, 0, FALSE),
+
+);
+
+// looping to test vprintf() with different unsigned formats from the above $format array
+// and with signed and other types of values from the above $args_array array
+$counter = 1;
+foreach($args_array as $args) {
+ echo "\n-- Iteration $counter --\n";
+ $result = vprintf($formats, $args);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+}
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : unsigned formats and signed & other types of values ***
+
+-- Iteration 1 --
+2 0 10
+ 123456 u 1234 2820130816
+ 2840207360 1177509888 12345
+ 12 4294967284 4294843840 _3
+ 10 123456 2 0
+int(115)
+
+-- Iteration 2 --
+0 0 0
+ 123 u 4294967173 123
+ 0 0 0
+ 1234 0 $0 _0
+ 0 123 0 0
+int(88)
+
+-- Iteration 3 --
+1 1 1
+ 1 u 1 1
+ 1 1 1
+ #1 1 $1 _1
+ 1 1 1 1
+int(76)
+
+-- Iteration 4 --
+1 1 0
+ 1 u 0 1
+ 1 1 0
+ #0 1 $1 _0
+ 0 1 1 1
+int(76)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation16_64bit.phpt b/ext/standard/tests/strings/vprintf_variation16_64bit.phpt
new file mode 100644
index 000000000..dab90d1e4
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation16_64bit.phpt
@@ -0,0 +1,110 @@
+--TEST--
+Test vprintf() function : usage variations - unsigned formats with signed and other types of values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string vprintf(string format, array args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vprintf() when different unsigned formats and signed values and other types of values
+ * are passed to the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vprintf() : unsigned formats and signed & other types of values ***\n";
+
+// defining array of unsigned formats
+$formats =
+ '%u %+u %-u
+ %lu %Lu %4u %-4u
+ %10.4u %-10.4u %.4u
+ %\'#2u %\'2u %\'$2u %\'_2u
+ %3$u %4$u %1$u %2$u';
+
+// Arrays of signed and other type of values for the format defined in $format.
+// Each sub array contains signed values which correspond to each format in $format
+$args_array = array(
+
+ // array of float values
+ array(+2.2, +.2, +10.2,
+ +123456.234, +123456.234, +1234.6789,
+ +2e10, +2e12, +22e+12,
+ +12345.780, +12.000000011111, -12.00000111111, -123456.234,
+ +3.33, +4.44, +1.11,-2.22 ),
+
+ // array of strings
+ array(" ", ' ', 'hello',
+ '123hello', "123hello", '-123hello', '+123hello',
+ "\12345678hello", "-\12345678hello", 'h123456ello',
+ "1234hello", "hello\0world", "NULL", "true",
+ "3", "4", '1', '2'),
+
+ // different arrays
+ array( array(0), array(1, 2), array(-1, -1),
+ array("123"), array('123'), array('-123'), array("-123"),
+ array(true), array(TRUE), array(FALSE),
+ array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
+ array("3"), array("4"), array("1"), array("2") ),
+
+ // array of boolean data
+ array( true, TRUE, false,
+ TRUE, 0, FALSE, 1,
+ true, TRUE, FALSE,
+ 0, 1, 1, 0,
+ 1, TRUE, 0, FALSE),
+
+);
+
+// looping to test vprintf() with different unsigned formats from the above $format array
+// and with signed and other types of values from the above $args_array array
+$counter = 1;
+foreach($args_array as $args) {
+ echo "\n-- Iteration $counter --\n";
+ $result = vprintf($formats, $args);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : unsigned formats and signed & other types of values ***
+
+-- Iteration 1 --
+2 0 10
+ 123456 u 1234 20000000000
+ 2000000000000 22000000000000 12345
+ 12 18446744073709551604 18446744073709428160 _3
+ 10 123456 2 0
+int(143)
+
+-- Iteration 2 --
+0 0 0
+ 123 u 18446744073709551493 123
+ 0 0 0
+ 1234 0 $0 _0
+ 0 123 0 0
+int(98)
+
+-- Iteration 3 --
+1 1 1
+ 1 u 1 1
+ 1 1 1
+ #1 1 $1 _1
+ 1 1 1 1
+int(76)
+
+-- Iteration 4 --
+1 1 0
+ 1 u 0 1
+ 1 1 0
+ #0 1 $1 _0
+ 0 1 1 1
+int(76)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation17.phpt b/ext/standard/tests/strings/vprintf_variation17.phpt
new file mode 100644
index 000000000..e2e853015
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation17.phpt
@@ -0,0 +1,71 @@
+--TEST--
+Test vsprintf() function : usage variations - scientific formats with scientific values
+--FILE--
+<?php
+/* Prototype : string vsprintf(string format, array args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vprintf() when different scientific formats and scientific values
+ * are passed to the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vprintf() : scientific formats and scientific values ***\n";
+
+// defining array of scientific formats
+$formats = array(
+ '%e %+e %-e',
+ '%le %Le %4e %-4e',
+ '%10.4e %-10.4e %.4e',
+ '%\'#20e %\'20e %\'$20e %\'_20e',
+ '%3$e %4$e %1$e %2$e'
+);
+
+// Arrays of scientific values for the format defined in $format.
+// Each sub array contains scientific values which correspond to each format string in $format
+$args_array = array(
+ array(0, 1e0, "10e2" ),
+ array(2.2e2, 10e10, 1000e-2, 1000e7),
+ array(-22e12, 10e20, 1.2e2),
+ array(1e1, +1e2, -1e3, "1e2_"),
+ array(3e3, 4e3, 1e3, 2e3)
+);
+
+// looping to test vprintf() with different scientific formats from the above $format array
+// and with signed and other types of values from the above $args_array array
+$counter = 1;
+foreach($formats as $format) {
+ echo "\n-- Iteration $counter --\n";
+ $result = vprintf($format, $args_array[$counter-1]);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : scientific formats and scientific values ***
+
+-- Iteration 1 --
+0.000000e+0 +1.000000e+0 1.000000e+3
+int(36)
+
+-- Iteration 2 --
+2.200000e+2 e 1.000000e+1 1.000000e+10
+int(38)
+
+-- Iteration 3 --
+-2.2000e+13 1.0000e+21 1.2000e+2
+int(32)
+
+-- Iteration 4 --
+#########1.000000e+1 1.000000e+2 $$$$$$$$-1.000000e+3 _________1.000000e+2
+int(74)
+
+-- Iteration 5 --
+1.000000e+3 2.000000e+3 3.000000e+3 4.000000e+3
+int(47)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation18.phpt b/ext/standard/tests/strings/vprintf_variation18.phpt
new file mode 100644
index 000000000..8b30ae78d
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation18.phpt
@@ -0,0 +1,106 @@
+--TEST--
+Test vprintf() function : usage variations - scientific formats with non-scientific values
+--FILE--
+<?php
+/* Prototype : string vprintf(string format, array args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vprintf() when different scientific formats and non-scientific values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vprintf() : scientific formats and non-scientific values ***\n";
+
+// defining array of non-scientific formats
+$formats =
+ '%e %+e %-e
+ %le %Le %4e %-4e
+ %10.4e %-10.4e %04e %04.4e
+ %\'#2e %\'2e %\'$2e %\'_2e
+ %3$e %4$e %1$e %2$e';
+
+// Arrays of non scientific values for the format defined in $format.
+// Each sub array contains non scientific values which correspond to each format in $format
+$args_array = array(
+
+ // array of float values
+ array(2.2, .2, 10.2,
+ 123456.234, 123456.234, -1234.6789, +1234.6789,
+ 20.00, +212.2, -411000000000, 2212.000000000001,
+ 12345.780, 12.000000011111, -12.00000111111, -123456.234,
+ 3.33, +4.44, 1.11,-2.22 ),
+
+ // array of strings
+ array(" ", ' ', 'hello',
+ '123hello', "123hello", '-123hello', '+123hello',
+ "\12345678hello", "-\12345678hello", '0123456hello', 'h123456ello',
+ "1234hello", "hello\0world", "NULL", "true",
+ "3", "4", '1', '2'),
+
+ // different arrays
+ array( array(0), array(1, 2), array(-1, -1),
+ array("123"), array('123'), array('-123'), array("-123"),
+ array(true), array(false), array(TRUE), array(FALSE),
+ array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
+ array("3"), array("4"), array("1"), array("2") ),
+
+ // array of boolean data
+ array( true, TRUE, false,
+ TRUE, 0, FALSE, 1,
+ true, false, TRUE, FALSE,
+ 0, 1, 1, 0,
+ 1, TRUE, 0, FALSE),
+
+);
+
+// looping to test vprintf() with different scientific formats from the above $format array
+// and with non-scientific values from the above $args_array array
+$counter = 1;
+foreach($args_array as $args) {
+ echo "\n-- Iteration $counter --\n";
+ $result = vprintf($formats, $args);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : scientific formats and non-scientific values ***
+
+-- Iteration 1 --
+2.200000e+0 +2.000000e-1 1.020000e+1
+ 1.234562e+5 e -1.234679e+3 1.234679e+3
+ 2.0000e+1 2.1220e+2 -4.110000e+11 2.2120e+3
+ 1.234578e+4 1.200000e+1 -1.200000e+1 -1.234562e+5
+ 1.020000e+1 1.234562e+5 2.200000e+0 2.000000e-1
+int(232)
+
+-- Iteration 2 --
+0.000000e+0 +0.000000e+0 0.000000e+0
+ 1.230000e+2 e -1.230000e+2 1.230000e+2
+ 0.0000e+0 0.0000e+0 1.234560e+5 0.0000e+0
+ 1.234000e+3 0.000000e+0 0.000000e+0 0.000000e+0
+ 0.000000e+0 1.230000e+2 0.000000e+0 0.000000e+0
+int(228)
+
+-- Iteration 3 --
+1.000000e+0 +1.000000e+0 1.000000e+0
+ 1.000000e+0 e 1.000000e+0 1.000000e+0
+ 1.0000e+0 1.0000e+0 1.000000e+0 1.0000e+0
+ 1.000000e+0 1.000000e+0 1.000000e+0 1.000000e+0
+ 1.000000e+0 1.000000e+0 1.000000e+0 1.000000e+0
+int(227)
+
+-- Iteration 4 --
+1.000000e+0 +1.000000e+0 0.000000e+0
+ 1.000000e+0 e 0.000000e+0 1.000000e+0
+ 1.0000e+0 0.0000e+0 1.000000e+0 0.0000e+0
+ 0.000000e+0 1.000000e+0 1.000000e+0 0.000000e+0
+ 0.000000e+0 1.000000e+0 1.000000e+0 1.000000e+0
+int(227)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation19.phpt b/ext/standard/tests/strings/vprintf_variation19.phpt
new file mode 100644
index 000000000..a9288a163
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation19.phpt
@@ -0,0 +1,104 @@
+--TEST--
+Test vprintf() function : usage variations - with whitespaces in format strings
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string vprintf(string $format , array $args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+echo "*** Testing vprintf() : with white spaces in format strings ***\n";
+
+// initializing the format array
+$formats = array(
+ "% d % d % d",
+ "% f % f % f",
+ "% F % F % F",
+ "% b % b % b",
+ "% c % c % c",
+ "% e % e % e",
+ "% u % u % u",
+ "% o % o % o",
+ "% x % x % x",
+ "% X % X % X",
+ "% E % E % E"
+);
+
+// initializing the args array
+
+$args_array = array(
+ array(111, 222, 333),
+ array(1.1, .2, -0.6),
+ array(1.12, -1.13, +0.23),
+ array(1, 2, 3),
+ array(65, 66, 67),
+ array(2e1, 2e-1, -2e1),
+ array(-11, +22, 33),
+ array(012, -02394, +02389),
+ array(0x11, -0x22, +0x33),
+ array(0x11, -0x22, +0x33),
+ array(2e1, 2e-1, -2e1)
+);
+
+$counter = 1;
+foreach($formats as $format) {
+ echo"\n-- Iteration $counter --\n";
+ $result = vprintf($format, $args_array[$counter-1]);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : with white spaces in format strings ***
+
+-- Iteration 1 --
+111 222 333
+int(13)
+
+-- Iteration 2 --
+1.100000 0.200000 -0.600000
+int(29)
+
+-- Iteration 3 --
+1.120000 -1.130000 0.230000
+int(29)
+
+-- Iteration 4 --
+1 10 11
+int(9)
+
+-- Iteration 5 --
+A B C
+int(7)
+
+-- Iteration 6 --
+2.000000e+1 2.000000e-1 -2.000000e+1
+int(38)
+
+-- Iteration 7 --
+4294967285 22 33
+int(18)
+
+-- Iteration 8 --
+12 37777777755 23
+int(19)
+
+-- Iteration 9 --
+11 ffffffde 33
+int(16)
+
+-- Iteration 10 --
+11 FFFFFFDE 33
+int(16)
+
+-- Iteration 11 --
+2.000000E+1 2.000000E-1 -2.000000E+1
+int(38)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation19_64bit.phpt b/ext/standard/tests/strings/vprintf_variation19_64bit.phpt
new file mode 100644
index 000000000..d98199624
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation19_64bit.phpt
@@ -0,0 +1,104 @@
+--TEST--
+Test vprintf() function : usage variations - with whitespaces in format strings
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string vprintf(string $format , array $args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+echo "*** Testing vprintf() : with white spaces in format strings ***\n";
+
+// initializing the format array
+$formats = array(
+ "% d % d % d",
+ "% f % f % f",
+ "% F % F % F",
+ "% b % b % b",
+ "% c % c % c",
+ "% e % e % e",
+ "% u % u % u",
+ "% o % o % o",
+ "% x % x % x",
+ "% X % X % X",
+ "% E % E % E"
+);
+
+// initializing the args array
+
+$args_array = array(
+ array(111, 222, 333),
+ array(1.1, .2, -0.6),
+ array(1.12, -1.13, +0.23),
+ array(1, 2, 3),
+ array(65, 66, 67),
+ array(2e1, 2e-1, -2e1),
+ array(-11, +22, 33),
+ array(012, -02394, +02389),
+ array(0x11, -0x22, +0x33),
+ array(0x11, -0x22, +0x33),
+ array(2e1, 2e-1, -2e1)
+);
+
+$counter = 1;
+foreach($formats as $format) {
+ echo"\n-- Iteration $counter --\n";
+ $result = vprintf($format, $args_array[$counter-1]);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : with white spaces in format strings ***
+
+-- Iteration 1 --
+111 222 333
+int(13)
+
+-- Iteration 2 --
+1.100000 0.200000 -0.600000
+int(29)
+
+-- Iteration 3 --
+1.120000 -1.130000 0.230000
+int(29)
+
+-- Iteration 4 --
+1 10 11
+int(9)
+
+-- Iteration 5 --
+A B C
+int(7)
+
+-- Iteration 6 --
+2.000000e+1 2.000000e-1 -2.000000e+1
+int(38)
+
+-- Iteration 7 --
+18446744073709551605 22 33
+int(28)
+
+-- Iteration 8 --
+12 1777777777777777777755 23
+int(30)
+
+-- Iteration 9 --
+11 ffffffffffffffde 33
+int(24)
+
+-- Iteration 10 --
+11 FFFFFFFFFFFFFFDE 33
+int(24)
+
+-- Iteration 11 --
+2.000000E+1 2.000000E-1 -2.000000E+1
+int(38)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation2.phpt b/ext/standard/tests/strings/vprintf_variation2.phpt
new file mode 100644
index 000000000..63c3dfe39
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation2.phpt
@@ -0,0 +1,202 @@
+--TEST--
+Test vprintf() function : usage variations - unexpected values for args argument
+--FILE--
+<?php
+/* Prototype : string vprintf(string format, array args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vprintf() when different unexpected values are passed to
+ * the '$args' arguments of the function
+*/
+
+echo "*** Testing vprintf() : with unexpected values for args argument ***\n";
+
+// initialising the required variables
+$format = '%s';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// declaring a class
+class sample
+{
+ public function __toString() {
+ return "object";
+ }
+}
+
+// Defining resource
+$file_handle = fopen(__FILE__, 'r');
+
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+/*1*/ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+/*5*/ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // null data
+/*10*/ NULL,
+ null,
+
+ // boolean data
+/*12*/ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+/*16*/ "",
+ '',
+
+ // string data
+/*18*/ "string",
+ 'string',
+
+ // object data
+/*20*/ new sample(),
+
+ // undefined data
+/*21*/ @$undefined_var,
+
+ // unset data
+/*22*/ @$unset_var,
+
+ // resource data
+/*23*/ $file_handle
+);
+
+// loop through each element of the array for args
+$counter = 1;
+foreach($values as $value) {
+ echo "\n-- Iteration $counter --\n";
+ $result = vprintf($format,$value);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+};
+
+// closing the resource
+fclose($file_handle);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing vprintf() : with unexpected values for args argument ***
+
+-- Iteration 1 --
+0
+int(1)
+
+-- Iteration 2 --
+1
+int(1)
+
+-- Iteration 3 --
+12345
+int(5)
+
+-- Iteration 4 --
+-2345
+int(5)
+
+-- Iteration 5 --
+10.5
+int(4)
+
+-- Iteration 6 --
+-10.5
+int(5)
+
+-- Iteration 7 --
+101234567000
+int(12)
+
+-- Iteration 8 --
+1.07654321E-9
+int(13)
+
+-- Iteration 9 --
+0.5
+int(3)
+
+-- Iteration 10 --
+
+Warning: vprintf(): Too few arguments in %s on line %d
+
+bool(false)
+
+-- Iteration 11 --
+
+Warning: vprintf(): Too few arguments in %s on line %d
+
+bool(false)
+
+-- Iteration 12 --
+1
+int(1)
+
+-- Iteration 13 --
+
+int(0)
+
+-- Iteration 14 --
+1
+int(1)
+
+-- Iteration 15 --
+
+int(0)
+
+-- Iteration 16 --
+
+int(0)
+
+-- Iteration 17 --
+
+int(0)
+
+-- Iteration 18 --
+string
+int(6)
+
+-- Iteration 19 --
+string
+int(6)
+
+-- Iteration 20 --
+
+Warning: vprintf(): Too few arguments in %s on line %d
+
+bool(false)
+
+-- Iteration 21 --
+
+Warning: vprintf(): Too few arguments in %s on line %d
+
+bool(false)
+
+-- Iteration 22 --
+
+Warning: vprintf(): Too few arguments in %s on line %d
+
+bool(false)
+
+-- Iteration 23 --
+Resource id #%d
+int(%d)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation3.phpt b/ext/standard/tests/strings/vprintf_variation3.phpt
new file mode 100644
index 000000000..41c76487c
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation3.phpt
@@ -0,0 +1,91 @@
+--TEST--
+Test vprintf() function : usage variations - int formats with int values
+--FILE--
+<?php
+/* Prototype : string vprintf(string format, array args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vprintf() when different int formats and int values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vprintf() : int formats with int values ***\n";
+
+
+// defining array of int formats
+$formats = array(
+ "%d",
+ "%+d %-d %D",
+ "%ld %Ld, %4d %-4d",
+ "%10.4d %-10.4d %04d %04.4d",
+ "%'#2d %'2d %'$2d %'_2d",
+ "%d %d %d %d",
+ "% %%d d%",
+ '%3$d %4$d %1$d %2$d'
+);
+
+// Arrays of int values for the format defined in $format.
+// Each sub array contains int values which correspond to each format string in $format
+$args_array = array(
+ array(0),
+ array(-1, 1, +22),
+ array(2147483647, -2147483648, +2147483640, -2147483640),
+ array(123456, 12345678, -1234567, 1234567),
+ array(111, 2222, 333333, 44444444),
+ array(0x123b, 0xfAb, 0123, 01293),
+ array(1234, -5678, 2345),
+ array(3, 4, 1, 2)
+
+);
+
+// looping to test vprintf() with different int formats from the above $format array
+// and with int values from the above $args_array array
+$counter = 1;
+foreach($formats as $format) {
+ echo "\n-- Iteration $counter --\n";
+ $result = vprintf($format, $args_array[$counter-1]);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : int formats with int values ***
+
+-- Iteration 1 --
+0
+int(1)
+
+-- Iteration 2 --
+-1 1
+int(5)
+
+-- Iteration 3 --
+2147483647 d, 2147483640 -2147483640
+int(36)
+
+-- Iteration 4 --
+ 123456 12345678 -1234567 1234567
+int(38)
+
+-- Iteration 5 --
+111 2222 333333 44444444
+int(24)
+
+-- Iteration 6 --
+4667 4011 83 10
+int(15)
+
+-- Iteration 7 --
+%-5678 d
+int(8)
+
+-- Iteration 8 --
+1 2 3 4
+int(7)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation4.phpt b/ext/standard/tests/strings/vprintf_variation4.phpt
new file mode 100644
index 000000000..8d56fc9cb
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation4.phpt
@@ -0,0 +1,110 @@
+--TEST--
+Test vprintf() function : usage variations - int formats with non-integer values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string vprintf(string format, array args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vprintf() when different int formats and non-int values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vprintf() : int formats and non-integer values ***\n";
+
+// defining array of int formats
+$formats =
+ '%d %+d %-d
+ %ld %Ld %4d %-4d
+ %10.4d %-10.4d %.4d %04.4d
+ %\'#2d %\'2d %\'$2d %\'_2d
+ %3$d %4$d %1$d %2$d';
+
+// Arrays of non int values for the format defined in $format.
+// Each sub array contains non int values which correspond to each format in $format
+$args_array = array(
+
+ // array of float values
+ array(2.2, .2, 10.2,
+ 123456.234, 123456.234, -1234.6789, +1234.6789,
+ 2e10, +2e5, 4e3, 22e+6,
+ 12345.780, 12.000000011111, -12.00000111111, -123456.234,
+ 3.33, +4.44, 1.11,-2.22 ),
+
+ // array of strings
+ array(" ", ' ', 'hello',
+ '123hello', "123hello", '-123hello', '+123hello',
+ "\12345678hello", "-\12345678hello", '0123456hello', 'h123456ello',
+ "1234hello", "hello\0world", "NULL", "true",
+ "3", "4", '1', '2'),
+
+ // different arrays
+ array( array(0), array(1, 2), array(-1, -1),
+ array("123"), array('123'), array('-123'), array("-123"),
+ array(true), array(false), array(TRUE), array(FALSE),
+ array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
+ array("3"), array("4"), array("1"), array("2") ),
+
+ // array of boolean data
+ array( true, TRUE, false,
+ TRUE, 0, FALSE, 1,
+ true, false, TRUE, FALSE,
+ 0, 1, 1, 0,
+ 1, TRUE, 0, FALSE),
+
+);
+
+// looping to test vprintf() with different int formats from the above $format array
+// and with non-int values from the above $args_array array
+$counter = 1;
+foreach($args_array as $args) {
+ echo "\n-- Iteration $counter --\n";
+ $result = vprintf($formats, $args);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : int formats and non-integer values ***
+
+-- Iteration 1 --
+2 +0 10
+ 123456 d -1234 1234
+ -1474836480 200000 4000 22000000
+ 12345 12 -12 -123456
+ 10 123456 2 0
+int(112)
+
+-- Iteration 2 --
+0 +0 0
+ 123 d -123 123
+ 0 0 123456 0000
+ 1234 0 $0 _0
+ 0 123 0 0
+int(92)
+
+-- Iteration 3 --
+1 +1 1
+ 1 d 1 1
+ 1 1 1 0001
+ #1 1 $1 _1
+ 1 1 1 1
+int(81)
+
+-- Iteration 4 --
+1 +1 0
+ 1 d 0 1
+ 1 0 1 0000
+ #0 1 $1 _0
+ 0 1 1 1
+int(81)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation4_64bit.phpt b/ext/standard/tests/strings/vprintf_variation4_64bit.phpt
new file mode 100644
index 000000000..f81dba32a
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation4_64bit.phpt
@@ -0,0 +1,110 @@
+--TEST--
+Test vprintf() function : usage variations - int formats with non-integer values
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
+?>
+--FILE--
+<?php
+/* Prototype : string vprintf(string format, array args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vprintf() when different int formats and non-int values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vprintf() : int formats and non-integer values ***\n";
+
+// defining array of int formats
+$formats =
+ '%d %+d %-d
+ %ld %Ld %4d %-4d
+ %10.4d %-10.4d %.4d %04.4d
+ %\'#2d %\'2d %\'$2d %\'_2d
+ %3$d %4$d %1$d %2$d';
+
+// Arrays of non int values for the format defined in $format.
+// Each sub array contains non int values which correspond to each format in $format
+$args_array = array(
+
+ // array of float values
+ array(2.2, .2, 10.2,
+ 123456.234, 123456.234, -1234.6789, +1234.6789,
+ 2e10, +2e5, 4e3, 22e+6,
+ 12345.780, 12.000000011111, -12.00000111111, -123456.234,
+ 3.33, +4.44, 1.11,-2.22 ),
+
+ // array of strings
+ array(" ", ' ', 'hello',
+ '123hello', "123hello", '-123hello', '+123hello',
+ "\12345678hello", "-\12345678hello", '0123456hello', 'h123456ello',
+ "1234hello", "hello\0world", "NULL", "true",
+ "3", "4", '1', '2'),
+
+ // different arrays
+ array( array(0), array(1, 2), array(-1, -1),
+ array("123"), array('123'), array('-123'), array("-123"),
+ array(true), array(false), array(TRUE), array(FALSE),
+ array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
+ array("3"), array("4"), array("1"), array("2") ),
+
+ // array of boolean data
+ array( true, TRUE, false,
+ TRUE, 0, FALSE, 1,
+ true, false, TRUE, FALSE,
+ 0, 1, 1, 0,
+ 1, TRUE, 0, FALSE),
+
+);
+
+// looping to test vprintf() with different int formats from the above $format array
+// and with non-int values from the above $args_array array
+$counter = 1;
+foreach($args_array as $args) {
+ echo "\n-- Iteration $counter --\n";
+ $result = vprintf($formats, $args);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : int formats and non-integer values ***
+
+-- Iteration 1 --
+2 +0 10
+ 123456 d -1234 1234
+ 20000000000 200000 4000 22000000
+ 12345 12 -12 -123456
+ 10 123456 2 0
+int(112)
+
+-- Iteration 2 --
+0 +0 0
+ 123 d -123 123
+ 0 0 123456 0000
+ 1234 0 $0 _0
+ 0 123 0 0
+int(92)
+
+-- Iteration 3 --
+1 +1 1
+ 1 d 1 1
+ 1 1 1 0001
+ #1 1 $1 _1
+ 1 1 1 1
+int(81)
+
+-- Iteration 4 --
+1 +1 0
+ 1 d 0 1
+ 1 0 1 0000
+ #0 1 $1 _0
+ 0 1 1 1
+int(81)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation5.phpt b/ext/standard/tests/strings/vprintf_variation5.phpt
new file mode 100644
index 000000000..6388f284c
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation5.phpt
@@ -0,0 +1,91 @@
+--TEST--
+Test vprintf() function : usage variations - float formats with float values
+--FILE--
+<?php
+/* Prototype : string vprintf(string format, array args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vprintf() when different float formats and float values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vprintf() : int formats with float values ***\n";
+
+
+// defining array of float formats
+$formats = array(
+ "%f",
+ "%+f %-f %F",
+ "%lf %Lf, %4f %-4f",
+ "%10.4f %-10.4F %04f %04.4f",
+ "%'#2f %'2f %'$2f %'_2f",
+ "%f %f %f %f",
+ "% %%f f%",
+ '%3$f %4$f %1$f %2$f'
+);
+
+// Arrays of float values for the format defined in $format.
+// Each sub array contains float values which correspond to each format string in $format
+$args_array = array(
+ array(0.0),
+ array(-0.1, +0.1, +10.0000006),
+ array(2147483649, -2147483647, +2147483640, -2147483640),
+ array(2e5, 2e-5, -2e5, -2e-5),
+ array(0.2E5, -0.2e40, 0.2E-20, 0.2E+20),
+ array(0x123b, 0xfAb, 0123, 01293),
+ array(1234.1234, -5678.5678, 2345.2345),
+ array(3.33, 4.44, 1.11, 2.22)
+
+);
+
+// looping to test vprintf() with different float formats from the above $format array
+// and with float values from the above $args_array array
+$counter = 1;
+foreach($formats as $format) {
+ echo "\n-- Iteration $counter --\n";
+ $result = vprintf($format, $args_array[$counter-1]);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : int formats with float values ***
+
+-- Iteration 1 --
+0.000000
+int(8)
+
+-- Iteration 2 --
+-0.100000 0.100000 10.000001
+int(28)
+
+-- Iteration 3 --
+2147483649.000000 f, 2147483640.000000 -2147483640.000000
+int(57)
+
+-- Iteration 4 --
+200000.0000 0.0000 -200000.000000 -0.0000
+int(45)
+
+-- Iteration 5 --
+20000.000000 -1999999999999999879418332743206357172224.000000 0.000000 20000000000000000000.000000
+int(98)
+
+-- Iteration 6 --
+4667.000000 4011.000000 83.000000 10.000000
+int(43)
+
+-- Iteration 7 --
+%-5678.567800 f
+int(15)
+
+-- Iteration 8 --
+1.110000 2.220000 3.330000 4.440000
+int(35)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation6.phpt b/ext/standard/tests/strings/vprintf_variation6.phpt
new file mode 100644
index 000000000..265948b56
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation6.phpt
@@ -0,0 +1,106 @@
+--TEST--
+Test vprintf() function : usage variations - float formats with non-float values
+--FILE--
+<?php
+/* Prototype : string vprintf(string format, array args)
+ * Description: Output a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vprintf() when different float formats and non-float values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+echo "*** Testing vprintf() : float formats and non-float values ***\n";
+
+// defining array of float formats
+$formats =
+ '%f %+f %-f
+ %lf %Lf %4f %-4f
+ %10.4f %-10.4f %04f %04.4f
+ %\'#2f %\'2f %\'$2f %\'_2f
+ %3$f %4$f %1$f %2$f';
+
+// Arrays of non float values for the format defined in $format.
+// Each sub array contains non float values which correspond to each format in $format
+$args_array = array(
+
+ // array of int values
+ array(2, -2, +2,
+ 123456, 123456234, -12346789, +12346789,
+ 123200, +20000, -40000, 22212,
+ 12345780, 1211111, -12111111, -12345634,
+ 3, +4, 1,-2 ),
+
+ // array of strings
+ array(" ", ' ', 'hello',
+ '123hello', "123hello", '-123hello', '+123hello',
+ "\12345678hello", "-\12345678hello", '0123456hello', 'h123456ello',
+ "1234hello", "hello\0world", "NULL", "true",
+ "3", "4", '1', '2'),
+
+ // different arrays
+ array( array(0), array(1, 2), array(-1, -1),
+ array("123"), array('123'), array('-123'), array("-123"),
+ array(true), array(false), array(TRUE), array(FALSE),
+ array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
+ array("3"), array("4"), array("1"), array("2") ),
+
+ // array of boolean data
+ array( true, TRUE, false,
+ TRUE, 0, FALSE, 1,
+ true, false, TRUE, FALSE,
+ 0, 1, 1, 0,
+ 1, TRUE, 0, FALSE),
+
+);
+
+// looping to test vprintf() with different float formats from the above $format array
+// and with non-float values from the above $args_array array
+$counter = 1;
+foreach($args_array as $args) {
+ echo "\n-- Iteration $counter --\n";
+ $result = vprintf($formats, $args);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : float formats and non-float values ***
+
+-- Iteration 1 --
+2.000000 -2.000000 2.000000
+ 123456.000000 f -12346789.000000 12346789.000000
+ 123200.0000 20000.0000 -40000.000000 22212.0000
+ 12345780.000000 1211111.000000 -12111111.000000 -12345634.000000
+ 2.000000 123456.000000 2.000000 -2.000000
+int(244)
+
+-- Iteration 2 --
+0.000000 +0.000000 0.000000
+ 123.000000 f -123.000000 123.000000
+ 0.0000 0.0000 123456.000000 0.0000
+ 1234.000000 0.000000 0.000000 0.000000
+ 0.000000 123.000000 0.000000 0.000000
+int(196)
+
+-- Iteration 3 --
+1.000000 +1.000000 1.000000
+ 1.000000 f 1.000000 1.000000
+ 1.0000 1.0000 1.000000 1.0000
+ 1.000000 1.000000 1.000000 1.000000
+ 1.000000 1.000000 1.000000 1.000000
+int(179)
+
+-- Iteration 4 --
+1.000000 +1.000000 0.000000
+ 1.000000 f 0.000000 1.000000
+ 1.0000 0.0000 1.000000 0.0000
+ 0.000000 1.000000 1.000000 0.000000
+ 0.000000 1.000000 1.000000 1.000000
+int(179)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation7.phpt b/ext/standard/tests/strings/vprintf_variation7.phpt
new file mode 100644
index 000000000..ef2bfecdf
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation7.phpt
Binary files differ
diff --git a/ext/standard/tests/strings/vprintf_variation8.phpt b/ext/standard/tests/strings/vprintf_variation8.phpt
new file mode 100644
index 000000000..c0558ff6b
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation8.phpt
@@ -0,0 +1,109 @@
+--TEST--
+Test vprintf() function : usage variations - string formats with non-string values
+--FILE--
+<?php
+/* Prototype : string vprintf(string format, array args)
+ * Description: Return a formatted string
+ * Source code: ext/standard/formatted_print.c
+*/
+
+/*
+ * Test vprintf() when different string formats and non-string values are passed to
+ * the '$format' and '$args' arguments of the function
+*/
+
+error_reporting(E_ALL & ~E_NOTICE);
+
+echo "*** Testing vprintf() : string formats and non-string values ***\n";
+
+// defining array of string formats
+$formats =
+ '%s %+s %-s
+ %ls %Ls %4s %-4s
+ %10.4s %-10.4s %04s %04.4s
+ %\'#2s %\'2s %\'$2s %\'_2s
+ %3$s %4$s %1$s %2$s';
+
+// Arrays of non string values for the format defined in $format.
+// Each sub array contains non string values which correspond to each format in $format
+$args_array = array(
+
+ // array of float values
+ array(2.2, .2, 10.2,
+ 123456.234, 123456.234, -1234.6789, +1234.6789,
+ 2.1234567e10, +2.7654321e10, -2.7654321e10,
+ 12345.780, 12.000000011111, -12.00000111111, -123456.234,
+ 3.33, +4.44, 1.11,-2.22 ),
+
+ // array of int values
+ array(2, -2, +2,
+ 123456, 123456234, -12346789, +12346789,
+ 123200, +20000, -40000, 22212,
+ 12345780, 1211111, -12111111, -12345634,
+ 3, +4, 1,-2 ),
+
+
+ // different arrays
+ array( array(0), array(1, 2), array(-1, -1),
+ array("123"), array('123'), array('-123'), array("-123"),
+ array(true), array(false), array(TRUE), array(FALSE),
+ array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
+ array("3"), array("4"), array("1"), array("2") ),
+
+ // array of boolean data
+ array( true, TRUE, false,
+ TRUE, 0, FALSE, 1,
+ true, false, TRUE, FALSE,
+ 0, 1, 1, 0,
+ 1, TRUE, 0, FALSE),
+
+);
+
+// looping to test vprintf() with different string formats from the above $format array
+// and with non-string values from the above $args_array array
+$counter = 1;
+foreach($args_array as $args) {
+ echo "\n-- Iteration $counter --\n";
+ $result = vprintf($formats, $args);
+ echo "\n";
+ var_dump($result);
+ $counter++;
+}
+
+?>
+===DONE===
+--EXPECT--
+*** Testing vprintf() : string formats and non-string values ***
+
+-- Iteration 1 --
+2.2 0.2 10.2
+ 123456.234 s -1234.6789 1234.6789
+ 2123 2765 -27654321000 1234
+ 12.000000011111 -12.00000111111 -123456.234 3.33
+ 10.2 123456.234 2.2 0.2
+int(172)
+
+-- Iteration 2 --
+2 -2 2
+ 123456 s -12346789 12346789
+ 1232 2000 -40000 2221
+ 12345780 1211111 -12111111 -12345634
+ 2 123456 2 -2
+int(132)
+
+-- Iteration 3 --
+Array Array Array
+ Array s Array Array
+ Arra Arra Array Arra
+ Array Array Array Array
+ Array Array Array Array
+int(131)
+
+-- Iteration 4 --
+1 1
+ 1 s 1
+ 1 0001 0000
+ #0 1 $1 _0
+ 1 1 1
+int(81)
+===DONE===
diff --git a/ext/standard/tests/strings/vprintf_variation9.phpt b/ext/standard/tests/strings/vprintf_variation9.phpt
new file mode 100644
index 000000000..a7b513f63
--- /dev/null
+++ b/ext/standard/tests/strings/vprintf_variation9.phpt
Binary files differ
diff --git a/ext/standard/tests/strings/vsprintf_variation15.phpt b/ext/standard/tests/strings/vsprintf_variation15.phpt
index cedfe3f0e..bc1d78692 100644
--- a/ext/standard/tests/strings/vsprintf_variation15.phpt
+++ b/ext/standard/tests/strings/vsprintf_variation15.phpt
@@ -32,7 +32,7 @@ $formats = array(
$args_array = array(
array(1234567, 01234567, 0 ),
array(12345678900, 12345678900, 1234, 12345),
- array("1234000", 10e20, 1.2e2),
+ array("1234000", 10.1234567e5, 1.2e2),
array(1, 0, 00, "10_"),
array(3, 4, 1, 2)
);
@@ -46,9 +46,9 @@ foreach($formats as $format) {
$counter++;
}
-echo "Done";
?>
---EXPECTF--
+===Done===
+--EXPECT--
*** Testing vsprintf() : unsigned formats and unsigned values ***
-- Iteration 1 --
@@ -58,11 +58,11 @@ string(16) "1234567 342391 0"
string(23) "3755744308 u 1234 12345"
-- Iteration 3 --
-string(25) " 1234000 0 120"
+string(25) " 1234000 1012345 120"
-- Iteration 4 --
string(10) "#1 0 $0 10"
-- Iteration 5 --
string(7) "1 2 3 4"
-Done
+===Done===
diff --git a/ext/standard/tests/strings/vsprintf_variation8.phpt b/ext/standard/tests/strings/vsprintf_variation8.phpt
index 08f218486..f44eae2db 100644
--- a/ext/standard/tests/strings/vsprintf_variation8.phpt
+++ b/ext/standard/tests/strings/vsprintf_variation8.phpt
@@ -12,12 +12,14 @@ Test vsprintf() function : usage variations - string formats with non-string val
* the '$format' and '$args' arguments of the function
*/
+error_reporting(E_ALL & ~E_NOTICE);
+
echo "*** Testing vsprintf() : string formats and non-string values ***\n";
// defining array of string formats
$formats =
'%s %+s %-s
- %ls %Ls %4s %-4s
+ %ls %4s %-4s
%10.4s %-10.4s %04s %04.4s
%\'#2s %\'2s %\'$2s %\'_2s
%3$s %4$s %1$s %2$s';
@@ -28,14 +30,14 @@ $args_array = array(
// array of float values
array(2.2, .2, 10.2,
- 123456.234, 123456.234, -1234.6789, +1234.6789,
- 2e10, +2e12, -4e11, 22e+12,
+ 123456.234, -1234.6789, +1234.6789,
+ 2.1234567e10, +2.7654321e10, -2.7654321e10, 2.1234567e10,
12345.780, 12.000000011111, -12.00000111111, -123456.234,
3.33, +4.44, 1.11,-2.22 ),
-
+
// array of int values
array(2, -2, +2,
- 123456, 123456234, -12346789, +12346789,
+ 123456, -12346789, +12346789,
123200, +20000, -40000, 22212,
12345780, 1211111, -12111111, -12345634,
3, +4, 1,-2 ),
@@ -43,14 +45,14 @@ $args_array = array(
// different arrays
array( array(0), array(1, 2), array(-1, -1),
- array("123"), array('123'), array('-123'), array("-123"),
+ array("123"), array('-123'), array("-123"),
array(true), array(false), array(TRUE), array(FALSE),
array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
array("3"), array("4"), array("1"), array("2") ),
// array of boolean data
array( true, TRUE, false,
- TRUE, 0, FALSE, 1,
+ TRUE, FALSE, 1,
true, false, TRUE, FALSE,
0, 1, 1, 0,
1, TRUE, 0, FALSE),
@@ -66,36 +68,36 @@ foreach($args_array as $args) {
$counter++;
}
-echo "Done";
?>
---EXPECTF--
+===DONE===
+--EXPECT--
*** Testing vsprintf() : string formats and non-string values ***
-- Iteration 1 --
-string(177) "2.2 0.2 10.2
- 123456.234 s -1234.6789 1234.6789
- 2000 2000 -400000000000 2200
+string(174) "2.2 0.2 10.2
+ 123456.234 -1234.6789 1234.6789
+ 2123 2765 -27654321000 2123
12345.78 12.000000011111 -12.00000111111 -123456.234
10.2 123456.234 2.2 0.2"
-- Iteration 2 --
-string(132) "2 -2 2
- 123456 s -12346789 12346789
+string(130) "2 -2 2
+ 123456 -12346789 12346789
1232 2000 -40000 2221
12345780 1211111 -12111111 -12345634
2 123456 2 -2"
-- Iteration 3 --
-string(131) "Array Array Array
- Array s Array Array
+string(129) "Array Array Array
+ Array Array Array
Arra Arra Array Arra
Array Array Array Array
Array Array Array Array"
-- Iteration 4 --
-string(81) "1 1
- 1 s 1
+string(79) "1 1
+ 1 1
1 0001 0000
#0 1 $1 _0
1 1 1"
-Done
+===DONE=== \ No newline at end of file
diff --git a/ext/standard/tests/url/base64_decode_variation_001.phpt b/ext/standard/tests/url/base64_decode_variation_001.phpt
index b01cd23e5..8734a96e0 100644
--- a/ext/standard/tests/url/base64_decode_variation_001.phpt
+++ b/ext/standard/tests/url/base64_decode_variation_001.phpt
@@ -18,150 +18,164 @@ echo "*** Testing base64_decode() : usage variations ***\n";
// Initialise function arguments not being substituted (if any)
$strict = true;
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
//get an unset variable
$unset_var = 10;
unset ($unset_var);
//array of values to iterate over
-$values = array(
-
- // int data
- 0,
- 1,
- 12345,
- -2345,
-
- // float data
- 10.5,
- -10.5,
- 10.1234567e10,
- 10.7654321E-10,
- .5,
-
- // array data
- array(),
- array(0),
- array(1),
- array(1, 2),
- array('color' => 'red', 'item' => 'pen'),
-
- // null data
- NULL,
- null,
-
- // boolean data
- true,
- false,
- TRUE,
- FALSE,
-
- // empty data
- "",
- '',
-
- // object data
- new stdclass(),
-
- // undefined data
- $undefined_var,
-
- // unset data
- $unset_var,
+$values = array (
+ // int data
+ "0" => 0,
+ "1" => 1,
+ "12345" => 12345,
+ "-2345" => -2345,
+
+ // float data
+ "10.5" => 10.5,
+ "-10.5" => -10.5,
+ "10.1234567e10" => 10.1234567e10,
+ "10.7654321E-10" => 10.7654321E-10,
+ ".5" => .5,
+
+ // array data
+ "array()" => array(),
+ "array(0)" => array(0),
+ "array(1)" => array(1),
+ "array(1, 2)" => array(1, 2),
+ "array('color' => 'red', 'item' => 'pen'" => array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ "NULL" => NULL,
+ "null" => null,
+
+ // boolean data
+ "true" => true,
+ "false" => false,
+ "TRUE" => TRUE,
+ "FALSE" => FALSE,
+
+ // empty data
+ "\"\"" => "",
+ "''" => '',
+
+ // object data
+ "stdClass object" => new stdclass(),
+
+ // undefined data
+ "undefined variable" => $undefined_var,
+
+ // unset data
+ "unset variable" => $unset_var,
+
+ // resource data
+ "resource" => $file_handle
);
-// loop through each element of the array for str
-
-foreach($values as $value) {
- echo "\nArg value $value \n";
- var_dump( base64_decode($value, $strict) );
+// loop through each element of the array for str argument
+
+foreach($values as $key=>$value) {
+ echo "\n-- Arg value $key --\n";
+ $output = base64_decode($value, $strict);
+
+ if (is_string($output)) {
+ var_dump(bin2hex($output));
+ } else {
+ var_dump($output);
+ }
};
-echo "Done";
?>
+===Done===
--EXPECTF--
*** Testing base64_decode() : usage variations ***
-Error: 8 - Undefined variable: undefined_var, %s(63)
-Error: 8 - Undefined variable: unset_var, %s(66)
+Error: 8 - Undefined variable: undefined_var, %s(%d)
+Error: 8 - Undefined variable: unset_var, %s(%d)
-Arg value 0
+-- Arg value 0 --
string(0) ""
-Arg value 1
+-- Arg value 1 --
string(0) ""
-Arg value 12345
-string(3) "×mø"
+-- Arg value 12345 --
+string(6) "d76df8"
-Arg value -2345
+-- Arg value -2345 --
bool(false)
-Arg value 10.5
+-- Arg value 10.5 --
bool(false)
-Arg value -10.5
+-- Arg value -10.5 --
bool(false)
-Arg value 101234567000
-string(9) "×MvߎzïM4"
+-- Arg value 10.1234567e10 --
+string(18) "d74d76df8e7aef4d34"
-Arg value 1.07654321E-9
+-- Arg value 10.7654321E-10 --
bool(false)
-Arg value 0.5
+-- Arg value .5 --
bool(false)
-Arg value Array
-Error: 2 - base64_decode() expects parameter 1 to be string, array given, %s(73)
+-- Arg value array() --
+Error: 2 - base64_decode() expects parameter 1 to be string, array given, %s(%d)
NULL
-Arg value Array
-Error: 2 - base64_decode() expects parameter 1 to be string, array given, %s(73)
+-- Arg value array(0) --
+Error: 2 - base64_decode() expects parameter 1 to be string, array given, %s(%d)
NULL
-Arg value Array
-Error: 2 - base64_decode() expects parameter 1 to be string, array given, %s(73)
+-- Arg value array(1) --
+Error: 2 - base64_decode() expects parameter 1 to be string, array given, %s(%d)
NULL
-Arg value Array
-Error: 2 - base64_decode() expects parameter 1 to be string, array given, %s(73)
+-- Arg value array(1, 2) --
+Error: 2 - base64_decode() expects parameter 1 to be string, array given, %s(%d)
NULL
-Arg value Array
-Error: 2 - base64_decode() expects parameter 1 to be string, array given, %s(73)
+-- Arg value array('color' => 'red', 'item' => 'pen' --
+Error: 2 - base64_decode() expects parameter 1 to be string, array given, %s(%d)
NULL
-Arg value
+-- Arg value NULL --
string(0) ""
-Arg value
+-- Arg value null --
string(0) ""
-Arg value 1
+-- Arg value true --
string(0) ""
-Arg value
+-- Arg value false --
string(0) ""
-Arg value 1
+-- Arg value TRUE --
string(0) ""
-Arg value
+-- Arg value FALSE --
string(0) ""
-Arg value
+-- Arg value "" --
string(0) ""
-Arg value
+-- Arg value '' --
string(0) ""
-Error: 4096 - Object of class stdClass could not be converted to string, %s(72)
-Arg value
-Error: 2 - base64_decode() expects parameter 1 to be string, object given, %s(73)
+-- Arg value stdClass object --
+Error: 2 - base64_decode() expects parameter 1 to be string, object given, %s(%d)
NULL
-Arg value
+-- Arg value undefined variable --
string(0) ""
-Arg value
+-- Arg value unset variable --
string(0) ""
-Done
+
+-- Arg value resource --
+Error: 2 - base64_decode() expects parameter 1 to be string, resource given, %s(%d)
+NULL
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/url/base64_decode_variation_002.phpt b/ext/standard/tests/url/base64_decode_variation_002.phpt
index 145784a4e..20bf35746 100644
--- a/ext/standard/tests/url/base64_decode_variation_002.phpt
+++ b/ext/standard/tests/url/base64_decode_variation_002.phpt
@@ -18,160 +18,158 @@ echo "*** Testing base64_decode() : usage variations ***\n";
// Initialise function arguments not being substituted (if any)
$str = 'aGVsbG8gd29ybGQh!';
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
//get an unset variable
$unset_var = 10;
unset ($unset_var);
//array of values to iterate over
-$values = array(
-
- // int data
- 0,
- 1,
- 12345,
- -2345,
-
- // float data
- 10.5,
- -10.5,
- 10.1234567e10,
- 10.7654321E-10,
- .5,
-
- // array data
- array(),
- array(0),
- array(1),
- array(1, 2),
- array('color' => 'red', 'item' => 'pen'),
-
- // null data
- NULL,
- null,
-
- // boolean data
- true,
- false,
- TRUE,
- FALSE,
-
- // empty data
- "",
- '',
-
- // string data
- "string",
- 'string',
-
- // object data
- new stdclass(),
-
- // undefined data
- $undefined_var,
-
- // unset data
- $unset_var,
+$values = array (
+ // int data
+ "0" => 0,
+ "1" => 1,
+ "12345" => 12345,
+ "-2345" => -2345,
+
+ // float data
+ "10.5" => 10.5,
+ "-10.5" => -10.5,
+ "10.1234567e10" => 10.1234567e10,
+ "10.7654321E-10" => 10.7654321E-10,
+ ".5" => .5,
+
+ // array data
+ "array()" => array(),
+ "array(0)" => array(0),
+ "array(1)" => array(1),
+ "array(1, 2)" => array(1, 2),
+ "array('color' => 'red', 'item' => 'pen'" => array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ "NULL" => NULL,
+ "null" => null,
+
+ // boolean data
+ "true" => true,
+ "false" => false,
+ "TRUE" => TRUE,
+ "FALSE" => FALSE,
+
+ // empty data
+ "\"\"" => "",
+ "''" => '',
+
+ // object data
+ "stdClass object" => new stdclass(),
+
+ // undefined data
+ "undefined variable" => $undefined_var,
+
+ // unset data
+ "unset variable" => $unset_var,
+
+ // resource data
+ "resource" => $file_handle
);
-// loop through each element of the array for strict
+// loop through each element of the array for strict argument
-foreach($values as $value) {
- echo "\nArg value $value \n";
- var_dump( base64_decode($str, $value) );
+foreach($values as $key=>$value) {
+ echo "\n-- Arg value $key --\n";
+ var_dump(base64_decode($str, $value));
};
-echo "Done";
?>
+===Done===
--EXPECTF--
*** Testing base64_decode() : usage variations ***
-Error: 8 - Undefined variable: undefined_var, %s(67)
-Error: 8 - Undefined variable: unset_var, %s(70)
+Error: 8 - Undefined variable: undefined_var, %s(%d)
+Error: 8 - Undefined variable: unset_var, %s(%d)
-Arg value 0
+-- Arg value 0 --
string(12) "hello world!"
-Arg value 1
+-- Arg value 1 --
bool(false)
-Arg value 12345
+-- Arg value 12345 --
bool(false)
-Arg value -2345
+-- Arg value -2345 --
bool(false)
-Arg value 10.5
+-- Arg value 10.5 --
bool(false)
-Arg value -10.5
+-- Arg value -10.5 --
bool(false)
-Arg value 101234567000
+-- Arg value 10.1234567e10 --
bool(false)
-Arg value 1.07654321E-9
+-- Arg value 10.7654321E-10 --
bool(false)
-Arg value 0.5
+-- Arg value .5 --
bool(false)
-Arg value Array
-Error: 2 - base64_decode() expects parameter 2 to be boolean, array given, %s(77)
+-- Arg value array() --
+Error: 2 - base64_decode() expects parameter 2 to be boolean, array given, %s(%d)
NULL
-Arg value Array
-Error: 2 - base64_decode() expects parameter 2 to be boolean, array given, %s(77)
+-- Arg value array(0) --
+Error: 2 - base64_decode() expects parameter 2 to be boolean, array given, %s(%d)
NULL
-Arg value Array
-Error: 2 - base64_decode() expects parameter 2 to be boolean, array given, %s(77)
+-- Arg value array(1) --
+Error: 2 - base64_decode() expects parameter 2 to be boolean, array given, %s(%d)
NULL
-Arg value Array
-Error: 2 - base64_decode() expects parameter 2 to be boolean, array given, %s(77)
+-- Arg value array(1, 2) --
+Error: 2 - base64_decode() expects parameter 2 to be boolean, array given, %s(%d)
NULL
-Arg value Array
-Error: 2 - base64_decode() expects parameter 2 to be boolean, array given, %s(77)
+-- Arg value array('color' => 'red', 'item' => 'pen' --
+Error: 2 - base64_decode() expects parameter 2 to be boolean, array given, %s(%d)
NULL
-Arg value
+-- Arg value NULL --
string(12) "hello world!"
-Arg value
+-- Arg value null --
string(12) "hello world!"
-Arg value 1
+-- Arg value true --
bool(false)
-Arg value
+-- Arg value false --
string(12) "hello world!"
-Arg value 1
+-- Arg value TRUE --
bool(false)
-Arg value
+-- Arg value FALSE --
string(12) "hello world!"
-Arg value
+-- Arg value "" --
string(12) "hello world!"
-Arg value
+-- Arg value '' --
string(12) "hello world!"
-Arg value string
-bool(false)
-
-Arg value string
-bool(false)
-Error: 4096 - Object of class stdClass could not be converted to string, %s(76)
-
-Arg value
-Error: 2 - base64_decode() expects parameter 2 to be boolean, object given, %s(77)
+-- Arg value stdClass object --
+Error: 2 - base64_decode() expects parameter 2 to be boolean, object given, %s(%d)
NULL
-Arg value
+-- Arg value undefined variable --
string(12) "hello world!"
-Arg value
+-- Arg value unset variable --
string(12) "hello world!"
-Done \ No newline at end of file
+
+-- Arg value resource --
+Error: 2 - base64_decode() expects parameter 2 to be boolean, resource given, %s(%d)
+NULL
+===Done=== \ No newline at end of file
diff --git a/ext/standard/tests/url/base64_encode_basic_002.phpt b/ext/standard/tests/url/base64_encode_basic_002.phpt
new file mode 100644
index 000000000..cff8f4142
--- /dev/null
+++ b/ext/standard/tests/url/base64_encode_basic_002.phpt
@@ -0,0 +1,59 @@
+--TEST--
+Test base64_encode() function : basic functionality - check algorithm round trips
+--FILE--
+<?php
+/* Prototype : proto string base64_encode(string str)
+ * Description: Encodes string using MIME base64 algorithm
+ * Source code: ext/standard/base64.c
+ * Alias to functions:
+ */
+
+/*
+ * Test base64_encode with single byte values.
+ */
+
+echo "*** Testing base64_encode() : basic functionality ***\n";
+
+$values = array(
+ "Hello World",
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!%^&*(){}[]",
+ "\n\t Line with control characters\r\n",
+ "\xC1\xC2\xC3\xC4\xC5\xC6",
+ "\75\76\77\78\79\80"
+);
+
+echo "\n--- Testing base64_encode() with binary string input ---\n";
+
+$counter = 1;
+foreach($values as $str) {
+ echo "-- Iteration $counter --\n";
+
+ $enc = base64_encode($str);
+ $dec = base64_decode($enc);
+
+ if ($dec != $str) {
+ echo "TEST FAILED\n";
+ } else {
+ echo "TEST PASSED\n";
+ }
+
+ $counter ++;
+}
+
+?>
+===Done===
+--EXPECTF--
+*** Testing base64_encode() : basic functionality ***
+
+--- Testing base64_encode() with binary string input ---
+-- Iteration 1 --
+TEST PASSED
+-- Iteration 2 --
+TEST PASSED
+-- Iteration 3 --
+TEST PASSED
+-- Iteration 4 --
+TEST PASSED
+-- Iteration 5 --
+TEST PASSED
+===Done===
diff --git a/ext/standard/tests/url/bug47174.phpt b/ext/standard/tests/url/bug47174.phpt
new file mode 100644
index 000000000..6d0806325
--- /dev/null
+++ b/ext/standard/tests/url/bug47174.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Bug #47174 (base64_decode() interprets pad char in mid string as terminator)
+--FILE--
+<?php
+if (base64_decode("dGVzdA==") == base64_decode("dGVzdA==CRAP")) {
+ echo "Same octect data - Signature Valid\n";
+} else {
+ echo "Invalid Signature\n";
+}
+
+$in = base64_encode("foo") . '==' . base64_encode("bar");
+var_dump($in, base64_decode($in));
+
+?>
+--EXPECT--
+Invalid Signature
+string(10) "Zm9v==YmFy"
+string(6) "foobar"
diff --git a/ext/standard/type.c b/ext/standard/type.c
index 9ee4fd18b..e1adc994c 100644
--- a/ext/standard/type.c
+++ b/ext/standard/type.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: type.c,v 1.30.2.2.2.4 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: type.c,v 1.30.2.2.2.5 2008/12/31 11:17:46 sebastian Exp $ */
#include "php.h"
#include "php_incomplete_class.h"
diff --git a/ext/standard/uniqid.c b/ext/standard/uniqid.c
index 2e72ba3d5..da7f4c35f 100644
--- a/ext/standard/uniqid.c
+++ b/ext/standard/uniqid.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: uniqid.c,v 1.41.2.2.2.4 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: uniqid.c,v 1.41.2.2.2.6 2008/12/31 11:17:46 sebastian Exp $ */
#include "php.h"
@@ -38,7 +38,7 @@
#include "php_lcg.h"
#include "uniqid.h"
-/* {{{ proto string uniqid([string prefix , bool more_entropy])
+/* {{{ proto string uniqid([string prefix [, bool more_entropy]])
Generates a unique ID */
#ifdef HAVE_GETTIMEOFDAY
PHP_FUNCTION(uniqid)
diff --git a/ext/standard/uniqid.h b/ext/standard/uniqid.h
index bbba9a1b0..633f63e83 100644
--- a/ext/standard/uniqid.h
+++ b/ext/standard/uniqid.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: uniqid.h,v 1.13.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: uniqid.h,v 1.13.2.1.2.3 2008/12/31 11:17:46 sebastian Exp $ */
#ifndef UNIQID_H
#define UNIQID_H
diff --git a/ext/standard/url.c b/ext/standard/url.c
index ae95a785f..ffa5bd298 100644
--- a/ext/standard/url.c
+++ b/ext/standard/url.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -15,7 +15,7 @@
| Author: Jim Winstead <jimw@php.net> |
+----------------------------------------------------------------------+
*/
-/* $Id: url.c,v 1.86.2.5.2.9 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: url.c,v 1.86.2.5.2.10 2008/12/31 11:17:46 sebastian Exp $ */
#include <stdlib.h>
#include <string.h>
diff --git a/ext/standard/url.h b/ext/standard/url.h
index 4bb00f7c7..9c4382523 100644
--- a/ext/standard/url.h
+++ b/ext/standard/url.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -15,7 +15,7 @@
| Author: Jim Winstead <jimw@php.net> |
+----------------------------------------------------------------------+
*/
-/* $Id: url.h,v 1.20.2.2.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: url.h,v 1.20.2.2.2.3 2008/12/31 11:17:46 sebastian Exp $ */
#ifndef URL_H
#define URL_H
diff --git a/ext/standard/url_scanner.c b/ext/standard/url_scanner.c
index da712b5ae..7cf5b0e81 100644
--- a/ext/standard/url_scanner.c
+++ b/ext/standard/url_scanner.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -15,7 +15,7 @@
| Author: Hartmut Holzgraefe <hholzgra@php.net> |
+----------------------------------------------------------------------+
*/
-/* $Id: url_scanner.c,v 1.44.2.1.2.4 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: url_scanner.c,v 1.44.2.1.2.5 2008/12/31 11:17:46 sebastian Exp $ */
#include "php.h"
diff --git a/ext/standard/url_scanner.h b/ext/standard/url_scanner.h
index fc7baa01a..45a9bac12 100644
--- a/ext/standard/url_scanner.h
+++ b/ext/standard/url_scanner.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -15,7 +15,7 @@
| Author: Sascha Schumann <sascha@schumann.cx> |
+----------------------------------------------------------------------+
*/
-/* $Id: url_scanner.h,v 1.16.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: url_scanner.h,v 1.16.2.1.2.3 2008/12/31 11:17:46 sebastian Exp $ */
#ifndef URI_SCANNER_H
#define URI_SCANNER_H
diff --git a/ext/standard/url_scanner_ex.c b/ext/standard/url_scanner_ex.c
index 9edf4c2f9..80a5725d0 100644
--- a/ext/standard/url_scanner_ex.c
+++ b/ext/standard/url_scanner_ex.c
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.12.1 on Wed Oct 10 12:28:46 2007 */
+/* Generated by re2c 0.13.5 on Wed Jul 2 12:48:53 2008 */
/*
+----------------------------------------------------------------------+
| PHP Version 5 |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: url_scanner_ex.c,v 1.95.2.4.2.6 2008/03/12 11:27:42 felipe Exp $ */
+/* $Id: url_scanner_ex.c,v 1.95.2.4.2.7 2008/07/16 14:10:50 jani Exp $ */
#include "php.h"
@@ -107,7 +107,9 @@ static inline void append_modified_url(smart_str *url, smart_str *dest, smart_st
q = (p = url->c) + url->len;
scan:
+
{
+ YYCTYPE yych;
static const unsigned char yybm[] = {
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
@@ -143,33 +145,29 @@ scan:
128, 128, 128, 128, 128, 128, 128, 128,
};
- {
- YYCTYPE yych;
-
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 128) {
- goto yy8;
- }
- if(yych <= '9') goto yy6;
- if(yych >= ';') goto yy4;
- ++YYCURSOR;
- { smart_str_append(dest, url); return; }
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yybm[0+yych] & 128) {
+ goto yy8;
+ }
+ if (yych <= '9') goto yy6;
+ if (yych >= ';') goto yy4;
+ ++YYCURSOR;
+ { smart_str_append(dest, url); return; }
yy4:
- ++YYCURSOR;
- { sep = separator; goto scan; }
+ ++YYCURSOR;
+ { sep = separator; goto scan; }
yy6:
- ++YYCURSOR;
- { bash = p - 1; goto done; }
+ ++YYCURSOR;
+ { bash = p - 1; goto done; }
yy8:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 128) {
- goto yy8;
- }
- { goto scan; }
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yybm[0+yych] & 128) {
+ goto yy8;
}
+ { goto scan; }
}
done:
@@ -349,7 +347,9 @@ state_plain_begin:
state_plain:
start = YYCURSOR;
+
{
+ YYCTYPE yych;
static const unsigned char yybm[] = {
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
@@ -384,31 +384,29 @@ state_plain:
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
};
-
- {
- YYCTYPE yych;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 128) {
- goto yy15;
- }
- ++YYCURSOR;
- { passthru(STD_ARGS); STATE = STATE_TAG; goto state_tag; }
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yybm[0+yych] & 128) {
+ goto yy15;
+ }
+ ++YYCURSOR;
+ { passthru(STD_ARGS); STATE = STATE_TAG; goto state_tag; }
yy15:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 128) {
- goto yy15;
- }
- { passthru(STD_ARGS); goto state_plain; }
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yybm[0+yych] & 128) {
+ goto yy15;
}
+ { passthru(STD_ARGS); goto state_plain; }
}
state_tag:
start = YYCURSOR;
+
{
+ YYCTYPE yych;
static const unsigned char yybm[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -443,37 +441,33 @@ state_tag:
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
};
-
- {
- YYCTYPE yych;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych <= '@') {
- if(yych != ':') goto yy22;
- } else {
- if(yych <= 'Z') goto yy20;
- if(yych <= '`') goto yy22;
- if(yych >= '{') goto yy22;
- }
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
+ if (yych <= '@') {
+ if (yych != ':') goto yy22;
+ } else {
+ if (yych <= 'Z') goto yy20;
+ if (yych <= '`') goto yy22;
+ if (yych >= '{') goto yy22;
+ }
yy20:
- ++YYCURSOR;
- yych = *YYCURSOR;
- goto yy25;
+ ++YYCURSOR;
+ yych = *YYCURSOR;
+ goto yy25;
yy21:
- { handle_tag(STD_ARGS); /* Sets STATE */; passthru(STD_ARGS); if (STATE == STATE_PLAIN) goto state_plain; else goto state_next_arg; }
+ { handle_tag(STD_ARGS); /* Sets STATE */; passthru(STD_ARGS); if (STATE == STATE_PLAIN) goto state_plain; else goto state_next_arg; }
yy22:
- ++YYCURSOR;
- { passthru(STD_ARGS); goto state_plain_begin; }
+ ++YYCURSOR;
+ { passthru(STD_ARGS); goto state_plain_begin; }
yy24:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
yy25:
- if(yybm[0+yych] & 128) {
- goto yy24;
- }
- goto yy21;
+ if (yybm[0+yych] & 128) {
+ goto yy24;
}
+ goto yy21;
}
@@ -482,7 +476,9 @@ state_next_arg_begin:
state_next_arg:
start = YYCURSOR;
+
{
+ YYCTYPE yych;
static const unsigned char yybm[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 128, 128, 128, 0, 128, 0, 0,
@@ -517,61 +513,59 @@ state_next_arg:
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
};
-
- {
- YYCTYPE yych;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych <= ' ') {
- if(yych <= 0x0C) {
- if(yych <= 0x08) goto yy34;
- if(yych <= 0x0B) goto yy30;
- goto yy34;
- } else {
- if(yych <= 0x0D) goto yy30;
- if(yych <= 0x1F) goto yy34;
- goto yy30;
- }
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
+ if (yych <= ' ') {
+ if (yych <= '\f') {
+ if (yych <= 0x08) goto yy34;
+ if (yych <= '\v') goto yy30;
+ goto yy34;
} else {
- if(yych <= '@') {
- if(yych != '>') goto yy34;
- } else {
- if(yych <= 'Z') goto yy32;
- if(yych <= '`') goto yy34;
- if(yych <= 'z') goto yy32;
- goto yy34;
- }
+ if (yych <= '\r') goto yy30;
+ if (yych <= 0x1F) goto yy34;
+ goto yy30;
}
- ++YYCURSOR;
- { passthru(STD_ARGS); handle_form(STD_ARGS); goto state_plain_begin; }
+ } else {
+ if (yych <= '@') {
+ if (yych != '>') goto yy34;
+ } else {
+ if (yych <= 'Z') goto yy32;
+ if (yych <= '`') goto yy34;
+ if (yych <= 'z') goto yy32;
+ goto yy34;
+ }
+ }
+ ++YYCURSOR;
+ { passthru(STD_ARGS); handle_form(STD_ARGS); goto state_plain_begin; }
yy30:
- ++YYCURSOR;
- yych = *YYCURSOR;
- goto yy37;
+ ++YYCURSOR;
+ yych = *YYCURSOR;
+ goto yy37;
yy31:
- { passthru(STD_ARGS); goto state_next_arg; }
+ { passthru(STD_ARGS); goto state_next_arg; }
yy32:
- ++YYCURSOR;
- { --YYCURSOR; STATE = STATE_ARG; goto state_arg; }
+ ++YYCURSOR;
+ { --YYCURSOR; STATE = STATE_ARG; goto state_arg; }
yy34:
- ++YYCURSOR;
- { passthru(STD_ARGS); goto state_plain_begin; }
+ ++YYCURSOR;
+ { passthru(STD_ARGS); goto state_plain_begin; }
yy36:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
yy37:
- if(yybm[0+yych] & 128) {
- goto yy36;
- }
- goto yy31;
+ if (yybm[0+yych] & 128) {
+ goto yy36;
}
+ goto yy31;
}
state_arg:
start = YYCURSOR;
+
{
+ YYCTYPE yych;
static const unsigned char yybm[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -606,40 +600,38 @@ state_arg:
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
};
-
- {
- YYCTYPE yych;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych <= '@') goto yy42;
- if(yych <= 'Z') goto yy40;
- if(yych <= '`') goto yy42;
- if(yych >= '{') goto yy42;
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
+ if (yych <= '@') goto yy42;
+ if (yych <= 'Z') goto yy40;
+ if (yych <= '`') goto yy42;
+ if (yych >= '{') goto yy42;
yy40:
- ++YYCURSOR;
- yych = *YYCURSOR;
- goto yy45;
+ ++YYCURSOR;
+ yych = *YYCURSOR;
+ goto yy45;
yy41:
- { passthru(STD_ARGS); handle_arg(STD_ARGS); STATE = STATE_BEFORE_VAL; goto state_before_val; }
+ { passthru(STD_ARGS); handle_arg(STD_ARGS); STATE = STATE_BEFORE_VAL; goto state_before_val; }
yy42:
- ++YYCURSOR;
- { passthru(STD_ARGS); STATE = STATE_NEXT_ARG; goto state_next_arg; }
+ ++YYCURSOR;
+ { passthru(STD_ARGS); STATE = STATE_NEXT_ARG; goto state_next_arg; }
yy44:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
yy45:
- if(yybm[0+yych] & 128) {
- goto yy44;
- }
- goto yy41;
+ if (yybm[0+yych] & 128) {
+ goto yy44;
}
+ goto yy41;
}
state_before_val:
start = YYCURSOR;
+
{
+ YYCTYPE yych;
static const unsigned char yybm[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -674,54 +666,52 @@ state_before_val:
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
};
-
- {
- YYCTYPE yych;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych == ' ') goto yy48;
- if(yych == '=') goto yy50;
- goto yy52;
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
+ if (yych == ' ') goto yy48;
+ if (yych == '=') goto yy50;
+ goto yy52;
yy48:
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ' ') goto yy55;
- if(yych == '=') goto yy53;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == ' ') goto yy55;
+ if (yych == '=') goto yy53;
yy49:
- { --YYCURSOR; goto state_next_arg_begin; }
+ { --YYCURSOR; goto state_next_arg_begin; }
yy50:
- ++YYCURSOR;
- yych = *YYCURSOR;
- goto yy54;
+ ++YYCURSOR;
+ yych = *YYCURSOR;
+ goto yy54;
yy51:
- { passthru(STD_ARGS); STATE = STATE_VAL; goto state_val; }
+ { passthru(STD_ARGS); STATE = STATE_VAL; goto state_val; }
yy52:
- yych = *++YYCURSOR;
- goto yy49;
+ yych = *++YYCURSOR;
+ goto yy49;
yy53:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
yy54:
- if(yybm[0+yych] & 128) {
- goto yy53;
- }
- goto yy51;
-yy55:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yych == ' ') goto yy55;
- if(yych == '=') goto yy53;
- YYCURSOR = YYMARKER;
- goto yy49;
+ if (yybm[0+yych] & 128) {
+ goto yy53;
}
+ goto yy51;
+yy55:
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yych == ' ') goto yy55;
+ if (yych == '=') goto yy53;
+ YYCURSOR = YYMARKER;
+ goto yy49;
}
state_val:
start = YYCURSOR;
+
{
+ YYCTYPE yych;
static const unsigned char yybm[] = {
248, 248, 248, 248, 248, 248, 248, 248,
248, 160, 160, 248, 248, 160, 248, 248,
@@ -756,110 +746,106 @@ state_val:
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
};
-
- {
- YYCTYPE yych;
- if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
- yych = *YYCURSOR;
- if(yych <= ' ') {
- if(yych <= 0x0C) {
- if(yych <= 0x08) goto yy63;
- if(yych <= 0x0A) goto yy64;
- goto yy63;
- } else {
- if(yych <= 0x0D) goto yy64;
- if(yych <= 0x1F) goto yy63;
- goto yy64;
- }
+ if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
+ yych = *YYCURSOR;
+ if (yych <= ' ') {
+ if (yych <= '\f') {
+ if (yych <= 0x08) goto yy63;
+ if (yych <= '\n') goto yy64;
+ goto yy63;
+ } else {
+ if (yych <= '\r') goto yy64;
+ if (yych <= 0x1F) goto yy63;
+ goto yy64;
+ }
+ } else {
+ if (yych <= '&') {
+ if (yych != '"') goto yy63;
} else {
- if(yych <= '&') {
- if(yych != '"') goto yy63;
- } else {
- if(yych <= '\'') goto yy62;
- if(yych == '>') goto yy64;
- goto yy63;
- }
+ if (yych <= '\'') goto yy62;
+ if (yych == '>') goto yy64;
+ goto yy63;
}
- yych = *(YYMARKER = ++YYCURSOR);
- goto yy77;
+ }
+ yych = *(YYMARKER = ++YYCURSOR);
+ goto yy77;
yy61:
- { handle_val(STD_ARGS, 0, ' '); goto state_next_arg_begin; }
+ { handle_val(STD_ARGS, 0, ' '); goto state_next_arg_begin; }
yy62:
- yych = *(YYMARKER = ++YYCURSOR);
- goto yy69;
+ yych = *(YYMARKER = ++YYCURSOR);
+ goto yy69;
yy63:
- yych = *++YYCURSOR;
- goto yy67;
+ yych = *++YYCURSOR;
+ goto yy67;
yy64:
- ++YYCURSOR;
- { passthru(STD_ARGS); goto state_next_arg_begin; }
+ ++YYCURSOR;
+ { passthru(STD_ARGS); goto state_next_arg_begin; }
yy66:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
yy67:
- if(yybm[0+yych] & 8) {
- goto yy66;
- }
- goto yy61;
+ if (yybm[0+yych] & 8) {
+ goto yy66;
+ }
+ goto yy61;
yy68:
- YYMARKER = ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
+ YYMARKER = ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
yy69:
- if(yybm[0+yych] & 16) {
- goto yy68;
- }
- if(yych <= '&') goto yy72;
- if(yych >= '(') goto yy61;
- ++YYCURSOR;
- if(yybm[0+(yych = *YYCURSOR)] & 8) {
- goto yy66;
- }
+ if (yybm[0+yych] & 16) {
+ goto yy68;
+ }
+ if (yych <= '&') goto yy72;
+ if (yych >= '(') goto yy61;
+ ++YYCURSOR;
+ if (yybm[0+(yych = *YYCURSOR)] & 8) {
+ goto yy66;
+ }
yy71:
- { handle_val(STD_ARGS, 1, '\''); goto state_next_arg_begin; }
+ { handle_val(STD_ARGS, 1, '\''); goto state_next_arg_begin; }
yy72:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 32) {
- goto yy72;
- }
- if(yych <= '=') goto yy75;
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yybm[0+yych] & 32) {
+ goto yy72;
+ }
+ if (yych <= '=') goto yy75;
yy74:
- YYCURSOR = YYMARKER;
- goto yy61;
+ YYCURSOR = YYMARKER;
+ goto yy61;
yy75:
- yych = *++YYCURSOR;
- goto yy71;
+ yych = *++YYCURSOR;
+ goto yy71;
yy76:
- YYMARKER = ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
+ YYMARKER = ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
yy77:
- if(yybm[0+yych] & 64) {
- goto yy76;
- }
- if(yych <= '!') goto yy80;
- if(yych >= '#') goto yy61;
- ++YYCURSOR;
- if(yybm[0+(yych = *YYCURSOR)] & 8) {
- goto yy66;
- }
+ if (yybm[0+yych] & 64) {
+ goto yy76;
+ }
+ if (yych <= '!') goto yy80;
+ if (yych >= '#') goto yy61;
+ ++YYCURSOR;
+ if (yybm[0+(yych = *YYCURSOR)] & 8) {
+ goto yy66;
+ }
yy79:
- { handle_val(STD_ARGS, 1, '"'); goto state_next_arg_begin; }
+ { handle_val(STD_ARGS, 1, '"'); goto state_next_arg_begin; }
yy80:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 128) {
- goto yy80;
- }
- if(yych >= '>') goto yy74;
- ++YYCURSOR;
- yych = *YYCURSOR;
- goto yy79;
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yybm[0+yych] & 128) {
+ goto yy80;
}
+ if (yych >= '>') goto yy74;
+ ++YYCURSOR;
+ yych = *YYCURSOR;
+ goto yy79;
}
diff --git a/ext/standard/url_scanner_ex.c.orig b/ext/standard/url_scanner_ex.c.orig
index 4d337d74f..cee1c4bb9 100644
--- a/ext/standard/url_scanner_ex.c.orig
+++ b/ext/standard/url_scanner_ex.c.orig
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.12.1 on Wed Oct 10 12:28:46 2007 */
+/* Generated by re2c 0.13.5 on Wed Jul 2 12:48:53 2008 */
#line 1 "ext/standard/url_scanner_ex.re"
/*
+----------------------------------------------------------------------+
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: url_scanner_ex.c,v 1.95.2.4.2.6 2008/03/12 11:27:42 felipe Exp $ */
+/* $Id: url_scanner_ex.c,v 1.95.2.4.2.7 2008/07/16 14:10:50 jani Exp $ */
#include "php.h"
@@ -109,7 +109,10 @@ static inline void append_modified_url(smart_str *url, smart_str *dest, smart_st
q = (p = url->c) + url->len;
scan:
+
+#line 114 "ext/standard/url_scanner_ex.c"
{
+ YYCTYPE yych;
static const unsigned char yybm[] = {
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
@@ -145,42 +148,37 @@ scan:
128, 128, 128, 128, 128, 128, 128, 128,
};
-#line 149 "ext/standard/url_scanner_ex.c"
- {
- YYCTYPE yych;
-
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 128) {
- goto yy8;
- }
- if(yych <= '9') goto yy6;
- if(yych >= ';') goto yy4;
- ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yybm[0+yych] & 128) {
+ goto yy8;
+ }
+ if (yych <= '9') goto yy6;
+ if (yych >= ';') goto yy4;
+ ++YYCURSOR;
#line 116 "ext/standard/url_scanner_ex.re"
- { smart_str_append(dest, url); return; }
-#line 163 "ext/standard/url_scanner_ex.c"
+ { smart_str_append(dest, url); return; }
+#line 162 "ext/standard/url_scanner_ex.c"
yy4:
- ++YYCURSOR;
+ ++YYCURSOR;
#line 117 "ext/standard/url_scanner_ex.re"
- { sep = separator; goto scan; }
-#line 168 "ext/standard/url_scanner_ex.c"
+ { sep = separator; goto scan; }
+#line 167 "ext/standard/url_scanner_ex.c"
yy6:
- ++YYCURSOR;
+ ++YYCURSOR;
#line 118 "ext/standard/url_scanner_ex.re"
- { bash = p - 1; goto done; }
-#line 173 "ext/standard/url_scanner_ex.c"
+ { bash = p - 1; goto done; }
+#line 172 "ext/standard/url_scanner_ex.c"
yy8:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 128) {
- goto yy8;
- }
-#line 119 "ext/standard/url_scanner_ex.re"
- { goto scan; }
-#line 183 "ext/standard/url_scanner_ex.c"
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yybm[0+yych] & 128) {
+ goto yy8;
}
+#line 119 "ext/standard/url_scanner_ex.re"
+ { goto scan; }
+#line 182 "ext/standard/url_scanner_ex.c"
}
#line 120 "ext/standard/url_scanner_ex.re"
@@ -361,7 +359,10 @@ state_plain_begin:
state_plain:
start = YYCURSOR;
+
+#line 364 "ext/standard/url_scanner_ex.c"
{
+ YYCTYPE yych;
static const unsigned char yybm[] = {
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
@@ -396,37 +397,35 @@ state_plain:
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
};
-
-#line 401 "ext/standard/url_scanner_ex.c"
- {
- YYCTYPE yych;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 128) {
- goto yy15;
- }
- ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yybm[0+yych] & 128) {
+ goto yy15;
+ }
+ ++YYCURSOR;
#line 299 "ext/standard/url_scanner_ex.re"
- { passthru(STD_ARGS); STATE = STATE_TAG; goto state_tag; }
-#line 412 "ext/standard/url_scanner_ex.c"
+ { passthru(STD_ARGS); STATE = STATE_TAG; goto state_tag; }
+#line 409 "ext/standard/url_scanner_ex.c"
yy15:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 128) {
- goto yy15;
- }
-#line 300 "ext/standard/url_scanner_ex.re"
- { passthru(STD_ARGS); goto state_plain; }
-#line 422 "ext/standard/url_scanner_ex.c"
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yybm[0+yych] & 128) {
+ goto yy15;
}
+#line 300 "ext/standard/url_scanner_ex.re"
+ { passthru(STD_ARGS); goto state_plain; }
+#line 419 "ext/standard/url_scanner_ex.c"
}
#line 301 "ext/standard/url_scanner_ex.re"
state_tag:
start = YYCURSOR;
+
+#line 427 "ext/standard/url_scanner_ex.c"
{
+ YYCTYPE yych;
static const unsigned char yybm[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -461,42 +460,37 @@ state_tag:
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
};
-
-#line 466 "ext/standard/url_scanner_ex.c"
- {
- YYCTYPE yych;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych <= '@') {
- if(yych != ':') goto yy22;
- } else {
- if(yych <= 'Z') goto yy20;
- if(yych <= '`') goto yy22;
- if(yych >= '{') goto yy22;
- }
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
+ if (yych <= '@') {
+ if (yych != ':') goto yy22;
+ } else {
+ if (yych <= 'Z') goto yy20;
+ if (yych <= '`') goto yy22;
+ if (yych >= '{') goto yy22;
+ }
yy20:
- ++YYCURSOR;
- yych = *YYCURSOR;
- goto yy25;
+ ++YYCURSOR;
+ yych = *YYCURSOR;
+ goto yy25;
yy21:
#line 306 "ext/standard/url_scanner_ex.re"
- { handle_tag(STD_ARGS); /* Sets STATE */; passthru(STD_ARGS); if (STATE == STATE_PLAIN) goto state_plain; else goto state_next_arg; }
-#line 485 "ext/standard/url_scanner_ex.c"
+ { handle_tag(STD_ARGS); /* Sets STATE */; passthru(STD_ARGS); if (STATE == STATE_PLAIN) goto state_plain; else goto state_next_arg; }
+#line 480 "ext/standard/url_scanner_ex.c"
yy22:
- ++YYCURSOR;
+ ++YYCURSOR;
#line 307 "ext/standard/url_scanner_ex.re"
- { passthru(STD_ARGS); goto state_plain_begin; }
-#line 490 "ext/standard/url_scanner_ex.c"
+ { passthru(STD_ARGS); goto state_plain_begin; }
+#line 485 "ext/standard/url_scanner_ex.c"
yy24:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
yy25:
- if(yybm[0+yych] & 128) {
- goto yy24;
- }
- goto yy21;
+ if (yybm[0+yych] & 128) {
+ goto yy24;
}
+ goto yy21;
}
#line 308 "ext/standard/url_scanner_ex.re"
@@ -506,7 +500,10 @@ state_next_arg_begin:
state_next_arg:
start = YYCURSOR;
+
+#line 505 "ext/standard/url_scanner_ex.c"
{
+ YYCTYPE yych;
static const unsigned char yybm[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 128, 128, 128, 0, 128, 0, 0,
@@ -541,71 +538,69 @@ state_next_arg:
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
};
-
-#line 546 "ext/standard/url_scanner_ex.c"
- {
- YYCTYPE yych;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych <= ' ') {
- if(yych <= 0x0C) {
- if(yych <= 0x08) goto yy34;
- if(yych <= 0x0B) goto yy30;
- goto yy34;
- } else {
- if(yych <= 0x0D) goto yy30;
- if(yych <= 0x1F) goto yy34;
- goto yy30;
- }
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
+ if (yych <= ' ') {
+ if (yych <= '\f') {
+ if (yych <= 0x08) goto yy34;
+ if (yych <= '\v') goto yy30;
+ goto yy34;
} else {
- if(yych <= '@') {
- if(yych != '>') goto yy34;
- } else {
- if(yych <= 'Z') goto yy32;
- if(yych <= '`') goto yy34;
- if(yych <= 'z') goto yy32;
- goto yy34;
- }
+ if (yych <= '\r') goto yy30;
+ if (yych <= 0x1F) goto yy34;
+ goto yy30;
}
- ++YYCURSOR;
+ } else {
+ if (yych <= '@') {
+ if (yych != '>') goto yy34;
+ } else {
+ if (yych <= 'Z') goto yy32;
+ if (yych <= '`') goto yy34;
+ if (yych <= 'z') goto yy32;
+ goto yy34;
+ }
+ }
+ ++YYCURSOR;
#line 316 "ext/standard/url_scanner_ex.re"
- { passthru(STD_ARGS); handle_form(STD_ARGS); goto state_plain_begin; }
-#line 574 "ext/standard/url_scanner_ex.c"
+ { passthru(STD_ARGS); handle_form(STD_ARGS); goto state_plain_begin; }
+#line 567 "ext/standard/url_scanner_ex.c"
yy30:
- ++YYCURSOR;
- yych = *YYCURSOR;
- goto yy37;
+ ++YYCURSOR;
+ yych = *YYCURSOR;
+ goto yy37;
yy31:
#line 317 "ext/standard/url_scanner_ex.re"
- { passthru(STD_ARGS); goto state_next_arg; }
-#line 582 "ext/standard/url_scanner_ex.c"
+ { passthru(STD_ARGS); goto state_next_arg; }
+#line 575 "ext/standard/url_scanner_ex.c"
yy32:
- ++YYCURSOR;
+ ++YYCURSOR;
#line 318 "ext/standard/url_scanner_ex.re"
- { --YYCURSOR; STATE = STATE_ARG; goto state_arg; }
-#line 587 "ext/standard/url_scanner_ex.c"
+ { --YYCURSOR; STATE = STATE_ARG; goto state_arg; }
+#line 580 "ext/standard/url_scanner_ex.c"
yy34:
- ++YYCURSOR;
+ ++YYCURSOR;
#line 319 "ext/standard/url_scanner_ex.re"
- { passthru(STD_ARGS); goto state_plain_begin; }
-#line 592 "ext/standard/url_scanner_ex.c"
+ { passthru(STD_ARGS); goto state_plain_begin; }
+#line 585 "ext/standard/url_scanner_ex.c"
yy36:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
yy37:
- if(yybm[0+yych] & 128) {
- goto yy36;
- }
- goto yy31;
+ if (yybm[0+yych] & 128) {
+ goto yy36;
}
+ goto yy31;
}
#line 320 "ext/standard/url_scanner_ex.re"
state_arg:
start = YYCURSOR;
+
+#line 602 "ext/standard/url_scanner_ex.c"
{
+ YYCTYPE yych;
static const unsigned char yybm[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -640,46 +635,44 @@ state_arg:
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
};
-
-#line 645 "ext/standard/url_scanner_ex.c"
- {
- YYCTYPE yych;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych <= '@') goto yy42;
- if(yych <= 'Z') goto yy40;
- if(yych <= '`') goto yy42;
- if(yych >= '{') goto yy42;
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
+ if (yych <= '@') goto yy42;
+ if (yych <= 'Z') goto yy40;
+ if (yych <= '`') goto yy42;
+ if (yych >= '{') goto yy42;
yy40:
- ++YYCURSOR;
- yych = *YYCURSOR;
- goto yy45;
+ ++YYCURSOR;
+ yych = *YYCURSOR;
+ goto yy45;
yy41:
#line 325 "ext/standard/url_scanner_ex.re"
- { passthru(STD_ARGS); handle_arg(STD_ARGS); STATE = STATE_BEFORE_VAL; goto state_before_val; }
-#line 661 "ext/standard/url_scanner_ex.c"
+ { passthru(STD_ARGS); handle_arg(STD_ARGS); STATE = STATE_BEFORE_VAL; goto state_before_val; }
+#line 652 "ext/standard/url_scanner_ex.c"
yy42:
- ++YYCURSOR;
+ ++YYCURSOR;
#line 326 "ext/standard/url_scanner_ex.re"
- { passthru(STD_ARGS); STATE = STATE_NEXT_ARG; goto state_next_arg; }
-#line 666 "ext/standard/url_scanner_ex.c"
+ { passthru(STD_ARGS); STATE = STATE_NEXT_ARG; goto state_next_arg; }
+#line 657 "ext/standard/url_scanner_ex.c"
yy44:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
yy45:
- if(yybm[0+yych] & 128) {
- goto yy44;
- }
- goto yy41;
+ if (yybm[0+yych] & 128) {
+ goto yy44;
}
+ goto yy41;
}
#line 327 "ext/standard/url_scanner_ex.re"
state_before_val:
start = YYCURSOR;
+
+#line 674 "ext/standard/url_scanner_ex.c"
{
+ YYCTYPE yych;
static const unsigned char yybm[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -714,52 +707,47 @@ state_before_val:
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
};
-
-#line 719 "ext/standard/url_scanner_ex.c"
- {
- YYCTYPE yych;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych == ' ') goto yy48;
- if(yych == '=') goto yy50;
- goto yy52;
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
+ if (yych == ' ') goto yy48;
+ if (yych == '=') goto yy50;
+ goto yy52;
yy48:
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ' ') goto yy55;
- if(yych == '=') goto yy53;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == ' ') goto yy55;
+ if (yych == '=') goto yy53;
yy49:
#line 333 "ext/standard/url_scanner_ex.re"
- { --YYCURSOR; goto state_next_arg_begin; }
-#line 734 "ext/standard/url_scanner_ex.c"
+ { --YYCURSOR; goto state_next_arg_begin; }
+#line 723 "ext/standard/url_scanner_ex.c"
yy50:
- ++YYCURSOR;
- yych = *YYCURSOR;
- goto yy54;
+ ++YYCURSOR;
+ yych = *YYCURSOR;
+ goto yy54;
yy51:
#line 332 "ext/standard/url_scanner_ex.re"
- { passthru(STD_ARGS); STATE = STATE_VAL; goto state_val; }
-#line 742 "ext/standard/url_scanner_ex.c"
+ { passthru(STD_ARGS); STATE = STATE_VAL; goto state_val; }
+#line 731 "ext/standard/url_scanner_ex.c"
yy52:
- yych = *++YYCURSOR;
- goto yy49;
+ yych = *++YYCURSOR;
+ goto yy49;
yy53:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
yy54:
- if(yybm[0+yych] & 128) {
- goto yy53;
- }
- goto yy51;
-yy55:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yych == ' ') goto yy55;
- if(yych == '=') goto yy53;
- YYCURSOR = YYMARKER;
- goto yy49;
+ if (yybm[0+yych] & 128) {
+ goto yy53;
}
+ goto yy51;
+yy55:
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yych == ' ') goto yy55;
+ if (yych == '=') goto yy53;
+ YYCURSOR = YYMARKER;
+ goto yy49;
}
#line 334 "ext/standard/url_scanner_ex.re"
@@ -767,7 +755,10 @@ yy55:
state_val:
start = YYCURSOR;
+
+#line 760 "ext/standard/url_scanner_ex.c"
{
+ YYCTYPE yych;
static const unsigned char yybm[] = {
248, 248, 248, 248, 248, 248, 248, 248,
248, 160, 160, 248, 248, 160, 248, 248,
@@ -802,119 +793,114 @@ state_val:
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
};
-
-#line 807 "ext/standard/url_scanner_ex.c"
- {
- YYCTYPE yych;
- if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
- yych = *YYCURSOR;
- if(yych <= ' ') {
- if(yych <= 0x0C) {
- if(yych <= 0x08) goto yy63;
- if(yych <= 0x0A) goto yy64;
- goto yy63;
- } else {
- if(yych <= 0x0D) goto yy64;
- if(yych <= 0x1F) goto yy63;
- goto yy64;
- }
+ if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
+ yych = *YYCURSOR;
+ if (yych <= ' ') {
+ if (yych <= '\f') {
+ if (yych <= 0x08) goto yy63;
+ if (yych <= '\n') goto yy64;
+ goto yy63;
+ } else {
+ if (yych <= '\r') goto yy64;
+ if (yych <= 0x1F) goto yy63;
+ goto yy64;
+ }
+ } else {
+ if (yych <= '&') {
+ if (yych != '"') goto yy63;
} else {
- if(yych <= '&') {
- if(yych != '"') goto yy63;
- } else {
- if(yych <= '\'') goto yy62;
- if(yych == '>') goto yy64;
- goto yy63;
- }
+ if (yych <= '\'') goto yy62;
+ if (yych == '>') goto yy64;
+ goto yy63;
}
- yych = *(YYMARKER = ++YYCURSOR);
- goto yy77;
+ }
+ yych = *(YYMARKER = ++YYCURSOR);
+ goto yy77;
yy61:
#line 342 "ext/standard/url_scanner_ex.re"
- { handle_val(STD_ARGS, 0, ' '); goto state_next_arg_begin; }
-#line 836 "ext/standard/url_scanner_ex.c"
+ { handle_val(STD_ARGS, 0, ' '); goto state_next_arg_begin; }
+#line 823 "ext/standard/url_scanner_ex.c"
yy62:
- yych = *(YYMARKER = ++YYCURSOR);
- goto yy69;
+ yych = *(YYMARKER = ++YYCURSOR);
+ goto yy69;
yy63:
- yych = *++YYCURSOR;
- goto yy67;
+ yych = *++YYCURSOR;
+ goto yy67;
yy64:
- ++YYCURSOR;
+ ++YYCURSOR;
#line 343 "ext/standard/url_scanner_ex.re"
- { passthru(STD_ARGS); goto state_next_arg_begin; }
-#line 847 "ext/standard/url_scanner_ex.c"
+ { passthru(STD_ARGS); goto state_next_arg_begin; }
+#line 834 "ext/standard/url_scanner_ex.c"
yy66:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
yy67:
- if(yybm[0+yych] & 8) {
- goto yy66;
- }
- goto yy61;
+ if (yybm[0+yych] & 8) {
+ goto yy66;
+ }
+ goto yy61;
yy68:
- YYMARKER = ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
+ YYMARKER = ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
yy69:
- if(yybm[0+yych] & 16) {
- goto yy68;
- }
- if(yych <= '&') goto yy72;
- if(yych >= '(') goto yy61;
- ++YYCURSOR;
- if(yybm[0+(yych = *YYCURSOR)] & 8) {
- goto yy66;
- }
+ if (yybm[0+yych] & 16) {
+ goto yy68;
+ }
+ if (yych <= '&') goto yy72;
+ if (yych >= '(') goto yy61;
+ ++YYCURSOR;
+ if (yybm[0+(yych = *YYCURSOR)] & 8) {
+ goto yy66;
+ }
yy71:
#line 341 "ext/standard/url_scanner_ex.re"
- { handle_val(STD_ARGS, 1, '\''); goto state_next_arg_begin; }
-#line 874 "ext/standard/url_scanner_ex.c"
+ { handle_val(STD_ARGS, 1, '\''); goto state_next_arg_begin; }
+#line 861 "ext/standard/url_scanner_ex.c"
yy72:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 32) {
- goto yy72;
- }
- if(yych <= '=') goto yy75;
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yybm[0+yych] & 32) {
+ goto yy72;
+ }
+ if (yych <= '=') goto yy75;
yy74:
- YYCURSOR = YYMARKER;
- goto yy61;
+ YYCURSOR = YYMARKER;
+ goto yy61;
yy75:
- yych = *++YYCURSOR;
- goto yy71;
+ yych = *++YYCURSOR;
+ goto yy71;
yy76:
- YYMARKER = ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
+ YYMARKER = ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
yy77:
- if(yybm[0+yych] & 64) {
- goto yy76;
- }
- if(yych <= '!') goto yy80;
- if(yych >= '#') goto yy61;
- ++YYCURSOR;
- if(yybm[0+(yych = *YYCURSOR)] & 8) {
- goto yy66;
- }
+ if (yybm[0+yych] & 64) {
+ goto yy76;
+ }
+ if (yych <= '!') goto yy80;
+ if (yych >= '#') goto yy61;
+ ++YYCURSOR;
+ if (yybm[0+(yych = *YYCURSOR)] & 8) {
+ goto yy66;
+ }
yy79:
#line 340 "ext/standard/url_scanner_ex.re"
- { handle_val(STD_ARGS, 1, '"'); goto state_next_arg_begin; }
-#line 906 "ext/standard/url_scanner_ex.c"
+ { handle_val(STD_ARGS, 1, '"'); goto state_next_arg_begin; }
+#line 893 "ext/standard/url_scanner_ex.c"
yy80:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 128) {
- goto yy80;
- }
- if(yych >= '>') goto yy74;
- ++YYCURSOR;
- yych = *YYCURSOR;
- goto yy79;
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yybm[0+yych] & 128) {
+ goto yy80;
}
+ if (yych >= '>') goto yy74;
+ ++YYCURSOR;
+ yych = *YYCURSOR;
+ goto yy79;
}
#line 344 "ext/standard/url_scanner_ex.re"
diff --git a/ext/standard/url_scanner_ex.h b/ext/standard/url_scanner_ex.h
index 9f17558e3..dacd4d77b 100644
--- a/ext/standard/url_scanner_ex.h
+++ b/ext/standard/url_scanner_ex.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: url_scanner_ex.h,v 1.26.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: url_scanner_ex.h,v 1.26.2.1.2.3 2008/12/31 11:17:46 sebastian Exp $ */
#ifndef URL_SCANNER_EX_H
#define URL_SCANNER_EX_H
diff --git a/ext/standard/user_filters.c b/ext/standard/user_filters.c
index 70e479450..e04671b1f 100644
--- a/ext/standard/user_filters.c
+++ b/ext/standard/user_filters.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: user_filters.c,v 1.31.2.4.2.10 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: user_filters.c,v 1.31.2.4.2.13 2009/01/08 18:40:56 lbarnaud Exp $ */
#include "php.h"
#include "php_globals.h"
@@ -180,12 +180,14 @@ php_stream_filter_status_t userfilter_filter(
zval *retval = NULL;
zval **args[4];
zval *zclosing, *zconsumed, *zin, *zout, *zstream;
+ zval zpropname;
int call_result;
if (FAILURE == zend_hash_find(Z_OBJPROP_P(obj), "stream", sizeof("stream"), (void**)&zstream)) {
/* Give the userfilter class a hook back to the stream */
ALLOC_INIT_ZVAL(zstream);
php_stream_to_zval(stream, zstream);
+ zval_copy_ctor(zstream);
add_property_zval(obj, "stream", zstream);
/* add_property_zval increments the refcount which is unwanted here */
zval_ptr_dtor(&zstream);
@@ -246,6 +248,21 @@ php_stream_filter_status_t userfilter_filter(
php_stream_bucket_delref(bucket TSRMLS_CC);
}
}
+ if (ret != PSFS_PASS_ON) {
+ php_stream_bucket *bucket = buckets_out->head;
+ while (bucket != NULL) {
+ php_stream_bucket_unlink(bucket TSRMLS_CC);
+ php_stream_bucket_delref(bucket TSRMLS_CC);
+ bucket = buckets_out->head;
+ }
+ }
+
+ /* filter resources are cleaned up by the stream destructor,
+ * keeping a reference to the stream resource here would prevent it
+ * from being destroyed properly */
+ INIT_ZVAL(zpropname);
+ ZVAL_STRINGL(&zpropname, "stream", sizeof("stream")-1, 0);
+ Z_OBJ_HANDLER_P(obj, unset_property)(obj, &zpropname TSRMLS_CC);
zval_ptr_dtor(&zclosing);
zval_ptr_dtor(&zconsumed);
diff --git a/ext/standard/uuencode.c b/ext/standard/uuencode.c
index c0df1e0d9..7b200b8e2 100644
--- a/ext/standard/uuencode.c
+++ b/ext/standard/uuencode.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: uuencode.c,v 1.5.2.1.2.6 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: uuencode.c,v 1.5.2.1.2.7 2008/12/31 11:17:46 sebastian Exp $ */
/*
* Portions of this code are based on Berkeley's uuencode/uudecode
diff --git a/ext/standard/var.c b/ext/standard/var.c
index efbc887f6..9abe33b11 100644
--- a/ext/standard/var.c
+++ b/ext/standard/var.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: var.c,v 1.203.2.7.2.22 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: var.c,v 1.203.2.7.2.25 2009/01/07 14:36:49 derick Exp $ */
@@ -378,13 +378,15 @@ static int php_object_element_export(zval **zv, int num_args, va_list args, zend
level = va_arg(args, int);
+ php_printf("%*c", level + 1, ' ');
if (hash_key->nKeyLength != 0) {
- php_printf("%*c", level + 1, ' ');
- zend_unmangle_property_name(hash_key->arKey, hash_key->nKeyLength-1, &class_name, &prop_name);
+ zend_unmangle_property_name(hash_key->arKey, hash_key->nKeyLength - 1, &class_name, &prop_name);
php_printf(" '%s' => ", prop_name);
- php_var_export(zv, level + 2 TSRMLS_CC);
- PUTS (",\n");
+ } else {
+ php_printf(" %ld => ", hash_key->h);
}
+ php_var_export(zv, level + 2 TSRMLS_CC);
+ PUTS (",\n");
return 0;
}
@@ -424,7 +426,7 @@ PHPAPI void php_var_export(zval **struc, int level TSRMLS_DC)
php_printf("\n%*c", level - 1, ' ');
}
PUTS ("array (\n");
- zend_hash_apply_with_arguments(myht, (apply_func_args_t) php_array_element_export, 1, level, (Z_TYPE_PP(struc) == IS_ARRAY ? 0 : 1));
+ zend_hash_apply_with_arguments(myht, (apply_func_args_t) php_array_element_export, 1, level, 0);
if (level > 1) {
php_printf("%*c", level - 1, ' ');
}
diff --git a/ext/standard/var_unserializer.c b/ext/standard/var_unserializer.c
index 89181b8ce..4917799db 100644
--- a/ext/standard/var_unserializer.c
+++ b/ext/standard/var_unserializer.c
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.12.1 on Mon Aug 6 21:32:14 2007 */
+/* Generated by re2c 0.13.5 on Sat Oct 4 10:07:18 2008 */
/*
+----------------------------------------------------------------------+
| PHP Version 5 |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: var_unserializer.c,v 1.70.2.4.2.8 2008/03/19 03:00:40 felipe Exp $ */
+/* $Id: var_unserializer.c,v 1.70.2.4.2.10 2008/10/04 13:11:36 felipe Exp $ */
#include "php.h"
#include "ext/standard/php_var.h"
@@ -332,7 +332,7 @@ static inline int object_custom(UNSERIALIZE_PARAMETER, zend_class_entry *ce)
(*p) += 2;
if (datalen < 0 || (*p) + datalen >= max) {
- zend_error(E_WARNING, "Insufficient data for unserializing - %ld required, %ld present", datalen, max - (*p));
+ zend_error(E_WARNING, "Insufficient data for unserializing - %ld required, %ld present", datalen, (long)(max - (*p)));
return 0;
}
@@ -395,7 +395,9 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
+
{
+ YYCTYPE yych;
static const unsigned char yybm[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -431,109 +433,106 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
0, 0, 0, 0, 0, 0, 0, 0,
};
- {
- YYCTYPE yych;
-
- if((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
- yych = *YYCURSOR;
- switch(yych) {
- case 'C':
- case 'O': goto yy13;
- case 'N': goto yy5;
- case 'R': goto yy2;
- case 'S': goto yy10;
- case 'a': goto yy11;
- case 'b': goto yy6;
- case 'd': goto yy8;
- case 'i': goto yy7;
- case 'o': goto yy12;
- case 'r': goto yy4;
- case 's': goto yy9;
- case '}': goto yy14;
- default: goto yy16;
- }
+ if ((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
+ yych = *YYCURSOR;
+ switch (yych) {
+ case 'C':
+ case 'O': goto yy13;
+ case 'N': goto yy5;
+ case 'R': goto yy2;
+ case 'S': goto yy10;
+ case 'a': goto yy11;
+ case 'b': goto yy6;
+ case 'd': goto yy8;
+ case 'i': goto yy7;
+ case 'o': goto yy12;
+ case 'r': goto yy4;
+ case 's': goto yy9;
+ case '}': goto yy14;
+ default: goto yy16;
+ }
yy2:
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy95;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == ':') goto yy95;
yy3:
- { return 0; }
+ { return 0; }
yy4:
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy89;
- goto yy3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == ':') goto yy89;
+ goto yy3;
yy5:
- yych = *++YYCURSOR;
- if(yych == ';') goto yy87;
- goto yy3;
+ yych = *++YYCURSOR;
+ if (yych == ';') goto yy87;
+ goto yy3;
yy6:
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy83;
- goto yy3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == ':') goto yy83;
+ goto yy3;
yy7:
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy77;
- goto yy3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == ':') goto yy77;
+ goto yy3;
yy8:
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy53;
- goto yy3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == ':') goto yy53;
+ goto yy3;
yy9:
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy46;
- goto yy3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == ':') goto yy46;
+ goto yy3;
yy10:
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy39;
- goto yy3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == ':') goto yy39;
+ goto yy3;
yy11:
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy32;
- goto yy3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == ':') goto yy32;
+ goto yy3;
yy12:
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy25;
- goto yy3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == ':') goto yy25;
+ goto yy3;
yy13:
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy17;
- goto yy3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == ':') goto yy17;
+ goto yy3;
yy14:
- ++YYCURSOR;
- {
+ ++YYCURSOR;
+ {
/* this is the case where we have less data than planned */
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unexpected end of serialized data");
return 0; /* not sure if it should be 0 or 1 here? */
}
yy16:
- yych = *++YYCURSOR;
- goto yy3;
+ yych = *++YYCURSOR;
+ goto yy3;
yy17:
- yych = *++YYCURSOR;
- if(yybm[0+yych] & 128) {
- goto yy20;
- }
- if(yych == '+') goto yy19;
+ yych = *++YYCURSOR;
+ if (yybm[0+yych] & 128) {
+ goto yy20;
+ }
+ if (yych == '+') goto yy19;
yy18:
- YYCURSOR = YYMARKER;
- goto yy3;
+ YYCURSOR = YYMARKER;
+ goto yy3;
yy19:
- yych = *++YYCURSOR;
- if(yybm[0+yych] & 128) {
- goto yy20;
- }
- goto yy18;
+ yych = *++YYCURSOR;
+ if (yybm[0+yych] & 128) {
+ goto yy20;
+ }
+ goto yy18;
yy20:
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 128) {
- goto yy20;
- }
- if(yych != ':') goto yy18;
- yych = *++YYCURSOR;
- if(yych != '"') goto yy18;
- ++YYCURSOR;
- {
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
+ if (yybm[0+yych] & 128) {
+ goto yy20;
+ }
+ if (yych != ':') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych != '"') goto yy18;
+ ++YYCURSOR;
+ {
size_t len, len2, len3, maxlen;
long elements;
char *class_name;
@@ -645,30 +644,30 @@ yy20:
return object_common2(UNSERIALIZE_PASSTHRU, elements);
}
yy25:
- yych = *++YYCURSOR;
- if(yych <= ',') {
- if(yych != '+') goto yy18;
- } else {
- if(yych <= '-') goto yy26;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy27;
- goto yy18;
- }
+ yych = *++YYCURSOR;
+ if (yych <= ',') {
+ if (yych != '+') goto yy18;
+ } else {
+ if (yych <= '-') goto yy26;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy27;
+ goto yy18;
+ }
yy26:
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych >= ':') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych >= ':') goto yy18;
yy27:
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy27;
- if(yych >= ';') goto yy18;
- yych = *++YYCURSOR;
- if(yych != '"') goto yy18;
- ++YYCURSOR;
- {
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy27;
+ if (yych >= ';') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych != '"') goto yy18;
+ ++YYCURSOR;
+ {
INIT_PZVAL(*rval);
@@ -676,26 +675,26 @@ yy27:
object_common1(UNSERIALIZE_PASSTHRU, ZEND_STANDARD_CLASS_DEF_PTR));
}
yy32:
- yych = *++YYCURSOR;
- if(yych == '+') goto yy33;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy34;
- goto yy18;
+ yych = *++YYCURSOR;
+ if (yych == '+') goto yy33;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy34;
+ goto yy18;
yy33:
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych >= ':') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych >= ':') goto yy18;
yy34:
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy34;
- if(yych >= ';') goto yy18;
- yych = *++YYCURSOR;
- if(yych != '{') goto yy18;
- ++YYCURSOR;
- {
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy34;
+ if (yych >= ';') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych != '{') goto yy18;
+ ++YYCURSOR;
+ {
long elements = parse_iv(start + 2);
/* use iv() not uiv() in order to check data range */
*p = YYCURSOR;
@@ -717,26 +716,26 @@ yy34:
return finish_nested_data(UNSERIALIZE_PASSTHRU);
}
yy39:
- yych = *++YYCURSOR;
- if(yych == '+') goto yy40;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy41;
- goto yy18;
+ yych = *++YYCURSOR;
+ if (yych == '+') goto yy40;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy41;
+ goto yy18;
yy40:
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych >= ':') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych >= ':') goto yy18;
yy41:
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy41;
- if(yych >= ';') goto yy18;
- yych = *++YYCURSOR;
- if(yych != '"') goto yy18;
- ++YYCURSOR;
- {
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy41;
+ if (yych >= ';') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych != '"') goto yy18;
+ ++YYCURSOR;
+ {
size_t len, maxlen;
char *str;
@@ -765,26 +764,26 @@ yy41:
return 1;
}
yy46:
- yych = *++YYCURSOR;
- if(yych == '+') goto yy47;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy48;
- goto yy18;
+ yych = *++YYCURSOR;
+ if (yych == '+') goto yy47;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy48;
+ goto yy18;
yy47:
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych >= ':') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych >= ':') goto yy18;
yy48:
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy48;
- if(yych >= ';') goto yy18;
- yych = *++YYCURSOR;
- if(yych != '"') goto yy18;
- ++YYCURSOR;
- {
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy48;
+ if (yych >= ';') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych != '"') goto yy18;
+ ++YYCURSOR;
+ {
size_t len, maxlen;
char *str;
@@ -812,157 +811,157 @@ yy48:
return 1;
}
yy53:
- yych = *++YYCURSOR;
- if(yych <= '/') {
- if(yych <= ',') {
- if(yych == '+') goto yy57;
- goto yy18;
- } else {
- if(yych <= '-') goto yy55;
- if(yych <= '.') goto yy60;
- goto yy18;
- }
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych <= ',') {
+ if (yych == '+') goto yy57;
+ goto yy18;
} else {
- if(yych <= 'I') {
- if(yych <= '9') goto yy58;
- if(yych <= 'H') goto yy18;
- goto yy56;
- } else {
- if(yych != 'N') goto yy18;
- }
- }
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy76;
- goto yy18;
-yy55:
- yych = *++YYCURSOR;
- if(yych <= '/') {
- if(yych == '.') goto yy60;
+ if (yych <= '-') goto yy55;
+ if (yych <= '.') goto yy60;
goto yy18;
+ }
+ } else {
+ if (yych <= 'I') {
+ if (yych <= '9') goto yy58;
+ if (yych <= 'H') goto yy18;
+ goto yy56;
} else {
- if(yych <= '9') goto yy58;
- if(yych != 'I') goto yy18;
+ if (yych != 'N') goto yy18;
}
-yy56:
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy72;
+ }
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy76;
+ goto yy18;
+yy55:
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy60;
goto yy18;
+ } else {
+ if (yych <= '9') goto yy58;
+ if (yych != 'I') goto yy18;
+ }
+yy56:
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy72;
+ goto yy18;
yy57:
- yych = *++YYCURSOR;
- if(yych == '.') goto yy60;
- if(yych <= '/') goto yy18;
- if(yych >= ':') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych == '.') goto yy60;
+ if (yych <= '/') goto yy18;
+ if (yych >= ':') goto yy18;
yy58:
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
- yych = *YYCURSOR;
- if(yych <= ':') {
- if(yych <= '.') {
- if(yych <= '-') goto yy18;
- goto yy70;
- } else {
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy58;
- goto yy18;
- }
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
+ yych = *YYCURSOR;
+ if (yych <= ':') {
+ if (yych <= '.') {
+ if (yych <= '-') goto yy18;
+ goto yy70;
} else {
- if(yych <= 'E') {
- if(yych <= ';') goto yy63;
- if(yych <= 'D') goto yy18;
- goto yy65;
- } else {
- if(yych == 'e') goto yy65;
- goto yy18;
- }
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy58;
+ goto yy18;
+ }
+ } else {
+ if (yych <= 'E') {
+ if (yych <= ';') goto yy63;
+ if (yych <= 'D') goto yy18;
+ goto yy65;
+ } else {
+ if (yych == 'e') goto yy65;
+ goto yy18;
}
+ }
yy60:
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych >= ':') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych >= ':') goto yy18;
yy61:
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
- yych = *YYCURSOR;
- if(yych <= ';') {
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy61;
- if(yych <= ':') goto yy18;
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
+ yych = *YYCURSOR;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy61;
+ if (yych <= ':') goto yy18;
+ } else {
+ if (yych <= 'E') {
+ if (yych <= 'D') goto yy18;
+ goto yy65;
} else {
- if(yych <= 'E') {
- if(yych <= 'D') goto yy18;
- goto yy65;
- } else {
- if(yych == 'e') goto yy65;
- goto yy18;
- }
+ if (yych == 'e') goto yy65;
+ goto yy18;
}
+ }
yy63:
- ++YYCURSOR;
- {
+ ++YYCURSOR;
+ {
*p = YYCURSOR;
INIT_PZVAL(*rval);
ZVAL_DOUBLE(*rval, zend_strtod((const char *)start + 2, NULL));
return 1;
}
yy65:
- yych = *++YYCURSOR;
- if(yych <= ',') {
- if(yych != '+') goto yy18;
- } else {
- if(yych <= '-') goto yy66;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy67;
- goto yy18;
- }
+ yych = *++YYCURSOR;
+ if (yych <= ',') {
+ if (yych != '+') goto yy18;
+ } else {
+ if (yych <= '-') goto yy66;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy67;
+ goto yy18;
+ }
yy66:
- yych = *++YYCURSOR;
- if(yych <= ',') {
- if(yych == '+') goto yy69;
- goto yy18;
- } else {
- if(yych <= '-') goto yy69;
- if(yych <= '/') goto yy18;
- if(yych >= ':') goto yy18;
- }
-yy67:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy67;
- if(yych == ';') goto yy63;
+ yych = *++YYCURSOR;
+ if (yych <= ',') {
+ if (yych == '+') goto yy69;
goto yy18;
+ } else {
+ if (yych <= '-') goto yy69;
+ if (yych <= '/') goto yy18;
+ if (yych >= ':') goto yy18;
+ }
+yy67:
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy67;
+ if (yych == ';') goto yy63;
+ goto yy18;
yy69:
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy67;
- goto yy18;
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy67;
+ goto yy18;
yy70:
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
- yych = *YYCURSOR;
- if(yych <= ';') {
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy70;
- if(yych <= ':') goto yy18;
- goto yy63;
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
+ yych = *YYCURSOR;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy70;
+ if (yych <= ':') goto yy18;
+ goto yy63;
+ } else {
+ if (yych <= 'E') {
+ if (yych <= 'D') goto yy18;
+ goto yy65;
} else {
- if(yych <= 'E') {
- if(yych <= 'D') goto yy18;
- goto yy65;
- } else {
- if(yych == 'e') goto yy65;
- goto yy18;
- }
+ if (yych == 'e') goto yy65;
+ goto yy18;
}
+ }
yy72:
- yych = *++YYCURSOR;
- if(yych != 'F') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych != 'F') goto yy18;
yy73:
- yych = *++YYCURSOR;
- if(yych != ';') goto yy18;
- ++YYCURSOR;
- {
+ yych = *++YYCURSOR;
+ if (yych != ';') goto yy18;
+ ++YYCURSOR;
+ {
*p = YYCURSOR;
INIT_PZVAL(*rval);
@@ -977,81 +976,81 @@ yy73:
return 1;
}
yy76:
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy73;
- goto yy18;
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy73;
+ goto yy18;
yy77:
- yych = *++YYCURSOR;
- if(yych <= ',') {
- if(yych != '+') goto yy18;
- } else {
- if(yych <= '-') goto yy78;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy79;
- goto yy18;
- }
+ yych = *++YYCURSOR;
+ if (yych <= ',') {
+ if (yych != '+') goto yy18;
+ } else {
+ if (yych <= '-') goto yy78;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy79;
+ goto yy18;
+ }
yy78:
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych >= ':') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych >= ':') goto yy18;
yy79:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy79;
- if(yych != ';') goto yy18;
- ++YYCURSOR;
- {
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy79;
+ if (yych != ';') goto yy18;
+ ++YYCURSOR;
+ {
*p = YYCURSOR;
INIT_PZVAL(*rval);
ZVAL_LONG(*rval, parse_iv(start + 2));
return 1;
}
yy83:
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych >= '2') goto yy18;
- yych = *++YYCURSOR;
- if(yych != ';') goto yy18;
- ++YYCURSOR;
- {
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych >= '2') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych != ';') goto yy18;
+ ++YYCURSOR;
+ {
*p = YYCURSOR;
INIT_PZVAL(*rval);
ZVAL_BOOL(*rval, parse_iv(start + 2));
return 1;
}
yy87:
- ++YYCURSOR;
- {
+ ++YYCURSOR;
+ {
*p = YYCURSOR;
INIT_PZVAL(*rval);
ZVAL_NULL(*rval);
return 1;
}
yy89:
- yych = *++YYCURSOR;
- if(yych <= ',') {
- if(yych != '+') goto yy18;
- } else {
- if(yych <= '-') goto yy90;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy91;
- goto yy18;
- }
+ yych = *++YYCURSOR;
+ if (yych <= ',') {
+ if (yych != '+') goto yy18;
+ } else {
+ if (yych <= '-') goto yy90;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy91;
+ goto yy18;
+ }
yy90:
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych >= ':') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych >= ':') goto yy18;
yy91:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy91;
- if(yych != ';') goto yy18;
- ++YYCURSOR;
- {
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy91;
+ if (yych != ';') goto yy18;
+ ++YYCURSOR;
+ {
long id;
*p = YYCURSOR;
@@ -1074,28 +1073,28 @@ yy91:
return 1;
}
yy95:
- yych = *++YYCURSOR;
- if(yych <= ',') {
- if(yych != '+') goto yy18;
- } else {
- if(yych <= '-') goto yy96;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy97;
- goto yy18;
- }
+ yych = *++YYCURSOR;
+ if (yych <= ',') {
+ if (yych != '+') goto yy18;
+ } else {
+ if (yych <= '-') goto yy96;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy97;
+ goto yy18;
+ }
yy96:
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych >= ':') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych >= ':') goto yy18;
yy97:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy97;
- if(yych != ';') goto yy18;
- ++YYCURSOR;
- {
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy97;
+ if (yych != ';') goto yy18;
+ ++YYCURSOR;
+ {
long id;
*p = YYCURSOR;
@@ -1115,7 +1114,6 @@ yy97:
return 1;
}
- }
}
diff --git a/ext/standard/var_unserializer.c.orig b/ext/standard/var_unserializer.c.orig
index 3d4fcb77d..10af38f27 100644
--- a/ext/standard/var_unserializer.c.orig
+++ b/ext/standard/var_unserializer.c.orig
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.12.1 on Mon Aug 6 21:32:14 2007 */
+/* Generated by re2c 0.13.5 on Sat Oct 4 10:07:18 2008 */
#line 1 "ext/standard/var_unserializer.re"
/*
+----------------------------------------------------------------------+
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: var_unserializer.c,v 1.70.2.4.2.8 2008/03/19 03:00:40 felipe Exp $ */
+/* $Id: var_unserializer.c,v 1.70.2.4.2.10 2008/10/04 13:11:36 felipe Exp $ */
#include "php.h"
#include "ext/standard/php_var.h"
@@ -334,7 +334,7 @@ static inline int object_custom(UNSERIALIZE_PARAMETER, zend_class_entry *ce)
(*p) += 2;
if (datalen < 0 || (*p) + datalen >= max) {
- zend_error(E_WARNING, "Insufficient data for unserializing - %ld required, %ld present", datalen, max - (*p));
+ zend_error(E_WARNING, "Insufficient data for unserializing - %ld required, %ld present", datalen, (long)(max - (*p)));
return 0;
}
@@ -397,7 +397,10 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
+
+#line 402 "ext/standard/var_unserializer.c"
{
+ YYCTYPE yych;
static const unsigned char yybm[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -433,115 +436,111 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
0, 0, 0, 0, 0, 0, 0, 0,
};
-#line 437 "ext/standard/var_unserializer.c"
- {
- YYCTYPE yych;
-
- if((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
- yych = *YYCURSOR;
- switch(yych) {
- case 'C':
- case 'O': goto yy13;
- case 'N': goto yy5;
- case 'R': goto yy2;
- case 'S': goto yy10;
- case 'a': goto yy11;
- case 'b': goto yy6;
- case 'd': goto yy8;
- case 'i': goto yy7;
- case 'o': goto yy12;
- case 'r': goto yy4;
- case 's': goto yy9;
- case '}': goto yy14;
- default: goto yy16;
- }
+ if ((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
+ yych = *YYCURSOR;
+ switch (yych) {
+ case 'C':
+ case 'O': goto yy13;
+ case 'N': goto yy5;
+ case 'R': goto yy2;
+ case 'S': goto yy10;
+ case 'a': goto yy11;
+ case 'b': goto yy6;
+ case 'd': goto yy8;
+ case 'i': goto yy7;
+ case 'o': goto yy12;
+ case 'r': goto yy4;
+ case 's': goto yy9;
+ case '}': goto yy14;
+ default: goto yy16;
+ }
yy2:
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy95;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == ':') goto yy95;
yy3:
#line 698 "ext/standard/var_unserializer.re"
- { return 0; }
-#line 465 "ext/standard/var_unserializer.c"
+ { return 0; }
+#line 464 "ext/standard/var_unserializer.c"
yy4:
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy89;
- goto yy3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == ':') goto yy89;
+ goto yy3;
yy5:
- yych = *++YYCURSOR;
- if(yych == ';') goto yy87;
- goto yy3;
+ yych = *++YYCURSOR;
+ if (yych == ';') goto yy87;
+ goto yy3;
yy6:
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy83;
- goto yy3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == ':') goto yy83;
+ goto yy3;
yy7:
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy77;
- goto yy3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == ':') goto yy77;
+ goto yy3;
yy8:
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy53;
- goto yy3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == ':') goto yy53;
+ goto yy3;
yy9:
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy46;
- goto yy3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == ':') goto yy46;
+ goto yy3;
yy10:
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy39;
- goto yy3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == ':') goto yy39;
+ goto yy3;
yy11:
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy32;
- goto yy3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == ':') goto yy32;
+ goto yy3;
yy12:
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy25;
- goto yy3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == ':') goto yy25;
+ goto yy3;
yy13:
- yych = *(YYMARKER = ++YYCURSOR);
- if(yych == ':') goto yy17;
- goto yy3;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if (yych == ':') goto yy17;
+ goto yy3;
yy14:
- ++YYCURSOR;
+ ++YYCURSOR;
#line 692 "ext/standard/var_unserializer.re"
- {
+ {
/* this is the case where we have less data than planned */
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unexpected end of serialized data");
return 0; /* not sure if it should be 0 or 1 here? */
}
-#line 514 "ext/standard/var_unserializer.c"
+#line 513 "ext/standard/var_unserializer.c"
yy16:
- yych = *++YYCURSOR;
- goto yy3;
+ yych = *++YYCURSOR;
+ goto yy3;
yy17:
- yych = *++YYCURSOR;
- if(yybm[0+yych] & 128) {
- goto yy20;
- }
- if(yych == '+') goto yy19;
+ yych = *++YYCURSOR;
+ if (yybm[0+yych] & 128) {
+ goto yy20;
+ }
+ if (yych == '+') goto yy19;
yy18:
- YYCURSOR = YYMARKER;
- goto yy3;
+ YYCURSOR = YYMARKER;
+ goto yy3;
yy19:
- yych = *++YYCURSOR;
- if(yybm[0+yych] & 128) {
- goto yy20;
- }
- goto yy18;
+ yych = *++YYCURSOR;
+ if (yybm[0+yych] & 128) {
+ goto yy20;
+ }
+ goto yy18;
yy20:
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 128) {
- goto yy20;
- }
- if(yych != ':') goto yy18;
- yych = *++YYCURSOR;
- if(yych != '"') goto yy18;
- ++YYCURSOR;
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
+ if (yybm[0+yych] & 128) {
+ goto yy20;
+ }
+ if (yych != ':') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych != '"') goto yy18;
+ ++YYCURSOR;
#line 580 "ext/standard/var_unserializer.re"
- {
+ {
size_t len, len2, len3, maxlen;
long elements;
char *class_name;
@@ -652,62 +651,62 @@ yy20:
return object_common2(UNSERIALIZE_PASSTHRU, elements);
}
-#line 656 "ext/standard/var_unserializer.c"
+#line 655 "ext/standard/var_unserializer.c"
yy25:
- yych = *++YYCURSOR;
- if(yych <= ',') {
- if(yych != '+') goto yy18;
- } else {
- if(yych <= '-') goto yy26;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy27;
- goto yy18;
- }
+ yych = *++YYCURSOR;
+ if (yych <= ',') {
+ if (yych != '+') goto yy18;
+ } else {
+ if (yych <= '-') goto yy26;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy27;
+ goto yy18;
+ }
yy26:
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych >= ':') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych >= ':') goto yy18;
yy27:
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy27;
- if(yych >= ';') goto yy18;
- yych = *++YYCURSOR;
- if(yych != '"') goto yy18;
- ++YYCURSOR;
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy27;
+ if (yych >= ';') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych != '"') goto yy18;
+ ++YYCURSOR;
#line 572 "ext/standard/var_unserializer.re"
- {
+ {
INIT_PZVAL(*rval);
return object_common2(UNSERIALIZE_PASSTHRU,
object_common1(UNSERIALIZE_PASSTHRU, ZEND_STANDARD_CLASS_DEF_PTR));
}
-#line 689 "ext/standard/var_unserializer.c"
+#line 688 "ext/standard/var_unserializer.c"
yy32:
- yych = *++YYCURSOR;
- if(yych == '+') goto yy33;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy34;
- goto yy18;
+ yych = *++YYCURSOR;
+ if (yych == '+') goto yy33;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy34;
+ goto yy18;
yy33:
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych >= ':') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych >= ':') goto yy18;
yy34:
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy34;
- if(yych >= ';') goto yy18;
- yych = *++YYCURSOR;
- if(yych != '{') goto yy18;
- ++YYCURSOR;
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy34;
+ if (yych >= ';') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych != '{') goto yy18;
+ ++YYCURSOR;
#line 550 "ext/standard/var_unserializer.re"
- {
+ {
long elements = parse_iv(start + 2);
/* use iv() not uiv() in order to check data range */
*p = YYCURSOR;
@@ -728,29 +727,29 @@ yy34:
return finish_nested_data(UNSERIALIZE_PASSTHRU);
}
-#line 732 "ext/standard/var_unserializer.c"
+#line 731 "ext/standard/var_unserializer.c"
yy39:
- yych = *++YYCURSOR;
- if(yych == '+') goto yy40;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy41;
- goto yy18;
+ yych = *++YYCURSOR;
+ if (yych == '+') goto yy40;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy41;
+ goto yy18;
yy40:
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych >= ':') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych >= ':') goto yy18;
yy41:
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy41;
- if(yych >= ';') goto yy18;
- yych = *++YYCURSOR;
- if(yych != '"') goto yy18;
- ++YYCURSOR;
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy41;
+ if (yych >= ';') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych != '"') goto yy18;
+ ++YYCURSOR;
#line 521 "ext/standard/var_unserializer.re"
- {
+ {
size_t len, maxlen;
char *str;
@@ -778,29 +777,29 @@ yy41:
ZVAL_STRINGL(*rval, str, len, 0);
return 1;
}
-#line 782 "ext/standard/var_unserializer.c"
+#line 781 "ext/standard/var_unserializer.c"
yy46:
- yych = *++YYCURSOR;
- if(yych == '+') goto yy47;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy48;
- goto yy18;
+ yych = *++YYCURSOR;
+ if (yych == '+') goto yy47;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy48;
+ goto yy18;
yy47:
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych >= ':') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych >= ':') goto yy18;
yy48:
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy48;
- if(yych >= ';') goto yy18;
- yych = *++YYCURSOR;
- if(yych != '"') goto yy18;
- ++YYCURSOR;
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy48;
+ if (yych >= ';') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych != '"') goto yy18;
+ ++YYCURSOR;
#line 493 "ext/standard/var_unserializer.re"
- {
+ {
size_t len, maxlen;
char *str;
@@ -827,162 +826,162 @@ yy48:
ZVAL_STRINGL(*rval, str, len, 1);
return 1;
}
-#line 831 "ext/standard/var_unserializer.c"
+#line 830 "ext/standard/var_unserializer.c"
yy53:
- yych = *++YYCURSOR;
- if(yych <= '/') {
- if(yych <= ',') {
- if(yych == '+') goto yy57;
- goto yy18;
- } else {
- if(yych <= '-') goto yy55;
- if(yych <= '.') goto yy60;
- goto yy18;
- }
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych <= ',') {
+ if (yych == '+') goto yy57;
+ goto yy18;
} else {
- if(yych <= 'I') {
- if(yych <= '9') goto yy58;
- if(yych <= 'H') goto yy18;
- goto yy56;
- } else {
- if(yych != 'N') goto yy18;
- }
- }
- yych = *++YYCURSOR;
- if(yych == 'A') goto yy76;
- goto yy18;
-yy55:
- yych = *++YYCURSOR;
- if(yych <= '/') {
- if(yych == '.') goto yy60;
+ if (yych <= '-') goto yy55;
+ if (yych <= '.') goto yy60;
goto yy18;
+ }
+ } else {
+ if (yych <= 'I') {
+ if (yych <= '9') goto yy58;
+ if (yych <= 'H') goto yy18;
+ goto yy56;
} else {
- if(yych <= '9') goto yy58;
- if(yych != 'I') goto yy18;
+ if (yych != 'N') goto yy18;
}
-yy56:
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy72;
+ }
+ yych = *++YYCURSOR;
+ if (yych == 'A') goto yy76;
+ goto yy18;
+yy55:
+ yych = *++YYCURSOR;
+ if (yych <= '/') {
+ if (yych == '.') goto yy60;
goto yy18;
+ } else {
+ if (yych <= '9') goto yy58;
+ if (yych != 'I') goto yy18;
+ }
+yy56:
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy72;
+ goto yy18;
yy57:
- yych = *++YYCURSOR;
- if(yych == '.') goto yy60;
- if(yych <= '/') goto yy18;
- if(yych >= ':') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych == '.') goto yy60;
+ if (yych <= '/') goto yy18;
+ if (yych >= ':') goto yy18;
yy58:
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
- yych = *YYCURSOR;
- if(yych <= ':') {
- if(yych <= '.') {
- if(yych <= '-') goto yy18;
- goto yy70;
- } else {
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy58;
- goto yy18;
- }
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
+ yych = *YYCURSOR;
+ if (yych <= ':') {
+ if (yych <= '.') {
+ if (yych <= '-') goto yy18;
+ goto yy70;
} else {
- if(yych <= 'E') {
- if(yych <= ';') goto yy63;
- if(yych <= 'D') goto yy18;
- goto yy65;
- } else {
- if(yych == 'e') goto yy65;
- goto yy18;
- }
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy58;
+ goto yy18;
+ }
+ } else {
+ if (yych <= 'E') {
+ if (yych <= ';') goto yy63;
+ if (yych <= 'D') goto yy18;
+ goto yy65;
+ } else {
+ if (yych == 'e') goto yy65;
+ goto yy18;
}
+ }
yy60:
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych >= ':') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych >= ':') goto yy18;
yy61:
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
- yych = *YYCURSOR;
- if(yych <= ';') {
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy61;
- if(yych <= ':') goto yy18;
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
+ yych = *YYCURSOR;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy61;
+ if (yych <= ':') goto yy18;
+ } else {
+ if (yych <= 'E') {
+ if (yych <= 'D') goto yy18;
+ goto yy65;
} else {
- if(yych <= 'E') {
- if(yych <= 'D') goto yy18;
- goto yy65;
- } else {
- if(yych == 'e') goto yy65;
- goto yy18;
- }
+ if (yych == 'e') goto yy65;
+ goto yy18;
}
+ }
yy63:
- ++YYCURSOR;
+ ++YYCURSOR;
#line 486 "ext/standard/var_unserializer.re"
- {
+ {
*p = YYCURSOR;
INIT_PZVAL(*rval);
ZVAL_DOUBLE(*rval, zend_strtod((const char *)start + 2, NULL));
return 1;
}
-#line 926 "ext/standard/var_unserializer.c"
+#line 925 "ext/standard/var_unserializer.c"
yy65:
- yych = *++YYCURSOR;
- if(yych <= ',') {
- if(yych != '+') goto yy18;
- } else {
- if(yych <= '-') goto yy66;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy67;
- goto yy18;
- }
+ yych = *++YYCURSOR;
+ if (yych <= ',') {
+ if (yych != '+') goto yy18;
+ } else {
+ if (yych <= '-') goto yy66;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy67;
+ goto yy18;
+ }
yy66:
- yych = *++YYCURSOR;
- if(yych <= ',') {
- if(yych == '+') goto yy69;
- goto yy18;
- } else {
- if(yych <= '-') goto yy69;
- if(yych <= '/') goto yy18;
- if(yych >= ':') goto yy18;
- }
-yy67:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy67;
- if(yych == ';') goto yy63;
+ yych = *++YYCURSOR;
+ if (yych <= ',') {
+ if (yych == '+') goto yy69;
goto yy18;
+ } else {
+ if (yych <= '-') goto yy69;
+ if (yych <= '/') goto yy18;
+ if (yych >= ':') goto yy18;
+ }
+yy67:
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy67;
+ if (yych == ';') goto yy63;
+ goto yy18;
yy69:
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy67;
- goto yy18;
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy67;
+ goto yy18;
yy70:
- ++YYCURSOR;
- if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
- yych = *YYCURSOR;
- if(yych <= ';') {
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy70;
- if(yych <= ':') goto yy18;
- goto yy63;
+ ++YYCURSOR;
+ if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
+ yych = *YYCURSOR;
+ if (yych <= ';') {
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy70;
+ if (yych <= ':') goto yy18;
+ goto yy63;
+ } else {
+ if (yych <= 'E') {
+ if (yych <= 'D') goto yy18;
+ goto yy65;
} else {
- if(yych <= 'E') {
- if(yych <= 'D') goto yy18;
- goto yy65;
- } else {
- if(yych == 'e') goto yy65;
- goto yy18;
- }
+ if (yych == 'e') goto yy65;
+ goto yy18;
}
+ }
yy72:
- yych = *++YYCURSOR;
- if(yych != 'F') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych != 'F') goto yy18;
yy73:
- yych = *++YYCURSOR;
- if(yych != ';') goto yy18;
- ++YYCURSOR;
+ yych = *++YYCURSOR;
+ if (yych != ';') goto yy18;
+ ++YYCURSOR;
#line 471 "ext/standard/var_unserializer.re"
- {
+ {
*p = YYCURSOR;
INIT_PZVAL(*rval);
@@ -996,90 +995,90 @@ yy73:
return 1;
}
-#line 1000 "ext/standard/var_unserializer.c"
+#line 999 "ext/standard/var_unserializer.c"
yy76:
- yych = *++YYCURSOR;
- if(yych == 'N') goto yy73;
- goto yy18;
+ yych = *++YYCURSOR;
+ if (yych == 'N') goto yy73;
+ goto yy18;
yy77:
- yych = *++YYCURSOR;
- if(yych <= ',') {
- if(yych != '+') goto yy18;
- } else {
- if(yych <= '-') goto yy78;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy79;
- goto yy18;
- }
+ yych = *++YYCURSOR;
+ if (yych <= ',') {
+ if (yych != '+') goto yy18;
+ } else {
+ if (yych <= '-') goto yy78;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy79;
+ goto yy18;
+ }
yy78:
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych >= ':') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych >= ':') goto yy18;
yy79:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy79;
- if(yych != ';') goto yy18;
- ++YYCURSOR;
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy79;
+ if (yych != ';') goto yy18;
+ ++YYCURSOR;
#line 464 "ext/standard/var_unserializer.re"
- {
+ {
*p = YYCURSOR;
INIT_PZVAL(*rval);
ZVAL_LONG(*rval, parse_iv(start + 2));
return 1;
}
-#line 1034 "ext/standard/var_unserializer.c"
+#line 1033 "ext/standard/var_unserializer.c"
yy83:
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych >= '2') goto yy18;
- yych = *++YYCURSOR;
- if(yych != ';') goto yy18;
- ++YYCURSOR;
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych >= '2') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych != ';') goto yy18;
+ ++YYCURSOR;
#line 457 "ext/standard/var_unserializer.re"
- {
+ {
*p = YYCURSOR;
INIT_PZVAL(*rval);
ZVAL_BOOL(*rval, parse_iv(start + 2));
return 1;
}
-#line 1049 "ext/standard/var_unserializer.c"
+#line 1048 "ext/standard/var_unserializer.c"
yy87:
- ++YYCURSOR;
+ ++YYCURSOR;
#line 450 "ext/standard/var_unserializer.re"
- {
+ {
*p = YYCURSOR;
INIT_PZVAL(*rval);
ZVAL_NULL(*rval);
return 1;
}
-#line 1059 "ext/standard/var_unserializer.c"
+#line 1058 "ext/standard/var_unserializer.c"
yy89:
- yych = *++YYCURSOR;
- if(yych <= ',') {
- if(yych != '+') goto yy18;
- } else {
- if(yych <= '-') goto yy90;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy91;
- goto yy18;
- }
+ yych = *++YYCURSOR;
+ if (yych <= ',') {
+ if (yych != '+') goto yy18;
+ } else {
+ if (yych <= '-') goto yy90;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy91;
+ goto yy18;
+ }
yy90:
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych >= ':') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych >= ':') goto yy18;
yy91:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy91;
- if(yych != ';') goto yy18;
- ++YYCURSOR;
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy91;
+ if (yych != ';') goto yy18;
+ ++YYCURSOR;
#line 427 "ext/standard/var_unserializer.re"
- {
+ {
long id;
*p = YYCURSOR;
@@ -1101,31 +1100,31 @@ yy91:
return 1;
}
-#line 1105 "ext/standard/var_unserializer.c"
+#line 1104 "ext/standard/var_unserializer.c"
yy95:
- yych = *++YYCURSOR;
- if(yych <= ',') {
- if(yych != '+') goto yy18;
- } else {
- if(yych <= '-') goto yy96;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy97;
- goto yy18;
- }
+ yych = *++YYCURSOR;
+ if (yych <= ',') {
+ if (yych != '+') goto yy18;
+ } else {
+ if (yych <= '-') goto yy96;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy97;
+ goto yy18;
+ }
yy96:
- yych = *++YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych >= ':') goto yy18;
+ yych = *++YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych >= ':') goto yy18;
yy97:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yych <= '/') goto yy18;
- if(yych <= '9') goto yy97;
- if(yych != ';') goto yy18;
- ++YYCURSOR;
+ ++YYCURSOR;
+ if (YYLIMIT <= YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if (yych <= '/') goto yy18;
+ if (yych <= '9') goto yy97;
+ if (yych != ';') goto yy18;
+ ++YYCURSOR;
#line 406 "ext/standard/var_unserializer.re"
- {
+ {
long id;
*p = YYCURSOR;
@@ -1145,8 +1144,7 @@ yy97:
return 1;
}
-#line 1149 "ext/standard/var_unserializer.c"
- }
+#line 1148 "ext/standard/var_unserializer.c"
}
#line 700 "ext/standard/var_unserializer.re"
diff --git a/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re
index ea8ce20d3..f478fa48d 100644
--- a/ext/standard/var_unserializer.re
+++ b/ext/standard/var_unserializer.re
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: var_unserializer.re,v 1.52.2.2.2.7 2008/03/19 03:00:40 felipe Exp $ */
+/* $Id: var_unserializer.re,v 1.52.2.2.2.8 2008/10/04 13:11:36 felipe Exp $ */
#include "php.h"
#include "ext/standard/php_var.h"
@@ -338,7 +338,7 @@ static inline int object_custom(UNSERIALIZE_PARAMETER, zend_class_entry *ce)
(*p) += 2;
if (datalen < 0 || (*p) + datalen >= max) {
- zend_error(E_WARNING, "Insufficient data for unserializing - %ld required, %ld present", datalen, max - (*p));
+ zend_error(E_WARNING, "Insufficient data for unserializing - %ld required, %ld present", datalen, (long)(max - (*p)));
return 0;
}
diff --git a/ext/standard/versioning.c b/ext/standard/versioning.c
index 7775e0249..59958f5fd 100644
--- a/ext/standard/versioning.c
+++ b/ext/standard/versioning.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: versioning.c,v 1.19.2.1.2.4 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: versioning.c,v 1.19.2.1.2.5 2008/12/31 11:17:46 sebastian Exp $ */
#include <stdio.h>
#include <sys/types.h>
diff --git a/ext/sybase/php_sybase_db.c b/ext/sybase/php_sybase_db.c
index 83711dd24..bd2335728 100644
--- a/ext/sybase/php_sybase_db.c
+++ b/ext/sybase/php_sybase_db.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -20,7 +20,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_sybase_db.c,v 1.66.2.5.2.9 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_sybase_db.c,v 1.66.2.5.2.10 2008/12/31 11:17:46 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
diff --git a/ext/sybase/php_sybase_db.h b/ext/sybase/php_sybase_db.h
index f7ba114ce..d3a770fd6 100644
--- a/ext/sybase/php_sybase_db.h
+++ b/ext/sybase/php_sybase_db.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_sybase_db.h,v 1.12.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_sybase_db.h,v 1.12.2.1.2.3 2008/12/31 11:17:46 sebastian Exp $ */
#ifndef PHP_SYBASE_DB_H
#define PHP_SYBASE_DB_H
diff --git a/ext/sybase_ct/php_sybase_ct.c b/ext/sybase_ct/php_sybase_ct.c
index 820170db7..645b6f44d 100644
--- a/ext/sybase_ct/php_sybase_ct.c
+++ b/ext/sybase_ct/php_sybase_ct.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_sybase_ct.c,v 1.103.2.5.2.14 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_sybase_ct.c,v 1.103.2.5.2.17 2008/12/31 11:17:46 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
@@ -138,6 +138,21 @@ static int _clean_invalid_results(zend_rsrc_list_entry *le TSRMLS_DC)
#define efree_n(x) { efree(x); x = NULL; }
#define efree_if(x) if (x) efree_n(x)
+#ifdef PHP_SYBASE_DEBUG
+#define FREE_SYBASE_RESULT(result) \
+ if (result) { \
+ fprintf(stderr, "_free_sybase_result(%p) called from line #%d\n", result, __LINE__); \
+ fflush(stderr); \
+ _free_sybase_result(result); \
+ result = NULL; \
+ }
+#else
+#define FREE_SYBASE_RESULT(result) \
+ if (result) { \
+ _free_sybase_result(result); \
+ result = NULL; \
+ }
+#endif
static void _free_sybase_result(sybase_result *result)
{
int i, j;
@@ -191,7 +206,7 @@ static void php_free_sybase_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
php_sybase_finish_results(result TSRMLS_CC);
}
- _free_sybase_result(result);
+ FREE_SYBASE_RESULT(result);
}
static void _close_sybase_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
@@ -1109,8 +1124,6 @@ static int php_sybase_finish_results(sybase_result *result TSRMLS_DC)
case CS_CANCELED:
default:
- _free_sybase_result(result);
- result = NULL;
retcode = CS_FAIL;
break;
}
@@ -1143,7 +1156,7 @@ static int php_sybase_fetch_result_row (sybase_result *result, int numrows)
}
if (numrows!=-1) numrows+= result->num_rows;
- while ((retcode=ct_fetch(result->sybase_ptr->cmd, CS_UNUSED, CS_UNUSED, CS_UNUSED, NULL))==CS_SUCCEED) {
+ while ((retcode=ct_fetch(result->sybase_ptr->cmd, CS_UNUSED, CS_UNUSED, CS_UNUSED, NULL))==CS_SUCCEED || retcode == CS_ROW_FAIL) {
result->num_rows++;
i= result->store ? result->num_rows- 1 : 0;
if (i >= result->blocks_initialized*SYBASE_ROWS_BLOCK) {
@@ -1216,7 +1229,7 @@ static int php_sybase_fetch_result_row (sybase_result *result, int numrows)
break;
default:
- _free_sybase_result(result);
+ FREE_SYBASE_RESULT(result);
result = NULL;
retcode = CS_FAIL; /* Just to be sure */
break;
@@ -1425,17 +1438,9 @@ static void php_sybase_query (INTERNAL_FUNCTION_PARAMETERS, int buffered)
INIT_PZVAL(tmp);
ZEND_FETCH_RESOURCE(result, sybase_result *, &tmp, -1, "Sybase result", le_result);
- /* Causes the following segfault:
- Program received signal SIGSEGV, Segmentation fault.
- 0x8144380 in _efree (ptr=0x81fe024, __zend_filename=0x81841a0 "php4/ext/sybase_ct/php_sybase_ct.c",
- __zend_lineno=946, __zend_orig_filename=0x0, __zend_orig_lineno=0) at php4/Zend/zend_alloc.c:229
- php4/Zend/zend_alloc.c:229:7284:beg:0x8144380
- */
- #if O_TIMM
if (result) {
php_sybase_finish_results(result TSRMLS_CC);
}
- #endif
zval_ptr_dtor(&tmp);
zend_list_delete(sybase_ptr->active_result_index);
@@ -1590,9 +1595,7 @@ static void php_sybase_query (INTERNAL_FUNCTION_PARAMETERS, int buffered)
/* Retry deadlocks up until deadlock_retry_count times */
if (sybase_ptr->deadlock && SybCtG(deadlock_retry_count) != -1 && ++deadlock_count > SybCtG(deadlock_retry_count)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sybase: Retried deadlock %d times [max: %ld], giving up", deadlock_count- 1, SybCtG(deadlock_retry_count));
- if (result != NULL) {
- _free_sybase_result(result);
- }
+ FREE_SYBASE_RESULT(result);
break;
}
@@ -1611,9 +1614,7 @@ static void php_sybase_query (INTERNAL_FUNCTION_PARAMETERS, int buffered)
* optimization, we could try not to fetch results in known
* deadlock conditions, but deadlock is (should be) rare.
*/
- if (result != NULL) {
- _free_sybase_result(result);
- }
+ FREE_SYBASE_RESULT(result);
}
if (status == Q_SUCCESS) {
@@ -1621,9 +1622,7 @@ static void php_sybase_query (INTERNAL_FUNCTION_PARAMETERS, int buffered)
}
if (status == Q_FAILURE) {
- if (result != NULL) {
- _free_sybase_result(result);
- }
+ FREE_SYBASE_RESULT(result);
RETURN_FALSE;
}
diff --git a/ext/sybase_ct/php_sybase_ct.h b/ext/sybase_ct/php_sybase_ct.h
index 8260ce5fc..3fe22a132 100644
--- a/ext/sybase_ct/php_sybase_ct.h
+++ b/ext/sybase_ct/php_sybase_ct.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_sybase_ct.h,v 1.19.2.2.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_sybase_ct.h,v 1.19.2.2.2.3 2008/12/31 11:17:46 sebastian Exp $ */
#ifndef PHP_SYBASE_CT_H
#define PHP_SYBASE_CT_H
diff --git a/ext/sybase_ct/tests/bug29064.phpt b/ext/sybase_ct/tests/bug29064.phpt
index 97596fff2..a96d88288 100644
--- a/ext/sybase_ct/tests/bug29064.phpt
+++ b/ext/sybase_ct/tests/bug29064.phpt
@@ -6,7 +6,7 @@ Sybase-CT bug #29064 (Exact numeric/decimal/money datatypes lose precision)
<?php
/* This file is part of PHP test framework for ext/sybase_ct
*
- * $Id: bug29064.phpt,v 1.1 2004/07/11 16:57:24 thekid Exp $
+ * $Id: bug29064.phpt,v 1.1.6.1 2008/11/08 14:24:55 thekid Exp $
*/
require('test.inc');
@@ -112,9 +112,9 @@ array(2) {
["test_tinyint"]=>
int(123)
["test_real"]=>
- string(16) "123456789.123457"
+ string(18) "123456789.12345679"
["test_double"]=>
- string(16) "123456789.123457"
+ string(18) "123456789.12345679"
}
[1]=>
array(10) {
@@ -135,9 +135,9 @@ array(2) {
["test_tinyint"]=>
int(255)
["test_real"]=>
- string(17) "-123456789.123457"
+ string(19) "-123456789.12345679"
["test_double"]=>
- string(17) "-123456789.123457"
+ string(19) "-123456789.12345679"
}
}
bool(true)
diff --git a/ext/sybase_ct/tests/bug30312.phpt b/ext/sybase_ct/tests/bug30312.phpt
index c71a39e86..19dda3dbe 100644
--- a/ext/sybase_ct/tests/bug30312.phpt
+++ b/ext/sybase_ct/tests/bug30312.phpt
@@ -6,7 +6,7 @@ Sybase-CT bug #30312 (sybase_unbuffered_query calls)
<?php
/* This file is part of PHP test framework for ext/sybase_ct
*
- * $Id: bug30312.phpt,v 1.1.4.1 2007/03/14 11:46:06 thekid Exp $
+ * $Id: bug30312.phpt,v 1.1.4.2 2008/11/08 14:24:38 thekid Exp $
*/
require('test.inc');
@@ -14,14 +14,14 @@ Sybase-CT bug #30312 (sybase_unbuffered_query calls)
$db= sybase_connect_ex();
- $query= sybase_unbuffered_query('select getdate()');
+ $query= sybase_unbuffered_query('select datepart(yy, getdate())');
$array= sybase_fetch_array($query);
var_dump($array[0]);
- $query= sybase_unbuffered_query('select getdate()');
+ $query= sybase_unbuffered_query('select datepart(yy, getdate())');
$array= sybase_fetch_array($query);
var_dump($array[0]);
?>
--EXPECTF--
-string(%d) "%s %d %d %d:%d%s"
-string(%d) "%s %d %d %d:%d%s"
+int(%d)
+int(%d)
diff --git a/ext/sybase_ct/tests/skipif.inc b/ext/sybase_ct/tests/skipif.inc
index ac5fa2fe5..a2fb163f9 100644
--- a/ext/sybase_ct/tests/skipif.inc
+++ b/ext/sybase_ct/tests/skipif.inc
@@ -1,8 +1,13 @@
<?php
/* This file is part of PHP test framework for ext/sybase_ct
*
- * $Id: skipif.inc,v 1.2 2004/11/22 15:15:50 dmitry Exp $
+ * $Id: skipif.inc,v 1.2.4.1 2008/11/08 15:39:32 felipe Exp $
*/
+ require 'test.inc';
+
if (!extension_loaded('sybase_ct')) die('skip Sybase-CT extension not loaded');
+
+ sybase_min_server_severity(11);
+ if (!@sybase_connect(HOST, USER, PASSWORD)) die('skip Unable to connect');
?>
diff --git a/ext/sybase_ct/tests/test.inc b/ext/sybase_ct/tests/test.inc
index f5e4465a6..ca99b5e8b 100644
--- a/ext/sybase_ct/tests/test.inc
+++ b/ext/sybase_ct/tests/test.inc
@@ -1,13 +1,13 @@
<?php
/* This file is part of PHP test framework for ext/sybase_ct
*
- * $Id: test.inc,v 1.4.6.3 2007/05/22 11:36:55 thekid Exp $
+ * $Id: test.inc,v 1.4.6.4 2008/11/08 11:59:57 thekid Exp $
*/
// Change if needed
- define('HOST', '****');
- define('USER', '****');
- define('PASSWORD', '****');
+ define('HOST', getenv('PHP_SYBASE_HOST'));
+ define('USER', getenv('PHP_SYBASE_USER'));
+ define('PASSWORD', getenv('PHP_SYBASE_PASS'));
define('TEMPDB', 'tempdb');
// {{{ bool sybase_msg_handler(int msgnumber, int severity, int state, int line, string text)
diff --git a/ext/sybase_ct/tests/test_appname.phpt b/ext/sybase_ct/tests/test_appname.phpt
index d409ae222..1f1c6b9b0 100644
--- a/ext/sybase_ct/tests/test_appname.phpt
+++ b/ext/sybase_ct/tests/test_appname.phpt
@@ -6,7 +6,7 @@ Sybase-CT application name
<?php
/* This file is part of PHP test framework for ext/sybase_ct
*
- * $Id: test_appname.phpt,v 1.2 2005/02/06 12:59:03 thekid Exp $
+ * $Id: test_appname.phpt,v 1.2.4.1 2008/11/08 12:01:10 thekid Exp $
*/
require('test.inc');
@@ -35,7 +35,6 @@ Sybase-CT application name
);
var_dump(
- $r,
compare_string($program_name, $r[0]['program_name']),
compare_string($hostname, $r[0]['hostname'])
);
@@ -52,14 +51,5 @@ Sybase-CT application name
where
program_name = "phpt_test"
<<< Return: resource
-array(1) {
- [0]=>
- array(2) {
- ["hostname"]=>
- string(10) "php.net%s"
- ["program_name"]=>
- string(16) "phpt_test%s"
- }
-}
bool(true)
bool(true)
diff --git a/ext/sybase_ct/tests/test_unbuffered_no_full_fetch.phpt b/ext/sybase_ct/tests/test_unbuffered_no_full_fetch.phpt
new file mode 100644
index 000000000..c38bbf822
--- /dev/null
+++ b/ext/sybase_ct/tests/test_unbuffered_no_full_fetch.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Sybase-CT unbuffered query without full fetching
+--SKIPIF--
+<?php require('skipif.inc'); ?>
+--FILE--
+<?php
+/* This file is part of PHP test framework for ext/sybase_ct
+ *
+ * $Id: test_unbuffered_no_full_fetch.phpt,v 1.1.4.2 2008/11/08 14:28:26 thekid Exp $
+ */
+
+ require('test.inc');
+
+ $db= sybase_connect_ex();
+ var_dump($db);
+
+ // Fetch #1
+ $q= sybase_unbuffered_query('select name from master..systypes', $db);
+ var_dump($q, key(sybase_fetch_assoc($q)));
+
+ // Fetch #2 - without having fetched all rows from previous query
+ $q= sybase_unbuffered_query('select name from master..systypes', $db);
+ var_dump($q, key(sybase_fetch_assoc($q)));
+
+ // Close - without having fetched all rows from previous query
+ sybase_close($db);
+ echo 'CLOSED';
+?>
+--EXPECTF--
+resource(%d) of type (sybase-ct link)
+resource(%d) of type (sybase-ct result)
+string(4) "name"
+
+Notice: sybase_unbuffered_query(): called without first fetching all rows from a previous unbuffered query in %s on line %d
+resource(%d) of type (sybase-ct result)
+string(4) "name"
+CLOSED
diff --git a/ext/sysvmsg/php_sysvmsg.h b/ext/sysvmsg/php_sysvmsg.h
index 251a008d2..75d3a3570 100644
--- a/ext/sysvmsg/php_sysvmsg.h
+++ b/ext/sysvmsg/php_sysvmsg.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_sysvmsg.h,v 1.6.2.1.2.3 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_sysvmsg.h,v 1.6.2.1.2.4 2008/12/31 11:17:46 sebastian Exp $ */
#ifndef PHP_SYSVMSG_H
#define PHP_SYSVMSG_H
diff --git a/ext/sysvmsg/sysvmsg.c b/ext/sysvmsg/sysvmsg.c
index 556d8d958..c55f1d08a 100644
--- a/ext/sysvmsg/sysvmsg.c
+++ b/ext/sysvmsg/sysvmsg.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: sysvmsg.c,v 1.20.2.3.2.7 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: sysvmsg.c,v 1.20.2.3.2.8 2008/12/31 11:17:46 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -125,7 +125,7 @@ PHP_MINFO_FUNCTION(sysvmsg)
{
php_info_print_table_start();
php_info_print_table_row(2, "sysvmsg support", "enabled");
- php_info_print_table_row(2, "Revision", "$Revision: 1.20.2.3.2.7 $");
+ php_info_print_table_row(2, "Revision", "$Revision: 1.20.2.3.2.8 $");
php_info_print_table_end();
}
/* }}} */
diff --git a/ext/sysvsem/php_sysvsem.h b/ext/sysvsem/php_sysvsem.h
index c4dc752db..e96b85abc 100644
--- a/ext/sysvsem/php_sysvsem.h
+++ b/ext/sysvsem/php_sysvsem.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_sysvsem.h,v 1.16.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_sysvsem.h,v 1.16.2.1.2.3 2008/12/31 11:17:46 sebastian Exp $ */
#ifndef PHP_SYSVSEM_H
#define PHP_SYSVSEM_H
diff --git a/ext/sysvsem/sysvsem.c b/ext/sysvsem/sysvsem.c
index aa0c9d7a6..1bd686580 100644
--- a/ext/sysvsem/sysvsem.c
+++ b/ext/sysvsem/sysvsem.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: sysvsem.c,v 1.51.2.3.2.3 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: sysvsem.c,v 1.51.2.3.2.4 2008/12/31 11:17:46 sebastian Exp $ */
/* Latest update build anc tested on Linux 2.2.14
*
diff --git a/ext/sysvshm/php_sysvshm.h b/ext/sysvshm/php_sysvshm.h
index a15755da7..a683d28f2 100644
--- a/ext/sysvshm/php_sysvshm.h
+++ b/ext/sysvshm/php_sysvshm.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_sysvshm.h,v 1.17.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+/* $Id: php_sysvshm.h,v 1.17.2.1.2.3 2008/12/31 11:17:46 sebastian Exp $ */
#ifndef PHP_SYSVSHM_H
#define PHP_SYSVSHM_H
diff --git a/ext/sysvshm/sysvshm.c b/ext/sysvshm/sysvshm.c
index b38fd4e52..25dac42ff 100644
--- a/ext/sysvshm/sysvshm.c
+++ b/ext/sysvshm/sysvshm.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: sysvshm.c,v 1.70.2.2.2.6 2007/12/31 07:20:14 sebastian Exp $ */
+/* $Id: sysvshm.c,v 1.70.2.2.2.7 2008/12/31 11:17:46 sebastian Exp $ */
/* This has been built and tested on Linux 2.2.14
*
diff --git a/ext/tidy/php_tidy.h b/ext/tidy/php_tidy.h
index 7d2bcb19e..c0aef8429 100644
--- a/ext/tidy/php_tidy.h
+++ b/ext/tidy/php_tidy.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_tidy.h,v 1.26.2.1.2.6 2007/12/31 07:20:14 sebastian Exp $ */
+/* $Id: php_tidy.h,v 1.26.2.1.2.7 2008/12/31 11:17:46 sebastian Exp $ */
#ifndef PHP_TIDY_H
#define PHP_TIDY_H
diff --git a/ext/tidy/tests/019.phpt b/ext/tidy/tests/019.phpt
index 9d2c693cd..91bbc016e 100644
--- a/ext/tidy/tests/019.phpt
+++ b/ext/tidy/tests/019.phpt
@@ -34,5 +34,9 @@ Warning: tidy_repair_string(): Could not set encoding '1' in %s on line %d
Warning: tidy_repair_string() expects parameter 1 to be string, array given in %s on line %d
+Warning: tidy_repair_file(): Filename cannot be empty in %s on line %d
+
+Warning: tidy_repair_file(): Filename cannot be empty in %s on line %d
+
Warning: tidy_repair_file() expects parameter 1 to be string, array given in %s on line %d
Done
diff --git a/ext/tidy/tests/022.phpt b/ext/tidy/tests/022.phpt
index 9d2c693cd..91bbc016e 100644
--- a/ext/tidy/tests/022.phpt
+++ b/ext/tidy/tests/022.phpt
@@ -34,5 +34,9 @@ Warning: tidy_repair_string(): Could not set encoding '1' in %s on line %d
Warning: tidy_repair_string() expects parameter 1 to be string, array given in %s on line %d
+Warning: tidy_repair_file(): Filename cannot be empty in %s on line %d
+
+Warning: tidy_repair_file(): Filename cannot be empty in %s on line %d
+
Warning: tidy_repair_file() expects parameter 1 to be string, array given in %s on line %d
Done
diff --git a/ext/tidy/tidy.c b/ext/tidy/tidy.c
index ede59f0c6..2b75b69e8 100644
--- a/ext/tidy/tidy.c
+++ b/ext/tidy/tidy.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: tidy.c,v 1.66.2.8.2.25 2007/12/31 07:20:14 sebastian Exp $ */
+/* $Id: tidy.c,v 1.66.2.8.2.26 2008/12/31 11:17:46 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -998,7 +998,7 @@ static PHP_MINFO_FUNCTION(tidy)
php_info_print_table_start();
php_info_print_table_header(2, "Tidy support", "enabled");
php_info_print_table_row(2, "libTidy Release", (char *)tidyReleaseDate());
- php_info_print_table_row(2, "Extension Version", PHP_TIDY_MODULE_VERSION " ($Id: tidy.c,v 1.66.2.8.2.25 2007/12/31 07:20:14 sebastian Exp $)");
+ php_info_print_table_row(2, "Extension Version", PHP_TIDY_MODULE_VERSION " ($Id: tidy.c,v 1.66.2.8.2.26 2008/12/31 11:17:46 sebastian Exp $)");
php_info_print_table_end();
DISPLAY_INI_ENTRIES();
diff --git a/ext/tokenizer/php_tokenizer.h b/ext/tokenizer/php_tokenizer.h
index 9e19a7a87..f8f54fb5b 100644
--- a/ext/tokenizer/php_tokenizer.h
+++ b/ext/tokenizer/php_tokenizer.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_tokenizer.h,v 1.9.2.1.2.5 2007/12/31 07:20:14 sebastian Exp $ */
+/* $Id: php_tokenizer.h,v 1.9.2.1.2.6 2008/12/31 11:17:46 sebastian Exp $ */
#ifndef PHP_TOKENIZER_H
#define PHP_TOKENIZER_H
diff --git a/ext/tokenizer/tokenizer.c b/ext/tokenizer/tokenizer.c
index 7134027e1..4748abff1 100644
--- a/ext/tokenizer/tokenizer.c
+++ b/ext/tokenizer/tokenizer.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: tokenizer.c,v 1.31.2.5.2.8 2007/12/31 07:20:14 sebastian Exp $ */
+/* $Id: tokenizer.c,v 1.31.2.5.2.9 2008/12/31 11:17:46 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/tokenizer/tokenizer_data.c b/ext/tokenizer/tokenizer_data.c
index 2715f4f27..ddfa7198f 100644
--- a/ext/tokenizer/tokenizer_data.c
+++ b/ext/tokenizer/tokenizer_data.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: tokenizer_data.c,v 1.1.2.3 2007/12/31 07:20:14 sebastian Exp $ */
+/* $Id: tokenizer_data.c,v 1.1.2.4 2008/12/31 11:17:46 sebastian Exp $ */
/*
DO NOT EDIT THIS FILE!
diff --git a/ext/wddx/php_wddx.h b/ext/wddx/php_wddx.h
index 054a43e22..0720b5c94 100644
--- a/ext/wddx/php_wddx.h
+++ b/ext/wddx/php_wddx.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_wddx.h,v 1.18.2.1.2.2 2007/12/31 07:20:14 sebastian Exp $ */
+/* $Id: php_wddx.h,v 1.18.2.1.2.3 2008/12/31 11:17:46 sebastian Exp $ */
#ifndef PHP_WDDX_H
#define PHP_WDDX_H
diff --git a/ext/wddx/php_wddx_api.h b/ext/wddx/php_wddx_api.h
index 7ef2a0d18..6e46da9d2 100644
--- a/ext/wddx/php_wddx_api.h
+++ b/ext/wddx/php_wddx_api.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_wddx_api.h,v 1.23.2.3.2.2 2007/12/31 07:20:14 sebastian Exp $ */
+/* $Id: php_wddx_api.h,v 1.23.2.3.2.3 2008/12/31 11:17:46 sebastian Exp $ */
#ifndef PHP_WDDX_API_H
#define PHP_WDDX_API_H
diff --git a/ext/wddx/tests/002.phpt b/ext/wddx/tests/002.phpt
new file mode 100644
index 000000000..692bfa85c
--- /dev/null
+++ b/ext/wddx/tests/002.phpt
@@ -0,0 +1,21 @@
+--TEST--
+wddx packet construction using wddx ressource
+--SKIPIF--
+<?php if (!extension_loaded("wddx")) print "skip"; ?>
+--INI--
+precision=14
+--FILE--
+<?php
+ $pkt = wddx_packet_start('TEST comment');
+
+ $var1 = NULL;
+ $var2 = 'some string';
+ $var3 = 756;
+ $var4 = true;
+
+ // add vars to packet
+ wddx_add_vars($pkt, 'var1', 'var2', array('var3', 'var4'));
+ echo wddx_packet_end($pkt);
+?>
+--EXPECT--
+<wddxPacket version='1.0'><header><comment>TEST comment</comment></header><data><struct><var name='var1'><null/></var><var name='var2'><string>some string</string></var><var name='var3'><number>756</number></var><var name='var4'><boolean value='true'/></var></struct></data></wddxPacket>
diff --git a/ext/wddx/tests/003.phpt b/ext/wddx/tests/003.phpt
new file mode 100644
index 000000000..3240e43e9
--- /dev/null
+++ b/ext/wddx/tests/003.phpt
@@ -0,0 +1,26 @@
+--TEST--
+wddx deserialize from ressource
+--SKIPIF--
+<?php if (!extension_loaded("wddx")) print "skip"; ?>
+--INI--
+precision=14
+--FILE--
+<?php
+ $path = dirname(__FILE__);
+ $fp = fopen("php://temp", 'w+');
+ fputs($fp, "<wddxPacket version='1.0'><header><comment>TEST comment</comment></header><data><struct><var name='var1'><null/></var><var name='var2'><string>some string</string></var><var name='var3'><number>756</number></var><var name='var4'><boolean value='true'/></var></struct></data></wddxPacket>");
+ rewind($fp);
+ var_dump(wddx_deserialize($fp));
+ fclose($fp);
+?>
+--EXPECT--
+array(4) {
+ ["var1"]=>
+ NULL
+ ["var2"]=>
+ string(11) "some string"
+ ["var3"]=>
+ int(756)
+ ["var4"]=>
+ bool(true)
+}
diff --git a/ext/wddx/tests/004.phpt b/ext/wddx/tests/004.phpt
new file mode 100644
index 000000000..ae5a6b4bd
--- /dev/null
+++ b/ext/wddx/tests/004.phpt
@@ -0,0 +1,63 @@
+--TEST--
+wddx session serializer handler (serialize)
+--SKIPIF--
+<?php
+ if (!extension_loaded("wddx")) die("skip Wddx module not loaded");
+ if (!extension_loaded('session')) die('skip Session module not enabled');
+
+ // following test code stolen from ext/session/skipif.inc
+ $save_path = ini_get("session.save_path");
+ if ($save_path) {
+ if (!file_exists($save_path)) {
+ die("skip Session save_path doesn't exist");
+ }
+
+ if ($save_path && !@is_writable($save_path)) {
+ if (($p = strpos($save_path, ';')) !== false) {
+ $save_path = substr($save_path, ++$p);
+ }
+ if (!@is_writable($save_path)) {
+ die("skip\n");
+ }
+ }
+ }
+?>
+--INI--
+precision=14
+session.serialize_handler=wddx
+session.use_cookies=0
+session.cache_limiter=
+session.save_handler=files
+--FILE--
+<?php
+ class foo {
+ public $bar = "ok";
+ public $invisible = 'you don\'t see me!';
+
+ function method() { $this->yes = "done"; }
+
+ public function __sleep() { return array('bar', 'yes'); }
+ }
+
+ session_start();
+
+ $_SESSION['data'] = array(
+ 'test1' => true,
+ 'test2' => 'some string',
+ 'test3' => 654321,
+ 'test4' => array(
+ 'some string',
+ true,
+ null
+ ),
+ );
+
+ $_SESSION['class'] = new foo();
+ $_SESSION['class']->method();
+
+ var_dump(session_encode());
+
+ session_destroy();
+?>
+--EXPECT--
+string(550) "<wddxPacket version='1.0'><header/><data><struct><var name='data'><struct><var name='test1'><boolean value='true'/></var><var name='test2'><string>some string</string></var><var name='test3'><number>654321</number></var><var name='test4'><array length='3'><string>some string</string><boolean value='true'/><null/></array></var></struct></var><var name='class'><struct><var name='php_class_name'><string>foo</string></var><var name='bar'><string>ok</string></var><var name='yes'><string>done</string></var></struct></var></struct></data></wddxPacket>"
diff --git a/ext/wddx/tests/005.phpt b/ext/wddx/tests/005.phpt
new file mode 100644
index 000000000..99e7a9e31
--- /dev/null
+++ b/ext/wddx/tests/005.phpt
@@ -0,0 +1,74 @@
+--TEST--
+wddx session serializer handler (deserialize)
+--SKIPIF--
+<?php
+ if (!extension_loaded("wddx")) die("skip Wddx module not loaded");
+ if (!extension_loaded('session')) die('skip Session module not enabled');
+
+ // following test code stolen from ext/session/skipif.inc
+ $save_path = ini_get("session.save_path");
+ if ($save_path) {
+ if (!file_exists($save_path)) {
+ die("skip Session save_path doesn't exist");
+ }
+
+ if ($save_path && !@is_writable($save_path)) {
+ if (($p = strpos($save_path, ';')) !== false) {
+ $save_path = substr($save_path, ++$p);
+ }
+ if (!@is_writable($save_path)) {
+ die("skip\n");
+ }
+ }
+ }
+?>
+--INI--
+precision=14
+session.serialize_handler=wddx
+session.use_cookies=0
+session.cache_limiter=
+session.save_handler=files
+--FILE--
+<?php
+ class foo {
+ public $bar = "ok";
+
+ function method() { $this->yes = "done"; }
+ }
+
+ session_start();
+
+ session_decode("<wddxPacket version='1.0'><header/><data><struct><var name='data'><struct><var name='test1'><boolean value='true'/></var><var name='test2'><string>some string</string></var><var name='test3'><number>654321</number></var><var name='test4'><array length='3'><string>some string</string><boolean value='true'/><null/></array></var></struct></var><var name='class'><struct><var name='php_class_name'><string>foo</string></var><var name='bar'><string>ok</string></var><var name='yes'><string>done</string></var></struct></var></struct></data></wddxPacket>");
+
+ var_dump($_SESSION);
+
+ session_destroy();
+?>
+--EXPECT--
+array(2) {
+ ["data"]=>
+ array(4) {
+ ["test1"]=>
+ bool(true)
+ ["test2"]=>
+ string(11) "some string"
+ ["test3"]=>
+ int(654321)
+ ["test4"]=>
+ array(3) {
+ [0]=>
+ string(11) "some string"
+ [1]=>
+ bool(true)
+ [2]=>
+ NULL
+ }
+ }
+ ["class"]=>
+ object(foo)#1 (2) {
+ ["bar"]=>
+ string(2) "ok"
+ ["yes"]=>
+ string(4) "done"
+ }
+}
diff --git a/ext/wddx/tests/bug37569.phpt b/ext/wddx/tests/bug37569.phpt
index f7422c9ec..45cd68a80 100755
--- a/ext/wddx/tests/bug37569.phpt
+++ b/ext/wddx/tests/bug37569.phpt
@@ -5,774 +5,780 @@ Bug #37569 (WDDX incorrectly encodes high-ascii characters)
--FILE--
<?php
for ($i = 65; $i < 256; $i++) {
- $v = chr($i);
+ if ($i >= 0xc0) {
+ $v = chr(0xc3) . chr($i - 64);
+ } elseif ($i >= 0x80) {
+ $v = chr(0xc2) . chr($i);
+ } else {
+ $v = chr($i); // make it UTF-8
+ }
$ret = wddx_serialize_value($v);
echo $ret . "\n";
- var_dump(ord($v), ord(wddx_deserialize($ret)), $v == wddx_deserialize($ret));
+ var_dump(bin2hex($v), bin2hex(wddx_deserialize($ret)), $v == wddx_deserialize($ret));
}
?>
--EXPECT--
<wddxPacket version='1.0'><header/><data><string>A</string></data></wddxPacket>
-int(65)
-int(65)
+string(2) "41"
+string(2) "41"
bool(true)
<wddxPacket version='1.0'><header/><data><string>B</string></data></wddxPacket>
-int(66)
-int(66)
+string(2) "42"
+string(2) "42"
bool(true)
<wddxPacket version='1.0'><header/><data><string>C</string></data></wddxPacket>
-int(67)
-int(67)
+string(2) "43"
+string(2) "43"
bool(true)
<wddxPacket version='1.0'><header/><data><string>D</string></data></wddxPacket>
-int(68)
-int(68)
+string(2) "44"
+string(2) "44"
bool(true)
<wddxPacket version='1.0'><header/><data><string>E</string></data></wddxPacket>
-int(69)
-int(69)
+string(2) "45"
+string(2) "45"
bool(true)
<wddxPacket version='1.0'><header/><data><string>F</string></data></wddxPacket>
-int(70)
-int(70)
+string(2) "46"
+string(2) "46"
bool(true)
<wddxPacket version='1.0'><header/><data><string>G</string></data></wddxPacket>
-int(71)
-int(71)
+string(2) "47"
+string(2) "47"
bool(true)
<wddxPacket version='1.0'><header/><data><string>H</string></data></wddxPacket>
-int(72)
-int(72)
+string(2) "48"
+string(2) "48"
bool(true)
<wddxPacket version='1.0'><header/><data><string>I</string></data></wddxPacket>
-int(73)
-int(73)
+string(2) "49"
+string(2) "49"
bool(true)
<wddxPacket version='1.0'><header/><data><string>J</string></data></wddxPacket>
-int(74)
-int(74)
+string(2) "4a"
+string(2) "4a"
bool(true)
<wddxPacket version='1.0'><header/><data><string>K</string></data></wddxPacket>
-int(75)
-int(75)
+string(2) "4b"
+string(2) "4b"
bool(true)
<wddxPacket version='1.0'><header/><data><string>L</string></data></wddxPacket>
-int(76)
-int(76)
+string(2) "4c"
+string(2) "4c"
bool(true)
<wddxPacket version='1.0'><header/><data><string>M</string></data></wddxPacket>
-int(77)
-int(77)
+string(2) "4d"
+string(2) "4d"
bool(true)
<wddxPacket version='1.0'><header/><data><string>N</string></data></wddxPacket>
-int(78)
-int(78)
+string(2) "4e"
+string(2) "4e"
bool(true)
<wddxPacket version='1.0'><header/><data><string>O</string></data></wddxPacket>
-int(79)
-int(79)
+string(2) "4f"
+string(2) "4f"
bool(true)
<wddxPacket version='1.0'><header/><data><string>P</string></data></wddxPacket>
-int(80)
-int(80)
+string(2) "50"
+string(2) "50"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Q</string></data></wddxPacket>
-int(81)
-int(81)
+string(2) "51"
+string(2) "51"
bool(true)
<wddxPacket version='1.0'><header/><data><string>R</string></data></wddxPacket>
-int(82)
-int(82)
+string(2) "52"
+string(2) "52"
bool(true)
<wddxPacket version='1.0'><header/><data><string>S</string></data></wddxPacket>
-int(83)
-int(83)
+string(2) "53"
+string(2) "53"
bool(true)
<wddxPacket version='1.0'><header/><data><string>T</string></data></wddxPacket>
-int(84)
-int(84)
+string(2) "54"
+string(2) "54"
bool(true)
<wddxPacket version='1.0'><header/><data><string>U</string></data></wddxPacket>
-int(85)
-int(85)
+string(2) "55"
+string(2) "55"
bool(true)
<wddxPacket version='1.0'><header/><data><string>V</string></data></wddxPacket>
-int(86)
-int(86)
+string(2) "56"
+string(2) "56"
bool(true)
<wddxPacket version='1.0'><header/><data><string>W</string></data></wddxPacket>
-int(87)
-int(87)
+string(2) "57"
+string(2) "57"
bool(true)
<wddxPacket version='1.0'><header/><data><string>X</string></data></wddxPacket>
-int(88)
-int(88)
+string(2) "58"
+string(2) "58"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Y</string></data></wddxPacket>
-int(89)
-int(89)
+string(2) "59"
+string(2) "59"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Z</string></data></wddxPacket>
-int(90)
-int(90)
+string(2) "5a"
+string(2) "5a"
bool(true)
<wddxPacket version='1.0'><header/><data><string>[</string></data></wddxPacket>
-int(91)
-int(91)
+string(2) "5b"
+string(2) "5b"
bool(true)
<wddxPacket version='1.0'><header/><data><string>\</string></data></wddxPacket>
-int(92)
-int(92)
+string(2) "5c"
+string(2) "5c"
bool(true)
<wddxPacket version='1.0'><header/><data><string>]</string></data></wddxPacket>
-int(93)
-int(93)
+string(2) "5d"
+string(2) "5d"
bool(true)
<wddxPacket version='1.0'><header/><data><string>^</string></data></wddxPacket>
-int(94)
-int(94)
+string(2) "5e"
+string(2) "5e"
bool(true)
<wddxPacket version='1.0'><header/><data><string>_</string></data></wddxPacket>
-int(95)
-int(95)
+string(2) "5f"
+string(2) "5f"
bool(true)
<wddxPacket version='1.0'><header/><data><string>`</string></data></wddxPacket>
-int(96)
-int(96)
+string(2) "60"
+string(2) "60"
bool(true)
<wddxPacket version='1.0'><header/><data><string>a</string></data></wddxPacket>
-int(97)
-int(97)
+string(2) "61"
+string(2) "61"
bool(true)
<wddxPacket version='1.0'><header/><data><string>b</string></data></wddxPacket>
-int(98)
-int(98)
+string(2) "62"
+string(2) "62"
bool(true)
<wddxPacket version='1.0'><header/><data><string>c</string></data></wddxPacket>
-int(99)
-int(99)
+string(2) "63"
+string(2) "63"
bool(true)
<wddxPacket version='1.0'><header/><data><string>d</string></data></wddxPacket>
-int(100)
-int(100)
+string(2) "64"
+string(2) "64"
bool(true)
<wddxPacket version='1.0'><header/><data><string>e</string></data></wddxPacket>
-int(101)
-int(101)
+string(2) "65"
+string(2) "65"
bool(true)
<wddxPacket version='1.0'><header/><data><string>f</string></data></wddxPacket>
-int(102)
-int(102)
+string(2) "66"
+string(2) "66"
bool(true)
<wddxPacket version='1.0'><header/><data><string>g</string></data></wddxPacket>
-int(103)
-int(103)
+string(2) "67"
+string(2) "67"
bool(true)
<wddxPacket version='1.0'><header/><data><string>h</string></data></wddxPacket>
-int(104)
-int(104)
+string(2) "68"
+string(2) "68"
bool(true)
<wddxPacket version='1.0'><header/><data><string>i</string></data></wddxPacket>
-int(105)
-int(105)
+string(2) "69"
+string(2) "69"
bool(true)
<wddxPacket version='1.0'><header/><data><string>j</string></data></wddxPacket>
-int(106)
-int(106)
+string(2) "6a"
+string(2) "6a"
bool(true)
<wddxPacket version='1.0'><header/><data><string>k</string></data></wddxPacket>
-int(107)
-int(107)
+string(2) "6b"
+string(2) "6b"
bool(true)
<wddxPacket version='1.0'><header/><data><string>l</string></data></wddxPacket>
-int(108)
-int(108)
+string(2) "6c"
+string(2) "6c"
bool(true)
<wddxPacket version='1.0'><header/><data><string>m</string></data></wddxPacket>
-int(109)
-int(109)
+string(2) "6d"
+string(2) "6d"
bool(true)
<wddxPacket version='1.0'><header/><data><string>n</string></data></wddxPacket>
-int(110)
-int(110)
+string(2) "6e"
+string(2) "6e"
bool(true)
<wddxPacket version='1.0'><header/><data><string>o</string></data></wddxPacket>
-int(111)
-int(111)
+string(2) "6f"
+string(2) "6f"
bool(true)
<wddxPacket version='1.0'><header/><data><string>p</string></data></wddxPacket>
-int(112)
-int(112)
+string(2) "70"
+string(2) "70"
bool(true)
<wddxPacket version='1.0'><header/><data><string>q</string></data></wddxPacket>
-int(113)
-int(113)
+string(2) "71"
+string(2) "71"
bool(true)
<wddxPacket version='1.0'><header/><data><string>r</string></data></wddxPacket>
-int(114)
-int(114)
+string(2) "72"
+string(2) "72"
bool(true)
<wddxPacket version='1.0'><header/><data><string>s</string></data></wddxPacket>
-int(115)
-int(115)
+string(2) "73"
+string(2) "73"
bool(true)
<wddxPacket version='1.0'><header/><data><string>t</string></data></wddxPacket>
-int(116)
-int(116)
+string(2) "74"
+string(2) "74"
bool(true)
<wddxPacket version='1.0'><header/><data><string>u</string></data></wddxPacket>
-int(117)
-int(117)
+string(2) "75"
+string(2) "75"
bool(true)
<wddxPacket version='1.0'><header/><data><string>v</string></data></wddxPacket>
-int(118)
-int(118)
+string(2) "76"
+string(2) "76"
bool(true)
<wddxPacket version='1.0'><header/><data><string>w</string></data></wddxPacket>
-int(119)
-int(119)
+string(2) "77"
+string(2) "77"
bool(true)
<wddxPacket version='1.0'><header/><data><string>x</string></data></wddxPacket>
-int(120)
-int(120)
+string(2) "78"
+string(2) "78"
bool(true)
<wddxPacket version='1.0'><header/><data><string>y</string></data></wddxPacket>
-int(121)
-int(121)
+string(2) "79"
+string(2) "79"
bool(true)
<wddxPacket version='1.0'><header/><data><string>z</string></data></wddxPacket>
-int(122)
-int(122)
+string(2) "7a"
+string(2) "7a"
bool(true)
<wddxPacket version='1.0'><header/><data><string>{</string></data></wddxPacket>
-int(123)
-int(123)
+string(2) "7b"
+string(2) "7b"
bool(true)
<wddxPacket version='1.0'><header/><data><string>|</string></data></wddxPacket>
-int(124)
-int(124)
+string(2) "7c"
+string(2) "7c"
bool(true)
<wddxPacket version='1.0'><header/><data><string>}</string></data></wddxPacket>
-int(125)
-int(125)
+string(2) "7d"
+string(2) "7d"
bool(true)
<wddxPacket version='1.0'><header/><data><string>~</string></data></wddxPacket>
-int(126)
-int(126)
+string(2) "7e"
+string(2) "7e"
bool(true)
<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket>
-int(127)
-int(127)
+string(2) "7f"
+string(2) "7f"
bool(true)
<wddxPacket version='1.0'><header/><data><string>€</string></data></wddxPacket>
-int(128)
-int(128)
+string(4) "c280"
+string(4) "c280"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Â</string></data></wddxPacket>
-int(129)
-int(129)
+string(4) "c281"
+string(4) "c281"
bool(true)
<wddxPacket version='1.0'><header/><data><string>‚</string></data></wddxPacket>
-int(130)
-int(130)
+string(4) "c282"
+string(4) "c282"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ƒ</string></data></wddxPacket>
-int(131)
-int(131)
+string(4) "c283"
+string(4) "c283"
bool(true)
<wddxPacket version='1.0'><header/><data><string>„</string></data></wddxPacket>
-int(132)
-int(132)
+string(4) "c284"
+string(4) "c284"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Â…</string></data></wddxPacket>
-int(133)
-int(133)
+string(4) "c285"
+string(4) "c285"
bool(true)
<wddxPacket version='1.0'><header/><data><string>†</string></data></wddxPacket>
-int(134)
-int(134)
+string(4) "c286"
+string(4) "c286"
bool(true)
<wddxPacket version='1.0'><header/><data><string>‡</string></data></wddxPacket>
-int(135)
-int(135)
+string(4) "c287"
+string(4) "c287"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ˆ</string></data></wddxPacket>
-int(136)
-int(136)
+string(4) "c288"
+string(4) "c288"
bool(true)
<wddxPacket version='1.0'><header/><data><string>‰</string></data></wddxPacket>
-int(137)
-int(137)
+string(4) "c289"
+string(4) "c289"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Š</string></data></wddxPacket>
-int(138)
-int(138)
+string(4) "c28a"
+string(4) "c28a"
bool(true)
<wddxPacket version='1.0'><header/><data><string>‹</string></data></wddxPacket>
-int(139)
-int(139)
+string(4) "c28b"
+string(4) "c28b"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Œ</string></data></wddxPacket>
-int(140)
-int(140)
+string(4) "c28c"
+string(4) "c28c"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Â</string></data></wddxPacket>
-int(141)
-int(141)
+string(4) "c28d"
+string(4) "c28d"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ÂŽ</string></data></wddxPacket>
-int(142)
-int(142)
+string(4) "c28e"
+string(4) "c28e"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Â</string></data></wddxPacket>
-int(143)
-int(143)
+string(4) "c28f"
+string(4) "c28f"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Â</string></data></wddxPacket>
-int(144)
-int(144)
+string(4) "c290"
+string(4) "c290"
bool(true)
<wddxPacket version='1.0'><header/><data><string>‘</string></data></wddxPacket>
-int(145)
-int(145)
+string(4) "c291"
+string(4) "c291"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Â’</string></data></wddxPacket>
-int(146)
-int(146)
+string(4) "c292"
+string(4) "c292"
bool(true)
<wddxPacket version='1.0'><header/><data><string>“</string></data></wddxPacket>
-int(147)
-int(147)
+string(4) "c293"
+string(4) "c293"
bool(true)
<wddxPacket version='1.0'><header/><data><string>”</string></data></wddxPacket>
-int(148)
-int(148)
+string(4) "c294"
+string(4) "c294"
bool(true)
<wddxPacket version='1.0'><header/><data><string>•</string></data></wddxPacket>
-int(149)
-int(149)
+string(4) "c295"
+string(4) "c295"
bool(true)
<wddxPacket version='1.0'><header/><data><string>–</string></data></wddxPacket>
-int(150)
-int(150)
+string(4) "c296"
+string(4) "c296"
bool(true)
<wddxPacket version='1.0'><header/><data><string>—</string></data></wddxPacket>
-int(151)
-int(151)
+string(4) "c297"
+string(4) "c297"
bool(true)
<wddxPacket version='1.0'><header/><data><string>˜</string></data></wddxPacket>
-int(152)
-int(152)
+string(4) "c298"
+string(4) "c298"
bool(true)
<wddxPacket version='1.0'><header/><data><string>™</string></data></wddxPacket>
-int(153)
-int(153)
+string(4) "c299"
+string(4) "c299"
bool(true)
<wddxPacket version='1.0'><header/><data><string>š</string></data></wddxPacket>
-int(154)
-int(154)
+string(4) "c29a"
+string(4) "c29a"
bool(true)
<wddxPacket version='1.0'><header/><data><string>›</string></data></wddxPacket>
-int(155)
-int(155)
+string(4) "c29b"
+string(4) "c29b"
bool(true)
<wddxPacket version='1.0'><header/><data><string>œ</string></data></wddxPacket>
-int(156)
-int(156)
+string(4) "c29c"
+string(4) "c29c"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Â</string></data></wddxPacket>
-int(157)
-int(157)
+string(4) "c29d"
+string(4) "c29d"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ž</string></data></wddxPacket>
-int(158)
-int(158)
+string(4) "c29e"
+string(4) "c29e"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Ÿ</string></data></wddxPacket>
-int(159)
-int(159)
+string(4) "c29f"
+string(4) "c29f"
bool(true)
<wddxPacket version='1.0'><header/><data><string> </string></data></wddxPacket>
-int(160)
-int(160)
+string(4) "c2a0"
+string(4) "c2a0"
bool(true)
<wddxPacket version='1.0'><header/><data><string>¡</string></data></wddxPacket>
-int(161)
-int(161)
+string(4) "c2a1"
+string(4) "c2a1"
bool(true)
<wddxPacket version='1.0'><header/><data><string>¢</string></data></wddxPacket>
-int(162)
-int(162)
+string(4) "c2a2"
+string(4) "c2a2"
bool(true)
<wddxPacket version='1.0'><header/><data><string>£</string></data></wddxPacket>
-int(163)
-int(163)
+string(4) "c2a3"
+string(4) "c2a3"
bool(true)
<wddxPacket version='1.0'><header/><data><string>¤</string></data></wddxPacket>
-int(164)
-int(164)
+string(4) "c2a4"
+string(4) "c2a4"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Â¥</string></data></wddxPacket>
-int(165)
-int(165)
+string(4) "c2a5"
+string(4) "c2a5"
bool(true)
<wddxPacket version='1.0'><header/><data><string>¦</string></data></wddxPacket>
-int(166)
-int(166)
+string(4) "c2a6"
+string(4) "c2a6"
bool(true)
<wddxPacket version='1.0'><header/><data><string>§</string></data></wddxPacket>
-int(167)
-int(167)
+string(4) "c2a7"
+string(4) "c2a7"
bool(true)
<wddxPacket version='1.0'><header/><data><string>¨</string></data></wddxPacket>
-int(168)
-int(168)
+string(4) "c2a8"
+string(4) "c2a8"
bool(true)
<wddxPacket version='1.0'><header/><data><string>©</string></data></wddxPacket>
-int(169)
-int(169)
+string(4) "c2a9"
+string(4) "c2a9"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ª</string></data></wddxPacket>
-int(170)
-int(170)
+string(4) "c2aa"
+string(4) "c2aa"
bool(true)
<wddxPacket version='1.0'><header/><data><string>«</string></data></wddxPacket>
-int(171)
-int(171)
+string(4) "c2ab"
+string(4) "c2ab"
bool(true)
<wddxPacket version='1.0'><header/><data><string>¬</string></data></wddxPacket>
-int(172)
-int(172)
+string(4) "c2ac"
+string(4) "c2ac"
bool(true)
<wddxPacket version='1.0'><header/><data><string>­</string></data></wddxPacket>
-int(173)
-int(173)
+string(4) "c2ad"
+string(4) "c2ad"
bool(true)
<wddxPacket version='1.0'><header/><data><string>®</string></data></wddxPacket>
-int(174)
-int(174)
+string(4) "c2ae"
+string(4) "c2ae"
bool(true)
<wddxPacket version='1.0'><header/><data><string>¯</string></data></wddxPacket>
-int(175)
-int(175)
+string(4) "c2af"
+string(4) "c2af"
bool(true)
<wddxPacket version='1.0'><header/><data><string>°</string></data></wddxPacket>
-int(176)
-int(176)
+string(4) "c2b0"
+string(4) "c2b0"
bool(true)
<wddxPacket version='1.0'><header/><data><string>±</string></data></wddxPacket>
-int(177)
-int(177)
+string(4) "c2b1"
+string(4) "c2b1"
bool(true)
<wddxPacket version='1.0'><header/><data><string>²</string></data></wddxPacket>
-int(178)
-int(178)
+string(4) "c2b2"
+string(4) "c2b2"
bool(true)
<wddxPacket version='1.0'><header/><data><string>³</string></data></wddxPacket>
-int(179)
-int(179)
+string(4) "c2b3"
+string(4) "c2b3"
bool(true)
<wddxPacket version='1.0'><header/><data><string>´</string></data></wddxPacket>
-int(180)
-int(180)
+string(4) "c2b4"
+string(4) "c2b4"
bool(true)
<wddxPacket version='1.0'><header/><data><string>µ</string></data></wddxPacket>
-int(181)
-int(181)
+string(4) "c2b5"
+string(4) "c2b5"
bool(true)
<wddxPacket version='1.0'><header/><data><string>¶</string></data></wddxPacket>
-int(182)
-int(182)
+string(4) "c2b6"
+string(4) "c2b6"
bool(true)
<wddxPacket version='1.0'><header/><data><string>·</string></data></wddxPacket>
-int(183)
-int(183)
+string(4) "c2b7"
+string(4) "c2b7"
bool(true)
<wddxPacket version='1.0'><header/><data><string>¸</string></data></wddxPacket>
-int(184)
-int(184)
+string(4) "c2b8"
+string(4) "c2b8"
bool(true)
<wddxPacket version='1.0'><header/><data><string>¹</string></data></wddxPacket>
-int(185)
-int(185)
+string(4) "c2b9"
+string(4) "c2b9"
bool(true)
<wddxPacket version='1.0'><header/><data><string>º</string></data></wddxPacket>
-int(186)
-int(186)
+string(4) "c2ba"
+string(4) "c2ba"
bool(true)
<wddxPacket version='1.0'><header/><data><string>»</string></data></wddxPacket>
-int(187)
-int(187)
+string(4) "c2bb"
+string(4) "c2bb"
bool(true)
<wddxPacket version='1.0'><header/><data><string>¼</string></data></wddxPacket>
-int(188)
-int(188)
+string(4) "c2bc"
+string(4) "c2bc"
bool(true)
<wddxPacket version='1.0'><header/><data><string>½</string></data></wddxPacket>
-int(189)
-int(189)
+string(4) "c2bd"
+string(4) "c2bd"
bool(true)
<wddxPacket version='1.0'><header/><data><string>¾</string></data></wddxPacket>
-int(190)
-int(190)
+string(4) "c2be"
+string(4) "c2be"
bool(true)
<wddxPacket version='1.0'><header/><data><string>¿</string></data></wddxPacket>
-int(191)
-int(191)
+string(4) "c2bf"
+string(4) "c2bf"
bool(true)
<wddxPacket version='1.0'><header/><data><string>À</string></data></wddxPacket>
-int(192)
-int(192)
+string(4) "c380"
+string(4) "c380"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Ã</string></data></wddxPacket>
-int(193)
-int(193)
+string(4) "c381"
+string(4) "c381"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Â</string></data></wddxPacket>
-int(194)
-int(194)
+string(4) "c382"
+string(4) "c382"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Ã</string></data></wddxPacket>
-int(195)
-int(195)
+string(4) "c383"
+string(4) "c383"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Ä</string></data></wddxPacket>
-int(196)
-int(196)
+string(4) "c384"
+string(4) "c384"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Ã…</string></data></wddxPacket>
-int(197)
-int(197)
+string(4) "c385"
+string(4) "c385"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Æ</string></data></wddxPacket>
-int(198)
-int(198)
+string(4) "c386"
+string(4) "c386"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Ç</string></data></wddxPacket>
-int(199)
-int(199)
+string(4) "c387"
+string(4) "c387"
bool(true)
<wddxPacket version='1.0'><header/><data><string>È</string></data></wddxPacket>
-int(200)
-int(200)
+string(4) "c388"
+string(4) "c388"
bool(true)
<wddxPacket version='1.0'><header/><data><string>É</string></data></wddxPacket>
-int(201)
-int(201)
+string(4) "c389"
+string(4) "c389"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Ê</string></data></wddxPacket>
-int(202)
-int(202)
+string(4) "c38a"
+string(4) "c38a"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Ë</string></data></wddxPacket>
-int(203)
-int(203)
+string(4) "c38b"
+string(4) "c38b"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Ì</string></data></wddxPacket>
-int(204)
-int(204)
+string(4) "c38c"
+string(4) "c38c"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Ã</string></data></wddxPacket>
-int(205)
-int(205)
+string(4) "c38d"
+string(4) "c38d"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ÃŽ</string></data></wddxPacket>
-int(206)
-int(206)
+string(4) "c38e"
+string(4) "c38e"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Ã</string></data></wddxPacket>
-int(207)
-int(207)
+string(4) "c38f"
+string(4) "c38f"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Ã</string></data></wddxPacket>
-int(208)
-int(208)
+string(4) "c390"
+string(4) "c390"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Ñ</string></data></wddxPacket>
-int(209)
-int(209)
+string(4) "c391"
+string(4) "c391"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Ã’</string></data></wddxPacket>
-int(210)
-int(210)
+string(4) "c392"
+string(4) "c392"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Ó</string></data></wddxPacket>
-int(211)
-int(211)
+string(4) "c393"
+string(4) "c393"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Ô</string></data></wddxPacket>
-int(212)
-int(212)
+string(4) "c394"
+string(4) "c394"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Õ</string></data></wddxPacket>
-int(213)
-int(213)
+string(4) "c395"
+string(4) "c395"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Ö</string></data></wddxPacket>
-int(214)
-int(214)
+string(4) "c396"
+string(4) "c396"
bool(true)
<wddxPacket version='1.0'><header/><data><string>×</string></data></wddxPacket>
-int(215)
-int(215)
+string(4) "c397"
+string(4) "c397"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Ø</string></data></wddxPacket>
-int(216)
-int(216)
+string(4) "c398"
+string(4) "c398"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Ù</string></data></wddxPacket>
-int(217)
-int(217)
+string(4) "c399"
+string(4) "c399"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Ú</string></data></wddxPacket>
-int(218)
-int(218)
+string(4) "c39a"
+string(4) "c39a"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Û</string></data></wddxPacket>
-int(219)
-int(219)
+string(4) "c39b"
+string(4) "c39b"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Ü</string></data></wddxPacket>
-int(220)
-int(220)
+string(4) "c39c"
+string(4) "c39c"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Ã</string></data></wddxPacket>
-int(221)
-int(221)
+string(4) "c39d"
+string(4) "c39d"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Þ</string></data></wddxPacket>
-int(222)
-int(222)
+string(4) "c39e"
+string(4) "c39e"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ß</string></data></wddxPacket>
-int(223)
-int(223)
+string(4) "c39f"
+string(4) "c39f"
bool(true)
<wddxPacket version='1.0'><header/><data><string>à</string></data></wddxPacket>
-int(224)
-int(224)
+string(4) "c3a0"
+string(4) "c3a0"
bool(true)
<wddxPacket version='1.0'><header/><data><string>á</string></data></wddxPacket>
-int(225)
-int(225)
+string(4) "c3a1"
+string(4) "c3a1"
bool(true)
<wddxPacket version='1.0'><header/><data><string>â</string></data></wddxPacket>
-int(226)
-int(226)
+string(4) "c3a2"
+string(4) "c3a2"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ã</string></data></wddxPacket>
-int(227)
-int(227)
+string(4) "c3a3"
+string(4) "c3a3"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ä</string></data></wddxPacket>
-int(228)
-int(228)
+string(4) "c3a4"
+string(4) "c3a4"
bool(true)
<wddxPacket version='1.0'><header/><data><string>Ã¥</string></data></wddxPacket>
-int(229)
-int(229)
+string(4) "c3a5"
+string(4) "c3a5"
bool(true)
<wddxPacket version='1.0'><header/><data><string>æ</string></data></wddxPacket>
-int(230)
-int(230)
+string(4) "c3a6"
+string(4) "c3a6"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ç</string></data></wddxPacket>
-int(231)
-int(231)
+string(4) "c3a7"
+string(4) "c3a7"
bool(true)
<wddxPacket version='1.0'><header/><data><string>è</string></data></wddxPacket>
-int(232)
-int(232)
+string(4) "c3a8"
+string(4) "c3a8"
bool(true)
<wddxPacket version='1.0'><header/><data><string>é</string></data></wddxPacket>
-int(233)
-int(233)
+string(4) "c3a9"
+string(4) "c3a9"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ê</string></data></wddxPacket>
-int(234)
-int(234)
+string(4) "c3aa"
+string(4) "c3aa"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ë</string></data></wddxPacket>
-int(235)
-int(235)
+string(4) "c3ab"
+string(4) "c3ab"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ì</string></data></wddxPacket>
-int(236)
-int(236)
+string(4) "c3ac"
+string(4) "c3ac"
bool(true)
<wddxPacket version='1.0'><header/><data><string>í</string></data></wddxPacket>
-int(237)
-int(237)
+string(4) "c3ad"
+string(4) "c3ad"
bool(true)
<wddxPacket version='1.0'><header/><data><string>î</string></data></wddxPacket>
-int(238)
-int(238)
+string(4) "c3ae"
+string(4) "c3ae"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ï</string></data></wddxPacket>
-int(239)
-int(239)
+string(4) "c3af"
+string(4) "c3af"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ð</string></data></wddxPacket>
-int(240)
-int(240)
+string(4) "c3b0"
+string(4) "c3b0"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ñ</string></data></wddxPacket>
-int(241)
-int(241)
+string(4) "c3b1"
+string(4) "c3b1"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ò</string></data></wddxPacket>
-int(242)
-int(242)
+string(4) "c3b2"
+string(4) "c3b2"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ó</string></data></wddxPacket>
-int(243)
-int(243)
+string(4) "c3b3"
+string(4) "c3b3"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ô</string></data></wddxPacket>
-int(244)
-int(244)
+string(4) "c3b4"
+string(4) "c3b4"
bool(true)
<wddxPacket version='1.0'><header/><data><string>õ</string></data></wddxPacket>
-int(245)
-int(245)
+string(4) "c3b5"
+string(4) "c3b5"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ö</string></data></wddxPacket>
-int(246)
-int(246)
+string(4) "c3b6"
+string(4) "c3b6"
bool(true)
<wddxPacket version='1.0'><header/><data><string>÷</string></data></wddxPacket>
-int(247)
-int(247)
+string(4) "c3b7"
+string(4) "c3b7"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ø</string></data></wddxPacket>
-int(248)
-int(248)
+string(4) "c3b8"
+string(4) "c3b8"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ù</string></data></wddxPacket>
-int(249)
-int(249)
+string(4) "c3b9"
+string(4) "c3b9"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ú</string></data></wddxPacket>
-int(250)
-int(250)
+string(4) "c3ba"
+string(4) "c3ba"
bool(true)
<wddxPacket version='1.0'><header/><data><string>û</string></data></wddxPacket>
-int(251)
-int(251)
+string(4) "c3bb"
+string(4) "c3bb"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ü</string></data></wddxPacket>
-int(252)
-int(252)
+string(4) "c3bc"
+string(4) "c3bc"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ý</string></data></wddxPacket>
-int(253)
-int(253)
+string(4) "c3bd"
+string(4) "c3bd"
bool(true)
<wddxPacket version='1.0'><header/><data><string>þ</string></data></wddxPacket>
-int(254)
-int(254)
+string(4) "c3be"
+string(4) "c3be"
bool(true)
<wddxPacket version='1.0'><header/><data><string>ÿ</string></data></wddxPacket>
-int(255)
-int(255)
-bool(true) \ No newline at end of file
+string(4) "c3bf"
+string(4) "c3bf"
+bool(true)
diff --git a/ext/wddx/tests/bug37587.phpt b/ext/wddx/tests/bug37587.phpt
index 5361d38da..7780355b8 100755
--- a/ext/wddx/tests/bug37587.phpt
+++ b/ext/wddx/tests/bug37587.phpt
@@ -5,8 +5,8 @@ Bug #37587 (var without attribute causes segfault)
--FILE--
<?php
-var_dump(wddx_deserialize(file_get_contents(<<<EOF
-data:,<wddxPacket version='1.0'>
+var_dump(wddx_deserialize(<<<EOF
+<wddxPacket version='1.0'>
<header/>
<data>
<array length='1'>
@@ -19,7 +19,7 @@ data:,<wddxPacket version='1.0'>
</data>
</wddxPacket>
EOF
-)));
+));
?>
===DONE===
diff --git a/ext/wddx/tests/bug45901.phpt b/ext/wddx/tests/bug45901.phpt
new file mode 100644
index 000000000..4084ccbf2
--- /dev/null
+++ b/ext/wddx/tests/bug45901.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Bug #45901 (wddx_serialize_value crash with SimpleXMLElement object)
+--SKIPIF--
+<?php
+if (!extension_loaded("wddx")) print "skip";
+if (!extension_loaded("simplexml")) print "skip SimpleXML not present";
+?>
+--FILE--
+<?php
+
+$xml = new SimpleXMLElement('<data></data>');
+$xml->addChild('test');
+echo wddx_serialize_value($xml, 'Variables') . "\n";
+echo "DONE";
+?>
+--EXPECTF--
+<wddxPacket version='1.0'><header><comment>Variables</comment></header><data><struct><var name='php_class_name'><string>SimpleXMLElement</string></var><var name='test'><struct><var name='php_class_name'><string>SimpleXMLElement</string></var></struct></var></struct></data></wddxPacket>
+DONE \ No newline at end of file
diff --git a/ext/wddx/wddx.c b/ext/wddx/wddx.c
index fcd6c6072..415d40b5a 100644
--- a/ext/wddx/wddx.c
+++ b/ext/wddx/wddx.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: wddx.c,v 1.119.2.10.2.18 2007/12/31 07:20:14 sebastian Exp $ */
+/* $Id: wddx.c,v 1.119.2.10.2.22 2008/12/31 11:17:46 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -371,16 +371,14 @@ static void php_wddx_serialize_string(wddx_packet *packet, zval *var TSRMLS_DC)
php_wddx_add_chunk_static(packet, WDDX_STRING_S);
if (Z_STRLEN_P(var) > 0) {
- char *buf, *enc;
- int buf_len, enc_len;
+ char *buf;
+ int buf_len;
buf = php_escape_html_entities(Z_STRVAL_P(var), Z_STRLEN_P(var), &buf_len, 0, ENT_QUOTES, NULL TSRMLS_CC);
- enc = xml_utf8_encode(buf, buf_len, &enc_len, "ISO-8859-1");
- php_wddx_add_chunk_ex(packet, enc, enc_len);
+ php_wddx_add_chunk_ex(packet, buf, buf_len);
efree(buf);
- efree(enc);
}
php_wddx_add_chunk_static(packet, WDDX_STRING_E);
}
@@ -432,6 +430,7 @@ static void php_wddx_serialize_object(wddx_packet *packet, zval *obj)
char *key;
ulong idx;
char tmp_buf[WDDX_BUF_LEN];
+ HashTable *objhash, *sleephash;
TSRMLS_FETCH();
MAKE_STD_ZVAL(fname);
@@ -442,7 +441,7 @@ static void php_wddx_serialize_object(wddx_packet *packet, zval *obj)
* array of property names to be serialized.
*/
if (call_user_function_ex(CG(function_table), &obj, fname, &retval, 0, 0, 1, NULL TSRMLS_CC) == SUCCESS) {
- if (retval && HASH_OF(retval)) {
+ if (retval && (sleephash = HASH_OF(retval))) {
PHP_CLASS_ATTRIBUTES;
PHP_SET_CLASS_ATTRIBUTES(obj);
@@ -456,16 +455,18 @@ static void php_wddx_serialize_object(wddx_packet *packet, zval *obj)
php_wddx_add_chunk_static(packet, WDDX_VAR_E);
PHP_CLEANUP_CLASS_ATTRIBUTES();
+
+ objhash = HASH_OF(obj);
- for (zend_hash_internal_pointer_reset(HASH_OF(retval));
- zend_hash_get_current_data(HASH_OF(retval), (void **)&varname) == SUCCESS;
- zend_hash_move_forward(HASH_OF(retval))) {
+ for (zend_hash_internal_pointer_reset(sleephash);
+ zend_hash_get_current_data(sleephash, (void **)&varname) == SUCCESS;
+ zend_hash_move_forward(sleephash)) {
if (Z_TYPE_PP(varname) != IS_STRING) {
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "__sleep should return an array only containing the names of instance-variables to serialize.");
continue;
}
- if (zend_hash_find(HASH_OF(obj), Z_STRVAL_PP(varname), Z_STRLEN_PP(varname)+1, (void **)&ent) == SUCCESS) {
+ if (zend_hash_find(objhash, Z_STRVAL_PP(varname), Z_STRLEN_PP(varname)+1, (void **)&ent) == SUCCESS) {
php_wddx_serialize_var(packet, *ent, Z_STRVAL_PP(varname), Z_STRLEN_PP(varname) TSRMLS_CC);
}
}
@@ -489,13 +490,15 @@ static void php_wddx_serialize_object(wddx_packet *packet, zval *obj)
PHP_CLEANUP_CLASS_ATTRIBUTES();
- for (zend_hash_internal_pointer_reset(HASH_OF(obj));
- zend_hash_get_current_data(HASH_OF(obj), (void**)&ent) == SUCCESS;
- zend_hash_move_forward(HASH_OF(obj))) {
- if (*ent == obj)
+ objhash = HASH_OF(obj);
+ for (zend_hash_internal_pointer_reset(objhash);
+ zend_hash_get_current_data(objhash, (void**)&ent) == SUCCESS;
+ zend_hash_move_forward(objhash)) {
+ if (*ent == obj) {
continue;
+ }
- if (zend_hash_get_current_key_ex(HASH_OF(obj), &key, &key_len, &idx, 0, NULL) == HASH_KEY_IS_STRING) {
+ if (zend_hash_get_current_key_ex(objhash, &key, &key_len, &idx, 0, NULL) == HASH_KEY_IS_STRING) {
char *class_name, *prop_name;
zend_unmangle_property_name(key, key_len-1, &class_name, &prop_name);
@@ -783,10 +786,7 @@ static void php_wddx_push_element(void *user_data, const XML_Char *name, const X
if (atts) for (i = 0; atts[i]; i++) {
if (!strcmp(atts[i], EL_NAME) && atts[++i] && atts[i][0]) {
- char *decoded;
- int decoded_len;
- decoded = xml_utf8_decode(atts[i], strlen(atts[i]), &decoded_len, "ISO-8859-1");
- stack->varname = decoded;
+ stack->varname = estrdup(atts[i]);
break;
}
}
@@ -803,12 +803,9 @@ static void php_wddx_push_element(void *user_data, const XML_Char *name, const X
zval *tmp;
char *key;
char *p1, *p2, *endp;
- char *decoded;
- int decoded_len;
- decoded = xml_utf8_decode(atts[i], strlen(atts[i]), &decoded_len, "ISO-8859-1");
- endp = (char *)decoded + decoded_len;
- p1 = (char *)decoded;
+ endp = (char *)atts[i] + strlen(atts[i]);
+ p1 = (char *)atts[i];
while ((p2 = php_memnstr(p1, ",", sizeof(",")-1, endp)) != NULL) {
key = estrndup(p1, p2 - p1);
MAKE_STD_ZVAL(tmp);
@@ -824,7 +821,6 @@ static void php_wddx_push_element(void *user_data, const XML_Char *name, const X
add_assoc_zval_ex(ent.data, p1, endp - p1 + 1, tmp);
}
- efree(decoded);
break;
}
}
@@ -840,19 +836,15 @@ static void php_wddx_push_element(void *user_data, const XML_Char *name, const X
if (atts) for (i = 0; atts[i]; i++) {
if (!strcmp(atts[i], EL_NAME) && atts[++i] && atts[i][0]) {
- char *decoded;
- int decoded_len;
st_entry *recordset;
zval **field;
- decoded = xml_utf8_decode(atts[i], strlen(atts[i]), &decoded_len, "ISO-8859-1");
if (wddx_stack_top(stack, (void**)&recordset) == SUCCESS &&
recordset->type == ST_RECORDSET &&
- zend_hash_find(Z_ARRVAL_P(recordset->data), decoded, decoded_len+1, (void**)&field) == SUCCESS) {
+ zend_hash_find(Z_ARRVAL_P(recordset->data), (char*)atts[i], strlen(atts[i])+1, (void**)&field) == SUCCESS) {
ent.data = *field;
}
- efree(decoded);
break;
}
}
@@ -1003,28 +995,22 @@ static void php_wddx_process_data(void *user_data, const XML_Char *s, int len)
{
st_entry *ent;
wddx_stack *stack = (wddx_stack *)user_data;
- char *decoded;
- int decoded_len;
TSRMLS_FETCH();
if (!wddx_stack_is_empty(stack) && !stack->done) {
wddx_stack_top(stack, (void**)&ent);
switch (Z_TYPE_P(ent)) {
case ST_STRING:
- decoded = xml_utf8_decode(s, len, &decoded_len, "ISO-8859-1");
-
if (Z_STRLEN_P(ent->data) == 0) {
STR_FREE(Z_STRVAL_P(ent->data));
- Z_STRVAL_P(ent->data) = estrndup(decoded, decoded_len);
- Z_STRLEN_P(ent->data) = decoded_len;
+ Z_STRVAL_P(ent->data) = estrndup(s, len);
+ Z_STRLEN_P(ent->data) = len;
} else {
- Z_STRVAL_P(ent->data) = erealloc(Z_STRVAL_P(ent->data), Z_STRLEN_P(ent->data) + decoded_len + 1);
- memcpy(Z_STRVAL_P(ent->data) + Z_STRLEN_P(ent->data), decoded, decoded_len);
- Z_STRLEN_P(ent->data) += decoded_len;
+ Z_STRVAL_P(ent->data) = erealloc(Z_STRVAL_P(ent->data), Z_STRLEN_P(ent->data) + len + 1);
+ memcpy(Z_STRVAL_P(ent->data) + Z_STRLEN_P(ent->data), s, len);
+ Z_STRLEN_P(ent->data) += len;
Z_STRVAL_P(ent->data)[Z_STRLEN_P(ent->data)] = '\0';
}
-
- efree(decoded);
break;
case ST_BINARY:
@@ -1095,7 +1081,7 @@ int php_wddx_deserialize_ex(char *value, int vallen, zval *return_value)
int retval;
wddx_stack_init(&stack);
- parser = XML_ParserCreate("ISO-8859-1");
+ parser = XML_ParserCreate("UTF-8");
XML_SetUserData(parser, &stack);
XML_SetElementHandler(parser, php_wddx_push_element, php_wddx_pop_element);
diff --git a/ext/xml/compat.c b/ext/xml/compat.c
index 7b4c90dbd..878b9214a 100644
--- a/ext/xml/compat.c
+++ b/ext/xml/compat.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -40,7 +40,7 @@ _qualify_namespace(XML_Parser parser, const xmlChar *name, const xmlChar *URI, x
/* Use libxml functions otherwise its memory deallocation is screwed up */
*qualified = xmlStrdup(URI);
*qualified = xmlStrncat(*qualified, parser->_ns_seperator, 1);
- *qualified = xmlStrncat(*qualified, name, strlen(name));
+ *qualified = xmlStrncat(*qualified, name, xmlStrlen(name));
} else {
*qualified = xmlStrdup(name);
}
@@ -104,7 +104,66 @@ _start_element_handler_ns(void *user, const xmlChar *name, const xmlChar *prefix
y = 0;
}
- if (parser->h_start_element == NULL && parser->h_default == NULL) {
+ if (parser->h_start_element == NULL) {
+ if (parser->h_default) {
+
+ if (prefix) {
+ qualified_name = xmlStrncatNew((xmlChar *)"<", prefix, xmlStrlen(prefix));
+ qualified_name = xmlStrncat(qualified_name, (xmlChar *)":", 1);
+ qualified_name = xmlStrncat(qualified_name, name, xmlStrlen(name));
+ } else {
+ qualified_name = xmlStrncatNew((xmlChar *)"<", name, xmlStrlen(name));
+ }
+
+ if (namespaces) {
+ int i, j;
+ for (i = 0,j = 0;j < nb_namespaces;j++) {
+ int ns_len;
+ char *ns_string, *ns_prefix, *ns_url;
+
+ ns_prefix = (char *) namespaces[i++];
+ ns_url = (char *) namespaces[i++];
+
+ if (ns_prefix) {
+ ns_len = spprintf(&ns_string, 0, " xmlns:%s=\"%s\"", ns_prefix, ns_url);
+ } else {
+ ns_len = spprintf(&ns_string, 0, " xmlns=\"%s\"", ns_url);
+ }
+ qualified_name = xmlStrncat(qualified_name, (xmlChar *)ns_string, ns_len);
+
+ efree(ns_string);
+ }
+ }
+
+ if (attributes) {
+ for (i = 0; i < nb_attributes; i += 1) {
+ int att_len;
+ char *att_string, *att_name, *att_value, *att_prefix, *att_valueend;
+
+ att_name = (char *) attributes[y++];
+ att_prefix = (char *)attributes[y++];
+ y++;
+ att_value = (char *)attributes[y++];
+ att_valueend = (char *)attributes[y++];
+
+ if (att_prefix) {
+ att_len = spprintf(&att_string, 0, " %s:%s=\"", att_prefix, att_name);
+ } else {
+ att_len = spprintf(&att_string, 0, " %s=\"", att_name);
+ }
+
+ qualified_name = xmlStrncat(qualified_name, (xmlChar *)att_string, att_len);
+ qualified_name = xmlStrncat(qualified_name, (xmlChar *)att_value, att_valueend - att_value);
+ qualified_name = xmlStrncat(qualified_name, (xmlChar *)"\"", 1);
+
+ efree(att_string);
+ }
+
+ }
+ qualified_name = xmlStrncat(qualified_name, (xmlChar *)">", 1);
+ parser->h_default(parser->user, (const XML_Char *) qualified_name, xmlStrlen(qualified_name));
+ xmlFree(qualified_name);
+ }
return;
}
_qualify_namespace(parser, name, URI, &qualified_name);
@@ -178,6 +237,18 @@ _end_element_handler_ns(void *user, const xmlChar *name, const xmlChar * prefix,
XML_Parser parser = (XML_Parser) user;
if (parser->h_end_element == NULL) {
+ if (parser->h_default) {
+ char *end_element;
+ int end_element_len;
+
+ if (prefix) {
+ end_element_len = spprintf(&end_element, 0, "</%s:%s>", (char *) prefix, (char *)name);
+ } else {
+ end_element_len = spprintf(&end_element, 0, "</%s>", (char *)name);
+ }
+ parser->h_default(parser->user, (const XML_Char *) end_element, end_element_len);
+ efree(end_element);
+ }
return;
}
@@ -212,7 +283,7 @@ _pi_handler(void *user, const xmlChar *target, const xmlChar *data)
if (parser->h_default) {
char *full_pi;
spprintf(&full_pi, 0, "<?%s %s?>", (char *)target, (char *)data);
- parser->h_default(parser->user, (const XML_Char *) full_pi, xmlStrlen(full_pi));
+ parser->h_default(parser->user, (const XML_Char *) full_pi, strlen(full_pi));
efree(full_pi);
}
return;
@@ -411,6 +482,10 @@ XML_ParserCreate_MM(const XML_Char *encoding, const XML_Memory_Handling_Suite *m
parser->parser->charset = XML_CHAR_ENCODING_NONE;
#endif
+#if LIBXML_VERSION >= 20703
+ xmlCtxtUseOptions(parser->parser, XML_PARSE_OLDSAX);
+#endif
+
parser->parser->replaceEntities = 1;
parser->parser->wellFormed = 0;
if (sep != NULL) {
@@ -545,10 +620,10 @@ XML_GetErrorCode(XML_Parser parser)
static const XML_Char *const error_mapping[] = {
"No error",
- "Internal error",
"No memory",
"Invalid document start",
"Empty document",
+ "Not well-formed (invalid token)",
"Invalid document end",
"Invalid hexadecimal character reference",
"Invalid decimal character reference",
diff --git a/ext/xml/expat_compat.h b/ext/xml/expat_compat.h
index 7eb3236b0..6b34a835a 100644
--- a/ext/xml/expat_compat.h
+++ b/ext/xml/expat_compat.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: expat_compat.h,v 1.19.2.1.2.2 2007/12/31 07:20:14 sebastian Exp $ */
+/* $Id: expat_compat.h,v 1.19.2.1.2.3 2008/12/31 11:17:46 sebastian Exp $ */
#ifndef PHP_EXPAT_COMPAT_H
#define PHP_EXPAT_COMPAT_H
diff --git a/ext/xml/php_xml.h b/ext/xml/php_xml.h
index f975c21d5..2dd6ed405 100644
--- a/ext/xml/php_xml.h
+++ b/ext/xml/php_xml.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_xml.h,v 1.28.2.2.2.4 2007/12/31 07:20:14 sebastian Exp $ */
+/* $Id: php_xml.h,v 1.28.2.2.2.5 2008/12/31 11:17:46 sebastian Exp $ */
#ifndef PHP_XML_H
#define PHP_XML_H
diff --git a/ext/xml/tests/bug43957.phpt b/ext/xml/tests/bug43957.phpt
index 34ddcd951..f11d15627 100644
--- a/ext/xml/tests/bug43957.phpt
+++ b/ext/xml/tests/bug43957.phpt
@@ -1,5 +1,5 @@
--TEST--
-Bug #43957 - utf8_decode() bogus conversion on multibyte indicator near end of string
+Bug #43957 (utf8_decode() bogus conversion on multibyte indicator near end of string)
--SKIPIF--
<?php
require_once("skipif.inc");
diff --git a/ext/xml/tests/bug46699.phpt b/ext/xml/tests/bug46699.phpt
new file mode 100644
index 000000000..3996fd191
--- /dev/null
+++ b/ext/xml/tests/bug46699.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Bug #46699: (xml_parse crash when parser is namespace aware)
+--SKIPIF--
+<?php
+require_once("skipif.inc");
+if (! @xml_parser_create_ns('ISO-8859-1')) { die("skip xml_parser_create_ns is not supported on this platform");}
+?>
+--FILE--
+<?php
+function defaultfunc($parser, $data)
+{
+echo $data;
+}
+
+$xml = <<<HERE
+<a xmlns="http://example.com/foo"
+ xmlns:bar="http://example.com/bar">
+ <bar:b foo="bar">1</bar:b>
+ <bar:c bar:nix="null" foo="bar">2</bar:c>
+</a>
+HERE;
+
+$parser = xml_parser_create_ns("ISO-8859-1","@");
+xml_set_default_handler($parser,'defaultfunc');
+xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
+xml_parse($parser, $xml);
+xml_parser_free($parser);
+?>
+--EXPECT--
+<a xmlns="http://example.com/foo" xmlns:bar="http://example.com/bar">
+ <bar:b foo="bar">1</bar:b>
+ <bar:c bar:nix="null" foo="bar">2</bar:c>
+</a>
diff --git a/ext/xml/tests/utf8_decode_error.phpt b/ext/xml/tests/utf8_decode_error.phpt
new file mode 100644
index 000000000..6ece3223d
--- /dev/null
+++ b/ext/xml/tests/utf8_decode_error.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test utf8_decode() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto string utf8_decode(string data)
+ * Description: Converts a UTF-8 encoded string to ISO-8859-1
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing utf8_decode() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing utf8_decode() function with Zero arguments --\n";
+var_dump( utf8_decode() );
+
+//Test utf8_decode with one more than the expected number of arguments
+echo "\n-- Testing utf8_decode() function with more than expected no. of arguments --\n";
+$data = 'string_val';
+$extra_arg = 10;
+var_dump( utf8_decode($data, $extra_arg) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing utf8_decode() : error conditions ***
+
+-- Testing utf8_decode() function with Zero arguments --
+
+Warning: Wrong parameter count for utf8_decode() in %s on line %d
+NULL
+
+-- Testing utf8_decode() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for utf8_decode() in %s on line %d
+NULL
+Done \ No newline at end of file
diff --git a/ext/xml/tests/utf8_decode_variation1.phpt b/ext/xml/tests/utf8_decode_variation1.phpt
new file mode 100644
index 000000000..64d506793
--- /dev/null
+++ b/ext/xml/tests/utf8_decode_variation1.phpt
@@ -0,0 +1,165 @@
+--TEST--
+Test utf8_decode() function : usage variations - different types for data
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto string utf8_decode(string data)
+ * Description: Converts a UTF-8 encoded string to ISO-8859-1
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing utf8_decode() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+
+// Initialise function arguments not being substituted (if any)
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // object data
+ new aClass(),
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for data
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( utf8_decode($value) );
+};
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing utf8_decode() : usage variations ***
+
+Arg value 0
+string(1) "0"
+
+Arg value 1
+string(1) "1"
+
+Arg value 12345
+string(5) "12345"
+
+Arg value -2345
+string(5) "-2345"
+
+Arg value 10.5
+string(4) "10.5"
+
+Arg value -10.5
+string(5) "-10.5"
+
+Arg value 101234567000
+string(12) "101234567000"
+
+Arg value 1.07654321E-9
+string(13) "1.07654321E-9"
+
+Arg value 0.5
+string(3) "0.5"
+
+Arg value Array
+string(5) "Array"
+
+Arg value Array
+string(5) "Array"
+
+Arg value Array
+string(5) "Array"
+
+Arg value Array
+string(5) "Array"
+
+Arg value Array
+string(5) "Array"
+
+Arg value
+string(0) ""
+
+Arg value
+string(0) ""
+
+Arg value 1
+string(1) "1"
+
+Arg value
+string(0) ""
+
+Arg value 1
+string(1) "1"
+
+Arg value
+string(0) ""
+
+Arg value
+string(0) ""
+
+Arg value
+string(0) ""
+
+Arg value Some Ascii Data
+string(15) "Some Ascii Data"
+
+Arg value
+string(0) ""
+
+Arg value
+string(0) ""
+Done
diff --git a/ext/xml/tests/utf8_encode_error.phpt b/ext/xml/tests/utf8_encode_error.phpt
new file mode 100644
index 000000000..ebc7dd29c
--- /dev/null
+++ b/ext/xml/tests/utf8_encode_error.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test utf8_encode() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto string utf8_encode(string data)
+ * Description: Encodes an ISO-8859-1 string to UTF-8
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing utf8_encode() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing utf8_encode() function with Zero arguments --\n";
+var_dump( utf8_encode() );
+
+//Test utf8_encode with one more than the expected number of arguments
+echo "\n-- Testing utf8_encode() function with more than expected no. of arguments --\n";
+$data = 'string_val';
+$extra_arg = 10;
+var_dump( utf8_encode($data, $extra_arg) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing utf8_encode() : error conditions ***
+
+-- Testing utf8_encode() function with Zero arguments --
+
+Warning: Wrong parameter count for utf8_encode() in %s on line %d
+NULL
+
+-- Testing utf8_encode() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for utf8_encode() in %s on line %d
+NULL
+Done
diff --git a/ext/xml/tests/utf8_encode_variation1.phpt b/ext/xml/tests/utf8_encode_variation1.phpt
new file mode 100644
index 000000000..3bb92afe2
--- /dev/null
+++ b/ext/xml/tests/utf8_encode_variation1.phpt
@@ -0,0 +1,165 @@
+--TEST--
+Test utf8_encode() function : usage variations - <type here specifics of this variation>
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto string utf8_encode(string data)
+ * Description: Encodes an ISO-8859-1 string to UTF-8
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing utf8_encode() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+
+// Initialise function arguments not being substituted (if any)
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // object data
+ new aClass(),
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for data
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( utf8_encode($value) );
+};
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing utf8_encode() : usage variations ***
+
+Arg value 0
+string(1) "0"
+
+Arg value 1
+string(1) "1"
+
+Arg value 12345
+string(5) "12345"
+
+Arg value -2345
+string(5) "-2345"
+
+Arg value 10.5
+string(4) "10.5"
+
+Arg value -10.5
+string(5) "-10.5"
+
+Arg value 101234567000
+string(12) "101234567000"
+
+Arg value 1.07654321E-9
+string(13) "1.07654321E-9"
+
+Arg value 0.5
+string(3) "0.5"
+
+Arg value Array
+string(5) "Array"
+
+Arg value Array
+string(5) "Array"
+
+Arg value Array
+string(5) "Array"
+
+Arg value Array
+string(5) "Array"
+
+Arg value Array
+string(5) "Array"
+
+Arg value
+string(0) ""
+
+Arg value
+string(0) ""
+
+Arg value 1
+string(1) "1"
+
+Arg value
+string(0) ""
+
+Arg value 1
+string(1) "1"
+
+Arg value
+string(0) ""
+
+Arg value
+string(0) ""
+
+Arg value
+string(0) ""
+
+Arg value Some Ascii Data
+string(15) "Some Ascii Data"
+
+Arg value
+string(0) ""
+
+Arg value
+string(0) ""
+Done
diff --git a/ext/xml/tests/xml_error_string_error.phpt b/ext/xml/tests/xml_error_string_error.phpt
new file mode 100644
index 000000000..4c8f25476
--- /dev/null
+++ b/ext/xml/tests/xml_error_string_error.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test xml_error_string() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto string xml_error_string(int code)
+ * Description: Get XML parser error string
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_error_string() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing xml_error_string() function with Zero arguments --\n";
+var_dump( xml_error_string() );
+
+//Test xml_error_string with one more than the expected number of arguments
+echo "\n-- Testing xml_error_string() function with more than expected no. of arguments --\n";
+$code = 10;
+$extra_arg = 10;
+var_dump( xml_error_string($code, $extra_arg) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_error_string() : error conditions ***
+
+-- Testing xml_error_string() function with Zero arguments --
+
+Warning: Wrong parameter count for xml_error_string() in %s on line %d
+NULL
+
+-- Testing xml_error_string() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_error_string() in %s on line %d
+NULL
+Done
diff --git a/ext/xml/tests/xml_error_string_variation1.phpt b/ext/xml/tests/xml_error_string_variation1.phpt
new file mode 100644
index 000000000..434cf5b55
--- /dev/null
+++ b/ext/xml/tests/xml_error_string_variation1.phpt
@@ -0,0 +1,157 @@
+--TEST--
+Test xml_error_string() function : usage variations - test different types for code
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto string xml_error_string(int code)
+ * Description: Get XML parser error string
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_error_string() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+
+// Initialise function arguments not being substituted (if any)
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//array of values to iterate over
+$values = array(
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new aClass(),
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for code
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_error_string($value) );
+};
+
+echo "Done";
+?>
+--EXPECT--
+*** Testing xml_error_string() : usage variations ***
+
+Arg value 10.5
+string(22) "XML_ERR_CHARREF_AT_EOF"
+
+Arg value -10.5
+string(7) "Unknown"
+
+Arg value 101234567000
+string(7) "Unknown"
+
+Arg value 1.07654321E-9
+string(8) "No error"
+
+Arg value 0.5
+string(8) "No error"
+
+Arg value Array
+string(8) "No error"
+
+Arg value Array
+string(9) "No memory"
+
+Arg value Array
+string(9) "No memory"
+
+Arg value Array
+string(9) "No memory"
+
+Arg value Array
+string(9) "No memory"
+
+Arg value
+string(8) "No error"
+
+Arg value
+string(8) "No error"
+
+Arg value 1
+string(9) "No memory"
+
+Arg value
+string(8) "No error"
+
+Arg value 1
+string(9) "No memory"
+
+Arg value
+string(8) "No error"
+
+Arg value
+string(8) "No error"
+
+Arg value
+string(8) "No error"
+
+Arg value string
+string(8) "No error"
+
+Arg value string
+string(8) "No error"
+
+Arg value Some Ascii Data
+string(9) "No memory"
+
+Arg value
+string(8) "No error"
+
+Arg value
+string(8) "No error"
+Done
diff --git a/ext/xml/tests/xml_get_current_byte_index_error.phpt b/ext/xml/tests/xml_get_current_byte_index_error.phpt
new file mode 100644
index 000000000..d9001e65b
--- /dev/null
+++ b/ext/xml/tests/xml_get_current_byte_index_error.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test xml_get_current_byte_index() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_get_current_byte_index(resource parser)
+ * Description: Get current byte index for an XML parser
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_get_current_byte_index() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing xml_get_current_byte_index() function with Zero arguments --\n";
+var_dump( xml_get_current_byte_index() );
+
+//Test xml_get_current_byte_index with one more than the expected number of arguments
+echo "\n-- Testing xml_get_current_byte_index() function with more than expected no. of arguments --\n";
+
+$extra_arg = 10;
+var_dump( xml_get_current_byte_index(null, $extra_arg) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_get_current_byte_index() : error conditions ***
+
+-- Testing xml_get_current_byte_index() function with Zero arguments --
+
+Warning: Wrong parameter count for xml_get_current_byte_index() in %s on line %d
+NULL
+
+-- Testing xml_get_current_byte_index() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_get_current_byte_index() in %s on line %d
+NULL
+Done \ No newline at end of file
diff --git a/ext/xml/tests/xml_get_current_byte_index_variation1.phpt b/ext/xml/tests/xml_get_current_byte_index_variation1.phpt
new file mode 100644
index 000000000..2c0df15e1
--- /dev/null
+++ b/ext/xml/tests/xml_get_current_byte_index_variation1.phpt
@@ -0,0 +1,239 @@
+--TEST--
+Test xml_get_current_byte_index() function : usage variations - <type here specifics of this variation>
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_get_current_byte_index(resource parser)
+ * Description: Get current byte index for an XML parser
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_get_current_byte_index() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+// Initialise function arguments not being substituted (if any)
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$fp = fopen(__FILE__, "r");
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new aClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for parser
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_get_current_byte_index($value) );
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_get_current_byte_index() : usage variations ***
+
+Arg value 0
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 12345
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Some Ascii Data
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Resource id %s
+
+Warning: xml_get_current_byte_index(): supplied resource is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_byte_index(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+Done
diff --git a/ext/xml/tests/xml_get_current_column_number_error.phpt b/ext/xml/tests/xml_get_current_column_number_error.phpt
new file mode 100644
index 000000000..5d47c4cd1
--- /dev/null
+++ b/ext/xml/tests/xml_get_current_column_number_error.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test xml_get_current_column_number() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_get_current_column_number(resource parser)
+ * Description: Get current column number for an XML parser
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_get_current_column_number() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing xml_get_current_column_number() function with Zero arguments --\n";
+var_dump( xml_get_current_column_number() );
+
+//Test xml_get_current_column_number with one more than the expected number of arguments
+echo "\n-- Testing xml_get_current_column_number() function with more than expected no. of arguments --\n";
+
+$extra_arg = 10;
+var_dump( xml_get_current_column_number(null, $extra_arg) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_get_current_column_number() : error conditions ***
+
+-- Testing xml_get_current_column_number() function with Zero arguments --
+
+Warning: Wrong parameter count for xml_get_current_column_number() in %s on line %d
+NULL
+
+-- Testing xml_get_current_column_number() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_get_current_column_number() in %s on line %d
+NULL
+Done
diff --git a/ext/xml/tests/xml_get_current_column_number_variation1.phpt b/ext/xml/tests/xml_get_current_column_number_variation1.phpt
new file mode 100644
index 000000000..babc16c64
--- /dev/null
+++ b/ext/xml/tests/xml_get_current_column_number_variation1.phpt
@@ -0,0 +1,240 @@
+--TEST--
+Test xml_get_current_column_number() function : usage variations
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_get_current_column_number(resource parser)
+ * Description: Get current column number for an XML parser
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+
+echo "*** Testing xml_get_current_column_number() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+// Initialise function arguments not being substituted (if any)
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$fp = fopen(__FILE__, "r");
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new aClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for parser
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_get_current_column_number($value) );
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_get_current_column_number() : usage variations ***
+
+Arg value 0
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 12345
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Some Ascii Data
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Resource id %s
+
+Warning: xml_get_current_column_number(): supplied resource is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_column_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+Done
diff --git a/ext/xml/tests/xml_get_current_line_number_error.phpt b/ext/xml/tests/xml_get_current_line_number_error.phpt
new file mode 100644
index 000000000..7c8e24490
--- /dev/null
+++ b/ext/xml/tests/xml_get_current_line_number_error.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test xml_get_current_line_number() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_get_current_line_number(resource parser)
+ * Description: Get current line number for an XML parser
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_get_current_line_number() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing xml_get_current_line_number() function with Zero arguments --\n";
+var_dump( xml_get_current_line_number() );
+
+//Test xml_get_current_line_number with one more than the expected number of arguments
+echo "\n-- Testing xml_get_current_line_number() function with more than expected no. of arguments --\n";
+
+$extra_arg = 10;
+var_dump( xml_get_current_line_number(null, $extra_arg) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_get_current_line_number() : error conditions ***
+
+-- Testing xml_get_current_line_number() function with Zero arguments --
+
+Warning: Wrong parameter count for xml_get_current_line_number() in %s on line %d
+NULL
+
+-- Testing xml_get_current_line_number() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_get_current_line_number() in %s on line %d
+NULL
+Done
diff --git a/ext/xml/tests/xml_get_current_line_number_variation1.phpt b/ext/xml/tests/xml_get_current_line_number_variation1.phpt
new file mode 100644
index 000000000..c13fd5488
--- /dev/null
+++ b/ext/xml/tests/xml_get_current_line_number_variation1.phpt
@@ -0,0 +1,239 @@
+--TEST--
+Test xml_get_current_line_number() function : usage variations
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_get_current_line_number(resource parser)
+ * Description: Get current line number for an XML parser
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_get_current_line_number() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+// Initialise function arguments not being substituted (if any)
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$fp = fopen(__FILE__, "r");
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new aClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for parser
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_get_current_line_number($value) );
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_get_current_line_number() : usage variations ***
+
+Arg value 0
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 12345
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Some Ascii Data
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Resource id %s
+
+Warning: xml_get_current_line_number(): supplied resource is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_current_line_number(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+Done \ No newline at end of file
diff --git a/ext/xml/tests/xml_get_error_code_error.phpt b/ext/xml/tests/xml_get_error_code_error.phpt
new file mode 100644
index 000000000..7007a46fb
--- /dev/null
+++ b/ext/xml/tests/xml_get_error_code_error.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test xml_get_error_code() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_get_error_code(resource parser)
+ * Description: Get XML parser error code
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_get_error_code() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing xml_get_error_code() function with Zero arguments --\n";
+var_dump( xml_get_error_code() );
+
+//Test xml_get_error_code with one more than the expected number of arguments
+echo "\n-- Testing xml_get_error_code() function with more than expected no. of arguments --\n";
+
+$extra_arg = 10;
+var_dump( xml_get_error_code(null, $extra_arg) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_get_error_code() : error conditions ***
+
+-- Testing xml_get_error_code() function with Zero arguments --
+
+Warning: Wrong parameter count for xml_get_error_code() in %s on line %d
+NULL
+
+-- Testing xml_get_error_code() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_get_error_code() in %s on line %d
+NULL
+Done
diff --git a/ext/xml/tests/xml_get_error_code_variation1.phpt b/ext/xml/tests/xml_get_error_code_variation1.phpt
new file mode 100644
index 000000000..51a7aeed5
--- /dev/null
+++ b/ext/xml/tests/xml_get_error_code_variation1.phpt
@@ -0,0 +1,239 @@
+--TEST--
+Test xml_get_error_code() function : usage variations
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_get_error_code(resource parser)
+ * Description: Get XML parser error code
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_get_error_code() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+// Initialise function arguments not being substituted (if any)
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$fp = fopen(__FILE__, "r");
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new aClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for parser
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_get_error_code($value) );
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_get_error_code() : usage variations ***
+
+Arg value 0
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 12345
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Some Ascii Data
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Resource id %s
+
+Warning: xml_get_error_code(): supplied resource is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_get_error_code(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+Done
diff --git a/ext/xml/tests/xml_parse_error.phpt b/ext/xml/tests/xml_parse_error.phpt
new file mode 100644
index 000000000..82d01a43e
--- /dev/null
+++ b/ext/xml/tests/xml_parse_error.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test xml_parse() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_parse(resource parser, string data [, int isFinal])
+ * Description: Start parsing an XML document
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_parse() : error conditions ***\n";
+
+
+//Test xml_parse with one more than the expected number of arguments
+echo "\n-- Testing xml_parse() function with more than expected no. of arguments --\n";
+
+$data = 'string_val';
+$isFinal = false;
+$extra_arg = 10;
+var_dump( xml_parse(null, $data, $isFinal, $extra_arg) );
+
+// Testing xml_parse with one less than the expected number of arguments
+echo "\n-- Testing xml_parse() function with less than expected no. of arguments --\n";
+
+var_dump( xml_parse(null) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_parse() : error conditions ***
+
+-- Testing xml_parse() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_parse() in %s on line %d
+NULL
+
+-- Testing xml_parse() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_parse() in %s on line %d
+NULL
+Done
diff --git a/ext/xml/tests/xml_parse_into_struct_error.phpt b/ext/xml/tests/xml_parse_into_struct_error.phpt
new file mode 100644
index 000000000..c2512f6a0
--- /dev/null
+++ b/ext/xml/tests/xml_parse_into_struct_error.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Test xml_parse_into_struct() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_parse_into_struct(resource parser, string data, array &struct, array &index)
+ * Description: Parsing a XML document
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_parse_into_struct() : error conditions ***\n";
+
+//Test xml_parse_into_struct with one more than the expected number of arguments
+echo "\n-- Testing xml_parse_into_struct() function with more than expected no. of arguments --\n";
+
+$data = 'string_val';
+$struct = array(1, 2);
+$index = array(1, 2);
+$extra_arg = 10;
+var_dump( xml_parse_into_struct(null, $data, $struct, $index, $extra_arg) );
+
+// Testing xml_parse_into_struct with one less than the expected number of arguments
+echo "\n-- Testing xml_parse_into_struct() function with less than expected no. of arguments --\n";
+
+$data = 'string_val';
+var_dump( xml_parse_into_struct(null, $data) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_parse_into_struct() : error conditions ***
+
+-- Testing xml_parse_into_struct() function with more than expected no. of arguments --
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+-- Testing xml_parse_into_struct() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_parse_into_struct() in %s on line %d
+NULL
+Done \ No newline at end of file
diff --git a/ext/xml/tests/xml_parse_into_struct_variation.phpt b/ext/xml/tests/xml_parse_into_struct_variation.phpt
new file mode 100644
index 000000000..a353e5141
--- /dev/null
+++ b/ext/xml/tests/xml_parse_into_struct_variation.phpt
@@ -0,0 +1,120 @@
+--TEST--
+Test xml_parse_into_struct() function : variation
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_parse_into_struct(resource parser, string data, array &struct, array &index)
+ * Description: Parsing a XML document
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_parse_into_struct() : variation ***\n";
+
+$simple = "<main><para><note>simple note</note></para><para><note>simple note</note></para></main>";
+$p = xml_parser_create();
+xml_parse_into_struct($p, $simple, $vals, $index);
+xml_parser_free($p);
+echo "Index array\n";
+print_r($index);
+echo "\nVals array\n";
+print_r($vals);
+
+
+echo "Done";
+?>
+--EXPECT--
+*** Testing xml_parse_into_struct() : variation ***
+Index array
+Array
+(
+ [MAIN] => Array
+ (
+ [0] => 0
+ [1] => 7
+ )
+
+ [PARA] => Array
+ (
+ [0] => 1
+ [1] => 3
+ [2] => 4
+ [3] => 6
+ )
+
+ [NOTE] => Array
+ (
+ [0] => 2
+ [1] => 5
+ )
+
+)
+
+Vals array
+Array
+(
+ [0] => Array
+ (
+ [tag] => MAIN
+ [type] => open
+ [level] => 1
+ )
+
+ [1] => Array
+ (
+ [tag] => PARA
+ [type] => open
+ [level] => 2
+ )
+
+ [2] => Array
+ (
+ [tag] => NOTE
+ [type] => complete
+ [level] => 3
+ [value] => simple note
+ )
+
+ [3] => Array
+ (
+ [tag] => PARA
+ [type] => close
+ [level] => 2
+ )
+
+ [4] => Array
+ (
+ [tag] => PARA
+ [type] => open
+ [level] => 2
+ )
+
+ [5] => Array
+ (
+ [tag] => NOTE
+ [type] => complete
+ [level] => 3
+ [value] => simple note
+ )
+
+ [6] => Array
+ (
+ [tag] => PARA
+ [type] => close
+ [level] => 2
+ )
+
+ [7] => Array
+ (
+ [tag] => MAIN
+ [type] => close
+ [level] => 1
+ )
+
+)
+Done \ No newline at end of file
diff --git a/ext/xml/tests/xml_parse_into_struct_variation1.phpt b/ext/xml/tests/xml_parse_into_struct_variation1.phpt
new file mode 100644
index 000000000..2ce679e5c
--- /dev/null
+++ b/ext/xml/tests/xml_parse_into_struct_variation1.phpt
@@ -0,0 +1,240 @@
+--TEST--
+Test xml_parse_into_struct() function : usage variations - different types for parser
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_parse_into_struct(resource parser, string data, array &struct, array &index)
+ * Description: Parsing a XML document
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_parse_into_struct() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+// Initialise function arguments not being substituted (if any)
+$data = 'string_val';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$fp = fopen(__FILE__, "r");
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new aClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for parser
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_parse_into_struct($value, $data, $struct, $index) );
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_parse_into_struct() : usage variations ***
+
+Arg value 0
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 12345
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Some Ascii Data
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Resource id %s
+
+Warning: xml_parse_into_struct(): supplied resource is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parse_into_struct(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+Done
diff --git a/ext/xml/tests/xml_parse_variation1.phpt b/ext/xml/tests/xml_parse_variation1.phpt
new file mode 100644
index 000000000..3ea494a6f
--- /dev/null
+++ b/ext/xml/tests/xml_parse_variation1.phpt
@@ -0,0 +1,241 @@
+--TEST--
+Test xml_parse() function : usage variations - different types of parser
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_parse(resource parser, string data [, int isFinal])
+ * Description: Start parsing an XML document
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_parse() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+// Initialise function arguments not being substituted (if any)
+$data = 'string_val';
+$isFinal = 10;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$fp = fopen(__FILE__, "r");
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new aClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for parser
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_parse($value, $data, $isFinal) );
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_parse() : usage variations ***
+
+Arg value 0
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 12345
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Some Ascii Data
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Resource id %s
+
+Warning: xml_parse(): supplied resource is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parse(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+Done
diff --git a/ext/xml/tests/xml_parser_create_error.phpt b/ext/xml/tests/xml_parser_create_error.phpt
new file mode 100644
index 000000000..571350e87
--- /dev/null
+++ b/ext/xml/tests/xml_parser_create_error.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test xml_parser_create() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto resource xml_parser_create([string encoding])
+ * Description: Create an XML parser
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_parser_create() : error conditions ***\n";
+
+
+//Test xml_parser_create with one more than the expected number of arguments
+echo "\n-- Testing xml_parser_create() function with more than expected no. of arguments --\n";
+$encoding = 'utf-8';
+$extra_arg = 10;
+var_dump( xml_parser_create($encoding, $extra_arg) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_parser_create() : error conditions ***
+
+-- Testing xml_parser_create() function with more than expected no. of arguments --
+
+Warning: xml_parser_create() expects at most 1 parameter, 2 given in %s on line %d
+bool(false)
+Done
diff --git a/ext/xml/tests/xml_parser_create_ns_error.phpt b/ext/xml/tests/xml_parser_create_ns_error.phpt
new file mode 100644
index 000000000..fd50f2948
--- /dev/null
+++ b/ext/xml/tests/xml_parser_create_ns_error.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test xml_parser_create_ns() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto resource xml_parser_create_ns([string encoding [, string sep]])
+ * Description: Create an XML parser
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_parser_create_ns() : error conditions ***\n";
+
+
+//Test xml_parser_create_ns with one more than the expected number of arguments
+echo "\n-- Testing xml_parser_create_ns() function with more than expected no. of arguments --\n";
+$encoding = 'string_val';
+$sep = 'string_val';
+$extra_arg = 10;
+var_dump( xml_parser_create_ns($encoding, $sep, $extra_arg) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_parser_create_ns() : error conditions ***
+
+-- Testing xml_parser_create_ns() function with more than expected no. of arguments --
+
+Warning: xml_parser_create_ns() expects at most 2 parameters, 3 given in %s on line %d
+bool(false)
+Done \ No newline at end of file
diff --git a/ext/xml/tests/xml_parser_create_ns_variation1.phpt b/ext/xml/tests/xml_parser_create_ns_variation1.phpt
new file mode 100644
index 000000000..5446a4f3e
--- /dev/null
+++ b/ext/xml/tests/xml_parser_create_ns_variation1.phpt
@@ -0,0 +1,245 @@
+--TEST--
+Test xml_parser_create_ns() function : usage variations
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto resource xml_parser_create_ns([string encoding [, string sep]])
+ * Description: Create an XML parser
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_parser_create_ns() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+// Initialise function arguments not being substituted (if any)
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$fp = fopen(__FILE__, "r");
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+ "ISO-8859-1",
+ "UTF-8",
+ "US-ASCII",
+ "UTF-32",
+
+ // object data
+ new aClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for encoding
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ $res = xml_parser_create_ns($value);
+ var_dump($res);
+ if ($res !== false) {
+ xml_parser_free($res);
+ }
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_parser_create_ns() : usage variations ***
+
+Arg value 0
+
+Warning: xml_parser_create_ns(): unsupported source encoding "0" in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_parser_create_ns(): unsupported source encoding "1" in %s on line %d
+bool(false)
+
+Arg value 12345
+
+Warning: xml_parser_create_ns(): unsupported source encoding "12345" in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_parser_create_ns(): unsupported source encoding "-2345" in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_parser_create_ns(): unsupported source encoding "10.5" in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_parser_create_ns(): unsupported source encoding "-10.5" in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_parser_create_ns(): unsupported source encoding "101234567000" in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_parser_create_ns(): unsupported source encoding "1.07654321E-9" in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_parser_create_ns(): unsupported source encoding "0.5" in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_create_ns() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_create_ns() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_create_ns() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_create_ns() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_create_ns() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Arg value
+resource(%d) of type (xml)
+
+Arg value
+resource(%d) of type (xml)
+
+Arg value 1
+
+Warning: xml_parser_create_ns(): unsupported source encoding "1" in %s on line %d
+bool(false)
+
+Arg value
+resource(%d) of type (xml)
+
+Arg value 1
+
+Warning: xml_parser_create_ns(): unsupported source encoding "1" in %s on line %d
+bool(false)
+
+Arg value
+resource(%d) of type (xml)
+
+Arg value
+resource(%d) of type (xml)
+
+Arg value
+resource(%d) of type (xml)
+
+Arg value string
+
+Warning: xml_parser_create_ns(): unsupported source encoding "string" in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_parser_create_ns(): unsupported source encoding "string" in %s on line %d
+bool(false)
+
+Arg value ISO-8859-1
+resource(%d) of type (xml)
+
+Arg value UTF-8
+resource(%d) of type (xml)
+
+Arg value US-ASCII
+resource(%d) of type (xml)
+
+Arg value UTF-32
+
+Warning: xml_parser_create_ns(): unsupported source encoding "UTF-32" in %s on line %d
+bool(false)
+
+Arg value Some Ascii Data
+
+Warning: xml_parser_create_ns(): unsupported source encoding "Some Ascii Data" in %s on line %d
+bool(false)
+
+Arg value Resource id %s
+
+Warning: xml_parser_create_ns() expects parameter 1 to be string, resource given in %s on line %d
+bool(false)
+
+Arg value
+resource(%d) of type (xml)
+
+Arg value
+resource(%d) of type (xml)
+Done
diff --git a/ext/xml/tests/xml_parser_create_variation1.phpt b/ext/xml/tests/xml_parser_create_variation1.phpt
new file mode 100644
index 000000000..445b40d08
--- /dev/null
+++ b/ext/xml/tests/xml_parser_create_variation1.phpt
@@ -0,0 +1,245 @@
+--TEST--
+Test xml_parser_create() function : usage variations
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto resource xml_parser_create([string encoding])
+ * Description: Create an XML parser
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_parser_create() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+// Initialise function arguments not being substituted (if any)
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$fp = fopen(__FILE__, "r");
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+ "ISO-8859-1",
+ "UTF-8",
+ "US-ASCII",
+ "UTF-32",
+
+ // object data
+ new aClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for encoding
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ $res = xml_parser_create($value);
+ var_dump($res);
+ if ($res !== false) {
+ xml_parser_free($res);
+ }
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_parser_create() : usage variations ***
+
+Arg value 0
+
+Warning: xml_parser_create(): unsupported source encoding "0" in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_parser_create(): unsupported source encoding "1" in %s on line %d
+bool(false)
+
+Arg value 12345
+
+Warning: xml_parser_create(): unsupported source encoding "12345" in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_parser_create(): unsupported source encoding "-2345" in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_parser_create(): unsupported source encoding "10.5" in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_parser_create(): unsupported source encoding "-10.5" in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_parser_create(): unsupported source encoding "101234567000" in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_parser_create(): unsupported source encoding "1.07654321E-9" in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_parser_create(): unsupported source encoding "0.5" in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_create() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_create() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_create() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_create() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_create() expects parameter 1 to be string, array given in %s on line %d
+bool(false)
+
+Arg value
+resource(%d) of type (xml)
+
+Arg value
+resource(%d) of type (xml)
+
+Arg value 1
+
+Warning: xml_parser_create(): unsupported source encoding "1" in %s on line %d
+bool(false)
+
+Arg value
+resource(%d) of type (xml)
+
+Arg value 1
+
+Warning: xml_parser_create(): unsupported source encoding "1" in %s on line %d
+bool(false)
+
+Arg value
+resource(%d) of type (xml)
+
+Arg value
+resource(%d) of type (xml)
+
+Arg value
+resource(%d) of type (xml)
+
+Arg value string
+
+Warning: xml_parser_create(): unsupported source encoding "string" in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_parser_create(): unsupported source encoding "string" in %s on line %d
+bool(false)
+
+Arg value ISO-8859-1
+resource(%d) of type (xml)
+
+Arg value UTF-8
+resource(%d) of type (xml)
+
+Arg value US-ASCII
+resource(%d) of type (xml)
+
+Arg value UTF-32
+
+Warning: xml_parser_create(): unsupported source encoding "UTF-32" in %s on line %d
+bool(false)
+
+Arg value Some Ascii Data
+
+Warning: xml_parser_create(): unsupported source encoding "Some Ascii Data" in %s on line %d
+bool(false)
+
+Arg value Resource id %s
+
+Warning: xml_parser_create() expects parameter 1 to be string, resource given in %s on line %d
+bool(false)
+
+Arg value
+resource(%d) of type (xml)
+
+Arg value
+resource(%d) of type (xml)
+Done \ No newline at end of file
diff --git a/ext/xml/tests/xml_parser_free_error.phpt b/ext/xml/tests/xml_parser_free_error.phpt
new file mode 100644
index 000000000..a28940ae5
--- /dev/null
+++ b/ext/xml/tests/xml_parser_free_error.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test xml_parser_free() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_parser_free(resource parser)
+ * Description: Free an XML parser
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_parser_free() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing xml_parser_free() function with Zero arguments --\n";
+var_dump( xml_parser_free() );
+
+//Test xml_parser_free with one more than the expected number of arguments
+echo "\n-- Testing xml_parser_free() function with more than expected no. of arguments --\n";
+
+$extra_arg = 10;
+var_dump( xml_parser_free(null, $extra_arg) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_parser_free() : error conditions ***
+
+-- Testing xml_parser_free() function with Zero arguments --
+
+Warning: Wrong parameter count for xml_parser_free() in %s on line %d
+NULL
+
+-- Testing xml_parser_free() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_parser_free() in %s on line %d
+NULL
+Done
diff --git a/ext/xml/tests/xml_parser_free_variation1.phpt b/ext/xml/tests/xml_parser_free_variation1.phpt
new file mode 100644
index 000000000..b6feadd99
--- /dev/null
+++ b/ext/xml/tests/xml_parser_free_variation1.phpt
@@ -0,0 +1,239 @@
+--TEST--
+Test xml_parser_free() function : usage variations
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_parser_free(resource parser)
+ * Description: Free an XML parser
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_parser_free() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+// Initialise function arguments not being substituted (if any)
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$fp = fopen(__FILE__, "r");
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new aClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for parser
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_parser_free($value) );
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_parser_free() : usage variations ***
+
+Arg value 0
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 12345
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Some Ascii Data
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Resource id %s
+
+Warning: xml_parser_free(): supplied resource is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_free(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+Done
diff --git a/ext/xml/tests/xml_parser_get_option_error.phpt b/ext/xml/tests/xml_parser_get_option_error.phpt
new file mode 100644
index 000000000..354329f7e
--- /dev/null
+++ b/ext/xml/tests/xml_parser_get_option_error.phpt
@@ -0,0 +1,45 @@
+--TEST--
+Test xml_parser_get_option() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_parser_get_option(resource parser, int option)
+ * Description: Get options from an XML parser
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_parser_get_option() : error conditions ***\n";
+
+
+//Test xml_parser_get_option with one more than the expected number of arguments
+echo "\n-- Testing xml_parser_get_option() function with more than expected no. of arguments --\n";
+
+$option = 10;
+$extra_arg = 10;
+var_dump( xml_parser_get_option(null, $option, $extra_arg) );
+
+// Testing xml_parser_get_option with one less than the expected number of arguments
+echo "\n-- Testing xml_parser_get_option() function with less than expected no. of arguments --\n";
+
+var_dump( xml_parser_get_option(null) );
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_parser_get_option() : error conditions ***
+
+-- Testing xml_parser_get_option() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_parser_get_option() in %s on line %d
+NULL
+
+-- Testing xml_parser_get_option() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_parser_get_option() in %s on line %d
+NULL
+Done
diff --git a/ext/xml/tests/xml_parser_get_option_variation1.phpt b/ext/xml/tests/xml_parser_get_option_variation1.phpt
new file mode 100644
index 000000000..8d16e742a
--- /dev/null
+++ b/ext/xml/tests/xml_parser_get_option_variation1.phpt
@@ -0,0 +1,240 @@
+--TEST--
+Test xml_parser_get_option() function : usage variations
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_parser_get_option(resource parser, int option)
+ * Description: Get options from an XML parser
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_parser_get_option() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+// Initialise function arguments not being substituted (if any)
+$option = 10;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$fp = fopen(__FILE__, "r");
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new aClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for parser
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_parser_get_option($value, $option) );
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_parser_get_option() : usage variations ***
+
+Arg value 0
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 12345
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Some Ascii Data
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Resource id %s
+
+Warning: xml_parser_get_option(): supplied resource is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_get_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+Done
diff --git a/ext/xml/tests/xml_parser_get_option_variation2.phpt b/ext/xml/tests/xml_parser_get_option_variation2.phpt
new file mode 100644
index 000000000..4d6d9924a
--- /dev/null
+++ b/ext/xml/tests/xml_parser_get_option_variation2.phpt
@@ -0,0 +1,215 @@
+--TEST--
+Test xml_parser_get_option() function : usage variations
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_parser_get_option(resource parser, int option)
+ * Description: Get options from an XML parser
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_parser_get_option() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+// Initialise function arguments not being substituted (if any)
+$parser = xml_parser_create();
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$fp = fopen(__FILE__, "r");
+
+//array of values to iterate over
+$values = array(
+
+ // outside of range int data
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new aClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for option
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_parser_get_option($parser, $value) );
+};
+
+fclose($fp);
+xml_parser_free($parser);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_parser_get_option() : usage variations ***
+
+Arg value 12345
+
+Warning: xml_parser_get_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_parser_get_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_parser_get_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_parser_get_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_parser_get_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_parser_get_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_parser_get_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_get_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value Array
+int(1)
+
+Arg value Array
+int(1)
+
+Arg value Array
+int(1)
+
+Arg value Array
+int(1)
+
+Arg value
+
+Warning: xml_parser_get_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_get_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value 1
+int(1)
+
+Arg value
+
+Warning: xml_parser_get_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value 1
+int(1)
+
+Arg value
+
+Warning: xml_parser_get_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_get_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_get_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_parser_get_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_parser_get_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value Some Ascii Data
+int(1)
+
+Arg value Resource id %s
+
+Warning: xml_parser_get_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_get_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_get_option(): Unknown option in %s on line %d
+bool(false)
+Done
diff --git a/ext/xml/tests/xml_parser_set_option_basic.phpt b/ext/xml/tests/xml_parser_set_option_basic.phpt
new file mode 100644
index 000000000..61316a4b0
--- /dev/null
+++ b/ext/xml/tests/xml_parser_set_option_basic.phpt
@@ -0,0 +1,57 @@
+--TEST--
+Test xml_set_notation_decl_handler function : basic
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto bool xml_set_notation_decl_handler ( resource $parser , callback $handler )
+ * Description: Sets the notation declaration handler function for the XML parser.
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "Simple testcase for xml_parser_get_option() function\n";
+
+$parser = xml_parser_create_ns();
+
+var_dump(xml_parser_get_option($parser, XML_OPTION_CASE_FOLDING));
+var_dump(xml_parser_get_option($parser, XML_OPTION_TARGET_ENCODING));
+
+var_dump(xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 1));
+var_dump(xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "ISO-8859-1"));
+
+var_dump(xml_parser_get_option($parser, XML_OPTION_CASE_FOLDING));
+var_dump(xml_parser_get_option($parser, XML_OPTION_TARGET_ENCODING));
+
+var_dump(xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0));
+var_dump(xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8"));
+
+var_dump(xml_parser_get_option($parser, XML_OPTION_CASE_FOLDING));
+var_dump(xml_parser_get_option($parser, XML_OPTION_TARGET_ENCODING));
+
+var_dump(xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "US-ASCII"));
+var_dump(xml_parser_get_option($parser, XML_OPTION_TARGET_ENCODING));
+
+xml_parser_free( $parser );
+
+echo "Done\n";
+?>
+--EXPECT--
+Simple testcase for xml_parser_get_option() function
+int(1)
+string(5) "UTF-8"
+bool(true)
+bool(true)
+int(1)
+string(10) "ISO-8859-1"
+bool(true)
+bool(true)
+int(0)
+string(5) "UTF-8"
+bool(true)
+string(8) "US-ASCII"
+Done
diff --git a/ext/xml/tests/xml_parser_set_option_error.phpt b/ext/xml/tests/xml_parser_set_option_error.phpt
new file mode 100644
index 000000000..6b2b426f1
--- /dev/null
+++ b/ext/xml/tests/xml_parser_set_option_error.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Test xml_parser_set_option() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_parser_set_option(resource parser, int option, mixed value)
+ * Description: Set options in an XML parser
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_parser_set_option() : error conditions ***\n";
+
+
+//Test xml_parser_set_option with one more than the expected number of arguments
+echo "\n-- Testing xml_parser_set_option() function with more than expected no. of arguments --\n";
+
+$option = 10;
+$value = 1;
+$extra_arg = 10;
+var_dump( xml_parser_set_option(null, $option, $value, $extra_arg) );
+
+// Testing xml_parser_set_option with one less than the expected number of arguments
+echo "\n-- Testing xml_parser_set_option() function with less than expected no. of arguments --\n";
+
+$option = 10;
+var_dump( xml_parser_set_option(null, $option) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_parser_set_option() : error conditions ***
+
+-- Testing xml_parser_set_option() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_parser_set_option() in %s on line %d
+NULL
+
+-- Testing xml_parser_set_option() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_parser_set_option() in %s on line %d
+NULL
+Done
diff --git a/ext/xml/tests/xml_parser_set_option_variation1.phpt b/ext/xml/tests/xml_parser_set_option_variation1.phpt
new file mode 100644
index 000000000..90058bf7f
--- /dev/null
+++ b/ext/xml/tests/xml_parser_set_option_variation1.phpt
@@ -0,0 +1,240 @@
+--TEST--
+Test xml_parser_set_option() function : usage variations
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_parser_set_option(resource parser, int option, mixed value)
+ * Description: Set options in an XML parser
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_parser_set_option() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+// Initialise function arguments not being substituted (if any)
+$option = 10;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$fp = fopen(__FILE__, "r");
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new aClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for parser
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_parser_set_option($value, $option, 1) );
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_parser_set_option() : usage variations ***
+
+Arg value 0
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 12345
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Some Ascii Data
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Resource id %s
+
+Warning: xml_parser_set_option(): supplied resource is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_set_option(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+Done
diff --git a/ext/xml/tests/xml_parser_set_option_variation2.phpt b/ext/xml/tests/xml_parser_set_option_variation2.phpt
new file mode 100644
index 000000000..93d87a6f7
--- /dev/null
+++ b/ext/xml/tests/xml_parser_set_option_variation2.phpt
@@ -0,0 +1,204 @@
+--TEST--
+Test xml_parser_set_option() function : usage variations
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_parser_set_option(resource parser, int option, mixed value)
+ * Description: Set options in an XML parser
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_parser_set_option() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+// Initialise function arguments not being substituted (if any)
+$parser = xml_parser_create();
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//array of values to iterate over
+$values = array(
+
+ // outside of range int data
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new aClass(),
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for option
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_parser_set_option($parser, $value, 1) );
+};
+
+xml_parser_free($parser);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_parser_set_option() : usage variations ***
+
+Arg value 12345
+
+Warning: xml_parser_set_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_parser_set_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_parser_set_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_parser_set_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_parser_set_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_parser_set_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_parser_set_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_parser_set_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value Array
+bool(true)
+
+Arg value Array
+bool(true)
+
+Arg value Array
+bool(true)
+
+Arg value Array
+bool(true)
+
+Arg value
+
+Warning: xml_parser_set_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_set_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value 1
+bool(true)
+
+Arg value
+
+Warning: xml_parser_set_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value 1
+bool(true)
+
+Arg value
+
+Warning: xml_parser_set_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_set_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_set_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_parser_set_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_parser_set_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value Some Ascii Data
+bool(true)
+
+Arg value
+
+Warning: xml_parser_set_option(): Unknown option in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_parser_set_option(): Unknown option in %s on line %d
+bool(false)
+Done \ No newline at end of file
diff --git a/ext/xml/tests/xml_parser_set_option_variation3.phpt b/ext/xml/tests/xml_parser_set_option_variation3.phpt
new file mode 100644
index 000000000..5f9880390
--- /dev/null
+++ b/ext/xml/tests/xml_parser_set_option_variation3.phpt
@@ -0,0 +1,187 @@
+--TEST--
+Test xml_parser_set_option() function : usage variations
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_parser_set_option(resource parser, int option, mixed value)
+ * Description: Set options in an XML parser
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_parser_set_option() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+// Initialise function arguments not being substituted (if any)
+
+$parser = xml_parser_create();
+$option = 1;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$fp = fopen(__FILE__, "r");
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new aClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for value
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_parser_set_option($parser, $option, $value) );
+};
+
+fclose($fp);
+xml_parser_free($parser);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_parser_set_option() : usage variations ***
+
+Arg value 0
+bool(true)
+
+Arg value 1
+bool(true)
+
+Arg value 12345
+bool(true)
+
+Arg value -2345
+bool(true)
+
+Arg value 10.5
+bool(true)
+
+Arg value -10.5
+bool(true)
+
+Arg value 101234567000
+bool(true)
+
+Arg value 1.07654321E-9
+bool(true)
+
+Arg value 0.5
+bool(true)
+
+Arg value Array
+bool(true)
+
+Arg value Array
+bool(true)
+
+Arg value Array
+bool(true)
+
+Arg value Array
+bool(true)
+
+Arg value Array
+bool(true)
+
+Arg value
+bool(true)
+
+Arg value
+bool(true)
+
+Arg value 1
+bool(true)
+
+Arg value
+bool(true)
+
+Arg value 1
+bool(true)
+
+Arg value
+bool(true)
+
+Arg value
+bool(true)
+
+Arg value
+bool(true)
+
+Arg value string
+bool(true)
+
+Arg value string
+bool(true)
+
+Arg value Some Ascii Data
+bool(true)
+
+Arg value Resource id %s
+bool(true)
+
+Arg value
+bool(true)
+
+Arg value
+bool(true)
+Done
diff --git a/ext/xml/tests/xml_set_character_data_handler_error.phpt b/ext/xml/tests/xml_set_character_data_handler_error.phpt
new file mode 100644
index 000000000..23fb9a23c
--- /dev/null
+++ b/ext/xml/tests/xml_set_character_data_handler_error.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test xml_set_character_data_handler() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_set_character_data_handler(resource parser, string hdl)
+ * Description: Set up character data handler
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_set_character_data_handler() : error conditions ***\n";
+
+
+//Test xml_set_character_data_handler with one more than the expected number of arguments
+echo "\n-- Testing xml_set_character_data_handler() function with more than expected no. of arguments --\n";
+
+$hdl = 'string_val';
+$extra_arg = 10;
+var_dump( xml_set_character_data_handler(null, $hdl, $extra_arg) );
+
+// Testing xml_set_character_data_handler with one less than the expected number of arguments
+echo "\n-- Testing xml_set_character_data_handler() function with less than expected no. of arguments --\n";
+
+var_dump( xml_set_character_data_handler(null) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_set_character_data_handler() : error conditions ***
+
+-- Testing xml_set_character_data_handler() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_set_character_data_handler() in %s on line %d
+NULL
+
+-- Testing xml_set_character_data_handler() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_set_character_data_handler() in %s on line %d
+NULL
+Done
diff --git a/ext/xml/tests/xml_set_character_data_handler_variation1.phpt b/ext/xml/tests/xml_set_character_data_handler_variation1.phpt
new file mode 100644
index 000000000..060970011
--- /dev/null
+++ b/ext/xml/tests/xml_set_character_data_handler_variation1.phpt
@@ -0,0 +1,244 @@
+--TEST--
+Test xml_set_character_data_handler() function : usage variations
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_set_character_data_handler(resource parser, string hdl)
+ * Description: Set up character data handler
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_set_character_data_handler() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+
+function validHandler(resource $parser ,string $data) {
+}
+
+// Initialise function arguments not being substituted (if any)
+$hdl = 'validHandler';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$fp = fopen(__FILE__, "r");
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new aClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for parser
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_set_character_data_handler($value, $hdl) );
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_set_character_data_handler() : usage variations ***
+
+Arg value 0
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 12345
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Some Ascii Data
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Resource id %s
+
+Warning: xml_set_character_data_handler(): supplied resource is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_character_data_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+Done
diff --git a/ext/xml/tests/xml_set_default_handler_error.phpt b/ext/xml/tests/xml_set_default_handler_error.phpt
new file mode 100644
index 000000000..91d1c3da3
--- /dev/null
+++ b/ext/xml/tests/xml_set_default_handler_error.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test xml_set_default_handler() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_set_default_handler(resource parser, string hdl)
+ * Description: Set up default handler
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_set_default_handler() : error conditions ***\n";
+
+
+//Test xml_set_default_handler with one more than the expected number of arguments
+echo "\n-- Testing xml_set_default_handler() function with more than expected no. of arguments --\n";
+
+$hdl = 'string_val';
+$extra_arg = 10;
+var_dump( xml_set_default_handler(null, $hdl, $extra_arg) );
+
+// Testing xml_set_default_handler with one less than the expected number of arguments
+echo "\n-- Testing xml_set_default_handler() function with less than expected no. of arguments --\n";
+
+var_dump( xml_set_default_handler(null) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_set_default_handler() : error conditions ***
+
+-- Testing xml_set_default_handler() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_set_default_handler() in %s on line %d
+NULL
+
+-- Testing xml_set_default_handler() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_set_default_handler() in %s on line %d
+NULL
+Done
diff --git a/ext/xml/tests/xml_set_default_handler_variation1.phpt b/ext/xml/tests/xml_set_default_handler_variation1.phpt
new file mode 100644
index 000000000..77903f746
--- /dev/null
+++ b/ext/xml/tests/xml_set_default_handler_variation1.phpt
@@ -0,0 +1,244 @@
+--TEST--
+Test xml_set_default_handler() function : usage variations - test different types for parser
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_set_default_handler(resource parser, string hdl)
+ * Description: Set up default handler
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_set_default_handler() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+
+function validHandler(resource $parser ,string $data) {
+}
+
+// Initialise function arguments not being substituted (if any)
+$hdl = 'validHandler';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$fp = fopen(__FILE__, "r");
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new aClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for parser
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_set_default_handler($value, $hdl) );
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_set_default_handler() : usage variations ***
+
+Arg value 0
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 12345
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Some Ascii Data
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Resource id %s
+
+Warning: xml_set_default_handler(): supplied resource is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_default_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+Done
diff --git a/ext/xml/tests/xml_set_element_handler_error.phpt b/ext/xml/tests/xml_set_element_handler_error.phpt
new file mode 100644
index 000000000..a3315dc44
--- /dev/null
+++ b/ext/xml/tests/xml_set_element_handler_error.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test xml_set_element_handler() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_set_element_handler(resource parser, string shdl, string ehdl)
+ * Description: Set up start and end element handlers
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_set_element_handler() : error conditions ***\n";
+
+
+//Test xml_set_element_handler with one more than the expected number of arguments
+echo "\n-- Testing xml_set_element_handler() function with more than expected no. of arguments --\n";
+
+$hdl = 'string_val';
+$extra_arg = 10;
+var_dump( xml_set_element_handler(null, $hdl, $hdl, $extra_arg) );
+
+// Testing xml_set_element_handler with one less than the expected number of arguments
+echo "\n-- Testing xml_set_element_handler() function with less than expected no. of arguments --\n";
+
+var_dump( xml_set_element_handler(null) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_set_element_handler() : error conditions ***
+
+-- Testing xml_set_element_handler() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_set_element_handler() in %s on line %d
+NULL
+
+-- Testing xml_set_element_handler() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_set_element_handler() in %s on line %d
+NULL
+Done
diff --git a/ext/xml/tests/xml_set_element_handler_variation1.phpt b/ext/xml/tests/xml_set_element_handler_variation1.phpt
new file mode 100644
index 000000000..d2c318052
--- /dev/null
+++ b/ext/xml/tests/xml_set_element_handler_variation1.phpt
@@ -0,0 +1,244 @@
+--TEST--
+Test xml_set_element_handler() function : usage variations - test different types for parser
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_set_element_handler(resource parser, string shdl, string ehdl)
+ * Description: Set up start and end element handlers
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_set_element_handler() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+
+function validHandler(resource $parser ,string $data) {
+}
+
+// Initialise function arguments not being substituted (if any)
+$hdl = 'validHandler';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$fp = fopen(__FILE__, "r");
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new aClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for parser
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_set_element_handler($value, $hdl, $hdl) );
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_set_element_handler() : usage variations ***
+
+Arg value 0
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 12345
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Some Ascii Data
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Resource id %s
+
+Warning: xml_set_element_handler(): supplied resource is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_element_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+Done
diff --git a/ext/xml/tests/xml_set_end_namespace_decl_handler_error.phpt b/ext/xml/tests/xml_set_end_namespace_decl_handler_error.phpt
new file mode 100644
index 000000000..e6df90b7a
--- /dev/null
+++ b/ext/xml/tests/xml_set_end_namespace_decl_handler_error.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test xml_set_end_namespace_decl_handler() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_set_end_namespace_decl_handler(resource parser, string hdl)
+ * Description: Set up character data handler
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_set_end_namespace_decl_handler() : error conditions ***\n";
+
+
+//Test xml_set_end_namespace_decl_handler with one more than the expected number of arguments
+echo "\n-- Testing xml_set_end_namespace_decl_handler() function with more than expected no. of arguments --\n";
+
+$hdl = 'string_val';
+$extra_arg = 10;
+var_dump( xml_set_end_namespace_decl_handler(null, $hdl, $extra_arg) );
+
+// Testing xml_set_end_namespace_decl_handler with one less than the expected number of arguments
+echo "\n-- Testing xml_set_end_namespace_decl_handler() function with less than expected no. of arguments --\n";
+
+var_dump( xml_set_end_namespace_decl_handler(null) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_set_end_namespace_decl_handler() : error conditions ***
+
+-- Testing xml_set_end_namespace_decl_handler() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_set_end_namespace_decl_handler() in %s on line %d
+NULL
+
+-- Testing xml_set_end_namespace_decl_handler() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_set_end_namespace_decl_handler() in %s on line %d
+NULL
+Done
diff --git a/ext/xml/tests/xml_set_end_namespace_decl_handler_variation1.phpt b/ext/xml/tests/xml_set_end_namespace_decl_handler_variation1.phpt
new file mode 100644
index 000000000..3951c4581
--- /dev/null
+++ b/ext/xml/tests/xml_set_end_namespace_decl_handler_variation1.phpt
@@ -0,0 +1,244 @@
+--TEST--
+Test xml_set_end_namespace_decl_handler() function : usage variations
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_set_end_namespace_decl_handler(resource parser, string hdl)
+ * Description: Set up character data handler
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_set_end_namespace_decl_handler() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+
+function validHandler(resource $parser ,string $data) {
+}
+
+// Initialise function arguments not being substituted (if any)
+$hdl = 'validHandler';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$fp = fopen(__FILE__, "r");
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new aClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for parser
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_set_end_namespace_decl_handler($value, $hdl) );
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_set_end_namespace_decl_handler() : usage variations ***
+
+Arg value 0
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 12345
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Some Ascii Data
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Resource id %s
+
+Warning: xml_set_end_namespace_decl_handler(): supplied resource is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_end_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+Done
diff --git a/ext/xml/tests/xml_set_external_entity_ref_handler_error.phpt b/ext/xml/tests/xml_set_external_entity_ref_handler_error.phpt
new file mode 100644
index 000000000..0f4dc435e
--- /dev/null
+++ b/ext/xml/tests/xml_set_external_entity_ref_handler_error.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test xml_set_external_entity_ref_handler() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_set_external_entity_ref_handler(resource parser, string hdl)
+ * Description: Set up external entity reference handler
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_set_external_entity_ref_handler() : error conditions ***\n";
+
+
+//Test xml_set_external_entity_ref_handler with one more than the expected number of arguments
+echo "\n-- Testing xml_set_external_entity_ref_handler() function with more than expected no. of arguments --\n";
+
+$hdl = 'string_val';
+$extra_arg = 10;
+var_dump( xml_set_external_entity_ref_handler(null, $hdl, $extra_arg) );
+
+// Testing xml_set_external_entity_ref_handler with one less than the expected number of arguments
+echo "\n-- Testing xml_set_external_entity_ref_handler() function with less than expected no. of arguments --\n";
+
+var_dump( xml_set_external_entity_ref_handler(null) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_set_external_entity_ref_handler() : error conditions ***
+
+-- Testing xml_set_external_entity_ref_handler() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_set_external_entity_ref_handler() in %s on line %d
+NULL
+
+-- Testing xml_set_external_entity_ref_handler() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_set_external_entity_ref_handler() in %s on line %d
+NULL
+Done
diff --git a/ext/xml/tests/xml_set_external_entity_ref_handler_variation1.phpt b/ext/xml/tests/xml_set_external_entity_ref_handler_variation1.phpt
new file mode 100644
index 000000000..dfb9fa610
--- /dev/null
+++ b/ext/xml/tests/xml_set_external_entity_ref_handler_variation1.phpt
@@ -0,0 +1,244 @@
+--TEST--
+Test xml_set_external_entity_ref_handler() function : usage variations
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_set_external_entity_ref_handler(resource parser, string hdl)
+ * Description: Set up external entity reference handler
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_set_external_entity_ref_handler() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+
+function validHandler(resource $parser ,string $data) {
+}
+
+// Initialise function arguments not being substituted (if any)
+$hdl = 'validHandler';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$fp = fopen(__FILE__, "r");
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new aClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for parser
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_set_external_entity_ref_handler($value, $hdl) );
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_set_external_entity_ref_handler() : usage variations ***
+
+Arg value 0
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 12345
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Some Ascii Data
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Resource id %s
+
+Warning: xml_set_external_entity_ref_handler(): supplied resource is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_external_entity_ref_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+Done
diff --git a/ext/xml/tests/xml_set_notation_decl_handler_basic.phpt b/ext/xml/tests/xml_set_notation_decl_handler_basic.phpt
new file mode 100644
index 000000000..6616681ff
--- /dev/null
+++ b/ext/xml/tests/xml_set_notation_decl_handler_basic.phpt
@@ -0,0 +1,102 @@
+--TEST--
+Test xml_set_notation_decl_handler function : basic
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto bool xml_set_notation_decl_handler ( resource $parser , callback $handler )
+ * Description: Sets the notation declaration handler function for the XML parser.
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+class XML_Parser
+{
+
+ function unparsed_entity_decl_handler($parser, $entity_name, $base, $system_ID, $public_ID, $notation_name)
+ {
+ echo "unparsed_entity_decl_handler called\n";
+ echo "...Entity name=" . $entity_name . "\n";
+ echo "...Base=" . $base . "\n";
+ echo "...System ID=" . $system_ID . "\n";
+ echo "...Public ID=" . $public_ID . "\n";
+ echo "...Notation name=" . $notation_name . "\n";
+ }
+
+ function notation_decl_handler($parser, $name, $base, $system_ID,$public_ID)
+ {
+ echo "notation_decl_handler called\n";
+ echo "...Name=" . $name . "\n";
+ echo "...Base=" . $base . "\n";
+ echo "...System ID=" . $system_ID . "\n";
+ echo "...Public ID=" . $public_ID . "\n";
+ }
+
+ function parse($data)
+ {
+ $parser = xml_parser_create();
+ xml_set_object($parser, $this);
+ xml_set_notation_decl_handler($parser, "notation_decl_handler");
+ xml_set_unparsed_entity_decl_handler($parser, "unparsed_entity_decl_handler");
+ xml_parse($parser, $data, true);
+ xml_parser_free($parser);
+ }
+}
+
+$xml = <<<HERE
+<?xml version="1.0"?>
+<!DOCTYPE dates [
+ <!NOTATION USDATE SYSTEM "http://www.schema.net/usdate.not">
+ <!NOTATION AUSDATE SYSTEM "http://www.schema.net/ausdate.not">
+ <!NOTATION ISODATE SYSTEM "http://www.schema.net/isodate.not">
+ <!ENTITY testUS SYSTEM "test_usdate.xml" NDATA USDATE>
+ <!ENTITY testAUS SYSTEM "test_ausdate.xml" NDATA AUSDATE>
+ <!ENTITY testISO SYSTEM "test_isodate_xml" NDATA ISODATE>]>
+]>
+HERE;
+
+echo "Simple test of xml_set_notation_decl_handler(() function\n";
+$p1 = new Xml_Parser();
+$p1->parse($xml);
+echo "Done\n";
+?>
+--EXPECT--
+Simple test of xml_set_notation_decl_handler(() function
+notation_decl_handler called
+...Name=USDATE
+...Base=
+...System ID=http://www.schema.net/usdate.not
+...Public ID=
+notation_decl_handler called
+...Name=AUSDATE
+...Base=
+...System ID=http://www.schema.net/ausdate.not
+...Public ID=
+notation_decl_handler called
+...Name=ISODATE
+...Base=
+...System ID=http://www.schema.net/isodate.not
+...Public ID=
+unparsed_entity_decl_handler called
+...Entity name=testUS
+...Base=
+...System ID=test_usdate.xml
+...Public ID=
+...Notation name=USDATE
+unparsed_entity_decl_handler called
+...Entity name=testAUS
+...Base=
+...System ID=test_ausdate.xml
+...Public ID=
+...Notation name=AUSDATE
+unparsed_entity_decl_handler called
+...Entity name=testISO
+...Base=
+...System ID=test_isodate_xml
+...Public ID=
+...Notation name=ISODATE
+Done
diff --git a/ext/xml/tests/xml_set_notation_decl_handler_error.phpt b/ext/xml/tests/xml_set_notation_decl_handler_error.phpt
new file mode 100644
index 000000000..f84202416
--- /dev/null
+++ b/ext/xml/tests/xml_set_notation_decl_handler_error.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test xml_set_notation_decl_handler() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_set_notation_decl_handler(resource parser, string hdl)
+ * Description: Set up notation declaration handler
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_set_notation_decl_handler() : error conditions ***\n";
+
+
+//Test xml_set_notation_decl_handler with one more than the expected number of arguments
+echo "\n-- Testing xml_set_notation_decl_handler() function with more than expected no. of arguments --\n";
+
+$hdl = 'string_val';
+$extra_arg = 10;
+var_dump( xml_set_notation_decl_handler(null, $hdl, $extra_arg) );
+
+// Testing xml_set_notation_decl_handler with one less than the expected number of arguments
+echo "\n-- Testing xml_set_notation_decl_handler() function with less than expected no. of arguments --\n";
+
+var_dump( xml_set_notation_decl_handler(null) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_set_notation_decl_handler() : error conditions ***
+
+-- Testing xml_set_notation_decl_handler() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_set_notation_decl_handler() in %s on line %d
+NULL
+
+-- Testing xml_set_notation_decl_handler() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_set_notation_decl_handler() in %s on line %d
+NULL
+Done
diff --git a/ext/xml/tests/xml_set_notation_decl_handler_variation1.phpt b/ext/xml/tests/xml_set_notation_decl_handler_variation1.phpt
new file mode 100644
index 000000000..450e7d9d6
--- /dev/null
+++ b/ext/xml/tests/xml_set_notation_decl_handler_variation1.phpt
@@ -0,0 +1,244 @@
+--TEST--
+Test xml_set_notation_decl_handler() function : usage variations
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_set_notation_decl_handler(resource parser, string hdl)
+ * Description: Set up notation declaration handler
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_set_notation_decl_handler() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+
+function validHandler(resource $parser ,string $data) {
+}
+
+// Initialise function arguments not being substituted (if any)
+$hdl = 'validHandler';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$fp = fopen(__FILE__, "r");
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new aClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for parser
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_set_notation_decl_handler($value, $hdl) );
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_set_notation_decl_handler() : usage variations ***
+
+Arg value 0
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 12345
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Some Ascii Data
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Resource id %s
+
+Warning: xml_set_notation_decl_handler(): supplied resource is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_notation_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+Done
diff --git a/ext/xml/tests/xml_set_object_error.phpt b/ext/xml/tests/xml_set_object_error.phpt
new file mode 100644
index 000000000..3d16d35f8
--- /dev/null
+++ b/ext/xml/tests/xml_set_object_error.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test xml_set_object() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_set_object(resource parser, object &obj)
+ * Description: Set up object which should be used for callbacks
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_set_object() : error conditions ***\n";
+
+
+//Test xml_set_object with one more than the expected number of arguments
+echo "\n-- Testing xml_set_object() function with more than expected no. of arguments --\n";
+
+//WARNING: Unable to initialise parser of type resource
+
+$obj = new stdclass();
+$extra_arg = 10;
+var_dump( xml_set_object(null, $obj, $extra_arg) );
+
+// Testing xml_set_object with one less than the expected number of arguments
+echo "\n-- Testing xml_set_object() function with less than expected no. of arguments --\n";
+
+//WARNING: Unable to initialise parser of type resource
+
+var_dump( xml_set_object(null) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_set_object() : error conditions ***
+
+-- Testing xml_set_object() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_set_object() in %s on line %d
+NULL
+
+-- Testing xml_set_object() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_set_object() in %s on line %d
+NULL
+Done
diff --git a/ext/xml/tests/xml_set_object_variation1.phpt b/ext/xml/tests/xml_set_object_variation1.phpt
new file mode 100644
index 000000000..ea3781322
--- /dev/null
+++ b/ext/xml/tests/xml_set_object_variation1.phpt
@@ -0,0 +1,240 @@
+--TEST--
+Test xml_set_object() function : usage variations
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_set_object(resource parser, object &obj)
+ * Description: Set up object which should be used for callbacks
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_set_object() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+// Initialise function arguments not being substituted (if any)
+$obj = new aClass();
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$fp = fopen(__FILE__, "r");
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new aClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for parser
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_set_object($value, $obj) );
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_set_object() : usage variations ***
+
+Arg value 0
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 12345
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Some Ascii Data
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Resource id %s
+
+Warning: xml_set_object(): supplied resource is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_object(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+Done
diff --git a/ext/xml/tests/xml_set_object_variation2.phpt b/ext/xml/tests/xml_set_object_variation2.phpt
new file mode 100644
index 000000000..7ee304c22
--- /dev/null
+++ b/ext/xml/tests/xml_set_object_variation2.phpt
@@ -0,0 +1,229 @@
+--TEST--
+Test xml_set_object() function : usage variations
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_set_object(resource parser, object &obj)
+ * Description: Set up object which should be used for callbacks
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_set_object() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+// Initialise function arguments not being substituted (if any)
+
+$parser = xml_parser_create();
+$fp = fopen(__FILE__, "r");
+
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for obj
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_set_object($parser, $value) );
+};
+
+xml_parser_free($parser);
+fclose($fp);
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_set_object() : usage variations ***
+
+Arg value 0
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value 12345
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value Resource id %s
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_object(): Argument 2 has wrong type in %s on line %d
+bool(false)
+Done
diff --git a/ext/xml/tests/xml_set_processing_instruction_handler_basic.phpt b/ext/xml/tests/xml_set_processing_instruction_handler_basic.phpt
new file mode 100644
index 000000000..e5589cee2
--- /dev/null
+++ b/ext/xml/tests/xml_set_processing_instruction_handler_basic.phpt
@@ -0,0 +1,52 @@
+--TEST--
+Test xml_set_processing_instruction_handler function : basic
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto bool xml_set_processing_instruction_handler ( resource $parser , callback $handler )
+ * Description: Sets the processing instruction (PI) handler function for the XML parser.
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+class XML_Parser
+{
+
+ function PIHandler($parser, $target, $data)
+ {
+ echo "Target: " . $target. "\n";
+ echo "Data: " . $data . "\n";
+ }
+
+ function parse($data)
+ {
+ $parser = xml_parser_create();
+ xml_set_object($parser, $this);
+ xml_set_processing_instruction_handler($parser, "PIHandler");
+ xml_parse($parser, $data, true);
+ xml_parser_free($parser);
+ }
+
+
+}
+
+$xml = <<<HERE
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<?xml-stylesheet href="default.xsl" type="text/xml"?>
+HERE;
+
+echo "Simple test of xml_set_processing_instruction_handler() function\n";
+$p1 = new Xml_Parser();
+$p1->parse($xml);
+echo "Done\n";
+?>
+--EXPECT--
+Simple test of xml_set_processing_instruction_handler() function
+Target: xml-stylesheet
+Data: href="default.xsl" type="text/xml"
+Done \ No newline at end of file
diff --git a/ext/xml/tests/xml_set_processing_instruction_handler_error.phpt b/ext/xml/tests/xml_set_processing_instruction_handler_error.phpt
new file mode 100644
index 000000000..bfa3f64c6
--- /dev/null
+++ b/ext/xml/tests/xml_set_processing_instruction_handler_error.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test xml_set_processing_instruction_handler() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_set_processing_instruction_handler(resource parser, string hdl)
+ * Description: Set up processing instruction (PI) handler
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_set_processing_instruction_handler() : error conditions ***\n";
+
+
+//Test xml_set_processing_instruction_handler with one more than the expected number of arguments
+echo "\n-- Testing xml_set_processing_instruction_handler() function with more than expected no. of arguments --\n";
+
+$hdl = 'string_val';
+$extra_arg = 10;
+var_dump( xml_set_processing_instruction_handler(null, $hdl, $extra_arg) );
+
+// Testing xml_set_processing_instruction_handler with one less than the expected number of arguments
+echo "\n-- Testing xml_set_processing_instruction_handler() function with less than expected no. of arguments --\n";
+
+var_dump( xml_set_processing_instruction_handler(null) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_set_processing_instruction_handler() : error conditions ***
+
+-- Testing xml_set_processing_instruction_handler() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_set_processing_instruction_handler() in %s on line %d
+NULL
+
+-- Testing xml_set_processing_instruction_handler() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_set_processing_instruction_handler() in %s on line %d
+NULL
+Done
diff --git a/ext/xml/tests/xml_set_processing_instruction_handler_variation1.phpt b/ext/xml/tests/xml_set_processing_instruction_handler_variation1.phpt
new file mode 100644
index 000000000..72c56ae35
--- /dev/null
+++ b/ext/xml/tests/xml_set_processing_instruction_handler_variation1.phpt
@@ -0,0 +1,244 @@
+--TEST--
+Test xml_set_processing_instruction_handler() function : usage variations
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_set_processing_instruction_handler(resource parser, string hdl)
+ * Description: Set up processing instruction (PI) handler
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_set_processing_instruction_handler() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+
+function validHandler(resource $parser ,string $data) {
+}
+
+// Initialise function arguments not being substituted (if any)
+$hdl = 'validHandler';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$fp = fopen(__FILE__, "r");
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new aClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for parser
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_set_processing_instruction_handler($value, $hdl) );
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_set_processing_instruction_handler() : usage variations ***
+
+Arg value 0
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 12345
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Some Ascii Data
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Resource id %s
+
+Warning: xml_set_processing_instruction_handler(): supplied resource is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_processing_instruction_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+Done
diff --git a/ext/xml/tests/xml_set_start_namespace_decl_handler_basic.phpt b/ext/xml/tests/xml_set_start_namespace_decl_handler_basic.phpt
new file mode 100644
index 000000000..79b8cb88f
--- /dev/null
+++ b/ext/xml/tests/xml_set_start_namespace_decl_handler_basic.phpt
@@ -0,0 +1,61 @@
+--TEST--
+Test xml_set_start_namespace_decl_handler function: basic
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : bool xml_set_start_namespace_decl_handler ( resource $parser , callback $handler )
+ * Description: Set up start namespace declaration handler.
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+$xml = <<<HERE
+<aw1:book xmlns:aw1="http://www.somewhere.com/namespace1"
+ xmlns:aw2="file:/DTD/somewhere.dtd">
+<aw1:para>Any old text.</aw1:para>
+<aw2:td>An HTML table cell.</aw2:td>
+</aw1:book>
+HERE;
+
+$parser = xml_parser_create_ns();
+xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
+
+var_dump(xml_set_start_namespace_decl_handler( $parser, "Namespace_Start_Handler" ));
+var_dump(xml_set_end_namespace_decl_handler( $parser, "Namespace_End_Handler" ));
+
+xml_parse( $parser, $xml, true);
+xml_parser_free( $parser );
+
+echo "Done\n";
+
+function Namespace_Start_Handler( $parser, $prefix, $uri ) {
+ echo "Namespace_Start_Handler called\n";
+ echo "...Prefix: ". $prefix . "\n";
+ echo "...Uri: ". $uri . "\n";
+}
+
+function Namespace_End_Handler($parser, $prefix) {
+ echo "Namespace_End_Handler called\n";
+ echo "...Prefix: ". $prefix . "\n\n";
+}
+
+function DefaultHandler( $parser, $data ) {
+ print( 'DefaultHandler Called<br/>' );
+}
+?>
+--EXPECT--
+bool(true)
+bool(true)
+Namespace_Start_Handler called
+...Prefix: aw1
+...Uri: http://www.somewhere.com/namespace1
+Namespace_Start_Handler called
+...Prefix: aw2
+...Uri: file:/DTD/somewhere.dtd
+Done
+
diff --git a/ext/xml/tests/xml_set_start_namespace_decl_handler_error.phpt b/ext/xml/tests/xml_set_start_namespace_decl_handler_error.phpt
new file mode 100644
index 000000000..2db4cfadb
--- /dev/null
+++ b/ext/xml/tests/xml_set_start_namespace_decl_handler_error.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test xml_set_start_namespace_decl_handler() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_set_start_namespace_decl_handler(resource parser, string hdl)
+ * Description: Set up character data handler
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_set_start_namespace_decl_handler() : error conditions ***\n";
+
+
+//Test xml_set_start_namespace_decl_handler with one more than the expected number of arguments
+echo "\n-- Testing xml_set_start_namespace_decl_handler() function with more than expected no. of arguments --\n";
+
+$hdl = 'string_val';
+$extra_arg = 10;
+var_dump( xml_set_start_namespace_decl_handler(null, $hdl, $extra_arg) );
+
+// Testing xml_set_start_namespace_decl_handler with one less than the expected number of arguments
+echo "\n-- Testing xml_set_start_namespace_decl_handler() function with less than expected no. of arguments --\n";
+
+var_dump( xml_set_start_namespace_decl_handler(null) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_set_start_namespace_decl_handler() : error conditions ***
+
+-- Testing xml_set_start_namespace_decl_handler() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_set_start_namespace_decl_handler() in %s on line %d
+NULL
+
+-- Testing xml_set_start_namespace_decl_handler() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_set_start_namespace_decl_handler() in %s on line %d
+NULL
+Done
diff --git a/ext/xml/tests/xml_set_start_namespace_decl_handler_variation1.phpt b/ext/xml/tests/xml_set_start_namespace_decl_handler_variation1.phpt
new file mode 100644
index 000000000..56f2d20c1
--- /dev/null
+++ b/ext/xml/tests/xml_set_start_namespace_decl_handler_variation1.phpt
@@ -0,0 +1,244 @@
+--TEST--
+Test xml_set_start_namespace_decl_handler() function : usage variations
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_set_start_namespace_decl_handler(resource parser, string hdl)
+ * Description: Set up character data handler
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_set_start_namespace_decl_handler() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+
+function validHandler(resource $parser ,string $data) {
+}
+
+// Initialise function arguments not being substituted (if any)
+$hdl = 'validHandler';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$fp = fopen(__FILE__, "r");
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new aClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for parser
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_set_start_namespace_decl_handler($value, $hdl) );
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_set_start_namespace_decl_handler() : usage variations ***
+
+Arg value 0
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 12345
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Some Ascii Data
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Resource id %s
+
+Warning: xml_set_start_namespace_decl_handler(): supplied resource is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_start_namespace_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+Done
diff --git a/ext/xml/tests/xml_set_unparsed_entity_decl_handler_error.phpt b/ext/xml/tests/xml_set_unparsed_entity_decl_handler_error.phpt
new file mode 100644
index 000000000..4eb3f0d3d
--- /dev/null
+++ b/ext/xml/tests/xml_set_unparsed_entity_decl_handler_error.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test xml_set_unparsed_entity_decl_handler() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_set_unparsed_entity_decl_handler(resource parser, string hdl)
+ * Description: Set up unparsed entity declaration handler
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_set_unparsed_entity_decl_handler() : error conditions ***\n";
+
+
+//Test xml_set_unparsed_entity_decl_handler with one more than the expected number of arguments
+echo "\n-- Testing xml_set_unparsed_entity_decl_handler() function with more than expected no. of arguments --\n";
+
+$hdl = 'string_val';
+$extra_arg = 10;
+var_dump( xml_set_unparsed_entity_decl_handler(null, $hdl, $extra_arg) );
+
+// Testing xml_set_unparsed_entity_decl_handler with one less than the expected number of arguments
+echo "\n-- Testing xml_set_unparsed_entity_decl_handler() function with less than expected no. of arguments --\n";
+
+var_dump( xml_set_unparsed_entity_decl_handler(null) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_set_unparsed_entity_decl_handler() : error conditions ***
+
+-- Testing xml_set_unparsed_entity_decl_handler() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_set_unparsed_entity_decl_handler() in %s on line %d
+NULL
+
+-- Testing xml_set_unparsed_entity_decl_handler() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for xml_set_unparsed_entity_decl_handler() in %s on line %d
+NULL
+Done
diff --git a/ext/xml/tests/xml_set_unparsed_entity_decl_handler_variation1.phpt b/ext/xml/tests/xml_set_unparsed_entity_decl_handler_variation1.phpt
new file mode 100644
index 000000000..b62874440
--- /dev/null
+++ b/ext/xml/tests/xml_set_unparsed_entity_decl_handler_variation1.phpt
@@ -0,0 +1,244 @@
+--TEST--
+Test xml_set_unparsed_entity_decl_handler() function : usage variations
+--SKIPIF--
+<?php
+if (!extension_loaded("xml")) {
+ print "skip - XML extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto int xml_set_unparsed_entity_decl_handler(resource parser, string hdl)
+ * Description: Set up unparsed entity declaration handler
+ * Source code: ext/xml/xml.c
+ * Alias to functions:
+ */
+
+echo "*** Testing xml_set_unparsed_entity_decl_handler() : usage variations ***\n";
+error_reporting(E_ALL & ~E_NOTICE);
+
+class aClass {
+ function __toString() {
+ return "Some Ascii Data";
+ }
+}
+
+function validHandler(resource $parser ,string $data) {
+}
+
+// Initialise function arguments not being substituted (if any)
+$hdl = 'validHandler';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+$fp = fopen(__FILE__, "r");
+
+//array of values to iterate over
+$values = array(
+
+ // int data
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float data
+ 10.5,
+ -10.5,
+ 10.1234567e10,
+ 10.7654321E-10,
+ .5,
+
+ // array data
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // null data
+ NULL,
+ null,
+
+ // boolean data
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty data
+ "",
+ '',
+
+ // string data
+ "string",
+ 'string',
+
+ // object data
+ new aClass(),
+
+ // resource data
+ $fp,
+
+ // undefined data
+ $undefined_var,
+
+ // unset data
+ $unset_var,
+);
+
+// loop through each element of the array for parser
+
+foreach($values as $value) {
+ echo "\nArg value $value \n";
+ var_dump( xml_set_unparsed_entity_decl_handler($value, $hdl) );
+};
+
+fclose($fp);
+echo "Done";
+?>
+--EXPECTF--
+*** Testing xml_set_unparsed_entity_decl_handler() : usage variations ***
+
+Arg value 0
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 12345
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -2345
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 10.5
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value -10.5
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 101234567000
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1.07654321E-9
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 0.5
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Array
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value 1
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value string
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Some Ascii Data
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value Resource id %s
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied resource is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+
+Arg value
+
+Warning: xml_set_unparsed_entity_decl_handler(): supplied argument is not a valid XML Parser resource in %s on line %d
+bool(false)
+Done
diff --git a/ext/xml/xml.c b/ext/xml/xml.c
index 2fb994ddd..168c76846 100644
--- a/ext/xml/xml.c
+++ b/ext/xml/xml.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: xml.c,v 1.157.2.4.2.8 2008/01/30 08:50:02 rasmus Exp $ */
+/* $Id: xml.c,v 1.157.2.4.2.9 2008/12/31 11:17:46 sebastian Exp $ */
#define IS_EXT_MODULE
diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c
index c4b1c4711..1e0e8e2ff 100644
--- a/ext/xmlreader/php_xmlreader.c
+++ b/ext/xmlreader/php_xmlreader.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_xmlreader.c,v 1.13.2.14.2.10 2007/12/31 07:20:14 sebastian Exp $ */
+/* $Id: php_xmlreader.c,v 1.13.2.14.2.11 2008/12/31 11:17:46 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/xmlreader/php_xmlreader.h b/ext/xmlreader/php_xmlreader.h
index 485458e0e..b37ee7925 100644
--- a/ext/xmlreader/php_xmlreader.h
+++ b/ext/xmlreader/php_xmlreader.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_xmlreader.h,v 1.3.2.2.2.3 2007/12/31 07:20:14 sebastian Exp $ */
+/* $Id: php_xmlreader.h,v 1.3.2.2.2.4 2008/12/31 11:17:46 sebastian Exp $ */
#ifndef PHP_XMLREADER_H
#define PHP_XMLREADER_H
diff --git a/ext/xmlrpc/libxmlrpc/xml_element.c b/ext/xmlrpc/libxmlrpc/xml_element.c
index 15fc3bf0b..faf76714e 100644
--- a/ext/xmlrpc/libxmlrpc/xml_element.c
+++ b/ext/xmlrpc/libxmlrpc/xml_element.c
@@ -31,7 +31,7 @@
*/
-static const char rcsid[] = "#(@) $Id: xml_element.c,v 1.9.4.1 2006/07/30 11:34:02 tony2001 Exp $";
+static const char rcsid[] = "#(@) $Id: xml_element.c,v 1.9.4.3 2008/12/17 21:45:31 iliaa Exp $";
@@ -44,6 +44,13 @@ static const char rcsid[] = "#(@) $Id: xml_element.c,v 1.9.4.1 2006/07/30 11:34:
* 06/2000
* HISTORY
* $Log: xml_element.c,v $
+ * Revision 1.9.4.3 2008/12/17 21:45:31 iliaa
+ * MFB: remove fprintf usage
+ *
+ * Revision 1.9.4.2 2008/12/17 00:30:48 iliaa
+ *
+ * MFH: removed unused var
+ *
* Revision 1.9.4.1 2006/07/30 11:34:02 tony2001
* MFH: fix compile warnings (#38257)
*
@@ -378,7 +385,7 @@ static void xml_element_serialize(xml_element *el, int (*fptr)(void *data, const
depth++;
if(!el) {
- fprintf(stderr, "Nothing to write\n");
+/* fprintf(stderr, "Nothing to write\n"); */
return;
}
if(!options) {
@@ -716,7 +723,7 @@ xml_element* xml_elem_parse_buf(const char* in_buf, int len, XML_ELEM_INPUT_OPTI
int line_num = XML_GetCurrentLineNumber(parser);
int col_num = XML_GetCurrentColumnNumber(parser);
long byte_idx = XML_GetCurrentByteIndex(parser);
- int byte_total = XML_GetCurrentByteCount(parser);
+/* int byte_total = XML_GetCurrentByteCount(parser); */
const char * error_str = XML_ErrorString(err_code);
if(byte_idx >= 0) {
snprintf(buf,
@@ -725,7 +732,7 @@ xml_element* xml_elem_parse_buf(const char* in_buf, int len, XML_ELEM_INPUT_OPTI
byte_idx > 10 ? 10 : byte_idx,
in_buf + (byte_idx > 10 ? byte_idx - 10 : byte_idx));
}
-
+/*
fprintf(stderr, "expat reports error code %i\n"
"\tdescription: %s\n"
"\tline: %i\n"
@@ -734,7 +741,7 @@ xml_element* xml_elem_parse_buf(const char* in_buf, int len, XML_ELEM_INPUT_OPTI
"\ttotal bytes: %i\n%s ",
err_code, error_str, line_num,
col_num, byte_idx, byte_total, buf);
-
+*/
/* error condition */
if(error) {
diff --git a/ext/xmlrpc/libxmlrpc/xmlrpc.c b/ext/xmlrpc/libxmlrpc/xmlrpc.c
index dc5752fd5..7533016bf 100644
--- a/ext/xmlrpc/libxmlrpc/xmlrpc.c
+++ b/ext/xmlrpc/libxmlrpc/xmlrpc.c
@@ -31,7 +31,7 @@
*/
-static const char rcsid[] = "#(@) $Id: xmlrpc.c,v 1.8.4.3 2007/09/18 19:49:53 iliaa Exp $";
+static const char rcsid[] = "#(@) $Id: xmlrpc.c,v 1.8.4.5 2008/12/17 21:45:31 iliaa Exp $";
/****h* ABOUT/xmlrpc
@@ -43,6 +43,16 @@ static const char rcsid[] = "#(@) $Id: xmlrpc.c,v 1.8.4.3 2007/09/18 19:49:53 il
* 9/1999 - 10/2000
* HISTORY
* $Log: xmlrpc.c,v $
+ * Revision 1.8.4.5 2008/12/17 21:45:31 iliaa
+ * MFB: remove fprintf usage
+ *
+ * Revision 1.8.4.4 2008/09/10 00:09:04 felipe
+ * MFH:
+ * - Merged fix from SF project (Import Jeff Lawsons patches for XML datetime bug fixes)
+ * Fixed bugs:
+ * #45226 (xmlrpc_set_type() segfaults with valid ISO8601 date string)
+ * #18916 (xmlrpc_set_type() "not working")
+ *
* Revision 1.8.4.3 2007/09/18 19:49:53 iliaa
*
* Fixed bug #42189 (xmlrpc_set_type() crashes php on invalid datetime
@@ -166,11 +176,21 @@ static const char rcsid[] = "#(@) $Id: xmlrpc.c,v 1.8.4.3 2007/09/18 19:49:53 il
* Begin Time Functions *
***********************/
+static time_t mkgmtime(struct tm *tm)
+{
+ static const int mdays[12] = {0,31,59,90,120,151,181,212,243,273,304,334};
+
+ return ((((((tm->tm_year - 70) * 365) + mdays[tm->tm_mon] + tm->tm_mday-1 +
+ (tm->tm_year-68-1+(tm->tm_mon>=2))/4) * 24) + tm->tm_hour) * 60 +
+ tm->tm_min) * 60 + tm->tm_sec;
+}
+
static int date_from_ISO8601 (const char *text, time_t * value) {
struct tm tm;
int n;
int i;
- char buf[18];
+ char buf[30];
+
if (strchr (text, '-')) {
char *p = (char *) text, *p2 = buf;
@@ -178,6 +198,9 @@ static int date_from_ISO8601 (const char *text, time_t * value) {
if (*p != '-') {
*p2 = *p;
p2++;
+ if (p2-buf >= sizeof(buf)) {
+ return -1;
+ }
}
p++;
}
@@ -187,10 +210,6 @@ static int date_from_ISO8601 (const char *text, time_t * value) {
tm.tm_isdst = -1;
- if(strlen(text) < 17) {
- return -1;
- }
-
#define XMLRPC_IS_NUMBER(x) if (x < '0' || x > '9') return -1;
n = 1000;
@@ -243,7 +262,7 @@ static int date_from_ISO8601 (const char *text, time_t * value) {
tm.tm_year -= 1900;
- *value = mktime(&tm);
+ *value = mkgmtime(&tm);
return 0;
@@ -251,14 +270,14 @@ static int date_from_ISO8601 (const char *text, time_t * value) {
static int date_to_ISO8601 (time_t value, char *buf, int length) {
struct tm *tm, tmbuf;
- tm = php_localtime_r(&value, &tmbuf);
+ tm = php_gmtime_r(&value, &tmbuf);
if (!tm) {
return 0;
}
#if 0 /* TODO: soap seems to favor this method. xmlrpc the latter. */
return strftime (buf, length, "%Y-%m-%dT%H:%M:%SZ", tm);
#else
- return strftime(buf, length, "%Y%m%dT%H:%M:%S", tm);
+ return strftime(buf, length, "%Y%m%dT%H:%M:%SZ", tm);
#endif
}
@@ -1152,13 +1171,13 @@ int XMLRPC_AddValueToVector(XMLRPC_VALUE target, XMLRPC_VALUE source) {
}
}
else {
- fprintf (stderr,
- "xmlrpc: attempted to add key/val pair to vector of type array\n");
+/* fprintf (stderr,
+ "xmlrpc: attempted to add key/val pair to vector of type array\n"); */
}
break;
default:
- fprintf (stderr,
- "xmlrpc: attempted to add value of unknown type to vector\n");
+/* fprintf (stderr,
+ "xmlrpc: attempted to add value of unknown type to vector\n"); */
break;
}
}
@@ -1488,8 +1507,8 @@ void XMLRPC_CleanupValue(XMLRPC_VALUE value) {
my_free(value);
break;
default:
- fprintf (stderr,
- "xmlrpc: attempted to free value of invalid type\n");
+/* fprintf (stderr,
+ "xmlrpc: attempted to free value of invalid type\n"); */
break;
}
}
@@ -1529,8 +1548,7 @@ void XMLRPC_SetValueDateTime(XMLRPC_VALUE value, time_t time) {
date_to_ISO8601(time, timeBuf, sizeof(timeBuf));
if(timeBuf[0]) {
- simplestring_clear(&value->str);
- simplestring_add(&value->str, timeBuf);
+ XMLRPC_SetValueDateTime_ISO8601 (value, timeBuf);
}
}
}
@@ -1706,8 +1724,11 @@ void XMLRPC_SetValueDateTime_ISO8601(XMLRPC_VALUE value, const char* s) {
if(value) {
time_t time_val = 0;
if(s) {
+ value->type = xmlrpc_datetime;
date_from_ISO8601(s, &time_val);
- XMLRPC_SetValueDateTime(value, time_val);
+ value->i = time_val;
+ simplestring_clear(&value->str);
+ simplestring_add(&value->str, s);
}
}
}
diff --git a/ext/xmlrpc/php_xmlrpc.h b/ext/xmlrpc/php_xmlrpc.h
index 68aeb5b81..fa91bb410 100644
--- a/ext/xmlrpc/php_xmlrpc.h
+++ b/ext/xmlrpc/php_xmlrpc.h
@@ -37,7 +37,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -51,7 +51,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_xmlrpc.h,v 1.11.2.1.2.3 2007/12/31 07:20:14 sebastian Exp $ */
+/* $Id: php_xmlrpc.h,v 1.11.2.1.2.4 2008/12/31 11:17:46 sebastian Exp $ */
#ifndef _PHP_XMLRPC_H
#define _PHP_XMLRPC_H
diff --git a/ext/xmlrpc/tests/bug18916.phpt b/ext/xmlrpc/tests/bug18916.phpt
new file mode 100644
index 000000000..b2eb525d8
--- /dev/null
+++ b/ext/xmlrpc/tests/bug18916.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Bug #18916 (xmlrpc_set_type() not working)
+--INI--
+date.timezone="America/Sao_Paulo"
+--FILE--
+<?php
+
+$params = date("Ymd\TH:i:s", time());
+xmlrpc_set_type($params, 'datetime');
+echo xmlrpc_encode($params);
+
+?>
+--EXPECTF--
+<?xml version="1.0" encoding="utf-8"?>
+<params>
+<param>
+ <value>
+ <dateTime.iso8601>%dT%d:%d:%d</dateTime.iso8601>
+ </value>
+</param>
+</params>
diff --git a/ext/xmlrpc/tests/bug40576.phpt b/ext/xmlrpc/tests/bug40576.phpt
index 6b73f4d2c..404aba32b 100644
--- a/ext/xmlrpc/tests/bug40576.phpt
+++ b/ext/xmlrpc/tests/bug40576.phpt
@@ -29,11 +29,11 @@ string(125) "<?xml version="1.0" encoding="utf-8"?>
</param>
</params>
"
-string(128) "<?xml version="1.0" encoding="utf-8"?>
+string(130) "<?xml version="1.0" encoding="utf-8"?>
<params>
<param>
<value>
- <double>11234567891000</double>
+ <double>1.1234567891E+13</double>
</value>
</param>
</params>
diff --git a/ext/xmlrpc/tests/bug45226.phpt b/ext/xmlrpc/tests/bug45226.phpt
new file mode 100644
index 000000000..af9b6c472
--- /dev/null
+++ b/ext/xmlrpc/tests/bug45226.phpt
@@ -0,0 +1,53 @@
+--TEST--
+Bug #45226 (xmlrpc_set_type() segfaults with valid ISO8601 date string)
+--INI--
+date.timezone="America/Sao_Paulo"
+--FILE--
+<?php
+
+$d = date(DATE_ISO8601);
+xmlrpc_set_type($d, 'datetime');
+echo xmlrpc_encode_request('method.call', array('date' => $d));
+
+$d = '2008-01-01 20:00:00';
+xmlrpc_set_type($d, 'datetime');
+echo xmlrpc_encode_request('method.call', array('date' => $d));
+
+?>
+--EXPECTF--
+<?xml version="1.0" encoding="iso-8859-1"?>
+<methodCall>
+<methodName>method.call</methodName>
+<params>
+ <param>
+ <value>
+ <struct>
+ <member>
+ <name>date</name>
+ <value>
+ <dateTime.iso8601>%d-%d-%dT%d:%d:%d%s%d</dateTime.iso8601>
+ </value>
+ </member>
+ </struct>
+ </value>
+ </param>
+</params>
+</methodCall>
+<?xml version="1.0" encoding="iso-8859-1"?>
+<methodCall>
+<methodName>method.call</methodName>
+<params>
+ <param>
+ <value>
+ <struct>
+ <member>
+ <name>date</name>
+ <value>
+ <dateTime.iso8601>%d-%d-%d %d:%d:%d</dateTime.iso8601>
+ </value>
+ </member>
+ </struct>
+ </value>
+ </param>
+</params>
+</methodCall>
diff --git a/ext/xmlrpc/tests/bug45555.phpt b/ext/xmlrpc/tests/bug45555.phpt
new file mode 100644
index 000000000..376b14fec
--- /dev/null
+++ b/ext/xmlrpc/tests/bug45555.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Bug #45555 (Segfault with invalid non-string as register_introspection_callback)
+--FILE--
+<?php
+
+$options = array ();
+$request = xmlrpc_encode_request ("system.describeMethods", $options);
+$server = xmlrpc_server_create ();
+
+xmlrpc_server_register_introspection_callback($server, 1);
+xmlrpc_server_register_introspection_callback($server, array('foo', 'bar'));
+
+$options = array ('output_type' => 'xml', 'version' => 'xmlrpc');
+xmlrpc_server_call_method ($server, $request, NULL, $options);
+
+?>
+--EXPECTF--
+Warning: xmlrpc_server_call_method(): Invalid callback '1' passed in %s on line %d
+
+Warning: xmlrpc_server_call_method(): Invalid callback 'foo::bar' passed in %s on line %d
diff --git a/ext/xmlrpc/tests/bug45556.phpt b/ext/xmlrpc/tests/bug45556.phpt
new file mode 100644
index 000000000..0e463e669
--- /dev/null
+++ b/ext/xmlrpc/tests/bug45556.phpt
@@ -0,0 +1,32 @@
+--TEST--
+Bug #45556 (Return value from callback isn't freed)
+--FILE--
+<?php
+
+$options = array ();
+$request = xmlrpc_encode_request ("system.describeMethods", $options);
+$server = xmlrpc_server_create ();
+
+
+function foo() { return 11111; }
+
+class bar {
+ static public function test() {
+ return 'foo';
+ }
+}
+
+xmlrpc_server_register_introspection_callback($server, 'foobar');
+xmlrpc_server_register_introspection_callback($server, array('bar', 'test'));
+xmlrpc_server_register_introspection_callback($server, array('foo', 'bar'));
+
+$options = array ('output_type' => 'xml', 'version' => 'xmlrpc');
+xmlrpc_server_call_method ($server, $request, NULL, $options);
+
+?>
+--EXPECTF--
+Warning: xmlrpc_server_call_method(): Invalid callback 'foobar' passed in %s on line %d
+
+Warning: xmlrpc_server_call_method(): xml parse error: [line 1, column 1, message: Invalid document end] Unable to add introspection data returned from bar::test() in %s on line %d
+
+Warning: xmlrpc_server_call_method(): Invalid callback 'foo::bar' passed in %s on line %d
diff --git a/ext/xmlrpc/xmlrpc-epi-php.c b/ext/xmlrpc/xmlrpc-epi-php.c
index 87b899469..415542477 100644
--- a/ext/xmlrpc/xmlrpc-epi-php.c
+++ b/ext/xmlrpc/xmlrpc-epi-php.c
@@ -37,7 +37,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -51,7 +51,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: xmlrpc-epi-php.c,v 1.39.2.5.2.8 2007/12/31 07:20:14 sebastian Exp $ */
+/* $Id: xmlrpc-epi-php.c,v 1.39.2.5.2.13 2009/01/27 15:02:43 felipe Exp $ */
/**********************************************************************
* BUGS: *
@@ -356,65 +356,61 @@ static void set_output_options(php_output_options* options, zval* output_opts)
}
}
- /* encoding code set */
- if(zend_hash_find(Z_ARRVAL_P(output_opts),
- ENCODING_KEY, ENCODING_KEY_LEN + 1,
- (void**)&val) == SUCCESS) {
- if(Z_TYPE_PP(val) == IS_STRING) {
- options->xmlrpc_out.xml_elem_opts.encoding = estrdup(Z_STRVAL_PP(val));
- }
- }
-
- /* escaping options */
- if(zend_hash_find(Z_ARRVAL_P(output_opts),
- ESCAPING_KEY, ESCAPING_KEY_LEN + 1,
- (void**)&val) == SUCCESS) {
- /* multiple values allowed. check if array */
- if(Z_TYPE_PP(val) == IS_ARRAY) {
- zval** iter_val;
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(val));
- options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_no_escaping;
- while(1) {
- if(zend_hash_get_current_data(Z_ARRVAL_PP(val), (void**)&iter_val) == SUCCESS) {
- if(Z_TYPE_PP(iter_val) == IS_STRING && Z_STRVAL_PP(iter_val)) {
- if(!strcmp(Z_STRVAL_PP(iter_val), ESCAPING_VALUE_CDATA)) {
- options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_cdata_escaping;
- }
- else if(!strcmp(Z_STRVAL_PP(iter_val), ESCAPING_VALUE_NON_ASCII)) {
- options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_non_ascii_escaping;
- }
- else if(!strcmp(Z_STRVAL_PP(iter_val), ESCAPING_VALUE_NON_PRINT)) {
- options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_non_print_escaping;
- }
- else if(!strcmp(Z_STRVAL_PP(iter_val), ESCAPING_VALUE_MARKUP)) {
- options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_markup_escaping;
- }
- }
- }
- else {
- break;
- }
-
- zend_hash_move_forward(Z_ARRVAL_PP(val));
- }
- }
- /* else, check for single value */
- else if(Z_TYPE_PP(val) == IS_STRING) {
- if(!strcmp(Z_STRVAL_PP(val), ESCAPING_VALUE_CDATA)) {
- options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_cdata_escaping;
- }
- else if(!strcmp(Z_STRVAL_PP(val), ESCAPING_VALUE_NON_ASCII)) {
- options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_non_ascii_escaping;
- }
- else if(!strcmp(Z_STRVAL_PP(val), ESCAPING_VALUE_NON_PRINT)) {
- options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_non_print_escaping;
- }
- else if(!strcmp(Z_STRVAL_PP(val), ESCAPING_VALUE_MARKUP)) {
- options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_markup_escaping;
- }
- }
- }
- }
+ /* encoding code set */
+ if(zend_hash_find(Z_ARRVAL_P(output_opts), ENCODING_KEY, ENCODING_KEY_LEN + 1, (void**)&val) == SUCCESS) {
+ if(Z_TYPE_PP(val) == IS_STRING) {
+ options->xmlrpc_out.xml_elem_opts.encoding = estrdup(Z_STRVAL_PP(val));
+ }
+ }
+
+ /* escaping options */
+ if (zend_hash_find(Z_ARRVAL_P(output_opts), ESCAPING_KEY, ESCAPING_KEY_LEN + 1, (void**)&val) == SUCCESS) {
+ /* multiple values allowed. check if array */
+ if (Z_TYPE_PP(val) == IS_ARRAY) {
+ zval** iter_val;
+ zend_hash_internal_pointer_reset(Z_ARRVAL_PP(val));
+ options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_no_escaping;
+ while(1) {
+ if(zend_hash_get_current_data(Z_ARRVAL_PP(val), (void**)&iter_val) == SUCCESS) {
+ if(Z_TYPE_PP(iter_val) == IS_STRING && Z_STRVAL_PP(iter_val)) {
+ if(!strcmp(Z_STRVAL_PP(iter_val), ESCAPING_VALUE_CDATA)) {
+ options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_cdata_escaping;
+ }
+ else if(!strcmp(Z_STRVAL_PP(iter_val), ESCAPING_VALUE_NON_ASCII)) {
+ options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_non_ascii_escaping;
+ }
+ else if(!strcmp(Z_STRVAL_PP(iter_val), ESCAPING_VALUE_NON_PRINT)) {
+ options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_non_print_escaping;
+ }
+ else if(!strcmp(Z_STRVAL_PP(iter_val), ESCAPING_VALUE_MARKUP)) {
+ options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_markup_escaping;
+ }
+ }
+ }
+ else {
+ break;
+ }
+
+ zend_hash_move_forward(Z_ARRVAL_PP(val));
+ }
+ }
+ /* else, check for single value */
+ else if(Z_TYPE_PP(val) == IS_STRING) {
+ if(!strcmp(Z_STRVAL_PP(val), ESCAPING_VALUE_CDATA)) {
+ options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_cdata_escaping;
+ }
+ else if(!strcmp(Z_STRVAL_PP(val), ESCAPING_VALUE_NON_ASCII)) {
+ options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_non_ascii_escaping;
+ }
+ else if(!strcmp(Z_STRVAL_PP(val), ESCAPING_VALUE_NON_PRINT)) {
+ options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_non_print_escaping;
+ }
+ else if(!strcmp(Z_STRVAL_PP(val), ESCAPING_VALUE_MARKUP)) {
+ options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_markup_escaping;
+ }
+ }
+ }
+ }
}
}
@@ -430,199 +426,196 @@ static void set_output_options(php_output_options* options, zval* output_opts)
*/
static XMLRPC_VECTOR_TYPE determine_vector_type (HashTable *ht)
{
- int bArray = 0, bStruct = 0, bMixed = 0;
- unsigned long num_index;
- char* my_key;
-
- zend_hash_internal_pointer_reset(ht);
- while(1) {
- int res = my_zend_hash_get_current_key(ht, &my_key, &num_index);
- if(res == HASH_KEY_IS_LONG) {
- if(bStruct) {
- bMixed = 1;
- break;
- }
- bArray = 1;
- }
- else if(res == HASH_KEY_NON_EXISTANT) {
- break;
- }
- else if(res == HASH_KEY_IS_STRING) {
- if(bArray) {
- bMixed = 1;
- break;
- }
- bStruct = 1;
- }
-
- zend_hash_move_forward(ht);
- }
+ int bArray = 0, bStruct = 0, bMixed = 0;
+ unsigned long num_index;
+ char* my_key;
+
+ zend_hash_internal_pointer_reset(ht);
+ while(1) {
+ int res = my_zend_hash_get_current_key(ht, &my_key, &num_index);
+ if(res == HASH_KEY_IS_LONG) {
+ if(bStruct) {
+ bMixed = 1;
+ break;
+ }
+ bArray = 1;
+ }
+ else if(res == HASH_KEY_NON_EXISTANT) {
+ break;
+ }
+ else if(res == HASH_KEY_IS_STRING) {
+ if(bArray) {
+ bMixed = 1;
+ break;
+ }
+ bStruct = 1;
+ }
+
+ zend_hash_move_forward(ht);
+ }
return bMixed ? xmlrpc_vector_mixed : (bStruct ? xmlrpc_vector_struct : xmlrpc_vector_array);
}
/* recursively convert php values into xmlrpc values */
static XMLRPC_VALUE PHP_to_XMLRPC_worker (const char* key, zval* in_val, int depth TSRMLS_DC)
{
- XMLRPC_VALUE xReturn = NULL;
- if(in_val) {
- zval* val = NULL;
- XMLRPC_VALUE_TYPE type = get_zval_xmlrpc_type(in_val, &val);
- if(val) {
- switch(type) {
- case xmlrpc_base64:
- if(Z_TYPE_P(val) == IS_NULL) {
- xReturn = XMLRPC_CreateValueEmpty();
+ XMLRPC_VALUE xReturn = NULL;
+ if(in_val) {
+ zval* val = NULL;
+ XMLRPC_VALUE_TYPE type = get_zval_xmlrpc_type(in_val, &val);
+ if(val) {
+ switch(type) {
+ case xmlrpc_base64:
+ if(Z_TYPE_P(val) == IS_NULL) {
+ xReturn = XMLRPC_CreateValueEmpty();
XMLRPC_SetValueID(xReturn, key, 0);
- }
- else {
- xReturn = XMLRPC_CreateValueBase64(key, Z_STRVAL_P(val), Z_STRLEN_P(val));
- }
- break;
- case xmlrpc_datetime:
- convert_to_string(val);
- xReturn = XMLRPC_CreateValueDateTime_ISO8601(key, Z_STRVAL_P(val));
- break;
- case xmlrpc_boolean:
- convert_to_boolean(val);
- xReturn = XMLRPC_CreateValueBoolean(key, Z_LVAL_P(val));
- break;
- case xmlrpc_int:
- convert_to_long(val);
- xReturn = XMLRPC_CreateValueInt(key, Z_LVAL_P(val));
- break;
- case xmlrpc_double:
- convert_to_double(val);
- xReturn = XMLRPC_CreateValueDouble(key, Z_DVAL_P(val));
- break;
- case xmlrpc_string:
- convert_to_string(val);
- xReturn = XMLRPC_CreateValueString(key, Z_STRVAL_P(val), Z_STRLEN_P(val));
- break;
- case xmlrpc_vector:
- {
- unsigned long num_index;
- zval** pIter;
- char* my_key;
- HashTable *ht = NULL;
-
- ht = HASH_OF(val);
- if (ht && ht->nApplyCount > 1) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "XML-RPC doesn't support circular references");
- return NULL;
- }
-
- convert_to_array(val);
- xReturn = XMLRPC_CreateVector(key, determine_vector_type(Z_ARRVAL_P(val)));
-
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(val));
- while(zend_hash_get_current_data(Z_ARRVAL_P(val), (void**)&pIter) == SUCCESS) {
- int res = my_zend_hash_get_current_key(Z_ARRVAL_P(val), &my_key, &num_index);
+ } else {
+ xReturn = XMLRPC_CreateValueBase64(key, Z_STRVAL_P(val), Z_STRLEN_P(val));
+ }
+ break;
+ case xmlrpc_datetime:
+ convert_to_string(val);
+ xReturn = XMLRPC_CreateValueDateTime_ISO8601(key, Z_STRVAL_P(val));
+ break;
+ case xmlrpc_boolean:
+ convert_to_boolean(val);
+ xReturn = XMLRPC_CreateValueBoolean(key, Z_LVAL_P(val));
+ break;
+ case xmlrpc_int:
+ convert_to_long(val);
+ xReturn = XMLRPC_CreateValueInt(key, Z_LVAL_P(val));
+ break;
+ case xmlrpc_double:
+ convert_to_double(val);
+ xReturn = XMLRPC_CreateValueDouble(key, Z_DVAL_P(val));
+ break;
+ case xmlrpc_string:
+ convert_to_string(val);
+ xReturn = XMLRPC_CreateValueString(key, Z_STRVAL_P(val), Z_STRLEN_P(val));
+ break;
+ case xmlrpc_vector: {
+ unsigned long num_index;
+ zval** pIter;
+ char* my_key;
+ HashTable *ht = NULL;
+
+ ht = HASH_OF(val);
+ if (ht && ht->nApplyCount > 1) {
+ php_error_docref(NULL TSRMLS_CC, E_ERROR, "XML-RPC doesn't support circular references");
+ return NULL;
+ }
+
+ convert_to_array(val);
+ xReturn = XMLRPC_CreateVector(key, determine_vector_type(Z_ARRVAL_P(val)));
+
+ zend_hash_internal_pointer_reset(Z_ARRVAL_P(val));
+ while(zend_hash_get_current_data(Z_ARRVAL_P(val), (void**)&pIter) == SUCCESS) {
+ int res = my_zend_hash_get_current_key(Z_ARRVAL_P(val), &my_key, &num_index);
- switch (res) {
- case HASH_KEY_NON_EXISTANT:
- break;
- case HASH_KEY_IS_STRING:
- case HASH_KEY_IS_LONG:
- ht = HASH_OF(*pIter);
- if (ht) {
- ht->nApplyCount++;
- }
- if (res == HASH_KEY_IS_LONG) {
- XMLRPC_AddValueToVector(xReturn, PHP_to_XMLRPC_worker(0, *pIter, depth++ TSRMLS_CC));
- }
- else {
- XMLRPC_AddValueToVector(xReturn, PHP_to_XMLRPC_worker(my_key, *pIter, depth++ TSRMLS_CC));
- }
- if (ht) {
- ht->nApplyCount--;
- }
- break;
- }
- zend_hash_move_forward(Z_ARRVAL_P(val));
- }
- }
- break;
- default:
- break;
- }
- }
- }
+ switch (res) {
+ case HASH_KEY_NON_EXISTANT:
+ break;
+ case HASH_KEY_IS_STRING:
+ case HASH_KEY_IS_LONG:
+ ht = HASH_OF(*pIter);
+ if (ht) {
+ ht->nApplyCount++;
+ }
+ if (res == HASH_KEY_IS_LONG) {
+ XMLRPC_AddValueToVector(xReturn, PHP_to_XMLRPC_worker(0, *pIter, depth++ TSRMLS_CC));
+ } else {
+ XMLRPC_AddValueToVector(xReturn, PHP_to_XMLRPC_worker(my_key, *pIter, depth++ TSRMLS_CC));
+ }
+ if (ht) {
+ ht->nApplyCount--;
+ }
+ break;
+ }
+ zend_hash_move_forward(Z_ARRVAL_P(val));
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
return xReturn;
}
static XMLRPC_VALUE PHP_to_XMLRPC(zval* root_val TSRMLS_DC)
{
- return PHP_to_XMLRPC_worker(NULL, root_val, 0 TSRMLS_CC);
+ return PHP_to_XMLRPC_worker(NULL, root_val, 0 TSRMLS_CC);
}
/* recursively convert xmlrpc values into php values */
static zval* XMLRPC_to_PHP(XMLRPC_VALUE el)
{
- zval* elem = NULL;
- const char* pStr;
-
- if(el) {
- XMLRPC_VALUE_TYPE type = XMLRPC_GetValueType(el);
-
- MAKE_STD_ZVAL(elem); /* init. very important. spent a frustrating day finding this out. */
-
- switch(type) {
- case xmlrpc_empty:
- Z_TYPE_P(elem) = IS_NULL;
- break;
- case xmlrpc_string:
- pStr = XMLRPC_GetValueString(el);
- if(pStr) {
- Z_STRLEN_P(elem) = XMLRPC_GetValueStringLen(el);
- Z_STRVAL_P(elem) = estrndup(pStr, Z_STRLEN_P(elem));
- Z_TYPE_P(elem) = IS_STRING;
- }
- break;
- case xmlrpc_int:
- Z_LVAL_P(elem) = XMLRPC_GetValueInt(el);
- Z_TYPE_P(elem) = IS_LONG;
- break;
- case xmlrpc_boolean:
- Z_LVAL_P(elem) = XMLRPC_GetValueBoolean(el);
- Z_TYPE_P(elem) = IS_BOOL;
- break;
- case xmlrpc_double:
- Z_DVAL_P(elem) = XMLRPC_GetValueDouble(el);
- Z_TYPE_P(elem) = IS_DOUBLE;
- break;
- case xmlrpc_datetime:
- Z_STRLEN_P(elem) = XMLRPC_GetValueStringLen(el);
- Z_STRVAL_P(elem) = estrndup(XMLRPC_GetValueDateTime_ISO8601(el), Z_STRLEN_P(elem));
- Z_TYPE_P(elem) = IS_STRING;
- break;
- case xmlrpc_base64:
- pStr = XMLRPC_GetValueBase64(el);
- if(pStr) {
- Z_STRLEN_P(elem) = XMLRPC_GetValueStringLen(el);
- Z_STRVAL_P(elem) = estrndup(pStr, Z_STRLEN_P(elem));
- Z_TYPE_P(elem) = IS_STRING;
- }
- break;
- case xmlrpc_vector:
- array_init(elem);
- {
- XMLRPC_VALUE xIter = XMLRPC_VectorRewind(el);
-
- while( xIter ) {
- zval *val = XMLRPC_to_PHP(xIter);
- if (val) {
- add_zval(elem, XMLRPC_GetValueID(xIter), &val);
+ zval* elem = NULL;
+ const char* pStr;
+
+ if(el) {
+ XMLRPC_VALUE_TYPE type = XMLRPC_GetValueType(el);
+
+ MAKE_STD_ZVAL(elem); /* init. very important. spent a frustrating day finding this out. */
+
+ switch(type) {
+ case xmlrpc_empty:
+ Z_TYPE_P(elem) = IS_NULL;
+ break;
+ case xmlrpc_string:
+ pStr = XMLRPC_GetValueString(el);
+ if(pStr) {
+ Z_STRLEN_P(elem) = XMLRPC_GetValueStringLen(el);
+ Z_STRVAL_P(elem) = estrndup(pStr, Z_STRLEN_P(elem));
+ Z_TYPE_P(elem) = IS_STRING;
}
- xIter = XMLRPC_VectorNext(el);
- }
- }
- break;
- default:
- break;
- }
- set_zval_xmlrpc_type(elem, type);
- }
- return elem;
+ break;
+ case xmlrpc_int:
+ Z_LVAL_P(elem) = XMLRPC_GetValueInt(el);
+ Z_TYPE_P(elem) = IS_LONG;
+ break;
+ case xmlrpc_boolean:
+ Z_LVAL_P(elem) = XMLRPC_GetValueBoolean(el);
+ Z_TYPE_P(elem) = IS_BOOL;
+ break;
+ case xmlrpc_double:
+ Z_DVAL_P(elem) = XMLRPC_GetValueDouble(el);
+ Z_TYPE_P(elem) = IS_DOUBLE;
+ break;
+ case xmlrpc_datetime:
+ Z_STRLEN_P(elem) = XMLRPC_GetValueStringLen(el);
+ Z_STRVAL_P(elem) = estrndup(XMLRPC_GetValueDateTime_ISO8601(el), Z_STRLEN_P(elem));
+ Z_TYPE_P(elem) = IS_STRING;
+ break;
+ case xmlrpc_base64:
+ pStr = XMLRPC_GetValueBase64(el);
+ if(pStr) {
+ Z_STRLEN_P(elem) = XMLRPC_GetValueStringLen(el);
+ Z_STRVAL_P(elem) = estrndup(pStr, Z_STRLEN_P(elem));
+ Z_TYPE_P(elem) = IS_STRING;
+ }
+ break;
+ case xmlrpc_vector:
+ array_init(elem);
+ {
+ XMLRPC_VALUE xIter = XMLRPC_VectorRewind(el);
+
+ while( xIter ) {
+ zval *val = XMLRPC_to_PHP(xIter);
+ if (val) {
+ add_zval(elem, XMLRPC_GetValueID(xIter), &val);
+ }
+ xIter = XMLRPC_VectorNext(el);
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ set_zval_xmlrpc_type(elem, type);
+ }
+ return elem;
}
/* {{{ proto string xmlrpc_encode_request(string method, mixed params)
@@ -665,7 +658,7 @@ PHP_FUNCTION(xmlrpc_encode_request)
}
}
- if (out.xmlrpc_out.xml_elem_opts.encoding != ENCODING_DEFAULT) {
+ if (strcmp(out.xmlrpc_out.xml_elem_opts.encoding, ENCODING_DEFAULT) != 0) {
efree((char *)out.xmlrpc_out.xml_elem_opts.encoding);
}
}
@@ -705,30 +698,30 @@ PHP_FUNCTION(xmlrpc_encode)
zval* decode_request_worker (zval* xml_in, zval* encoding_in, zval* method_name_out)
{
- zval* retval = NULL;
- XMLRPC_REQUEST response;
- STRUCT_XMLRPC_REQUEST_INPUT_OPTIONS opts = {{0}};
- opts.xml_elem_opts.encoding = encoding_in ? utf8_get_encoding_id_from_string(Z_STRVAL_P(encoding_in)) : ENCODING_DEFAULT;
-
- /* generate XMLRPC_REQUEST from raw xml */
- response = XMLRPC_REQUEST_FromXML(Z_STRVAL_P(xml_in), Z_STRLEN_P(xml_in), &opts);
- if(response) {
- /* convert xmlrpc data to native php types */
- retval = XMLRPC_to_PHP(XMLRPC_RequestGetData(response));
-
- if(XMLRPC_RequestGetRequestType(response) == xmlrpc_request_call) {
- if(method_name_out) {
- zval_dtor(method_name_out);
- Z_TYPE_P(method_name_out) = IS_STRING;
- Z_STRVAL_P(method_name_out) = estrdup(XMLRPC_RequestGetMethodName(response));
- Z_STRLEN_P(method_name_out) = strlen(Z_STRVAL_P(method_name_out));
- }
- }
-
- /* dust, sweep, and mop */
- XMLRPC_RequestFree(response, 1);
- }
- return retval;
+ zval* retval = NULL;
+ XMLRPC_REQUEST response;
+ STRUCT_XMLRPC_REQUEST_INPUT_OPTIONS opts = {{0}};
+ opts.xml_elem_opts.encoding = encoding_in ? utf8_get_encoding_id_from_string(Z_STRVAL_P(encoding_in)) : ENCODING_DEFAULT;
+
+ /* generate XMLRPC_REQUEST from raw xml */
+ response = XMLRPC_REQUEST_FromXML(Z_STRVAL_P(xml_in), Z_STRLEN_P(xml_in), &opts);
+ if(response) {
+ /* convert xmlrpc data to native php types */
+ retval = XMLRPC_to_PHP(XMLRPC_RequestGetData(response));
+
+ if(XMLRPC_RequestGetRequestType(response) == xmlrpc_request_call) {
+ if(method_name_out) {
+ zval_dtor(method_name_out);
+ Z_TYPE_P(method_name_out) = IS_STRING;
+ Z_STRVAL_P(method_name_out) = estrdup(XMLRPC_RequestGetMethodName(response));
+ Z_STRLEN_P(method_name_out) = strlen(Z_STRVAL_P(method_name_out));
+ }
+ }
+
+ /* dust, sweep, and mop */
+ XMLRPC_RequestFree(response, 1);
+ }
+ return retval;
}
/* {{{ proto array xmlrpc_decode_request(string xml, string& method [, string encoding])
@@ -854,29 +847,29 @@ PHP_FUNCTION(xmlrpc_server_destroy)
*/
static XMLRPC_VALUE php_xmlrpc_callback(XMLRPC_SERVER server, XMLRPC_REQUEST xRequest, void* data)
{
- xmlrpc_callback_data* pData = (xmlrpc_callback_data*)data;
- zval* xmlrpc_params;
- zval* callback_params[3];
- TSRMLS_FETCH();
-
- /* convert xmlrpc to native php types */
- xmlrpc_params = XMLRPC_to_PHP(XMLRPC_RequestGetData(xRequest));
+ xmlrpc_callback_data* pData = (xmlrpc_callback_data*)data;
+ zval* xmlrpc_params;
+ zval* callback_params[3];
+ TSRMLS_FETCH();
+
+ /* convert xmlrpc to native php types */
+ xmlrpc_params = XMLRPC_to_PHP(XMLRPC_RequestGetData(xRequest));
- /* setup data hoojum */
- callback_params[0] = pData->xmlrpc_method;
- callback_params[1] = xmlrpc_params;
- callback_params[2] = pData->caller_params;
+ /* setup data hoojum */
+ callback_params[0] = pData->xmlrpc_method;
+ callback_params[1] = xmlrpc_params;
+ callback_params[2] = pData->caller_params;
- /* Use same C function for all methods */
+ /* Use same C function for all methods */
- /* php func prototype: function user_func($method_name, $xmlrpc_params, $user_params) */
- call_user_function(CG(function_table), NULL, pData->php_function, pData->return_data, 3, callback_params TSRMLS_CC);
+ /* php func prototype: function user_func($method_name, $xmlrpc_params, $user_params) */
+ call_user_function(CG(function_table), NULL, pData->php_function, pData->return_data, 3, callback_params TSRMLS_CC);
- pData->php_executed = 1;
+ pData->php_executed = 1;
- zval_ptr_dtor(&xmlrpc_params);
+ zval_ptr_dtor(&xmlrpc_params);
- return NULL;
+ return NULL;
}
/* called by the C server when it first receives an introspection request. We pass this on to
@@ -884,66 +877,62 @@ static XMLRPC_VALUE php_xmlrpc_callback(XMLRPC_SERVER server, XMLRPC_REQUEST xRe
*/
static void php_xmlrpc_introspection_callback(XMLRPC_SERVER server, void* data)
{
- zval *retval_ptr, **php_function;
- zval* callback_params[1];
- xmlrpc_callback_data* pData = (xmlrpc_callback_data*)data;
- TSRMLS_FETCH();
-
- MAKE_STD_ZVAL(retval_ptr);
- Z_TYPE_P(retval_ptr) = IS_NULL;
-
- /* setup data hoojum */
- callback_params[0] = pData->caller_params;
-
- /* loop through and call all registered callbacks */
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(pData->server->introspection_map));
- while(1) {
- if(zend_hash_get_current_data(Z_ARRVAL_P(pData->server->introspection_map),
- (void**)&php_function) == SUCCESS) {
-
- /* php func prototype: function string user_func($user_params) */
- if(call_user_function(CG(function_table), NULL, *php_function,
- retval_ptr, 1, callback_params TSRMLS_CC) == SUCCESS) {
- XMLRPC_VALUE xData;
- STRUCT_XMLRPC_ERROR err = {0};
-
- /* return value should be a string */
- convert_to_string(retval_ptr);
-
- xData = XMLRPC_IntrospectionCreateDescription(Z_STRVAL_P(retval_ptr), &err);
-
- if(xData) {
- if(!XMLRPC_ServerAddIntrospectionData(server, xData)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to add introspection data returned from %s(), improper element structure", Z_STRVAL_PP(php_function));
- }
- XMLRPC_CleanupValue(xData);
- }
- else {
- /* could not create description */
- if(err.xml_elem_error.parser_code) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "xml parse error: [line %ld, column %ld, message: %s] Unable to add introspection data returned from %s()",
- err.xml_elem_error.column, err.xml_elem_error.line, err.xml_elem_error.parser_error, Z_STRVAL_PP(php_function));
- }
- else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to add introspection data returned from %s()",
- Z_STRVAL_PP(php_function));
- }
- }
- }
- else {
- /* user func failed */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error calling user introspection callback: %s()", Z_STRVAL_PP(php_function));
- }
- }
- else {
- break;
- }
-
- zend_hash_move_forward(Z_ARRVAL_P(pData->server->introspection_map));
- }
-
- /* so we don't call the same callbacks ever again */
- zend_hash_clean(Z_ARRVAL_P(pData->server->introspection_map));
+ zval retval, **php_function;
+ zval* callback_params[1];
+ char *php_function_name;
+ xmlrpc_callback_data* pData = (xmlrpc_callback_data*)data;
+ TSRMLS_FETCH();
+
+ /* setup data hoojum */
+ callback_params[0] = pData->caller_params;
+
+ /* loop through and call all registered callbacks */
+ zend_hash_internal_pointer_reset(Z_ARRVAL_P(pData->server->introspection_map));
+ while(1) {
+ if(zend_hash_get_current_data(Z_ARRVAL_P(pData->server->introspection_map), (void**)&php_function) == SUCCESS) {
+
+ if (zend_is_callable(*php_function, 0, &php_function_name)) {
+ /* php func prototype: function string user_func($user_params) */
+ if (call_user_function(CG(function_table), NULL, *php_function, &retval, 1, callback_params TSRMLS_CC) == SUCCESS) {
+ XMLRPC_VALUE xData;
+ STRUCT_XMLRPC_ERROR err = {0};
+
+ /* return value should be a string */
+ convert_to_string(&retval);
+
+ xData = XMLRPC_IntrospectionCreateDescription(Z_STRVAL(retval), &err);
+
+ if(xData) {
+ if(!XMLRPC_ServerAddIntrospectionData(server, xData)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to add introspection data returned from %s(), improper element structure", php_function_name);
+ }
+ XMLRPC_CleanupValue(xData);
+ } else {
+ /* could not create description */
+ if(err.xml_elem_error.parser_code) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "xml parse error: [line %ld, column %ld, message: %s] Unable to add introspection data returned from %s()",
+ err.xml_elem_error.column, err.xml_elem_error.line, err.xml_elem_error.parser_error, php_function_name);
+ } else {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to add introspection data returned from %s()", php_function_name);
+ }
+ }
+ zval_dtor(&retval);
+ } else {
+ /* user func failed */
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error calling user introspection callback: %s()", php_function_name);
+ }
+ } else {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid callback '%s' passed", php_function_name);
+ }
+ efree(php_function_name);
+ } else {
+ break;
+ }
+ zend_hash_move_forward(Z_ARRVAL_P(pData->server->introspection_map));
+ }
+
+ /* so we don't call the same callbacks ever again */
+ zend_hash_clean(Z_ARRVAL_P(pData->server->introspection_map));
}
/* {{{ proto bool xmlrpc_server_register_method(resource server, string method_name, string function)
@@ -1218,70 +1207,70 @@ PHP_FUNCTION(xmlrpc_parse_method_descriptions)
/* return a string matching a given xmlrpc type */
static const char** get_type_str_mapping(void)
{
- static const char* str_mapping[TYPE_STR_MAP_SIZE];
- static int first = 1;
- if (first) {
- /* warning. do not add/delete without changing size define */
- str_mapping[xmlrpc_none] = "none";
- str_mapping[xmlrpc_empty] = "empty";
- str_mapping[xmlrpc_base64] = "base64";
- str_mapping[xmlrpc_boolean] = "boolean";
- str_mapping[xmlrpc_datetime] = "datetime";
- str_mapping[xmlrpc_double] = "double";
- str_mapping[xmlrpc_int] = "int";
- str_mapping[xmlrpc_string] = "string";
- str_mapping[xmlrpc_vector] = "vector";
- str_mapping[XMLRPC_TYPE_COUNT + xmlrpc_vector_none] = "none";
- str_mapping[XMLRPC_TYPE_COUNT + xmlrpc_vector_array] = "array";
- str_mapping[XMLRPC_TYPE_COUNT + xmlrpc_vector_mixed] = "mixed";
- str_mapping[XMLRPC_TYPE_COUNT + xmlrpc_vector_struct] = "struct";
- first = 0;
- }
- return (const char**)str_mapping;
+ static const char* str_mapping[TYPE_STR_MAP_SIZE];
+ static int first = 1;
+ if (first) {
+ /* warning. do not add/delete without changing size define */
+ str_mapping[xmlrpc_none] = "none";
+ str_mapping[xmlrpc_empty] = "empty";
+ str_mapping[xmlrpc_base64] = "base64";
+ str_mapping[xmlrpc_boolean] = "boolean";
+ str_mapping[xmlrpc_datetime] = "datetime";
+ str_mapping[xmlrpc_double] = "double";
+ str_mapping[xmlrpc_int] = "int";
+ str_mapping[xmlrpc_string] = "string";
+ str_mapping[xmlrpc_vector] = "vector";
+ str_mapping[XMLRPC_TYPE_COUNT + xmlrpc_vector_none] = "none";
+ str_mapping[XMLRPC_TYPE_COUNT + xmlrpc_vector_array] = "array";
+ str_mapping[XMLRPC_TYPE_COUNT + xmlrpc_vector_mixed] = "mixed";
+ str_mapping[XMLRPC_TYPE_COUNT + xmlrpc_vector_struct] = "struct";
+ first = 0;
+ }
+ return (const char**)str_mapping;
}
/* map an xmlrpc type to a string */
const char* xmlrpc_type_as_str(XMLRPC_VALUE_TYPE type, XMLRPC_VECTOR_TYPE vtype)
{
- const char** str_mapping = get_type_str_mapping();
+ const char** str_mapping = get_type_str_mapping();
- if (vtype == xmlrpc_vector_none) {
- return str_mapping[type];
- } else {
- return str_mapping[XMLRPC_TYPE_COUNT + vtype];
- }
+ if (vtype == xmlrpc_vector_none) {
+ return str_mapping[type];
+ } else {
+ return str_mapping[XMLRPC_TYPE_COUNT + vtype];
+ }
}
/* map a string to an xmlrpc type */
XMLRPC_VALUE_TYPE xmlrpc_str_as_type(const char* str)
{
- const char** str_mapping = get_type_str_mapping();
- int i;
-
- if (str) {
- for (i = 0; i < XMLRPC_TYPE_COUNT; i++) {
- if (!strcmp(str_mapping[i], str)) {
- return (XMLRPC_VALUE_TYPE) i;
- }
- }
- }
- return xmlrpc_none;
+ const char** str_mapping = get_type_str_mapping();
+ int i;
+
+ if (str) {
+ for (i = 0; i < XMLRPC_TYPE_COUNT; i++) {
+ if (!strcmp(str_mapping[i], str)) {
+ return (XMLRPC_VALUE_TYPE) i;
+ }
+ }
+ }
+ return xmlrpc_none;
}
/* map a string to an xmlrpc vector type */
XMLRPC_VECTOR_TYPE xmlrpc_str_as_vector_type(const char* str)
{
- const char** str_mapping = get_type_str_mapping();
- int i;
-
- if (str) {
- for (i = XMLRPC_TYPE_COUNT; i < TYPE_STR_MAP_SIZE; i++) {
- if (!strcmp(str_mapping[i], str)) {
- return (XMLRPC_VECTOR_TYPE) (i - XMLRPC_TYPE_COUNT);
- }
- }
- }
- return xmlrpc_none;
+ const char** str_mapping = get_type_str_mapping();
+ int i;
+
+ if (str) {
+ for (i = XMLRPC_TYPE_COUNT; i < TYPE_STR_MAP_SIZE; i++) {
+ if (!strcmp(str_mapping[i], str)) {
+ return (XMLRPC_VECTOR_TYPE) (i - XMLRPC_TYPE_COUNT);
+ }
+ }
+ }
+ return xmlrpc_none;
}
@@ -1291,107 +1280,106 @@ XMLRPC_VECTOR_TYPE xmlrpc_str_as_vector_type(const char* str)
*/
int set_zval_xmlrpc_type(zval* value, XMLRPC_VALUE_TYPE newtype)
{
- int bSuccess = FAILURE;
- TSRMLS_FETCH();
-
- /* we only really care about strings because they can represent
- * base64 and datetime. all other types have corresponding php types
- */
- if (Z_TYPE_P(value) == IS_STRING) {
- if (newtype == xmlrpc_base64 || newtype == xmlrpc_datetime) {
- const char* typestr = xmlrpc_type_as_str(newtype, xmlrpc_vector_none);
- zval* type;
-
- MAKE_STD_ZVAL(type);
-
- Z_TYPE_P(type) = IS_STRING;
- Z_STRVAL_P(type) = estrdup(typestr);
- Z_STRLEN_P(type) = strlen(typestr);
-
- if(newtype == xmlrpc_datetime) {
- XMLRPC_VALUE v = XMLRPC_CreateValueDateTime_ISO8601(NULL, value->value.str.val);
- if(v) {
- time_t timestamp = XMLRPC_GetValueDateTime(v);
- if(timestamp) {
- zval* ztimestamp;
-
- MAKE_STD_ZVAL(ztimestamp);
-
- ztimestamp->type = IS_LONG;
- ztimestamp->value.lval = timestamp;
-
- convert_to_object(value);
- if(SUCCESS == zend_hash_update(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR), (void *) &type, sizeof(zval *), NULL)) {
- bSuccess = zend_hash_update(Z_OBJPROP_P(value), OBJECT_VALUE_TS_ATTR, sizeof(OBJECT_VALUE_TS_ATTR), (void *) &ztimestamp, sizeof(zval *), NULL);
- }
- } else {
- zval_ptr_dtor(&type);
- }
- XMLRPC_CleanupValue(v);
- } else {
- zval_ptr_dtor(&type);
- }
- }
- else {
- convert_to_object(value);
- bSuccess = zend_hash_update(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR), (void *) &type, sizeof(zval *), NULL);
- }
- }
- }
+ int bSuccess = FAILURE;
+ TSRMLS_FETCH();
+
+ /* we only really care about strings because they can represent
+ * base64 and datetime. all other types have corresponding php types
+ */
+ if (Z_TYPE_P(value) == IS_STRING) {
+ if (newtype == xmlrpc_base64 || newtype == xmlrpc_datetime) {
+ const char* typestr = xmlrpc_type_as_str(newtype, xmlrpc_vector_none);
+ zval* type;
+
+ MAKE_STD_ZVAL(type);
+
+ Z_TYPE_P(type) = IS_STRING;
+ Z_STRVAL_P(type) = estrdup(typestr);
+ Z_STRLEN_P(type) = strlen(typestr);
+
+ if(newtype == xmlrpc_datetime) {
+ XMLRPC_VALUE v = XMLRPC_CreateValueDateTime_ISO8601(NULL, value->value.str.val);
+ if(v) {
+ time_t timestamp = XMLRPC_GetValueDateTime(v);
+ if(timestamp) {
+ zval* ztimestamp;
+
+ MAKE_STD_ZVAL(ztimestamp);
+
+ ztimestamp->type = IS_LONG;
+ ztimestamp->value.lval = timestamp;
+
+ convert_to_object(value);
+ if(SUCCESS == zend_hash_update(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR), (void *) &type, sizeof(zval *), NULL)) {
+ bSuccess = zend_hash_update(Z_OBJPROP_P(value), OBJECT_VALUE_TS_ATTR, sizeof(OBJECT_VALUE_TS_ATTR), (void *) &ztimestamp, sizeof(zval *), NULL);
+ }
+ } else {
+ zval_ptr_dtor(&type);
+ }
+ XMLRPC_CleanupValue(v);
+ } else {
+ zval_ptr_dtor(&type);
+ }
+ } else {
+ convert_to_object(value);
+ bSuccess = zend_hash_update(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR), (void *) &type, sizeof(zval *), NULL);
+ }
+ }
+ }
- return bSuccess;
+ return bSuccess;
}
/* return xmlrpc type of a php value */
XMLRPC_VALUE_TYPE get_zval_xmlrpc_type(zval* value, zval** newvalue)
{
- XMLRPC_VALUE_TYPE type = xmlrpc_none;
- TSRMLS_FETCH();
-
- if (value) {
- switch (Z_TYPE_P(value)) {
- case IS_NULL:
- type = xmlrpc_base64;
- break;
+ XMLRPC_VALUE_TYPE type = xmlrpc_none;
+ TSRMLS_FETCH();
+
+ if (value) {
+ switch (Z_TYPE_P(value)) {
+ case IS_NULL:
+ type = xmlrpc_base64;
+ break;
#ifndef BOOL_AS_LONG
- /* Right thing to do, but it breaks some legacy code. */
- case IS_BOOL:
- type = xmlrpc_boolean;
- break;
+ /* Right thing to do, but it breaks some legacy code. */
+ case IS_BOOL:
+ type = xmlrpc_boolean;
+ break;
#else
- case IS_BOOL:
+ case IS_BOOL:
#endif
- case IS_LONG:
- case IS_RESOURCE:
- type = xmlrpc_int;
- break;
- case IS_DOUBLE:
- type = xmlrpc_double;
- break;
- case IS_CONSTANT:
- type = xmlrpc_string;
- break;
- case IS_STRING:
- type = xmlrpc_string;
- break;
- case IS_ARRAY:
- case IS_CONSTANT_ARRAY:
- type = xmlrpc_vector;
- break;
- case IS_OBJECT:
- {
- zval** attr;
- type = xmlrpc_vector;
-
- if (zend_hash_find(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR), (void**) &attr) == SUCCESS) {
- if (Z_TYPE_PP(attr) == IS_STRING) {
- type = xmlrpc_str_as_type(Z_STRVAL_PP(attr));
- }
- }
- break;
- }
- }
+ case IS_LONG:
+ case IS_RESOURCE:
+ type = xmlrpc_int;
+ break;
+ case IS_DOUBLE:
+ type = xmlrpc_double;
+ break;
+ case IS_CONSTANT:
+ type = xmlrpc_string;
+ break;
+ case IS_STRING:
+ type = xmlrpc_string;
+ break;
+ case IS_ARRAY:
+ case IS_CONSTANT_ARRAY:
+ type = xmlrpc_vector;
+ break;
+ case IS_OBJECT:
+ {
+ zval** attr;
+ type = xmlrpc_vector;
+
+ if (zend_hash_find(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR), (void**) &attr) == SUCCESS) {
+ if (Z_TYPE_PP(attr) == IS_STRING) {
+ type = xmlrpc_str_as_type(Z_STRVAL_PP(attr));
+ }
+ }
+ break;
+ }
+ }
/* if requested, return an unmolested (magic removed) copy of the value */
if (newvalue) {
@@ -1406,7 +1394,6 @@ XMLRPC_VALUE_TYPE get_zval_xmlrpc_type(zval* value, zval** newvalue)
}
}
}
-
return type;
}
diff --git a/ext/xmlwriter/php_xmlwriter.c b/ext/xmlwriter/php_xmlwriter.c
index b0bd71c37..fbb8b5645 100644
--- a/ext/xmlwriter/php_xmlwriter.c
+++ b/ext/xmlwriter/php_xmlwriter.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_xmlwriter.c,v 1.20.2.12.2.17 2007/12/31 07:20:14 sebastian Exp $ */
+/* $Id: php_xmlwriter.c,v 1.20.2.12.2.20 2008/12/31 11:17:47 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -168,7 +168,7 @@ static zend_object_value xmlwriter_object_new(zend_class_entry *class_type TSRML
#define XMLW_NAME_CHK(__err) \
if (xmlValidateName((xmlChar *) name, 0) != 0) { \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, __err); \
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", __err); \
RETURN_FALSE; \
} \
@@ -1483,6 +1483,9 @@ static PHP_FUNCTION(xmlwriter_open_uri)
intern->uri_output = out_buffer;
#else
if (this) {
+ if (ze_obj->xmlwriter_ptr) {
+ xmlwriter_free_resource_ptr(ze_obj->xmlwriter_ptr TSRMLS_CC);
+ }
ze_obj->xmlwriter_ptr = intern;
RETURN_TRUE;
} else
@@ -1533,6 +1536,9 @@ static PHP_FUNCTION(xmlwriter_open_memory)
intern->uri_output = NULL;
#else
if (this) {
+ if (ze_obj->xmlwriter_ptr) {
+ xmlwriter_free_resource_ptr(ze_obj->xmlwriter_ptr TSRMLS_CC);
+ }
ze_obj->xmlwriter_ptr = intern;
RETURN_TRUE;
} else
diff --git a/ext/xmlwriter/php_xmlwriter.h b/ext/xmlwriter/php_xmlwriter.h
index 9f54e5855..868094205 100644
--- a/ext/xmlwriter/php_xmlwriter.h
+++ b/ext/xmlwriter/php_xmlwriter.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_xmlwriter.h,v 1.10.2.5.2.4 2007/12/31 07:20:14 sebastian Exp $ */
+/* $Id: php_xmlwriter.h,v 1.10.2.5.2.5 2008/12/31 11:17:47 sebastian Exp $ */
#ifndef PHP_XMLWRITER_H
#define PHP_XMLWRITER_H
diff --git a/ext/xsl/php_xsl.c b/ext/xsl/php_xsl.c
index a7e5537f3..ced1bacbe 100644
--- a/ext/xsl/php_xsl.c
+++ b/ext/xsl/php_xsl.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_xsl.c,v 1.32.2.6.2.3 2007/12/31 07:20:14 sebastian Exp $ */
+/* $Id: php_xsl.c,v 1.32.2.6.2.4 2008/12/31 11:17:47 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
diff --git a/ext/xsl/php_xsl.h b/ext/xsl/php_xsl.h
index a64ace360..974f8bcbc 100644
--- a/ext/xsl/php_xsl.h
+++ b/ext/xsl/php_xsl.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_xsl.h,v 1.15.2.1.2.2 2007/12/31 07:20:14 sebastian Exp $ */
+/* $Id: php_xsl.h,v 1.15.2.1.2.3 2008/12/31 11:17:47 sebastian Exp $ */
#ifndef PHP_XSL_H
#define PHP_XSL_H
diff --git a/ext/xsl/xsl_fe.h b/ext/xsl/xsl_fe.h
index d7384b0ae..9eaf7b6f8 100644
--- a/ext/xsl/xsl_fe.h
+++ b/ext/xsl/xsl_fe.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: xsl_fe.h,v 1.8.2.1.2.3 2007/12/31 07:20:14 sebastian Exp $ */
+/* $Id: xsl_fe.h,v 1.8.2.1.2.4 2008/12/31 11:17:47 sebastian Exp $ */
#ifndef XSL_FE_H
#define XSL_FE_H
diff --git a/ext/xsl/xsltprocessor.c b/ext/xsl/xsltprocessor.c
index dc9a370b8..17f2f1915 100644
--- a/ext/xsl/xsltprocessor.c
+++ b/ext/xsl/xsltprocessor.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: xsltprocessor.c,v 1.39.2.2.2.13 2008/01/29 21:21:28 sebastian Exp $ */
+/* $Id: xsltprocessor.c,v 1.39.2.2.2.16 2008/12/31 11:17:47 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -30,23 +30,23 @@
/* {{{ arginfo */
static
ZEND_BEGIN_ARG_INFO_EX(arginfo_xsl_xsltprocessor_import_stylesheet, 0, 0, 1)
- ZEND_ARG_OBJ_INFO(0, doc, DOMDocument, 0)
+ ZEND_ARG_INFO(0, doc)
ZEND_END_ARG_INFO();
static
ZEND_BEGIN_ARG_INFO_EX(arginfo_xsl_xsltprocessor_transform_to_doc, 0, 0, 1)
- ZEND_ARG_OBJ_INFO(0, doc, DOMNode, 0)
+ ZEND_ARG_INFO(0, doc)
ZEND_END_ARG_INFO();
static
ZEND_BEGIN_ARG_INFO_EX(arginfo_xsl_xsltprocessor_transform_to_uri, 0, 0, 2)
- ZEND_ARG_OBJ_INFO(0, doc, DOMDocument, 0)
+ ZEND_ARG_INFO(0, doc)
ZEND_ARG_INFO(0, uri)
ZEND_END_ARG_INFO();
static
ZEND_BEGIN_ARG_INFO_EX(arginfo_xsl_xsltprocessor_transform_to_xml, 0, 0, 1)
- ZEND_ARG_OBJ_INFO(0, doc, DOMDocument, 0)
+ ZEND_ARG_INFO(0, doc)
ZEND_END_ARG_INFO();
static
@@ -280,7 +280,9 @@ static void xsl_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs, int t
}
break;
default:
- ZVAL_STRING(args[i], xmlXPathCastToString(obj), 1);
+ str = xmlXPathCastToString(obj);
+ ZVAL_STRING(args[i], str, 1);
+ xmlFree(str);
}
xmlXPathFreeObject(obj);
fci.params[i] = &args[i];
diff --git a/ext/zip/Makefile.frag b/ext/zip/Makefile.frag
deleted file mode 100644
index b3781e3e7..000000000
--- a/ext/zip/Makefile.frag
+++ /dev/null
@@ -1,28 +0,0 @@
-phpincludedir=$(prefix)/include/php
-
-ZIP_HEADER_FILES= \
- zip.h \
- zipint.h \
- zip_alias.h \
- zipint_alias.h
-
-install-zip-headers:
- @echo "Installing ZIP headers: $(INSTALL_ROOT)$(phpincludedir)/ext/zip/lib"
- @$(mkinstalldirs) $(INSTALL_ROOT)$(phpincludedir)/ext/zip/lib
- @for f in $(ZIP_HEADER_FILES); do \
- if test -f "$(top_srcdir)/lib/$$f"; then \
- $(INSTALL_DATA) $(top_srcdir)/lib/$$f $(INSTALL_ROOT)$(phpincludedir)/ext/zip/lib; \
- elif test -f "$(top_builddir)/lib/$$f"; then \
- $(INSTALL_DATA) $(top_builddir)/lib/$$f $(INSTALL_ROOT)$(phpincludedir)/ext/zip/lib; \
- elif test -f "$(top_srcdir)/ext/zip/lib/$$f"; then \
- $(INSTALL_DATA) $(top_srcdir)/ext/zip/lib/$$f $(INSTALL_ROOT)$(phpincludedir)/ext/zip/lib; \
- elif test -f "$(top_builddir)/ext/zip/lib/$$f"; then \
- $(INSTALL_DATA) $(top_builddir)/ext/zip/lib/$$f $(INSTALL_ROOT)$(phpincludedir)/ext/zip/lib; \
- else \
- echo "hmmm"; \
- fi \
- done;
-
-# mini hack
-install: $(all_targets) $(install_targets) install-zip-headers
-
diff --git a/ext/zip/config.m4 b/ext/zip/config.m4
index f31f260d9..088dd1b6e 100644
--- a/ext/zip/config.m4
+++ b/ext/zip/config.m4
@@ -1,5 +1,5 @@
dnl
-dnl $Id: config.m4,v 1.8.2.4 2008/01/18 00:31:23 cellog Exp $
+dnl $Id: config.m4,v 1.8.2.6 2008/12/09 09:21:59 pajoye Exp $
dnl
PHP_ARG_ENABLE(zip, for zip archive read/writesupport,
@@ -20,7 +20,7 @@ if test "$PHP_ZIP" != "no"; then
PHP_ZLIB_DIR="$PHP_ZLIB_DIR"
PHP_ZLIB_INCDIR="$PHP_ZLIB_DIR/include"
else
- AC_MSG_ERROR([Can't find zlib headers under "$PHP_ZLIB_DIR"])
+ AC_MSG_ERROR([Can not find zlib headers under "$PHP_ZLIB_DIR"])
fi
else
for i in /usr/local /usr; do
@@ -52,13 +52,15 @@ if test "$PHP_ZIP" != "no"; then
lib/zip_error_get_sys_type.c lib/zip_file_get_offset.c \
lib/zip_get_name.c lib/zip_replace.c lib/zip_source_function.c \
lib/zip_unchange.c lib/zip_dirent.c lib/zip_error_strerror.c \
- lib/zip_file_strerror.c lib/zip_get_num_files.c \
+ lib/zip_filerange_crc.c lib/zip_file_strerror.c lib/zip_get_num_files.c \
+ lib/zip_get_archive_flag.c lib/zip_set_archive_flag.c \
lib/zip_set_name.c lib/zip_source_zip.c lib/zip_unchange_data.c \
lib/zip_entry_free.c lib/zip_error_to_str.c lib/zip_fopen.c \
lib/zip_name_locate.c lib/zip_source_buffer.c lib/zip_stat.c \
lib/zip_entry_new.c lib/zip_err_str.c lib/zip_fopen_index.c \
- lib/zip_new.c lib/zip_source_file.c lib/zip_stat_index.c lib/zip_get_archive_comment.c \
- lib/zip_get_file_comment.c lib/zip_set_archive_comment.c lib/zip_set_file_comment.c \
+ lib/zip_get_archive_comment.c lib/zip_get_file_comment.c \
+ lib/zip_new.c lib/zip_source_file.c lib/zip_stat_index.c \
+ lib/zip_set_archive_comment.c lib/zip_set_file_comment.c \
lib/zip_unchange_archive.c lib/zip_memdup.c lib/zip_stat_init.c lib/zip_add_dir.c \
lib/zip_error_clear.c lib/zip_file_error_clear.c"
@@ -66,12 +68,6 @@ if test "$PHP_ZIP" != "no"; then
PHP_NEW_EXTENSION(zip, php_zip.c zip_stream.c $PHP_ZIP_SOURCES, $ext_shared)
PHP_ADD_BUILD_DIR($ext_builddir/lib, 1)
PHP_SUBST(ZIP_SHARED_LIBADD)
- ifdef([PHP_INSTALL_HEADERS],
- [
- dnl Sadly, this is a complete NOP for pecl extensions
- PHP_INSTALL_HEADERS(ext/zip/lib, [lib/zip.h lib/zipint.h lib/zip_alias.h lib/zipint_alias.h])
- ])
dnl so we always include the known-good working hack.
- PHP_ADD_MAKEFILE_FRAGMENT
fi
diff --git a/ext/zip/config.w32 b/ext/zip/config.w32
index f0bc4c6db..56c39a217 100644
--- a/ext/zip/config.w32
+++ b/ext/zip/config.w32
@@ -1,4 +1,4 @@
-// $Id: config.w32,v 1.1.2.4 2008/01/14 03:19:41 cellog Exp $
+// $Id: config.w32,v 1.1.2.5 2008/10/23 16:13:50 pajoye Exp $
// vim:ft=javascript
ARG_ENABLE("zip", "ZIP support", "no");
@@ -18,7 +18,8 @@ if (PHP_ZIP != "no") {
zip_error_get_sys_type.c zip_file_get_offset.c \
zip_get_name.c zip_replace.c zip_source_function.c \
zip_unchange.c zip_dirent.c zip_error_strerror.c \
- zip_file_strerror.c zip_get_num_files.c \
+ zip_filerange_crc.c zip_file_strerror.c zip_get_num_files.c \
+ zip_get_archive_flag.c zip_set_archive_flag.c \
zip_set_name.c zip_source_zip.c zip_unchange_data.c \
zip_entry_free.c zip_error_to_str.c zip_fopen.c \
zip_name_locate.c zip_source_buffer.c zip_stat.c \
@@ -31,7 +32,6 @@ if (PHP_ZIP != "no") {
AC_DEFINE('HAVE_ZLIB', 1);
AC_DEFINE('HAVE_ZIP', 1);
- ADD_FLAG("CFLAGS_ZIP", "/D PHP_ZIP_EXPORTS ");
} else {
WARNING("zip not enabled; libraries and headers not found");
}
diff --git a/ext/zip/lib/mkstemp.c b/ext/zip/lib/mkstemp.c
deleted file mode 100644
index 3ac587eaf..000000000
--- a/ext/zip/lib/mkstemp.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/* $NiH: mkstemp.c,v 1.3 2006/04/23 14:51:45 wiz Exp $ */
-
-/* Adapted from NetBSB libc by Dieter Baron */
-
-/* NetBSD: gettemp.c,v 1.13 2003/12/05 00:57:36 uebayasi Exp */
-
-/*
- * Copyright (c) 1987, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-int
-_zip_mkstemp(char *path)
-{
- int fd;
- char *start, *trv;
- struct stat sbuf;
- pid_t pid;
-
- /* To guarantee multiple calls generate unique names even if
- the file is not created. 676 different possibilities with 7
- or more X's, 26 with 6 or less. */
- static char xtra[2] = "aa";
- int xcnt = 0;
-
- pid = getpid();
-
- /* Move to end of path and count trailing X's. */
- for (trv = path; *trv; ++trv)
- if (*trv == 'X')
- xcnt++;
- else
- xcnt = 0;
-
- /* Use at least one from xtra. Use 2 if more than 6 X's. */
- if (*(trv - 1) == 'X')
- *--trv = xtra[0];
- if (xcnt > 6 && *(trv - 1) == 'X')
- *--trv = xtra[1];
-
- /* Set remaining X's to pid digits with 0's to the left. */
- while (*--trv == 'X') {
- *trv = (pid % 10) + '0';
- pid /= 10;
- }
-
- /* update xtra for next call. */
- if (xtra[0] != 'z')
- xtra[0]++;
- else {
- xtra[0] = 'a';
- if (xtra[1] != 'z')
- xtra[1]++;
- else
- xtra[1] = 'a';
- }
-
- /*
- * check the target directory; if you have six X's and it
- * doesn't exist this runs for a *very* long time.
- */
- for (start = trv + 1;; --trv) {
- if (trv <= path)
- break;
- if (*trv == '/') {
- *trv = '\0';
- if (stat(path, &sbuf))
- return (0);
- if (!S_ISDIR(sbuf.st_mode)) {
- errno = ENOTDIR;
- return (0);
- }
- *trv = '/';
- break;
- }
- }
-
- for (;;) {
- if ((fd = open(path, O_CREAT | O_EXCL | O_RDWR, 0600)) >= 0)
- return (1);
- if (errno != EEXIST)
- return (0);
-
- /* tricky little algorithm for backward compatibility */
- for (trv = start;;) {
- if (!*trv)
- return (0);
- if (*trv == 'z')
- *trv++ = 'a';
- else {
- if (isdigit((unsigned char)*trv))
- *trv = 'a';
- else
- ++*trv;
- break;
- }
- }
- }
- /*NOTREACHED*/
-}
diff --git a/ext/zip/lib/unistd.h b/ext/zip/lib/unistd.h
deleted file mode 100644
index 2ef435c01..000000000
--- a/ext/zip/lib/unistd.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#ifndef _MSC_VER
-#include <unistd.h>
-#endif
diff --git a/ext/zip/lib/zip.h b/ext/zip/lib/zip.h
index 04ffb1471..e63ee7c7a 100644
--- a/ext/zip/lib/zip.h
+++ b/ext/zip/lib/zip.h
@@ -2,13 +2,11 @@
#define _HAD_ZIP_H
/*
- $NiH: zip.h,v 1.57 2006/04/24 14:04:19 dillo Exp $
-
zip.h -- exported declarations.
- Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2009 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -38,24 +36,26 @@
#include "main/php.h"
-/* #defines that rename all zip_ functions and structs */
-#include "zip_alias.h"
+
#ifdef PHP_WIN32
-#include "zip_win32.h"
+# include "zip_win32.h"
# ifdef PHP_ZIP_EXPORTS
-# define PHPZIPAPI __declspec(dllexport)
+# define ZIP_EXTERN(rt) __declspec(dllexport)rt _stdcall
# else
-# define PHPZIPAPI
+# define ZIP_EXTERN(rt) rt
# endif
+#elif defined(__GNUC__) && __GNUC__ >= 4
+# define ZIP_EXTERN(rt) __attribute__ ((visibility("default"))) rt
#else
-#define PHPZIPAPI
+# define ZIP_EXTERN(rt) rt
#endif
+
BEGIN_EXTERN_C()
+
#include <sys/types.h>
#include <stdio.h>
#include <time.h>
-
/* flags for zip_open */
#define ZIP_CREATE 1
@@ -70,6 +70,11 @@ BEGIN_EXTERN_C()
#define ZIP_FL_NODIR 2 /* ignore directory component */
#define ZIP_FL_COMPRESSED 4 /* read compressed data */
#define ZIP_FL_UNCHANGED 8 /* use original data, ignoring changes */
+#define ZIP_FL_RECOMPRESS 16 /* force recompression of data */
+
+/* archive global flags flags */
+
+#define ZIP_AFL_TORRENT 1 /* torrent zipped */
/* libzip error codes */
@@ -121,6 +126,13 @@ BEGIN_EXTERN_C()
#define ZIP_CM_PKWARE_IMPLODE 10 /* PKWARE imploding */
/* 11 - Reserved by PKWARE */
#define ZIP_CM_BZIP2 12 /* compressed using BZIP2 algorithm */
+/* 13 - Reserved by PKWARE */
+#define ZIP_CM_LZMA 14 /* LZMA (EFS) */
+/* 15-17 - Reserved by PKWARE */
+#define ZIP_CM_TERSE 18 /* compressed using IBM TERSE (new) */
+#define ZIP_CM_LZ77 19 /* IBM LZ77 z Architecture (PFS) */
+#define ZIP_CM_WAVPACK 97 /* WavPack compressed data */
+#define ZIP_CM_PPMD 98 /* PPMd version I, Rev 1 */
/* encryption methods */
@@ -170,46 +182,51 @@ struct zip_source;
-PHPZIPAPI int zip_add(struct zip *, const char *, struct zip_source *);
-PHPZIPAPI int zip_add_dir(struct zip *, const char *);
-PHPZIPAPI int zip_close(struct zip *);
-PHPZIPAPI int zip_delete(struct zip *, int);
-PHPZIPAPI void zip_error_clear(struct zip *);
-PHPZIPAPI void zip_error_get(struct zip *, int *, int *);
-PHPZIPAPI int zip_error_get_sys_type(int);
-PHPZIPAPI int zip_error_to_str(char *, size_t, int, int);
-PHPZIPAPI int zip_fclose(struct zip_file *);
-PHPZIPAPI void zip_file_error_clear(struct zip_file *);
-PHPZIPAPI void zip_file_error_get(struct zip_file *, int *, int *);
-PHPZIPAPI const char *zip_file_strerror(struct zip_file *);
-PHPZIPAPI struct zip_file *zip_fopen(struct zip *, const char *, int);
-PHPZIPAPI struct zip_file *zip_fopen_index(struct zip *, int, int);
-PHPZIPAPI ssize_t zip_fread(struct zip_file *, void *, size_t);
-PHPZIPAPI const char *zip_get_archive_comment(struct zip *, int *, int);
-PHPZIPAPI const char *zip_get_file_comment(struct zip *, int, int *, int);
-PHPZIPAPI const char *zip_get_name(struct zip *, int, int);
-PHPZIPAPI int zip_get_num_files(struct zip *);
-PHPZIPAPI int zip_name_locate(struct zip *, const char *, int);
-PHPZIPAPI struct zip *zip_open(const char *, int, int *);
-PHPZIPAPI int zip_rename(struct zip *, int, const char *);
-PHPZIPAPI int zip_replace(struct zip *, int, struct zip_source *);
-PHPZIPAPI int zip_set_archive_comment(struct zip *, const char *, int);
-PHPZIPAPI int zip_set_file_comment(struct zip *, int, const char *, int);
-PHPZIPAPI struct zip_source *zip_source_buffer(struct zip *, const void *, off_t, int);
-PHPZIPAPI struct zip_source *zip_source_file(struct zip *, const char *, off_t, off_t);
-PHPZIPAPI struct zip_source *zip_source_filep(struct zip *, FILE *, off_t, off_t);
-PHPZIPAPI void zip_source_free(struct zip_source *);
-PHPZIPAPI struct zip_source *zip_source_function(struct zip *,
+ZIP_EXTERN(int) zip_add(struct zip *, const char *, struct zip_source *);
+ZIP_EXTERN(int) zip_add_dir(struct zip *, const char *);
+ZIP_EXTERN(int) zip_close(struct zip *);
+ZIP_EXTERN(int) zip_delete(struct zip *, int);
+ZIP_EXTERN(void) zip_error_clear(struct zip *);
+ZIP_EXTERN(void) zip_error_get(struct zip *, int *, int *);
+ZIP_EXTERN(int) zip_error_get_sys_type(int);
+ZIP_EXTERN(int) zip_error_to_str(char *, size_t, int, int);
+ZIP_EXTERN(int) zip_fclose(struct zip_file *);
+ZIP_EXTERN(void) zip_file_error_clear(struct zip_file *);
+ZIP_EXTERN(void) zip_file_error_get(struct zip_file *, int *, int *);
+ZIP_EXTERN(const char *)zip_file_strerror(struct zip_file *);
+ZIP_EXTERN(struct zip_file *)zip_fopen(struct zip *, const char *, int);
+ZIP_EXTERN(struct zip_file *)zip_fopen_index(struct zip *, int, int);
+ZIP_EXTERN(ssize_t) zip_fread(struct zip_file *, void *, size_t);
+ZIP_EXTERN(const char *)zip_get_archive_comment(struct zip *, int *, int);
+ZIP_EXTERN(int) zip_get_archive_flag(struct zip *, int, int);
+ZIP_EXTERN(const char *)zip_get_file_comment(struct zip *, int, int *, int);
+ZIP_EXTERN(const char *)zip_get_name(struct zip *, int, int);
+ZIP_EXTERN(int) zip_get_num_files(struct zip *);
+ZIP_EXTERN(int) zip_name_locate(struct zip *, const char *, int);
+ZIP_EXTERN(struct zip *)zip_open(const char *, int, int *);
+ZIP_EXTERN(int) zip_rename(struct zip *, int, const char *);
+ZIP_EXTERN(int) zip_replace(struct zip *, int, struct zip_source *);
+ZIP_EXTERN(int) zip_set_archive_comment(struct zip *, const char *, int);
+ZIP_EXTERN(int) zip_set_archive_flag(struct zip *, int, int);
+ZIP_EXTERN(int) zip_set_file_comment(struct zip *, int, const char *, int);
+ZIP_EXTERN(struct zip_source *)zip_source_buffer(struct zip *, const void *,
+ off_t, int);
+ZIP_EXTERN(struct zip_source *)zip_source_file(struct zip *, const char *,
+ off_t, off_t);
+ZIP_EXTERN(struct zip_source *)zip_source_filep(struct zip *, FILE *,
+ off_t, off_t);
+ZIP_EXTERN(void) zip_source_free(struct zip_source *);
+ZIP_EXTERN(struct zip_source *)zip_source_function(struct zip *,
zip_source_callback, void *);
-PHPZIPAPI struct zip_source *zip_source_zip(struct zip *, struct zip *, int, int,
- off_t, off_t);
-PHPZIPAPI int zip_stat(struct zip *, const char *, int, struct zip_stat *);
-PHPZIPAPI int zip_stat_index(struct zip *, int, int, struct zip_stat *);
-PHPZIPAPI void zip_stat_init(struct zip_stat *);
-PHPZIPAPI const char *zip_strerror(struct zip *);
-PHPZIPAPI int zip_unchange(struct zip *, int);
-PHPZIPAPI int zip_unchange_all(struct zip *);
-PHPZIPAPI int zip_unchange_archive(struct zip *);
+ZIP_EXTERN(struct zip_source *)zip_source_zip(struct zip *, struct zip *,
+ int, int, off_t, off_t);
+ZIP_EXTERN(int) zip_stat(struct zip *, const char *, int, struct zip_stat *);
+ZIP_EXTERN(int) zip_stat_index(struct zip *, int, int, struct zip_stat *);
+ZIP_EXTERN(void) zip_stat_init(struct zip_stat *);
+ZIP_EXTERN(const char *)zip_strerror(struct zip *);
+ZIP_EXTERN(int) zip_unchange(struct zip *, int);
+ZIP_EXTERN(int) zip_unchange_all(struct zip *);
+ZIP_EXTERN(int) zip_unchange_archive(struct zip *);
END_EXTERN_C();
#endif /* _HAD_ZIP_H */
diff --git a/ext/zip/lib/zip_add.c b/ext/zip/lib/zip_add.c
index 70d1162f7..3afb1768f 100644
--- a/ext/zip/lib/zip_add.c
+++ b/ext/zip/lib/zip_add.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_add.c,v 1.14 2004/11/18 15:04:04 wiz Exp $
-
zip_add.c -- add file via callback function
- Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -35,17 +33,17 @@
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI int
+ZIP_EXTERN(int)
zip_add(struct zip *za, const char *name, struct zip_source *source)
{
if (name == NULL || source == NULL) {
_zip_error_set(&za->error, ZIP_ER_INVAL, 0);
return -1;
}
+
return _zip_replace(za, -1, name, source);
}
diff --git a/ext/zip/lib/zip_add_dir.c b/ext/zip/lib/zip_add_dir.c
index d4da559ec..9b2342519 100644
--- a/ext/zip/lib/zip_add_dir.c
+++ b/ext/zip/lib/zip_add_dir.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_add_dir.c,v 1.1 2006/10/03 12:23:13 dillo Exp $
-
zip_add_dir.c -- add directory
- Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -38,12 +36,11 @@
#include <stdlib.h>
#include <string.h>
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI int
+ZIP_EXTERN(int)
zip_add_dir(struct zip *za, const char *name)
{
int len, ret;
diff --git a/ext/zip/lib/zip_alias.h b/ext/zip/lib/zip_alias.h
deleted file mode 100644
index 27a7b45df..000000000
--- a/ext/zip/lib/zip_alias.h
+++ /dev/null
@@ -1,45 +0,0 @@
-
-#define zip_source_cmd php_ziplib__zip_source_cmd
-#define zip_source_callback php_ziplib__zip_source_callback
-#define zip_stat php_ziplib__zip_stat
-#define zip php_ziplib__zip
-#define zip_file php_ziplib__zip_file
-#define zip_source php_ziplib__zip_source
-#define zip_add php_ziplib__zip_add
-#define zip_add_dir php_ziplib__zip_add_dir
-#define zip_close php_ziplib__zip_close
-#define zip_delete php_ziplib__zip_delete
-#define zip_error_clear php_ziplib__zip_error_clear
-#define zip_error_get php_ziplib__zip_error_get
-#define zip_error_get_sys_type php_ziplib__zip_error_get_sys_type
-#define zip_error_to_str php_ziplib__zip_error_to_str
-#define zip_fclose php_ziplib__zip_fclose
-#define zip_file_error_clear php_ziplib__zip_fille_error_clear
-#define zip_file_error_get php_ziplib__zip_file_error_get
-#define zip_file_strerror php_ziplib__zip_file_strerror
-#define zip_fopen php_ziplib__zip_fopen
-#define zip_fopen_index php_ziplib__zip_fopen_index
-#define zip_fread php_ziplib__zip_fread
-#define zip_get_archive_comment php_ziplib__zip_get_archive_comment
-#define zip_get_file_comment php_ziplib__zip_get_file_comment
-#define zip_get_name php_ziplib__zip_get_name
-#define zip_get_num_files php_ziplib__zip_get_num_files
-#define zip_name_locate php_ziplib__zip_name_locate
-#define zip_open php_ziplib__zip_open
-#define zip_rename php_ziplib__zip_rename
-#define zip_replace php_ziplib__zip_replace
-#define zip_set_archive_comment php_ziplib__zip_set_archive_comment
-#define zip_set_file_comment php_ziplib__zip_set_file_comment
-#define zip_source_buffer php_ziplib__zip_source_buffer
-#define zip_source_file php_ziplib__zip_source_file
-#define zip_source_filep php_ziplib__zip_source_filep
-#define zip_source_free php_ziplib__zip_source_free
-#define zip_source_function php_ziplib__zip_source_function
-#define zip_source_zip php_ziplib__zip_source_zip
-#define zip_stat php_ziplib__zip_stat
-#define zip_stat_index php_ziplib__zip_stat_index
-#define zip_stat_init php_ziplib__zip_stat_init
-#define zip_strerror php_ziplib__zip_strerror
-#define zip_unchange php_ziplib__zip_unchange
-#define zip_unchange_all php_ziplib__zip_unchange_all
-#define zip_unchange_archive php_ziplib__zip_unchange_archive
diff --git a/ext/zip/lib/zip_close.c b/ext/zip/lib/zip_close.c
index 11ba8e223..289ca7afb 100644
--- a/ext/zip/lib/zip_close.c
+++ b/ext/zip/lib/zip_close.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_close.c,v 1.60 2006/05/09 17:21:47 wiz Exp $
-
zip_close.c -- close zip archive and update changes
- Copyright (C) 1999, 2004, 2005 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2009 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -32,31 +30,42 @@
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+
+
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
-#ifndef _MSC_VER
-#include <unistd.h>
-#endif
#include <sys/types.h>
#include <sys/stat.h>
-#include "zip.h"
#include "zipint.h"
-static int add_data(struct zip *, int, struct zip_dirent *, FILE *);
+static int add_data(struct zip *, struct zip_source *, struct zip_dirent *,
+ FILE *);
static int add_data_comp(zip_source_callback, void *, struct zip_stat *,
FILE *, struct zip_error *);
-static int add_data_uncomp(zip_source_callback, void *, struct zip_stat *,
- FILE *, struct zip_error *);
+static int add_data_uncomp(struct zip *, zip_source_callback, void *,
+ struct zip_stat *, FILE *);
static void ch_set_error(struct zip_error *, zip_source_callback, void *);
static int copy_data(FILE *, off_t, FILE *, struct zip_error *);
+static int write_cdir(struct zip *, struct zip_cdir *, FILE *);
static int _zip_cdir_set_comment(struct zip_cdir *, struct zip *);
static int _zip_changed(struct zip *, int *);
static char *_zip_create_temp_output(struct zip *, FILE **);
+static int _zip_torrentzip_cmp(const void *, const void *);
-PHPZIPAPI int
+
+
+struct filelist {
+ int idx;
+ const char *name;
+};
+
+
+
+ZIP_EXTERN(int)
zip_close(struct zip *za)
{
int survivors;
@@ -66,7 +75,14 @@ zip_close(struct zip *za)
mode_t mask;
struct zip_cdir *cd;
struct zip_dirent de;
- int rename_error = 0;
+ struct filelist *filelist;
+ int reopen_on_error;
+ int new_torrentzip;
+
+ reopen_on_error = 0;
+
+ if (za == NULL)
+ return -1;
if (!_zip_changed(za, &survivors)) {
_zip_free(za);
@@ -75,7 +91,7 @@ zip_close(struct zip *za)
/* don't create zip files with no entries */
if (survivors == 0) {
- if (za->zn) {
+ if (za->zn && za->zp) {
if (remove(za->zn) != 0) {
_zip_error_set(&za->error, ZIP_ER_REMOVE, errno);
return -1;
@@ -85,52 +101,92 @@ zip_close(struct zip *za)
return 0;
}
- if ((cd=_zip_cdir_new(survivors, &za->error)) == NULL)
+ if ((filelist=(struct filelist *)malloc(sizeof(filelist[0])*survivors))
+ == NULL)
+ return -1;
+
+ if ((cd=_zip_cdir_new(survivors, &za->error)) == NULL) {
+ free(filelist);
return -1;
+ }
for (i=0; i<survivors; i++)
_zip_dirent_init(&cd->entry[i]);
+ /* archive comment is special for torrentzip */
+ if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0)) {
+ cd->comment = _zip_memdup(TORRENT_SIG "XXXXXXXX",
+ TORRENT_SIG_LEN + TORRENT_CRC_LEN,
+ &za->error);
+ if (cd->comment == NULL) {
+ _zip_cdir_free(cd);
+ free(filelist);
+ return -1;
+ }
+ cd->comment_len = TORRENT_SIG_LEN + TORRENT_CRC_LEN;
+ }
+ else if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, ZIP_FL_UNCHANGED) == 0) {
if (_zip_cdir_set_comment(cd, za) == -1) {
_zip_cdir_free(cd);
+ free(filelist);
return -1;
}
+ }
if ((temp=_zip_create_temp_output(za, &out)) == NULL) {
_zip_cdir_free(cd);
return -1;
}
- error = 0;
+
+ /* create list of files with index into original archive */
for (i=j=0; i<za->nentry; i++) {
if (za->entry[i].state == ZIP_ST_DELETED)
continue;
+ filelist[j].idx = i;
+ filelist[j].name = zip_get_name(za, i, 0);
+ j++;
+ }
+ if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0))
+ qsort(filelist, survivors, sizeof(filelist[0]),
+ _zip_torrentzip_cmp);
+
+ new_torrentzip = (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0) == 1
+ && zip_get_archive_flag(za, ZIP_AFL_TORRENT,
+ ZIP_FL_UNCHANGED) == 0);
+ error = 0;
+ for (j=0; j<survivors; j++) {
+ i = filelist[j].idx;
+
/* create new local directory entry */
- if (ZIP_ENTRY_DATA_CHANGED(za->entry+i)) {
+ if (ZIP_ENTRY_DATA_CHANGED(za->entry+i) || new_torrentzip) {
_zip_dirent_init(&de);
+
+ if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0))
+ _zip_dirent_torrent_normalize(&de);
+
/* use it as central directory entry */
memcpy(cd->entry+j, &de, sizeof(cd->entry[j]));
/* set/update file name */
if (za->entry[i].ch_filename == NULL) {
- if (za->entry[i].state == ZIP_ST_REPLACED) {
- de.filename = strdup(za->cdir->entry[i].filename);
- de.filename_len = strlen(de.filename);
- cd->entry[j].filename = za->cdir->entry[i].filename;
- cd->entry[j].filename_len = de.filename_len;
- }
- else {
+ if (za->entry[i].state == ZIP_ST_ADDED) {
de.filename = strdup("-");
de.filename_len = 1;
cd->entry[j].filename = "-";
+ }
+ else {
+ de.filename = strdup(za->cdir->entry[i].filename);
+ de.filename_len = strlen(de.filename);
+ cd->entry[j].filename = za->cdir->entry[i].filename;
cd->entry[j].filename_len = de.filename_len;
}
}
}
else {
/* copy existing directory entries */
- if (fseek(za->zp, za->cdir->entry[i].offset, SEEK_SET) != 0) {
+ if (fseeko(za->zp, za->cdir->entry[i].offset, SEEK_SET) != 0) {
_zip_error_set(&za->error, ZIP_ER_SEEK, errno);
error = 1;
break;
@@ -139,11 +195,11 @@ zip_close(struct zip *za)
error = 1;
break;
}
-
- if (de.bitflags & ZIP_GPBF_USE_DATA_DESCRIPTOR) {
- de.crc = (za->cdir->entry+i)->crc;
- de.comp_size = (za->cdir->entry+i)->comp_size;
- de.uncomp_size = (za->cdir->entry+i)->uncomp_size;
+ if (de.bitflags & ZIP_GPBF_DATA_DESCRIPTOR) {
+ de.crc = za->cdir->entry[i].crc;
+ de.comp_size = za->cdir->entry[i].comp_size;
+ de.uncomp_size = za->cdir->entry[i].uncomp_size;
+ de.bitflags &= ~ZIP_GPBF_DATA_DESCRIPTOR;
}
memcpy(cd->entry+j, za->cdir->entry+i, sizeof(cd->entry[j]));
}
@@ -159,20 +215,31 @@ zip_close(struct zip *za)
cd->entry[j].filename_len = de.filename_len;
}
- if (za->entry[i].ch_comment_len != -1) {
+ if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0) == 0
+ && za->entry[i].ch_comment_len != -1) {
/* as the rest of cd entries, its malloc/free is done by za */
cd->entry[j].comment = za->entry[i].ch_comment;
cd->entry[j].comment_len = za->entry[i].ch_comment_len;
}
- cd->entry[j].offset = ftell(out);
+ cd->entry[j].offset = ftello(out);
+
+ if (ZIP_ENTRY_DATA_CHANGED(za->entry+i) || new_torrentzip) {
+ struct zip_source *zs;
- if (ZIP_ENTRY_DATA_CHANGED(za->entry+i)) {
- if (add_data(za, i, &de, out) < 0) {
+ zs = NULL;
+ if (!ZIP_ENTRY_DATA_CHANGED(za->entry+i)) {
+ if ((zs=zip_source_zip(za, za, i, ZIP_FL_RECOMPRESS, 0, -1))
+ == NULL) {
error = 1;
break;
}
+ }
+ if (add_data(za, zs ? zs : za->entry[i].source, &de, out) < 0) {
+ error = 1;
+ break;
+ }
cd->entry[j].last_mod = de.last_mod;
cd->entry[j].comp_method = de.comp_method;
cd->entry[j].comp_size = de.comp_size;
@@ -185,19 +252,18 @@ zip_close(struct zip *za)
break;
}
/* we just read the local dirent, file is at correct position */
- if (copy_data(za->zp, de.comp_size, out, &za->error) < 0) {
+ if (copy_data(za->zp, cd->entry[j].comp_size, out,
+ &za->error) < 0) {
error = 1;
break;
}
}
- j++;
-
_zip_dirent_finalize(&de);
}
if (!error) {
- if (_zip_cdir_write(cd, out, &za->error) < 0)
+ if (write_cdir(za, cd, out) < 0)
error = 1;
}
@@ -223,46 +289,40 @@ zip_close(struct zip *za)
if (za->zp) {
fclose(za->zp);
za->zp = NULL;
+ reopen_on_error = 1;
}
-
-#ifdef PHP_WIN32
- if (!MoveFileEx(temp, za->zn, MOVEFILE_REPLACE_EXISTING)) {
- rename_error = -1;
- }
-#else
- if (rename(temp, za->zn) != 0) {
- rename_error = -1;
- }
-#endif
-
- if (rename_error < 0) {
+ if (_zip_rename(temp, za->zn) != 0) {
_zip_error_set(&za->error, ZIP_ER_RENAME, errno);
remove(temp);
free(temp);
+ if (reopen_on_error) {
+ /* ignore errors, since we're already in an error case */
+ za->zp = fopen(za->zn, "rb");
+ }
return -1;
}
-
mask = umask(0);
umask(mask);
chmod(za->zn, 0666&~mask);
_zip_free(za);
free(temp);
+
return 0;
}
static int
-add_data(struct zip *za, int idx, struct zip_dirent *de, FILE *ft)
+add_data(struct zip *za, struct zip_source *zs, struct zip_dirent *de, FILE *ft)
{
off_t offstart, offend;
zip_source_callback cb;
void *ud;
struct zip_stat st;
- cb = za->entry[idx].source->f;
- ud = za->entry[idx].source->ud;
+ cb = zs->f;
+ ud = zs->ud;
if (cb(ud, &st, sizeof(st), ZIP_SOURCE_STAT) < (ssize_t)sizeof(st)) {
ch_set_error(&za->error, cb, ud);
@@ -274,7 +334,7 @@ add_data(struct zip *za, int idx, struct zip_dirent *de, FILE *ft)
return -1;
}
- offstart = ftell(ft);
+ offstart = ftello(ft);
if (_zip_dirent_write(de, ft, 1, &za->error) < 0)
return -1;
@@ -284,7 +344,7 @@ add_data(struct zip *za, int idx, struct zip_dirent *de, FILE *ft)
return -1;
}
else {
- if (add_data_uncomp(cb, ud, &st, ft, &za->error) < 0)
+ if (add_data_uncomp(za, cb, ud, &st, ft) < 0)
return -1;
}
@@ -293,23 +353,27 @@ add_data(struct zip *za, int idx, struct zip_dirent *de, FILE *ft)
return -1;
}
- offend = ftell(ft);
+ offend = ftello(ft);
- if (fseek(ft, offstart, SEEK_SET) < 0) {
+ if (fseeko(ft, offstart, SEEK_SET) < 0) {
_zip_error_set(&za->error, ZIP_ER_SEEK, errno);
return -1;
}
- de->comp_method = st.comp_method;
+
de->last_mod = st.mtime;
+ de->comp_method = st.comp_method;
de->crc = st.crc;
de->uncomp_size = st.size;
de->comp_size = st.comp_size;
+ if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0))
+ _zip_dirent_torrent_normalize(de);
+
if (_zip_dirent_write(de, ft, 1, &za->error) < 0)
return -1;
- if (fseek(ft, offend, SEEK_SET) < 0) {
+ if (fseeko(ft, offend, SEEK_SET) < 0) {
_zip_error_set(&za->error, ZIP_ER_SEEK, errno);
return -1;
}
@@ -346,14 +410,15 @@ add_data_comp(zip_source_callback cb, void *ud, struct zip_stat *st,FILE *ft,
static int
-add_data_uncomp(zip_source_callback cb, void *ud, struct zip_stat *st,
- FILE *ft, struct zip_error *error)
+add_data_uncomp(struct zip *za, zip_source_callback cb, void *ud,
+ struct zip_stat *st, FILE *ft)
{
char b1[BUFSIZE], b2[BUFSIZE];
int end, flush, ret;
ssize_t n;
size_t n2;
z_stream zstr;
+ int mem_level;
st->comp_method = ZIP_CM_DEFLATE;
st->comp_size = st->size = 0;
@@ -365,8 +430,13 @@ add_data_uncomp(zip_source_callback cb, void *ud, struct zip_stat *st,
zstr.avail_in = 0;
zstr.avail_out = 0;
- /* -15: undocumented feature of zlib to _not_ write a zlib header */
- deflateInit2(&zstr, Z_BEST_COMPRESSION, Z_DEFLATED, -15, 9,
+ if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0))
+ mem_level = TORRENT_MEM_LEVEL;
+ else
+ mem_level = MAX_MEM_LEVEL;
+
+ /* -MAX_WBITS: undocumented feature of zlib to _not_ write a zlib header */
+ deflateInit2(&zstr, Z_BEST_COMPRESSION, Z_DEFLATED, -MAX_WBITS, mem_level,
Z_DEFAULT_STRATEGY);
zstr.next_out = (Bytef *)b2;
@@ -378,7 +448,7 @@ add_data_uncomp(zip_source_callback cb, void *ud, struct zip_stat *st,
while (!end) {
if (zstr.avail_in == 0 && !flush) {
if ((n=cb(ud, b1, sizeof(b1), ZIP_SOURCE_READ)) < 0) {
- ch_set_error(error, cb, ud);
+ ch_set_error(&za->error, cb, ud);
deflateEnd(&zstr);
return -1;
}
@@ -394,7 +464,7 @@ add_data_uncomp(zip_source_callback cb, void *ud, struct zip_stat *st,
ret = deflate(&zstr, flush);
if (ret != Z_OK && ret != Z_STREAM_END) {
- _zip_error_set(error, ZIP_ER_ZLIB, ret);
+ _zip_error_set(&za->error, ZIP_ER_ZLIB, ret);
return -1;
}
@@ -402,7 +472,7 @@ add_data_uncomp(zip_source_callback cb, void *ud, struct zip_stat *st,
n2 = sizeof(b2) - zstr.avail_out;
if (fwrite(b2, 1, n2, ft) != n2) {
- _zip_error_set(error, ZIP_ER_WRITE, errno);
+ _zip_error_set(&za->error, ZIP_ER_WRITE, errno);
return -1;
}
@@ -473,6 +543,44 @@ copy_data(FILE *fs, off_t len, FILE *ft, struct zip_error *error)
static int
+write_cdir(struct zip *za, struct zip_cdir *cd, FILE *out)
+{
+ off_t offset;
+ uLong crc;
+ char buf[TORRENT_CRC_LEN+1];
+
+ if (_zip_cdir_write(cd, out, &za->error) < 0)
+ return -1;
+
+ if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0) == 0)
+ return 0;
+
+
+ /* fix up torrentzip comment */
+
+ offset = ftello(out);
+
+ if (_zip_filerange_crc(out, cd->offset, cd->size, &crc, &za->error) < 0)
+ return -1;
+
+ snprintf(buf, sizeof(buf), "%08lX", (long)crc);
+
+ if (fseeko(out, offset-TORRENT_CRC_LEN, SEEK_SET) < 0) {
+ _zip_error_set(&za->error, ZIP_ER_SEEK, errno);
+ return -1;
+ }
+
+ if (fwrite(buf, TORRENT_CRC_LEN, 1, out) != 1) {
+ _zip_error_set(&za->error, ZIP_ER_WRITE, errno);
+ return -1;
+ }
+
+ return 0;
+}
+
+
+
+static int
_zip_cdir_set_comment(struct zip_cdir *dest, struct zip *src)
{
if (src->ch_comment_len != -1) {
@@ -503,7 +611,8 @@ _zip_changed(struct zip *za, int *survivorsp)
changed = survivors = 0;
- if (za->ch_comment_len != -1)
+ if (za->ch_comment_len != -1
+ || za->ch_flags != za->flags)
changed = 1;
for (i=0; i<za->nentry; i++) {
@@ -527,14 +636,14 @@ _zip_create_temp_output(struct zip *za, FILE **outp)
char *temp;
int tfd;
FILE *tfp;
- int len = strlen(za->zn) + 8;
+ int len = strlen(za->zn) + 8;
- if ((temp=(char *)malloc(len)) == NULL) {
+ if ((temp=(char *)malloc(strlen(za->zn)+8)) == NULL) {
_zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
return NULL;
}
- snprintf(temp, len, "%s.XXXXXX", za->zn);
+ snprintf(temp, len, "%s.XXXXXX", za->zn);
if ((tfd=mkstemp(temp)) == -1) {
_zip_error_set(&za->error, ZIP_ER_TMPOPEN, errno);
@@ -556,3 +665,12 @@ _zip_create_temp_output(struct zip *za, FILE **outp)
*outp = tfp;
return temp;
}
+
+
+
+static int
+_zip_torrentzip_cmp(const void *a, const void *b)
+{
+ return strcasecmp(((const struct filelist *)a)->name,
+ ((const struct filelist *)b)->name);
+}
diff --git a/ext/zip/lib/zip_delete.c b/ext/zip/lib/zip_delete.c
index eb5055b68..4591ff7f8 100644
--- a/ext/zip/lib/zip_delete.c
+++ b/ext/zip/lib/zip_delete.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_delete.c,v 1.17 2005/06/09 19:57:09 dillo Exp $
-
zip_delete.c -- delete file from zip archive
- Copyright (C) 1999, 2004, 2005 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -35,12 +33,11 @@
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI int
+ZIP_EXTERN(int)
zip_delete(struct zip *za, int idx)
{
if (idx < 0 || idx >= za->nentry) {
diff --git a/ext/zip/lib/zip_dirent.c b/ext/zip/lib/zip_dirent.c
index f796f8d66..425f7ff92 100644
--- a/ext/zip/lib/zip_dirent.c
+++ b/ext/zip/lib/zip_dirent.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_dirent.c,v 1.9 2006/04/23 14:51:45 wiz Exp $
-
zip_dirent.c -- read directory entry (local or central), clean dirent
- Copyright (C) 1999, 2003, 2004, 2005 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2009 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -33,18 +31,15 @@
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "main/php_reentrancy.h"
+
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
-#ifndef _MSC_VER
-#include <unistd.h>
-#endif
#include <sys/types.h>
#include <sys/stat.h>
-#include "zip.h"
#include "zipint.h"
static time_t _zip_d2u_time(int, int);
@@ -56,7 +51,7 @@ static void _zip_write4(unsigned int, FILE *);
-PHPZIPAPI void
+void
_zip_cdir_free(struct zip_cdir *cd)
{
int i;
@@ -73,7 +68,7 @@ _zip_cdir_free(struct zip_cdir *cd)
-PHPZIPAPI struct zip_cdir *
+struct zip_cdir *
_zip_cdir_new(int nentry, struct zip_error *error)
{
struct zip_cdir *cd;
@@ -102,19 +97,19 @@ _zip_cdir_new(int nentry, struct zip_error *error)
-PHPZIPAPI int
+int
_zip_cdir_write(struct zip_cdir *cd, FILE *fp, struct zip_error *error)
{
int i;
- cd->offset = ftell(fp);
+ cd->offset = ftello(fp);
for (i=0; i<cd->nentry; i++) {
if (_zip_dirent_write(cd->entry+i, fp, 0, error) != 0)
return -1;
}
- cd->size = ftell(fp) - cd->offset;
+ cd->size = ftello(fp) - cd->offset;
/* clearerr(fp); */
fwrite(EOCD_MAGIC, 1, 4, fp);
@@ -136,7 +131,7 @@ _zip_cdir_write(struct zip_cdir *cd, FILE *fp, struct zip_error *error)
-PHPZIPAPI void
+void
_zip_dirent_finalize(struct zip_dirent *zde)
{
free(zde->filename);
@@ -149,7 +144,7 @@ _zip_dirent_finalize(struct zip_dirent *zde)
-PHPZIPAPI void
+void
_zip_dirent_init(struct zip_dirent *de)
{
de->version_madeby = 0;
@@ -188,7 +183,7 @@ _zip_dirent_init(struct zip_dirent *de)
returned.
*/
-PHPZIPAPI int
+int
_zip_dirent_read(struct zip_dirent *zde, FILE *fp,
unsigned char **bufp, unsigned int left, int localp,
struct zip_error *error)
@@ -323,6 +318,63 @@ _zip_dirent_read(struct zip_dirent *zde, FILE *fp,
+/* _zip_dirent_torrent_normalize(de);
+ Set values suitable for torrentzip.
+*/
+
+void
+_zip_dirent_torrent_normalize(struct zip_dirent *de)
+{
+ static struct tm torrenttime;
+ static time_t last_mod = 0;
+
+ if (last_mod == 0) {
+#ifdef HAVE_STRUCT_TM_TM_ZONE
+ time_t now;
+ struct tm *l;
+#endif
+
+ torrenttime.tm_sec = 0;
+ torrenttime.tm_min = 32;
+ torrenttime.tm_hour = 23;
+ torrenttime.tm_mday = 24;
+ torrenttime.tm_mon = 11;
+ torrenttime.tm_year = 96;
+ torrenttime.tm_wday = 0;
+ torrenttime.tm_yday = 0;
+ torrenttime.tm_isdst = 0;
+
+#ifdef HAVE_STRUCT_TM_TM_ZONE
+ time(&now);
+ l = localtime(&now);
+ torrenttime.tm_gmtoff = l->tm_gmtoff;
+ torrenttime.tm_zone = l->tm_zone;
+#endif
+
+ last_mod = mktime(&torrenttime);
+ }
+
+ de->version_madeby = 0;
+ de->version_needed = 20; /* 2.0 */
+ de->bitflags = 2; /* maximum compression */
+ de->comp_method = ZIP_CM_DEFLATE;
+ de->last_mod = last_mod;
+
+ de->disk_number = 0;
+ de->int_attrib = 0;
+ de->ext_attrib = 0;
+ de->offset = 0;
+
+ free(de->extrafield);
+ de->extrafield = NULL;
+ de->extrafield_len = 0;
+ free(de->comment);
+ de->comment = NULL;
+ de->comment_len = 0;
+}
+
+
+
/* _zip_dirent_write(zde, fp, localp, error):
Writes zip directory entry zde to file fp.
@@ -333,7 +385,7 @@ _zip_dirent_read(struct zip_dirent *zde, FILE *fp,
returned.
*/
-PHPZIPAPI int
+int
_zip_dirent_write(struct zip_dirent *zde, FILE *fp, int localp,
struct zip_error *error)
{
@@ -390,11 +442,13 @@ _zip_dirent_write(struct zip_dirent *zde, FILE *fp, int localp,
static time_t
_zip_d2u_time(int dtime, int ddate)
{
- struct tm *tm, tmbuf;
+ struct tm *tm;
time_t now;
now = time(NULL);
- tm = php_localtime_r(&now, &tmbuf);
+ tm = localtime(&now);
+ /* let mktime decide if DST is in effect */
+ tm->tm_isdst = -1;
tm->tm_year = ((ddate>>9)&127) + 1980 - 1900;
tm->tm_mon = ((ddate>>5)&15) - 1;
@@ -409,7 +463,7 @@ _zip_d2u_time(int dtime, int ddate)
-PHPZIPAPI unsigned short
+unsigned short
_zip_read2(unsigned char **a)
{
unsigned short ret;
@@ -422,7 +476,7 @@ _zip_read2(unsigned char **a)
-PHPZIPAPI unsigned int
+unsigned int
_zip_read4(unsigned char **a)
{
unsigned int ret;
@@ -519,9 +573,9 @@ _zip_write4(unsigned int i, FILE *fp)
static void
_zip_u2d_time(time_t time, unsigned short *dtime, unsigned short *ddate)
{
- struct tm *tm, tmbuf;
+ struct tm *tm;
- tm = php_localtime_r(&time, &tmbuf);
+ tm = localtime(&time);
*ddate = ((tm->tm_year+1900-1980)<<9) + ((tm->tm_mon+1)<<5)
+ tm->tm_mday;
*dtime = ((tm->tm_hour)<<11) + ((tm->tm_min)<<5)
diff --git a/ext/zip/lib/zip_entry_free.c b/ext/zip/lib/zip_entry_free.c
index 1bab313ed..c50c9434b 100644
--- a/ext/zip/lib/zip_entry_free.c
+++ b/ext/zip/lib/zip_entry_free.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_entry_free.c,v 1.2 2006/04/09 19:05:47 wiz Exp $
-
zip_entry_free.c -- free struct zip_entry
- Copyright (C) 1999, 2003, 2004, 2006 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -37,12 +35,11 @@
#include <stdlib.h>
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI void
+void
_zip_entry_free(struct zip_entry *ze)
{
free(ze->ch_filename);
diff --git a/ext/zip/lib/zip_entry_new.c b/ext/zip/lib/zip_entry_new.c
index 67e13fd84..7059b1b06 100644
--- a/ext/zip/lib/zip_entry_new.c
+++ b/ext/zip/lib/zip_entry_new.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_entry_new.c,v 1.2 2006/04/09 19:05:47 wiz Exp $
-
zip_entry_new.c -- create and init struct zip_entry
- Copyright (C) 1999, 2003, 2004, 2006 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -37,12 +35,11 @@
#include <stdlib.h>
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI struct zip_entry *
+struct zip_entry *
_zip_entry_new(struct zip *za)
{
struct zip_entry *ze;
diff --git a/ext/zip/lib/zip_err_str.c b/ext/zip/lib/zip_err_str.c
index c74538d64..3fcdf1738 100644
--- a/ext/zip/lib/zip_err_str.c
+++ b/ext/zip/lib/zip_err_str.c
@@ -1,12 +1,8 @@
/*
This file was generated automatically by ./make_zip_err_str.sh
from ./zip.h; make changes there.
-
- NiH: make_zip_err_str.sh,v 1.8 2004/11/17 21:55:09 wiz Exp
- NiH: zip.h,v 1.57 2006/04/24 14:04:19 dillo Exp
*/
-#include "zip.h"
#include "zipint.h"
diff --git a/ext/zip/lib/zip_error.c b/ext/zip/lib/zip_error.c
index 4816b73ae..aab707945 100644
--- a/ext/zip/lib/zip_error.c
+++ b/ext/zip/lib/zip_error.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_error.c,v 1.7 2005/06/09 19:57:09 dillo Exp $
-
zip_error.c -- struct zip_error helper functions
- Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -37,12 +35,11 @@
#include <stdlib.h>
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI void
+void
_zip_error_clear(struct zip_error *err)
{
err->zip_err = ZIP_ER_OK;
@@ -51,7 +48,7 @@ _zip_error_clear(struct zip_error *err)
-PHPZIPAPI void
+void
_zip_error_copy(struct zip_error *dst, struct zip_error *src)
{
dst->zip_err = src->zip_err;
@@ -60,7 +57,7 @@ _zip_error_copy(struct zip_error *dst, struct zip_error *src)
-PHPZIPAPI void
+void
_zip_error_fini(struct zip_error *err)
{
free(err->str);
@@ -69,7 +66,7 @@ _zip_error_fini(struct zip_error *err)
-PHPZIPAPI void
+void
_zip_error_get(struct zip_error *err, int *zep, int *sep)
{
if (zep)
@@ -84,7 +81,7 @@ _zip_error_get(struct zip_error *err, int *zep, int *sep)
-PHPZIPAPI void
+void
_zip_error_init(struct zip_error *err)
{
err->zip_err = ZIP_ER_OK;
@@ -94,7 +91,7 @@ _zip_error_init(struct zip_error *err)
-PHPZIPAPI void
+void
_zip_error_set(struct zip_error *err, int ze, int se)
{
if (err) {
diff --git a/ext/zip/lib/zip_error_clear.c b/ext/zip/lib/zip_error_clear.c
index 8a76f4440..34e7dea48 100644
--- a/ext/zip/lib/zip_error_clear.c
+++ b/ext/zip/lib/zip_error_clear.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_error_clear.c,v 1.1 2006/10/04 15:21:09 dillo Exp $
-
zip_error_clear.c -- clear zip error
- Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -35,12 +33,11 @@
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI void
+ZIP_EXTERN(void)
zip_error_clear(struct zip *za)
{
_zip_error_clear(&za->error);
diff --git a/ext/zip/lib/zip_error_get.c b/ext/zip/lib/zip_error_get.c
index 888b54569..c15705e32 100644
--- a/ext/zip/lib/zip_error_get.c
+++ b/ext/zip/lib/zip_error_get.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_error_get.c,v 1.1 2004/11/18 15:06:20 wiz Exp $
-
zip_error_get.c -- get zip error
- Copyright (C) 1999, 2003 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -35,12 +33,11 @@
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI void
+ZIP_EXTERN(void)
zip_error_get(struct zip *za, int *zep, int *sep)
{
_zip_error_get(&za->error, zep, sep);
diff --git a/ext/zip/lib/zip_error_get_sys_type.c b/ext/zip/lib/zip_error_get_sys_type.c
index bfe642383..47aa93e69 100644
--- a/ext/zip/lib/zip_error_get_sys_type.c
+++ b/ext/zip/lib/zip_error_get_sys_type.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_error_get_sys_type.c,v 1.1 2004/12/22 15:49:18 wiz Exp $
-
zip_error_get_sys_type.c -- return type of system error code
- Copyright (C) 1999, 2003 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -35,12 +33,11 @@
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI int
+ZIP_EXTERN(int)
zip_error_get_sys_type(int ze)
{
if (ze < 0 || ze >= _zip_nerr_str)
diff --git a/ext/zip/lib/zip_error_strerror.c b/ext/zip/lib/zip_error_strerror.c
index 06e98c76d..3d0951cfb 100644
--- a/ext/zip/lib/zip_error_strerror.c
+++ b/ext/zip/lib/zip_error_strerror.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_error_strerror.c,v 1.4 2006/02/21 09:41:00 dillo Exp $
-
zip_error_sterror.c -- get string representation of struct zip_error
- Copyright (C) 1999, 2003 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -40,12 +38,11 @@
#include <stdlib.h>
#include <string.h>
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI const char *
+const char *
_zip_error_strerror(struct zip_error *err)
{
const char *zs, *ss;
@@ -54,7 +51,7 @@ _zip_error_strerror(struct zip_error *err)
_zip_error_fini(err);
if (err->zip_err < 0 || err->zip_err >= _zip_nerr_str) {
- snprintf(buf, sizeof(buf), "Unknown error %d", err->zip_err);
+ sprintf(buf, "Unknown error %d", err->zip_err);
zs = NULL;
ss = buf;
}
@@ -78,16 +75,16 @@ _zip_error_strerror(struct zip_error *err)
if (ss == NULL)
return zs;
else {
- int l = strlen(ss) + (zs ? strlen(zs)+2 : 0) + 1;
- if ((s=(char *)malloc(l)) == NULL)
+ if ((s=(char *)malloc(strlen(ss)
+ + (zs ? strlen(zs)+2 : 0) + 1)) == NULL)
return _zip_err_str[ZIP_ER_MEMORY];
- snprintf(s, l, "%s%s%s",
+ sprintf(s, "%s%s%s",
(zs ? zs : ""),
(zs ? ": " : ""),
ss);
err->str = s;
- return ss;
+ return s;
}
}
diff --git a/ext/zip/lib/zip_error_to_str.c b/ext/zip/lib/zip_error_to_str.c
index 665803472..4dea4d667 100644
--- a/ext/zip/lib/zip_error_to_str.c
+++ b/ext/zip/lib/zip_error_to_str.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_error_to_str.c,v 1.1 2004/11/18 15:06:20 wiz Exp $
-
zip_error_to_str.c -- get string representation of zip error code
- Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -40,12 +38,11 @@
#include <stdlib.h>
#include <string.h>
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI int
+ZIP_EXTERN(int)
zip_error_to_str(char *buf, size_t len, int ze, int se)
{
const char *zs, *ss;
diff --git a/ext/zip/lib/zip_fclose.c b/ext/zip/lib/zip_fclose.c
index 91f30b7bb..8f062d9d0 100644
--- a/ext/zip/lib/zip_fclose.c
+++ b/ext/zip/lib/zip_fclose.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_fclose.c,v 1.14 2005/06/09 19:57:09 dillo Exp $
-
zip_fclose.c -- close file in zip archive
- Copyright (C) 1999, 2004, 2005 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -37,12 +35,11 @@
#include <stdlib.h>
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI int
+ZIP_EXTERN(int)
zip_fclose(struct zip_file *zf)
{
int i, ret;
@@ -51,7 +48,6 @@ zip_fclose(struct zip_file *zf)
inflateEnd(zf->zstr);
free(zf->buffer);
free(zf->zstr);
-
if (zf->za) {
for (i=0; i<zf->za->nfile; i++) {
if (zf->za->file[i] == zf) {
diff --git a/ext/zip/lib/zip_file_error_clear.c b/ext/zip/lib/zip_file_error_clear.c
index dca33b35f..6c9c2a02b 100644
--- a/ext/zip/lib/zip_file_error_clear.c
+++ b/ext/zip/lib/zip_file_error_clear.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_file_error_clear.c,v 1.4 2006/10/04 18:37:54 wiz Exp $
-
zip_file_error_clear.c -- clear zip file error
- Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -35,12 +33,11 @@
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI void
+ZIP_EXTERN(void)
zip_file_error_clear(struct zip_file *zf)
{
_zip_error_clear(&zf->error);
diff --git a/ext/zip/lib/zip_file_error_get.c b/ext/zip/lib/zip_file_error_get.c
index 05516703c..a53fa7e00 100644
--- a/ext/zip/lib/zip_file_error_get.c
+++ b/ext/zip/lib/zip_file_error_get.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_file_error_get.c,v 1.1 2004/11/18 15:06:21 wiz Exp $
-
zip_file_error_get.c -- get zip file error
- Copyright (C) 1999, 2003 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -35,12 +33,11 @@
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI void
+ZIP_EXTERN(void)
zip_file_error_get(struct zip_file *zf, int *zep, int *sep)
{
_zip_error_get(&zf->error, zep, sep);
diff --git a/ext/zip/lib/zip_file_get_offset.c b/ext/zip/lib/zip_file_get_offset.c
index 493004023..68f92f1fe 100644
--- a/ext/zip/lib/zip_file_get_offset.c
+++ b/ext/zip/lib/zip_file_get_offset.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_file_get_offset.c,v 1.4 2006/04/23 14:51:45 wiz Exp $
-
zip_file_get_offset.c -- get offset of file data in archive.
- Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -39,13 +37,9 @@
#include <stdlib.h>
#include <string.h>
#include <errno.h>
-#ifndef _MSC_VER
-#include <unistd.h>
-#endif
#include <sys/types.h>
#include <sys/stat.h>
-#include "zip.h"
#include "zipint.h"
@@ -56,7 +50,7 @@
On error, fills in za->error and returns 0.
*/
-PHPZIPAPI unsigned int
+unsigned int
_zip_file_get_offset(struct zip *za, int idx)
{
struct zip_dirent de;
@@ -64,7 +58,7 @@ _zip_file_get_offset(struct zip *za, int idx)
offset = za->cdir->entry[idx].offset;
- if (fseek(za->zp, offset, SEEK_SET) != 0) {
+ if (fseeko(za->zp, offset, SEEK_SET) != 0) {
_zip_error_set(&za->error, ZIP_ER_SEEK, errno);
return 0;
}
diff --git a/ext/zip/lib/zip_file_strerror.c b/ext/zip/lib/zip_file_strerror.c
index 2cc79c133..c2864f2ba 100644
--- a/ext/zip/lib/zip_file_strerror.c
+++ b/ext/zip/lib/zip_file_strerror.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_file_strerror.c,v 1.1 2003/10/05 16:05:22 dillo Exp $
-
zip_file_sterror.c -- get string representation of zip file error
- Copyright (C) 1999, 2003 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -35,12 +33,11 @@
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI const char *
+ZIP_EXTERN(const char *)
zip_file_strerror(struct zip_file *zf)
{
return _zip_error_strerror(&zf->error);
diff --git a/ext/zip/lib/zip_filerange_crc.c b/ext/zip/lib/zip_filerange_crc.c
new file mode 100644
index 000000000..4d1ad5669
--- /dev/null
+++ b/ext/zip/lib/zip_filerange_crc.c
@@ -0,0 +1,71 @@
+/*
+ zip_filerange_crc.c -- compute CRC32 for a range of a file
+ Copyright (C) 2008 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+
+#include <stdio.h>
+#include <errno.h>
+
+#include "zipint.h"
+
+
+
+
+int
+_zip_filerange_crc(FILE *fp, off_t start, off_t len, uLong *crcp,
+ struct zip_error *errp)
+{
+ Bytef buf[BUFSIZE];
+ size_t n;
+
+ *crcp = crc32(0L, Z_NULL, 0);
+
+ if (fseeko(fp, start, SEEK_SET) != 0) {
+ _zip_error_set(errp, ZIP_ER_SEEK, errno);
+ return -1;
+ }
+
+ while (len > 0) {
+ n = len > BUFSIZE ? BUFSIZE : len;
+ if ((n=fread(buf, 1, n, fp)) <= 0) {
+ _zip_error_set(errp, ZIP_ER_READ, errno);
+ return -1;
+ }
+
+ *crcp = crc32(*crcp, buf, n);
+
+ len-= n;
+ }
+
+ return 0;
+}
diff --git a/ext/zip/lib/zip_fopen.c b/ext/zip/lib/zip_fopen.c
index c05ad45bd..b4b76049f 100644
--- a/ext/zip/lib/zip_fopen.c
+++ b/ext/zip/lib/zip_fopen.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_fopen.c,v 1.12 2005/06/09 19:57:09 dillo Exp $
-
zip_fopen.c -- open file in zip archive for reading
- Copyright (C) 1999, 2003, 2004, 2005 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -35,12 +33,11 @@
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI struct zip_file *
+ZIP_EXTERN(struct zip_file *)
zip_fopen(struct zip *za, const char *fname, int flags)
{
int idx;
diff --git a/ext/zip/lib/zip_fopen_index.c b/ext/zip/lib/zip_fopen_index.c
index 105cefe73..1e7e41989 100644
--- a/ext/zip/lib/zip_fopen_index.c
+++ b/ext/zip/lib/zip_fopen_index.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_fopen_index.c,v 1.24 2005/05/20 21:54:53 wiz Exp $
-
zip_fopen_index.c -- open file in zip archive for reading by index
- Copyright (C) 1999, 2004, 2005 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -39,14 +37,13 @@
#include <stdio.h>
#include <stdlib.h>
-#include "zip.h"
#include "zipint.h"
static struct zip_file *_zip_file_new(struct zip *za);
-PHPZIPAPI struct zip_file *
+ZIP_EXTERN(struct zip_file *)
zip_fopen_index(struct zip *za, int fileno, int flags)
{
int len, ret;
@@ -141,7 +138,7 @@ zip_fopen_index(struct zip *za, int fileno, int flags)
-PHPZIPAPI int
+int
_zip_file_fillbuf(void *buf, size_t buflen, struct zip_file *zf)
{
int i, j;
@@ -152,7 +149,7 @@ _zip_file_fillbuf(void *buf, size_t buflen, struct zip_file *zf)
if ((zf->flags & ZIP_ZF_EOF) || zf->cbytes_left <= 0 || buflen <= 0)
return 0;
- if (fseek(zf->za->zp, zf->fpos, SEEK_SET) < 0) {
+ if (fseeko(zf->za->zp, zf->fpos, SEEK_SET) < 0) {
_zip_error_set(&zf->error, ZIP_ER_SEEK, errno);
return -1;
}
diff --git a/ext/zip/lib/zip_fread.c b/ext/zip/lib/zip_fread.c
index 064d2b97f..1a2b0e381 100644
--- a/ext/zip/lib/zip_fread.c
+++ b/ext/zip/lib/zip_fread.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_fread.c,v 1.21 2006/04/23 14:49:50 wiz Exp $
-
zip_fread.c -- read from file
- Copyright (C) 1999, 2004, 2005 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -35,12 +33,11 @@
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI ssize_t
+ZIP_EXTERN(ssize_t)
zip_fread(struct zip_file *zf, void *outbuf, size_t toread)
{
int ret;
diff --git a/ext/zip/lib/zip_free.c b/ext/zip/lib/zip_free.c
index 534c58eb0..76c3a9673 100644
--- a/ext/zip/lib/zip_free.c
+++ b/ext/zip/lib/zip_free.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_free.c,v 1.17 2005/06/09 19:57:10 dillo Exp $
-
zip_free.c -- free struct zip
- Copyright (C) 1999, 2004, 2005 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -36,7 +34,7 @@
#include <stdlib.h>
-#include "zip.h"
+
#include "zipint.h"
@@ -45,7 +43,7 @@
frees the space allocated to a zipfile struct, and closes the
corresponding file. */
-PHPZIPAPI void
+void
_zip_free(struct zip *za)
{
int i;
@@ -59,9 +57,6 @@ _zip_free(struct zip *za)
if (za->zp)
fclose(za->zp);
- if (za->ch_comment)
- free(za->ch_comment);
-
_zip_cdir_free(za->cdir);
if (za->entry) {
diff --git a/ext/zip/lib/zip_get_archive_comment.c b/ext/zip/lib/zip_get_archive_comment.c
index c23597c09..ed1324fd5 100644
--- a/ext/zip/lib/zip_get_archive_comment.c
+++ b/ext/zip/lib/zip_get_archive_comment.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_get_archive_comment.c,v 1.4 2006/04/23 16:11:33 wiz Exp $
-
zip_get_archive_comment.c -- get archive comment
- Copyright (C) 2006 Dieter Baron and Thomas Klausner
+ Copyright (C) 2006-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -35,12 +33,11 @@
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI const char *
+ZIP_EXTERN(const char *)
zip_get_archive_comment(struct zip *za, int *lenp, int flags)
{
if ((flags & ZIP_FL_UNCHANGED)
@@ -50,6 +47,11 @@ zip_get_archive_comment(struct zip *za, int *lenp, int flags)
*lenp = za->cdir->comment_len;
return za->cdir->comment;
}
+ else {
+ if (lenp != NULL)
+ *lenp = -1;
+ return NULL;
+ }
}
if (lenp != NULL)
diff --git a/ext/zip/lib/zip_get_archive_flag.c b/ext/zip/lib/zip_get_archive_flag.c
new file mode 100644
index 000000000..2d46aa39f
--- /dev/null
+++ b/ext/zip/lib/zip_get_archive_flag.c
@@ -0,0 +1,48 @@
+/*
+ zip_get_archive_flag.c -- get archive global flag
+ Copyright (C) 2008 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+
+#include "zipint.h"
+
+
+
+ZIP_EXTERN(int)
+zip_get_archive_flag(struct zip *za, int flag, int flags)
+{
+ int fl;
+
+ fl = (flags & ZIP_FL_UNCHANGED) ? za->flags : za->ch_flags;
+
+ return (fl & flag) ? 1 : 0;
+}
diff --git a/ext/zip/lib/zip_get_file_comment.c b/ext/zip/lib/zip_get_file_comment.c
index 476ac7da0..57dd9028b 100644
--- a/ext/zip/lib/zip_get_file_comment.c
+++ b/ext/zip/lib/zip_get_file_comment.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_get_file_comment.c,v 1.2 2006/04/23 13:06:28 wiz Exp $
-
zip_get_file_comment.c -- get file comment
- Copyright (C) 2006 Dieter Baron and Thomas Klausner
+ Copyright (C) 2006-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -35,12 +33,11 @@
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI const char *
+ZIP_EXTERN(const char *)
zip_get_file_comment(struct zip *za, int idx, int *lenp, int flags)
{
if (idx < 0 || idx >= za->nentry) {
diff --git a/ext/zip/lib/zip_get_name.c b/ext/zip/lib/zip_get_name.c
index c2cae2518..b58d97205 100644
--- a/ext/zip/lib/zip_get_name.c
+++ b/ext/zip/lib/zip_get_name.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_get_name.c,v 1.13 2005/01/20 21:00:54 dillo Exp $
-
zip_get_name.c -- get filename for a file in zip file
- Copyright (C) 1999, 2003, 2004, 2005 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -35,12 +33,11 @@
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI const char *
+ZIP_EXTERN(const char *)
zip_get_name(struct zip *za, int idx, int flags)
{
return _zip_get_name(za, idx, flags, &za->error);
@@ -48,7 +45,7 @@ zip_get_name(struct zip *za, int idx, int flags)
-PHPZIPAPI const char *
+const char *
_zip_get_name(struct zip *za, int idx, int flags, struct zip_error *error)
{
if (idx < 0 || idx >= za->nentry) {
diff --git a/ext/zip/lib/zip_get_num_files.c b/ext/zip/lib/zip_get_num_files.c
index 05a54fcb6..a442f293e 100644
--- a/ext/zip/lib/zip_get_num_files.c
+++ b/ext/zip/lib/zip_get_num_files.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_get_num_files.c,v 1.2 2003/12/27 22:53:15 wiz Exp $
-
zip_get_num_files.c -- get number of files in archive
- Copyright (C) 1999, 2003 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -35,12 +33,11 @@
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI int
+ZIP_EXTERN(int)
zip_get_num_files(struct zip *za)
{
if (za == NULL)
diff --git a/ext/zip/lib/zip_memdup.c b/ext/zip/lib/zip_memdup.c
index ebb7426dd..641125ed2 100644
--- a/ext/zip/lib/zip_memdup.c
+++ b/ext/zip/lib/zip_memdup.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_memdup.c,v 1.2 2006/04/24 10:34:39 dillo Exp $
-
zip_memdup.c -- internal zip function, "strdup" with len
- Copyright (C) 1999, 2003, 2004, 2005, 2006 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -36,12 +34,11 @@
#include <stdlib.h>
#include <string.h>
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI void *
+void *
_zip_memdup(const void *mem, size_t len, struct zip_error *error)
{
void *ret;
diff --git a/ext/zip/lib/zip_name_locate.c b/ext/zip/lib/zip_name_locate.c
index 108db4f60..e8b35ff93 100644
--- a/ext/zip/lib/zip_name_locate.c
+++ b/ext/zip/lib/zip_name_locate.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_name_locate.c,v 1.19 2005/06/09 19:57:10 dillo Exp $
-
zip_name_locate.c -- get index by name
- Copyright (C) 1999, 2003, 2004, 2005 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -19,7 +17,7 @@
3. The names of the authors may not be used to endorse or promote
products derived from this software without specific prior
written permission.
-
+
THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -37,12 +35,11 @@
#include <string.h>
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI int
+ZIP_EXTERN(int)
zip_name_locate(struct zip *za, const char *fname, int flags)
{
return _zip_name_locate(za, fname, flags, &za->error);
@@ -50,7 +47,7 @@ zip_name_locate(struct zip *za, const char *fname, int flags)
-PHPZIPAPI int
+int
_zip_name_locate(struct zip *za, const char *fname, int flags,
struct zip_error *error)
{
@@ -62,11 +59,8 @@ _zip_name_locate(struct zip *za, const char *fname, int flags,
_zip_error_set(error, ZIP_ER_INVAL, 0);
return -1;
}
-#ifdef PHP_WIN32
- cmp = (flags & ZIP_FL_NOCASE) ? stricmp : strcmp;
-#else
- cmp = (flags & ZIP_FL_NOCASE) ? strcasecmp : strcmp;
-#endif
+
+ cmp = (flags & ZIP_FL_NOCASE) ? strcmpi : strcmp;
n = (flags & ZIP_FL_UNCHANGED) ? za->cdir->nentry : za->nentry;
for (i=0; i<n; i++) {
@@ -78,7 +72,7 @@ _zip_name_locate(struct zip *za, const char *fname, int flags,
/* newly added (partially filled) entry */
if (fn == NULL)
continue;
-
+
if (flags & ZIP_FL_NODIR) {
p = strrchr(fn, '/');
if (p)
@@ -89,6 +83,7 @@ _zip_name_locate(struct zip *za, const char *fname, int flags,
return i;
}
- _zip_error_set(error, ZIP_ER_NOENT, 0);
+/* Look for an entry should not raise an error */
+/* _zip_error_set(error, ZIP_ER_NOENT, 0);*/
return -1;
}
diff --git a/ext/zip/lib/zip_new.c b/ext/zip/lib/zip_new.c
index 378513b6c..3e8ccee64 100644
--- a/ext/zip/lib/zip_new.c
+++ b/ext/zip/lib/zip_new.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_new.c,v 1.12 2006/04/23 00:40:47 wiz Exp $
-
zip_new.c -- create and init struct zip
- Copyright (C) 1999, 2004, 2005 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -36,7 +34,7 @@
#include <stdlib.h>
-#include "zip.h"
+
#include "zipint.h"
@@ -45,7 +43,7 @@
creates a new zipfile struct, and sets the contents to zero; returns
the new struct. */
-PHPZIPAPI struct zip *
+struct zip *
_zip_new(struct zip_error *error)
{
struct zip *za;
@@ -66,6 +64,7 @@ _zip_new(struct zip_error *error)
za->entry = NULL;
za->nfile = za->nfile_alloc = 0;
za->file = NULL;
+ za->flags = za->ch_flags = 0;
return za;
}
diff --git a/ext/zip/lib/zip_open.c b/ext/zip/lib/zip_open.c
index 711dcb1ca..0880eef2c 100644
--- a/ext/zip/lib/zip_open.c
+++ b/ext/zip/lib/zip_open.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_open.c,v 1.38 2006/05/04 00:01:26 dillo Exp $
-
zip_open.c -- open zip archive
- Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2009 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -37,18 +35,19 @@
#include <sys/stat.h>
#include <errno.h>
+#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#ifndef _MSC_VER
-#include <unistd.h>
-#endif
-#include <sys/types.h>
-#include "zip.h"
+
#include "zipint.h"
static void set_error(int *, struct zip_error *, int);
+static struct zip *_zip_allocate_new(const char *, int *);
static int _zip_checkcons(FILE *, struct zip_cdir *, struct zip_error *);
+static void _zip_check_torrentzip(struct zip *);
+static struct zip_cdir *_zip_find_central_dir(FILE *, int, int *, off_t);
+static int _zip_file_exists(const char *, int, int *);
static int _zip_headercomp(struct zip_dirent *, int,
struct zip_dirent *, int);
static unsigned char *_zip_memmem(const unsigned char *, int,
@@ -58,154 +57,58 @@ static struct zip_cdir *_zip_readcdir(FILE *, unsigned char *, unsigned char *,
-PHPZIPAPI struct zip *
+ZIP_EXTERN(struct zip *)
zip_open(const char *fn, int flags, int *zep)
{
FILE *fp;
- unsigned char *buf, *match;
- int a, i, buflen, best;
struct zip *za;
- struct zip_cdir *cdir, *cdirnew;
- long len;
- struct stat st;
- struct zip_error error, err2;
-
- if (fn == NULL) {
- set_error(zep, NULL, ZIP_ER_INVAL);
+ struct zip_cdir *cdir;
+ int i;
+ off_t len;
+
+ switch (_zip_file_exists(fn, flags, zep)) {
+ case -1:
+ if (!(flags & ZIP_OVERWRITE)) {
return NULL;
+ }
+
+ case 0:
+ return _zip_allocate_new(fn, zep);
+ default:
+ break;
}
- if (flags & ZIP_OVERWRITE || stat(fn, &st) != 0) {
- if ((flags & ZIP_CREATE) || (flags & ZIP_OVERWRITE)) {
- if ((za=_zip_new(&error)) == NULL) {
- set_error(zep, &error, 0);
- return NULL;
- }
-
- za->zn = strdup(fn);
- if (!za->zn) {
- _zip_free(za);
- set_error(zep, NULL, ZIP_ER_MEMORY);
- return NULL;
- }
- return za;
- }
- else {
- set_error(zep, NULL, ZIP_ER_OPEN);
- return NULL;
- }
- }
- else if ((flags & ZIP_EXCL)) {
- set_error(zep, NULL, ZIP_ER_EXISTS);
+ if ((fp=fopen(fn, "rb")) == NULL) {
+ set_error(zep, NULL, ZIP_ER_OPEN);
return NULL;
}
- /* ZIP_CREATE gets ignored if file exists and not ZIP_EXCL,
- just like open() */
- if ((fp=fopen(fn, "rb")) == NULL) {
- set_error(zep, NULL, ZIP_ER_OPEN);
- return NULL;
- }
-
-#ifdef PHP_WIN32
- _setmode(_fileno(fp), _O_BINARY );
-#endif
+ fseeko(fp, 0, SEEK_END);
+ len = ftello(fp);
- clearerr(fp);
- fseek(fp, 0, SEEK_END);
- len = ftell(fp);
- i = fseek(fp, -(len < CDBUFSIZE ? len : CDBUFSIZE), SEEK_END);
- if (i == -1 && errno != EFBIG) {
- /* seek before start of file on my machine */
- set_error(zep, NULL, ZIP_ER_SEEK);
- fclose(fp);
- return NULL;
- }
-
- /* 64k is too much for stack */
- if ((buf=(unsigned char *)malloc(CDBUFSIZE)) == NULL) {
- set_error(zep, NULL, ZIP_ER_MEMORY);
- fclose(fp);
- return NULL;
+ /* treat empty files as empty archives */
+ if (len == 0) {
+ if ((za=_zip_allocate_new(fn, zep)) == NULL)
+ fclose(fp);
+ else
+ za->zp = fp;
+ return za;
}
- clearerr(fp);
- buflen = fread(buf, 1, CDBUFSIZE, fp);
-
- if (ferror(fp)) {
- set_error(zep, NULL, ZIP_ER_READ);
- free(buf);
+ cdir = _zip_find_central_dir(fp, flags, zep, len);
+ if (cdir == NULL) {
fclose(fp);
return NULL;
}
-
- best = -2;
- cdir = NULL;
- match = buf;
- while ((match=_zip_memmem(match, buflen-(match-buf)-18,
- (const unsigned char *)EOCD_MAGIC, 4))!=NULL) {
- /* found match -- check, if good */
- /* to avoid finding the same match all over again */
- match++;
- if ((cdirnew=_zip_readcdir(fp, buf, match-1, buflen, flags,
- &err2)) == NULL) {
- if (best == -2) {
- set_error(zep, &err2, 0);
- best = -1;
- }
- continue;
- }
- if (cdir) {
- if (best <= 0)
- best = _zip_checkcons(fp, cdir, &err2);
- a = _zip_checkcons(fp, cdirnew, &err2);
- if (best < a) {
- _zip_cdir_free(cdir);
- cdir = cdirnew;
- best = a;
- }
- else
- _zip_cdir_free(cdirnew);
- }
- else {
- cdir = cdirnew;
- if (flags & ZIP_CHECKCONS)
- best = _zip_checkcons(fp, cdir, &err2);
- else
- best = 0;
- }
- cdirnew = NULL;
- }
-
- free(buf);
-
- if (best < 0) {
- /* no consistent eocd found */
- if (best == -2) {
- /* no eocd found at all */
- set_error(zep, NULL, ZIP_ER_NOZIP);
- }
- _zip_cdir_free(cdir);
- fclose(fp);
- return NULL;
- }
-
- if ((za=_zip_new(&error)) == NULL) {
- set_error(zep, &error, 0);
+ if ((za=_zip_allocate_new(fn, zep)) == NULL) {
_zip_cdir_free(cdir);
fclose(fp);
return NULL;
}
- za->zp = fp;
za->cdir = cdir;
-
- if ((za->zn=strdup(fn)) == NULL) {
- set_error(zep, NULL, ZIP_ER_MEMORY);
- _zip_free(za);
- return NULL;
- }
+ za->zp = fp;
if ((za->entry=(struct zip_entry *)malloc(sizeof(*(za->entry))
* cdir->nentry)) == NULL) {
@@ -216,6 +119,9 @@ zip_open(const char *fn, int flags, int *zep)
for (i=0; i<cdir->nentry; i++)
_zip_entry_new(za);
+ _zip_check_torrentzip(za);
+ za->ch_flags = za->flags;
+
return za;
}
@@ -295,13 +201,14 @@ _zip_readcdir(FILE *fp, unsigned char *buf, unsigned char *eocd, int buflen,
return NULL;
}
- if (cd->comment_len)
+ if (cd->comment_len) {
if ((cd->comment=(char *)_zip_memdup(eocd+EOCDLEN,
cd->comment_len, error))
== NULL) {
free(cd);
return NULL;
}
+ }
cdp = eocd;
if (cd->size < (unsigned int)(eocd-buf)) {
@@ -313,8 +220,10 @@ _zip_readcdir(FILE *fp, unsigned char *buf, unsigned char *eocd, int buflen,
/* go to start of cdir and read it entry by entry */
bufp = NULL;
clearerr(fp);
- fseek(fp, -(cd->size+cd->comment_len+EOCDLEN), SEEK_END);
- if (ferror(fp) || ((unsigned int)ftell(fp) != cd->offset)) {
+ fseeko(fp, cd->offset, SEEK_SET);
+ /* possible consistency check: cd->offset =
+ len-(cd->size+cd->comment_len+EOCDLEN) ? */
+ if (ferror(fp) || ((unsigned long)ftello(fp) != cd->offset)) {
/* seek error or offset of cdir wrong */
if (ferror(fp))
_zip_error_set(error, ZIP_ER_SEEK, errno);
@@ -376,7 +285,7 @@ _zip_checkcons(FILE *fp, struct zip_cdir *cd, struct zip_error *error)
return -1;
}
- if (fseek(fp, cd->entry[i].offset, SEEK_SET) != 0) {
+ if (fseeko(fp, cd->entry[i].offset, SEEK_SET) != 0) {
_zip_error_set(error, ZIP_ER_SEEK, 0);
return -1;
}
@@ -385,7 +294,7 @@ _zip_checkcons(FILE *fp, struct zip_cdir *cd, struct zip_error *error)
return -1;
if (_zip_headercomp(cd->entry+i, 0, &temp, 1) != 0) {
- _zip_error_set(error, ZIP_ER_NOZIP, 0);
+ _zip_error_set(error, ZIP_ER_INCONS, 0);
_zip_dirent_finalize(&temp);
return -1;
}
@@ -397,6 +306,41 @@ _zip_checkcons(FILE *fp, struct zip_cdir *cd, struct zip_error *error)
+/* _zip_check_torrentzip:
+ check wether ZA has a valid TORRENTZIP comment, i.e. is torrentzipped */
+
+static void
+_zip_check_torrentzip(struct zip *za)
+{
+ uLong crc_got, crc_should;
+ char buf[8+1];
+ char *end;
+
+ if (za->zp == NULL || za->cdir == NULL)
+ return;
+
+ if (za->cdir->comment_len != TORRENT_SIG_LEN+8
+ || strncmp(za->cdir->comment, TORRENT_SIG, TORRENT_SIG_LEN) != 0)
+ return;
+
+ memcpy(buf, za->cdir->comment+TORRENT_SIG_LEN, 8);
+ buf[8] = '\0';
+ errno = 0;
+ crc_should = strtoul(buf, &end, 16);
+ if ((crc_should == UINT_MAX && errno != 0) || (end && *end))
+ return;
+
+ if (_zip_filerange_crc(za->zp, za->cdir->offset, za->cdir->size,
+ &crc_got, NULL) < 0)
+ return;
+
+ if (crc_got == crc_should)
+ za->flags |= ZIP_AFL_TORRENT;
+}
+
+
+
+
/* _zip_headercomp:
compares two headers h1 and h2; if they are local headers, set
local1p or local2p respectively to 1, else 0. Return 0 if they
@@ -414,14 +358,32 @@ _zip_headercomp(struct zip_dirent *h1, int local1p, struct zip_dirent *h2,
#endif
|| (h1->comp_method != h2->comp_method)
|| (h1->last_mod != h2->last_mod)
- || (h1->crc != h2->crc)
- || (h1->comp_size != h2->comp_size)
- || (h1->uncomp_size != h2->uncomp_size)
|| (h1->filename_len != h2->filename_len)
|| !h1->filename || !h2->filename
|| strcmp(h1->filename, h2->filename))
return -1;
+ /* check that CRC and sizes are zero if data descriptor is used */
+ if ((h1->bitflags & ZIP_GPBF_DATA_DESCRIPTOR) && local1p
+ && (h1->crc != 0
+ || h1->comp_size != 0
+ || h1->uncomp_size != 0))
+ return -1;
+ if ((h2->bitflags & ZIP_GPBF_DATA_DESCRIPTOR) && local2p
+ && (h2->crc != 0
+ || h2->comp_size != 0
+ || h2->uncomp_size != 0))
+ return -1;
+
+ /* check that CRC and sizes are equal if no data descriptor is used */
+ if (((h1->bitflags & ZIP_GPBF_DATA_DESCRIPTOR) == 0 || local1p == 0)
+ && ((h2->bitflags & ZIP_GPBF_DATA_DESCRIPTOR) == 0 || local2p == 0)) {
+ if ((h1->crc != h2->crc)
+ || (h1->comp_size != h2->comp_size)
+ || (h1->uncomp_size != h2->uncomp_size))
+ return -1;
+ }
+
if ((local1p == local2p)
&& ((h1->extrafield_len != h2->extrafield_len)
|| (h1->extrafield_len && h2->extrafield
@@ -448,6 +410,137 @@ _zip_headercomp(struct zip_dirent *h1, int local1p, struct zip_dirent *h2,
+static struct zip *
+_zip_allocate_new(const char *fn, int *zep)
+{
+ struct zip *za;
+ struct zip_error error;
+
+ if ((za=_zip_new(&error)) == NULL) {
+ set_error(zep, &error, 0);
+ return NULL;
+ }
+
+ za->zn = strdup(fn);
+ if (!za->zn) {
+ _zip_free(za);
+ set_error(zep, NULL, ZIP_ER_MEMORY);
+ return NULL;
+ }
+ return za;
+}
+
+
+
+static int
+_zip_file_exists(const char *fn, int flags, int *zep)
+{
+ struct stat st;
+
+ if (fn == NULL) {
+ set_error(zep, NULL, ZIP_ER_INVAL);
+ return -1;
+ }
+
+ if (stat(fn, &st) != 0) {
+ if (flags & ZIP_CREATE || flags & ZIP_OVERWRITE)
+ return 0;
+ else {
+ set_error(zep, NULL, ZIP_ER_OPEN);
+ return -1;
+ }
+ }
+ else if ((flags & ZIP_EXCL)) {
+ set_error(zep, NULL, ZIP_ER_EXISTS);
+ return -1;
+ }
+ /* ZIP_CREATE gets ignored if file exists and not ZIP_EXCL,
+ just like open() */
+
+ return 1;
+}
+
+
+
+static struct zip_cdir *
+_zip_find_central_dir(FILE *fp, int flags, int *zep, off_t len)
+{
+ struct zip_cdir *cdir, *cdirnew;
+ unsigned char *buf, *match;
+ int a, best, buflen, i;
+ struct zip_error zerr;
+
+ i = fseeko(fp, -(len < CDBUFSIZE ? len : CDBUFSIZE), SEEK_END);
+ if (i == -1 && errno != EFBIG) {
+ /* seek before start of file on my machine */
+ set_error(zep, NULL, ZIP_ER_SEEK);
+ return NULL;
+ }
+
+ /* 64k is too much for stack */
+ if ((buf=(unsigned char *)malloc(CDBUFSIZE)) == NULL) {
+ set_error(zep, NULL, ZIP_ER_MEMORY);
+ return NULL;
+ }
+
+ clearerr(fp);
+ buflen = fread(buf, 1, CDBUFSIZE, fp);
+
+ if (ferror(fp)) {
+ set_error(zep, NULL, ZIP_ER_READ);
+ free(buf);
+ return NULL;
+ }
+
+ best = -1;
+ cdir = NULL;
+ match = buf;
+ _zip_error_set(&zerr, ZIP_ER_NOZIP, 0);
+
+ while ((match=_zip_memmem(match, buflen-(match-buf)-18,
+ (const unsigned char *)EOCD_MAGIC, 4))!=NULL) {
+ /* found match -- check, if good */
+ /* to avoid finding the same match all over again */
+ match++;
+ if ((cdirnew=_zip_readcdir(fp, buf, match-1, buflen, flags,
+ &zerr)) == NULL)
+ continue;
+
+ if (cdir) {
+ if (best <= 0)
+ best = _zip_checkcons(fp, cdir, &zerr);
+ a = _zip_checkcons(fp, cdirnew, &zerr);
+ if (best < a) {
+ _zip_cdir_free(cdir);
+ cdir = cdirnew;
+ best = a;
+ }
+ else
+ _zip_cdir_free(cdirnew);
+ }
+ else {
+ cdir = cdirnew;
+ if (flags & ZIP_CHECKCONS)
+ best = _zip_checkcons(fp, cdir, &zerr);
+ else
+ best = 0;
+ }
+ cdirnew = NULL;
+ }
+
+ free(buf);
+
+ if (best < 0) {
+ set_error(zep, &zerr, 0);
+ _zip_cdir_free(cdir);
+ return NULL;
+ }
+
+ return cdir;
+}
+
+
+
static unsigned char *
_zip_memmem(const unsigned char *big, int biglen, const unsigned char *little,
int littlelen)
diff --git a/ext/zip/lib/zip_rename.c b/ext/zip/lib/zip_rename.c
index 8141dc46a..e40ab2767 100644
--- a/ext/zip/lib/zip_rename.c
+++ b/ext/zip/lib/zip_rename.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_rename.c,v 1.15 2004/11/30 22:19:38 wiz Exp $
-
zip_rename.c -- rename file in zip archive
- Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2009 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -35,15 +33,30 @@
-#include "zip.h"
+#include <string.h>
+
#include "zipint.h"
-PHPZIPAPI int
+ZIP_EXTERN(int)
zip_rename(struct zip *za, int idx, const char *name)
{
- if (idx >= za->nentry || idx < 0) {
+ const char *old_name;
+ int old_is_dir, new_is_dir;
+
+ if (idx >= za->nentry || idx < 0 || name[0] == '\0') {
+ _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if ((old_name=zip_get_name(za, idx, 0)) == NULL)
+ return -1;
+
+ new_is_dir = (name[strlen(name)-1] == '/');
+ old_is_dir = (old_name[strlen(old_name)-1] == '/');
+
+ if (new_is_dir != old_is_dir) {
_zip_error_set(&za->error, ZIP_ER_INVAL, 0);
return -1;
}
diff --git a/ext/zip/lib/zip_replace.c b/ext/zip/lib/zip_replace.c
index 12db005f2..ae69a86f6 100644
--- a/ext/zip/lib/zip_replace.c
+++ b/ext/zip/lib/zip_replace.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_replace.c,v 1.20 2006/04/09 14:52:02 wiz Exp $
-
zip_replace.c -- replace file via callback function
- Copyright (C) 1999, 2003, 2004, 2006 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -35,12 +33,11 @@
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI int
+ZIP_EXTERN(int)
zip_replace(struct zip *za, int idx, struct zip_source *source)
{
if (idx < 0 || idx >= za->nentry || source == NULL) {
@@ -57,23 +54,22 @@ zip_replace(struct zip *za, int idx, struct zip_source *source)
-PHPZIPAPI int
+int
_zip_replace(struct zip *za, int idx, const char *name,
struct zip_source *source)
{
- if (idx == -1) {
- if (_zip_entry_new(za) == NULL)
- return -1;
- idx = za->nentry - 1;
- }
+ if (idx == -1) {
+ if (_zip_entry_new(za) == NULL)
+ return -1;
-
+ idx = za->nentry - 1;
+ }
+
_zip_unchange_data(za->entry+idx);
if (name && _zip_set_name(za, idx, name) != 0)
- return -1;
-
-
+ return -1;
+
za->entry[idx].state = ((za->cdir == NULL || idx >= za->cdir->nentry)
? ZIP_ST_ADDED : ZIP_ST_REPLACED);
za->entry[idx].source = source;
diff --git a/ext/zip/lib/zip_set_archive_comment.c b/ext/zip/lib/zip_set_archive_comment.c
index 7649a80de..c4bd070dd 100644
--- a/ext/zip/lib/zip_set_archive_comment.c
+++ b/ext/zip/lib/zip_set_archive_comment.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_set_archive_comment.c,v 1.3 2006/04/24 10:34:39 dillo Exp $
-
zip_set_archive_comment.c -- set archive comment
- Copyright (C) 2006 Dieter Baron and Thomas Klausner
+ Copyright (C) 2006-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -37,12 +35,11 @@
#include <stdlib.h>
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI int
+ZIP_EXTERN(int)
zip_set_archive_comment(struct zip *za, const char *comment, int len)
{
char *tmpcom;
@@ -60,7 +57,7 @@ zip_set_archive_comment(struct zip *za, const char *comment, int len)
else
tmpcom = NULL;
- if (za->ch_comment) free(za->ch_comment);
+ free(za->ch_comment);
za->ch_comment = tmpcom;
za->ch_comment_len = len;
diff --git a/ext/zip/lib/zip_set_archive_flag.c b/ext/zip/lib/zip_set_archive_flag.c
new file mode 100644
index 000000000..a6fdd8d2d
--- /dev/null
+++ b/ext/zip/lib/zip_set_archive_flag.c
@@ -0,0 +1,49 @@
+/*
+ zip_get_archive_flag.c -- set archive global flag
+ Copyright (C) 2008 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+
+#include "zipint.h"
+
+
+
+ZIP_EXTERN(int)
+zip_set_archive_flag(struct zip *za, int flag, int value)
+{
+ if (value)
+ za->ch_flags |= flag;
+ else
+ za->ch_flags &= ~flag;
+
+ return 0;
+}
diff --git a/ext/zip/lib/zip_set_file_comment.c b/ext/zip/lib/zip_set_file_comment.c
index 5454aa21d..3d5dd6b5e 100644
--- a/ext/zip/lib/zip_set_file_comment.c
+++ b/ext/zip/lib/zip_set_file_comment.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_set_file_comment.c,v 1.4 2006/04/24 10:34:39 dillo Exp $
-
zip_set_file_comment.c -- set comment for file in archive
- Copyright (C) 2006 Dieter Baron and Thomas Klausner
+ Copyright (C) 2006-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -37,12 +35,11 @@
#include <stdlib.h>
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI int
+ZIP_EXTERN(int)
zip_set_file_comment(struct zip *za, int idx, const char *comment, int len)
{
char *tmpcom;
diff --git a/ext/zip/lib/zip_set_name.c b/ext/zip/lib/zip_set_name.c
index 8a401faac..5c7da3d7c 100644
--- a/ext/zip/lib/zip_set_name.c
+++ b/ext/zip/lib/zip_set_name.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_set_name.c,v 1.16 2004/11/30 23:02:47 wiz Exp $
-
zip_set_name.c -- rename helper function
- Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -37,12 +35,12 @@
#include <stdlib.h>
#include <string.h>
-#include "zip.h"
+
#include "zipint.h"
-PHPZIPAPI int
+int
_zip_set_name(struct zip *za, int idx, const char *name)
{
char *s;
diff --git a/ext/zip/lib/zip_source_buffer.c b/ext/zip/lib/zip_source_buffer.c
index 95875b74c..867d3dfa3 100644
--- a/ext/zip/lib/zip_source_buffer.c
+++ b/ext/zip/lib/zip_source_buffer.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_source_buffer.c,v 1.8 2006/04/23 14:50:49 wiz Exp $
-
zip_source_buffer.c -- create zip data source from buffer
- Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -38,7 +36,6 @@
#include <stdlib.h>
#include <string.h>
-#include "zip.h"
#include "zipint.h"
struct read_data {
@@ -52,7 +49,7 @@ static ssize_t read_data(void *state, void *data, size_t len,
-PHPZIPAPI struct zip_source *
+ZIP_EXTERN(struct zip_source *)
zip_source_buffer(struct zip *za, const void *data, off_t len, int freep)
{
struct read_data *f;
@@ -84,6 +81,8 @@ zip_source_buffer(struct zip *za, const void *data, off_t len, int freep)
return zs;
}
+
+
static ssize_t
read_data(void *state, void *data, size_t len, enum zip_source_cmd cmd)
{
@@ -103,8 +102,6 @@ read_data(void *state, void *data, size_t len, enum zip_source_cmd cmd)
n = z->end - z->buf;
if (n > len)
n = len;
- if (n < 0)
- n = 0;
if (n) {
memcpy(buf, z->buf, n);
diff --git a/ext/zip/lib/zip_source_file.c b/ext/zip/lib/zip_source_file.c
index 486e1900d..ab6466dcb 100644
--- a/ext/zip/lib/zip_source_file.c
+++ b/ext/zip/lib/zip_source_file.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_source_file.c,v 1.2 2004/11/18 16:28:13 wiz Exp $
-
zip_source_file.c -- create data source from file
- Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2009 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -38,17 +36,13 @@
#include <errno.h>
#include <stdio.h>
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI struct zip_source *
+ZIP_EXTERN(struct zip_source *)
zip_source_file(struct zip *za, const char *fname, off_t start, off_t len)
{
- struct zip_source *zs;
- FILE *fp;
-
if (za == NULL)
return NULL;
@@ -57,19 +51,5 @@ zip_source_file(struct zip *za, const char *fname, off_t start, off_t len)
return NULL;
}
- if ((fp=fopen(fname, "rb")) == NULL) {
- _zip_error_set(&za->error, ZIP_ER_OPEN, errno);
- return NULL;
- }
-
-#ifdef PHP_WIN32
- _setmode(_fileno(fp), _O_BINARY );
-#endif
-
- if ((zs=zip_source_filep(za, fp, start, len)) == NULL) {
- fclose(fp);
- return NULL;
- }
-
- return zs;
+ return _zip_source_file_or_p(za, fname, NULL, start, len);
}
diff --git a/ext/zip/lib/zip_source_filep.c b/ext/zip/lib/zip_source_filep.c
index 8a3304265..2a06a9f02 100644
--- a/ext/zip/lib/zip_source_filep.c
+++ b/ext/zip/lib/zip_source_filep.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_source_filep.c,v 1.6 2005/06/09 19:57:10 dillo Exp $
-
zip_source_filep.c -- create data source from FILE *
- Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2009 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -41,10 +39,10 @@
#include <stdlib.h>
#include <string.h>
-#include "zip.h"
#include "zipint.h"
struct read_file {
+ char *fname; /* name of file to copy from */
FILE *f; /* file to copy from */
off_t off; /* start offset of */
off_t len; /* lengt of data to copy */
@@ -57,12 +55,9 @@ static ssize_t read_file(void *state, void *data, size_t len,
-PHPZIPAPI struct zip_source *
+ZIP_EXTERN(struct zip_source *)
zip_source_filep(struct zip *za, FILE *file, off_t start, off_t len)
{
- struct read_file *f;
- struct zip_source *zs;
-
if (za == NULL)
return NULL;
@@ -71,11 +66,36 @@ zip_source_filep(struct zip *za, FILE *file, off_t start, off_t len)
return NULL;
}
+ return _zip_source_file_or_p(za, NULL, file, start, len);
+}
+
+
+
+struct zip_source *
+_zip_source_file_or_p(struct zip *za, const char *fname, FILE *file,
+ off_t start, off_t len)
+{
+ struct read_file *f;
+ struct zip_source *zs;
+
+ if (file == NULL && fname == NULL) {
+ _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
if ((f=(struct read_file *)malloc(sizeof(struct read_file))) == NULL) {
_zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
return NULL;
}
+ f->fname = NULL;
+ if (fname) {
+ if ((f->fname=strdup(fname)) == NULL) {
+ _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ free(f);
+ return NULL;
+ }
+ }
f->f = file;
f->off = start;
f->len = (len ? len : -1);
@@ -102,6 +122,14 @@ read_file(void *state, void *data, size_t len, enum zip_source_cmd cmd)
switch (cmd) {
case ZIP_SOURCE_OPEN:
+ if (z->fname) {
+ if ((z->f=fopen(z->fname, "rb")) == NULL) {
+ z->e[0] = ZIP_ER_OPEN;
+ z->e[1] = errno;
+ return -1;
+ }
+ }
+
if (fseeko(z->f, z->off, SEEK_SET) < 0) {
z->e[0] = ZIP_ER_SEEK;
z->e[1] = errno;
@@ -128,17 +156,27 @@ read_file(void *state, void *data, size_t len, enum zip_source_cmd cmd)
return i;
case ZIP_SOURCE_CLOSE:
+ if (z->fname) {
+ fclose(z->f);
+ z->f = NULL;
+ }
return 0;
case ZIP_SOURCE_STAT:
{
struct zip_stat *st;
struct stat fst;
+ int err;
if (len < sizeof(*st))
return -1;
- if (fstat(fileno(z->f), &fst) != 0) {
+ if (z->f)
+ err = fstat(fileno(z->f), &fst);
+ else
+ err = stat(z->fname, &fst);
+
+ if (err != 0) {
z->e[0] = ZIP_ER_READ; /* best match */
z->e[1] = errno;
return -1;
@@ -164,6 +202,8 @@ read_file(void *state, void *data, size_t len, enum zip_source_cmd cmd)
return sizeof(int)*2;
case ZIP_SOURCE_FREE:
+ free(z->fname);
+ if (z->f)
fclose(z->f);
free(z);
return 0;
diff --git a/ext/zip/lib/zip_source_free.c b/ext/zip/lib/zip_source_free.c
index 707309c91..293e7f7e1 100644
--- a/ext/zip/lib/zip_source_free.c
+++ b/ext/zip/lib/zip_source_free.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_source_free.c,v 1.2 2004/12/22 16:32:00 dillo Exp $
-
zip_source_free.c -- free zip data source
- Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -37,12 +35,11 @@
#include <stdlib.h>
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI void
+ZIP_EXTERN(void)
zip_source_free(struct zip_source *source)
{
if (source == NULL)
diff --git a/ext/zip/lib/zip_source_function.c b/ext/zip/lib/zip_source_function.c
index 4ab110924..fe3e82aa5 100644
--- a/ext/zip/lib/zip_source_function.c
+++ b/ext/zip/lib/zip_source_function.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_source_function.c,v 1.4 2006/02/21 09:41:00 dillo Exp $
-
zip_source_function.c -- create zip data source from callback function
- Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -37,12 +35,11 @@
#include <stdlib.h>
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI struct zip_source *
+ZIP_EXTERN(struct zip_source *)
zip_source_function(struct zip *za, zip_source_callback zcb, void *ud)
{
struct zip_source *zs;
diff --git a/ext/zip/lib/zip_source_zip.c b/ext/zip/lib/zip_source_zip.c
index 75e656402..58119dd39 100644
--- a/ext/zip/lib/zip_source_zip.c
+++ b/ext/zip/lib/zip_source_zip.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_source_zip.c,v 1.7 2006/02/21 09:41:00 dillo Exp $
-
zip_source_zip.c -- create data source from zip file
- Copyright (C) 1999, 2003, 2004, 2005 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -38,7 +36,6 @@
#include <stdlib.h>
#include <string.h>
-#include "zip.h"
#include "zipint.h"
struct read_zip {
@@ -52,7 +49,7 @@ static ssize_t read_zip(void *st, void *data, size_t len,
-PHPZIPAPI struct zip_source *
+ZIP_EXTERN(struct zip_source *)
zip_source_zip(struct zip *za, struct zip *srcza, int srcidx, int flags,
off_t start, off_t len)
{
@@ -60,6 +57,8 @@ zip_source_zip(struct zip *za, struct zip *srcza, int srcidx, int flags,
struct zip_source *zs;
struct read_zip *p;
+ /* XXX: ZIP_FL_RECOMPRESS */
+
if (za == NULL)
return NULL;
@@ -77,7 +76,7 @@ zip_source_zip(struct zip *za, struct zip *srcza, int srcidx, int flags,
if (len == 0)
len = -1;
- if (start == 0 && len == -1)
+ if (start == 0 && len == -1 && (flags & ZIP_FL_RECOMPRESS) == 0)
flags |= ZIP_FL_COMPRESSED;
else
flags &= ~ZIP_FL_COMPRESSED;
diff --git a/ext/zip/lib/zip_stat.c b/ext/zip/lib/zip_stat.c
index 7c6cbf00d..c8a25e1d8 100644
--- a/ext/zip/lib/zip_stat.c
+++ b/ext/zip/lib/zip_stat.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_stat.c,v 1.3 2004/04/16 09:40:30 dillo Exp $
-
zip_stat.c -- get information about file by name
- Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -35,12 +33,11 @@
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI int
+ZIP_EXTERN(int)
zip_stat(struct zip *za, const char *fname, int flags, struct zip_stat *st)
{
int idx;
diff --git a/ext/zip/lib/zip_stat_index.c b/ext/zip/lib/zip_stat_index.c
index cf55565ef..26425206c 100644
--- a/ext/zip/lib/zip_stat_index.c
+++ b/ext/zip/lib/zip_stat_index.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_stat_index.c,v 1.10 2006/04/24 14:04:19 dillo Exp $
-
zip_stat_index.c -- get information about file by index
- Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -35,12 +33,11 @@
-#include "zip.h"
#include "zipint.h"
-PHPZIPAPI int
+ZIP_EXTERN(int)
zip_stat_index(struct zip *za, int index, int flags, struct zip_stat *st)
{
const char *name;
@@ -67,7 +64,7 @@ zip_stat_index(struct zip *za, int index, int flags, struct zip_stat *st)
_zip_error_set(&za->error, ZIP_ER_INVAL, 0);
return -1;
}
-
+
st->crc = za->cdir->entry[index].crc;
st->size = za->cdir->entry[index].uncomp_size;
st->mtime = za->cdir->entry[index].last_mod;
diff --git a/ext/zip/lib/zip_stat_init.c b/ext/zip/lib/zip_stat_init.c
index e9c056dfc..cb451dc3b 100644
--- a/ext/zip/lib/zip_stat_init.c
+++ b/ext/zip/lib/zip_stat_init.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_stat_init.c,v 1.1 2006/10/31 12:03:04 dillo Exp $
-
zip_stat_init.c -- initialize struct zip_stat.
- Copyright (C) 2006 Dieter Baron and Thomas Klausner
+ Copyright (C) 2006-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -39,7 +37,7 @@
-PHPZIPAPI void
+ZIP_EXTERN(void)
zip_stat_init(struct zip_stat *st)
{
st->name = NULL;
diff --git a/ext/zip/lib/zip_strerror.c b/ext/zip/lib/zip_strerror.c
index f3e5aa9fe..ad23bafed 100644
--- a/ext/zip/lib/zip_strerror.c
+++ b/ext/zip/lib/zip_strerror.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_strerror.c,v 1.1 2003/10/05 16:05:22 dillo Exp $
-
zip_sterror.c -- get string representation of zip error
- Copyright (C) 1999, 2003 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -35,12 +33,10 @@
-#include "zip.h"
#include "zipint.h"
-
-PHPZIPAPI const char *
+ZIP_EXTERN(const char *)
zip_strerror(struct zip *za)
{
return _zip_error_strerror(&za->error);
diff --git a/ext/zip/lib/zip_unchange.c b/ext/zip/lib/zip_unchange.c
index 80070e7a3..7366c9cc7 100644
--- a/ext/zip/lib/zip_unchange.c
+++ b/ext/zip/lib/zip_unchange.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_unchange.c,v 1.19 2006/04/23 13:21:18 wiz Exp $
-
zip_unchange.c -- undo changes to file in zip archive
- Copyright (C) 1999, 2004, 2006 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -36,12 +34,12 @@
#include <stdlib.h>
-#include "zip.h"
+
#include "zipint.h"
-PHPZIPAPI int
+ZIP_EXTERN(int)
zip_unchange(struct zip *za, int idx)
{
return _zip_unchange(za, idx, 0);
@@ -49,7 +47,7 @@ zip_unchange(struct zip *za, int idx)
-PHPZIPAPI int
+int
_zip_unchange(struct zip *za, int idx, int allow_duplicates)
{
int i;
diff --git a/ext/zip/lib/zip_unchange_all.c b/ext/zip/lib/zip_unchange_all.c
index 2d4459c82..01282f89d 100644
--- a/ext/zip/lib/zip_unchange_all.c
+++ b/ext/zip/lib/zip_unchange_all.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_unchange_all.c,v 1.10 2006/04/23 13:14:46 wiz Exp $
-
zip_unchange.c -- undo changes to all files in zip archive
- Copyright (C) 1999, 2006 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -36,12 +34,12 @@
#include <stdlib.h>
-#include "zip.h"
+
#include "zipint.h"
-PHPZIPAPI int
+ZIP_EXTERN(int)
zip_unchange_all(struct zip *za)
{
int ret, i;
@@ -49,7 +47,7 @@ zip_unchange_all(struct zip *za)
ret = 0;
for (i=0; i<za->nentry; i++)
ret |= _zip_unchange(za, i, 1);
-
+
ret |= zip_unchange_archive(za);
return ret;
diff --git a/ext/zip/lib/zip_unchange_archive.c b/ext/zip/lib/zip_unchange_archive.c
index 6c2bc6dcb..fe30a5ad2 100644
--- a/ext/zip/lib/zip_unchange_archive.c
+++ b/ext/zip/lib/zip_unchange_archive.c
@@ -1,11 +1,9 @@
/*
- $NiH: zip_unchange_archive.c,v 1.1 2006/04/23 13:14:46 wiz Exp $
-
zip_unchange_archive.c -- undo global changes to ZIP archive
- Copyright (C) 2006 Dieter Baron and Thomas Klausner
+ Copyright (C) 2006-2009 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -36,17 +34,19 @@
#include <stdlib.h>
-#include "zip.h"
+
#include "zipint.h"
-PHPZIPAPI int
+ZIP_EXTERN(int)
zip_unchange_archive(struct zip *za)
{
free(za->ch_comment);
za->ch_comment = NULL;
za->ch_comment_len = -1;
+ za->ch_flags = za->flags;
+
return 0;
}
diff --git a/ext/zip/lib/zip_unchange_data.c b/ext/zip/lib/zip_unchange_data.c
index dfa2ea545..6fe89f4fb 100644
--- a/ext/zip/lib/zip_unchange_data.c
+++ b/ext/zip/lib/zip_unchange_data.c
@@ -1,11 +1,11 @@
/*
- $NiH: zip_unchange_data.c,v 1.15 2004/12/22 16:32:00 dillo Exp $
+ $NiH: zip_unchange_data.c,v 1.14 2004/11/30 23:02:47 wiz Exp $
zip_unchange_data.c -- undo helper function
Copyright (C) 1999, 2004 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -39,7 +39,7 @@
#include "zipint.h"
-PHPZIPAPI void
+void
_zip_unchange_data(struct zip_entry *ze)
{
if (ze->source) {
diff --git a/ext/zip/lib/zip_win32.h b/ext/zip/lib/zip_win32.h
index ea3860d60..ff28d2878 100644
--- a/ext/zip/lib/zip_win32.h
+++ b/ext/zip/lib/zip_win32.h
@@ -2,16 +2,25 @@
#include <windows.h>
#include <io.h>
#include <fcntl.h>
+#include <string.h>
+#include <zconf.h>
+
+#ifndef strcasecmp
+# define strcmpi _strcmpi
+#endif
#ifndef ssize_t
# define ssize_t SSIZE_T
#endif
+
#ifndef mode_t
# define mode_t int
#endif
+
#ifndef snprintf
# define snprintf _snprintf
#endif
+
#ifndef mkstemp
# define mkstemp(t) _creat(_mktemp(t), _S_IREAD|_S_IWRITE)
#endif
diff --git a/ext/zip/lib/zipint.h b/ext/zip/lib/zipint.h
index 33632aca4..e7e35e4dd 100644
--- a/ext/zip/lib/zipint.h
+++ b/ext/zip/lib/zipint.h
@@ -2,13 +2,11 @@
#define _HAD_ZIPINT_H
/*
- $NiH: zipint.h,v 1.48 2006/04/24 14:04:19 dillo Exp $
-
zipint.h -- internal declarations.
- Copyright (C) 1999, 2003, 2004, 2005, 2006 Dieter Baron and Thomas Klausner
+ Copyright (C) 1999-2009 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
- The authors can be contacted at <nih@giga.or.at>
+ The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -22,7 +20,7 @@
3. The names of the authors may not be used to endorse or promote
products derived from this software without specific prior
written permission.
-
+
THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -39,20 +37,41 @@
#include <zlib.h>
#include "zip.h"
-/* #defines that rename all zip_ functions and structs */
-#include "zipint_alias.h"
-BEGIN_EXTERN_C()
+#ifdef PHP_WIN32
+#include <windows.h>
+#include <wchar.h>
+#define _zip_rename(s, t) \
+ (!MoveFileExA((s), (t), \
+ MOVEFILE_COPY_ALLOWED|MOVEFILE_REPLACE_EXISTING))
+#else
+#define _zip_rename rename
+#endif
+
+#ifndef strcasecmp
+# define strcmpi strcasecmp
+#endif
+
#ifndef HAVE_FSEEKO
#define fseeko(s, o, w) (fseek((s), (long int)(o), (w)))
#endif
+#ifndef HAVE_FTELLO
+#define ftello(s) ((long)ftell((s)))
+#endif
+
+
#define CENTRAL_MAGIC "PK\1\2"
#define LOCAL_MAGIC "PK\3\4"
#define EOCD_MAGIC "PK\5\6"
#define DATADES_MAGIC "PK\7\8"
+#define TORRENT_SIG "TORRENTZIPPED-"
+#define TORRENT_SIG_LEN 14
+#define TORRENT_CRC_LEN 8
+#define TORRENT_MEM_LEVEL 8
#define CDENTRYSIZE 46u
#define LENTRYSIZE 30
+#undef MAXCOMLEN /* defined as 19 on BSD for max command name */
#define MAXCOMLEN 65536
#define EOCDLEN 22
#define CDBUFSIZE (MAXCOMLEN+EOCDLEN)
@@ -74,8 +93,8 @@ enum zip_state { ZIP_ST_UNCHANGED, ZIP_ST_DELETED, ZIP_ST_REPLACED,
/* directory entry: general purpose bit flags */
#define ZIP_GPBF_ENCRYPTED 0x0001 /* is encrypted */
+#define ZIP_GPBF_DATA_DESCRIPTOR 0x0008 /* crc/size after file data */
#define ZIP_GPBF_STRONG_ENCRYPTION 0x0040 /* uses strong encryption */
-#define ZIP_GPBF_USE_DATA_DESCRIPTOR 0x0008 /* uses crc and size from data header */
/* error information */
@@ -92,6 +111,9 @@ struct zip {
FILE *zp; /* file */
struct zip_error error; /* error information */
+ unsigned int flags; /* archive global flags */
+ unsigned int ch_flags; /* changed archive global flags */
+
struct zip_cdir *cdir; /* central directory */
char *ch_comment; /* changed archive comment */
int ch_comment_len; /* length of changed zip archive
@@ -112,13 +134,13 @@ struct zip_file {
int flags; /* -1: eof, >0: error */
int method; /* compression method */
- long fpos; /* position within zip file (fread/fwrite) */
+ off_t fpos; /* position within zip file (fread/fwrite) */
unsigned long bytes_left; /* number of bytes left to read */
unsigned long cbytes_left; /* number of bytes of compressed data left */
-
+
unsigned long crc; /* CRC so far */
unsigned long crc_orig; /* CRC recorded in archive */
-
+
char *buffer;
z_stream *zstr;
};
@@ -189,43 +211,49 @@ extern const int _zip_err_type[];
-PHPZIPAPI void _zip_cdir_free(struct zip_cdir *);
-PHPZIPAPI struct zip_cdir *_zip_cdir_new(int, struct zip_error *);
-PHPZIPAPI int _zip_cdir_write(struct zip_cdir *, FILE *, struct zip_error *);
+int _zip_cdir_compute_crc(struct zip *, uLong *);
+void _zip_cdir_free(struct zip_cdir *);
+struct zip_cdir *_zip_cdir_new(int, struct zip_error *);
+int _zip_cdir_write(struct zip_cdir *, FILE *, struct zip_error *);
-PHPZIPAPI void _zip_dirent_finalize(struct zip_dirent *);
-PHPZIPAPI void _zip_dirent_init(struct zip_dirent *);
-PHPZIPAPI int _zip_dirent_read(struct zip_dirent *, FILE *,
+void _zip_dirent_finalize(struct zip_dirent *);
+void _zip_dirent_init(struct zip_dirent *);
+int _zip_dirent_read(struct zip_dirent *, FILE *,
unsigned char **, unsigned int, int, struct zip_error *);
-PHPZIPAPI int _zip_dirent_write(struct zip_dirent *, FILE *, int, struct zip_error *);
-
-PHPZIPAPI void _zip_entry_free(struct zip_entry *);
-PHPZIPAPI void _zip_entry_init(struct zip *, int);
-PHPZIPAPI struct zip_entry *_zip_entry_new(struct zip *);
-
-PHPZIPAPI void _zip_error_clear(struct zip_error *);
-PHPZIPAPI void _zip_error_copy(struct zip_error *, struct zip_error *);
-PHPZIPAPI void _zip_error_fini(struct zip_error *);
-PHPZIPAPI void _zip_error_get(struct zip_error *, int *, int *);
-PHPZIPAPI void _zip_error_init(struct zip_error *);
-PHPZIPAPI void _zip_error_set(struct zip_error *, int, int);
-PHPZIPAPI const char *_zip_error_strerror(struct zip_error *);
-
-PHPZIPAPI int _zip_file_fillbuf(void *, size_t, struct zip_file *);
-PHPZIPAPI unsigned int _zip_file_get_offset(struct zip *, int);
-
-PHPZIPAPI void _zip_free(struct zip *);
-PHPZIPAPI const char *_zip_get_name(struct zip *, int, int, struct zip_error *);
-PHPZIPAPI int _zip_local_header_read(struct zip *, int);
-PHPZIPAPI void *_zip_memdup(const void *, size_t, struct zip_error *);
-PHPZIPAPI int _zip_name_locate(struct zip *, const char *, int, struct zip_error *);
-PHPZIPAPI struct zip *_zip_new(struct zip_error *);
-PHPZIPAPI unsigned short _zip_read2(unsigned char **);
-PHPZIPAPI unsigned int _zip_read4(unsigned char **);
-PHPZIPAPI int _zip_replace(struct zip *, int, const char *, struct zip_source *);
-PHPZIPAPI int _zip_set_name(struct zip *, int, const char *);
-PHPZIPAPI int _zip_unchange(struct zip *, int, int);
-PHPZIPAPI void _zip_unchange_data(struct zip_entry *);
-
-END_EXTERN_C();
+void _zip_dirent_torrent_normalize(struct zip_dirent *);
+int _zip_dirent_write(struct zip_dirent *, FILE *, int, struct zip_error *);
+
+void _zip_entry_free(struct zip_entry *);
+void _zip_entry_init(struct zip *, int);
+struct zip_entry *_zip_entry_new(struct zip *);
+
+void _zip_error_clear(struct zip_error *);
+void _zip_error_copy(struct zip_error *, struct zip_error *);
+void _zip_error_fini(struct zip_error *);
+void _zip_error_get(struct zip_error *, int *, int *);
+void _zip_error_init(struct zip_error *);
+void _zip_error_set(struct zip_error *, int, int);
+const char *_zip_error_strerror(struct zip_error *);
+
+int _zip_file_fillbuf(void *, size_t, struct zip_file *);
+unsigned int _zip_file_get_offset(struct zip *, int);
+
+int _zip_filerange_crc(FILE *, off_t, off_t, uLong *, struct zip_error *);
+
+struct zip_source *_zip_source_file_or_p(struct zip *, const char *, FILE *,
+ off_t, off_t);
+
+void _zip_free(struct zip *);
+const char *_zip_get_name(struct zip *, int, int, struct zip_error *);
+int _zip_local_header_read(struct zip *, int);
+void *_zip_memdup(const void *, size_t, struct zip_error *);
+int _zip_name_locate(struct zip *, const char *, int, struct zip_error *);
+struct zip *_zip_new(struct zip_error *);
+unsigned short _zip_read2(unsigned char **);
+unsigned int _zip_read4(unsigned char **);
+int _zip_replace(struct zip *, int, const char *, struct zip_source *);
+int _zip_set_name(struct zip *, int, const char *);
+int _zip_unchange(struct zip *, int, int);
+void _zip_unchange_data(struct zip_entry *);
+
#endif /* zipint.h */
diff --git a/ext/zip/lib/zipint_alias.h b/ext/zip/lib/zipint_alias.h
deleted file mode 100644
index e8541b36e..000000000
--- a/ext/zip/lib/zipint_alias.h
+++ /dev/null
@@ -1,49 +0,0 @@
-
-/* state of change of a file in zip archive */
-#define zip_state php_ziplib__zip_state
-#define zip_error php_ziplib__zip_error
-#define zip_dirent php_ziplib__zip_dirent
-#define zip_cdir php_ziplib__zip_cdir
-#define zip_source php_ziplib__zip_source
-#define zip_entry php_ziplib__zip_entry
-
-#define _zip_err_str php_ziplib___zip_err_str
-#define _zip_nerr_str php_ziplib___zip_nerr_str
-#define _zip_err_type php_ziplib___zip_err_type
-
-#define _zip_cdir_free php_ziplib___zip_cdir_free
-#define _zip_cdir_new php_ziplib___zip_cdir_new
-#define _zip_cdir_write php_ziplib___zip_cdir_write
-
-#define _zip_dirent_finalize php_ziplib___zip_dirent_finalize
-#define _zip_dirent_init php_ziplib___zip_dirent_init
-#define _zip_dirent_read php_ziplib___zip_dirent_read
-#define _zip_dirent_write php_ziplib___zip_dirent_write
-
-#define _zip_entry_free php_ziplib___zip_entry_free
-#define _zip_entry_init php_ziplib___zip_entry_init
-#define _zip_entry_new php_ziplib___zip_entry_new
-
-#define _zip_error_clear php_ziplib___zip_error_clear
-#define _zip_error_copy php_ziplib___zip_error_copy
-#define _zip_error_fini php_ziplib___zip_error_fini
-#define _zip_error_get php_ziplib___zip_error_get
-#define _zip_error_init php_ziplib___zip_error_init
-#define _zip_error_set php_ziplib___zip_error_set
-#define _zip_error_strerror php_ziplib___zip_error_strerror
-
-#define _zip_file_fillbuf php_ziplib___zip_file_fillbuf
-#define _zip_file_get_offset php_ziplib___zip_file_get_offset
-
-#define _zip_free php_ziplib___zip_free
-#define _zip_get_name php_ziplib___zip_get_name
-#define _zip_local_header_read php_ziplib___zip_local_header_read
-#define _zip_memdup php_ziplib___zip_memdup
-#define _zip_name_locate php_ziplib___zip_name_locate
-#define _zip_new php_ziplib___zip_new
-#define _zip_read2 php_ziplib___zip_read2
-#define _zip_read4 php_ziplib___zip_read4
-#define _zip_replace php_ziplib___zip_replace
-#define _zip_set_name php_ziplib___zip_set_name
-#define _zip_unchange php_ziplib___zip_unchange
-#define _zip_unchange_data php_ziplib___zip_unchange_data
diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c
index b066a211c..de2a3d090 100644
--- a/ext/zip/php_zip.c
+++ b/ext/zip/php_zip.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -12,11 +12,11 @@
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
- | Author: Piere-Alain Joye <pierre@php.net |
+ | Author: Piere-Alain Joye <pierre@php.net> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_zip.c,v 1.1.2.43 2008/01/18 00:51:38 pajoye Exp $ */
+/* $Id: php_zip.c,v 1.1.2.49 2009/02/05 19:53:22 pajoye Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -31,6 +31,10 @@
#include "lib/zip.h"
#include "lib/zipint.h"
+#ifdef PHP_WIN32
+#include "tsrm_virtual_cwd.h"
+#endif
+
/* zip_open is a macro for renaming libzip zipopen, so we need to use PHP_NAMED_FUNCTION */
static PHP_NAMED_FUNCTION(zif_zip_open);
static PHP_NAMED_FUNCTION(zif_zip_read);
@@ -79,81 +83,429 @@ static int le_zip_entry;
RETURN_FALSE; \
} \
RETURN_TRUE;
+/* }}} */
+
+#if (PHP_MAJOR_VERSION < 6)
+# define add_ascii_assoc_string add_assoc_string
+# define add_ascii_assoc_long add_assoc_long
+#endif
+
+static int php_zip_realpath_r(char *path, int start, int len, int *ll, time_t *t, int use_realpath, int is_dir, int *link_is_dir TSRMLS_DC) /* {{{ */
+{
+ int i, j;
+ char *tmp;
+
+ while (1) {
+ if (len <= start) {
+ return start;
+ }
+
+ i = len;
+ while (i > start && !IS_SLASH(path[i-1])) {
+ i--;
+ }
+
+ if (i == len ||
+ (i == len - 1 && path[i] == '.')) {
+ /* remove double slashes and '.' */
+ len = i - 1;
+ is_dir = 1;
+ continue;
+ } else if (i == len - 2 && path[i] == '.' && path[i+1] == '.') {
+ /* remove '..' and previous directory */
+ if (i - 1 <= start) {
+ return start ? start : len;
+ }
+ j = php_zip_realpath_r(path, start, i-1, ll, t, use_realpath, 1, NULL TSRMLS_CC);
+ if (j > start) {
+ j--;
+ while (j > start && !IS_SLASH(path[j])) {
+ j--;
+ }
+ if (!start) {
+ /* leading '..' must not be removed in case of relative path */
+ if (j == 0 && path[0] == '.' && path[1] == '.' &&
+ IS_SLASH(path[2])) {
+ path[3] = '.';
+ path[4] = '.';
+ path[5] = DEFAULT_SLASH;
+ j = 5;
+ } else if (j > 0 &&
+ path[j+1] == '.' && path[j+2] == '.' &&
+ IS_SLASH(path[j+3])) {
+ j += 4;
+ path[j++] = '.';
+ path[j++] = '.';
+ path[j] = DEFAULT_SLASH;
+ }
+ }
+ } else if (!start && !j) {
+ /* leading '..' must not be removed in case of relative path */
+ path[0] = '.';
+ path[1] = '.';
+ path[2] = DEFAULT_SLASH;
+ j = 2;
+ }
+ return j;
+ }
+
+ path[len] = 0;
+
+#ifdef PHP_WIN32
+ tmp = tsrm_do_alloca(len+1);
+ memcpy(tmp, path, len+1);
+#elif defined(NETWARE)
+
+ tmp = tsrm_do_alloca(len+1);
+ memcpy(tmp, path, len+1);
+#else
+ tmp = tsrm_do_alloca(len+1);
+ memcpy(tmp, path, len+1);
+
+ {
+#endif
+ if (i - 1 <= start) {
+ j = start;
+ } else {
+ /* some leading directories may be unaccessable */
+ j = php_zip_realpath_r(path, start, i-1, ll, t, use_realpath, 1, NULL TSRMLS_CC);
+ if (j > start) {
+ path[j++] = DEFAULT_SLASH;
+ }
+ }
+#ifdef PHP_WIN32
+ if (j < 0 || j + len - i >= MAXPATHLEN-1) {
+ tsrm_free_alloca(tmp);
+
+ return -1;
+ }
+ {
+ /* use the original file or directory name as it wasn't found */
+ memcpy(path+j, tmp+i, len-i+1);
+ j += (len-i);
+ }
+#else
+ if (j < 0 || j + len - i >= MAXPATHLEN-1) {
+ tsrm_free_alloca(tmp);
+ return -1;
+ }
+ memcpy(path+j, tmp+i, len-i+1);
+ j += (len-i);
+ }
+#endif
+
+ tsrm_free_alloca(tmp);
+ return j;
+ }
+}
+/* }}} */
+
+#define CWD_STATE_FREE(s) \
+ free((s)->cwd);
+
+
+#define CWD_STATE_COPY(d, s) \
+ (d)->cwd_length = (s)->cwd_length; \
+ (d)->cwd = (char *) malloc((s)->cwd_length+1); \
+ memcpy((d)->cwd, (s)->cwd, (s)->cwd_length+1);
+
+#ifdef PHP_WIN32
+extern virtual_cwd_globals cwd_globals;
+#endif
+
+/* Resolve path relatively to state and put the real path into state */
+/* returns 0 for ok, 1 for error */
+int php_zip_virtual_file_ex(cwd_state *state, const char *path, int use_realpath) /* {{{ */
+{
+ int path_length = strlen(path);
+ char resolved_path[MAXPATHLEN];
+ int start = 1;
+ int ll = 0;
+ time_t t;
+ int ret;
+ int add_slash;
+ TSRMLS_FETCH();
+
+ if (path_length == 0 || path_length >= MAXPATHLEN-1) {
+ return 1;
+ }
+
+ /* cwd_length can be 0 when getcwd() fails.
+ * This can happen under solaris when a dir does not have read permissions
+ * but *does* have execute permissions */
+ if (!IS_ABSOLUTE_PATH(path, path_length)) {
+ if (state->cwd_length == 0) {
+ /* resolve relative path */
+ start = 0;
+ memcpy(resolved_path , path, path_length + 1);
+ } else {
+ int state_cwd_length = state->cwd_length;
+
+#ifdef PHP_WIN32
+ if (IS_SLASH(path[0])) {
+ if (state->cwd[1] == ':') {
+ /* Copy only the drive name */
+ state_cwd_length = 2;
+ } else if (IS_UNC_PATH(state->cwd, state->cwd_length)) {
+ /* Copy only the share name */
+ state_cwd_length = 2;
+ while (IS_SLASH(state->cwd[state_cwd_length])) {
+ state_cwd_length++;
+ }
+ while (state->cwd[state_cwd_length] &&
+ !IS_SLASH(state->cwd[state_cwd_length])) {
+ state_cwd_length++;
+ }
+ while (IS_SLASH(state->cwd[state_cwd_length])) {
+ state_cwd_length++;
+ }
+ while (state->cwd[state_cwd_length] &&
+ !IS_SLASH(state->cwd[state_cwd_length])) {
+ state_cwd_length++;
+ }
+ }
+ }
+#endif
+ if (path_length + state_cwd_length + 1 >= MAXPATHLEN-1) {
+ return 1;
+ }
+ memcpy(resolved_path, state->cwd, state_cwd_length);
+ resolved_path[state_cwd_length] = DEFAULT_SLASH;
+ memcpy(resolved_path + state_cwd_length + 1, path, path_length + 1);
+ path_length += state_cwd_length + 1;
+ }
+ } else {
+#ifdef PHP_WIN32
+ if (path_length > 2 && path[1] == ':' && !IS_SLASH(path[2])) {
+ resolved_path[0] = path[0];
+ resolved_path[1] = ':';
+ resolved_path[2] = DEFAULT_SLASH;
+ memcpy(resolved_path + 3, path + 2, path_length - 1);
+ path_length++;
+ } else
+#endif
+ memcpy(resolved_path, path, path_length + 1);
+ }
+
+#ifdef PHP_WIN32
+ if (memchr(resolved_path, '*', path_length) ||
+ memchr(resolved_path, '?', path_length)) {
+ return 1;
+ }
+#endif
+
+#ifdef PHP_WIN32
+ if (IS_UNC_PATH(resolved_path, path_length)) {
+ /* skip UNC name */
+ resolved_path[0] = DEFAULT_SLASH;
+ resolved_path[1] = DEFAULT_SLASH;
+ start = 2;
+ while (!IS_SLASH(resolved_path[start])) {
+ if (resolved_path[start] == 0) {
+ goto verify;
+ }
+ resolved_path[start] = toupper(resolved_path[start]);
+ start++;
+ }
+ resolved_path[start++] = DEFAULT_SLASH;
+ while (!IS_SLASH(resolved_path[start])) {
+ if (resolved_path[start] == 0) {
+ goto verify;
+ }
+ resolved_path[start] = toupper(resolved_path[start]);
+ start++;
+ }
+ resolved_path[start++] = DEFAULT_SLASH;
+ } else if (IS_ABSOLUTE_PATH(resolved_path, path_length)) {
+ /* skip DRIVE name */
+ resolved_path[0] = toupper(resolved_path[0]);
+ resolved_path[2] = DEFAULT_SLASH;
+ start = 3;
+ }
+#elif defined(NETWARE)
+ if (IS_ABSOLUTE_PATH(resolved_path, path_length)) {
+ /* skip VOLUME name */
+ start = 0;
+ while (start != ':') {
+ if (resolved_path[start] == 0) return -1;
+ start++;
+ }
+ start++;
+ if (!IS_SLASH(resolved_path[start])) return -1;
+ resolved_path[start++] = DEFAULT_SLASH;
+ }
+#endif
+
+ add_slash = (use_realpath != CWD_REALPATH) && path_length > 0 && IS_SLASH(resolved_path[path_length-1]);
+ /* No cache used */
+ t = 0;
+ path_length = php_zip_realpath_r(resolved_path, start, path_length, &ll, &t, use_realpath, 0, NULL TSRMLS_CC);
+
+ if (path_length < 0) {
+ errno = ENOENT;
+ return 1;
+ }
+
+ if (!start && !path_length) {
+ resolved_path[path_length++] = '.';
+ }
+ if (add_slash && path_length && !IS_SLASH(resolved_path[path_length-1])) {
+ if (path_length >= MAXPATHLEN-1) {
+ return -1;
+ }
+ resolved_path[path_length++] = DEFAULT_SLASH;
+ }
+ resolved_path[path_length] = 0;
+
+#ifdef PHP_WIN32
+verify:
+#endif
+ state->cwd_length = path_length;
+ state->cwd = (char *) realloc(state->cwd, state->cwd_length+1);
+ memcpy(state->cwd, resolved_path, state->cwd_length+1);
+ ret = 0;
+ return (ret);
+}
+/* }}} */
+
+/* Flatten a path by creating a relative path (to .) */
+static char * php_zip_make_relative_path(char *path, int path_len) /* {{{ */
+{
+ char *path_begin = path;
+ size_t i;
+
+ if (IS_SLASH(path[0])) {
+ return path + 1;
+ }
+
+ if (path_len < 1 || path == NULL) {
+ return NULL;
+ }
+
+ i = path_len;
+
+ while (1) {
+ while (i > 0 && !IS_SLASH(path[i])) {
+ i--;
+ }
+
+ if (!i) {
+ return path;
+ }
+
+ if (i >= 2 && (path[i -1] == '.' || path[i -1] == ':')) {
+ /* i is the position of . or :, add 1 for / */
+ path_begin = path + i + 1;
+ break;
+ }
+ i--;
+ }
+ return path_begin;
+}
/* }}} */
/* {{{ php_zip_extract_file */
-/* TODO: Simplify it */
static int php_zip_extract_file(struct zip * za, char *dest, char *file, int file_len TSRMLS_DC)
{
php_stream_statbuf ssb;
struct zip_file *zf;
struct zip_stat sb;
char b[8192];
-
int n, len, ret;
-
php_stream *stream;
-
char *fullpath;
char *file_dirname_fullpath;
char file_dirname[MAXPATHLEN];
size_t dir_len;
-
char *file_basename;
size_t file_basename_len;
int is_dir_only = 0;
+ char *path_cleaned;
+ size_t path_cleaned_len;
+ cwd_state new_state;
- if (file_len >= MAXPATHLEN || zip_stat(za, file, 0, &sb) != 0) {
+ new_state.cwd = (char*)malloc(1);
+ new_state.cwd[0] = '\0';
+ new_state.cwd_length = 0;
+
+ /* Clean/normlize the path and then transform any path (absolute or relative)
+ to a path relative to cwd (../../mydir/foo.txt > mydir/foo.txt)
+ */
+ if (php_zip_virtual_file_ex(&new_state, file, CWD_EXPAND) == 1) {
return 0;
}
+ path_cleaned = php_zip_make_relative_path(new_state.cwd, new_state.cwd_length);
+ path_cleaned_len = strlen(path_cleaned);
- if (file_len > 1 && file[file_len - 1] == '/') {
+ if (path_cleaned_len >= MAXPATHLEN || zip_stat(za, file, 0, &sb) != 0) {
+ return 0;
+ }
+
+ /* it is a directory only, see #40228 */
+ if (path_cleaned_len > 1 && IS_SLASH(path_cleaned[path_cleaned_len - 1])) {
len = spprintf(&file_dirname_fullpath, 0, "%s/%s", dest, file);
is_dir_only = 1;
} else {
- memcpy(file_dirname, file, file_len);
- dir_len = php_dirname(file_dirname, file_len);
+ memcpy(file_dirname, path_cleaned, path_cleaned_len);
+ dir_len = php_dirname(file_dirname, path_cleaned_len);
- if (dir_len > 0) {
- len = spprintf(&file_dirname_fullpath, 0, "%s/%s", dest, file_dirname);
- } else {
+ if (dir_len <= 0 || (dir_len == 1 && file_dirname[0] == '.')) {
len = spprintf(&file_dirname_fullpath, 0, "%s", dest);
+ } else {
+ len = spprintf(&file_dirname_fullpath, 0, "%s/%s", dest, file_dirname);
}
- php_basename(file, file_len, NULL, 0, &file_basename, (size_t *)&file_basename_len TSRMLS_CC);
+ php_basename(path_cleaned, path_cleaned_len, NULL, 0, &file_basename, (unsigned int *)&file_basename_len TSRMLS_CC);
if (OPENBASEDIR_CHECKPATH(file_dirname_fullpath)) {
efree(file_dirname_fullpath);
efree(file_basename);
+ free(new_state.cwd);
return 0;
}
}
/* let see if the path already exists */
if (php_stream_stat_path(file_dirname_fullpath, &ssb) < 0) {
- ret = php_stream_mkdir(file_dirname_fullpath, 0777, PHP_STREAM_MKDIR_RECURSIVE, NULL);
+
+#if defined(PHP_WIN32) && (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION == 1)
+ char *e;
+ e = file_dirname_fullpath;
+ while (*e) {
+ if (*e == '/') {
+ *e = DEFAULT_SLASH;
+ }
+ e++;
+ }
+#endif
+
+ ret = php_stream_mkdir(file_dirname_fullpath, 0777, PHP_STREAM_MKDIR_RECURSIVE|REPORT_ERRORS, NULL);
if (!ret) {
efree(file_dirname_fullpath);
+ if (!is_dir_only) {
efree(file_basename);
+ free(new_state.cwd);
+ }
return 0;
}
}
/* it is a standalone directory, job done */
- if (file[file_len - 1] == '/') {
+ if (is_dir_only) {
efree(file_dirname_fullpath);
- if (!is_dir_only) {
- efree(file_basename);
- }
+ free(new_state.cwd);
return 1;
}
- len = spprintf(&fullpath, 0, "%s/%s/%s", dest, file_dirname, file_basename);
+ len = spprintf(&fullpath, 0, "%s/%s", file_dirname_fullpath, file_basename);
if (!len) {
efree(file_dirname_fullpath);
efree(file_basename);
+ free(new_state.cwd);
return 0;
+ } else if (len > MAXPATHLEN) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Full extraction path exceed MAXPATHLEN (%i)", MAXPATHLEN);
}
/* check again the full path, not sure if it
@@ -164,6 +516,7 @@ static int php_zip_extract_file(struct zip * za, char *dest, char *file, int fil
efree(fullpath);
efree(file_dirname_fullpath);
efree(file_basename);
+ free(new_state.cwd);
return 0;
}
@@ -172,10 +525,15 @@ static int php_zip_extract_file(struct zip * za, char *dest, char *file, int fil
efree(fullpath);
efree(file_dirname_fullpath);
efree(file_basename);
+ free(new_state.cwd);
return 0;
}
+#if (PHP_MAJOR_VERSION < 6)
stream = php_stream_open_wrapper(fullpath, "w+b", REPORT_ERRORS|ENFORCE_SAFE_MODE, NULL);
+#else
+ stream = php_stream_open_wrapper(fullpath, "w+b", REPORT_ERRORS, NULL);
+#endif
n = 0;
if (stream) {
while ((n=zip_fread(zf, b, sizeof(b))) > 0) php_stream_write(stream, b, n);
@@ -186,6 +544,7 @@ static int php_zip_extract_file(struct zip * za, char *dest, char *file, int fil
efree(fullpath);
efree(file_basename);
efree(file_dirname_fullpath);
+ free(new_state.cwd);
if (n<0) {
return 0;
@@ -195,6 +554,111 @@ static int php_zip_extract_file(struct zip * za, char *dest, char *file, int fil
}
/* }}} */
+static int php_zip_add_file(struct zip *za, const char *filename, int filename_len,
+ char *entry_name, int entry_name_len, long offset_start, long offset_len TSRMLS_DC) /* {{{ */
+{
+ struct zip_source *zs;
+ int cur_idx;
+ char resolved_path[MAXPATHLEN];
+
+
+ if (OPENBASEDIR_CHECKPATH(filename)) {
+ return -1;
+ }
+
+ if (!expand_filepath(filename, resolved_path TSRMLS_CC)) {
+ return -1;
+ }
+
+ zs = zip_source_file(za, resolved_path, offset_start, offset_len);
+ if (!zs) {
+ return -1;
+ }
+
+ cur_idx = zip_name_locate(za, (const char *)entry_name, 0);
+ /* TODO: fix _zip_replace */
+ if (cur_idx<0) {
+ /* reset the error */
+ if (za->error.str) {
+ _zip_error_fini(&za->error);
+ }
+ _zip_error_init(&za->error);
+ } else {
+ if (zip_delete(za, cur_idx) == -1) {
+ zip_source_free(zs);
+ return -1;
+ }
+ }
+
+ if (zip_add(za, entry_name, zs) == -1) {
+ return -1;
+ } else {
+ return 1;
+ }
+}
+/* }}} */
+
+static int php_zip_parse_options(zval *options, long *remove_all_path,
+ char **remove_path, int *remove_path_len, char **add_path, int *add_path_len TSRMLS_DC) /* {{{ */
+{
+ zval **option;
+ if (zend_hash_find(HASH_OF(options), "remove_all_path", sizeof("remove_all_path"), (void **)&option) == SUCCESS) {
+ long opt;
+ if (Z_TYPE_PP(option) != IS_LONG) {
+ zval tmp = **option;
+ zval_copy_ctor(&tmp);
+ convert_to_long(&tmp);
+ opt = Z_LVAL(tmp);
+ } else {
+ opt = Z_LVAL_PP(option);
+ }
+ *remove_all_path = opt;
+ }
+
+ /* If I add more options, it would make sense to create a nice static struct and loop over it. */
+ if (zend_hash_find(HASH_OF(options), "remove_path", sizeof("remove_path"), (void **)&option) == SUCCESS) {
+ if (Z_TYPE_PP(option) != IS_STRING) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "remove_path option expected to be a string");
+ return -1;
+ }
+
+ if (Z_STRLEN_PP(option) < 1) {
+ php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Empty string given as remove_path option");
+ return -1;
+ }
+
+ if (Z_STRLEN_PP(option) >= MAXPATHLEN) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "remove_path string is too long (max: %i, %i given)",
+ MAXPATHLEN - 1, Z_STRLEN_PP(option));
+ return -1;
+ }
+ *remove_path_len = Z_STRLEN_PP(option);
+ *remove_path = Z_STRVAL_PP(option);
+ }
+
+ if (zend_hash_find(HASH_OF(options), "add_path", sizeof("add_path"), (void **)&option) == SUCCESS) {
+ if (Z_TYPE_PP(option) != IS_STRING) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "add_path option expected to be a string");
+ return -1;
+ }
+
+ if (Z_STRLEN_PP(option) < 1) {
+ php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Empty string given as the add_path option");
+ return -1;
+ }
+
+ if (Z_STRLEN_PP(option) >= MAXPATHLEN) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "add_path string too long (max: %i, %i given)",
+ MAXPATHLEN - 1, Z_STRLEN_PP(option));
+ return -1;
+ }
+ *add_path_len = Z_STRLEN_PP(option);
+ *add_path = Z_STRVAL_PP(option);
+ }
+ return 1;
+}
+/* }}} */
+
/* {{{ REGISTER_ZIP_CLASS_CONST_LONG */
#define REGISTER_ZIP_CLASS_CONST_LONG(const_name, value) \
zend_declare_class_constant_long(zip_class_entry, const_name, sizeof(const_name)-1, (long)value TSRMLS_CC);
@@ -216,13 +680,13 @@ static int php_zip_extract_file(struct zip * za, char *dest, char *file, int fil
#define RETURN_SB(sb) \
{ \
array_init(return_value); \
- add_assoc_string(return_value, "name", (char *)(sb)->name, 1); \
- add_assoc_long(return_value, "index", (long) (sb)->index); \
- add_assoc_long(return_value, "crc", (long) (sb)->crc); \
- add_assoc_long(return_value, "size", (long) (sb)->size); \
- add_assoc_long(return_value, "mtime", (long) (sb)->mtime); \
- add_assoc_long(return_value, "comp_size", (long) (sb)->comp_size); \
- add_assoc_long(return_value, "comp_method", (long) (sb)->comp_method); \
+ add_ascii_assoc_string(return_value, "name", (char *)(sb)->name, 1); \
+ add_ascii_assoc_long(return_value, "index", (long) (sb)->index); \
+ add_ascii_assoc_long(return_value, "crc", (long) (sb)->crc); \
+ add_ascii_assoc_long(return_value, "size", (long) (sb)->size); \
+ add_ascii_assoc_long(return_value, "mtime", (long) (sb)->mtime); \
+ add_ascii_assoc_long(return_value, "comp_size", (long) (sb)->comp_size); \
+ add_ascii_assoc_long(return_value, "comp_method", (long) (sb)->comp_method); \
}
/* }}} */
@@ -290,6 +754,7 @@ static zend_function_entry zip_functions[] = {
/* }}} */
/* {{{ ZE2 OO definitions */
+#ifdef PHP_ZIP_USE_OO
static zend_class_entry *zip_class_entry;
static zend_object_handlers zip_object_handlers;
@@ -306,8 +771,10 @@ typedef struct _zip_prop_handler {
int type;
} zip_prop_handler;
+#endif
/* }}} */
+#ifdef PHP_ZIP_USE_OO
static void php_zip_register_prop_handler(HashTable *prop_handler, char *name, zip_read_int_t read_int_func, zip_read_const_char_t read_char_func, zip_read_const_char_from_ze_t read_char_from_obj_func, int rettype TSRMLS_DC) /* {{{ */
{
zip_prop_handler hnd;
@@ -351,7 +818,7 @@ static int php_zip_property_reader(ze_zip_object *obj, zip_prop_handler *hnd, zv
switch (hnd->type) {
case IS_STRING:
if (retchar) {
- ZVAL_STRINGL(*retval, (char *) retchar, len, 1);
+ ZVAL_STRING(*retval, (char *) retchar, 1);
} else {
ZVAL_EMPTY_STRING(*retval);
}
@@ -434,7 +901,7 @@ static zval* php_zip_read_property(zval *object, zval *member, int type TSRMLS_D
ret = php_zip_property_reader(obj, hnd, &retval, 1 TSRMLS_CC);
if (ret == SUCCESS) {
/* ensure we're creating a temporary variable */
- retval->refcount = 0;
+ Z_SET_REFCOUNT_P(retval, 0);
} else {
retval = EG(uninitialized_zval_ptr);
}
@@ -478,8 +945,8 @@ static int php_zip_has_property(zval *object, zval *member, int type TSRMLS_DC)
if (type == 2) {
retval = 1;
} else if (php_zip_property_reader(obj, hnd, &tmp, 1 TSRMLS_CC) == SUCCESS) {
- tmp->refcount = 1;
- tmp->is_ref = 0;
+ Z_SET_REFCOUNT_P(tmp, 1);
+ Z_UNSET_ISREF_P(tmp);
if (type == 1) {
retval = zend_is_true(tmp);
} else if (type == 0) {
@@ -580,7 +1047,14 @@ static zend_object_value php_zip_object_new(zend_class_entry *class_type TSRMLS_
intern->buffers_cnt = 0;
intern->prop_handler = &zip_prop_handlers;
+#if ((PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION > 1) || (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION == 1 && PHP_RELEASE_VERSION > 2))
zend_object_std_init(&intern->zo, class_type TSRMLS_CC);
+#else
+ ALLOC_HASHTABLE(intern->zo.properties);
+ zend_hash_init(intern->zo.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
+ intern->zo.ce = class_type;
+#endif
+
zend_hash_copy(intern->zo.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref,
(void *) &tmp, sizeof(zval *));
@@ -594,6 +1068,7 @@ static zend_object_value php_zip_object_new(zend_class_entry *class_type TSRMLS_
return retval;
}
/* }}} */
+#endif
/* {{{ Resource dtors */
@@ -636,7 +1111,7 @@ static void php_zip_free_entry(zend_rsrc_list_entry *rsrc TSRMLS_DC)
/* }}}*/
/* reset macro */
-#undef zip
+
/* {{{ function prototypes */
static PHP_MINIT_FUNCTION(zip);
static PHP_MSHUTDOWN_FUNCTION(zip);
@@ -654,7 +1129,7 @@ zend_module_entry zip_module_entry = {
NULL,
NULL,
PHP_MINFO(zip),
- "2.0.0",
+ PHP_ZIP_VERSION_STRING,
STANDARD_MODULE_PROPERTIES
};
/* }}} */
@@ -663,7 +1138,6 @@ zend_module_entry zip_module_entry = {
ZEND_GET_MODULE(zip)
#endif
/* set macro */
-#define zip php_ziplib__zip
/* {{{ proto resource zip_open(string filename)
Create new zip using source uri for output */
@@ -694,7 +1168,7 @@ static PHP_NAMED_FUNCTION(zif_zip_open)
rsrc_int = (zip_rsrc *)emalloc(sizeof(zip_rsrc));
- rsrc_int->za = zip_open(filename, 0, &err);
+ rsrc_int->za = zip_open(resolved_path, 0, &err);
if (rsrc_int->za == NULL) {
efree(rsrc_int);
RETURN_LONG((long)err);
@@ -749,7 +1223,7 @@ static PHP_NAMED_FUNCTION(zif_zip_read)
if (ret != 0) {
efree(zr_rsrc);
- RETURN_LONG((long)ret);
+ RETURN_FALSE;
}
zr_rsrc->zf = zip_fopen_index(rsrc_int->za, rsrc_int->index_current, 0);
@@ -944,6 +1418,7 @@ static PHP_NAMED_FUNCTION(zif_zip_entry_compressionmethod)
}
/* }}} */
+#ifdef PHP_ZIP_USE_OO
/* {{{ proto mixed ZipArchive::open(string source [, int flags])
Create new zip using source uri for output, return TRUE on success or the error code */
static ZIPARCHIVE_METHOD(open)
@@ -991,6 +1466,7 @@ static ZIPARCHIVE_METHOD(open)
efree(ze_obj->filename);
ze_obj->filename = NULL;
}
+
intern = zip_open(resolved_path, flags, &err);
if (!intern || err) {
RETURN_LONG((long)err);
@@ -1031,6 +1507,28 @@ static ZIPARCHIVE_METHOD(close)
}
/* }}} */
+/* {{{ proto string ZipArchive::getStatusString()
+ * Returns the status error message, system and/or zip messages */
+static ZIPARCHIVE_METHOD(getStatusString)
+{
+ struct zip *intern;
+ zval *this = getThis();
+ int zep, syp, len;
+ char error_string[128];
+
+ if (!this) {
+ RETURN_FALSE;
+ }
+
+ ZIP_FROM_OBJECT(intern, this);
+
+ zip_error_get(intern, &zep, &syp);
+
+ len = zip_error_to_str(error_string, 128, zep, syp);
+ RETVAL_STRINGL(error_string, len, 1);
+}
+/* }}} */
+
/* {{{ proto bool ZipArchive::createEmptyDir(string dirname)
Returns the index of the entry named filename in the archive */
static ZIPARCHIVE_METHOD(addEmptyDir)
@@ -1071,17 +1569,10 @@ static ZIPARCHIVE_METHOD(addEmptyDir)
if (idx >= 0) {
RETVAL_FALSE;
} else {
- /* reset the error */
- if (intern->error.str) {
- _zip_error_fini(&intern->error);
- }
- _zip_error_init(&intern->error);
-
if (zip_add_dir(intern, (const char *)s) == -1) {
RETVAL_FALSE;
- } else {
- RETVAL_TRUE;
}
+ RETVAL_TRUE;
}
if (s != dirname) {
@@ -1100,10 +1591,7 @@ static ZIPARCHIVE_METHOD(addFile)
int filename_len;
char *entry_name = NULL;
int entry_name_len = 0;
- struct zip_source *zs;
long offset_start = 0, offset_len = 0;
- int cur_idx;
- char resolved_path[MAXPATHLEN];
if (!this) {
RETURN_FALSE;
@@ -1126,35 +1614,8 @@ static ZIPARCHIVE_METHOD(addFile)
entry_name_len = filename_len;
}
- if (OPENBASEDIR_CHECKPATH(filename)) {
- RETURN_FALSE;
- }
-
- if (!expand_filepath(filename, resolved_path TSRMLS_CC)) {
- RETURN_FALSE;
- }
-
- zs = zip_source_file(intern, resolved_path, 0, 0);
- if (!zs) {
- RETURN_FALSE;
- }
-
- cur_idx = zip_name_locate(intern, (const char *)entry_name, 0);
- /* TODO: fix _zip_replace */
- if (cur_idx<0) {
- /* reset the error */
- if (intern->error.str) {
- _zip_error_fini(&intern->error);
- }
- _zip_error_init(&intern->error);
-
- } else {
- if (zip_delete(intern, cur_idx) == -1) {
- RETURN_FALSE;
- }
- }
-
- if (zip_add(intern, entry_name, zs) == -1) {
+ if (php_zip_add_file(intern, filename, filename_len,
+ entry_name, entry_name_len, 0, 0 TSRMLS_CC) < 0) {
RETURN_FALSE;
} else {
RETURN_TRUE;
@@ -1206,14 +1667,7 @@ static ZIPARCHIVE_METHOD(addFromString)
cur_idx = zip_name_locate(intern, (const char *)name, 0);
/* TODO: fix _zip_replace */
- if (cur_idx<0) {
- /* reset the error */
- if (intern->error.str) {
- _zip_error_fini(&intern->error);
- }
- _zip_error_init(&intern->error);
-
- } else {
+ if (cur_idx >= 0) {
if (zip_delete(intern, cur_idx) == -1) {
RETURN_FALSE;
}
@@ -1310,15 +1764,10 @@ static ZIPARCHIVE_METHOD(locateName)
idx = (long)zip_name_locate(intern, (const char *)name, flags);
- if (idx<0) {
- /* reset the error */
- if (intern->error.str) {
- _zip_error_fini(&intern->error);
- }
- _zip_error_init(&intern->error);
- RETURN_FALSE;
- } else {
+ if (idx >= 0) {
RETURN_LONG(idx);
+ } else {
+ RETURN_FALSE;
}
}
/* }}} */
@@ -1807,7 +2256,7 @@ static ZIPARCHIVE_METHOD(extractTo)
}
ZIP_FROM_OBJECT(intern, this);
- if (zval_files) {
+ if (zval_files && (Z_TYPE_P(zval_files) != IS_NULL)) {
switch (Z_TYPE_P(zval_files)) {
case IS_STRING:
if (!php_zip_extract_file(intern, pathto, Z_STRVAL_P(zval_files), Z_STRLEN_P(zval_files) TSRMLS_CC)) {
@@ -1979,6 +2428,7 @@ static ZIPARCHIVE_METHOD(getStream)
static zend_function_entry zip_class_functions[] = {
ZIPARCHIVE_ME(open, NULL, ZEND_ACC_PUBLIC)
ZIPARCHIVE_ME(close, NULL, ZEND_ACC_PUBLIC)
+ ZIPARCHIVE_ME(getStatusString, NULL, ZEND_ACC_PUBLIC)
ZIPARCHIVE_ME(addEmptyDir, NULL, ZEND_ACC_PUBLIC)
ZIPARCHIVE_ME(addFromString, NULL, ZEND_ACC_PUBLIC)
ZIPARCHIVE_ME(addFile, NULL, ZEND_ACC_PUBLIC)
@@ -2007,11 +2457,10 @@ static zend_function_entry zip_class_functions[] = {
{NULL, NULL, NULL}
};
/* }}} */
+#endif
/* {{{ PHP_MINIT_FUNCTION */
-#undef zip
static PHP_MINIT_FUNCTION(zip)
-#define zip php_ziplib__zip
{
zend_class_entry ce;
@@ -2092,9 +2541,7 @@ static PHP_MINIT_FUNCTION(zip)
/* {{{ PHP_MSHUTDOWN_FUNCTION
*/
-#undef zip
static PHP_MSHUTDOWN_FUNCTION(zip)
-#define zip php_ziplib__zip
{
zend_hash_destroy(&zip_prop_handlers);
php_unregister_url_stream_wrapper("zip" TSRMLS_CC);
@@ -2105,15 +2552,14 @@ static PHP_MSHUTDOWN_FUNCTION(zip)
/* {{{ PHP_MINFO_FUNCTION
*/
-#undef zip
static PHP_MINFO_FUNCTION(zip)
{
php_info_print_table_start();
php_info_print_table_row(2, "Zip", "enabled");
- php_info_print_table_row(2, "Extension Version","$Id: php_zip.c,v 1.1.2.43 2008/01/18 00:51:38 pajoye Exp $");
+ php_info_print_table_row(2, "Extension Version","$Id: php_zip.c,v 1.1.2.49 2009/02/05 19:53:22 pajoye Exp $");
php_info_print_table_row(2, "Zip version", PHP_ZIP_VERSION_STRING);
- php_info_print_table_row(2, "Libzip version", "0.8.0-compatible");
+ php_info_print_table_row(2, "Libzip version", "0.9.0");
php_info_print_table_end();
}
diff --git a/ext/zip/php_zip.h b/ext/zip/php_zip.h
index 6712b5291..6891d031f 100644
--- a/ext/zip/php_zip.h
+++ b/ext/zip/php_zip.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_zip.h,v 1.10.2.5 2008/01/18 00:51:38 pajoye Exp $ */
+/* $Id: php_zip.h,v 1.10.2.9 2009/02/05 19:53:22 pajoye Exp $ */
#ifndef PHP_ZIP_H
#define PHP_ZIP_H
@@ -24,14 +24,23 @@
extern zend_module_entry zip_module_entry;
#define phpext_zip_ptr &zip_module_entry
-#ifdef ZTS
#include "TSRM.h"
-#endif
#include "lib/zip.h"
#define PHP_ZIP_VERSION_STRING "1.8.11"
+#if ((PHP_MAJOR_VERSION >= 5 && PHP_MINOR_VERSION >= 2) || PHP_MAJOR_VERSION >= 6)
+# define PHP_ZIP_USE_OO 1
+#endif
+
+#ifndef Z_SET_REFCOUNT_P
+# if PHP_MAJOR_VERSION < 6 && (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION < 3)
+# define Z_SET_REFCOUNT_P(pz, rc) pz->refcount = rc
+# define Z_UNSET_ISREF_P(pz) pz->is_ref = 0
+# endif
+#endif
+
/* {{{ OPENBASEDIR_CHECKPATH(filename) */
#if (PHP_MAJOR_VERSION < 6)
#define OPENBASEDIR_CHECKPATH(filename) \
@@ -55,6 +64,7 @@ typedef struct _ze_zip_read_rsrc {
struct zip_stat sb;
} zip_read_rsrc;
+#ifdef PHP_ZIP_USE_OO
#define ZIPARCHIVE_ME(name, arg_info, flags) ZEND_FENTRY(name, c_ziparchive_ ##name, arg_info, flags)
#define ZIPARCHIVE_METHOD(name) ZEND_NAMED_FUNCTION(c_ziparchive_##name)
@@ -73,6 +83,7 @@ php_stream *php_stream_zip_opener(php_stream_wrapper *wrapper, char *path, char
php_stream *php_stream_zip_open(char *filename, char *path, char *mode STREAMS_DC TSRMLS_DC);
extern php_stream_wrapper php_stream_zip_wrapper;
+#endif
#endif /* PHP_ZIP_H */
diff --git a/ext/zip/tests/bug11216.phpt b/ext/zip/tests/bug11216.phpt
index 04b3f218c..5586eebf3 100644
--- a/ext/zip/tests/bug11216.phpt
+++ b/ext/zip/tests/bug11216.phpt
@@ -2,7 +2,7 @@
Bug #11216 (::addEmptyDir() crashes when the directory already exists)
--SKIPIF--
<?php
-/* $Id: bug11216.phpt,v 1.1.2.2 2007/06/03 21:21:57 pajoye Exp $ */
+/* $Id: bug11216.phpt,v 1.1.2.3 2009/01/08 22:03:40 tony2001 Exp $ */
if(!extension_loaded('zip')) die('skip');
?>
--FILE--
@@ -15,14 +15,14 @@ var_dump($archive->addEmptyDir('test'));
$archive->close();
unlink('__test.zip');
?>
---EXPECT--
+--EXPECTF--
bool(true)
ZipArchive Object
(
[status] => 0
[statusSys] => 0
[numFiles] => 1
- [filename] =>
+ [filename] => %s
[comment] =>
)
bool(false)
diff --git a/ext/zip/tests/bug14962.phpt b/ext/zip/tests/bug14962.phpt
new file mode 100644
index 000000000..851d28eea
--- /dev/null
+++ b/ext/zip/tests/bug14962.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Bug #14962 (::extractTo second argument is not really optional)
+--SKIPIF--
+<?php
+/* $Id: bug14962.phpt,v 1.1.4.2 2008/11/12 11:59:26 pajoye Exp $ */
+if(!extension_loaded('zip')) die('skip');
+?>
+--FILE--
+<?php
+
+$dir = dirname(__FILE__);
+$file = '__tmp14962.txt';
+$fullpath = $dir . '/' . $file;
+$za = new ZipArchive;
+$za->open($dir . '/__14962.zip', ZIPARCHIVE::CREATE);
+$za->addFromString($file, '1234');
+$za->close();
+
+if (!is_file($dir . "/__14962.zip")) {
+ die('failed to create the archive');
+}
+$za = new ZipArchive;
+$za->open($dir . '/__14962.zip');
+$za->extractTo($dir, NULL);
+$za->close();
+
+if (is_file($fullpath)) {
+ unlink($fullpath);
+ echo "Ok";
+}
+unlink($dir . '/' . '__14962.zip');
+?>
+--EXPECT--
+Ok
diff --git a/ext/zip/tests/bug38943.inc b/ext/zip/tests/bug38943.inc
new file mode 100644
index 000000000..a6f45e829
--- /dev/null
+++ b/ext/zip/tests/bug38943.inc
@@ -0,0 +1,16 @@
+<?php
+class myZip extends ZipArchive {
+ private $test = 0;
+ public $testp = 1;
+ private $testarray = array();
+
+ public function __construct() {
+ $this->testarray[] = 1;
+ var_dump($this->testarray);
+ }
+}
+
+$z = new myZip;
+$z->testp = "foobar";
+var_dump($z);
+
diff --git a/ext/zip/tests/bug38943.phpt b/ext/zip/tests/bug38943.phpt
index 486c16950..af470efca 100644
--- a/ext/zip/tests/bug38943.phpt
+++ b/ext/zip/tests/bug38943.phpt
@@ -1,26 +1,14 @@
--TEST--
-#38943, properties in extended class cannot be set
+#38943, properties in extended class cannot be set (< 5.3)
--SKIPIF--
<?php
-/* $Id: bug38943.phpt,v 1.1.2.2 2006/10/09 16:02:34 bjori Exp $ */
+/* $Id: bug38943.phpt,v 1.1.2.3 2008/11/12 11:59:26 pajoye Exp $ */
if(!extension_loaded('zip')) die('skip');
+if (!defined('PHP_VERSION_MAJOR')) die('skip');
?>
--FILE--
<?php
-class myZip extends ZipArchive {
- private $test = 0;
- public $testp = 1;
- private $testarray = array();
-
- public function __construct() {
- $this->testarray[] = 1;
- var_dump($this->testarray);
- }
-}
-
-$z = new myZip;
-$z->testp = "foobar";
-var_dump($z);
+include dirname(__FILE__) . '/bug38943.inc';
?>
--EXPECTF--
array(1) {
diff --git a/ext/zip/tests/bug38943_2.phpt b/ext/zip/tests/bug38943_2.phpt
new file mode 100644
index 000000000..d60cb53c9
--- /dev/null
+++ b/ext/zip/tests/bug38943_2.phpt
@@ -0,0 +1,38 @@
+--TEST--
+#38943, properties in extended class cannot be set (5.3)
+--SKIPIF--
+<?php
+/* $Id: bug38943_2.phpt,v 1.2.2.3 2008/11/12 17:29:50 felipe Exp $ */
+if(!extension_loaded('zip')) die('skip');
+if (version_compare(PHP_VERSION, "5.3", "<")) die('skip test for5.3+ only');
+?>
+--FILE--
+<?php
+include 'bug38943.inc';
+?>
+--EXPECTF--
+array(1) {
+ [0]=>
+ int(1)
+}
+object(myZip)#1 (%d) {
+ ["test":"myZip":private]=>
+ int(0)
+ ["testp"]=>
+ string(6) "foobar"
+ ["testarray":"myZip":private]=>
+ array(1) {
+ [0]=>
+ int(1)
+ }
+ ["status"]=>
+ int(0)
+ ["statusSys"]=>
+ int(0)
+ ["numFiles"]=>
+ int(0)
+ ["filename"]=>
+ string(0) ""
+ ["comment"]=>
+ string(0) ""
+}
diff --git a/ext/zip/tests/bug38944.phpt b/ext/zip/tests/bug38944.phpt
index ee12fad2b..7cff60c98 100644
--- a/ext/zip/tests/bug38944.phpt
+++ b/ext/zip/tests/bug38944.phpt
@@ -23,7 +23,7 @@ echo "Done\n";
int(0)
int(0)
int(0)
-string(0) ""
+string(%d) "%s"
string(0) ""
object(ZipArchive)#%d (5) {
["status"]=>
@@ -33,7 +33,7 @@ object(ZipArchive)#%d (5) {
["numFiles"]=>
int(0)
["filename"]=>
- string(0) ""
+ string(%d) "%s"
["comment"]=>
string(0) ""
}
diff --git a/ext/zip/tests/bug7658.phpt b/ext/zip/tests/bug7658.phpt
index 743761097..ddadac395 100644
--- a/ext/zip/tests/bug7658.phpt
+++ b/ext/zip/tests/bug7658.phpt
@@ -2,11 +2,28 @@
Bug #7658 (modify archive with general bit flag 3 set)
--SKIPIF--
<?php
-/* $Id: bug7658.phpt,v 1.1.2.2 2007/05/07 18:03:00 tony2001 Exp $ */
+/* $Id: bug7658.phpt,v 1.1.2.3 2008/11/12 11:59:26 pajoye Exp $ */
if(!extension_loaded('zip')) die('skip');
?>
--FILE--
<?php
+$expect = array(
+ "mimetype",
+ "Configurations2/statusbar/",
+ "Configurations2/accelerator/current.xml",
+ "Configurations2/floater/",
+ "Configurations2/popupmenu/",
+ "Configurations2/progressbar/",
+ "Configurations2/menubar/",
+ "Configurations2/toolbar/",
+ "Configurations2/images/Bitmaps/",
+ "content.xml",
+ "styles.xml",
+ "meta.xml",
+ "Thumbnails/thumbnail.png",
+ "settings.xml",
+ "META-INF/manifest.xml",
+);
$dirname = dirname(__FILE__) . '/';
include $dirname . 'utils.inc';
$file = $dirname . '__tmp_bug7658.odt';
@@ -16,45 +33,23 @@ if(!$zip->open($file)) {
echo 'failed';
}
-dump_entries_name($zip);
$zip->deleteName('content.xml');
$zip->addFile($dirname . "bug7658.xml","content.xml");
$zip->close();
echo "\n";
$zip->open($file);
-dump_entries_name($zip);
-@unlink($file);
-?>
---EXPECT--
-0 mimetype
-1 Configurations2/statusbar/
-2 Configurations2/accelerator/current.xml
-3 Configurations2/floater/
-4 Configurations2/popupmenu/
-5 Configurations2/progressbar/
-6 Configurations2/menubar/
-7 Configurations2/toolbar/
-8 Configurations2/images/Bitmaps/
-9 content.xml
-10 styles.xml
-11 meta.xml
-12 Thumbnails/thumbnail.png
-13 settings.xml
-14 META-INF/manifest.xml
-0 mimetype
-1 Configurations2/statusbar/
-2 Configurations2/accelerator/current.xml
-3 Configurations2/floater/
-4 Configurations2/popupmenu/
-5 Configurations2/progressbar/
-6 Configurations2/menubar/
-7 Configurations2/toolbar/
-8 Configurations2/images/Bitmaps/
-9 styles.xml
-10 meta.xml
-11 Thumbnails/thumbnail.png
-12 settings.xml
-13 META-INF/manifest.xml
-14 content.xml
+for($i=0; $i < $zip->numFiles; $i++) {
+ $sb = $zip->statIndex($i);
+ $found[] = $sb['name'];
+}
+$ar = array_diff($found, $expect);
+
+var_dump($ar);
+unset($zip);
+unlink($file);
+?>
+--EXPECTF--
+array(0) {
+}
diff --git a/ext/zip/tests/oo_delete.phpt b/ext/zip/tests/oo_delete.phpt
index 902fad244..c73a069a6 100644
--- a/ext/zip/tests/oo_delete.phpt
+++ b/ext/zip/tests/oo_delete.phpt
@@ -2,7 +2,7 @@
Delete entries
--SKIPIF--
<?php
-/* $Id: oo_delete.phpt,v 1.1 2006/07/24 16:58:58 pajoye Exp $ */
+/* $Id: oo_delete.phpt,v 1.1.2.1 2008/11/12 11:59:26 pajoye Exp $ */
if(!extension_loaded('zip')) die('skip');
?>
--FILE--
@@ -63,7 +63,12 @@ $sb = $zip->statIndex(1);
var_dump($sb);
$sb = $zip->statIndex(2);
var_dump($sb);
-@unlink($file);
+$zip->close();
+unset($zip);
+
+if (file_exists($file)) {
+ unlink($file);
+}
?>
--EXPECTF--
ok
diff --git a/ext/zip/tests/oo_properties.phpt b/ext/zip/tests/oo_properties.phpt
index f7d126696..fefab2610 100644
--- a/ext/zip/tests/oo_properties.phpt
+++ b/ext/zip/tests/oo_properties.phpt
@@ -2,7 +2,7 @@
ziparchive::properties isset()/empty() checks
--SKIPIF--
<?php
-/* $Id: oo_properties.phpt,v 1.1.2.5 2007/11/19 11:12:36 tony2001 Exp $ */
+/* $Id: oo_properties.phpt,v 1.1.2.6 2009/01/08 22:03:40 tony2001 Exp $ */
if(!extension_loaded('zip')) die('skip');
?>
--FILE--
@@ -51,8 +51,8 @@ zip->status (0):
zip->numFiles (5):
empty(): 0
isset(): 1
-zip->filename (0):
- empty(): 1
+zip->filename (%d):
+ empty(): 0
isset(): 1
zip->comment (19):
empty(): 0
diff --git a/ext/zip/zip_stream.c b/ext/zip/zip_stream.c
index 747097537..8a495d3bc 100644
--- a/ext/zip/zip_stream.c
+++ b/ext/zip/zip_stream.c
@@ -1,4 +1,4 @@
-/* $Id: zip_stream.c,v 1.1.2.5 2007/03/14 11:08:57 pajoye Exp $ */
+/* $Id: zip_stream.c,v 1.1.2.7 2008/07/23 11:25:50 tony2001 Exp $ */
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
diff --git a/ext/zlib/php_zlib.h b/ext/zlib/php_zlib.h
index 89e6ee213..bc944fcd7 100644
--- a/ext/zlib/php_zlib.h
+++ b/ext/zlib/php_zlib.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_zlib.h,v 1.42.2.1.2.3 2007/12/31 07:20:14 sebastian Exp $ */
+/* $Id: php_zlib.h,v 1.42.2.1.2.4 2008/12/31 11:17:47 sebastian Exp $ */
#ifndef PHP_ZLIB_H
#define PHP_ZLIB_H
diff --git a/ext/zlib/tests/data.inc b/ext/zlib/tests/data.inc
new file mode 100644
index 000000000..441199ff0
--- /dev/null
+++ b/ext/zlib/tests/data.inc
@@ -0,0 +1,88 @@
+
+<?php
+$data = <<<QUOTE
+To be or not to be, that is the question;
+Whether 'tis nobler in the mind to suffer
+The Slings and Arrows of outrageous Fortune
+Or to take arms against a sea of troubles,
+And by opposing, end them. To die, to sleep;
+No more; and by a sleep to say we end
+The heart-ache and the thousand natural shocks
+That flesh is heir to 'tis a consummation
+Devoutly to be wish'd. To die, to sleep;
+To sleep, perchance to dream. Ay, there's the rub,
+For in that sleep of death what dreams may come,
+When we have shuffled off this mortal coil,
+Must give us pause. There's the respect
+That makes calamity of so long life,
+For who would bear the whips and scorns of time,
+Th'oppressor's wrong, the proud man's contumely,
+The pangs of dispriz'd love, the law's delay,
+The insolence of office, and the spurns
+That patient merit of th'unworthy takes,
+When he himself might his quietus make
+With a bare bodkin? who would fardels bear,
+To grunt and sweat under a weary life,
+But that the dread of something after death,
+The undiscovered country from whose bourn
+No traveller returns, puzzles the will,
+And makes us rather bear those ills we have
+Than fly to others that we know not of?
+Thus conscience does make cowards of us all,
+And thus the native hue of resolution
+Is sicklied o'er with the pale cast of thought,
+And enterprises of great pitch and moment
+With this regard their currents turn away,
+And lose the name of action.
+
+
+Hath not a Jew eyes? Hath not a Jew hands, organs, dimensions,
+senses, affections, passions; fed with the same food, hurt with
+the same weapons, subject to the same diseases, heal'd by
+the same means, warm'd and cool'd by the same winter and summer
+as a Christian is? If you prick us, do we not bleed? If you
+tickle us, do we not laugh? If you poison us, do we not die?
+And if you wrong us, shall we not revenge? If we are like you
+in the rest, we will resemble you in that. If a Jew wrong a
+Christian, what is his humility? Revenge. If a Christian wrong
+a Jew, what should his sufferance be by Christian example? Why,
+revenge. The villainy you teach me, I will execute, and it
+shall go hard but I will better the instruction.
+
+Is this a dagger which I see before me,
+The handle toward my hand? Come, let me clutch thee.
+I have thee not, and yet I see thee still.
+Art thou not, fatal vision, sensible
+To feeling as to sight? or art thou but
+A dagger of the mind, a false creation,
+Proceeding from the heat-oppress'd brain?
+I see thee yet, in form as palpable
+As this which now I draw.
+Thou marshall'st me the way that I was going;
+And such an instrument I was to use.
+Mine eyes are made the fools o' the other senses,
+Or else worth all the rest; I see thee still,
+And on thy blade and dudgeon gouts of blood,
+Which was not so before.
+There's no such thing:
+It is the bloody business which informs Thus to mine eyes.
+Now o'er the one halfworld Nature seems dead,
+and wicked dreams abuse The curtain'd sleep; witchcraft celebrates
+Pale Hecate's offerings, and wither'd murder,
+Alarum'd by his sentinel, the wolf,
+Whose howl's his watch, thus with his stealthy pace.
+With Tarquin's ravishing strides, towards his design
+Moves like a ghost. Thou sure and firm-set earth,
+Hear not my steps, which way they walk,
+for fear Thy very stones prate of my whereabout,
+And take the present horror from the time,
+Which now suits with it.
+Whiles I threat, he lives:
+Words to the heat of deeds too cold breath gives.
+I go, and it is done; the bell invites me.
+Hear it not, Duncan; for it is a knell
+That summons thee to heaven or to hell.
+
+QUOTE;
+
+?> \ No newline at end of file
diff --git a/ext/zlib/tests/gzclose_basic.phpt b/ext/zlib/tests/gzclose_basic.phpt
new file mode 100644
index 000000000..d61855bf9
--- /dev/null
+++ b/ext/zlib/tests/gzclose_basic.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test function gzclose() by calling it with its expected arguments
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+// note that gzclose is an alias to fclose. parameter checking tests will be
+// the same as fclose
+
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f, 'r');
+gzread($h, 20);
+var_dump(gzclose($h));
+
+//should fail.
+gzread($h, 20);
+
+$h = gzopen($f, 'r');
+gzread($h, 20);
+var_dump(fclose($h));
+
+//should fail.
+gzread($h, 20);
+
+
+?>
+===DONE===
+--EXPECTF--
+bool(true)
+
+Warning: gzread(): %d is not a valid stream resource in %s on line %d
+bool(true)
+
+Warning: gzread(): %d is not a valid stream resource in %s on line %d
+===DONE===
diff --git a/ext/zlib/tests/gzclose_error.phpt b/ext/zlib/tests/gzclose_error.phpt
new file mode 100644
index 000000000..1122b35f0
--- /dev/null
+++ b/ext/zlib/tests/gzclose_error.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test function gzclose() by calling it more than or less than its expected arguments
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f, 'r');
+$extra_arg = 'nothing';
+
+
+
+var_dump(gzclose( $h, $extra_arg ) );
+var_dump(gzclose());
+
+gzclose($h);
+
+
+?>
+===DONE===
+--EXPECTF--
+
+Warning: Wrong parameter count for gzclose() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for gzclose() in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzcompress_basic1.phpt b/ext/zlib/tests/gzcompress_basic1.phpt
new file mode 100644
index 000000000..dddeb1d55
--- /dev/null
+++ b/ext/zlib/tests/gzcompress_basic1.phpt
@@ -0,0 +1,125 @@
+--TEST--
+Test gzcompress() function : basic functionality
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gzcompress(string data [, int level])
+ * Description: Gzip-compress a string
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+/*
+ * add a comment here to say what the test is supposed to do
+ */
+
+include(dirname(__FILE__) . '/data.inc');
+
+echo "*** Testing gzcompress() : basic functionality ***\n";
+
+// Initialise all required variables
+
+$smallstring = "A small string to compress\n";
+
+
+// Calling gzcompress() with all possible arguments
+
+// Compressing a big string
+for($i = -1; $i < 10; $i++) {
+ echo "-- Compression level $i --\n";
+ $output = gzcompress($data, $i);
+ var_dump(md5($output));
+ var_dump(strcmp(gzuncompress($output), $data));
+}
+
+// Compressing a smaller string
+for($i = -1; $i < 10; $i++) {
+ echo "-- Compression level $i --\n";
+ $output = gzcompress($smallstring, $i);
+ var_dump(bin2hex($output));
+ var_dump(strcmp(gzuncompress($output), $smallstring));
+}
+
+// Calling gzcompress() with mandatory arguments
+echo "\n-- Testing with no specified compression level --\n";
+var_dump( bin2hex(gzcompress($smallstring) ));
+
+?>
+===Done===
+--EXPECT--
+*** Testing gzcompress() : basic functionality ***
+-- Compression level -1 --
+string(32) "764809aef15bb34cb73ad49ecb600d99"
+int(0)
+-- Compression level 0 --
+string(32) "d0136b3fb5424142c0eb26dfec8f56fe"
+int(0)
+-- Compression level 1 --
+string(32) "c2e070f4320d1f674965eaab95b53d9c"
+int(0)
+-- Compression level 2 --
+string(32) "400a53d19ca337727f8cd362f5cd3ee0"
+int(0)
+-- Compression level 3 --
+string(32) "a441a2f5169bb303cd45b860a5a9dbf9"
+int(0)
+-- Compression level 4 --
+string(32) "d5b7451e9de2864beccc9de1fc55eb87"
+int(0)
+-- Compression level 5 --
+string(32) "32ba4a01120449ec25508cabfad41f56"
+int(0)
+-- Compression level 6 --
+string(32) "764809aef15bb34cb73ad49ecb600d99"
+int(0)
+-- Compression level 7 --
+string(32) "e083e7e8d05471fed3c2182b9cd0d9eb"
+int(0)
+-- Compression level 8 --
+string(32) "e083e7e8d05471fed3c2182b9cd0d9eb"
+int(0)
+-- Compression level 9 --
+string(32) "e083e7e8d05471fed3c2182b9cd0d9eb"
+int(0)
+-- Compression level -1 --
+string(70) "789c735428ce4dccc951282e29cacc4b5728c95748cecf2d284a2d2ee6020087a509cb"
+int(0)
+-- Compression level 0 --
+string(76) "7801011b00e4ff4120736d616c6c20737472696e6720746f20636f6d70726573730a87a509cb"
+int(0)
+-- Compression level 1 --
+string(70) "7801735428ce4dccc951282e29cacc4b5728c95748cecf2d284a2d2ee6020087a509cb"
+int(0)
+-- Compression level 2 --
+string(70) "785e735428ce4dccc951282e29cacc4b5728c95748cecf2d284a2d2ee6020087a509cb"
+int(0)
+-- Compression level 3 --
+string(70) "785e735428ce4dccc951282e29cacc4b5728c95748cecf2d284a2d2ee6020087a509cb"
+int(0)
+-- Compression level 4 --
+string(70) "785e735428ce4dccc951282e29cacc4b5728c95748cecf2d284a2d2ee6020087a509cb"
+int(0)
+-- Compression level 5 --
+string(70) "785e735428ce4dccc951282e29cacc4b5728c95748cecf2d284a2d2ee6020087a509cb"
+int(0)
+-- Compression level 6 --
+string(70) "789c735428ce4dccc951282e29cacc4b5728c95748cecf2d284a2d2ee6020087a509cb"
+int(0)
+-- Compression level 7 --
+string(70) "78da735428ce4dccc951282e29cacc4b5728c95748cecf2d284a2d2ee6020087a509cb"
+int(0)
+-- Compression level 8 --
+string(70) "78da735428ce4dccc951282e29cacc4b5728c95748cecf2d284a2d2ee6020087a509cb"
+int(0)
+-- Compression level 9 --
+string(70) "78da735428ce4dccc951282e29cacc4b5728c95748cecf2d284a2d2ee6020087a509cb"
+int(0)
+
+-- Testing with no specified compression level --
+string(70) "789c735428ce4dccc951282e29cacc4b5728c95748cecf2d284a2d2ee6020087a509cb"
+===Done=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzcompress_error1.phpt b/ext/zlib/tests/gzcompress_error1.phpt
new file mode 100644
index 000000000..7fa60b900
--- /dev/null
+++ b/ext/zlib/tests/gzcompress_error1.phpt
@@ -0,0 +1,78 @@
+--TEST--
+Test gzcompress() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gzcompress(string data [, int level])
+ * Description: Gzip-compress a string
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+/*
+ * add a comment here to say what the test is supposed to do
+ */
+
+echo "*** Testing gzcompress() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing gzcompress() function with Zero arguments --\n";
+var_dump( gzcompress() );
+
+//Test gzcompress with one more than the expected number of arguments
+echo "\n-- Testing gzcompress() function with more than expected no. of arguments --\n";
+$data = 'string_val';
+$level = 2;
+$extra_arg = 10;
+var_dump( gzcompress($data, $level, $extra_arg) );
+
+echo "\n-- Testing with incorrect compression level --\n";
+$bad_level = 99;
+var_dump(gzcompress($data, $bad_level));
+
+class Tester {
+ function Hello() {
+ echo "Hello\n";
+ }
+}
+
+echo "\n-- Testing with incorrect parameters --\n";
+$testclass = new Tester();
+var_dump(gzcompress($testclass));
+
+var_dump(gzcompress($data, $testclass));
+
+
+?>
+===Done===
+--EXPECTF--
+*** Testing gzcompress() : error conditions ***
+
+-- Testing gzcompress() function with Zero arguments --
+
+Warning: gzcompress() expects at least 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing gzcompress() function with more than expected no. of arguments --
+
+Warning: gzcompress() expects at most 2 parameters, 3 given in %s on line %d
+NULL
+
+-- Testing with incorrect compression level --
+
+Warning: gzcompress(): compression level (99) must be within -1..9 in %s on line %d
+bool(false)
+
+-- Testing with incorrect parameters --
+
+Warning: gzcompress() expects parameter 1 to be string, object given in %s on line %d
+NULL
+
+Warning: gzcompress() expects parameter 2 to be long, object given in %s on line %d
+NULL
+===Done=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzcompress_variation1.phpt b/ext/zlib/tests/gzcompress_variation1.phpt
new file mode 100644
index 000000000..ef96e4945
--- /dev/null
+++ b/ext/zlib/tests/gzcompress_variation1.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test gzcompress() function : variation
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gzcompress(string data [, int level])
+ * Description: Gzip-compress a string
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+include(dirname(__FILE__) . '/data.inc');
+
+echo "*** Testing gzcompress() : variation ***\n";
+
+
+
+echo "\n-- Testing multiple compression --\n";
+$output = gzcompress($data);
+var_dump(md5($output));
+var_dump(md5(gzcompress($output)));
+
+?>
+===Done===
+--EXPECTF--
+*** Testing gzcompress() : variation ***
+
+-- Testing multiple compression --
+string(32) "764809aef15bb34cb73ad49ecb600d99"
+string(32) "eba942bc2061f23ea8688cc5101872a4"
+===Done=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzdeflate_basic1.phpt b/ext/zlib/tests/gzdeflate_basic1.phpt
new file mode 100644
index 000000000..823f32035
--- /dev/null
+++ b/ext/zlib/tests/gzdeflate_basic1.phpt
@@ -0,0 +1,125 @@
+--TEST--
+Test gzdeflate() function : basic functionality
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : proto string gzdeflate(string data [, int level])
+ * Description: Gzip-compress a string
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+/*
+ * add a comment here to say what the test is supposed to do
+ */
+
+include(dirname(__FILE__) . '/data.inc');
+
+echo "*** Testing gzdeflate() : basic functionality ***\n";
+
+// Initialise all required variables
+
+$smallstring = "A small string to compress\n";
+
+
+// Calling gzdeflate() with all possible arguments
+
+// Compressing a big string
+for($i = -1; $i < 10; $i++) {
+ echo "-- Compression level $i --\n";
+ $output = gzdeflate($data, $i);
+ var_dump(md5($output));
+ var_dump(strcmp(gzinflate($output), $data));
+}
+
+// Compressing a smaller string
+for($i = -1; $i < 10; $i++) {
+ echo "-- Compression level $i --\n";
+ $output = gzdeflate($smallstring, $i);
+ var_dump(bin2hex($output));
+ var_dump(strcmp(gzinflate($output), $smallstring));
+}
+
+// Calling gzdeflate() with just mandatory arguments
+echo "\n-- Testing with no specified compression level --\n";
+var_dump( bin2hex(gzdeflate($smallstring) ));
+
+?>
+===Done===
+--EXPECT--
+*** Testing gzdeflate() : basic functionality ***
+-- Compression level -1 --
+string(32) "078554fe65e06f6ff01eab51cfc7ae9b"
+int(0)
+-- Compression level 0 --
+string(32) "a71e54d2499aff9e48643cb1c260b60c"
+int(0)
+-- Compression level 1 --
+string(32) "05e80f4dc0d422e1f333cbed555d381f"
+int(0)
+-- Compression level 2 --
+string(32) "0fb33656e4ed0750f977df83246fce7a"
+int(0)
+-- Compression level 3 --
+string(32) "bc6e9c1dccc3e951e006315ee669ee08"
+int(0)
+-- Compression level 4 --
+string(32) "a61727d7a28c634470eb6e97a4a81b24"
+int(0)
+-- Compression level 5 --
+string(32) "a2a1a14b7542c82e8943200d093d5f27"
+int(0)
+-- Compression level 6 --
+string(32) "078554fe65e06f6ff01eab51cfc7ae9b"
+int(0)
+-- Compression level 7 --
+string(32) "078554fe65e06f6ff01eab51cfc7ae9b"
+int(0)
+-- Compression level 8 --
+string(32) "078554fe65e06f6ff01eab51cfc7ae9b"
+int(0)
+-- Compression level 9 --
+string(32) "078554fe65e06f6ff01eab51cfc7ae9b"
+int(0)
+-- Compression level -1 --
+string(58) "735428ce4dccc951282e29cacc4b5728c95748cecf2d284a2d2ee60200"
+int(0)
+-- Compression level 0 --
+string(64) "011b00e4ff4120736d616c6c20737472696e6720746f20636f6d70726573730a"
+int(0)
+-- Compression level 1 --
+string(58) "735428ce4dccc951282e29cacc4b5728c95748cecf2d284a2d2ee60200"
+int(0)
+-- Compression level 2 --
+string(58) "735428ce4dccc951282e29cacc4b5728c95748cecf2d284a2d2ee60200"
+int(0)
+-- Compression level 3 --
+string(58) "735428ce4dccc951282e29cacc4b5728c95748cecf2d284a2d2ee60200"
+int(0)
+-- Compression level 4 --
+string(58) "735428ce4dccc951282e29cacc4b5728c95748cecf2d284a2d2ee60200"
+int(0)
+-- Compression level 5 --
+string(58) "735428ce4dccc951282e29cacc4b5728c95748cecf2d284a2d2ee60200"
+int(0)
+-- Compression level 6 --
+string(58) "735428ce4dccc951282e29cacc4b5728c95748cecf2d284a2d2ee60200"
+int(0)
+-- Compression level 7 --
+string(58) "735428ce4dccc951282e29cacc4b5728c95748cecf2d284a2d2ee60200"
+int(0)
+-- Compression level 8 --
+string(58) "735428ce4dccc951282e29cacc4b5728c95748cecf2d284a2d2ee60200"
+int(0)
+-- Compression level 9 --
+string(58) "735428ce4dccc951282e29cacc4b5728c95748cecf2d284a2d2ee60200"
+int(0)
+
+-- Testing with no specified compression level --
+string(58) "735428ce4dccc951282e29cacc4b5728c95748cecf2d284a2d2ee60200"
+===Done===
diff --git a/ext/zlib/tests/gzdeflate_error1.phpt b/ext/zlib/tests/gzdeflate_error1.phpt
new file mode 100644
index 000000000..78491af9f
--- /dev/null
+++ b/ext/zlib/tests/gzdeflate_error1.phpt
@@ -0,0 +1,76 @@
+--TEST--
+Test gzdeflate() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gzdeflate(string data [, int level])
+ * Description: Gzip-compress a string
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+/*
+ * add a comment here to say what the test is supposed to do
+ */
+
+echo "*** Testing gzdeflate() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing gzdeflate() function with Zero arguments --\n";
+var_dump( gzdeflate() );
+
+//Test gzdeflate with one more than the expected number of arguments
+echo "\n-- Testing gzdeflate() function with more than expected no. of arguments --\n";
+$data = 'string_val';
+$level = 2;
+$extra_arg = 10;
+var_dump( gzdeflate($data, $level, $extra_arg) );
+
+echo "\n-- Testing with incorrect compression level --\n";
+$bad_level = 99;
+var_dump(gzdeflate($data, $bad_level));
+
+class Tester {
+ function Hello() {
+ echo "Hello\n";
+ }
+}
+
+echo "\n-- Testing with incorrect parameters --\n";
+$testclass = new Tester();
+var_dump(gzdeflate($testclass));
+var_dump(gzdeflate($data, $testclass));
+
+?>
+===Done===
+--EXPECTF--
+*** Testing gzdeflate() : error conditions ***
+
+-- Testing gzdeflate() function with Zero arguments --
+
+Warning: gzdeflate() expects at least 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing gzdeflate() function with more than expected no. of arguments --
+
+Warning: gzdeflate() expects at most 2 parameters, 3 given in %s on line %d
+NULL
+
+-- Testing with incorrect compression level --
+
+Warning: gzdeflate(): compression level (99) must be within -1..9 in %s on line %d
+bool(false)
+
+-- Testing with incorrect parameters --
+
+Warning: gzdeflate() expects parameter 1 to be string, object given in %s on line %d
+NULL
+
+Warning: gzdeflate() expects parameter 2 to be long, object given in %s on line %d
+NULL
+===Done=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzdeflate_variation1.phpt b/ext/zlib/tests/gzdeflate_variation1.phpt
new file mode 100644
index 000000000..75eb16e03
--- /dev/null
+++ b/ext/zlib/tests/gzdeflate_variation1.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test gzdeflate() function : variation
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gzdeflate(string data [, int level])
+ * Description: Gzip-compress a string
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+include(dirname(__FILE__) . '/data.inc');
+
+echo "*** Testing gzdeflate() : variation ***\n";
+
+
+
+echo "\n-- Testing multiple compression --\n";
+$output = gzdeflate($data);
+var_dump( md5($output));
+var_dump(md5(gzdeflate($output)));
+
+?>
+===Done===
+--EXPECT--
+*** Testing gzdeflate() : variation ***
+
+-- Testing multiple compression --
+string(32) "078554fe65e06f6ff01eab51cfc7ae9b"
+string(32) "86b9f895ef1377da5269ec3cb2729f71"
+===Done===
diff --git a/ext/zlib/tests/gzencode_basic1.phpt b/ext/zlib/tests/gzencode_basic1.phpt
new file mode 100644
index 000000000..9b3dcc8a3
--- /dev/null
+++ b/ext/zlib/tests/gzencode_basic1.phpt
@@ -0,0 +1,102 @@
+--TEST--
+Test gzencode() function : basic functionality
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gzencode ( string $data [, int $level [, int $encoding_mode ]] )
+ * Description: Gzip-compress a string
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+/*
+ * Test basic function of gzencode
+ */
+
+include(dirname(__FILE__) . '/data.inc');
+
+echo "*** Testing gzencode() : basic functionality ***\n";
+
+// Initialise all required variables
+
+$smallstring = "A small string to compress\n";
+
+
+// Calling gzencode() with various compression levels
+
+// Compressing a big string
+for($i = -1; $i < 10; $i++) {
+ echo "-- Compression level $i --\n";
+ $output = gzencode($data, $i);
+
+ // Clear OS byte before encode
+ $output[9] = "\x00";
+
+ var_dump(md5($output));
+}
+
+// Compressing a smaller string
+for($i = -1; $i < 10; $i++) {
+ echo "-- Compression level $i --\n";
+ $output = gzencode($smallstring, $i);
+
+ // Clear OS byte before encode
+ $output[9] = "\x00";
+
+ var_dump(md5($output));
+}
+
+?>
+===Done===
+--EXPECTF--
+*** Testing gzencode() : basic functionality ***
+-- Compression level -1 --
+string(32) "d9ede02415ce91d21e5a94274e2b9c42"
+-- Compression level 0 --
+string(32) "67aaf60426bb2cbd86d7fe530cb12306"
+-- Compression level 1 --
+string(32) "bce9c439cf767c1988ff4881b287d1ce"
+-- Compression level 2 --
+string(32) "7ddbfed63a76c42808722b66f1c133fc"
+-- Compression level 3 --
+string(32) "ca2b85d194dfa2a4e8a162b646c99265"
+-- Compression level 4 --
+string(32) "cfe28033eaf260bc33ddc04b53d3ba39"
+-- Compression level 5 --
+string(32) "ae357fada2b515422f8bea0aa3bcc48f"
+-- Compression level 6 --
+string(32) "d9ede02415ce91d21e5a94274e2b9c42"
+-- Compression level 7 --
+string(32) "d9ede02415ce91d21e5a94274e2b9c42"
+-- Compression level 8 --
+string(32) "d9ede02415ce91d21e5a94274e2b9c42"
+-- Compression level 9 --
+string(32) "d9ede02415ce91d21e5a94274e2b9c42"
+-- Compression level -1 --
+string(32) "f77bd31e1e4dd11d12828fb661a08010"
+-- Compression level 0 --
+string(32) "36220d650930849b67e8e0622f9bf270"
+-- Compression level 1 --
+string(32) "f77bd31e1e4dd11d12828fb661a08010"
+-- Compression level 2 --
+string(32) "f77bd31e1e4dd11d12828fb661a08010"
+-- Compression level 3 --
+string(32) "f77bd31e1e4dd11d12828fb661a08010"
+-- Compression level 4 --
+string(32) "f77bd31e1e4dd11d12828fb661a08010"
+-- Compression level 5 --
+string(32) "f77bd31e1e4dd11d12828fb661a08010"
+-- Compression level 6 --
+string(32) "f77bd31e1e4dd11d12828fb661a08010"
+-- Compression level 7 --
+string(32) "f77bd31e1e4dd11d12828fb661a08010"
+-- Compression level 8 --
+string(32) "f77bd31e1e4dd11d12828fb661a08010"
+-- Compression level 9 --
+string(32) "f77bd31e1e4dd11d12828fb661a08010"
+===Done=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzencode_error1.phpt b/ext/zlib/tests/gzencode_error1.phpt
new file mode 100644
index 000000000..ed8c97747
--- /dev/null
+++ b/ext/zlib/tests/gzencode_error1.phpt
@@ -0,0 +1,98 @@
+--TEST--
+Test gzencode() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gzencode ( string $data [, int $level [, int $encoding_mode ]] )
+ * Description: Gzip-compress a string
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+/*
+ * Test error cases for gzencode
+ */
+
+echo "*** Testing gzencode() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing gzencode() function with Zero arguments --\n";
+var_dump( gzencode() );
+
+//Test gzencode with one more than the expected number of arguments
+echo "\n-- Testing gzencode() function with more than expected no. of arguments --\n";
+$data = 'string_val';
+$level = 2;
+$encoding_mode = FORCE_DEFLATE;
+$extra_arg = 10;
+var_dump( gzencode($data, $level, $encoding_mode, $extra_arg) );
+
+echo "\n-- Testing with incorrect compression level --\n";
+$bad_level = 99;
+var_dump(gzencode($data, $bad_level));
+
+echo "\n-- Testing with incorrect encoding_mode --\n";
+$bad_mode = 99;
+var_dump(gzencode($data, $level, $bad_mode));
+
+class Tester {
+ function Hello() {
+ echo "Hello\n";
+ }
+}
+
+echo "\n-- Testing with incorrect parameters --\n";
+$testclass = new Tester();
+var_dump(gzencode($testclass));
+var_dump(gzencode($data, $testclass));
+var_dump(gzencode($data, -1, 99.99));
+var_dump(gzencode($data, -1, $testclass));
+var_dump(gzencode($data, "a very none numeric string\n"));
+
+?>
+===Done===
+--EXPECTF--
+*** Testing gzencode() : error conditions ***
+
+-- Testing gzencode() function with Zero arguments --
+
+Warning: gzencode() expects at least 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing gzencode() function with more than expected no. of arguments --
+
+Warning: gzencode() expects at most 3 parameters, 4 given in %s on line %d
+NULL
+
+-- Testing with incorrect compression level --
+
+Warning: gzencode(): compression level(99) must be within -1..9 in %s on line %d
+bool(false)
+
+-- Testing with incorrect encoding_mode --
+
+Warning: gzencode(): encoding mode must be FORCE_GZIP or FORCE_DEFLATE in %s on line %d
+bool(false)
+
+-- Testing with incorrect parameters --
+
+Warning: gzencode() expects parameter 1 to be string, object given in %s on line %d
+NULL
+
+Warning: gzencode() expects parameter 2 to be long, object given in %s on line %d
+NULL
+
+Warning: gzencode(): encoding mode must be FORCE_GZIP or FORCE_DEFLATE in %s on line %d
+bool(false)
+
+Warning: gzencode() expects parameter 3 to be long, object given in %s on line %d
+NULL
+
+Warning: gzencode() expects parameter 2 to be long, string given in %s on line %d
+NULL
+===Done=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzencode_variation1.phpt b/ext/zlib/tests/gzencode_variation1.phpt
new file mode 100644
index 000000000..47e2097f5
--- /dev/null
+++ b/ext/zlib/tests/gzencode_variation1.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test gzencode() function : variation
+--SKIPIF--
+<?php
+
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gzencode ( string $data [, int $level [, int $encoding_mode ]] )
+ * Description: Gzip-compress a string
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+include(dirname(__FILE__) . '/data.inc');
+
+echo "*** Testing gzencode() : variation ***\n";
+
+echo "\n-- Testing multiple compression --\n";
+$output = gzencode($data);
+var_dump(bin2hex(gzencode($output)));
+
+?>
+===Done===
+--EXPECT--
+*** Testing gzencode() : variation ***
+
+-- Testing multiple compression --
+string(3658) "1f8b0800000000000003010e07f1f81f8b08000000000000036d574d6fe4c80dbdeb57d4ad2f3dfe01eb83e1ec22980e309b4562c067b64449159754dafab0b6e7d7e73d96da1e4c72184c4b2ab2c8f7c847fa25baabba98dc1a8b2b7c38bb324b713ee37f757f56cdc5c7f5b17b9d152f923b157c5ae335e0b75fedd0e2d781c6b98ea3a6ee05affe1dfc3a6527f8f09c52dcb38ba38bb5249934d6ecfe1e53a9ab76ff4c342cf2a64ed2028349fc9a8b139755685352acb82b9fbb67f8bade5cdcb698e1fcec94b7ceba3cb897e806cfc8114350dd1ebbdfa35b62d2478b0056d23ed809b9b95d696d91ce2aa97c911e3fa539c43f84c887554a4d125c9e63ff96711cc08c0866263cb37a0bbe2122ae8f6baecb2284abfb4ddf916db8354cddeef37c1afe5fa02fc7afb3db34f5b3acbdf2eb905490d8f38d7468d253a323d5ebb903760d7944d3b2024e834a99ddce77669bdd823cfbb8e899d4ad4c799677452e6029e80023a03b2374005590641f7d3877df2ad09f3c0e82a54d6a5644fd63049a37ed4bc362016fd9f51264f1e5c630727421ae930b7ed416e93e47b7c71a400390361ffbecb7561bb98f69b5da289e91becc27f08b3b724cb8704f9144d366431d0cb870c56b205deaa2e17636063761a911039fb7e4bf9f06c4f0aecd2ec80e8b41831ca7515e31286166458ea3ef71f2ce7cde2ae269c96d60525724a9c9170b713ed5750758f3cd2a361fc8b288fc92358ce884692e8ea0fe59bd969a0da2eed5831b715749eaae7178f3ebd30fb88c92105f367cce2c882955dc6bf8eca0d5d57540b3092894743ba0fd5b2dad021836191f1afc0bba14dde1642cb0b1aa6879c38907dcefa0720082b801bec61417469219175267dfa047df35b0bd1332001c28cdfafd3bcabe91e74368cdd8d8478e494c190e7ee90c67f2bde288e68ab6b15e883c995be4f8feb6c6dda4278e4f38578ddbdc7be36788daf0c3cb1d1819c73822f7000a0d1813fa94153b572315e51343b536bc64977dff163cebfd8418773261f524017e251fccc60ae29a5770ae097594d52e9c1229d87ce967a36401c46b69945afb249d101c9d420ffa9a123e232c20e76467d5d169202a2dd4c582949e013e745df7958d4b0cc4fd4377a737cd4feea7974070000f314d423e0634cb9a618fdf5dc64fd422181fd59c9230c9f6f9d18dc8fc23e9cccbc7188733b04aa57de83ebea0be3633cff5fa1ff83269be7f44f5a8d84550cc703255fd345dd402034d0b3e11a73ec6e3d4a77f4f685b614329f1b3132ae7af33d02e1e55e291fa6574b758d1f0200e7423dbc852211818043a7c9ce80aa9d59fce0401959f5ea2cf71fde90824f8c9192dbe9d329db143794675ddcf257dd7755273b67340414e3ccad12e3f661f8aad9cf9957dc1275d10a51d3934fa81e68dc6768fb8ee23e373936c8e13feab8b0f50d227f7af76f561fb0950f3d099bbc316c3892a42fb36806d8660e800fa4f43fd4b962d2097d71933a54b77ff948677848eb17bb3a88b621682cfb3bbb49cf42fed6b3944124ad8358ca688aa44dd5f2144c7c9ab16f25b9aca9654ef357ec9ad55c40d324d6cc3d9e3920b863c231d31a95d937fb5520f9c816c79b7dcecc593fb9593cc05a51ebb1eeddd5b49eb437769738d0f64adc579d372b8b7f7c0208487ee3915ebf5766e148ebd77cf4e01f3ec285047011e55838968b6494d517fe29224777b24dd3ddf933101695b102e87db805eef291b74dcfd91628fb2a53f93dbd2968ef2e598746c9204f89fba1f0246fc671610a0591806e46a1346f77c40d910a47c5e20ffb23f003c04b648327a4ed98032c1965bd35bb0044f5344248f56fdb99aa61d6451d68e33489a83bffbe6573541b2da5f64681ea12090f778b2075374778810f73965fa3626a9d41f4df2f83f7c34658cec921b5a9bde49dd5007ec882b02adc514f81aa85898b5cc98e1b137733c0a8789b7f5648d2d231b80bf74978f25d61ce08a8abd11801fd8f995e066676307192ff7641f1cc6e0dee68565b8b22ac3889cd067bf732754a6b270af1044c6a8776811a4f6d8bd0477a9f516064201b920b92d7cd4dc7eee13e6b3eb3528a82f9abb3f388ebe6a8f871393461b73816ec54c99d604174bc5a6801de13908f86aea6a7d0fea107d682bcf1ec348b83872e6b8a316ecd02eb8f8dc86a609bf59a2dd03f1dfa4079436d55e24617be1a2854d008b2b2b1705e2078a7f3946318df1c24f6bf70d4b456eca286ec2b585b28262cc048a098c3e2d5f325a92bb36f691afdc14c822da1b116c9c1c07bb362eb0a04b78834c812134230ebf2044ac2e3c0e3ad00f848dc5010f3bf917ec2fc700b7bf26dacea8440620e04f90f4d97d6dd77cfde8a05c7d3930f1e5811fb8ec5c70964dcc8187ec90e32fdd6b64eec7586413b7d55bed65c4cce39a9b6c15e70e9da94e53fc904e6286f01f5b5562c94211befbc23507e01b2a3865e2f45b5d7b591f290087a5605b82495b4e393f31aa5b37211ec40241a746d903c5eebf117a4d3ddb0d00007b64cbc70e070000"
+===Done=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzencode_variation2.phpt b/ext/zlib/tests/gzencode_variation2.phpt
new file mode 100644
index 000000000..901cd53c1
--- /dev/null
+++ b/ext/zlib/tests/gzencode_variation2.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test gzencode() function : variation - verify header contents with all encoding modes
+--SKIPIF--
+<?php
+
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gzencode ( string $data [, int $level [, int $encoding_mode ]] )
+ * Description: Gzip-compress a string
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gzencode() : variation ***\n";
+
+$data = "A small string to encode\n";
+
+echo "\n-- Testing with each encoding_mode --\n";
+var_dump(bin2hex(gzencode($data, -1)));
+var_dump(bin2hex(gzencode($data, -1, FORCE_GZIP)));
+var_dump(bin2hex(gzencode($data, -1, FORCE_DEFLATE)));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gzencode() : variation ***
+
+-- Testing with each encoding_mode --
+string(90) "1f8b0800000000000003735428ce4dccc951282e29cacc4b5728c95748cd4bce4f49e50200d7739de519000000"
+string(90) "1f8b0800000000000003735428ce4dccc951282e29cacc4b5728c95748cd4bce4f49e50200d7739de519000000"
+string(86) "1f8b0800000000000003789c735428ce4dccc951282e29cacc4b5728c95748cd4bce4f49e50200735808cd"
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzeof_basic.phpt b/ext/zlib/tests/gzeof_basic.phpt
new file mode 100644
index 000000000..f5d2617a9
--- /dev/null
+++ b/ext/zlib/tests/gzeof_basic.phpt
@@ -0,0 +1,58 @@
+--TEST--
+Test function feof() by calling it with its expected arguments
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+// note that gzeof is an alias to gzeof. parameter checking tests will be
+// the same as gzeof
+
+$f = dirname(__FILE__)."/004.txt.gz";
+
+echo "-- test 1 --\n";
+$h = gzopen($f, 'r');
+var_dump(gzeof($h));
+gzpassthru($h);
+var_dump(gzeof($h));
+gzclose($h);
+
+echo "\n-- test 2 --\n";
+$h = gzopen($f, 'r');
+echo "reading 50 characters. eof should be false\n";
+gzread($h, 50)."\n";
+var_dump(gzeof($h));
+echo "reading 250 characters. eof should be true\n";
+gzread($h, 250)."\n";
+var_dump(gzeof($h));
+echo "reading 20 characters. eof should be true still\n";
+gzread($h, 20)."\n";
+var_dump(gzeof($h));
+gzclose($h);
+
+
+
+?>
+===DONE===
+--EXPECT--
+-- test 1 --
+bool(false)
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+bool(true)
+
+-- test 2 --
+reading 50 characters. eof should be false
+bool(false)
+reading 250 characters. eof should be true
+bool(true)
+reading 20 characters. eof should be true still
+bool(true)
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzeof_error.phpt b/ext/zlib/tests/gzeof_error.phpt
new file mode 100644
index 000000000..68f53a7c2
--- /dev/null
+++ b/ext/zlib/tests/gzeof_error.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Test function gzeof() by calling it more than or less than its expected arguments
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f, 'r');
+$extra_arg = 'nothing';
+var_dump(gzeof( $h, $extra_arg ) );
+var_dump(gzeof() );
+gzclose($h)
+
+?>
+===DONE===
+--EXPECTF--
+
+Warning: Wrong parameter count for gzeof() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for gzeof() in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzeof_variation1.phpt b/ext/zlib/tests/gzeof_variation1.phpt
new file mode 100644
index 000000000..6d1e0401d
--- /dev/null
+++ b/ext/zlib/tests/gzeof_variation1.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Test function gzeof while writing.
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+
+$filename = dirname(__FILE__)."/temp.txt.gz";
+$h = gzopen($filename, 'w');
+$str = "Here is the string to be written. ";
+$length = 10;
+gzwrite( $h, $str );
+var_dump(gzeof($h));
+gzwrite( $h, $str, $length);
+var_dump(gzeof($h));
+gzclose($h);
+var_dump(gzeof($h));
+unlink($filename);
+?>
+===DONE===
+--EXPECTF--
+bool(false)
+bool(false)
+
+Warning: gzeof(): %d is not a valid stream resource in %s on line %d
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzfile_basic.phpt b/ext/zlib/tests/gzfile_basic.phpt
new file mode 100644
index 000000000..1fceea5b9
--- /dev/null
+++ b/ext/zlib/tests/gzfile_basic.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test function gzfile() reading a gzip relative file
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+$plaintxt = b<<<EOT
+hello world
+is a very common test
+for all languages
+EOT;
+$dirname = 'gzfile_temp';
+$filename = $dirname.'/plainfile.txt.gz';
+mkdir($dirname);
+$h = gzopen($filename, 'w');
+gzwrite($h, $plaintxt);
+gzclose($h);
+
+
+var_dump(gzfile( $filename ) );
+
+unlink($filename);
+rmdir($dirname);
+?>
+===DONE===
+--EXPECT--
+array(3) {
+ [0]=>
+ string(12) "hello world
+"
+ [1]=>
+ string(22) "is a very common test
+"
+ [2]=>
+ string(17) "for all languages"
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzfile_basic2.phpt b/ext/zlib/tests/gzfile_basic2.phpt
new file mode 100644
index 000000000..9f31eb0f8
--- /dev/null
+++ b/ext/zlib/tests/gzfile_basic2.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test function gzfile() reading a plain relative file
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+$plaintxt = b<<<EOT
+hello world
+is a very common test
+for all languages
+EOT;
+$dirname = 'gzfile_temp';
+$filename = $dirname.'/plainfile.txt';
+mkdir($dirname);
+$h = fopen($filename, 'w');
+fwrite($h, $plaintxt);
+fclose($h);
+
+
+var_dump(gzfile( $filename ) );
+
+unlink($filename);
+rmdir($dirname);
+?>
+===DONE===
+--EXPECT--
+array(3) {
+ [0]=>
+ string(12) "hello world
+"
+ [1]=>
+ string(22) "is a very common test
+"
+ [2]=>
+ string(17) "for all languages"
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzfile_error.phpt b/ext/zlib/tests/gzfile_error.phpt
new file mode 100644
index 000000000..6089f3ebf
--- /dev/null
+++ b/ext/zlib/tests/gzfile_error.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Test function gzfile() by calling it more than or less than its expected arguments
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$filename = dirname(__FILE__)."/004.txt.gz";
+$use_include_path = false;
+$extra_arg = 'nothing';
+
+var_dump(gzfile( $filename, $use_include_path, $extra_arg ) );
+
+var_dump(gzfile( ) );
+
+
+?>
+===DONE===
+--EXPECTF--
+
+Warning: gzfile() expects at most 2 parameters, 3 given in %s on line %d
+NULL
+
+Warning: gzfile() expects at least 1 parameter, 0 given in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzfile_variation1.phpt b/ext/zlib/tests/gzfile_variation1.phpt
new file mode 100644
index 000000000..b573030f9
--- /dev/null
+++ b/ext/zlib/tests/gzfile_variation1.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test function gzfile() by substituting agument 1 with array values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$use_include_path = false;
+
+
+$index_array = array(1, 2, 3);
+$assoc_array = array(1 => 'one', 2 => 'two');
+
+$variation = array(
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(gzfile( $var , $use_include_path ) );
+}
+?>
+===DONE===
+--EXPECTF--
+
+Warning: gzfile() expects parameter 1 to be string, array given in %s on line %d
+NULL
+
+Warning: gzfile() expects parameter 1 to be string, array given in %s on line %d
+NULL
+
+Warning: gzfile() expects parameter 1 to be string, array given in %s on line %d
+NULL
+
+Warning: gzfile() expects parameter 1 to be string, array given in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzfile_variation10.phpt b/ext/zlib/tests/gzfile_variation10.phpt
new file mode 100644
index 000000000..2a6d8915d
--- /dev/null
+++ b/ext/zlib/tests/gzfile_variation10.phpt
@@ -0,0 +1,119 @@
+--TEST--
+Test function gzfile() by substituting agument 2 with emptyUnsetUndefNull values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$filename = dirname(__FILE__)."/004.txt.gz";
+
+
+$unset_var = 10;
+unset($unset_var);
+
+$variation = array(
+ 'unset var' => @$unset_var,
+ 'undefined var' => @$undefined_var,
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(gzfile( $filename, $var ) );
+}
+?>
+===DONE===
+--EXPECTF--
+array(6) {
+ [0]=>
+ string(36) "When you're taught through feelings
+"
+ [1]=>
+ string(26) "Destiny flying high above
+"
+ [2]=>
+ string(38) "all I know is that you can realize it
+"
+ [3]=>
+ string(18) "Destiny who cares
+"
+ [4]=>
+ string(19) "as it turns around
+"
+ [5]=>
+ string(39) "and I know that it descends down on me
+"
+}
+array(6) {
+ [0]=>
+ string(36) "When you're taught through feelings
+"
+ [1]=>
+ string(26) "Destiny flying high above
+"
+ [2]=>
+ string(38) "all I know is that you can realize it
+"
+ [3]=>
+ string(18) "Destiny who cares
+"
+ [4]=>
+ string(19) "as it turns around
+"
+ [5]=>
+ string(39) "and I know that it descends down on me
+"
+}
+
+Warning: gzfile() expects parameter 2 to be long, string given in %s on line %d
+NULL
+
+Warning: gzfile() expects parameter 2 to be long, string given in %s on line %d
+NULL
+array(6) {
+ [0]=>
+ string(36) "When you're taught through feelings
+"
+ [1]=>
+ string(26) "Destiny flying high above
+"
+ [2]=>
+ string(38) "all I know is that you can realize it
+"
+ [3]=>
+ string(18) "Destiny who cares
+"
+ [4]=>
+ string(19) "as it turns around
+"
+ [5]=>
+ string(39) "and I know that it descends down on me
+"
+}
+array(6) {
+ [0]=>
+ string(36) "When you're taught through feelings
+"
+ [1]=>
+ string(26) "Destiny flying high above
+"
+ [2]=>
+ string(38) "all I know is that you can realize it
+"
+ [3]=>
+ string(18) "Destiny who cares
+"
+ [4]=>
+ string(19) "as it turns around
+"
+ [5]=>
+ string(39) "and I know that it descends down on me
+"
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzfile_variation11.phpt b/ext/zlib/tests/gzfile_variation11.phpt
new file mode 100644
index 000000000..02faa4501
--- /dev/null
+++ b/ext/zlib/tests/gzfile_variation11.phpt
@@ -0,0 +1,129 @@
+--TEST--
+Test function gzfile() by substituting agument 2 with float values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$filename = dirname(__FILE__)."/004.txt.gz";
+
+
+$variation = array(
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(gzfile( $filename, $var ) );
+}
+?>
+===DONE===
+--EXPECT--
+array(6) {
+ [0]=>
+ string(36) "When you're taught through feelings
+"
+ [1]=>
+ string(26) "Destiny flying high above
+"
+ [2]=>
+ string(38) "all I know is that you can realize it
+"
+ [3]=>
+ string(18) "Destiny who cares
+"
+ [4]=>
+ string(19) "as it turns around
+"
+ [5]=>
+ string(39) "and I know that it descends down on me
+"
+}
+array(6) {
+ [0]=>
+ string(36) "When you're taught through feelings
+"
+ [1]=>
+ string(26) "Destiny flying high above
+"
+ [2]=>
+ string(38) "all I know is that you can realize it
+"
+ [3]=>
+ string(18) "Destiny who cares
+"
+ [4]=>
+ string(19) "as it turns around
+"
+ [5]=>
+ string(39) "and I know that it descends down on me
+"
+}
+array(6) {
+ [0]=>
+ string(36) "When you're taught through feelings
+"
+ [1]=>
+ string(26) "Destiny flying high above
+"
+ [2]=>
+ string(38) "all I know is that you can realize it
+"
+ [3]=>
+ string(18) "Destiny who cares
+"
+ [4]=>
+ string(19) "as it turns around
+"
+ [5]=>
+ string(39) "and I know that it descends down on me
+"
+}
+array(6) {
+ [0]=>
+ string(36) "When you're taught through feelings
+"
+ [1]=>
+ string(26) "Destiny flying high above
+"
+ [2]=>
+ string(38) "all I know is that you can realize it
+"
+ [3]=>
+ string(18) "Destiny who cares
+"
+ [4]=>
+ string(19) "as it turns around
+"
+ [5]=>
+ string(39) "and I know that it descends down on me
+"
+}
+array(6) {
+ [0]=>
+ string(36) "When you're taught through feelings
+"
+ [1]=>
+ string(26) "Destiny flying high above
+"
+ [2]=>
+ string(38) "all I know is that you can realize it
+"
+ [3]=>
+ string(18) "Destiny who cares
+"
+ [4]=>
+ string(19) "as it turns around
+"
+ [5]=>
+ string(39) "and I know that it descends down on me
+"
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzfile_variation12.phpt b/ext/zlib/tests/gzfile_variation12.phpt
new file mode 100644
index 000000000..a8efc7616
--- /dev/null
+++ b/ext/zlib/tests/gzfile_variation12.phpt
@@ -0,0 +1,108 @@
+--TEST--
+Test function gzfile() by substituting agument 2 with int values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$filename = dirname(__FILE__)."/004.txt.gz";
+
+
+$variation = array (
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(gzfile( $filename, $var ) );
+}
+?>
+===DONE===
+--EXPECT--
+array(6) {
+ [0]=>
+ string(36) "When you're taught through feelings
+"
+ [1]=>
+ string(26) "Destiny flying high above
+"
+ [2]=>
+ string(38) "all I know is that you can realize it
+"
+ [3]=>
+ string(18) "Destiny who cares
+"
+ [4]=>
+ string(19) "as it turns around
+"
+ [5]=>
+ string(39) "and I know that it descends down on me
+"
+}
+array(6) {
+ [0]=>
+ string(36) "When you're taught through feelings
+"
+ [1]=>
+ string(26) "Destiny flying high above
+"
+ [2]=>
+ string(38) "all I know is that you can realize it
+"
+ [3]=>
+ string(18) "Destiny who cares
+"
+ [4]=>
+ string(19) "as it turns around
+"
+ [5]=>
+ string(39) "and I know that it descends down on me
+"
+}
+array(6) {
+ [0]=>
+ string(36) "When you're taught through feelings
+"
+ [1]=>
+ string(26) "Destiny flying high above
+"
+ [2]=>
+ string(38) "all I know is that you can realize it
+"
+ [3]=>
+ string(18) "Destiny who cares
+"
+ [4]=>
+ string(19) "as it turns around
+"
+ [5]=>
+ string(39) "and I know that it descends down on me
+"
+}
+array(6) {
+ [0]=>
+ string(36) "When you're taught through feelings
+"
+ [1]=>
+ string(26) "Destiny flying high above
+"
+ [2]=>
+ string(38) "all I know is that you can realize it
+"
+ [3]=>
+ string(18) "Destiny who cares
+"
+ [4]=>
+ string(19) "as it turns around
+"
+ [5]=>
+ string(39) "and I know that it descends down on me
+"
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzfile_variation13.phpt b/ext/zlib/tests/gzfile_variation13.phpt
new file mode 100644
index 000000000..8014d7d9d
--- /dev/null
+++ b/ext/zlib/tests/gzfile_variation13.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test function gzfile() by substituting agument 2 with object values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$filename = $filename = dirname(__FILE__)."/004.txt.gz";
+
+
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+
+
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+$variation = array(
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(gzfile( $filename, $var ) );
+}
+?>
+===DONE===
+--EXPECTF--
+Error: 2 - gzfile() expects parameter 2 to be long, object given, %s(%d)
+NULL
+Error: 2 - gzfile() expects parameter 2 to be long, object given, %s(%d)
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzfile_variation14.phpt b/ext/zlib/tests/gzfile_variation14.phpt
new file mode 100644
index 000000000..8eb183c1c
--- /dev/null
+++ b/ext/zlib/tests/gzfile_variation14.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test function gzfile() by substituting agument 2 with string values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$filename = $filename = dirname(__FILE__)."/004.txt.gz";
+
+
+$heredoc = <<<EOT
+hello world
+EOT;
+
+$variation_array = array(
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc
+ );
+
+
+foreach ( $variation_array as $var ) {
+ var_dump(gzfile( $filename, $var ) );
+}
+?>
+===DONE===
+--EXPECTF--
+
+Warning: gzfile() expects parameter 2 to be long, string given in %s on line %d
+NULL
+
+Warning: gzfile() expects parameter 2 to be long, string given in %s on line %d
+NULL
+
+Warning: gzfile() expects parameter 2 to be long, string given in %s on line %d
+NULL
+
+Warning: gzfile() expects parameter 2 to be long, string given in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzfile_variation15.phpt b/ext/zlib/tests/gzfile_variation15.phpt
new file mode 100644
index 000000000..2a21a36d5
--- /dev/null
+++ b/ext/zlib/tests/gzfile_variation15.phpt
@@ -0,0 +1,108 @@
+--TEST--
+Test gzfile() function : variation: use include path (relative directories in path)
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+require_once('reading_include_path.inc');
+
+//define the files to go into these directories, create one in dir2
+set_include_path($newIncludePath);
+test_gzfile();
+restore_include_path();
+
+// remove the directory structure
+chdir($baseDir);
+rmdir($workingDir);
+foreach($newdirs as $newdir) {
+ rmdir($newdir);
+}
+
+chdir("..");
+rmdir($thisTestDir);
+
+function test_gzfile() {
+ global $scriptFile, $secondFile, $firstFile, $filename;
+
+ // create a file in the middle directory
+ $h = gzopen($secondFile, "w");
+ gzwrite($h, "This is a file in dir2");
+ gzclose($h);
+
+ // should read dir2 file
+ var_dump(gzfile($filename, true));
+ echo "\n";
+
+ //create a file in dir1
+ $h = gzopen($firstFile, "w");
+ gzwrite($h, "This is a file in dir1");
+ gzclose($h);
+
+ //should now read dir1 file
+ var_dump(gzfile($filename, true));
+ echo "\n";
+
+ // create a file in working directory
+ $h = gzopen($filename, "w");
+ gzwrite($h, "This is a file in working dir");
+ gzclose($h);
+
+ //should still read dir1 file
+ var_dump(gzfile($filename, true));
+ echo "\n";
+
+ unlink($firstFile);
+ unlink($secondFile);
+
+ //should fail to read the file
+ var_dump(gzfile($filename, true));
+ echo "\n";
+
+ // create a file in the script directory
+ $h = gzopen($scriptFile, "w");
+ gzwrite($h, "This is a file in script dir");
+ gzclose($h);
+
+ //should read the file in script dir
+ var_dump(gzfile($filename, true));
+ echo "\n";
+
+ //cleanup
+ unlink($filename);
+ unlink($scriptFile);
+
+}
+
+?>
+===DONE===
+--EXPECTF--
+array(1) {
+ [0]=>
+ string(22) "This is a file in dir2"
+}
+
+array(1) {
+ [0]=>
+ string(22) "This is a file in dir1"
+}
+
+array(1) {
+ [0]=>
+ string(22) "This is a file in dir1"
+}
+
+
+Warning: gzfile(afile.txt.gz): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+array(1) {
+ [0]=>
+ string(28) "This is a file in script dir"
+}
+
+===DONE===
+
diff --git a/ext/zlib/tests/gzfile_variation2.phpt b/ext/zlib/tests/gzfile_variation2.phpt
new file mode 100644
index 000000000..2f75c7f81
--- /dev/null
+++ b/ext/zlib/tests/gzfile_variation2.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Test function gzfile() by substituting agument 1 with boolean values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$use_include_path =
+
+
+$variation = array(
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(gzfile( $var , $use_include_path ) );
+}
+?>
+===DONE===
+--EXPECTF--
+
+Warning: gzfile() expects parameter 2 to be long, array given in %s on line %d
+NULL
+
+Warning: gzfile() expects parameter 2 to be long, array given in %s on line %d
+NULL
+
+Warning: gzfile() expects parameter 2 to be long, array given in %s on line %d
+NULL
+
+Warning: gzfile() expects parameter 2 to be long, array given in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzfile_variation3.phpt b/ext/zlib/tests/gzfile_variation3.phpt
new file mode 100644
index 000000000..8a6f2cec2
--- /dev/null
+++ b/ext/zlib/tests/gzfile_variation3.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test function gzfile() by substituting agument 1 with emptyUnsetUndefNull values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$use_include_path = false;
+
+
+$unset_var = 10;
+unset($unset_var);
+
+$variation = array(
+ 'unset var' => @$unset_var,
+ 'undefined var' => @$undefined_var,
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(gzfile( $var , $use_include_path ) );
+}
+?>
+===DONE===
+--EXPECTF--
+Warning: gzfile(): Filename cannot be empty in %s on line %d
+bool(false)
+
+Warning: gzfile(): Filename cannot be empty in %s on line %d
+bool(false)
+
+Warning: gzfile(): Filename cannot be empty in %s on line %d
+bool(false)
+
+Warning: gzfile(): Filename cannot be empty in %s on line %d
+bool(false)
+
+Warning: gzfile(): Filename cannot be empty in %s on line %d
+bool(false)
+
+Warning: gzfile(): Filename cannot be empty in %s on line %d
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzfile_variation4.phpt b/ext/zlib/tests/gzfile_variation4.phpt
new file mode 100644
index 000000000..b3c8ac483
--- /dev/null
+++ b/ext/zlib/tests/gzfile_variation4.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test function gzfile() by substituting agument 1 with float values.
+--SKIPIF--
+<?php
+if (!extension_loaded(zlib)) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$use_include_path = false;
+
+
+$variation = array(
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(gzfile( $var , $use_include_path ) );
+}
+?>
+===DONE===
+--EXPECTF--
+Warning: gzfile(10.5): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+Warning: gzfile(-10.5): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+Warning: gzfile(123456789000): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+Warning: gzfile(-123456789000): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+Warning: gzfile(0.5): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/zlib/tests/gzfile_variation5.phpt b/ext/zlib/tests/gzfile_variation5.phpt
new file mode 100644
index 000000000..5e210b653
--- /dev/null
+++ b/ext/zlib/tests/gzfile_variation5.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test function gzfile() by substituting agument 1 with int values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$use_include_path = false;
+
+
+$variation = array (
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(gzfile( $var , $use_include_path ) );
+}
+?>
+===DONE===
+--EXPECTF--
+Warning: gzfile(0): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+Warning: gzfile(1): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+Warning: gzfile(12345): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+Warning: gzfile(-2345): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzfile_variation6.phpt b/ext/zlib/tests/gzfile_variation6.phpt
new file mode 100644
index 000000000..174524b3d
--- /dev/null
+++ b/ext/zlib/tests/gzfile_variation6.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Test function gzfile() by substituting agument 1 with object values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$use_include_path = false;
+
+
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+
+
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+$variation = array(
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(gzfile( $var , $use_include_path ) );
+}
+?>
+--EXPECTF--
+Error: 2 - gzfile(Class A object): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+Error: 2 - gzfile() expects parameter 1 to be string, object given, %s(%d)
+NULL \ No newline at end of file
diff --git a/ext/zlib/tests/gzfile_variation7.phpt b/ext/zlib/tests/gzfile_variation7.phpt
new file mode 100644
index 000000000..b441dd670
--- /dev/null
+++ b/ext/zlib/tests/gzfile_variation7.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test function gzfile() by substituting agument 1 with string values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$use_include_path = false;
+
+
+$heredoc = <<<EOT
+hello world
+EOT;
+
+$variation_array = array(
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc
+ );
+
+
+foreach ( $variation_array as $var ) {
+ var_dump(gzfile( $var , $use_include_path ) );
+}
+?>
+===DONE===
+--EXPECTF--
+
+Warning: gzfile(string): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+Warning: gzfile(string): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+Warning: gzfile(sTrInG): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+
+Warning: gzfile(hello world): failed to open stream: No such file or directory in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/zlib/tests/gzfile_variation8.phpt b/ext/zlib/tests/gzfile_variation8.phpt
new file mode 100644
index 000000000..32d969326
--- /dev/null
+++ b/ext/zlib/tests/gzfile_variation8.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test function gzfile() by substituting agument 2 with array values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$filename = dirname(__FILE__)."/004.txt.gz";
+
+
+$index_array = array(1, 2, 3);
+$assoc_array = array(1 => 'one', 2 => 'two');
+
+$variation = array(
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(gzfile( $filename, $var ) );
+}
+?>
+===DONE===
+--EXPECTF--
+
+Warning: gzfile() expects parameter 2 to be long, array given in %s on line %d
+NULL
+
+Warning: gzfile() expects parameter 2 to be long, array given in %s on line %d
+NULL
+
+Warning: gzfile() expects parameter 2 to be long, array given in %s on line %d
+NULL
+
+Warning: gzfile() expects parameter 2 to be long, array given in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzfile_variation9.phpt b/ext/zlib/tests/gzfile_variation9.phpt
new file mode 100644
index 000000000..c2c24ae26
--- /dev/null
+++ b/ext/zlib/tests/gzfile_variation9.phpt
@@ -0,0 +1,107 @@
+--TEST--
+Test function gzfile() by substituting agument 2 with boolean values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$filename = dirname(__FILE__)."/004.txt.gz";
+
+$variation = array(
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(gzfile( $filename, $var ) );
+}
+?>
+===DONE===
+--EXPECT--
+array(6) {
+ [0]=>
+ string(36) "When you're taught through feelings
+"
+ [1]=>
+ string(26) "Destiny flying high above
+"
+ [2]=>
+ string(38) "all I know is that you can realize it
+"
+ [3]=>
+ string(18) "Destiny who cares
+"
+ [4]=>
+ string(19) "as it turns around
+"
+ [5]=>
+ string(39) "and I know that it descends down on me
+"
+}
+array(6) {
+ [0]=>
+ string(36) "When you're taught through feelings
+"
+ [1]=>
+ string(26) "Destiny flying high above
+"
+ [2]=>
+ string(38) "all I know is that you can realize it
+"
+ [3]=>
+ string(18) "Destiny who cares
+"
+ [4]=>
+ string(19) "as it turns around
+"
+ [5]=>
+ string(39) "and I know that it descends down on me
+"
+}
+array(6) {
+ [0]=>
+ string(36) "When you're taught through feelings
+"
+ [1]=>
+ string(26) "Destiny flying high above
+"
+ [2]=>
+ string(38) "all I know is that you can realize it
+"
+ [3]=>
+ string(18) "Destiny who cares
+"
+ [4]=>
+ string(19) "as it turns around
+"
+ [5]=>
+ string(39) "and I know that it descends down on me
+"
+}
+array(6) {
+ [0]=>
+ string(36) "When you're taught through feelings
+"
+ [1]=>
+ string(26) "Destiny flying high above
+"
+ [2]=>
+ string(38) "all I know is that you can realize it
+"
+ [3]=>
+ string(18) "Destiny who cares
+"
+ [4]=>
+ string(19) "as it turns around
+"
+ [5]=>
+ string(39) "and I know that it descends down on me
+"
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzgetc_basic.phpt b/ext/zlib/tests/gzgetc_basic.phpt
new file mode 100644
index 000000000..ca2e38c0e
--- /dev/null
+++ b/ext/zlib/tests/gzgetc_basic.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Test function gzgetc() by calling it with its expected arguments
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+
+// note that gzgets is an alias to fgets. parameter checking tests will be
+// the same as gzgets
+
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f, 'r');
+
+$count = 0;
+while (gzeof($h) === false) {
+ $count++;
+ echo fgetc( $h );
+}
+
+echo "\ncharacters counted=$count\n";
+gzclose($h);
+
+?>
+===DONE===
+--EXPECT--
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+
+characters counted=176
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzgetc_error.phpt b/ext/zlib/tests/gzgetc_error.phpt
new file mode 100644
index 000000000..14e6528a3
--- /dev/null
+++ b/ext/zlib/tests/gzgetc_error.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Test function gzgetc() by calling it more than or less than its expected arguments
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f, 'r');
+$extra_arg = 'nothing';
+var_dump(gzgetc( $h, $extra_arg ) );
+
+var_dump(gzgetc() );
+
+gzclose($h);
+?>
+===DONE===
+--EXPECTF--
+
+Warning: Wrong parameter count for gzgetc() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for gzgetc() in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzgets_basic.phpt b/ext/zlib/tests/gzgets_basic.phpt
new file mode 100644
index 000000000..3ebc75900
--- /dev/null
+++ b/ext/zlib/tests/gzgets_basic.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test function gzgets() by calling it with its expected arguments
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+
+// note that gzgets is an alias to fgets. parameter checking tests will be
+// the same as fgets
+
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f, 'r');
+$lengths = array(10, 14, 7, 99);
+foreach ($lengths as $length) {
+ var_dump(gzgets( $h, $length ) );
+}
+
+while (gzeof($h) === false) {
+ var_dump(gzgets($h));
+}
+gzclose($h);
+
+
+?>
+===DONE===
+--EXPECT--
+string(9) "When you'"
+string(13) "re taught thr"
+string(6) "ough f"
+string(8) "eelings
+"
+string(26) "Destiny flying high above
+"
+string(38) "all I know is that you can realize it
+"
+string(18) "Destiny who cares
+"
+string(19) "as it turns around
+"
+string(39) "and I know that it descends down on me
+"
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzgets_error.phpt b/ext/zlib/tests/gzgets_error.phpt
new file mode 100644
index 000000000..88099ff51
--- /dev/null
+++ b/ext/zlib/tests/gzgets_error.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Test function gzgets() by calling it more than or less than its expected arguments
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f, 'r');
+$length = 10;
+$extra_arg = 'nothing';
+var_dump(gzgets( $h, $length, $extra_arg ) );
+
+var_dump(gzgets());
+
+
+?>
+===DONE===
+--EXPECTF--
+
+Warning: Wrong parameter count for gzgets() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for gzgets() in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzinflate_error1.phpt b/ext/zlib/tests/gzinflate_error1.phpt
new file mode 100644
index 000000000..6dc811364
--- /dev/null
+++ b/ext/zlib/tests/gzinflate_error1.phpt
@@ -0,0 +1,75 @@
+--TEST--
+Test gzinflate() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gzinflate(string data [, int length])
+ * Description: Unzip a gzip-compressed string
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+include(dirname(__FILE__) . '/data.inc');
+
+echo "*** Testing gzinflate() : error conditions ***\n";
+
+echo "\n-- Testing gzcompress() function with Zero arguments --\n";
+var_dump( gzinflate() );
+
+echo "\n-- Testing gzcompress() function with more than expected no. of arguments --\n";
+$data = 'string_val';
+$length = 10;
+$extra_arg = 10;
+var_dump( gzinflate($data, $length, $extra_arg) );
+
+echo "\n-- Testing with a buffer that is too small --\n";
+$short_len = strlen($data) - 1;
+$compressed = gzcompress($data);
+
+var_dump(gzinflate($compressed, $short_len));
+
+echo "\n-- Testing with incorrect parameters --\n";
+
+class Tester {
+ function Hello() {
+ echo "Hello\n";
+ }
+}
+
+$testclass = new Tester();
+var_dump(gzinflate($testclass));
+var_dump(gzinflate($data, $testclass));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gzinflate() : error conditions ***
+
+-- Testing gzcompress() function with Zero arguments --
+
+Warning: gzinflate() expects at least 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing gzcompress() function with more than expected no. of arguments --
+
+Warning: gzinflate() expects at most 2 parameters, 3 given in %s on line %d
+NULL
+
+-- Testing with a buffer that is too small --
+
+Warning: gzinflate(): data error in %s on line %d
+bool(false)
+
+-- Testing with incorrect parameters --
+
+Warning: gzinflate() expects parameter 1 to be string, object given in %s on line %d
+NULL
+
+Warning: gzinflate() expects parameter 2 to be long, object given in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzopen_basic.phpt b/ext/zlib/tests/gzopen_basic.phpt
new file mode 100644
index 000000000..e3697731d
--- /dev/null
+++ b/ext/zlib/tests/gzopen_basic.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test gzopen() function : basic functionality
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : resource gzopen(string filename, string mode [, int use_include_path])
+ * Description: Open a .gz-file and return a .gz-file pointer
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gzopen() : basic functionality ***\n";
+
+
+// Initialise all required variables
+$filename = dirname(__FILE__)."/004.txt.gz";
+$mode = 'r';
+$use_include_path = false;
+
+// Calling gzopen() with all possible arguments
+$h = gzopen($filename, $mode, $use_include_path);
+gzpassthru($h);
+gzclose($h);
+
+// Calling gzopen() with mandatory arguments
+$h = gzopen($filename, $mode);
+gzpassthru($h);
+gzclose($h);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gzopen() : basic functionality ***
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+===DONE===
diff --git a/ext/zlib/tests/gzopen_basic2.phpt b/ext/zlib/tests/gzopen_basic2.phpt
new file mode 100644
index 000000000..5cc02cd18
--- /dev/null
+++ b/ext/zlib/tests/gzopen_basic2.phpt
@@ -0,0 +1,52 @@
+--TEST--
+Test gzopen() function : basic functionality for writing
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : resource gzopen(string filename, string mode [, int use_include_path])
+ * Description: Open a .gz-file and return a .gz-file pointer
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gzopen() : basic functionality ***\n";
+
+
+// Initialise all required variables
+$filename = "temp.txt.gz";
+$modes = array('w', 'w+');
+$data = "This was the information that was written";
+
+foreach($modes as $mode) {
+ echo "testing mode -- $mode --\n";
+ $h = gzopen($filename, $mode);
+ if ($h !== false) {
+ gzwrite($h, $data);
+ gzclose($h);
+ $h = gzopen($filename, 'r');
+ gzpassthru($h);
+ gzclose($h);
+ echo "\n";
+ unlink($filename);
+ }
+ else {
+ var_dump($h);
+ }
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gzopen() : basic functionality ***
+testing mode -- w --
+This was the information that was written
+testing mode -- w+ --
+
+Warning: gzopen(): cannot open a zlib stream for reading and writing at the same time! in %s on line %d
+bool(false)
+===DONE===
diff --git a/ext/zlib/tests/gzopen_error.phpt b/ext/zlib/tests/gzopen_error.phpt
new file mode 100644
index 000000000..a71791fb2
--- /dev/null
+++ b/ext/zlib/tests/gzopen_error.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test gzopen() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : resource gzopen(string filename, string mode [, int use_include_path])
+ * Description: Open a .gz-file and return a .gz-file pointer
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gzopen() : error conditions ***\n";
+
+
+//Test gzopen with one more than the expected number of arguments
+echo "\n-- Testing gzopen() function with more than expected no. of arguments --\n";
+$filename = 'string_val';
+$mode = 'string_val';
+$use_include_path = 10;
+$extra_arg = 10;
+var_dump( gzopen($filename, $mode, $use_include_path, $extra_arg) );
+
+// Testing gzopen with one less than the expected number of arguments
+echo "\n-- Testing gzopen() function with less than expected no. of arguments --\n";
+$filename = 'string_val';
+var_dump( gzopen($filename) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gzopen() : error conditions ***
+
+-- Testing gzopen() function with more than expected no. of arguments --
+
+Warning: gzopen() expects at most 3 parameters, 4 given in %s on line %d
+NULL
+
+-- Testing gzopen() function with less than expected no. of arguments --
+
+Warning: gzopen() expects at least 2 parameters, 1 given in %s on line %d
+NULL
+===DONE===
diff --git a/ext/zlib/tests/gzopen_include_path.inc b/ext/zlib/tests/gzopen_include_path.inc
new file mode 100644
index 000000000..7d6723a81
--- /dev/null
+++ b/ext/zlib/tests/gzopen_include_path.inc
@@ -0,0 +1,92 @@
+<?php
+$pwd = getcwd();
+$f = basename(__FILE__);
+$dir1 = $pwd."/".$f.".dir1";
+$dir2 = $pwd."/".$f.".dir2";
+$dir3 = $pwd."/".$f.".dir3";
+//invalid directory
+$dir4 = $pwd."/".$f.".dir4";
+$newdirs = array($dir1, $dir2, $dir3);
+
+$reldirs = array("dir1", "dir2", "dir3");
+
+function generate_next_rel_path() {
+ global $reldirs;
+ //create the include directory structure
+ $pathSep = ":";
+ $newIncludePath = "";
+ if(substr(PHP_OS, 0, 3) == 'WIN' ) {
+ $pathSep = ";";
+ }
+ foreach($reldirs as $newdir) {
+ $newIncludePath .= $newdir.$pathSep;
+ }
+ return "dir4".$pathSep . $newIncludePath;
+}
+
+function generate_next_path() {
+ global $newdirs, $dir4;
+ //create the include directory structure
+ $pathSep = ":";
+ $newIncludePath = "";
+ if(substr(PHP_OS, 0, 3) == 'WIN' ) {
+ $pathSep = ";";
+ }
+ foreach($newdirs as $newdir) {
+ $newIncludePath .= $newdir.$pathSep;
+ }
+ return $dir4.$pathSep . $newIncludePath;
+}
+
+
+function create_include_path() {
+
+ global $newdirs;
+ //create the include directory structure
+ $pathSep = ":";
+ $newIncludePath = "";
+ if(substr(PHP_OS, 0, 3) == 'WIN' ) {
+ $pathSep = ";";
+ }
+ foreach($newdirs as $newdir) {
+ mkdir($newdir);
+ $newIncludePath .= $newdir.$pathSep;
+ }
+ return $newIncludePath;
+}
+
+function relative_include_path() {
+
+ global $reldirs;
+ //create the include directory structure
+ $pathSep = ":";
+ $newIncludePath = "";
+ if(substr(PHP_OS, 0, 3) == 'WIN' ) {
+ $pathSep = ";";
+ }
+ foreach($reldirs as $newdir) {
+ mkdir($newdir);
+ $newIncludePath .= $newdir.$pathSep;
+ }
+ return $newIncludePath;
+}
+
+
+function teardown_include_path() {
+
+ global $newdirs;
+ // remove the directory structure
+ foreach($newdirs as $newdir) {
+ rmdir($newdir);
+ }
+}
+
+function teardown_relative_path() {
+
+ global $reldirs;
+ // remove the directory structure
+ foreach($reldirs as $newdir) {
+ rmdir($newdir);
+ }
+}
+?> \ No newline at end of file
diff --git a/ext/zlib/tests/gzopen_variation1.phpt b/ext/zlib/tests/gzopen_variation1.phpt
new file mode 100644
index 000000000..ea4836f24
--- /dev/null
+++ b/ext/zlib/tests/gzopen_variation1.phpt
@@ -0,0 +1,227 @@
+--TEST--
+Test gzopen() function : usage variation
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - zlib extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : resource gzopen(string filename, string mode [, int use_include_path])
+ * Description: Open a .gz-file and return a .gz-file pointer
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gzopen() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$mode = 'r';
+$use_include_path = false;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for filename
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gzopen($value, $mode, $use_include_path) );
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gzopen() : usage variation ***
+
+--int 0--
+Error: 2 - gzopen(0): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--int 1--
+Error: 2 - gzopen(1): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - gzopen(12345): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - gzopen(-2345): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - gzopen(10.5): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - gzopen(-10.5): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - gzopen(123456789000): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - gzopen(-123456789000): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--float .5--
+Error: 2 - gzopen(0.5): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--empty array--
+Error: 2 - gzopen() expects parameter 1 to be string, array given, %s(%d)
+NULL
+
+--int indexed array--
+Error: 2 - gzopen() expects parameter 1 to be string, array given, %s(%d)
+NULL
+
+--associative array--
+Error: 2 - gzopen() expects parameter 1 to be string, array given, %s(%d)
+NULL
+
+--nested arrays--
+Error: 2 - gzopen() expects parameter 1 to be string, array given, %s(%d)
+NULL
+
+--uppercase NULL--
+Error: 2 - gzopen(): Filename cannot be empty, %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - gzopen(): Filename cannot be empty, %s(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - gzopen(1): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - gzopen(): Filename cannot be empty, %s(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - gzopen(1): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - gzopen(): Filename cannot be empty, %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - gzopen(): Filename cannot be empty, %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - gzopen(): Filename cannot be empty, %s(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - gzopen(Class A object): failed to open stream: No such file or directory, %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - gzopen() expects parameter 1 to be string, object given, %s(%d)
+NULL
+
+--undefined var--
+Error: 2 - gzopen(): Filename cannot be empty, %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - gzopen(): Filename cannot be empty, %s(%d)
+bool(false)
+
+--resource--
+Error: 2 - gzopen() expects parameter 1 to be string, resource given, %s(%d)
+NULL
+===DONE===
diff --git a/ext/zlib/tests/gzopen_variation2.phpt b/ext/zlib/tests/gzopen_variation2.phpt
new file mode 100644
index 000000000..458293514
--- /dev/null
+++ b/ext/zlib/tests/gzopen_variation2.phpt
@@ -0,0 +1,227 @@
+--TEST--
+Test gzopen() function : usage variation
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - zlib extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : resource gzopen(string filename, string mode [, int use_include_path])
+ * Description: Open a .gz-file and return a .gz-file pointer
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gzopen() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$filename = dirname(__FILE__)."/004.txt.gz";
+$use_include_path = false;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // int data
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for mode
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ var_dump( gzopen($filename, $value, $use_include_path) );
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gzopen() : usage variation ***
+
+--int 0--
+Error: 2 - gzopen(%s/004.txt.gz): failed to open stream: %s, %s(%d)
+bool(false)
+
+--int 1--
+Error: 2 - gzopen(%s/004.txt.gz): failed to open stream: %s, %s(%d)
+bool(false)
+
+--int 12345--
+Error: 2 - gzopen(%s/004.txt.gz): failed to open stream: %s, %s(%d)
+bool(false)
+
+--int -12345--
+Error: 2 - gzopen(%s/004.txt.gz): failed to open stream: %s, %s(%d)
+bool(false)
+
+--float 10.5--
+Error: 2 - gzopen(%s/004.txt.gz): failed to open stream: %s, %s(%d)
+bool(false)
+
+--float -10.5--
+Error: 2 - gzopen(%s/004.txt.gz): failed to open stream: %s, %s(%d)
+bool(false)
+
+--float 12.3456789000e10--
+Error: 2 - gzopen(%s/004.txt.gz): failed to open stream: %s, %s(%d)
+bool(false)
+
+--float -12.3456789000e10--
+Error: 2 - gzopen(%s/004.txt.gz): failed to open stream: %s, %s(%d)
+bool(false)
+
+--float .5--
+Error: 2 - gzopen(%s/004.txt.gz): failed to open stream: %s, %s(%d)
+bool(false)
+
+--empty array--
+Error: 2 - gzopen() expects parameter 2 to be string, array given, %s(%d)
+NULL
+
+--int indexed array--
+Error: 2 - gzopen() expects parameter 2 to be string, array given, %s(%d)
+NULL
+
+--associative array--
+Error: 2 - gzopen() expects parameter 2 to be string, array given, %s(%d)
+NULL
+
+--nested arrays--
+Error: 2 - gzopen() expects parameter 2 to be string, array given, %s(%d)
+NULL
+
+--uppercase NULL--
+Error: 2 - gzopen(%s/004.txt.gz): failed to open stream: %s, %s(%d)
+bool(false)
+
+--lowercase null--
+Error: 2 - gzopen(%s/004.txt.gz): failed to open stream: %s, %s(%d)
+bool(false)
+
+--lowercase true--
+Error: 2 - gzopen(%s/004.txt.gz): failed to open stream: %s, %s(%d)
+bool(false)
+
+--lowercase false--
+Error: 2 - gzopen(%s/004.txt.gz): failed to open stream: %s, %s(%d)
+bool(false)
+
+--uppercase TRUE--
+Error: 2 - gzopen(%s/004.txt.gz): failed to open stream: %s, %s(%d)
+bool(false)
+
+--uppercase FALSE--
+Error: 2 - gzopen(%s/004.txt.gz): failed to open stream: %s, %s(%d)
+bool(false)
+
+--empty string DQ--
+Error: 2 - gzopen(%s/004.txt.gz): failed to open stream: %s, %s(%d)
+bool(false)
+
+--empty string SQ--
+Error: 2 - gzopen(%s/004.txt.gz): failed to open stream: %s, %s(%d)
+bool(false)
+
+--instance of classWithToString--
+Error: 2 - gzopen(%s/004.txt.gz): failed to open stream: %s, %s(%d)
+bool(false)
+
+--instance of classWithoutToString--
+Error: 2 - gzopen() expects parameter 2 to be string, object given, %s(%d)
+NULL
+
+--undefined var--
+Error: 2 - gzopen(%s/004.txt.gz): failed to open stream: %s, %s(%d)
+bool(false)
+
+--unset var--
+Error: 2 - gzopen(%s/004.txt.gz): failed to open stream: %s, %s(%d)
+bool(false)
+
+--resource--
+Error: 2 - gzopen() expects parameter 2 to be string, resource given, %s(%d)
+NULL
+===DONE===
diff --git a/ext/zlib/tests/gzopen_variation3.phpt b/ext/zlib/tests/gzopen_variation3.phpt
new file mode 100644
index 000000000..1f6eb9bc2
--- /dev/null
+++ b/ext/zlib/tests/gzopen_variation3.phpt
@@ -0,0 +1,218 @@
+--TEST--
+Test gzopen() function : usage variation
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - zlib extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : resource gzopen(string filename, string mode [, int use_include_path])
+ * Description: Open a .gz-file and return a .gz-file pointer
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gzopen() : usage variation ***\n";
+
+// Define error handler
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+// Initialise function arguments not being substituted (if any)
+$filename = dirname(__FILE__)."/004.txt.gz";
+$mode = 'r';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// define some classes
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// add arrays
+$index_array = array (1, 2, 3);
+$assoc_array = array ('one' => 1, 'two' => 2);
+
+//array of values to iterate over
+$inputs = array(
+
+ // float data
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+
+ // array data
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+
+ // null data
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+
+ // boolean data
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+
+ // empty data
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+
+ // string data
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc,
+
+ // object data
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+
+ // undefined data
+ 'undefined var' => @$undefined_var,
+
+ // unset data
+ 'unset var' => @$unset_var,
+
+ // resource variable
+ 'resource' => $fp
+);
+
+// loop through each element of the array for use_include_path
+
+foreach($inputs as $key =>$value) {
+ echo "\n--$key--\n";
+ $res = gzopen($filename, $mode, $value);
+ var_dump($res);
+ if ($res !== false && $res != NULL) {
+ gzclose($res);
+ }
+};
+
+fclose($fp);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gzopen() : usage variation ***
+
+--float 10.5--
+resource(%d) of type (stream)
+
+--float -10.5--
+resource(%d) of type (stream)
+
+--float 12.3456789000e10--
+resource(%d) of type (stream)
+
+--float -12.3456789000e10--
+resource(%d) of type (stream)
+
+--float .5--
+resource(%d) of type (stream)
+
+--empty array--
+Error: 2 - gzopen() expects parameter 3 to be long, array given, %s(%d)
+NULL
+
+--int indexed array--
+Error: 2 - gzopen() expects parameter 3 to be long, array given, %s(%d)
+NULL
+
+--associative array--
+Error: 2 - gzopen() expects parameter 3 to be long, array given, %s(%d)
+NULL
+
+--nested arrays--
+Error: 2 - gzopen() expects parameter 3 to be long, array given, %s(%d)
+NULL
+
+--uppercase NULL--
+resource(%d) of type (stream)
+
+--lowercase null--
+resource(%d) of type (stream)
+
+--lowercase true--
+resource(%d) of type (stream)
+
+--lowercase false--
+resource(%d) of type (stream)
+
+--uppercase TRUE--
+resource(%d) of type (stream)
+
+--uppercase FALSE--
+resource(%d) of type (stream)
+
+--empty string DQ--
+Error: 2 - gzopen() expects parameter 3 to be long, string given, %s(%d)
+NULL
+
+--empty string SQ--
+Error: 2 - gzopen() expects parameter 3 to be long, string given, %s(%d)
+NULL
+
+--string DQ--
+Error: 2 - gzopen() expects parameter 3 to be long, string given, %s(%d)
+NULL
+
+--string SQ--
+Error: 2 - gzopen() expects parameter 3 to be long, string given, %s(%d)
+NULL
+
+--mixed case string--
+Error: 2 - gzopen() expects parameter 3 to be long, string given, %s(%d)
+NULL
+
+--heredoc--
+Error: 2 - gzopen() expects parameter 3 to be long, string given, %s(%d)
+NULL
+
+--instance of classWithToString--
+Error: 2 - gzopen() expects parameter 3 to be long, object given, %s(%d)
+NULL
+
+--instance of classWithoutToString--
+Error: 2 - gzopen() expects parameter 3 to be long, object given, %s(%d)
+NULL
+
+--undefined var--
+resource(%d) of type (stream)
+
+--unset var--
+resource(%d) of type (stream)
+
+--resource--
+Error: 2 - gzopen() expects parameter 3 to be long, resource given, %s(%d)
+NULL
+===DONE===
diff --git a/ext/zlib/tests/gzopen_variation4.phpt b/ext/zlib/tests/gzopen_variation4.phpt
new file mode 100644
index 000000000..17f64d9c1
--- /dev/null
+++ b/ext/zlib/tests/gzopen_variation4.phpt
@@ -0,0 +1,173 @@
+--TEST--
+Test gzopen() function : variation: use include path (relative directories in path)
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : resource gzopen(string filename, string mode [, int use_include_path])
+ * Description: Open a .gz-file and return a .gz-file pointer
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gzopen() : usage variation ***\n";
+
+require_once('reading_include_path.inc');
+
+//define the files to go into these directories, create one in dir2
+echo "\n--- testing include path ---\n";
+set_include_path($newIncludePath);
+$modes = array("r", "r+", "rt");
+foreach($modes as $mode) {
+ test_gzopen($mode);
+}
+restore_include_path();
+
+// remove the directory structure
+chdir($baseDir);
+rmdir($workingDir);
+foreach($newdirs as $newdir) {
+ rmdir($newdir);
+}
+
+chdir("..");
+rmdir($thisTestDir);
+
+function test_gzopen($mode) {
+ global $scriptFile, $secondFile, $firstFile, $filename;
+
+ // create a file in the middle directory
+ $h = gzopen($secondFile, "w");
+ gzwrite($h, "This is a file in dir2");
+ gzclose($h);
+
+ echo "\n** testing with mode=$mode **\n";
+ // should read dir2 file
+ $h = gzopen($filename, $mode, true);
+ gzpassthru($h);
+ gzclose($h);
+ echo "\n";
+
+ //create a file in dir1
+ $h = gzopen($firstFile, "w");
+ gzwrite($h, "This is a file in dir1");
+ gzclose($h);
+
+ //should now read dir1 file
+ $h = gzopen($filename, $mode, true);
+ gzpassthru($h);
+ gzclose($h);
+ echo "\n";
+
+ // create a file in working directory
+ $h = gzopen($filename, "w");
+ gzwrite($h, "This is a file in working dir");
+ gzclose($h);
+
+ //should still read dir1 file
+ $h = gzopen($filename, $mode, true);
+ gzpassthru($h);
+ gzclose($h);
+ echo "\n";
+
+ unlink($firstFile);
+ unlink($secondFile);
+
+ //should fail to read the file
+ $h = gzopen($filename, $mode, true);
+ gzpassthru($h);
+ gzclose($h);
+ echo "\n";
+
+ // create a file in the script directory
+ $h = gzopen($scriptFile, "w");
+ gzwrite($h, "This is a file in script dir");
+ gzclose($h);
+
+ //should read the file in script dir
+ $h = gzopen($filename, $mode, true);
+ gzpassthru($h);
+ gzclose($h);
+ echo "\n";
+
+ //cleanup
+ unlink($filename);
+ unlink($scriptFile);
+
+}
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gzopen() : usage variation ***
+
+--- testing include path ---
+
+** testing with mode=r **
+This is a file in dir2
+This is a file in dir1
+This is a file in dir1
+
+Warning: gzopen(afile.txt.gz): failed to open stream: No such file or directory in %s on line %d
+
+Warning: gzpassthru(): supplied argument is not a valid stream resource in %s on line %d
+
+Warning: gzclose(): supplied argument is not a valid stream resource in %s on line %d
+
+This is a file in script dir
+
+** testing with mode=r+ **
+
+Warning: gzopen(): cannot open a zlib stream for reading and writing at the same time! in %s on line %d
+
+Warning: gzpassthru(): supplied argument is not a valid stream resource in %s on line %d
+
+Warning: gzclose(): supplied argument is not a valid stream resource in %s on line %d
+
+
+Warning: gzopen(): cannot open a zlib stream for reading and writing at the same time! in %s on line %d
+
+Warning: gzpassthru(): supplied argument is not a valid stream resource in %s on line %d
+
+Warning: gzclose(): supplied argument is not a valid stream resource in %s on line %d
+
+
+Warning: gzopen(): cannot open a zlib stream for reading and writing at the same time! in %s on line %d
+
+Warning: gzpassthru(): supplied argument is not a valid stream resource in %s on line %d
+
+Warning: gzclose(): supplied argument is not a valid stream resource in %s on line %d
+
+
+Warning: gzopen(): cannot open a zlib stream for reading and writing at the same time! in %s on line %d
+
+Warning: gzpassthru(): supplied argument is not a valid stream resource in %s on line %d
+
+Warning: gzclose(): supplied argument is not a valid stream resource in %s on line %d
+
+
+Warning: gzopen(): cannot open a zlib stream for reading and writing at the same time! in %s on line %d
+
+Warning: gzpassthru(): supplied argument is not a valid stream resource in %s on line %d
+
+Warning: gzclose(): supplied argument is not a valid stream resource in %s on line %d
+
+
+** testing with mode=rt **
+This is a file in dir2
+This is a file in dir1
+This is a file in dir1
+
+Warning: gzopen(afile.txt.gz): failed to open stream: No such file or directory in %s on line %d
+
+Warning: gzpassthru(): supplied argument is not a valid stream resource in %s on line %d
+
+Warning: gzclose(): supplied argument is not a valid stream resource in %s on line %d
+
+This is a file in script dir
+===DONE===
+
diff --git a/ext/zlib/tests/gzopen_variation5.phpt b/ext/zlib/tests/gzopen_variation5.phpt
new file mode 100644
index 000000000..ec1bfa3c4
--- /dev/null
+++ b/ext/zlib/tests/gzopen_variation5.phpt
@@ -0,0 +1,71 @@
+--TEST--
+Test gzopen() function : variation: use include path and stream context create a file, relative path
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : resource gzopen(string filename, string mode [, int use_include_path])
+ * Description: Open a .gz-file and return a .gz-file pointer
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+require_once('gzopen_include_path.inc');
+
+echo "*** Testing gzopen() : variation ***\n";
+$thisTestDir = "gzopenVariation5.dir";
+mkdir($thisTestDir);
+chdir($thisTestDir);
+
+$newpath = relative_include_path();
+set_include_path($newpath);
+runtest();
+$newpath = generate_next_rel_path();
+set_include_path($newpath);
+runtest();
+
+teardown_relative_path();
+restore_include_path();
+chdir("..");
+rmdir($thisTestDir);
+
+function runtest() {
+ $tmpfile = 'gzopen_variation5.tmp';
+ $h = gzopen($tmpfile, "w", true);
+ fwrite($h, "This is the test file");
+ fclose($h);
+
+
+ $h = @gzopen($tmpfile, "r");
+ if ($h === false) {
+ echo "Not created in working dir\n";
+ }
+ else {
+ echo "created in working dir\n";
+ gzclose($h);
+ unlink($tmpfile);
+ }
+
+ $h = gzopen('dir1/'.$tmpfile, "r");
+ if ($h === false) {
+ echo "Not created in dir1\n";
+ }
+ else {
+ echo "created in dir1\n";
+ gzclose($h);
+ unlink('dir1/'.$tmpfile);
+ }
+}
+?>
+===DONE===
+--EXPECT--
+*** Testing gzopen() : variation ***
+Not created in working dir
+created in dir1
+Not created in working dir
+created in dir1
+===DONE===
diff --git a/ext/zlib/tests/gzopen_variation6.phpt b/ext/zlib/tests/gzopen_variation6.phpt
new file mode 100644
index 000000000..9fe3f24b4
--- /dev/null
+++ b/ext/zlib/tests/gzopen_variation6.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test gzopen() function : variation: relative/absolute file
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : resource gzopen(string filename, string mode [, int use_include_path])
+ * Description: Open a .gz-file and return a .gz-file pointer
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gzopen() : variation ***\n";
+$absfile = __FILE__.'.tmp';
+$relfile = "gzopen_variation6.tmp";
+
+$h = gzopen($absfile, "w");
+gzwrite($h, "This is an absolute file");
+gzclose($h);
+
+$h = gzopen($relfile, "w");
+gzwrite($h, "This is a relative file");
+gzclose($h);
+
+$h = gzopen($absfile, "r");
+gzpassthru($h);
+fclose($h);
+echo "\n";
+
+$h = gzopen($relfile, "r");
+gzpassthru($h);
+gzclose($h);
+echo "\n";
+
+unlink($absfile);
+unlink($relfile);
+?>
+===DONE===
+--EXPECTF--
+*** Testing gzopen() : variation ***
+This is an absolute file
+This is a relative file
+===DONE===
diff --git a/ext/zlib/tests/gzopen_variation7.phpt b/ext/zlib/tests/gzopen_variation7.phpt
new file mode 100644
index 000000000..92642b099
--- /dev/null
+++ b/ext/zlib/tests/gzopen_variation7.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Test function gzopen() by calling it twice on the same file and not closing one of them at the end of the script
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+
+$f = dirname(__FILE__)."/004.txt.gz";
+$h1 = gzopen($f, 'r');
+$h2 = gzopen($f, 'r');
+
+var_dump(gzread($h1, 30));
+var_dump(gzread($h2, 10));
+var_dump(gzread($h1, 15));
+gzclose($h1);
+var_dump(gzread($h2, 50));
+// deliberately do not close $h2
+?>
+===DONE===
+--EXPECT--
+string(30) "When you're taught through fee"
+string(10) "When you'r"
+string(15) "lings
+Destiny f"
+string(50) "e taught through feelings
+Destiny flying high abov"
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzopen_variation8.phpt b/ext/zlib/tests/gzopen_variation8.phpt
new file mode 100644
index 000000000..bb0126227
--- /dev/null
+++ b/ext/zlib/tests/gzopen_variation8.phpt
@@ -0,0 +1,42 @@
+--TEST--
+Test gzopen() function : variation: opening a plain file
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : resource gzopen(string filename, string mode [, int use_include_path])
+ * Description: Open a .gz-file and return a .gz-file pointer
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gzopen() : variation ***\n";
+
+$data = <<<EOT
+Here is some plain
+text to be read
+and displayed.
+EOT;
+
+$file = "gzopen_variation8.tmp";
+$h = fopen($file, 'w');
+fwrite($h, $data);
+fclose($h);
+
+$h = gzopen($file, 'r');
+gzpassthru($h);
+gzclose($h);
+echo "\n";
+unlink($file);
+?>
+===DONE===
+--EXPECT--
+*** Testing gzopen() : variation ***
+Here is some plain
+text to be read
+and displayed.
+===DONE===
diff --git a/ext/zlib/tests/gzopen_variation9.phpt b/ext/zlib/tests/gzopen_variation9.phpt
new file mode 100644
index 000000000..7a44b6eb0
--- /dev/null
+++ b/ext/zlib/tests/gzopen_variation9.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Test gzopen() function : variation: try opening with possibly invalid modes
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : resource gzopen(string filename, string mode [, int use_include_path])
+ * Description: Open a .gz-file and return a .gz-file pointer
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+echo "*** Testing gzopen() : variation ***\n";
+
+$modes = array('r+', 'rf', 'w+' , 'e');
+
+$file = dirname(__FILE__)."/004.txt.gz";
+
+foreach ($modes as $mode) {
+ echo "mode=$mode\n";
+ $h = gzopen($file, $mode);
+ echo "gzopen=";
+ var_dump($h);
+ if ($h !== false) {
+ gzclose($h);
+ }
+ echo "\n";
+}
+?>
+===DONE===
+--EXPECTF--
+*** Testing gzopen() : variation ***
+mode=r+
+
+Warning: gzopen(): cannot open a zlib stream for reading and writing at the same time! in %s on line %d
+gzopen=bool(false)
+
+mode=rf
+gzopen=resource(%d) of type (stream)
+
+mode=w+
+
+Warning: gzopen(): cannot open a zlib stream for reading and writing at the same time! in %s on line %d
+gzopen=bool(false)
+
+mode=e
+
+Warning: gzopen(%s/004.txt.gz): failed to open stream: %s in %s on line %d
+gzopen=bool(false)
+
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzpassthru_basic.phpt b/ext/zlib/tests/gzpassthru_basic.phpt
new file mode 100644
index 000000000..931c2b22c
--- /dev/null
+++ b/ext/zlib/tests/gzpassthru_basic.phpt
@@ -0,0 +1,32 @@
+--TEST--
+Test function gzpassthru() by calling it with its expected arguments
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+
+// note that gzpassthru is an alias to fpassthru. parameter checking tests will be
+// the same as fpassthru
+
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f, 'r');
+var_dump(gzpassthru($h));
+var_dump(gzpassthru($h));
+gzclose($h);
+
+?>
+===DONE===
+--EXPECTF--
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+int(176)
+int(0)
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzpassthru_error.phpt b/ext/zlib/tests/gzpassthru_error.phpt
new file mode 100644
index 000000000..fda584f6d
--- /dev/null
+++ b/ext/zlib/tests/gzpassthru_error.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Test function gzpassthru() by calling it more than or less than its expected arguments
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+
+
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f, 'r');
+$extra_arg = 'nothing';
+var_dump(gzpassthru( $h, $extra_arg ) );
+var_dump(gzpassthru() );
+gzclose($h);
+
+?>
+===DONE===
+--EXPECTF--
+
+Warning: Wrong parameter count for gzpassthru() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for gzpassthru() in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzputs_basic.phpt b/ext/zlib/tests/gzputs_basic.phpt
new file mode 100644
index 000000000..7566e74e7
--- /dev/null
+++ b/ext/zlib/tests/gzputs_basic.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Test function gzputs() by calling it with its expected arguments
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+
+$filename = dirname(__FILE__)."/temp.txt.gz";
+$h = gzopen($filename, 'w');
+$str = "Here is the string to be written. ";
+$length = 10;
+var_dump(gzputs( $h, $str ) );
+var_dump(gzputs( $h, $str, $length ) );
+gzclose($h);
+
+$h = gzopen($filename, 'r');
+gzpassthru($h);
+gzclose($h);
+echo "\n";
+unlink($filename);
+?>
+===DONE===
+--EXPECT--
+int(34)
+int(10)
+Here is the string to be written. Here is th
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzread_basic.phpt b/ext/zlib/tests/gzread_basic.phpt
new file mode 100644
index 000000000..ecb62a825
--- /dev/null
+++ b/ext/zlib/tests/gzread_basic.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test function gzread() by calling it with its expected arguments
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+// note that gzread is an alias to fread. parameter checking tests will be
+// the same as fread
+
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f, 'r');
+$lengths = array(10, 14, 7, 99, 2000);
+
+foreach ($lengths as $length) {
+ var_dump(gzread( $h, $length ) );
+}
+gzclose($h);
+
+?>
+===DONE===
+--EXPECT--
+string(10) "When you'r"
+string(14) "e taught throu"
+string(7) "gh feel"
+string(99) "ings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns "
+string(46) "around
+and I know that it descends down on me
+"
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzread_error.phpt b/ext/zlib/tests/gzread_error.phpt
new file mode 100644
index 000000000..eab0f7dd7
--- /dev/null
+++ b/ext/zlib/tests/gzread_error.phpt
@@ -0,0 +1,32 @@
+--TEST--
+Test function gzread() by calling it more than or less than its expected arguments
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f, 'r');
+$length = 10;
+$extra_arg = 'nothing';
+
+var_dump(gzread( $h, $length, $extra_arg ) );
+
+var_dump(gzread());
+
+gzclose($h);
+
+?>
+===DONE===
+--EXPECTF--
+
+Warning: Wrong parameter count for gzread() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for gzread() in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzread_error2.phpt b/ext/zlib/tests/gzread_error2.phpt
new file mode 100644
index 000000000..fae635641
--- /dev/null
+++ b/ext/zlib/tests/gzread_error2.phpt
@@ -0,0 +1,32 @@
+--TEST--
+Test function gzread() by calling it invalid lengths
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f, 'r');
+var_dump(gzread($h, 10));
+var_dump(gzread($h, 0));
+var_dump(gzread($h, 5));
+var_dump(gzread($h, -1));
+var_dump(gzread($h, 8));
+gzclose($h);
+
+?>
+===DONE===
+--EXPECTF--
+string(10) "When you'r"
+
+Warning: gzread(): Length parameter must be greater than 0 in %s on line %d
+bool(false)
+string(5) "e tau"
+
+Warning: gzread(): Length parameter must be greater than 0 in %s on line %d
+bool(false)
+string(8) "ght thro"
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzread_variation1.phpt b/ext/zlib/tests/gzread_variation1.phpt
new file mode 100644
index 000000000..1f50d7712
--- /dev/null
+++ b/ext/zlib/tests/gzread_variation1.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test function gzread() by calling it while file open for writing
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+
+$filename = "temp.txt.gz";
+$h = gzopen($filename, 'w');
+$str = "Here is the string to be written. ";
+var_dump(gzread($h, 100));
+gzwrite( $h, $str);
+var_dump(gzread($h, 100));
+gzrewind($h);
+var_dump(gzread($h, 100));
+gzclose($h);
+
+$h = gzopen($filename, 'r');
+gzpassthru($h);
+gzclose($h);
+echo "\n";
+unlink($filename);
+?>
+===DONE===
+--EXPECT--
+string(0) ""
+string(0) ""
+string(0) ""
+Here is the string to be written.
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzrewind_basic.phpt b/ext/zlib/tests/gzrewind_basic.phpt
new file mode 100644
index 000000000..959f0fcde
--- /dev/null
+++ b/ext/zlib/tests/gzrewind_basic.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test function gzrewind() by calling it with its expected arguments when reading
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f, 'r');
+echo "test rewind before doing anything\n";
+var_dump(gzrewind($h));
+var_dump(gztell($h));
+echo "\nfirst 30 characters=".gzread($h, 30)."\n";
+var_dump(gztell($h));
+gzrewind($h);
+var_dump(gztell($h));
+echo "first 10 characters=".gzread($h, 10)."\n";
+gzrewind($h);
+echo "first 20 characters=".gzread($h, 20)."\n";
+gzclose($h);
+?>
+===DONE===
+--EXPECT--
+test rewind before doing anything
+bool(true)
+int(0)
+
+first 30 characters=When you're taught through fee
+int(30)
+int(0)
+first 10 characters=When you'r
+first 20 characters=When you're taught t
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzrewind_basic2.phpt b/ext/zlib/tests/gzrewind_basic2.phpt
new file mode 100644
index 000000000..f51751c61
--- /dev/null
+++ b/ext/zlib/tests/gzrewind_basic2.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test function gzrewind() by calling it with its expected arguments when reading
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f, 'r');
+
+// read to the end of the file
+echo "read to the end of the file, then rewind\n";
+gzread($h, 10000);
+var_dump(gzeof($h));
+var_dump(gztell($h));
+gzrewind($h);
+var_dump(gzeof($h));
+var_dump(gztell($h));
+echo "first 20 characters=".gzread($h,20)."\n";
+
+gzclose($h);
+?>
+===DONE===
+--EXPECT--
+read to the end of the file, then rewind
+bool(true)
+int(176)
+bool(false)
+int(0)
+first 20 characters=When you're taught t
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzrewind_error.phpt b/ext/zlib/tests/gzrewind_error.phpt
new file mode 100644
index 000000000..c6f2456b2
--- /dev/null
+++ b/ext/zlib/tests/gzrewind_error.phpt
@@ -0,0 +1,27 @@
+--TEST--
+Test function gzrewind() by calling it more than or less than its expected arguments
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f, 'r');
+$extra_arg = 'nothing';
+var_dump(gzrewind( $h, $extra_arg ) );
+var_dump(gzrewind());
+gzclose($h);
+
+?>
+===DONE===
+--EXPECTF--
+Warning: Wrong parameter count for gzrewind() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for gzrewind() in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzrewind_variation1.phpt b/ext/zlib/tests/gzrewind_variation1.phpt
new file mode 100644
index 000000000..82018627f
--- /dev/null
+++ b/ext/zlib/tests/gzrewind_variation1.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Test function gzrewind() by calling it with its expected arguments when writing
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$f = "temp2.txt.gz";
+$h = gzopen($f, 'w');
+gzwrite($h, b'The first string.');
+var_dump(gzrewind($h));
+gzwrite($h, b'The second string.');
+gzclose($h);
+
+$h = gzopen($f, 'r');
+gzpassthru($h);
+gzclose($h);
+unlink($f);
+echo "\n";
+?>
+===DONE===
+--EXPECT--
+bool(false)
+The first string.The second string.
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzseek_basic.phpt b/ext/zlib/tests/gzseek_basic.phpt
new file mode 100644
index 000000000..d641bad42
--- /dev/null
+++ b/ext/zlib/tests/gzseek_basic.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Test function gzseek() by calling it with its expected arguments when reading
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f, 'r');
+
+echo "move to the 50th byte\n";
+var_dump(gzseek( $h, 50 ) );
+echo "tell=".gztell($h)."\n";
+//read the next 10
+var_dump(gzread($h, 10));
+
+echo "\nmove forward to the 100th byte\n";
+var_dump(gzseek( $h, 100 ) );
+echo "tell=".gztell($h)."\n";
+//read the next 10
+var_dump(gzread($h, 10));
+
+echo "\nmove backward to the 20th byte\n";
+var_dump(gzseek( $h, 20 ) );
+echo "tell=".gztell($h)."\n";
+//read the next 10
+var_dump(gzread($h, 10));
+gzclose($h);
+?>
+===DONE===
+--EXPECT--
+move to the 50th byte
+int(0)
+tell=50
+string(10) " high abov"
+
+move forward to the 100th byte
+int(0)
+tell=100
+string(10) "Destiny wh"
+
+move backward to the 20th byte
+int(0)
+tell=20
+string(10) "hrough fee"
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzseek_basic2.phpt b/ext/zlib/tests/gzseek_basic2.phpt
new file mode 100644
index 000000000..a815b8ff4
--- /dev/null
+++ b/ext/zlib/tests/gzseek_basic2.phpt
@@ -0,0 +1,42 @@
+--TEST--
+Test function gzseek() by calling it with its expected arguments when writing
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$f = "temp3.txt.gz";
+$h = gzopen($f, 'w');
+$str1 = "This is the first line.";
+$str2 = "This is the second line.";
+gzwrite($h, $str1);
+echo "tell=".gztell($h)."\n";
+
+//seek forwards 20 bytes.
+gzseek($h, strlen($str1) + 20);
+echo "tell=".gztell($h)."\n";
+gzwrite($h, $str2);
+echo "tell=".gztell($h)."\n";
+gzclose($h);
+echo "\nreading the output file\n";
+$h = gzopen($f, 'r');
+echo gzread($h, strlen($str1))."\n";
+echo var_dump(bin2hex(gzread($h, 20)));
+echo gzread($h, strlen($str2))."\n";
+gzclose($h);
+unlink($f);
+?>
+===DONE===
+--EXPECT--
+tell=23
+tell=43
+tell=67
+
+reading the output file
+This is the first line.
+string(40) "0000000000000000000000000000000000000000"
+This is the second line.
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzseek_error.phpt b/ext/zlib/tests/gzseek_error.phpt
new file mode 100644
index 000000000..a7ca275e4
--- /dev/null
+++ b/ext/zlib/tests/gzseek_error.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test function gzseek() by calling it more than or less than its expected arguments
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f, 'r');
+$offset = 1;
+$whence = SEEK_SET;
+$extra_arg = 'nothing';
+
+var_dump(gzseek( $h, $offset, $whence, $extra_arg ) );
+var_dump(gzseek($h));
+var_dump(gzseek());
+
+?>
+===DONE===
+--EXPECTF--
+
+Warning: Wrong parameter count for gzseek() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for gzseek() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for gzseek() in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzseek_variation1.phpt b/ext/zlib/tests/gzseek_variation1.phpt
new file mode 100644
index 000000000..301b57d15
--- /dev/null
+++ b/ext/zlib/tests/gzseek_variation1.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test function gzseek() by seeking forward in write mode
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$f = "temp3.txt.gz";
+$h = gzopen($f, 'w');
+$str1 = "This is the first line.";
+$str2 = "This is the second line.";
+gzwrite($h, $str1);
+
+//seek forwards 20 bytes.
+gzseek($h, strlen($str1) + 20);
+gzwrite($h, $str2);
+gzclose($h);
+$h = gzopen($f, 'r');
+echo gzread($h, strlen($str1))."\n";
+echo var_dump(bin2hex(gzread($h, 20)));
+echo gzread($h, strlen($str2))."\n";
+gzclose($h);
+unlink($f);
+?>
+===DONE===
+--EXPECT--
+This is the first line.
+string(40) "0000000000000000000000000000000000000000"
+This is the second line.
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzseek_variation2.phpt b/ext/zlib/tests/gzseek_variation2.phpt
new file mode 100644
index 000000000..e70d6dd84
--- /dev/null
+++ b/ext/zlib/tests/gzseek_variation2.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Test function gzseek() by calling it with SEEK_SET when reading
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f, 'r');
+
+echo "move to the 50th byte\n";
+var_dump(gzseek( $h, 50, SEEK_SET ) );
+echo "tell=".gztell($h)."\n";
+//read the next 10
+var_dump(gzread($h, 10));
+
+echo "\nmove forward to the 100th byte\n";
+var_dump(gzseek( $h, 100, SEEK_SET ) );
+echo "tell=".gztell($h)."\n";
+//read the next 10
+var_dump(gzread($h, 10));
+
+echo "\nmove backward to the 20th byte\n";
+var_dump(gzseek( $h, 20, SEEK_SET ) );
+echo "tell=".gztell($h)."\n";
+//read the next 10
+var_dump(gzread($h, 10));
+gzclose($h);
+?>
+===DONE===
+--EXPECT--
+move to the 50th byte
+int(0)
+tell=50
+string(10) " high abov"
+
+move forward to the 100th byte
+int(0)
+tell=100
+string(10) "Destiny wh"
+
+move backward to the 20th byte
+int(0)
+tell=20
+string(10) "hrough fee"
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzseek_variation3.phpt b/ext/zlib/tests/gzseek_variation3.phpt
new file mode 100644
index 000000000..dee7c1302
--- /dev/null
+++ b/ext/zlib/tests/gzseek_variation3.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test function gzseek() by calling it with SEEK_CUR when reading
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f, 'r');
+
+echo "move to the 50th byte\n";
+var_dump(gzseek( $h, 50, SEEK_CUR ) );
+echo "tell=".gztell($h)."\n";
+//read the next 10
+var_dump(gzread($h, 10));
+
+echo "\nmove forward to the 94th byte\n";
+var_dump(gzseek( $h, 34, SEEK_CUR ) );
+echo "tell=".gztell($h)."\n";
+//read the next 10
+var_dump(gzread($h, 10));
+
+echo "\nmove backward to the 77th byte\n";
+var_dump(gzseek( $h, -27, SEEK_CUR ) );
+echo "tell=".gztell($h)."\n";
+//read the next 10
+var_dump(gzread($h, 10));
+gzclose($h);
+?>
+===DONE===
+--EXPECT--
+move to the 50th byte
+int(0)
+tell=50
+string(10) " high abov"
+
+move forward to the 94th byte
+int(0)
+tell=94
+string(10) "ze it
+Dest"
+
+move backward to the 77th byte
+int(0)
+tell=77
+string(10) "hat you ca"
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzseek_variation4.phpt b/ext/zlib/tests/gzseek_variation4.phpt
new file mode 100644
index 000000000..fc641f6c8
--- /dev/null
+++ b/ext/zlib/tests/gzseek_variation4.phpt
@@ -0,0 +1,42 @@
+--TEST--
+Test function gzseek() by calling it with SEEK_SET when writing
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$f = "temp3.txt.gz";
+$h = gzopen($f, 'w');
+$str1 = "This is the first line.";
+$str2 = "This is the second line.";
+gzwrite($h, $str1);
+echo "tell=".gztell($h)."\n";
+
+//seek forwards 20 bytes.
+gzseek($h, strlen($str1) + 20, SEEK_SET);
+echo "tell=".gztell($h)."\n";
+gzwrite($h, $str2);
+echo "tell=".gztell($h)."\n";
+gzclose($h);
+echo "\nreading the output file\n";
+$h = gzopen($f, 'r');
+echo gzread($h, strlen($str1))."\n";
+echo var_dump(bin2hex(gzread($h, 20)));
+echo gzread($h, strlen($str2))."\n";
+gzclose($h);
+unlink($f);
+?>
+===DONE===
+--EXPECT--
+tell=23
+tell=43
+tell=67
+
+reading the output file
+This is the first line.
+string(40) "0000000000000000000000000000000000000000"
+This is the second line.
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzseek_variation5.phpt b/ext/zlib/tests/gzseek_variation5.phpt
new file mode 100644
index 000000000..0167e204c
--- /dev/null
+++ b/ext/zlib/tests/gzseek_variation5.phpt
@@ -0,0 +1,42 @@
+--TEST--
+Test function gzseek() by calling it with SEEK_CUR when writing
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$f = "temp3.txt.gz";
+$h = gzopen($f, 'w');
+$str1 = "This is the first line.";
+$str2 = "This is the second line.";
+gzwrite($h, $str1);
+echo "tell=".gztell($h)."\n";
+
+//seek forwards 20 bytes.
+gzseek($h, 20, SEEK_CUR);
+echo "tell=".gztell($h)."\n";
+gzwrite($h, $str2);
+echo "tell=".gztell($h)."\n";
+gzclose($h);
+echo "\nreading the output file\n";
+$h = gzopen($f, 'r');
+echo gzread($h, strlen($str1))."\n";
+echo var_dump(bin2hex(gzread($h, 20)));
+echo gzread($h, strlen($str2))."\n";
+gzclose($h);
+unlink($f);
+?>
+===DONE===
+--EXPECT--
+tell=23
+tell=43
+tell=67
+
+reading the output file
+This is the first line.
+string(40) "0000000000000000000000000000000000000000"
+This is the second line.
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzseek_variation6.phpt b/ext/zlib/tests/gzseek_variation6.phpt
new file mode 100644
index 000000000..0c4630953
--- /dev/null
+++ b/ext/zlib/tests/gzseek_variation6.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Test function gzseek() by calling it with SEEK_END when reading
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f, 'r');
+// move 40 bytes
+echo "move 40 bytes\n";
+gzread($h, 40);
+echo "tell=";
+var_dump(gztell($h));
+echo "move to the end\n";
+var_dump(gzseek( $h, 0, SEEK_END ) );
+echo "tell=";
+var_dump(gztell($h));
+echo "eof=";
+var_dump(gzeof($h));
+//read the next 10
+var_dump(gzread($h, 10));
+gzclose($h);
+?>
+===DONE===
+--EXPECTF--
+move 40 bytes
+tell=int(40)
+move to the end
+
+Warning: gzseek(): SEEK_END is not supported in %s on line %d
+int(-1)
+tell=int(40)
+eof=bool(false)
+string(10) "iny flying"
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzseek_variation7.phpt b/ext/zlib/tests/gzseek_variation7.phpt
new file mode 100644
index 000000000..aab083465
--- /dev/null
+++ b/ext/zlib/tests/gzseek_variation7.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test function gzseek() by calling it with SEEK_END when writing
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$f = "temp3.txt.gz";
+$h = gzopen($f, 'w');
+$str1 = "This is the first line.";
+$str2 = "This is the second line.";
+gzwrite($h, $str1);
+echo "tell=";
+var_dump(gztell($h));
+
+//seek to the end which is not sensible of course.
+echo "move to the end of the file\n";
+var_dump(gzseek($h, 0, SEEK_END));
+echo "tell=";
+var_dump(gztell($h));
+gzwrite($h, $str2);
+echo "tell=";
+var_dump(gztell($h));
+gzclose($h);
+echo "\nreading the output file\n";
+$h = gzopen($f, 'r');
+gzpassthru($h);
+gzclose($h);
+echo "\n";
+unlink($f);
+?>
+===DONE===
+--EXPECTF--
+tell=int(23)
+move to the end of the file
+
+Warning: gzseek(): SEEK_END is not supported in %s on line %d
+int(-1)
+tell=int(23)
+tell=int(47)
+
+reading the output file
+This is the first line.This is the second line.
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gztell_basic.phpt b/ext/zlib/tests/gztell_basic.phpt
new file mode 100644
index 000000000..b6baf427d
--- /dev/null
+++ b/ext/zlib/tests/gztell_basic.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test function gztell() by calling it with its expected arguments when reading
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f, 'r');
+$intervals = array(7, 22, 54, 17, 27, 15, 1000);
+// tell should be 7, 29, 83, 100, 127, 142, 176 (176 is length of uncompressed file)
+
+var_dump(gztell($h));
+foreach ($intervals as $interval) {
+ gzread($h, $interval);
+ var_dump(gztell($h));
+}
+
+gzclose($h);
+?>
+===DONE===
+--EXPECT--
+int(0)
+int(7)
+int(29)
+int(83)
+int(100)
+int(127)
+int(142)
+int(176)
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gztell_basic2.phpt b/ext/zlib/tests/gztell_basic2.phpt
new file mode 100644
index 000000000..a8574eeaa
--- /dev/null
+++ b/ext/zlib/tests/gztell_basic2.phpt
@@ -0,0 +1,42 @@
+--TEST--
+Test function gztell() by calling it with its expected arguments when writing
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$f = "temp2.txt.gz";
+$h = gzopen($f, 'w');
+$sizes = array(7, 22, 54, 17, 27, 15, 1000);
+// tell should be 7, 29, 83, 100, 127, 142, 1142
+
+var_dump(gztell($h));
+foreach ($sizes as $size) {
+ echo "bytes written=".gzwrite($h, str_repeat(b'1', $size))."\n";;
+ echo "tell=".gztell($h)."\n";
+}
+
+gzclose($h);
+unlink($f);
+?>
+===DONE===
+--EXPECT--
+int(0)
+bytes written=7
+tell=7
+bytes written=22
+tell=29
+bytes written=54
+tell=83
+bytes written=17
+tell=100
+bytes written=27
+tell=127
+bytes written=15
+tell=142
+bytes written=1000
+tell=1142
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gztell_error.phpt b/ext/zlib/tests/gztell_error.phpt
new file mode 100644
index 000000000..63f3b9cef
--- /dev/null
+++ b/ext/zlib/tests/gztell_error.phpt
@@ -0,0 +1,26 @@
+--TEST--
+Test function gztell() by calling it more than or less than its expected arguments
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f, 'r');
+$extra_arg = 'nothing';
+var_dump(gztell( $h, $extra_arg ) );
+var_dump(gztell());
+gzclose($h);
+?>
+===DONE===
+--EXPECTF--
+
+Warning: Wrong parameter count for gztell() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for gztell() in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzuncompress_basic1.phpt b/ext/zlib/tests/gzuncompress_basic1.phpt
new file mode 100644
index 000000000..fa7f1759e
--- /dev/null
+++ b/ext/zlib/tests/gzuncompress_basic1.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test gzuncompress() function : basic functionality
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gzuncompress(string data [, int length])
+ * Description: Unzip a gzip-compressed string
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+include(dirname(__FILE__) . '/data.inc');
+
+echo "*** Testing gzuncompress() : basic functionality ***\n";
+
+
+// Initialise all required variables
+$compressed = gzcompress($data);
+
+echo "\n-- Basic decompress --\n";
+var_dump(strcmp($data, gzuncompress($compressed)));
+
+
+$length = 3547;
+echo "\n-- Calling gzuncompress() with max length of $length --\n";
+echo "Result length is ". strlen(gzuncompress($compressed, $length)) . "\n";
+
+?>
+===DONE===
+--EXPECT--
+*** Testing gzuncompress() : basic functionality ***
+
+-- Basic decompress --
+int(0)
+
+-- Calling gzuncompress() with max length of 3547 --
+Result length is 3547
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzuncompress_error1.phpt b/ext/zlib/tests/gzuncompress_error1.phpt
new file mode 100644
index 000000000..66e5b2ac4
--- /dev/null
+++ b/ext/zlib/tests/gzuncompress_error1.phpt
@@ -0,0 +1,84 @@
+--TEST--
+Test gzuncompress() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+/* Prototype : string gzuncompress(string data [, int length])
+ * Description: Unzip a gzip-compressed string
+ * Source code: ext/zlib/zlib.c
+ * Alias to functions:
+ */
+
+
+
+echo "*** Testing gzuncompress() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing gzuncompress() function with Zero arguments --\n";
+var_dump( gzuncompress() );
+
+//Test gzuncompress with one more than the expected number of arguments
+echo "\n-- Testing gzuncompress() function with more than expected no. of arguments --\n";
+$data = 'string_val';
+$length = 10;
+$extra_arg = 10;
+var_dump( gzuncompress($data, $length, $extra_arg) );
+
+
+echo "\n-- Testing with a buffer that is too small --\n";
+$short_len = strlen($data) - 1;
+$compressed = gzcompress($data);
+
+var_dump(gzuncompress($compressed, $short_len));
+
+
+echo "\n-- Testing with incorrect arguments --\n";
+var_dump(gzuncompress(123));
+
+class Tester {
+ function Hello() {
+ echo "Hello\n";
+ }
+}
+
+$testclass = new Tester();
+var_dump(gzuncompress($testclass));
+
+var_dump(gzuncompress($compressed, "this is not a number\n"));
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing gzuncompress() : error conditions ***
+
+-- Testing gzuncompress() function with Zero arguments --
+
+Warning: gzuncompress() expects at least 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing gzuncompress() function with more than expected no. of arguments --
+
+Warning: gzuncompress() expects at most 2 parameters, 3 given in %s on line %d
+NULL
+
+-- Testing with a buffer that is too small --
+
+Warning: gzuncompress(): buffer error in %s on line %d
+bool(false)
+
+-- Testing with incorrect arguments --
+
+Warning: gzuncompress(): data error in %s on line %d
+bool(false)
+
+Warning: gzuncompress() expects parameter 1 to be string, object given in %s on line %d
+NULL
+
+Warning: gzuncompress() expects parameter 2 to be long, string given in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzwrite_basic.phpt b/ext/zlib/tests/gzwrite_basic.phpt
new file mode 100644
index 000000000..0d7521625
--- /dev/null
+++ b/ext/zlib/tests/gzwrite_basic.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Test function gzwrite() by calling it with its expected arguments
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+
+$filename = "temp.txt.gz";
+$h = gzopen($filename, 'w');
+$str = "Here is the string to be written. ";
+$length = 10;
+var_dump(gzwrite( $h, $str ) );
+var_dump(gzwrite( $h, $str, $length ) );
+gzclose($h);
+
+$h = gzopen($filename, 'r');
+gzpassthru($h);
+gzclose($h);
+echo "\n";
+unlink($filename);
+?>
+===DONE===
+--EXPECT--
+int(34)
+int(10)
+Here is the string to be written. Here is th
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzwrite_error.phpt b/ext/zlib/tests/gzwrite_error.phpt
new file mode 100644
index 000000000..b77c64869
--- /dev/null
+++ b/ext/zlib/tests/gzwrite_error.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test function gzwrite() by calling it more than or less than its expected arguments
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$filename = "temp.txt.gz";
+$h = gzopen($filename, 'w');
+$str = "Here is the string to be written. ";
+$length = 10;
+$extra_arg = 'nothing';
+var_dump(gzwrite($h, $str, $length, $extra_arg));
+var_dump(gzwrite($h));
+var_dump(gzwrite());
+
+gzclose($h);
+unlink($filename);
+
+?>
+===DONE===
+--EXPECTF--
+
+Warning: Wrong parameter count for gzwrite() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for gzwrite() in %s on line %d
+NULL
+
+Warning: Wrong parameter count for gzwrite() in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzwrite_error2.phpt b/ext/zlib/tests/gzwrite_error2.phpt
new file mode 100644
index 000000000..691275055
--- /dev/null
+++ b/ext/zlib/tests/gzwrite_error2.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Test function gzwrite() by calling it invalid lengths
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+
+$filename = "temp.txt.gz";
+$h = gzopen($filename, 'w');
+$str = "Here is the string to be written. ";
+var_dump(gzwrite( $h, $str, 0 ) );
+var_dump(gzwrite( $h, $str, -1 ) );
+gzclose($h);
+
+$h = gzopen($filename, 'r');
+gzpassthru($h);
+gzclose($h);
+echo "\n";
+unlink($filename);
+?>
+===DONE===
+--EXPECT--
+int(0)
+int(0)
+
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/gzwrite_variation1.phpt b/ext/zlib/tests/gzwrite_variation1.phpt
new file mode 100644
index 000000000..bd3778e36
--- /dev/null
+++ b/ext/zlib/tests/gzwrite_variation1.phpt
@@ -0,0 +1,27 @@
+--TEST--
+Test function gzwrite() by calling it when file is opened for reading
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+
+$filename = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($filename, 'r');
+$str = "Here is the string to be written. ";
+$length = 10;
+var_dump(gzwrite( $h, $str ) );
+var_dump(gzread($h, 10));
+var_dump(gzwrite( $h, $str, $length ) );
+gzclose($h);
+
+?>
+===DONE===
+--EXPECT--
+int(0)
+string(10) "When you'r"
+int(0)
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/readgzfile_basic.phpt b/ext/zlib/tests/readgzfile_basic.phpt
new file mode 100644
index 000000000..2d180c1a5
--- /dev/null
+++ b/ext/zlib/tests/readgzfile_basic.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test function readgzfile() reading a gzip relative file
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+$plaintxt = b<<<EOT
+hello world
+is a very common test
+for all languages
+
+EOT;
+$dirname = 'readgzfile_temp';
+$filename = $dirname.'/plainfile.txt.gz';
+mkdir($dirname);
+$h = gzopen($filename, 'w');
+gzwrite($h, $plaintxt);
+gzclose($h);
+
+
+var_dump(readgzfile( $filename ) );
+
+unlink($filename);
+rmdir($dirname);
+?>
+===DONE===
+--EXPECT--
+hello world
+is a very common test
+for all languages
+int(52)
+===DONE===
diff --git a/ext/zlib/tests/readgzfile_basic2.phpt b/ext/zlib/tests/readgzfile_basic2.phpt
new file mode 100644
index 000000000..99d216a55
--- /dev/null
+++ b/ext/zlib/tests/readgzfile_basic2.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test function readgzfile() reading a plain relative file
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+$plaintxt = b<<<EOT
+hello world
+is a very common test
+for all languages
+
+EOT;
+$dirname = 'readgzfile_temp';
+$filename = $dirname.'/plainfile.txt';
+mkdir($dirname);
+$h = fopen($filename, 'w');
+fwrite($h, $plaintxt);
+fclose($h);
+
+
+var_dump(readgzfile( $filename ) );
+
+unlink($filename);
+rmdir($dirname);
+?>
+===DONE===
+--EXPECT--
+hello world
+is a very common test
+for all languages
+int(52)
+===DONE===
diff --git a/ext/zlib/tests/readgzfile_error.phpt b/ext/zlib/tests/readgzfile_error.phpt
new file mode 100644
index 000000000..4ec76d017
--- /dev/null
+++ b/ext/zlib/tests/readgzfile_error.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Test function readgzfile() by calling it more than or less than its expected arguments
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$filename = dirname(__FILE__)."/004.txt.gz";
+$use_include_path = false;
+$extra_arg = 'nothing';
+
+var_dump(readgzfile( $filename, $use_include_path, $extra_arg ) );
+
+var_dump(readgzfile( ) );
+
+
+?>
+===DONE===
+--EXPECTF--
+
+Warning: readgzfile() expects at most 2 parameters, 3 given in %s on line %d
+NULL
+
+Warning: readgzfile() expects at least 1 parameter, 0 given in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/readgzfile_variation1.phpt b/ext/zlib/tests/readgzfile_variation1.phpt
new file mode 100644
index 000000000..e31824ce1
--- /dev/null
+++ b/ext/zlib/tests/readgzfile_variation1.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test function readgzfile() by substituting agument 1 with array values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$use_include_path = false;
+
+
+$index_array = array(1, 2, 3);
+$assoc_array = array(1 => 'one', 2 => 'two');
+
+$variation = array(
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(readgzfile( $var , $use_include_path ) );
+}
+?>
+===DONE===
+--EXPECTF--
+
+Warning: readgzfile() expects parameter 1 to be string, array given in %s on line %d
+NULL
+
+Warning: readgzfile() expects parameter 1 to be string, array given in %s on line %d
+NULL
+
+Warning: readgzfile() expects parameter 1 to be string, array given in %s on line %d
+NULL
+
+Warning: readgzfile() expects parameter 1 to be string, array given in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/readgzfile_variation10.phpt b/ext/zlib/tests/readgzfile_variation10.phpt
new file mode 100644
index 000000000..29249a1f2
--- /dev/null
+++ b/ext/zlib/tests/readgzfile_variation10.phpt
@@ -0,0 +1,67 @@
+--TEST--
+Test function readgzfile() by substituting agument 2 with emptyUnsetUndefNull values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$filename = dirname(__FILE__)."/004.txt.gz";
+
+
+$unset_var = 10;
+unset($unset_var);
+
+$variation = array(
+ 'unset var' => @$unset_var,
+ 'undefined var' => @$undefined_var,
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(readgzfile( $filename, $var ) );
+}
+?>
+===DONE===
+--EXPECTF--
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+int(176)
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+int(176)
+
+Warning: readgzfile() expects parameter 2 to be long, string given in %s on line %d
+NULL
+
+Warning: readgzfile() expects parameter 2 to be long, string given in %s on line %d
+NULL
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+int(176)
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+int(176)
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/readgzfile_variation11.phpt b/ext/zlib/tests/readgzfile_variation11.phpt
new file mode 100644
index 000000000..4023211ff
--- /dev/null
+++ b/ext/zlib/tests/readgzfile_variation11.phpt
@@ -0,0 +1,64 @@
+--TEST--
+Test function readgzfile() by substituting agument 2 with float values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$filename = dirname(__FILE__)."/004.txt.gz";
+
+
+$variation = array(
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(readgzfile( $filename, $var ) );
+}
+?>
+===DONE===
+--EXPECT--
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+int(176)
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+int(176)
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+int(176)
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+int(176)
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+int(176)
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/readgzfile_variation12.phpt b/ext/zlib/tests/readgzfile_variation12.phpt
new file mode 100644
index 000000000..8c291a4f4
--- /dev/null
+++ b/ext/zlib/tests/readgzfile_variation12.phpt
@@ -0,0 +1,56 @@
+--TEST--
+Test function readgzfile() by substituting agument 2 with int values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$filename = dirname(__FILE__)."/004.txt.gz";
+
+
+$variation = array (
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(readgzfile( $filename, $var ) );
+}
+?>
+===DONE===
+--EXPECT--
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+int(176)
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+int(176)
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+int(176)
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+int(176)
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/readgzfile_variation13.phpt b/ext/zlib/tests/readgzfile_variation13.phpt
new file mode 100644
index 000000000..117860eb4
--- /dev/null
+++ b/ext/zlib/tests/readgzfile_variation13.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test function readgzfile() by substituting agument 2 with object values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$filename = $filename = dirname(__FILE__)."/004.txt.gz";
+
+
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+
+
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+$variation = array(
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(readgzfile( $filename, $var ) );
+}
+?>
+===DONE===
+--EXPECTF--
+Error: 2 - readgzfile() expects parameter 2 to be long, object given, %s(%d)
+NULL
+Error: 2 - readgzfile() expects parameter 2 to be long, object given, %s(%d)
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/readgzfile_variation14.phpt b/ext/zlib/tests/readgzfile_variation14.phpt
new file mode 100644
index 000000000..165bf59b8
--- /dev/null
+++ b/ext/zlib/tests/readgzfile_variation14.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test function readgzfile() by substituting agument 2 with string values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$filename = $filename = dirname(__FILE__)."/004.txt.gz";
+
+
+$heredoc = <<<EOT
+hello world
+EOT;
+
+$variation_array = array(
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc
+ );
+
+
+foreach ( $variation_array as $var ) {
+ var_dump(readgzfile( $filename, $var ) );
+}
+?>
+===DONE===
+--EXPECTF--
+
+Warning: readgzfile() expects parameter 2 to be long, string given in %s on line %d
+NULL
+
+Warning: readgzfile() expects parameter 2 to be long, string given in %s on line %d
+NULL
+
+Warning: readgzfile() expects parameter 2 to be long, string given in %s on line %d
+NULL
+
+Warning: readgzfile() expects parameter 2 to be long, string given in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/readgzfile_variation15.phpt b/ext/zlib/tests/readgzfile_variation15.phpt
new file mode 100644
index 000000000..43935b10a
--- /dev/null
+++ b/ext/zlib/tests/readgzfile_variation15.phpt
@@ -0,0 +1,93 @@
+--TEST--
+Test readgzfile() function : variation: use include path (relative directories in path)
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+require_once('reading_include_path.inc');
+
+//define the files to go into these directories, create one in dir2
+set_include_path($newIncludePath);
+test_readgzfile();
+restore_include_path();
+
+// remove the directory structure
+chdir($baseDir);
+rmdir($workingDir);
+foreach($newdirs as $newdir) {
+ rmdir($newdir);
+}
+
+chdir("..");
+rmdir($thisTestDir);
+
+function test_readgzfile() {
+ global $scriptFile, $secondFile, $firstFile, $filename;
+
+ // create a file in the middle directory
+ $h = gzopen($secondFile, "w");
+ gzwrite($h, "This is a file in dir2");
+ gzclose($h);
+
+ // should read dir2 file
+ echo "file content:";
+ readgzfile($filename, true);
+ echo "\n";
+
+ //create a file in dir1
+ $h = gzopen($firstFile, "w");
+ gzwrite($h, "This is a file in dir1");
+ gzclose($h);
+
+ //should now read dir1 file
+ echo "file content:";
+ readgzfile($filename, true);
+ echo "\n";
+
+ // create a file in working directory
+ $h = gzopen($filename, "w");
+ gzwrite($h, "This is a file in working dir");
+ gzclose($h);
+
+ //should still read dir1 file
+ echo "file content:";
+ readgzfile($filename, true);
+ echo "\n";
+
+ unlink($firstFile);
+ unlink($secondFile);
+
+ //should fail to read the file
+ echo "file content:";
+ readgzfile($filename, true);
+ echo "\n";
+
+ // create a file in the script directory
+ $h = gzopen($scriptFile, "w");
+ gzwrite($h, "This is a file in script dir");
+ gzclose($h);
+
+ //should read the file in script dir
+ echo "file content:";
+ readgzfile($filename, true);
+ echo "\n";
+
+ //cleanup
+ unlink($filename);
+ unlink($scriptFile);
+
+}
+
+?>
+===DONE===
+--EXPECT--
+file content:This is a file in dir2
+file content:This is a file in dir1
+file content:This is a file in dir1
+file content:
+file content:This is a file in script dir
+===DONE===
diff --git a/ext/zlib/tests/readgzfile_variation2.phpt b/ext/zlib/tests/readgzfile_variation2.phpt
new file mode 100644
index 000000000..367cc401b
--- /dev/null
+++ b/ext/zlib/tests/readgzfile_variation2.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Test function readgzfile() by substituting agument 1 with boolean values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$use_include_path =
+
+
+$variation = array(
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(readgzfile( $var , $use_include_path ) );
+}
+?>
+===DONE===
+--EXPECTF--
+
+Warning: readgzfile() expects parameter 2 to be long, array given in %s on line %d
+NULL
+
+Warning: readgzfile() expects parameter 2 to be long, array given in %s on line %d
+NULL
+
+Warning: readgzfile() expects parameter 2 to be long, array given in %s on line %d
+NULL
+
+Warning: readgzfile() expects parameter 2 to be long, array given in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/readgzfile_variation3.phpt b/ext/zlib/tests/readgzfile_variation3.phpt
new file mode 100644
index 000000000..6645d67b7
--- /dev/null
+++ b/ext/zlib/tests/readgzfile_variation3.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test function readgzfile() by substituting agument 1 with emptyUnsetUndefNull values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$use_include_path = false;
+
+
+$unset_var = 10;
+unset($unset_var);
+
+$variation = array(
+ 'unset var' => @$unset_var,
+ 'undefined var' => @$undefined_var,
+ 'empty string DQ' => "",
+ 'empty string SQ' => '',
+ 'uppercase NULL' => NULL,
+ 'lowercase null' => null,
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(readgzfile( $var , $use_include_path ) );
+}
+?>
+===DONE===
+--EXPECTF--
+Warning: readgzfile(): Filename cannot be empty in %s on line %d
+bool(false)
+
+Warning: readgzfile(): Filename cannot be empty in %s on line %d
+bool(false)
+
+Warning: readgzfile(): Filename cannot be empty in %s on line %d
+bool(false)
+
+Warning: readgzfile(): Filename cannot be empty in %s on line %d
+bool(false)
+
+Warning: readgzfile(): Filename cannot be empty in %s on line %d
+bool(false)
+
+Warning: readgzfile(): Filename cannot be empty in %s on line %d
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/readgzfile_variation4.phpt b/ext/zlib/tests/readgzfile_variation4.phpt
new file mode 100644
index 000000000..cbc561c71
--- /dev/null
+++ b/ext/zlib/tests/readgzfile_variation4.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Test function readgzfile() by substituting agument 1 with float values.
+--SKIPIF--
+<?php
+if (!extension_loaded(zlib)) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$use_include_path = false;
+
+
+$variation = array(
+ 'float 10.5' => 10.5,
+ 'float -10.5' => -10.5,
+ 'float 12.3456789000e10' => 12.3456789000e10,
+ 'float -12.3456789000e10' => -12.3456789000e10,
+ 'float .5' => .5,
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(readgzfile( $var , $use_include_path ) );
+}
+?>
+===DONE===
+--EXPECTF--
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/zlib/tests/readgzfile_variation5.phpt b/ext/zlib/tests/readgzfile_variation5.phpt
new file mode 100644
index 000000000..dde0dabdd
--- /dev/null
+++ b/ext/zlib/tests/readgzfile_variation5.phpt
@@ -0,0 +1,32 @@
+--TEST--
+Test function readgzfile() by substituting agument 1 with int values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$use_include_path = false;
+
+
+$variation = array (
+ 'int 0' => 0,
+ 'int 1' => 1,
+ 'int 12345' => 12345,
+ 'int -12345' => -2345,
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(readgzfile( $var , $use_include_path ) );
+}
+?>
+===DONE===
+--EXPECTF--
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/readgzfile_variation6.phpt b/ext/zlib/tests/readgzfile_variation6.phpt
new file mode 100644
index 000000000..1beeca764
--- /dev/null
+++ b/ext/zlib/tests/readgzfile_variation6.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Test function readgzfile() by substituting agument 1 with object values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$use_include_path = false;
+
+
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+ if (error_reporting() != 0) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
+}
+set_error_handler('test_error_handler');
+
+
+
+class classWithToString
+{
+ public function __toString() {
+ return "Class A object";
+ }
+}
+
+class classWithoutToString
+{
+}
+
+$variation = array(
+ 'instance of classWithToString' => new classWithToString(),
+ 'instance of classWithoutToString' => new classWithoutToString(),
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(readgzfile( $var , $use_include_path ) );
+}
+?>
+--EXPECTF--
+bool(false)
+Error: 2 - readgzfile() expects parameter 1 to be string, object given, %s(%d)
+NULL \ No newline at end of file
diff --git a/ext/zlib/tests/readgzfile_variation7.phpt b/ext/zlib/tests/readgzfile_variation7.phpt
new file mode 100644
index 000000000..df244d395
--- /dev/null
+++ b/ext/zlib/tests/readgzfile_variation7.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test function readgzfile() by substituting agument 1 with string values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$use_include_path = false;
+
+
+$heredoc = <<<EOT
+hello world
+EOT;
+
+$variation_array = array(
+ 'string DQ' => "string",
+ 'string SQ' => 'string',
+ 'mixed case string' => "sTrInG",
+ 'heredoc' => $heredoc
+ );
+
+
+foreach ( $variation_array as $var ) {
+ var_dump(readgzfile( $var , $use_include_path ) );
+}
+?>
+===DONE===
+--EXPECTF--
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+===DONE===
diff --git a/ext/zlib/tests/readgzfile_variation8.phpt b/ext/zlib/tests/readgzfile_variation8.phpt
new file mode 100644
index 000000000..2e155288f
--- /dev/null
+++ b/ext/zlib/tests/readgzfile_variation8.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Test function readgzfile() by substituting agument 2 with array values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$filename = dirname(__FILE__)."/004.txt.gz";
+
+
+$index_array = array(1, 2, 3);
+$assoc_array = array(1 => 'one', 2 => 'two');
+
+$variation = array(
+ 'empty array' => array(),
+ 'int indexed array' => $index_array,
+ 'associative array' => $assoc_array,
+ 'nested arrays' => array('foo', $index_array, $assoc_array),
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(readgzfile( $filename, $var ) );
+}
+?>
+===DONE===
+--EXPECTF--
+
+Warning: readgzfile() expects parameter 2 to be long, array given in %s on line %d
+NULL
+
+Warning: readgzfile() expects parameter 2 to be long, array given in %s on line %d
+NULL
+
+Warning: readgzfile() expects parameter 2 to be long, array given in %s on line %d
+NULL
+
+Warning: readgzfile() expects parameter 2 to be long, array given in %s on line %d
+NULL
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/readgzfile_variation9.phpt b/ext/zlib/tests/readgzfile_variation9.phpt
new file mode 100644
index 000000000..5cdb5b5da
--- /dev/null
+++ b/ext/zlib/tests/readgzfile_variation9.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Test function readgzfile() by substituting agument 2 with boolean values.
+--SKIPIF--
+<?php
+if (!extension_loaded('zlib')) die ('skip zlib extension not available in this build');
+?>
+--FILE--
+<?php
+
+
+$filename = dirname(__FILE__)."/004.txt.gz";
+
+$variation = array(
+ 'lowercase true' => true,
+ 'lowercase false' =>false,
+ 'uppercase TRUE' =>TRUE,
+ 'uppercase FALSE' =>FALSE,
+ );
+
+
+foreach ( $variation as $var ) {
+ var_dump(readgzfile( $filename, $var ) );
+}
+?>
+===DONE===
+--EXPECT--
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+int(176)
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+int(176)
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+int(176)
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+int(176)
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/reading_include_path.inc b/ext/zlib/tests/reading_include_path.inc
new file mode 100644
index 000000000..ee71bb9c4
--- /dev/null
+++ b/ext/zlib/tests/reading_include_path.inc
@@ -0,0 +1,27 @@
+<?php
+$thisTestDir = "zlibVariation.dir";
+mkdir($thisTestDir);
+chdir($thisTestDir);
+
+//create the include directory structure
+$workingDir = "workdir";
+$filename = "afile.txt.gz";
+$scriptDir = dirname(__FILE__);
+$baseDir = getcwd();
+$secondFile = $baseDir."/dir2/".$filename;
+$firstFile = "../dir1/".$filename;
+$scriptFile = $scriptDir.'/'.$filename;
+
+$newdirs = array("dir1", "dir2", "dir3");
+$pathSep = ":";
+$newIncludePath = "";
+if(substr(PHP_OS, 0, 3) == 'WIN' ) {
+ $pathSep = ";";
+}
+foreach($newdirs as $newdir) {
+ mkdir($newdir);
+ $newIncludePath .= '../'.$newdir.$pathSep;
+}
+mkdir($workingDir);
+chdir($workingDir);
+?> \ No newline at end of file
diff --git a/ext/zlib/tests/zlib_scheme_copy_basic.phpt b/ext/zlib/tests/zlib_scheme_copy_basic.phpt
new file mode 100644
index 000000000..028c029e6
--- /dev/null
+++ b/ext/zlib/tests/zlib_scheme_copy_basic.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test compress.zlib:// scheme with the copy function: compressed to compressed
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$inputFileName = dirname(__FILE__)."/004.txt.gz";
+$outputFileName = __FILE__.'.tmp';
+
+$srcFile = "compress.zlib://$inputFileName";
+$destFile = "compress.zlib://$outputFileName";
+copy($srcFile, $destFile);
+
+$h = gzopen($inputFileName, 'r');
+$org_data = gzread($h, 4096);
+gzclose($h);
+
+$h = gzopen($outputFileName, 'r');
+$copied_data = gzread($h, 4096);
+gzclose($h);
+
+if ($org_data == $copied_data) {
+ echo "OK: Copy identical\n";
+}
+else {
+ echo "FAILED: Copy not identical";
+}
+unlink($outputFileName);
+?>
+===DONE===
+--EXPECT--
+OK: Copy identical
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/zlib_scheme_copy_variation1.phpt b/ext/zlib/tests/zlib_scheme_copy_variation1.phpt
new file mode 100644
index 000000000..3c997ef7e
--- /dev/null
+++ b/ext/zlib/tests/zlib_scheme_copy_variation1.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Test compress.zlib:// scheme with the copy function: compressed to uncompressed
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$inputFileName = dirname(__FILE__)."/004.txt.gz";
+$outputFileName = __FILE__.'.tmp';
+
+$srcFile = "compress.zlib://$inputFileName";
+$destFile = $outputFileName;
+copy($srcFile, $destFile);
+
+$h = gzopen($inputFileName, 'r');
+$org_data = gzread($h, 4096);
+gzclose($h);
+
+// can only read uncompressed data
+$h = fopen($outputFileName, 'r');
+$copied_data = fread($h, 4096);
+gzclose($h);
+
+if ($org_data == $copied_data) {
+ echo "OK: Copy identical\n";
+}
+else {
+ echo "FAILED: Copy not identical";
+}
+unlink($outputFileName);
+?>
+===DONE===
+--EXPECT--
+OK: Copy identical
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/zlib_scheme_copy_variation2.phpt b/ext/zlib/tests/zlib_scheme_copy_variation2.phpt
new file mode 100644
index 000000000..0b56ec430
--- /dev/null
+++ b/ext/zlib/tests/zlib_scheme_copy_variation2.phpt
@@ -0,0 +1,53 @@
+--TEST--
+Test compress.zlib:// scheme with the copy function: uncompressed to compressed
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$org_data = <<<EOT
+uncompressed contents of 004.txt.gz is:
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+EOT;
+
+$inputFileName = __FILE__.'.org';
+$outputFileName = __FILE__.'.tmp';
+
+file_put_contents($inputFileName, $org_data);
+
+$srcFile = $inputFileName;
+$destFile = "compress.zlib://$outputFileName";
+copy($srcFile, $destFile);
+
+$h = gzopen($outputFileName, 'r');
+$copied_data = gzread($h, 4096);
+gzclose($h);
+
+//gzopen can read compressed and uncompressed so we
+//also need to look for the magic number (x1f x8b) to prove it
+//was compressed.
+$h = fopen($outputFileName, 'r');
+$magic = fread($h, 2);
+fclose($h);
+
+if ($org_data == $copied_data && bin2hex($magic) === '1f8b') {
+ echo "OK: Copy identical\n";
+}
+else {
+ echo "FAILED: Copy not identical\n";
+}
+unlink($inputFileName);
+unlink($outputFileName);
+?>
+===DONE===
+--EXPECT--
+OK: Copy identical
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/zlib_scheme_dir_basic.phpt b/ext/zlib/tests/zlib_scheme_dir_basic.phpt
new file mode 100644
index 000000000..02fe4fd35
--- /dev/null
+++ b/ext/zlib/tests/zlib_scheme_dir_basic.phpt
@@ -0,0 +1,26 @@
+--TEST--
+Test compress.zlib:// scheme with the directory functions
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$inputFileName = dirname(__FILE__)."/dir.gz";
+$srcFile = "compress.zlib://$inputFileName";
+var_dump(mkdir($srcFile));
+var_dump(is_dir($srcFile));
+var_dump(opendir($srcFile));
+var_dump(rmdir($srcFile));
+?>
+===DONE===
+--EXPECTF--
+bool(false)
+bool(false)
+
+Warning: opendir(compress.zlib://%s/dir.gz): failed to open dir: not implemented in %s on line %d
+bool(false)
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/zlib_scheme_file_basic.phpt b/ext/zlib/tests/zlib_scheme_file_basic.phpt
new file mode 100644
index 000000000..b8b60e40e
--- /dev/null
+++ b/ext/zlib/tests/zlib_scheme_file_basic.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Test compress.zlib:// scheme with the file
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$inputFileName = dirname(__FILE__)."/004.txt.gz";
+$srcFile = "compress.zlib://$inputFileName";
+$contents = file($srcFile);
+var_dump($contents);
+?>
+===DONE===
+--EXPECT--
+array(6) {
+ [0]=>
+ string(36) "When you're taught through feelings
+"
+ [1]=>
+ string(26) "Destiny flying high above
+"
+ [2]=>
+ string(38) "all I know is that you can realize it
+"
+ [3]=>
+ string(18) "Destiny who cares
+"
+ [4]=>
+ string(19) "as it turns around
+"
+ [5]=>
+ string(39) "and I know that it descends down on me
+"
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/zlib_scheme_file_get_contents_basic.phpt b/ext/zlib/tests/zlib_scheme_file_get_contents_basic.phpt
new file mode 100644
index 000000000..c679c46be
--- /dev/null
+++ b/ext/zlib/tests/zlib_scheme_file_get_contents_basic.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Test compress.zlib:// scheme with the file_get_contents
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$inputFileName = dirname(__FILE__)."/004.txt.gz";
+$srcFile = "compress.zlib://$inputFileName";
+$contents = file_get_contents($srcFile);
+echo $contents;
+?>
+===DONE===
+--EXPECT--
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/zlib_scheme_file_put_contents_basic.phpt b/ext/zlib/tests/zlib_scheme_file_put_contents_basic.phpt
new file mode 100644
index 000000000..8ea41df5a
--- /dev/null
+++ b/ext/zlib/tests/zlib_scheme_file_put_contents_basic.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Test compress.zlib:// scheme with the file_get_contents
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$outputFileName = __FILE__.'tmp';
+$outFile = "compress.zlib://$outputFileName";
+$data = <<<EOT
+Here is some plain
+text to be read
+and displayed.
+EOT;
+
+file_put_contents($outFile, $data);
+$h = gzopen($outputFileName, 'r');
+gzpassthru($h);
+gzclose($h);
+echo "\n";
+unlink($outputFileName);
+?>
+===DONE===
+--EXPECT--
+Here is some plain
+text to be read
+and displayed.
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/zlib_scheme_file_read_file_basic.phpt b/ext/zlib/tests/zlib_scheme_file_read_file_basic.phpt
new file mode 100644
index 000000000..ef44292c3
--- /dev/null
+++ b/ext/zlib/tests/zlib_scheme_file_read_file_basic.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Test compress.zlib:// scheme with the file_get_contents
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$inputFileName = dirname(__FILE__)."/004.txt.gz";
+$srcFile = "compress.zlib://$inputFileName";
+readfile($srcFile);
+?>
+===DONE===
+--EXPECT--
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/zlib_scheme_fopen_basic.phpt b/ext/zlib/tests/zlib_scheme_fopen_basic.phpt
new file mode 100644
index 000000000..d6d4514f7
--- /dev/null
+++ b/ext/zlib/tests/zlib_scheme_fopen_basic.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Test compress.zlib:// scheme with the fopen
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$inputFileName = dirname(__FILE__)."/004.txt.gz";
+$srcFile = "compress.zlib://$inputFileName";
+$h = fopen($srcFile, 'r');
+fpassthru($h);
+fclose($h);
+?>
+===DONE===
+--EXPECT--
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/zlib_scheme_fopen_variation1.phpt b/ext/zlib/tests/zlib_scheme_fopen_variation1.phpt
new file mode 100644
index 000000000..8c26492ef
--- /dev/null
+++ b/ext/zlib/tests/zlib_scheme_fopen_variation1.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Test compress.zlib:// scheme with the fopen on a file scheme
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$inputFileName = dirname(__FILE__)."/004.txt.gz";
+$srcFile = "file://$inputFileName";
+$compressedFile = "compress.zlib://$srcFile";
+
+echo "file=$compressedFile\n\n";
+$h = fopen($compressedFile, 'r');
+fpassthru($h);
+fclose($h);
+?>
+===DONE===
+--EXPECTF--
+file=compress.zlib://file://%s/004.txt.gz
+
+When you're taught through feelings
+Destiny flying high above
+all I know is that you can realize it
+Destiny who cares
+as it turns around
+and I know that it descends down on me
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/zlib_scheme_rename_basic.phpt b/ext/zlib/tests/zlib_scheme_rename_basic.phpt
new file mode 100644
index 000000000..9de55aa3e
--- /dev/null
+++ b/ext/zlib/tests/zlib_scheme_rename_basic.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Test compress.zlib:// scheme with the unlink function
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$inputFileName = dirname(__FILE__)."/004.txt.gz";
+$srcFile = "compress.zlib://$inputFileName";
+rename($srcFile, 'something.tmp');
+var_dump(file_exists($inputFileName));
+?>
+===DONE===
+--EXPECTF--
+
+Warning: rename(): ZLIB wrapper does not support renaming in %s on line %d
+bool(true)
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/zlib_scheme_stat_basic.phpt b/ext/zlib/tests/zlib_scheme_stat_basic.phpt
new file mode 100644
index 000000000..10cd9a4b0
--- /dev/null
+++ b/ext/zlib/tests/zlib_scheme_stat_basic.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Test compress.zlib:// scheme with the unlink function
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$inputFileName = dirname(__FILE__)."/004.txt.gz";
+$srcFile = "compress.zlib://$inputFileName";
+stat($srcFile);
+lstat($srcFile);
+?>
+===DONE===
+--EXPECTF--
+
+Warning: stat(): stat failed for compress.zlib://%s/004.txt.gz in %s on line %d
+
+Warning: lstat(): Lstat failed for compress.zlib://%s/004.txt.gz in %s on line %d
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/zlib_scheme_stat_basic2.phpt b/ext/zlib/tests/zlib_scheme_stat_basic2.phpt
new file mode 100644
index 000000000..e78bcd76c
--- /dev/null
+++ b/ext/zlib/tests/zlib_scheme_stat_basic2.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Test compress.zlib:// scheme with the unlink function
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$inputFileName = dirname(__FILE__)."/004.txt.gz";
+$srcFile = "compress.zlib://$inputFileName";
+echo "file_exists=";
+var_dump(file_exists($srcFile));
+echo "is_file=";
+var_dump(is_file($srcFile));
+echo "is_dir=";
+var_dump(is_dir($srcFile));
+echo "is_readable=";
+var_dump(is_readable($srcFile));
+echo "\n";
+echo "filesize=";
+var_dump(filesize($srcFile));
+echo "filetype=";
+var_dump(filetype($srcFile));
+echo "fileatime=";
+var_dump(fileatime($srcFile));
+
+?>
+===DONE===
+--EXPECTF--
+file_exists=bool(false)
+is_file=bool(false)
+is_dir=bool(false)
+is_readable=bool(false)
+
+filesize=
+Warning: filesize(): stat failed for compress.zlib://%s004.txt.gz in %s on line %d
+bool(false)
+filetype=
+Warning: filetype(): Lstat failed for compress.zlib://%s004.txt.gz in %s on line %d
+bool(false)
+fileatime=
+Warning: fileatime(): stat failed for compress.zlib://%s004.txt.gz in %s on line %d
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/zlib_scheme_unlink_basic.phpt b/ext/zlib/tests/zlib_scheme_unlink_basic.phpt
new file mode 100644
index 000000000..b05e45bc6
--- /dev/null
+++ b/ext/zlib/tests/zlib_scheme_unlink_basic.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Test compress.zlib:// scheme with the unlink function
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$inputFileName = dirname(__FILE__)."/004.txt.gz";
+$srcFile = "compress.zlib://$inputFileName";
+unlink($srcFile);
+var_dump(file_exists($inputFileName));
+?>
+===DONE===
+--EXPECTF--
+
+Warning: unlink(): ZLIB does not allow unlinking in %s on line %d
+bool(true)
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/zlib_wrapper_fflush_basic.phpt b/ext/zlib/tests/zlib_wrapper_fflush_basic.phpt
new file mode 100644
index 000000000..74ccc0dab
--- /dev/null
+++ b/ext/zlib/tests/zlib_wrapper_fflush_basic.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test function fflush() on a zlib stream wrapper
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+
+$filename = "temp.txt.gz";
+$h = gzopen($filename, 'w');
+$str = "Here is the string to be written.";
+$length = 10;
+var_dump(fflush($h));
+gzwrite( $h, $str);
+gzwrite( $h, $str);
+var_dump(fflush($h));
+gzclose($h);
+
+$h = gzopen($filename, 'r');
+gzpassthru($h);
+gzclose($h);
+echo "\n";
+unlink($filename);
+?>
+===DONE===
+--EXPECT--
+bool(true)
+bool(true)
+Here is the string to be written.Here is the string to be written.
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/zlib_wrapper_flock_basic.phpt b/ext/zlib/tests/zlib_wrapper_flock_basic.phpt
new file mode 100644
index 000000000..9cefce4cb
--- /dev/null
+++ b/ext/zlib/tests/zlib_wrapper_flock_basic.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Test function stream_get_meta_data on a zlib stream
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f,'r');
+var_dump(flock($h, LOCK_SH));
+gzclose($h);
+?>
+===DONE===
+--EXPECT--
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/zlib_wrapper_fstat_basic.phpt b/ext/zlib/tests/zlib_wrapper_fstat_basic.phpt
new file mode 100644
index 000000000..41f957e80
--- /dev/null
+++ b/ext/zlib/tests/zlib_wrapper_fstat_basic.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Test function fstat() on zlib wrapper
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f, "r");
+var_dump(fstat($h));
+fclose($h);
+?>
+===DONE===
+--EXPECT--
+bool(false)
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/zlib_wrapper_ftruncate_basic.phpt b/ext/zlib/tests/zlib_wrapper_ftruncate_basic.phpt
new file mode 100644
index 000000000..53b140ac5
--- /dev/null
+++ b/ext/zlib/tests/zlib_wrapper_ftruncate_basic.phpt
@@ -0,0 +1,32 @@
+--TEST--
+Test function ftruncate() on zlib wrapper by calling it with its expected arguments
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+$f = dirname(__FILE__)."/004.txt.gz";
+$f2 = "temp.txt.gz";
+copy($f, $f2);
+
+$h = gzopen($f2, "r");
+ftruncate($h, 20);
+fclose($h);
+unlink($f2);
+
+$h = gzopen($f2, "w");
+ftruncate($h, 20);
+fclose($h);
+unlink($f2);
+
+?>
+===DONE===
+--EXPECTF--
+
+Warning: ftruncate(): Can't truncate this stream! in %s on line %d
+
+Warning: ftruncate(): Can't truncate this stream! in %s on line %d
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/tests/zlib_wrapper_meta_data_basic.phpt b/ext/zlib/tests/zlib_wrapper_meta_data_basic.phpt
new file mode 100644
index 000000000..2f76b46d9
--- /dev/null
+++ b/ext/zlib/tests/zlib_wrapper_meta_data_basic.phpt
@@ -0,0 +1,65 @@
+--TEST--
+Test function stream_get_meta_data on a zlib stream
+--SKIPIF--
+<?php
+if (!extension_loaded("zlib")) {
+ print "skip - ZLIB extension not loaded";
+}
+?>
+--FILE--
+<?php
+echo "no wrapper\n";
+$f = dirname(__FILE__)."/004.txt.gz";
+$h = gzopen($f,'r');
+var_dump(stream_get_meta_data($h));
+gzclose($h);
+echo "\nwith wrapper\n";
+$f = "compress.zlib://".dirname(__FILE__)."/004.txt.gz";
+$h = fopen($f,'r');
+var_dump(stream_get_meta_data($h));
+gzclose($h);
+
+
+?>
+===DONE===
+--EXPECTF--
+no wrapper
+array(7) {
+ ["stream_type"]=>
+ string(4) "ZLIB"
+ ["mode"]=>
+ string(1) "r"
+ ["unread_bytes"]=>
+ int(0)
+ ["seekable"]=>
+ bool(true)
+ ["timed_out"]=>
+ bool(false)
+ ["blocked"]=>
+ bool(true)
+ ["eof"]=>
+ bool(false)
+}
+
+with wrapper
+array(9) {
+ ["wrapper_type"]=>
+ string(4) "ZLIB"
+ ["stream_type"]=>
+ string(4) "ZLIB"
+ ["mode"]=>
+ string(1) "r"
+ ["unread_bytes"]=>
+ int(0)
+ ["seekable"]=>
+ bool(true)
+ ["uri"]=>
+ string(%d) "compress.zlib://%s/004.txt.gz"
+ ["timed_out"]=>
+ bool(false)
+ ["blocked"]=>
+ bool(true)
+ ["eof"]=>
+ bool(false)
+}
+===DONE=== \ No newline at end of file
diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c
index 6b6c45453..3649acd50 100644
--- a/ext/zlib/zlib.c
+++ b/ext/zlib/zlib.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -19,7 +19,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zlib.c,v 1.183.2.6.2.6 2007/12/31 07:20:14 sebastian Exp $ */
+/* $Id: zlib.c,v 1.183.2.6.2.8 2008/12/31 11:17:47 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -156,6 +156,19 @@ zend_module_entry php_zlib_module_entry = {
ZEND_GET_MODULE(php_zlib)
#endif
+/* {{{ Memory management wrappers */
+
+static voidpf php_zlib_alloc(voidpf opaque, uInt items, uInt size)
+{
+ return (voidpf)safe_emalloc(items, size, 0);
+}
+
+static void php_zlib_free(voidpf opaque, voidpf address)
+{
+ efree((void*)address);
+}
+/* }}} */
+
/* {{{ OnUpdate_zlib_output_compression */
static PHP_INI_MH(OnUpdate_zlib_output_compression)
{
@@ -491,8 +504,8 @@ static PHP_FUNCTION(gzdeflate)
}
stream.data_type = Z_ASCII;
- stream.zalloc = (alloc_func) Z_NULL;
- stream.zfree = (free_func) Z_NULL;
+ stream.zalloc = php_zlib_alloc;
+ stream.zfree = php_zlib_free;
stream.opaque = (voidpf) Z_NULL;
stream.next_in = (Bytef *) data;
@@ -566,8 +579,8 @@ static PHP_FUNCTION(gzinflate)
that should be enaugh for all real life cases
*/
- stream.zalloc = (alloc_func) Z_NULL;
- stream.zfree = (free_func) Z_NULL;
+ stream.zalloc = php_zlib_alloc;
+ stream.zfree = php_zlib_free;
do {
length = plength ? plength : (unsigned long)data_len * (1 << factor++);
@@ -681,8 +694,8 @@ static int php_deflate_string(const char *str, uint str_length, char **newstr, u
int err;
if (do_start) {
- ZLIBG(stream).zalloc = Z_NULL;
- ZLIBG(stream).zfree = Z_NULL;
+ ZLIBG(stream).zalloc = php_zlib_alloc;
+ ZLIBG(stream).zfree = php_zlib_free;
ZLIBG(stream).opaque = Z_NULL;
switch (ZLIBG(compression_coding)) {
@@ -771,8 +784,8 @@ static PHP_FUNCTION(gzencode)
RETURN_FALSE;
}
- stream.zalloc = Z_NULL;
- stream.zfree = Z_NULL;
+ stream.zalloc = php_zlib_alloc;
+ stream.zfree = php_zlib_free;
stream.opaque = Z_NULL;
stream.next_in = (Bytef *) data;
diff --git a/ext/zlib/zlib_filter.c b/ext/zlib/zlib_filter.c
index e168c407f..55943cd00 100644
--- a/ext/zlib/zlib_filter.c
+++ b/ext/zlib/zlib_filter.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zlib_filter.c,v 1.6.2.2.2.11 2008/02/12 23:29:18 cellog Exp $ */
+/* $Id: zlib_filter.c,v 1.6.2.2.2.13 2008/12/31 11:17:47 sebastian Exp $ */
#include "php.h"
#include "php_zlib.h"
@@ -31,6 +31,7 @@ typedef struct _php_zlib_filter_data {
size_t inbuf_len;
char *outbuf;
size_t outbuf_len;
+ zend_bool finished;
} php_zlib_filter_data;
/* }}} */
@@ -81,6 +82,12 @@ static php_stream_filter_status_t php_zlib_inflate_filter(
bucket = php_stream_bucket_make_writeable(buckets_in->head TSRMLS_CC);
while (bin < bucket->buflen) {
+
+ if (data->finished) {
+ consumed += bucket->buflen;
+ break;
+ }
+
desired = bucket->buflen - bin;
if (desired > data->inbuf_len) {
desired = data->inbuf_len;
@@ -89,7 +96,10 @@ static php_stream_filter_status_t php_zlib_inflate_filter(
data->strm.avail_in = desired;
status = inflate(&(data->strm), flags & PSFS_FLAG_FLUSH_CLOSE ? Z_FINISH : Z_SYNC_FLUSH);
- if (status != Z_OK && status != Z_STREAM_END) {
+ if (status == Z_STREAM_END) {
+ inflateEnd(&(data->strm));
+ data->finished = '\1';
+ } else if (status != Z_OK) {
/* Something bad happened */
php_stream_bucket_delref(bucket TSRMLS_CC);
return PSFS_ERR_FATAL;
@@ -118,7 +128,7 @@ static php_stream_filter_status_t php_zlib_inflate_filter(
php_stream_bucket_delref(bucket TSRMLS_CC);
}
- if (flags & PSFS_FLAG_FLUSH_CLOSE) {
+ if (!data->finished && flags & PSFS_FLAG_FLUSH_CLOSE) {
/* Spit it out! */
status = Z_OK;
while (status == Z_OK) {
@@ -146,7 +156,9 @@ static void php_zlib_inflate_dtor(php_stream_filter *thisfilter TSRMLS_DC)
{
if (thisfilter && thisfilter->abstract) {
php_zlib_filter_data *data = thisfilter->abstract;
- inflateEnd(&(data->strm));
+ if (!data->finished) {
+ inflateEnd(&(data->strm));
+ }
pefree(data->inbuf, data->persistent);
pefree(data->outbuf, data->persistent);
pefree(data, data->persistent);
@@ -330,6 +342,7 @@ static php_stream_filter *php_zlib_filter_create(const char *filtername, zval *f
}
/* RFC 1951 Inflate */
+ data->finished = '\0';
status = inflateInit2(&(data->strm), windowBits);
fops = &php_zlib_inflate_ops;
} else if (strcasecmp(filtername, "zlib.deflate") == 0) {
diff --git a/ext/zlib/zlib_fopen_wrapper.c b/ext/zlib/zlib_fopen_wrapper.c
index 926a179df..286a523d6 100644
--- a/ext/zlib/zlib_fopen_wrapper.c
+++ b/ext/zlib/zlib_fopen_wrapper.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zlib_fopen_wrapper.c,v 1.46.2.1.2.5 2007/12/31 07:20:14 sebastian Exp $ */
+/* $Id: zlib_fopen_wrapper.c,v 1.46.2.1.2.7 2009/01/20 15:43:05 felipe Exp $ */
#define _GNU_SOURCE
@@ -60,6 +60,10 @@ static int php_gziop_seek(php_stream *stream, off_t offset, int whence, off_t *n
assert(self != NULL);
+ if (whence == SEEK_END) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "SEEK_END is not supported");
+ return -1;
+ }
*newoffs = gzseek(self->gz_file, offset, whence);
return (*newoffs < 0) ? -1 : 0;